From c9ab421a35603bac9893150c795d613c06ddecb8 Mon Sep 17 00:00:00 2001 From: ywyonui Date: Thu, 28 Aug 2025 00:57:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=AD=A6=E7=94=9F=E8=AF=B7?= =?UTF-8?q?=E5=81=87=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/base/server.ts | 10 + src/pages.json | 7 + .../base/xs/qj/components/progressList.vue | 276 ++++++++++++++++++ src/pages/base/xs/qj/detail.vue | 187 ++++++++++++ src/pages/base/xs/qj/sp.vue | 86 ++++-- 5 files changed, 539 insertions(+), 27 deletions(-) create mode 100644 src/pages/base/xs/qj/components/progressList.vue create mode 100644 src/pages/base/xs/qj/detail.vue diff --git a/src/api/base/server.ts b/src/api/base/server.ts index 88faa4d..646f24d 100644 --- a/src/api/base/server.ts +++ b/src/api/base/server.ts @@ -179,6 +179,16 @@ export const xsQjSpApi = async (params: any) => { return await post("/api/xsQj/sp", params); }; +// 获取学生请假审批流程 +export const getXsQjApprovalProcessApi = async (ywId: string, ywType: string = 'XS_QJ') => { + return await get("/api/lcglSp/getByYwIdAndYwType", { ywId, ywType }); +}; + +// 获取学生请假详情 +export const getXsQjDetailApi = async (id: string) => { + return await get("/api/xsQj/getDetail", { id }); +}; + // 获取所有班级 export const bjFindAllApi = async (params: any) => { return await get("/api/bj/findAll", params); diff --git a/src/pages.json b/src/pages.json index ab8b9ff..413bd9e 100644 --- a/src/pages.json +++ b/src/pages.json @@ -546,6 +546,13 @@ "enablePullDownRefresh": false } }, + { + "path": "pages/base/xs/qj/detail", + "style": { + "navigationBarTitleText": "学生请假详情", + "enablePullDownRefresh": false + } + }, { "path": "pages/view/routine/qd/index", "style": { diff --git a/src/pages/base/xs/qj/components/progressList.vue b/src/pages/base/xs/qj/components/progressList.vue new file mode 100644 index 0000000..2bf7197 --- /dev/null +++ b/src/pages/base/xs/qj/components/progressList.vue @@ -0,0 +1,276 @@ + + + + + diff --git a/src/pages/base/xs/qj/detail.vue b/src/pages/base/xs/qj/detail.vue new file mode 100644 index 0000000..bb047d5 --- /dev/null +++ b/src/pages/base/xs/qj/detail.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/src/pages/base/xs/qj/sp.vue b/src/pages/base/xs/qj/sp.vue index b5f4fc5..5c8565e 100644 --- a/src/pages/base/xs/qj/sp.vue +++ b/src/pages/base/xs/qj/sp.vue @@ -4,7 +4,7 @@ - {{ xxtsData.dbZy }} + {{ xxtsData.xxzy }} 学生{{ qjData.xsxm }}的请假申请 @@ -35,13 +35,16 @@ - + + 审批意见 - + + + @@ -75,16 +78,20 @@ import { useUserStore } from "@/store/modules/user"; import { useDataStore } from "@/store/modules/data"; import { ref, nextTick } from "vue"; import { xxtsFindByIdApi, xxtsBlApi } from "@/api/base/server"; +import ProgressList from "./components/progressList.vue"; const { getJs, loginByOpenId } = useUserStore(); const { getData, setXxts, setData, getXxts } = useDataStore(); const dbFlag = ref(false); +// 从URL参数获取请假ID +const qjId = getData.id || ''; + const [register, { getValue }] = useForm({ schema: [ { - field: "flag", + field: "spStatus", label: "审批意见", component: "BasicCheckbox", required: true, @@ -93,13 +100,13 @@ const [register, { getValue }] = useForm({ }, componentProps: { data: [ - { value: 2, text: "同意" }, - { value: 1, text: "拒绝" }, + { value: 'approved', text: "同意" }, + { value: 'rejected', text: "拒绝" }, ], }, }, { - field: "comment", + field: "spYj", label: "审批说明", component: "BasicInput", required: true, @@ -108,6 +115,7 @@ const [register, { getValue }] = useForm({ }, componentProps: { type: "textarea", + placeholder: "请输入审批说明", }, }, ], @@ -115,25 +123,50 @@ const [register, { getValue }] = useForm({ // 请假基础数据 const qjData = computed(() => getData || {}); -const xxtsData = computed(() => getXxts || {}); +const xxtsData = ref({}) const submit = async () => { - const params = { - qjId: qjData.value.id, - jsId: getJs.id, - spStatus: 2, - spYj: "同意", - }; - uni.showLoading({ - title: "提交中...", - }); - const res = await xsQjSpApi(params); - // 如果是待办项,更新待办项状态 - if (dbFlag.value) { - await xxtsBlApi({ id: xxtsData.value.id }); + try { + const formData = await getValue(); + if (!formData.spStatus || !formData.spYj) { + uni.showToast({ + title: '请填写完整的审批信息', + icon: 'none' + }); + return; + } + + const params = { + qjId: qjData.value.id, + jsId: getJs.id, + spStatus: formData.spStatus, + spYj: formData.spYj, + }; + + uni.showLoading({ + title: "提交中...", + }); + + const res = await xsQjSpApi(params); + + uni.hideLoading(); + uni.showToast({ + title: '审批提交成功', + icon: 'success' + }); + + setTimeout(() => { + navigateBack(); + }, 1500); + + } catch (error) { + uni.hideLoading(); + uni.showToast({ + title: '提交失败,请重试', + icon: 'none' + }); + console.error('审批提交失败:', error); } - uni.hideLoading(); - navigateBack(); }; onLoad(async (data: any) => { @@ -153,7 +186,7 @@ onLoad(async (data: any) => { const xxtsRes = await xxtsFindByIdApi({ id: data.id }); if (xxtsRes && xxtsRes.result) { const xxts = xxtsRes.result; - + xxtsData.value = xxts; // 检查待办状态 if (xxts.dbZt === "B") { setData({ id: xxts.xxzbId }); @@ -172,7 +205,7 @@ onLoad(async (data: any) => { } catch (error) { console.error("获取待办信息失败", error); // 如果获取Xxts失败,回退到原来的逻辑 - const xxtsData = getXxts(); + const xxtsData = getXxts; if (xxtsData && xxtsData.dbZt === "B") { setData({ id: data.id }); let url = "/pages/base/xs/qj/detail"; @@ -222,7 +255,6 @@ onLoad(async (data: any) => { margin-bottom: 15px; } - .card-body { padding: 15px; @@ -244,6 +276,7 @@ onLoad(async (data: any) => { flex: 1; } } + .info-column { display: flex; flex-direction: column; @@ -264,7 +297,6 @@ onLoad(async (data: any) => { } } } - } .bottom-action {