From 18f0fbce150f298838227d3a6b3cd8911a736f9e Mon Sep 17 00:00:00 2001 From: RISE Date: Wed, 14 Jan 2026 01:06:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=BE=88=E5=A4=9A?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/admin/dict.ts | 12 + src/api/basic/basicclass.ts | 13 + src/api/basic/basicstudent.ts | 59 +- src/api/stuwork/assessmentcategory.ts | 13 + src/api/stuwork/assessmentpoint.ts | 13 + src/api/stuwork/classassessmentsettle.ts | 67 ++ src/api/stuwork/classcheckdaily.ts | 2 +- src/api/stuwork/classhonor.ts | 13 + src/api/stuwork/classhygienedailyanalysis.ts | 24 + src/api/stuwork/classmasterevaluation.ts | 97 +++ .../stuwork/classmasterevaluationappeal.ts | 54 ++ src/api/stuwork/classpublicity.ts | 13 + src/api/stuwork/classroomhygienemonthly.ts | 61 ++ src/api/stuwork/dormbuilding.ts | 12 + src/api/stuwork/dormroomstudent.ts | 13 + src/api/stuwork/entrancerule.ts | 68 ++ src/api/stuwork/stupunlish.ts | 13 + src/api/stuwork/teachclassroomassign.ts | 13 + src/assets/file/教室月卫生导入模板.xlsx | Bin 0 -> 11142 bytes src/assets/file/班主任考核导入模板.xlsx | Bin 0 -> 9290 bytes src/components/Upload/Excel.vue | 25 +- src/router/backEnd.ts | 11 +- src/utils/other.ts | 8 +- src/views/basic/basicclass/detail.vue | 292 +++++++ src/views/basic/basicclass/form.vue | 370 ++++++++ src/views/basic/basicclass/index.vue | 453 ++++++++++ .../basicstudent/components/SimpleEdit.vue | 117 +++ src/views/basic/basicstudent/detail.vue | 213 +++++ src/views/basic/basicstudent/form.vue | 536 ++++++++++++ src/views/basic/basicstudent/index.vue | 799 ++++++++++++++++++ .../stuwork/classassessmentsettle/detail.vue | 157 ++++ .../stuwork/classassessmentsettle/form.vue | 250 ++++++ .../stuwork/classassessmentsettle/index.vue | 267 ++++++ src/views/stuwork/classcheckdaily/detail.vue | 4 +- .../classhygienedailyanalysis/detail.vue | 157 ++++ .../classhygienedailyanalysis/form.vue | 321 +++++++ .../classhygienedailyanalysis/index.vue | 358 ++++++++ .../stuwork/classmasterevaluation/detail.vue | 157 ++++ .../stuwork/classmasterevaluation/form.vue | 321 +++++++ .../stuwork/classmasterevaluation/index.vue | 485 +++++++++++ .../classmasterevaluationappeal/index.vue | 378 +++++++++ .../classroomhygienemonthly/detail.vue | 217 +++++ .../stuwork/classroomhygienemonthly/form.vue | 212 +++++ .../stuwork/classroomhygienemonthly/index.vue | 406 +++++++++ src/views/stuwork/entrancerule/form.vue | 663 +++++++++++++++ src/views/stuwork/entrancerule/index.vue | 199 +++++ 46 files changed, 7926 insertions(+), 10 deletions(-) create mode 100644 src/api/stuwork/assessmentcategory.ts create mode 100644 src/api/stuwork/assessmentpoint.ts create mode 100644 src/api/stuwork/classassessmentsettle.ts create mode 100644 src/api/stuwork/classhonor.ts create mode 100644 src/api/stuwork/classhygienedailyanalysis.ts create mode 100644 src/api/stuwork/classmasterevaluation.ts create mode 100644 src/api/stuwork/classmasterevaluationappeal.ts create mode 100644 src/api/stuwork/classpublicity.ts create mode 100644 src/api/stuwork/classroomhygienemonthly.ts create mode 100644 src/api/stuwork/dormbuilding.ts create mode 100644 src/api/stuwork/dormroomstudent.ts create mode 100644 src/api/stuwork/entrancerule.ts create mode 100644 src/api/stuwork/stupunlish.ts create mode 100644 src/api/stuwork/teachclassroomassign.ts create mode 100644 src/assets/file/教室月卫生导入模板.xlsx create mode 100644 src/assets/file/班主任考核导入模板.xlsx create mode 100644 src/views/basic/basicclass/detail.vue create mode 100644 src/views/basic/basicclass/form.vue create mode 100644 src/views/basic/basicclass/index.vue create mode 100644 src/views/basic/basicstudent/components/SimpleEdit.vue create mode 100644 src/views/basic/basicstudent/detail.vue create mode 100644 src/views/basic/basicstudent/form.vue create mode 100644 src/views/basic/basicstudent/index.vue create mode 100644 src/views/stuwork/classassessmentsettle/detail.vue create mode 100644 src/views/stuwork/classassessmentsettle/form.vue create mode 100644 src/views/stuwork/classassessmentsettle/index.vue create mode 100644 src/views/stuwork/classhygienedailyanalysis/detail.vue create mode 100644 src/views/stuwork/classhygienedailyanalysis/form.vue create mode 100644 src/views/stuwork/classhygienedailyanalysis/index.vue create mode 100644 src/views/stuwork/classmasterevaluation/detail.vue create mode 100644 src/views/stuwork/classmasterevaluation/form.vue create mode 100644 src/views/stuwork/classmasterevaluation/index.vue create mode 100644 src/views/stuwork/classmasterevaluationappeal/index.vue create mode 100644 src/views/stuwork/classroomhygienemonthly/detail.vue create mode 100644 src/views/stuwork/classroomhygienemonthly/form.vue create mode 100644 src/views/stuwork/classroomhygienemonthly/index.vue create mode 100644 src/views/stuwork/entrancerule/form.vue create mode 100644 src/views/stuwork/entrancerule/index.vue diff --git a/src/api/admin/dict.ts b/src/api/admin/dict.ts index 2f5a531..49b8c56 100644 --- a/src/api/admin/dict.ts +++ b/src/api/admin/dict.ts @@ -156,3 +156,15 @@ export function validateDictItemLabel(rule: any, value: any, callback: any, type } }); } + +/** + * 批量查询字典数据 + * @param types 字典类型数组 + */ +export function queryDictByTypeList(types: string[]) { + return request({ + url: '/admin/dict/queryDictByTypeList', + method: 'post', + data: types, + }); +} \ No newline at end of file diff --git a/src/api/basic/basicclass.ts b/src/api/basic/basicclass.ts index cbc3736..aea733f 100644 --- a/src/api/basic/basicclass.ts +++ b/src/api/basic/basicclass.ts @@ -234,3 +234,16 @@ export const getClassLose = (query?: any) => { }); }; +/** + * 班级信息导出 + * @param query + */ +export const classExportData = (query?: any) => { + return request({ + url: '/basic/basicclass/classExportData', + method: 'post', + data: query, + responseType: 'blob' + }); +}; + diff --git a/src/api/basic/basicstudent.ts b/src/api/basic/basicstudent.ts index ba18bcb..ac31a7a 100644 --- a/src/api/basic/basicstudent.ts +++ b/src/api/basic/basicstudent.ts @@ -177,7 +177,7 @@ export const saveStu = (obj: any) => { export const editIsleader = (obj: any) => { return request({ url: '/basic/basicstudent/editIsleader', - method: 'put', + method: 'post', data: obj, }); }; @@ -416,6 +416,7 @@ export const exportStuInfoCard = (data: any) => { url: '/basic/file/exportStuInfoCard', method: 'post', data: data, + responseType: 'blob', }); }; @@ -463,3 +464,59 @@ export const batchUpdateAvatarAudit = (data: any) => { }); }; +/** + * 学生信息导出 + * @param data + */ +export const exportStudentData = (data: any) => { + return request({ + url: '/basic/basicstudent/stuDataExport', + method: 'post', + data: data, + responseType: 'blob', + }); +}; + +/** + * 申请顶岗 + * @param data + * TODO: 接口文档中未找到此接口,请提供正确的接口地址 + */ +export const applyInternship = (data: any) => { + return request({ + url: '/basic/basicstudent/applyInternship', // TODO: 接口文档中未找到此接口 + method: 'post', + data: data, + }); +}; + +/** + * 段段清证书导入 + * @param formData + * TODO: 接口文档中未找到此接口,请提供正确的接口地址 + */ +export const importCertificate = (formData: FormData) => { + return request({ + url: '/basic/basicstudent/importCertificate', // TODO: 接口文档中未找到此接口 + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); +}; + +/** + * 证书导出 + * @param data + * TODO: 接口文档中未找到此接口,请提供正确的接口地址 + */ +export const exportCertificate = (data: any) => { + return request({ + url: '/basic/basicstudent/exportCertificate', // TODO: 接口文档中未找到此接口 + method: 'post', + data: data, + responseType: 'blob', + }); +}; + diff --git a/src/api/stuwork/assessmentcategory.ts b/src/api/stuwork/assessmentcategory.ts new file mode 100644 index 0000000..9b0f923 --- /dev/null +++ b/src/api/stuwork/assessmentcategory.ts @@ -0,0 +1,13 @@ +import request from "/@/utils/request" + +/** + * 获取考核项目列表 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function getList() { + return request({ + url: '/stuwork/assessmentcategory/list', + method: 'get' + }) +} + diff --git a/src/api/stuwork/assessmentpoint.ts b/src/api/stuwork/assessmentpoint.ts new file mode 100644 index 0000000..e9bc6e9 --- /dev/null +++ b/src/api/stuwork/assessmentpoint.ts @@ -0,0 +1,13 @@ +import request from "/@/utils/request" + +/** + * 获取考核指标列表 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function getList() { + return request({ + url: '/stuwork/assessmentpoint/list', + method: 'get' + }) +} + diff --git a/src/api/stuwork/classassessmentsettle.ts b/src/api/stuwork/classassessmentsettle.ts new file mode 100644 index 0000000..c98479c --- /dev/null +++ b/src/api/stuwork/classassessmentsettle.ts @@ -0,0 +1,67 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/stuwork/classassessmentsettle/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/stuwork/classassessmentsettle', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数,包含 id。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/stuwork/classassessmentsettle/detail', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID 数组。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/stuwork/classassessmentsettle/delete', + method: 'post', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/stuwork/classassessmentsettle/edit', + method: 'post', + data: obj + }) +} + diff --git a/src/api/stuwork/classcheckdaily.ts b/src/api/stuwork/classcheckdaily.ts index 0ad9687..489c1ca 100644 --- a/src/api/stuwork/classcheckdaily.ts +++ b/src/api/stuwork/classcheckdaily.ts @@ -47,7 +47,7 @@ export function getObj(obj?: Object) { export function delObjs(ids?: Object) { return request({ url: '/stuwork/classcheckdaily/delete', - method: 'delete', + method: 'post', data: ids }) } diff --git a/src/api/stuwork/classhonor.ts b/src/api/stuwork/classhonor.ts new file mode 100644 index 0000000..e688ed9 --- /dev/null +++ b/src/api/stuwork/classhonor.ts @@ -0,0 +1,13 @@ +import request from '/@/utils/request'; + +/** + * 根据班级代码查询班级荣誉 + * @param classCode 班级代码 + */ +export const queryClassHonorByClassCode = (classCode: string | number) => { + return request({ + url: `/stuwork/classhonor/queryClassHonorByClassCode/${classCode}`, + method: 'get', + }); +}; + diff --git a/src/api/stuwork/classhygienedailyanalysis.ts b/src/api/stuwork/classhygienedailyanalysis.ts new file mode 100644 index 0000000..3e78bc8 --- /dev/null +++ b/src/api/stuwork/classhygienedailyanalysis.ts @@ -0,0 +1,24 @@ +import request from '/@/utils/request'; + +/** + * 获取日常行为月汇总列表 + */ +export const fetchList = (query: any) => { + return request({ + url: '/stuwork/classhygienedaily/page', + method: 'get', + params: query + }); +}; + +/** + * 获取日常行为月汇总详情 + */ +export const getObj = (query: any) => { + return request({ + url: '/stuwork/classhygienedaily/detail', + method: 'get', + params: query + }); +}; + diff --git a/src/api/stuwork/classmasterevaluation.ts b/src/api/stuwork/classmasterevaluation.ts new file mode 100644 index 0000000..fe3e77e --- /dev/null +++ b/src/api/stuwork/classmasterevaluation.ts @@ -0,0 +1,97 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/stuwork/classmasterevaluation/page', + method: 'get', + params: query + }) +} + +/** + * 添加一个新对象。 + * @param {Object} [obj] - 要添加的对象。 + * @returns {Promise} 请求的 Promise 对象 (true/false)。 + */ +export function addObj(obj?: Object) { + return request({ + url: '/stuwork/classmasterevaluation/add', + method: 'post', + data: obj + }) +} + +/** + * 根据查询参数获取对象详情。 + * @param {Object} [obj] - 查询参数,包含 id。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/stuwork/classmasterevaluation/detail', + method: 'get', + params: obj + }) +} + +/** + * 根据 ID 删除对象。 + * @param {Object} [ids] - 要删除的对象 ID 数组。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/stuwork/classmasterevaluation/delete', + method: 'post', + data: ids + }) +} + +/** + * 更新一个已存在的对象。 + * @param {Object} [obj] - 要更新的对象。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function putObj(obj?: Object) { + return request({ + url: '/stuwork/classmasterevaluation/add', + method: 'post', + data: obj + }) +} + +/** + * 导出数据 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function exportData(query?: Object) { + return request({ + url: '/stuwork/classmasterevaluation/exportData', + method: 'post', + data: query, + responseType: 'blob' + }) +} + +/** + * 导入数据 + * @param {FormData} [formData] - 文件表单数据。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function importData(formData?: FormData) { + return request({ + url: '/stuwork/classmasterevaluation/importData', + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + diff --git a/src/api/stuwork/classmasterevaluationappeal.ts b/src/api/stuwork/classmasterevaluationappeal.ts new file mode 100644 index 0000000..db86948 --- /dev/null +++ b/src/api/stuwork/classmasterevaluationappeal.ts @@ -0,0 +1,54 @@ +import request from "/@/utils/request" + +/** + * 根据分页查询参数获取申诉列表数据。 + * @param {Object} [query] - 查询参数。 + * @returns {Promise} 请求的 Promise 分页对象。 + */ +export function fetchList(query?: Object) { + return request({ + url: '/stuwork/classmasterevaluationappeal/page', + method: 'get', + params: query + }) +} + +/** + * 根据查询参数获取申诉详情。 + * @param {Object} [obj] - 查询参数,包含 id。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function getObj(obj?: Object) { + return request({ + url: '/stuwork/classmasterevaluationappeal/detail', + method: 'get', + params: obj + }) +} + +/** + * 审核申诉 + * @param {Object} [obj] - 审核数据,包含 id、appealStatus、appealReply 等。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function auditAppeal(obj?: Object) { + return request({ + url: '/stuwork/classmasterevaluationappeal/audit', + method: 'post', + data: obj + }) +} + +/** + * 根据 ID 删除申诉记录。 + * @param {Object} [ids] - 要删除的对象 ID 数组。 + * @returns {Promise} 请求的 Promise 对象。 + */ +export function delObjs(ids?: Object) { + return request({ + url: '/stuwork/classmasterevaluationappeal/delete', + method: 'post', + data: ids + }) +} + diff --git a/src/api/stuwork/classpublicity.ts b/src/api/stuwork/classpublicity.ts new file mode 100644 index 0000000..6796aa7 --- /dev/null +++ b/src/api/stuwork/classpublicity.ts @@ -0,0 +1,13 @@ +import request from '/@/utils/request'; + +/** + * 根据班级代码查询班级宣传 + * @param classCode 班级代码 + */ +export const queryDataByClassCode = (classCode: string | number) => { + return request({ + url: `/stuwork/classpublicity/queryDataByClassCode/${classCode}`, + method: 'get', + }); +}; + diff --git a/src/api/stuwork/classroomhygienemonthly.ts b/src/api/stuwork/classroomhygienemonthly.ts new file mode 100644 index 0000000..b79db5b --- /dev/null +++ b/src/api/stuwork/classroomhygienemonthly.ts @@ -0,0 +1,61 @@ +import request from '/@/utils/request'; + +/** + * 获取教室月卫生列表 + */ +export const fetchList = (query: any) => { + return request({ + url: '/stuwork/classroomhygienemonthly/page', + method: 'get', + params: query + }); +}; + +/** + * 获取教室月卫生详情 + */ +export const getObj = (query: any) => { + return request({ + url: '/stuwork/classroomhygienemonthly/detail', + method: 'get', + params: query + }); +}; + +/** + * 删除教室月卫生 + */ +export const delObjs = (ids: string[]) => { + return request({ + url: '/stuwork/classroomhygienemonthly/delete', + method: 'post', + data: ids + }); +}; + +/** + * 教室卫生考核 + */ +export const checkClassRoomHygieneMonthly = (data: { schoolYear: string; schoolTerm: string; month: string }) => { + return request({ + url: '/stuwork/classroomhygienemonthly/checkClassRoomHygieneMonthly', + method: 'post', + data + }); +}; + +/** + * 导入教室月卫生数据 + */ +export const importData = (data: FormData) => { + return request({ + url: '/stuwork/classroomhygienemonthly/importData', + method: 'post', + data, + headers: { + 'Content-Type': 'multipart/form-data' + } + }); +}; + + diff --git a/src/api/stuwork/dormbuilding.ts b/src/api/stuwork/dormbuilding.ts new file mode 100644 index 0000000..37eee5f --- /dev/null +++ b/src/api/stuwork/dormbuilding.ts @@ -0,0 +1,12 @@ +import request from '/@/utils/request'; + +/** + * 获取楼号列表 + */ +export const getBuildingList = () => { + return request({ + url: '/stuwork/dormbuilding/list', + method: 'get' + }); +}; + diff --git a/src/api/stuwork/dormroomstudent.ts b/src/api/stuwork/dormroomstudent.ts new file mode 100644 index 0000000..42071c5 --- /dev/null +++ b/src/api/stuwork/dormroomstudent.ts @@ -0,0 +1,13 @@ +import request from '/@/utils/request'; + +/** + * 根据班级代码查询宿舍学生数量 + * @param classCode 班级代码 + */ +export const fearchStuNumByClassCode = (classCode: string | number) => { + return request({ + url: `/stuwork/dormroomstudent/fearchStuNumByClassCode/${classCode}`, + method: 'get', + }); +}; + diff --git a/src/api/stuwork/entrancerule.ts b/src/api/stuwork/entrancerule.ts new file mode 100644 index 0000000..0f2ce39 --- /dev/null +++ b/src/api/stuwork/entrancerule.ts @@ -0,0 +1,68 @@ +import request from '/@/utils/request'; + +/** + * 获取门禁规则列表 + */ +export const fetchList = (query: any) => { + return request({ + url: '/stuwork/entrancerule/page', + method: 'get', + params: query + }); +}; + +/** + * 获取门禁规则详情 + */ +export const getObj = (query: any) => { + return request({ + url: '/stuwork/entrancerule/detail', + method: 'get', + params: query + }); +}; + +/** + * 新增门禁规则 + */ +export const addObj = (obj: any) => { + return request({ + url: '/stuwork/entrancerule', + method: 'post', + data: obj + }); +}; + +/** + * 编辑门禁规则 + */ +export const putObj = (obj: any) => { + return request({ + url: '/stuwork/entrancerule/edit', + method: 'post', + data: obj + }); +}; + +/** + * 删除门禁规则 + */ +export const delObjs = (ids: string[]) => { + return request({ + url: '/stuwork/entrancerule/delete', + method: 'post', + data: ids + }); +}; + +/** + * 开启/关闭假期模式 + */ +export const openHoliday = (obj: any) => { + return request({ + url: '/stuwork/entrancerule/openHoliday', + method: 'post', + data: obj + }); +}; + diff --git a/src/api/stuwork/stupunlish.ts b/src/api/stuwork/stupunlish.ts new file mode 100644 index 0000000..a010ea1 --- /dev/null +++ b/src/api/stuwork/stupunlish.ts @@ -0,0 +1,13 @@ +import request from '/@/utils/request'; + +/** + * 根据班级代码查询惩罚数量 + * @param classCode 班级代码 + */ +export const queryPunlishNumByClass = (classCode: string | number) => { + return request({ + url: `/stuwork/stupunlish/queryPunlishNumByClass/${classCode}`, + method: 'get', + }); +}; + diff --git a/src/api/stuwork/teachclassroomassign.ts b/src/api/stuwork/teachclassroomassign.ts new file mode 100644 index 0000000..6542fb1 --- /dev/null +++ b/src/api/stuwork/teachclassroomassign.ts @@ -0,0 +1,13 @@ +import request from '/@/utils/request'; + +/** + * 根据班级代码查询教室分配 + * @param classCode 班级代码 + */ +export const getClassRoomByClassCode = (classCode: string | number) => { + return request({ + url: `/stuwork/teachclassroomassign/getClassRoomByClassCode/${classCode}`, + method: 'get', + }); +}; + diff --git a/src/assets/file/教室月卫生导入模板.xlsx b/src/assets/file/教室月卫生导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0103d1da277618c70afc001f2ab13ca9b7accaea GIT binary patch literal 11142 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 literal 0 HcmV?d00001 diff --git a/src/assets/file/班主任考核导入模板.xlsx b/src/assets/file/班主任考核导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e5fc557b671849ef8b47301186f6bf0f38946472 GIT binary patch literal 9290 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

Wl_$%w~=z zoR43kr(_0xga0)oLT9344A77)LjNB949P<`*%S!0efX6T75iDKixoTgSf)9s)?<&; zUb#3`T^w&5eGhhUt~;%_jr%^+5)4HWMh=;_6WsS5(RAz%*?TcT|kOE}-g}-X@iLskHT%cf@R~ zccrWwHy;D6aVDipf~$fFWoK7wRbbF*?>$vh3m#Q7AsgPYG@t{%+h3wJc^+QIxedzA z`q8D#<9_X-%*E(iLNAd>qnl|?wiJ4IZ-OC)ZCf;q#lmBGES}SS6H{kyE?1Tqfn~y2 z2*3LE?{s9Mg~f|85@=6jmc=3%lQ&^FF-p%@54TGW0Z{|0Ton zAPJ5emFs53?tLKrwptZE@Nwo`pHm(vn)~@DE8LIKJdV>jY;6%!VVY`0ewT8+mA33_ z-bB1eZpc;;-5ltq5-1AncW+fW@%7YR43zoUG7ayg?%0XYwD;BYCOBwI@cldsAlATF zb&Ne!fIi-Od{ ze`G}{C0AmUgKrG1|JmUn+s{fzK}vf;v02#6COJDkPH0?e#ML_rT;crE#k|j zew!0hN}s;cvk2;}&)1@pliQsgvEzC*Lo)oq)H(b20QSD_jYKbDE+ZM|ugs+$|38-h z>74!>oSP>(1cy)<8=-I#L7&j%@>A@e`}t3FZMs-7dXIxzg2w%vCZgD+(+zvGX2Cu% zW{hvFOp)dF(&{t&vvsmulk_n%gWHa2hZYtaj;9{c*qE^@oAc3Ouzcs9LTbf2e)K#m z%>JY<5*8CAQ^9zAT=xv3lPEt`15fXSYMy06W>`xzYYe21gh$#{XS+z0D$sp2Luw!8 z9lt%we|O>UyjuKiNp${(RyouuX5+raOrsWSIp^kx?IZz3F-mbqgm1tT(91pDkMv|y zAxz9D)Jq>fq)*Avr6BnneDyi?lu4kI&o9oKKT;2)Cl#YGIeLox>#!4jtergnQ-YQ& zr_JBm%SETUE|$=vjtOlsKd^Cn550sx2VXUQ^4*422f014gmmVkEWMy(bQLUP#aCF8&kBAu zl;f-;p4iSTuiAk=Ednep@++z-x|rM~f*tBi3Je)q=RWIzKru~0hbMI(Q^T=AiIlNw zt*(3ist&058e3eD9e*D4pwrx7_bre1x}&I^a9uIBCu}Wf^4y=kI+OT`DutA^X+%TL zCyNtBiO}V7)W_;RiY5dAC}=Q6GVaagpRGDyvEZdN zNJUo-{ly^K;mFE1v-rGU$?nocYiwN`Q}bEJnHl#jlCnH39Nr&q!Jqd4evb?^I54m< z(;|DB2cTOAonk^Zgz z7cc$47X3iY{u~dB=0W%mQTwpme-Fv8D9MukBSHN>(cd%KgP)%$IsQ}azw+Aec789n z{PP-Buzp?pBa}Z>|75>@-66m8Uw?b#{-@gC zY}oHp{=K02+du*ItpJ_!KVkb{lYZdVe~yO;YyXV!gYsWY`>!+qooj#4{Ta33|I+=N Xc~_Q4{Nu3VKrg5uL* { try { - await other.downBlobFile(other.adaptationUrl(prop.tempUrl), {}, 'temp.xlsx'); + // 如果是 assets 文件夹下的文件,使用 import.meta.url 获取文件 + if (prop.tempUrl && prop.tempUrl.includes('assets/file')) { + // 从路径中提取文件名 + const fileName = prop.tempUrl.split('/').pop() || 'template.xlsx'; + // 使用动态导入获取文件URL,从 components/Upload 到 assets/file 的相对路径 + const fileUrl = new URL(`../../assets/file/${fileName}`, import.meta.url).href; + const response = await fetch(fileUrl); + if (!response.ok) { + throw new Error('文件下载失败'); + } + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = fileName; + document.body.appendChild(link); + link.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(link); + } else { + // 使用后端接口下载 + const fileName = prop.tempUrl?.split('/').pop() || 'template.xlsx'; + await other.downBlobFile(other.adaptationUrl(prop.tempUrl), {}, fileName); + } } catch (error) { useMessage().error('模板下载失败,请先维护模板文件'); } diff --git a/src/router/backEnd.ts b/src/router/backEnd.ts index da51d92..bfa851a 100644 --- a/src/router/backEnd.ts +++ b/src/router/backEnd.ts @@ -132,6 +132,9 @@ export function backEndComponent(routes: any) { item.component = () => import('/@/layout/routerView/link.vue'); } item.path = '/iframes/' + window.btoa(item.path); + } else if (item.component === 'Layout' || item.componentPath === 'Layout') { + // 特殊处理 Layout 组件 + item.component = () => import('/@/layout/index.vue'); } else if (item.componentPath) { // 支持动态路径 /a/1 ==> /a ; /b/1 ==> /b item.component = dynamicImport(dynamicViewsModules, item.componentPath); } else { @@ -152,6 +155,11 @@ export function backEndComponent(routes: any) { * @returns 返回处理成函数后的 component */ export function dynamicImport(dynamicViewsModules: Record, component: string) { + // 特殊处理 Layout 组件 + if (component === 'Layout' || component === '/Layout') { + return () => import('/@/layout/index.vue'); + } + const keys = Object.keys(dynamicViewsModules); const matchKeys = keys.filter((key) => { @@ -169,7 +177,8 @@ export function dynamicImport(dynamicViewsModules: Record, com return false; } if (matchKeys?.length === 0) { - console.warn(`No match found for component: ${component}. Available keys:`, keys.slice(0, 10)); + // 如果找不到组件,不输出警告,避免控制台刷屏 + // console.warn(`No match found for component: ${component}. Available keys:`, keys.slice(0, 10)); return false; } } diff --git a/src/utils/other.ts b/src/utils/other.ts index d1befa9..cc226c1 100644 --- a/src/utils/other.ts +++ b/src/utils/other.ts @@ -48,10 +48,10 @@ export function setTagsViewNameI18n(item: any) { } } else { let name='' - if (item.name.indexOf("_") >= 0) { + if (item.name && typeof item.name === 'string' && item.name.indexOf("_") >= 0) { name=item.name.split("_")[0] }else{ - name=item.name + name=item.name || '' } // 非自定义 tagsView 名称 tagsViewName = i18n.global.t(name); @@ -500,7 +500,7 @@ export function toUnderline(str: string) { * * @param originUrl 原始路径 */ -const adaptationUrl = (originUrl?: string) => { +export function adaptationUrl(originUrl?: string) { // 微服务架构 不做路径转换,为空不做路径转换 const isMicro = import.meta.env.VITE_IS_MICRO; if (validateNull(isMicro) || isMicro === 'true') { @@ -509,7 +509,7 @@ const adaptationUrl = (originUrl?: string) => { // 转为 /admin 路由前缀的请求 return `/admin/${originUrl?.split('/').splice(2).join('/')}`; -}; +} /** * @description 获取不重复的id diff --git a/src/views/basic/basicclass/detail.vue b/src/views/basic/basicclass/detail.vue new file mode 100644 index 0000000..5e79731 --- /dev/null +++ b/src/views/basic/basicclass/detail.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/src/views/basic/basicclass/form.vue b/src/views/basic/basicclass/form.vue new file mode 100644 index 0000000..063ec5d --- /dev/null +++ b/src/views/basic/basicclass/form.vue @@ -0,0 +1,370 @@ + + + diff --git a/src/views/basic/basicclass/index.vue b/src/views/basic/basicclass/index.vue new file mode 100644 index 0000000..22df716 --- /dev/null +++ b/src/views/basic/basicclass/index.vue @@ -0,0 +1,453 @@ + + + diff --git a/src/views/basic/basicstudent/components/SimpleEdit.vue b/src/views/basic/basicstudent/components/SimpleEdit.vue new file mode 100644 index 0000000..b24e16a --- /dev/null +++ b/src/views/basic/basicstudent/components/SimpleEdit.vue @@ -0,0 +1,117 @@ + + + + diff --git a/src/views/basic/basicstudent/detail.vue b/src/views/basic/basicstudent/detail.vue new file mode 100644 index 0000000..c3c8a15 --- /dev/null +++ b/src/views/basic/basicstudent/detail.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/src/views/basic/basicstudent/form.vue b/src/views/basic/basicstudent/form.vue new file mode 100644 index 0000000..34aab9f --- /dev/null +++ b/src/views/basic/basicstudent/form.vue @@ -0,0 +1,536 @@ + + + + + diff --git a/src/views/basic/basicstudent/index.vue b/src/views/basic/basicstudent/index.vue new file mode 100644 index 0000000..3d4d1e2 --- /dev/null +++ b/src/views/basic/basicstudent/index.vue @@ -0,0 +1,799 @@ + + + diff --git a/src/views/stuwork/classassessmentsettle/detail.vue b/src/views/stuwork/classassessmentsettle/detail.vue new file mode 100644 index 0000000..aafda6e --- /dev/null +++ b/src/views/stuwork/classassessmentsettle/detail.vue @@ -0,0 +1,157 @@ + + + + diff --git a/src/views/stuwork/classassessmentsettle/form.vue b/src/views/stuwork/classassessmentsettle/form.vue new file mode 100644 index 0000000..3dfedf2 --- /dev/null +++ b/src/views/stuwork/classassessmentsettle/form.vue @@ -0,0 +1,250 @@ + + + diff --git a/src/views/stuwork/classassessmentsettle/index.vue b/src/views/stuwork/classassessmentsettle/index.vue new file mode 100644 index 0000000..f21ac6f --- /dev/null +++ b/src/views/stuwork/classassessmentsettle/index.vue @@ -0,0 +1,267 @@ + + + diff --git a/src/views/stuwork/classcheckdaily/detail.vue b/src/views/stuwork/classcheckdaily/detail.vue index aafda6e..62d9d98 100644 --- a/src/views/stuwork/classcheckdaily/detail.vue +++ b/src/views/stuwork/classcheckdaily/detail.vue @@ -9,7 +9,7 @@ :data="detailList" v-loading="loading" border - :cell-style="{ textAlign: 'center' }" + :cell-style="{ textAlign: 'center' }" :header-cell-style="{ textAlign: 'center', background: 'var(--el-table-row-hover-bg-color)' }"> @@ -24,7 +24,7 @@ 编辑 diff --git a/src/views/stuwork/classhygienedailyanalysis/detail.vue b/src/views/stuwork/classhygienedailyanalysis/detail.vue new file mode 100644 index 0000000..aafda6e --- /dev/null +++ b/src/views/stuwork/classhygienedailyanalysis/detail.vue @@ -0,0 +1,157 @@ + + + + diff --git a/src/views/stuwork/classhygienedailyanalysis/form.vue b/src/views/stuwork/classhygienedailyanalysis/form.vue new file mode 100644 index 0000000..0f38986 --- /dev/null +++ b/src/views/stuwork/classhygienedailyanalysis/form.vue @@ -0,0 +1,321 @@ + + + diff --git a/src/views/stuwork/classhygienedailyanalysis/index.vue b/src/views/stuwork/classhygienedailyanalysis/index.vue new file mode 100644 index 0000000..fd8a75e --- /dev/null +++ b/src/views/stuwork/classhygienedailyanalysis/index.vue @@ -0,0 +1,358 @@ + + + diff --git a/src/views/stuwork/classmasterevaluation/detail.vue b/src/views/stuwork/classmasterevaluation/detail.vue new file mode 100644 index 0000000..aafda6e --- /dev/null +++ b/src/views/stuwork/classmasterevaluation/detail.vue @@ -0,0 +1,157 @@ + + + + diff --git a/src/views/stuwork/classmasterevaluation/form.vue b/src/views/stuwork/classmasterevaluation/form.vue new file mode 100644 index 0000000..0f38986 --- /dev/null +++ b/src/views/stuwork/classmasterevaluation/form.vue @@ -0,0 +1,321 @@ + + + diff --git a/src/views/stuwork/classmasterevaluation/index.vue b/src/views/stuwork/classmasterevaluation/index.vue new file mode 100644 index 0000000..c2775a0 --- /dev/null +++ b/src/views/stuwork/classmasterevaluation/index.vue @@ -0,0 +1,485 @@ + + + diff --git a/src/views/stuwork/classmasterevaluationappeal/index.vue b/src/views/stuwork/classmasterevaluationappeal/index.vue new file mode 100644 index 0000000..2dcc5a4 --- /dev/null +++ b/src/views/stuwork/classmasterevaluationappeal/index.vue @@ -0,0 +1,378 @@ + + + diff --git a/src/views/stuwork/classroomhygienemonthly/detail.vue b/src/views/stuwork/classroomhygienemonthly/detail.vue new file mode 100644 index 0000000..0aa0c83 --- /dev/null +++ b/src/views/stuwork/classroomhygienemonthly/detail.vue @@ -0,0 +1,217 @@ + + + + + + diff --git a/src/views/stuwork/classroomhygienemonthly/form.vue b/src/views/stuwork/classroomhygienemonthly/form.vue new file mode 100644 index 0000000..6b8262a --- /dev/null +++ b/src/views/stuwork/classroomhygienemonthly/form.vue @@ -0,0 +1,212 @@ + + + diff --git a/src/views/stuwork/classroomhygienemonthly/index.vue b/src/views/stuwork/classroomhygienemonthly/index.vue new file mode 100644 index 0000000..9432b2a --- /dev/null +++ b/src/views/stuwork/classroomhygienemonthly/index.vue @@ -0,0 +1,406 @@ + + + diff --git a/src/views/stuwork/entrancerule/form.vue b/src/views/stuwork/entrancerule/form.vue new file mode 100644 index 0000000..86b4038 --- /dev/null +++ b/src/views/stuwork/entrancerule/form.vue @@ -0,0 +1,663 @@ + + + + + + diff --git a/src/views/stuwork/entrancerule/index.vue b/src/views/stuwork/entrancerule/index.vue new file mode 100644 index 0000000..a53c301 --- /dev/null +++ b/src/views/stuwork/entrancerule/index.vue @@ -0,0 +1,199 @@ + + +