From 553dbe5137d6bf6d1cfded5d894a1c53c1b42578 Mon Sep 17 00:00:00 2001 From: yaojian <1161995598@qq.com> Date: Wed, 11 Mar 2026 11:30:51 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E9=A3=9F=E5=A0=82=E9=97=AE=E5=8D=B7?= =?UTF-8?q?=E8=B0=83=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/basic/basicpracticeclassplan.ts | 98 ++++ src/api/stuwork/classmasterjobapply.ts | 61 +++ src/api/stuwork/dininghall.ts | 66 +++ src/api/stuwork/dininghallvote.ts | 66 +++ src/api/stuwork/dininghallvoteresult.ts | 22 + .../stuwork/dininghallvoteresultanalysis.ts | 23 + .../stuwork/employmentinformationsurvey.ts | 44 ++ src/api/stuwork/stuturnoverlossconfig.ts | 83 +++ src/views/basic/basicclass/detail.vue | 72 ++- src/views/basic/basicclass/index.vue | 17 + .../basic/basicpracticeclassplan/form.vue | 217 ++++++++ .../basic/basicpracticeclassplan/index.vue | 355 ++++++++++++ .../stuwork/classmasterjobapply/index.vue | 515 ++++++++++++++++++ src/views/stuwork/dininghall/form.vue | 117 ++++ src/views/stuwork/dininghall/index.vue | 159 ++++++ src/views/stuwork/dininghallvote/form.vue | 158 ++++++ src/views/stuwork/dininghallvote/index.vue | 173 ++++++ .../dininghallvoteStatistics/index.vue | 236 ++++++++ .../stuwork/dininghallvoteresult/index.vue | 164 ++++++ .../completionRateDept.vue | 283 ++++++++++ src/views/stuwork/gradustu/analyse.vue | 487 ++++++++++++----- .../stuwork/stuturnoverlossconfig/index.vue | 306 +++++++++++ 22 files changed, 3589 insertions(+), 133 deletions(-) create mode 100644 src/api/basic/basicpracticeclassplan.ts create mode 100644 src/api/stuwork/classmasterjobapply.ts create mode 100644 src/api/stuwork/dininghall.ts create mode 100644 src/api/stuwork/dininghallvote.ts create mode 100644 src/api/stuwork/dininghallvoteresult.ts create mode 100644 src/api/stuwork/dininghallvoteresultanalysis.ts create mode 100644 src/api/stuwork/employmentinformationsurvey.ts create mode 100644 src/api/stuwork/stuturnoverlossconfig.ts create mode 100644 src/views/basic/basicpracticeclassplan/form.vue create mode 100644 src/views/basic/basicpracticeclassplan/index.vue create mode 100644 src/views/stuwork/classmasterjobapply/index.vue create mode 100644 src/views/stuwork/dininghall/form.vue create mode 100644 src/views/stuwork/dininghall/index.vue create mode 100644 src/views/stuwork/dininghallvote/form.vue create mode 100644 src/views/stuwork/dininghallvote/index.vue create mode 100644 src/views/stuwork/dininghallvoteStatistics/index.vue create mode 100644 src/views/stuwork/dininghallvoteresult/index.vue create mode 100644 src/views/stuwork/employmentinformationsurvey/completionRateDept.vue create mode 100644 src/views/stuwork/stuturnoverlossconfig/index.vue diff --git a/src/api/basic/basicpracticeclassplan.ts b/src/api/basic/basicpracticeclassplan.ts new file mode 100644 index 0000000..6e76947 --- /dev/null +++ b/src/api/basic/basicpracticeclassplan.ts @@ -0,0 +1,98 @@ +import request from '/@/utils/request'; + +/** + * 分页查询顶岗班级计划 + * @param query 查询参数 + */ +export const fetchList = (query?: any) => { + return request({ + url: '/basic/basicpracticeclassplan/page', + method: 'get', + params: query, + }); +}; + +/** + * 通过id查询顶岗班级计划 + * @param id 主键id + */ +export const getObj = (id: string) => { + return request({ + url: '/basic/basicpracticeclassplan/detail', + method: 'get', + params: { id }, + }); +}; + +/** + * 新增顶岗班级计划 + * @param obj 数据对象 + */ +export const addObj = (obj: any) => { + return request({ + url: '/basic/basicpracticeclassplan', + method: 'post', + data: obj, + }); +}; + +/** + * 修改顶岗班级计划 + * @param obj 数据对象 + */ +export const putObj = (obj: any) => { + return request({ + url: '/basic/basicpracticeclassplan/edit', + method: 'post', + data: obj, + }); +}; + +/** + * 删除顶岗班级计划 + * @param ids id数组 + */ +export const delObj = (ids: string[]) => { + return request({ + url: '/basic/basicpracticeclassplan/delete', + method: 'post', + data: ids, + }); +}; + +/** + * 下载导入模板 + */ +export const downloadImportTemplate = () => { + return request({ + url: '/basic/basicpracticeclassplan/importTemplate', + method: 'get', + responseType: 'blob', + }); +}; + +/** + * 导入顶岗班级计划 + * @param formData 文件表单数据 + */ +export const importData = (formData: FormData) => { + return request({ + url: '/basic/basicpracticeclassplan/import', + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); +}; + +/** + * 导出模板 + */ +export const exportTemplate = () => { + return request({ + url: '/basic/basicpracticeclassplan/exportTemplate', + method: 'get', + responseType: 'blob', + }); +}; \ No newline at end of file diff --git a/src/api/stuwork/classmasterjobapply.ts b/src/api/stuwork/classmasterjobapply.ts new file mode 100644 index 0000000..23d1d56 --- /dev/null +++ b/src/api/stuwork/classmasterjobapply.ts @@ -0,0 +1,61 @@ +import request from '/@/utils/request'; + +/** + * 分页查询班主任任职/调换申请 + * @param query + */ +export const fetchList = (query?: any) => { + return request({ + url: '/stuwork/classmasterjobapply/page', + method: 'get', + params: query, + }); +}; + +/** + * 获取详情 + * @param id + */ +export const getDetail = (id: string) => { + return request({ + url: '/stuwork/classmasterjobapply/detail', + method: 'get', + params: { id }, + }); +}; + +/** + * 新增班主任任职/调换申请 + * @param data + */ +export const addObj = (data: any) => { + return request({ + url: '/stuwork/classmasterjobapply/add', + method: 'post', + data, + }); +}; + +/** + * 班主任任职/调换申请审批/撤回 + * @param data + */ +export const auditObj = (data: any) => { + return request({ + url: '/stuwork/classmasterjobapply/audit', + method: 'post', + data, + }); +}; + +/** + * 删除班主任任职/调换申请 + * @param ids + */ +export const delObj = (ids: string[]) => { + return request({ + url: '/stuwork/classmasterjobapply/delete', + method: 'post', + data: ids, + }); +}; \ No newline at end of file diff --git a/src/api/stuwork/dininghall.ts b/src/api/stuwork/dininghall.ts new file mode 100644 index 0000000..c534099 --- /dev/null +++ b/src/api/stuwork/dininghall.ts @@ -0,0 +1,66 @@ +import request from '/@/utils/request'; + +/** + * 分页查询食堂列表 + */ +export const fetchList = (query?: any) => { + return request({ + url: '/stuwork/dininghall/page', + method: 'get', + params: query, + }); +}; + +/** + * 获取食堂列表(不分页) + */ +export const getList = () => { + return request({ + url: '/stuwork/dininghall/list', + method: 'get', + }); +}; + +/** + * 获取食堂详情 + */ +export const getObj = (id: string) => { + return request({ + url: '/stuwork/dininghall/detail', + method: 'get', + params: { id }, + }); +}; + +/** + * 新增食堂 + */ +export const addObj = (data: any) => { + return request({ + url: '/stuwork/dininghall', + method: 'post', + data, + }); +}; + +/** + * 修改食堂 + */ +export const putObj = (data: any) => { + return request({ + url: '/stuwork/dininghall/edit', + method: 'post', + data, + }); +}; + +/** + * 删除食堂 + */ +export const delObjs = (ids: string[]) => { + return request({ + url: '/stuwork/dininghall/delete', + method: 'post', + data: ids, + }); +}; \ No newline at end of file diff --git a/src/api/stuwork/dininghallvote.ts b/src/api/stuwork/dininghallvote.ts new file mode 100644 index 0000000..eeb51f4 --- /dev/null +++ b/src/api/stuwork/dininghallvote.ts @@ -0,0 +1,66 @@ +import request from '/@/utils/request'; + +/** + * 分页查询食堂调查题目列表 + */ +export const fetchList = (query?: any) => { + return request({ + url: '/stuwork/dininghallvote/page', + method: 'get', + params: query, + }); +}; + +/** + * 获取食堂调查题目详情 + */ +export const getObj = (id: string) => { + return request({ + url: '/stuwork/dininghallvote/detail', + method: 'get', + params: { id }, + }); +}; + +/** + * 新增食堂调查题目 + */ +export const addObj = (data: any) => { + return request({ + url: '/stuwork/dininghallvote', + method: 'post', + data, + }); +}; + +/** + * 修改食堂调查题目 + */ +export const putObj = (data: any) => { + return request({ + url: '/stuwork/dininghallvote/edit', + method: 'post', + data, + }); +}; + +/** + * 删除食堂调查题目 + */ +export const delObjs = (ids: string[]) => { + return request({ + url: '/stuwork/dininghallvote/delete', + method: 'post', + data: ids, + }); +}; + +/** + * 获取题目类型字典 + */ +export const getQuestionnaireDict = () => { + return request({ + url: '/admin/dict/type/questionnaire', + method: 'get', + }); +}; \ No newline at end of file diff --git a/src/api/stuwork/dininghallvoteresult.ts b/src/api/stuwork/dininghallvoteresult.ts new file mode 100644 index 0000000..f6487b8 --- /dev/null +++ b/src/api/stuwork/dininghallvoteresult.ts @@ -0,0 +1,22 @@ +import request from '/@/utils/request'; + +/** + * 分页查询食堂调查明细 + */ +export const fetchList = (query?: any) => { + return request({ + url: '/stuwork/dininghallvoteresult/page', + method: 'get', + params: query, + }); +}; + +/** + * 获取食堂列表 + */ +export const getDiningHallList = () => { + return request({ + url: '/stuwork/dininghall/list', + method: 'get', + }); +}; \ No newline at end of file diff --git a/src/api/stuwork/dininghallvoteresultanalysis.ts b/src/api/stuwork/dininghallvoteresultanalysis.ts new file mode 100644 index 0000000..280e1b6 --- /dev/null +++ b/src/api/stuwork/dininghallvoteresultanalysis.ts @@ -0,0 +1,23 @@ +import request from '/@/utils/request'; + +/** + * 获取学生统计列表 + */ +export const getStatisticsList = (query?: any) => { + return request({ + url: '/stuwork/dininghallvoteresultanalysis/getStatisticsList', + method: 'get', + params: query, + }); +}; + +/** + * 获取教职工统计列表 + */ +export const getStatisticsListByTea = (query?: any) => { + return request({ + url: '/stuwork/dininghallvoteresultanalysis/getStatisticsListByTea', + method: 'get', + params: query, + }); +}; \ No newline at end of file diff --git a/src/api/stuwork/employmentinformationsurvey.ts b/src/api/stuwork/employmentinformationsurvey.ts new file mode 100644 index 0000000..709e199 --- /dev/null +++ b/src/api/stuwork/employmentinformationsurvey.ts @@ -0,0 +1,44 @@ +import request from '/@/utils/request'; + +/** + * 获取部门统计列表 + */ +export const getStatisticsDept = (query?: any) => { + return request({ + url: '/stuwork/employmentinformationsurvey/getStatisticsDept', + method: 'get', + params: query, + }); +}; + +/** + * 获取班级统计列表 + */ +export const getStatisticsClass = (query?: any) => { + return request({ + url: '/stuwork/employmentinformationsurvey/getStatisticsClass', + method: 'get', + params: query, + }); +}; + +/** + * 获取班级学生信息 + */ +export const getClassStudentInfo = (query?: any) => { + return request({ + url: '/stuwork/employmentinformationsurvey/getClassStudentInfo', + method: 'get', + params: query, + }); +}; + +/** + * 获取班主任班级列表 + */ +export const queryMasterClass = () => { + return request({ + url: '/basic/basicclass/queryMasterClass', + method: 'get', + }); +}; \ No newline at end of file diff --git a/src/api/stuwork/stuturnoverlossconfig.ts b/src/api/stuwork/stuturnoverlossconfig.ts new file mode 100644 index 0000000..775adf2 --- /dev/null +++ b/src/api/stuwork/stuturnoverlossconfig.ts @@ -0,0 +1,83 @@ +import request from '/@/utils/request'; + +/** + * 分页查询学籍异动流失配置 + * @param query + */ +export const fetchList = (query?: any) => { + return request({ + url: '/stuwork/stuturnoverlossconfig/page', + method: 'get', + params: query, + }); +}; + +/** + * 获取详情 + * @param id + */ +export const getDetail = (id: string) => { + return request({ + url: '/stuwork/stuturnoverlossconfig/detail', + method: 'get', + params: { id }, + }); +}; + +/** + * 新增学籍异动流失配置 + * @param data + */ +export const addObj = (data: any) => { + return request({ + url: '/stuwork/stuturnoverlossconfig', + method: 'post', + data, + }); +}; + +/** + * 编辑学籍异动流失配置 + * @param data + */ +export const editObj = (data: any) => { + return request({ + url: '/stuwork/stuturnoverlossconfig/edit', + method: 'post', + data, + }); +}; + +/** + * 删除学籍异动流失配置 + * @param ids + */ +export const delObj = (ids: string[]) => { + return request({ + url: '/stuwork/stuturnoverlossconfig/delete', + method: 'post', + data: ids, + }); +}; + +/** + * 获取所有流失类型的异动配置 + */ +export const getAllLossTurnoverTypes = () => { + return request({ + url: '/stuwork/stuturnoverlossconfig/getAllLossTurnoverTypes', + method: 'get', + }); +}; + +/** + * 根据异动类型判断是否属于流失 + * @param turnoverType + */ +export const isTurnoverTypeLoss = (turnoverType: string) => { + return request({ + url: '/stuwork/stuturnoverlossconfig/isTurnoverTypeLoss', + method: 'get', + params: { turnoverType }, + }); +}; \ No newline at end of file diff --git a/src/views/basic/basicclass/detail.vue b/src/views/basic/basicclass/detail.vue index e3eb4cc..2e49acf 100644 --- a/src/views/basic/basicclass/detail.vue +++ b/src/views/basic/basicclass/detail.vue @@ -96,6 +96,29 @@
暂无数据
+ + + + + + + + + + + + + + + +
暂无数据
+
@@ -231,16 +234,14 @@ const state: BasicTableProps = reactive({ createdIsNeed: true, }); -const { getDataList, sortChangeHandle, tableStyle } = useTable(state); +const { getDataList, sortChangeHandle, sizeChangeHandle, currentChangeHandle, tableStyle } = useTable(state); const handleSearch = () => { - state.page = 1; getDataList(); }; const handleReset = () => { searchFormRef.value?.resetFields(); - state.page = 1; getDataList(); }; @@ -252,4 +253,9 @@ const handleReset = () => { .mb12 { margin-bottom: 12px; } +.pagination-wrapper { + margin-top: 20px; + display: flex; + justify-content: flex-end; +} diff --git a/src/views/stuwork/stuturnoverrule/form.vue b/src/views/stuwork/stuturnoverrule/form.vue new file mode 100644 index 0000000..ad89b7a --- /dev/null +++ b/src/views/stuwork/stuturnoverrule/form.vue @@ -0,0 +1,271 @@ + + + \ No newline at end of file diff --git a/src/views/stuwork/stuturnoverrule/index.vue b/src/views/stuwork/stuturnoverrule/index.vue new file mode 100644 index 0000000..9ed70be --- /dev/null +++ b/src/views/stuwork/stuturnoverrule/index.vue @@ -0,0 +1,337 @@ + + + + + \ No newline at end of file From e33ac977d4f17528f93023a67fa39f8b9291854b Mon Sep 17 00:00:00 2001 From: yaojian <1161995598@qq.com> Date: Wed, 11 Mar 2026 15:43:12 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E5=AE=BF=E8=88=8D=E6=B0=B4=E7=94=B5?= =?UTF-8?q?=E6=9C=88=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/basic/basicstudentavatar.ts | 2 +- src/api/stuwork/watermonthreport.ts | 82 ++++- src/views/basic/basicstudentavatar/index.vue | 38 +-- src/views/stuwork/watermonthreport/form.vue | 262 +++++++++++++++ src/views/stuwork/watermonthreport/index.vue | 328 +++++++++++++++++++ 5 files changed, 670 insertions(+), 42 deletions(-) create mode 100644 src/views/stuwork/watermonthreport/form.vue create mode 100644 src/views/stuwork/watermonthreport/index.vue diff --git a/src/api/basic/basicstudentavatar.ts b/src/api/basic/basicstudentavatar.ts index d54a600..0525c67 100644 --- a/src/api/basic/basicstudentavatar.ts +++ b/src/api/basic/basicstudentavatar.ts @@ -6,7 +6,7 @@ import request from '/@/utils/request'; */ export const fetchList = (query?: any) => { return request({ - url: '/basic/basicstudent/avatar/list', + url: '/basic/basicstudent/avatar/page', method: 'get', params: query, }); diff --git a/src/api/stuwork/watermonthreport.ts b/src/api/stuwork/watermonthreport.ts index 72334e7..4de78e0 100644 --- a/src/api/stuwork/watermonthreport.ts +++ b/src/api/stuwork/watermonthreport.ts @@ -1,14 +1,86 @@ import request from '/@/utils/request'; /** - * 查看水电明细 - * @param roomNo 宿舍号 + * 分页查询宿舍水电月明细 + * @param query */ -export const lookDetails = (roomNo: string) => { +export const fetchList = (query?: any) => { + return request({ + url: '/stuwork/watermonthreport/page', + method: 'get', + params: query, + }); +}; + +/** + * 新增宿舍水电月明细 + * @param data + */ +export const addObj = (data: any) => { + return request({ + url: '/stuwork/watermonthreport', + method: 'post', + data, + }); +}; + +/** + * 获取详情 + * @param id + */ +export const getDetail = (id: string) => { + return request({ + url: '/stuwork/watermonthreport/detail', + method: 'get', + params: { id }, + }); +}; + +/** + * 编辑宿舍水电月明细 + * @param data + */ +export const editObj = (data: any) => { + return request({ + url: '/stuwork/watermonthreport/edit', + method: 'post', + data, + }); +}; + +/** + * 删除宿舍水电月明细 + * @param ids + */ +export const delObj = (ids: string[]) => { + return request({ + url: '/stuwork/watermonthreport/delete', + method: 'post', + data: ids, + }); +}; + +/** + * 查看水电明细 + * @param params 查询参数 + */ +export const lookDetails = (params: any) => { return request({ url: '/stuwork/watermonthreport/lookDetails', method: 'get', - params: { roomNo }, + params, + }); +}; + +/** + * 根据角色查看明细 + * @param params 查询参数 + */ +export const lookDetail = (params: any) => { + return request({ + url: '/stuwork/watermonthreport/lookDetail', + method: 'get', + params, }); }; @@ -46,4 +118,4 @@ export const getFloorStats = (params: any) => { method: 'get', params, }); -}; +}; \ No newline at end of file diff --git a/src/views/basic/basicstudentavatar/index.vue b/src/views/basic/basicstudentavatar/index.vue index f6592ee..f9de007 100644 --- a/src/views/basic/basicstudentavatar/index.vue +++ b/src/views/basic/basicstudentavatar/index.vue @@ -150,44 +150,10 @@ const searchForm = reactive({ classCode: '', }); -// 配置 useTable - 接口返回的数据结构是 { classes: [], students: [] } +// 配置 useTable - 标准分页查询 const state: BasicTableProps = reactive({ queryForm: searchForm, - pageList: async (queryParams: any) => { - const res = await fetchList(queryParams); - // 接口返回的数据结构是 { classes: [], students: [] } - // 需要将 students 数组转换为表格数据,并关联班级信息 - if (res.data && res.data.students) { - const students = res.data.students || []; - const classes = res.data.classes || []; - const classMap = new Map(); - classes.forEach((cls: any) => { - classMap.set(cls.classCode, cls); - }); - - // 将学生数据与班级信息合并 - const dataList = students.map((stu: any) => { - const classInfo = classMap.get(stu.classCode); - return { - ...stu, - className: classInfo ? classInfo.classNo : stu.className || '', - classNo: classInfo ? classInfo.classNo : '', - }; - }); - - return { - ...res, - data: { - records: dataList, - total: dataList.length, - current: 1, - size: dataList.length, - pages: 1, - }, - }; - } - return res; - }, + pageList: fetchList, props: { item: 'records', totalCount: 'total', diff --git a/src/views/stuwork/watermonthreport/form.vue b/src/views/stuwork/watermonthreport/form.vue new file mode 100644 index 0000000..5114d6c --- /dev/null +++ b/src/views/stuwork/watermonthreport/form.vue @@ -0,0 +1,262 @@ + + + \ No newline at end of file diff --git a/src/views/stuwork/watermonthreport/index.vue b/src/views/stuwork/watermonthreport/index.vue new file mode 100644 index 0000000..9b832be --- /dev/null +++ b/src/views/stuwork/watermonthreport/index.vue @@ -0,0 +1,328 @@ + + + + + \ No newline at end of file From 4af5660df2aea06636c6620403ca8d764215026c Mon Sep 17 00:00:00 2001 From: yaojian <1161995598@qq.com> Date: Wed, 11 Mar 2026 16:26:14 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E5=B7=A5=E5=AD=A6=E4=BA=A4=E6=9B=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stuwork/stuworkstudyalternate/index.vue | 77 +++++++++-------- .../stuwork/stuworkstudyalternate/teacher.vue | 84 +++++++++++++------ 2 files changed, 101 insertions(+), 60 deletions(-) diff --git a/src/views/stuwork/stuworkstudyalternate/index.vue b/src/views/stuwork/stuworkstudyalternate/index.vue index f73cde9..d60c653 100644 --- a/src/views/stuwork/stuworkstudyalternate/index.vue +++ b/src/views/stuwork/stuworkstudyalternate/index.vue @@ -13,17 +13,17 @@ - + v-for="(item, index) in schoolYearList" + :key="item.year || item.id || index" + :label="item.year || item.schoolYear || item.name || item" + :value="item.year || item.schoolYear || item.name || item"> @@ -303,23 +303,38 @@ const searchForm = reactive({ dateRange: null as [string, string] | null }) -// 配置 useTable(接口返回 data.tableData.records / data.tableData.total,需包装以适配 hook 的 res.data[props.item] 取数) +// 配置 useTable(接口返回 data.tableData.records / data.tableData.total) const state: BasicTableProps = reactive({ queryForm: searchForm, pageList: async (params: any) => { - const res = await fetchList(params) - const data = res?.data - const tableData = data?.tableData - return { - data: { - 'tableData.records': tableData?.records ?? [], - 'tableData.total': tableData?.total ?? data?.total ?? 0 + // 处理查询参数 + const queryParams: any = { ...params } + // 处理日期范围 + if (searchForm.dateRange && searchForm.dateRange.length === 2) { + queryParams.dateRangeStr = `${searchForm.dateRange[0]},${searchForm.dateRange[1]}` + } + delete queryParams.dateRange + // 处理学年数组 + if (queryParams.schoolYear) { + queryParams.schoolYear = [queryParams.schoolYear] + } + + const res = await fetchList(queryParams) + // 将嵌套的 tableData 提升到 data 层级,适配 useTable hook + if (res.data && res.data.tableData) { + return { + ...res, + data: { + records: res.data.tableData.records || [], + total: res.data.tableData.total || 0 + } } } + return res }, props: { - item: 'tableData.records', - totalCount: 'tableData.total' + item: 'records', + totalCount: 'total' }, createdIsNeed: true }) @@ -334,20 +349,6 @@ const { // 查询 const handleSearch = () => { - // 处理日期范围 - const params: any = { ...searchForm } - if (searchForm.dateRange && searchForm.dateRange.length === 2) { - params.dateRangeStr = `${searchForm.dateRange[0]},${searchForm.dateRange[1]}` - } - delete params.dateRange - - // 处理学年数组 - if (params.schoolYear) { - params.schoolYear = [params.schoolYear] - } - - // 更新查询参数 - Object.assign(searchForm, params) getDataList() } @@ -394,10 +395,20 @@ const getDeptListData = async () => { const getSchoolYearList = async () => { try { const res = await queryAllSchoolYear() - if (res.data && Array.isArray(res.data)) { - schoolYearList.value = res.data + if (res.data) { + // 兼容多种数据格式 + if (Array.isArray(res.data)) { + schoolYearList.value = res.data + } else if (res.data.records && Array.isArray(res.data.records)) { + schoolYearList.value = res.data.records + } else { + schoolYearList.value = [] + } + } else { + schoolYearList.value = [] } } catch (err) { + console.error('获取学年列表失败', err) schoolYearList.value = [] } } diff --git a/src/views/stuwork/stuworkstudyalternate/teacher.vue b/src/views/stuwork/stuworkstudyalternate/teacher.vue index 4b2a668..5eacb0c 100644 --- a/src/views/stuwork/stuworkstudyalternate/teacher.vue +++ b/src/views/stuwork/stuworkstudyalternate/teacher.vue @@ -12,31 +12,31 @@ label-width="120px" v-loading="loading"> - + v-for="(item, index) in schoolYearList" + :key="item.year || item.id || index" + :label="item.year || item.schoolYear || item.name || item" + :value="item.year || item.schoolYear || item.name || item"> - + :key="item.value || item.dictValue" + :label="item.label || item.dictLabel || item.name" + :value="item.value || item.dictValue"> @@ -48,18 +48,20 @@ style="width: 100%" /> - + remote + :remote-method="handleTeacherSearch" + :loading="teacherLoading" + style="width: 100%"> + :key="item.teacherNo || item.id" + :label="`${item.realName || item.name}(${item.teacherNo || item.id})`" + :value="item.teacherNo || item.id"> @@ -87,6 +89,7 @@ const emit = defineEmits(['refresh']) const dataFormRef = ref() const visible = ref(false) const loading = ref(false) +const teacherLoading = ref(false) const schoolYearList = ref([]) const schoolTermList = ref([]) const teacherList = ref([]) @@ -117,17 +120,29 @@ const dataRules = { // 教师搜索 const handleTeacherSearch = async (keyword: string) => { - if (!keyword) { + if (!keyword || keyword.length < 1) { teacherList.value = [] return } + teacherLoading.value = true try { const res = await getTeacherInfoCommon({ searchKeywords: keyword }) - if (res.data && Array.isArray(res.data)) { - teacherList.value = res.data + if (res.data) { + if (Array.isArray(res.data)) { + teacherList.value = res.data + } else if (res.data.records && Array.isArray(res.data.records)) { + teacherList.value = res.data.records + } else { + teacherList.value = [] + } + } else { + teacherList.value = [] } } catch (err) { + console.error('获取教师列表失败', err) teacherList.value = [] + } finally { + teacherLoading.value = false } } @@ -174,10 +189,19 @@ const onSubmit = async () => { const getSchoolYearList = async () => { try { const res = await queryAllSchoolYear() - if (res.data && Array.isArray(res.data)) { - schoolYearList.value = res.data + if (res.data) { + if (Array.isArray(res.data)) { + schoolYearList.value = res.data + } else if (res.data.records && Array.isArray(res.data.records)) { + schoolYearList.value = res.data.records + } else { + schoolYearList.value = [] + } + } else { + schoolYearList.value = [] } } catch (err) { + console.error('获取学年列表失败', err) schoolYearList.value = [] } } @@ -187,9 +211,15 @@ const getSchoolTermList = async () => { try { const res = await getDicts('school_term') if (res.data && Array.isArray(res.data)) { - schoolTermList.value = res.data + schoolTermList.value = res.data.map((item: any) => ({ + label: item.label ?? item.dictLabel ?? item.name, + value: item.value ?? item.dictValue + })) + } else { + schoolTermList.value = [] } } catch (err) { + console.error('获取学期列表失败', err) schoolTermList.value = [] } } From 594a58cae492bd9e1dd2055ee65bc7822a102d3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E7=BA=A2=E5=85=B5?= <374362909@qq.com> Date: Wed, 11 Mar 2026 16:28:31 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E6=9F=A5=E8=AF=A2=E5=8F=8A=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/purchase/purchasingrequisition.ts | 9 + .../purchase/purchasingrequisition/index.vue | 177 ++++++++++++++++-- 2 files changed, 170 insertions(+), 16 deletions(-) diff --git a/src/api/purchase/purchasingrequisition.ts b/src/api/purchase/purchasingrequisition.ts index 5e654cf..d2ebaf1 100644 --- a/src/api/purchase/purchasingrequisition.ts +++ b/src/api/purchase/purchasingrequisition.ts @@ -437,3 +437,12 @@ export function getSupplementFilesByApplyId(applyId: string) { params: { purchaseId: applyId }, }); } + +export function exportPurchaseApply(params?: any) { + return request({ + url: '/purchase/purchasingapply/export', + method: 'get', + params, + responseType: 'blob', + }); +} diff --git a/src/views/purchase/purchasingrequisition/index.vue b/src/views/purchase/purchasingrequisition/index.vue index 67762ac..627c274 100644 --- a/src/views/purchase/purchasingrequisition/index.vue +++ b/src/views/purchase/purchasingrequisition/index.vue @@ -39,9 +39,32 @@ + + + + + + + + + + + + + + + + 查询 重置 + 导出 @@ -206,7 +229,9 @@ >委 @@ -302,7 +327,7 @@ 未知 -未发起 + 未发起 - @@ -319,16 +344,30 @@ + +