diff --git a/src/api/base/xsQjApi.ts b/src/api/base/xsQjApi.ts
new file mode 100644
index 0000000..96f5334
--- /dev/null
+++ b/src/api/base/xsQjApi.ts
@@ -0,0 +1,94 @@
+import { get, post } from "@/utils/request";
+
+// 学生请假相关接口
+
+/**
+ * 家长添加学生请假申请
+ */
+export const jzAddXsQjApi = (data: any) => {
+ return post("/xsQj/jzAdd", data);
+};
+
+/**
+ * 家长获取学生请假列表
+ */
+export const jzXsQjListApi = (params: any) => {
+ return get("/xsQj/jzList", params);
+};
+
+/**
+ * 获取学生请假详情
+ */
+export const getXsQjDetailApi = (id: string) => {
+ return get("/xsQj/detail", { id });
+};
+
+/**
+ * 获取请假审批流程
+ */
+export const getXsQjApprovalProcessApi = (ywId: string, ywType: string = 'XS_QJ') => {
+ return get("/gzlSp/getByYwIdAndYwType", { ywId, ywType });
+};
+
+/**
+ * 教师审批学生请假
+ */
+export const approveXsQjApi = (data: any) => {
+ return post("/xsQj/approve", data);
+};
+
+/**
+ * 获取请假类型列表
+ */
+export const getQjTypeListApi = () => {
+ return get("/xsQj/qjTypeList");
+};
+
+/**
+ * 获取请假统计信息
+ */
+export const getQjStatisticsApi = (params: any) => {
+ return get("/xsQj/statistics", params);
+};
+
+/**
+ * 导出请假数据
+ */
+export const exportXsQjApi = (params: any) => {
+ return get("/xsQj/export", params);
+};
+
+/**
+ * 批量操作请假申请
+ */
+export const batchOperateXsQjApi = (data: any) => {
+ return post("/xsQj/batchOperate", data);
+};
+
+/**
+ * 获取请假审批历史
+ */
+export const getXsQjApprovalHistoryApi = (qjId: string) => {
+ return get("/xsQj/approvalHistory", { qjId });
+};
+
+/**
+ * 获取请假待办列表
+ */
+export const getXsQjTodoListApi = (params: any) => {
+ return get("/xsQj/todoList", params);
+};
+
+/**
+ * 获取请假已办列表
+ */
+export const getXsQjDoneListApi = (params: any) => {
+ return get("/xsQj/doneList", params);
+};
+
+/**
+ * 获取请假抄送列表
+ */
+export const getXsQjCcListApi = (params: any) => {
+ return get("/xsQj/ccList", params);
+};
diff --git a/src/pages/base/leave-request/components/progressList.vue b/src/pages/base/leave-request/components/progressList.vue
index ac3ab33..5704e97 100644
--- a/src/pages/base/leave-request/components/progressList.vue
+++ b/src/pages/base/leave-request/components/progressList.vue
@@ -1,63 +1,161 @@
-
审批进度
-
+
- {{ task.name }}
- {{ task.assignee || '' }}
+ {{ approver.userName }}
+ {{ getSpTypeText(approver.spType) }}
- {{ task.endTime }}
- 待处理
+ {{ formatTime(approver.approveTime) }}
+
+ {{ getStatusText(approver.approveStatus) }}
+
-
+
@@ -75,12 +173,6 @@ if (props.procInstId) {
color: #333;
margin-bottom: 10px;
- .title-icon {
- width: 24px;
- height: 24px;
- margin-right: 8px;
- }
-
.applicant-name {
font-size: 16px;
font-weight: bold;
@@ -99,51 +191,88 @@ if (props.procInstId) {
flex-direction: column;
.progress-item {
- .progress-item-row {
+ position: relative;
+
+ .progress-item-row {
display: flex;
align-items: center;
+ padding: 10px 0;
+
.item-avatar {
- flex: 0 0 40px;
+ width: 40px;
height: 40px;
+ border-radius: 50%;
+ overflow: hidden;
+ margin-right: 12px;
+ flex-shrink: 0;
}
.item-middle {
- margin-left: 16px;
+ flex: 1;
display: flex;
flex-direction: column;
+
+ .item-name {
+ font-size: 14px;
+ color: #333;
+ font-weight: 500;
+ margin-bottom: 4px;
+ }
+
+ .item-detail {
+ font-size: 12px;
+ color: #999;
+ }
}
.item-right {
- flex: 1 0 1px;
display: flex;
+ flex-direction: column;
align-items: flex-end;
+
+ .item-time {
+ font-size: 12px;
+ color: #999;
+ margin-bottom: 4px;
+ }
+
+ .item-status {
+ font-size: 12px;
+ padding: 2px 8px;
+ border-radius: 10px;
+
+ &.status-pending {
+ background-color: #fff7e6;
+ color: #fa8c16;
+ }
+
+ &.status-approved {
+ background-color: #f6ffed;
+ color: #52c41a;
+ }
+
+ &.status-rejected {
+ background-color: #fff2f0;
+ color: #ff4d4f;
+ }
+
+ &.status-cc {
+ background-color: #f0f5ff;
+ color: #1890ff;
+ }
+ }
}
}
+
.progress-item-line {
- width: 1px;
- height: 30px;
- background-color: #999;
- margin: 10px 20px;
+ height: 20px;
+ width: 2px;
+ background-color: #e8e8e8;
+ margin-left: 19px;
+ margin-top: -10px;
+ margin-bottom: -10px;
}
}
-
-
- .item-name {
- font-size: 16px;
- font-weight: bold;
- }
-
- .item-detail {
- font-size: 14px;
- color: #666;
- }
-
- .item-time,
- .item-status {
- font-size: 14px;
- color: #999;
- margin-left: auto;
- }
}
}
\ No newline at end of file
diff --git a/src/pages/base/leave-request/components/xsQjEdit.vue b/src/pages/base/leave-request/components/xsQjEdit.vue
index 69b4d2f..1966d54 100644
--- a/src/pages/base/leave-request/components/xsQjEdit.vue
+++ b/src/pages/base/leave-request/components/xsQjEdit.vue
@@ -2,6 +2,18 @@
+
+
+
+ 审批信息
+
+
+ 审批人:
+ {{ approverName }}
+ (班主任)
+
+
+
@@ -28,7 +40,7 @@
import { navigateBack } from "@/utils/uniapp";
import { useForm } from "@/components/BasicForm/hooks/useForm";
import { dicApi } from "@/api/system/dic";
-import { jzAddXsQjApi } from "@/api/base/server";
+import { jzAddXsQjApi } from "@/api/base/xsQjApi";
import { showToast } from "@/utils/uniapp";
import dayjs from "dayjs";
import { useUserStore } from "@/store/modules/user";
@@ -50,6 +62,7 @@ const props = withDefaults(defineProps<{
});
let formData = ref({});
+let approverName = ref(''); // 审批人姓名(班主任)
const [register, { getValue, setValue }] = useForm({
schema: [
@@ -138,6 +151,30 @@ const [register, { getValue, setValue }] = useForm({
setValue(props.data)
+// 获取默认审批人信息
+onMounted(async () => {
+ await getDefaultApprover();
+});
+
+const getDefaultApprover = async () => {
+ try {
+ // 根据学生ID获取班级信息,再获取班主任信息
+ // 这里可以根据实际API调整
+ if (getCurXs && getCurXs.bzrId) {
+ // 假设有获取班主任信息的API
+ // const response = await this.$api.getTeacherInfo(getCurXs.bzrId);
+ // if (response.success) {
+ // approverName.value = response.data.teacherName;
+ // }
+
+ // 临时显示班主任ID,实际应该显示姓名
+ approverName.value = getCurXs.bzrId;
+ }
+ } catch (error) {
+ console.error('获取审批人信息失败:', error);
+ }
+};
+
const changeKsTime = (selectedTime?: string) => {
if (!selectedTime) {
return;
@@ -186,11 +223,17 @@ const submit = async () => {
} else {
params.id = null;
params.xsId = getCurXs.id; // 学生ID
+ params.xsxm = getCurXs.xm; // 学生姓名
params.jsId = getCurXs.bzrId; // 班主任ID
params.xqId = getCurXs.xqId; // 学期ID
params.jzId = getUser.jzId; // 家长ID
}
params.flag = 2;
+
+ // 添加日志输出,方便调试
+ console.log('当前学生信息:', getCurXs);
+ console.log('提交参数:', params);
+
uni.showLoading({ title: "提交中..." });
await jzAddXsQjApi(params).then(() => {
showToast({ title: "提交成功", icon: "success" });
@@ -202,3 +245,50 @@ const submit = async () => {
};
+
+
diff --git a/src/pages/base/leave-request/detail.vue b/src/pages/base/leave-request/detail.vue
index 094200a..a7c332a 100644
--- a/src/pages/base/leave-request/detail.vue
+++ b/src/pages/base/leave-request/detail.vue
@@ -36,7 +36,7 @@
-
+
@@ -54,14 +54,42 @@