From 2dbf09df94953f20ffa788ba944fb9c3d637fcb9 Mon Sep 17 00:00:00 2001 From: hebo Date: Fri, 24 Oct 2025 21:29:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E8=AF=B7=E5=81=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/base/server.ts | 5 + src/api/base/xsQjApi.ts | 61 ++ src/pages.json | 22 + src/pages/base/service/index.vue | 16 + src/pages/base/xs/qj/detail.vue | 125 +++- src/pages/base/xs/qj/detailPush.vue | 355 ++++++++++++ src/pages/base/xs/qj/sp.vue | 52 +- src/pages/base/xs/qj/statistics.vue | 547 ++++++++++++++++++ src/pages/components/YwConfirm/index.vue | 4 +- src/pages/view/routine/jstxl/index.vue | 526 +++++++++++++++++ .../view/routine/kefuxuncha/xcXkList.vue | 8 +- src/pages/view/routine/xk/dmList.vue | 2 +- src/static/base/home/jstxl.png | Bin 0 -> 6666 bytes src/static/base/home/xsqj.png | Bin 0 -> 6097 bytes src/static/base/view/sptg.png | Bin 0 -> 32760 bytes src/styles/global.scss | 64 -- 16 files changed, 1669 insertions(+), 118 deletions(-) create mode 100644 src/api/base/xsQjApi.ts create mode 100644 src/pages/base/xs/qj/detailPush.vue create mode 100644 src/pages/base/xs/qj/statistics.vue create mode 100644 src/pages/view/routine/jstxl/index.vue create mode 100644 src/static/base/home/jstxl.png create mode 100644 src/static/base/home/xsqj.png create mode 100644 src/static/base/view/sptg.png delete mode 100644 src/styles/global.scss diff --git a/src/api/base/server.ts b/src/api/base/server.ts index d4b9d33..ba91eb8 100644 --- a/src/api/base/server.ts +++ b/src/api/base/server.ts @@ -149,6 +149,11 @@ export const xsQjFindByIdApi = async (params: any) => { return await get("/api/xsQj/getDetail", params); }; +// 学生请假确认放行 +export const xsQjConfirmReleaseApi = async (params: any) => { + return await post("/api/xsQj/confirmRelease", params); +}; + // 学生请假审批 export const xsQjSpApi = async (params: any) => { return await post("/api/xsQj/sp", params); diff --git a/src/api/base/xsQjApi.ts b/src/api/base/xsQjApi.ts new file mode 100644 index 0000000..45858d3 --- /dev/null +++ b/src/api/base/xsQjApi.ts @@ -0,0 +1,61 @@ +import { get, post } from "@/utils/request"; + +/** + * 查询学生请假列表 + */ +export const findXsQjListApi = async (params: any) => { + return await get("/api/xsQj/findPage", params); +}; + +/** + * 根据ID获取学生请假详情 + */ +export const findXsQjByIdApi = async (params: { id: string }) => { + return await get("/api/xsQj/getDetail", params); +}; + +/** + * 学生请假审批 + */ +export const xsQjSpApi = async (params: any) => { + return await post("/api/xsQj/sp", params); +}; + +/** + * 学生请假审批终止 + */ +export const xsQjStopApi = async (params: any) => { + return await post("/api/xsQj/stop", params); +}; + +/** + * 学生请假审批转办 + */ +export const xsQjTransferApi = async (params: any) => { + return await post("/api/xsQj/transfer", params); +}; + +/** + * 学生请假统计 + * @param date 统计日期 格式:yyyy-MM-dd,不传默认当天 + */ +export const xsQjStatisticsApi = async (params?: { date?: string }) => { + return await get("/api/xsQj/statistics", params); +}; + +/** + * 获取学生请假审批流程 + * @param ywId 业务ID + * @param ywType 业务类型 + */ +export const getXsQjApprovalProcessApi = (ywId: string, ywType: string = 'XS_QJ') => { + return get("/api/lcglSp/getByYwIdAndYwType", { ywId, ywType }); +}; + +/** + * 确认放行 + */ +export const confirmReleaseApi = async (params: { id: string; fxjsId: string; fxjsxm: string }) => { + return await post("/api/xsQj/confirmRelease", params); +}; + diff --git a/src/pages.json b/src/pages.json index ff71cf3..db0cebe 100644 --- a/src/pages.json +++ b/src/pages.json @@ -706,6 +706,14 @@ "enablePullDownRefresh": false } }, + { + "path": "pages/view/routine/jstxl/index", + "style": { + "navigationBarTitleText": "教师通讯录", + "enablePullDownRefresh": false + } + }, + { "path": "pages/view/homeSchool/parentAddressBook/index", "style": { @@ -877,6 +885,20 @@ "enablePullDownRefresh": false } }, + { + "path": "pages/base/xs/qj/detailPush", + "style": { + "navigationBarTitleText": "学生请假推送", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/base/xs/qj/statistics", + "style": { + "navigationBarTitleText": "学生请假统计", + "enablePullDownRefresh": false + } + }, { "path": "pages/view/analysis/xs/studentArchive", "style": { diff --git a/src/pages/base/service/index.vue b/src/pages/base/service/index.vue index e8780de..2e4f6d4 100644 --- a/src/pages/base/service/index.vue +++ b/src/pages/base/service/index.vue @@ -544,6 +544,14 @@ const sections = reactive([ permissionKey: "home-dmtj", // 点名统计权限编码 path: "/pages/view/analysis/xk/dmXkList", }, + { + id: "hs6", + icon: "xsqj", + text: "学生请假", + show: true, + permissionKey: "home-xsqj", // 点名统计权限编码 + path: "/pages/base/xs/qj/statistics", + }, ], }, { @@ -583,6 +591,14 @@ const sections = reactive([ permissionKey: "personnel-gzt", // 工资条权限编码 path: "/pages/view/hr/salarySlip/index", }, + { + id: "hr4", + icon: "jstxl", + text: "教师通讯录", + show: true, + permissionKey: "personnel-jstxl", // 教师通讯录权限编码 + path: "/pages/view/routine/jstxl/index", + }, ], }, diff --git a/src/pages/base/xs/qj/detail.vue b/src/pages/base/xs/qj/detail.vue index cbf689d..b57468a 100644 --- a/src/pages/base/xs/qj/detail.vue +++ b/src/pages/base/xs/qj/detail.vue @@ -54,10 +54,10 @@ @@ -66,43 +66,108 @@ diff --git a/src/pages/base/xs/qj/detailPush.vue b/src/pages/base/xs/qj/detailPush.vue new file mode 100644 index 0000000..f3f8c19 --- /dev/null +++ b/src/pages/base/xs/qj/detailPush.vue @@ -0,0 +1,355 @@ + + + + + diff --git a/src/pages/base/xs/qj/sp.vue b/src/pages/base/xs/qj/sp.vue index 9a15b50..96e6407 100644 --- a/src/pages/base/xs/qj/sp.vue +++ b/src/pages/base/xs/qj/sp.vue @@ -4,8 +4,7 @@ - {{ xxtsData.xxzy }} - 学生{{ qjData.xsxm }}的请假申请 + 学生【{{ qjData.xsxm }}】的请假申请 @@ -43,8 +42,16 @@ @@ -61,24 +68,25 @@ import YwConfirm from "@/pages/components/YwConfirm/index.vue"; import { XkTfPageUtils } from "@/utils/xkTfPageUtils"; const { getJs, loginByOpenId } = useUserStore(); -const { getQjData, setXxts, setQjData, getXxts } = useDataStore(); +const dataStore = useDataStore(); +const { setXxts, setQjData } = dataStore; const dbFlag = ref(false); // 从URL参数获取请假ID const qjId = computed(() => { - return getQjData.id || ''; + return (dataStore.qjData as any)?.id || ''; }) const spParams = computed(() => { return { - xxtsId: getXxts.id, + xxtsId: (dataStore.xxts as any)?.id, ywId: qjId.value }; }); -// 请假基础数据 -const qjData = computed(() => getQjData || {}); +// 请假基础数据 - 直接访问 store 的 state,保持响应式 +const qjData = computed(() => (dataStore.qjData || {}) as any); const xxtsData = ref({}) onLoad(async (data: any) => { @@ -93,6 +101,9 @@ onLoad(async (data: any) => { return; } + // 等待下一个 tick 确保响应式更新完成 + await nextTick(); + try { // 优先从后端根据url中的id去查询Xxts const xxtsRes = await xxtsFindByIdApi({ id: data.id }); @@ -108,22 +119,27 @@ onLoad(async (data: any) => { } setXxts(xxts); + // 等待下一个 tick 确保响应式更新完成 + await nextTick(); + // 根据主表ID去查询学生请假信息 const res = await xsQjFindByIdApi({ id: xxts.xxzbId }); const xsQj = res.result || {}; - if (xsQj.spResult != "A" && getXxts && getXxts.dbZt === "A") { + + if (xsQj.spResult != "A" && dataStore.xxts && (dataStore.xxts as any).dbZt === "A") { uni.reLaunch({ url: '/pages/base/xs/qj/detail' }); const flag = await XkTfPageUtils.updateXxts(); } else { - nextTick(() => { - setQjData(xsQj); - }); + setQjData(xsQj); + + // 等待下一个 tick 确保响应式更新完成 + await nextTick(); } } } catch (error) { console.error("获取待办信息失败", error); // 如果获取Xxts失败,回退到原来的逻辑 - const xxtsData = getXxts; + const xxtsData = dataStore.xxts as any; if (xxtsData && xxtsData.dbZt === "B") { setQjData({ id: data.id }); let url = "/pages/base/xs/qj/detail"; @@ -131,9 +147,10 @@ onLoad(async (data: any) => { return; } const res = await xsQjFindByIdApi({ id: data.id }); - nextTick(() => { - setQjData(res.result); - }); + setQjData(res.result); + + // 等待下一个 tick 确保响应式更新完成 + await nextTick(); } } else { dbFlag.value = false; @@ -159,6 +176,7 @@ onLoad(async (data: any) => { font-weight: bold; color: #333; margin-bottom: 10px; + text-align: center; .applicant-name { font-size: 16px; diff --git a/src/pages/base/xs/qj/statistics.vue b/src/pages/base/xs/qj/statistics.vue new file mode 100644 index 0000000..b12949e --- /dev/null +++ b/src/pages/base/xs/qj/statistics.vue @@ -0,0 +1,547 @@ + + + + + + diff --git a/src/pages/components/YwConfirm/index.vue b/src/pages/components/YwConfirm/index.vue index d144427..dafc3ac 100644 --- a/src/pages/components/YwConfirm/index.vue +++ b/src/pages/components/YwConfirm/index.vue @@ -2,7 +2,7 @@ - + @@ -108,7 +108,7 @@ const closeDlg = () => { dlgFlag.value = false; }; -const showTransfer = () => { +const handleShowTransfer = () => { Transferflag.value = true; nextTick(() => { transferRef.value.showDlg(); diff --git a/src/pages/view/routine/jstxl/index.vue b/src/pages/view/routine/jstxl/index.vue new file mode 100644 index 0000000..e98042a --- /dev/null +++ b/src/pages/view/routine/jstxl/index.vue @@ -0,0 +1,526 @@ + + + + + diff --git a/src/pages/view/routine/kefuxuncha/xcXkList.vue b/src/pages/view/routine/kefuxuncha/xcXkList.vue index 2ffb707..b9993ec 100644 --- a/src/pages/view/routine/kefuxuncha/xcXkList.vue +++ b/src/pages/view/routine/kefuxuncha/xcXkList.vue @@ -733,11 +733,11 @@ onBeforeUnmount(() => { font-weight: 400; word-break: break-all; - // 上课时间不换行 + // 上课时间允许多行显示 &.study-time { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; + white-space: normal; + word-break: break-word; + line-height: 1.5; } } } diff --git a/src/pages/view/routine/xk/dmList.vue b/src/pages/view/routine/xk/dmList.vue index a466513..d7da147 100644 --- a/src/pages/view/routine/xk/dmList.vue +++ b/src/pages/view/routine/xk/dmList.vue @@ -1,6 +1,6 @@