diff --git a/public/templates/lyys-template-A.docx b/public/templates/lyys-template-A.docx new file mode 100644 index 0000000..f22e259 Binary files /dev/null and b/public/templates/lyys-template-A.docx differ diff --git a/public/templates/lyys-template-B.docx b/public/templates/lyys-template-B.docx new file mode 100644 index 0000000..938288c Binary files /dev/null and b/public/templates/lyys-template-B.docx differ diff --git a/public/templates/lyys-template-C.docx b/public/templates/lyys-template-C.docx new file mode 100644 index 0000000..d712947 Binary files /dev/null and b/public/templates/lyys-template-C.docx differ diff --git a/src/api/finance/purchaseagent.ts b/src/api/finance/purchaseagent.ts index 6f4ec98..cbfdd50 100644 --- a/src/api/finance/purchaseagent.ts +++ b/src/api/finance/purchaseagent.ts @@ -76,3 +76,19 @@ export function delObj(id: string | number) { }); } +/** + * 代理汇总(按条件统计各代理的项目数、预算金额、合同金额) + */ +export function getAgentSummary(params?: { + deptCode?: string + planStartDate?: string + planEndDate?: string + hasAcceptEvaluation?: string +}) { + return request({ + url: '/purchase/purchasingagent/summary', + method: 'get', + params + }); +} + diff --git a/src/api/finance/purchasingrequisition.ts b/src/api/finance/purchasingrequisition.ts index 7fec5da..64c1ea1 100644 --- a/src/api/finance/purchasingrequisition.ts +++ b/src/api/finance/purchasingrequisition.ts @@ -76,6 +76,20 @@ export function submitObj(obj: any) { }); } +/** + * 分配招标代理(指定或随机),仅学校统一采购或部门自行采购且委托采购中心采购时可用 + * @param applyId 采购申请ID + * @param mode random | designated + * @param agentId 指定模式时的代理ID + */ +export function assignAgent(applyId: number | string, mode: 'random' | 'designated', agentId?: string) { + return request({ + url: '/purchase/purchasingapply/assign-agent', + method: 'post', + data: { id: Number(applyId), mode, agentId: agentId || undefined } + }); +} + /** * 修改采购申请 * @param obj 对象数据 diff --git a/src/api/purchase/purchasingAccept.ts b/src/api/purchase/purchasingAccept.ts index f72e252..eaaf2ad 100644 --- a/src/api/purchase/purchasingAccept.ts +++ b/src/api/purchase/purchasingAccept.ts @@ -135,14 +135,22 @@ export function getAcceptanceItems(acceptanceType: string) { } /** - * 下载履约验收模板 + * 导出履约验收评价表(仅填写模式可导出) + * 单期返回 docx,exportAll=true 时返回全部期数 zip */ -export function downloadPerformanceAcceptanceTemplate(purchaseId: string, batch?: number) { +export function downloadPerformanceAcceptanceTemplate( + purchaseId: string, + batch?: number, + exportAll?: boolean +) { + const params: Record = { purchaseId } + if (exportAll === true) params.exportAll = true + else if (batch != null) params.batch = batch return request({ url: '/purchase/purchasingAccept/export-performance-acceptance-template', method: 'get', - params: { purchaseId, batch }, - responseType: 'blob' // 重要:用于文件下载 + params, + responseType: 'blob' }) } diff --git a/src/api/recruit/recruitMajorCategory.ts b/src/api/recruit/recruitMajorCategory.ts new file mode 100644 index 0000000..ec56fb7 --- /dev/null +++ b/src/api/recruit/recruitMajorCategory.ts @@ -0,0 +1,30 @@ +import request from "/@/utils/request" + +// ========== 基础CRUD接口 ========== + +/** + * 分页查询列表数据 + * @param query - 查询参数对象 + * @returns Promise<分页数据> + */ +export function fetchList(query?: Object) { + return request({ + url: '/recruit/recruitMajorCategory/page', + method: 'get', + params: query + }) +} + +/** + * 获取专业类目树结构 + * @param obj - 查询参数对象(包含ID等) + * @returns Promise<数据详情> + */ +export function majorCateTree(obj?: Object) { + return request({ + url: '/recruit/recruitMajorCategory/majorCateTree', + method: 'get', + params: obj + }) +} + diff --git a/src/views/admin/system/menu/form.vue b/src/views/admin/system/menu/form.vue index 2f67714..d5a5f42 100644 --- a/src/views/admin/system/menu/form.vue +++ b/src/views/admin/system/menu/form.vue @@ -176,7 +176,6 @@ const dataRules = reactive({ trigger: 'blur', }], path: [{validator: rule.overLength, trigger: 'blur'}, {required: true, message: '路径不能为空', trigger: 'blur'}], - icon: [{validator: rule.overLength, trigger: 'blur'}, {required: true, message: '图标不能为空', trigger: 'blur'}], permission: [{validator: rule.overLength, trigger: 'blur'}, { required: true, message: '权限代码不能为空', diff --git a/src/views/admin/system/role/change-role.vue b/src/views/admin/system/role/change-role.vue index eb6f195..e4eb5c3 100644 --- a/src/views/admin/system/role/change-role.vue +++ b/src/views/admin/system/role/change-role.vue @@ -2,7 +2,7 @@ + @click="openSummaryDialog" + > 代理汇总 + + + + + + + + + + + + + + + + + + + + + + + 查询 + 清空 + + + + + + + + + + + + + + diff --git a/src/views/recruit/newstucheckin/index.vue b/src/views/recruit/newstucheckin/index.vue index f559795..2523636 100644 --- a/src/views/recruit/newstucheckin/index.vue +++ b/src/views/recruit/newstucheckin/index.vue @@ -208,7 +208,7 @@ - + @@ -240,7 +253,7 @@ import { ref, reactive, onMounted, defineAsyncComponent } from 'vue' import { useAuth } from '/@/hooks/auth' import { BasicTableProps, useTable } from '/@/hooks/table' -import { useMessage } from '/@/hooks/message' +import {useMessage, useMessageBox} from '/@/hooks/message' import { fetchList } from '/@/api/recruit/newstucheckin' import { getDictsByTypes } from '/@/api/admin/dict' import { useDict } from '/@/hooks/dict' @@ -251,6 +264,7 @@ import { getList } from '/@/api/recruit/recruitstudentplangroup' import DetailPopover from '/@/components/DetailPopover/index.vue' import ClickableTag from '/@/components/ClickableTag/index.vue' import { InfoFilled, CircleCheck, CircleClose, DocumentChecked, Warning, Clock } from '@element-plus/icons-vue' +import {leaveSchool} from "/@/api/recruit/recruitstudentsignup"; const StuCheckIn = defineAsyncComponent(() => import('./stu-check-in.vue')) const TeacherNameNo = defineAsyncComponent(() => import('/@/components/TeacherNameNo/index.vue')) @@ -430,6 +444,19 @@ const init = async () => { } } +const handleLeaveSchool = (row: any, force: any) => { + var str = force? '强制' : ''; + useMessageBox() + .confirm('是否确认'+str+'办理退档操作?请谨慎操作') + .then(() => { + return leaveSchool({ 'id':row.id,'force':force }); + }) + .then(() => { + message.success('操作成功'); + getDataList(); + }); +}; + onMounted(() => { init() }) diff --git a/src/views/recruit/recruitMajorCategory/index.vue b/src/views/recruit/recruitMajorCategory/index.vue new file mode 100644 index 0000000..4ab47bc --- /dev/null +++ b/src/views/recruit/recruitMajorCategory/index.vue @@ -0,0 +1,129 @@ + + + diff --git a/src/views/recruit/recruitplanmajor/detaiform.vue b/src/views/recruit/recruitplanmajor/detaiform.vue index ec1af78..d6fdd2d 100644 --- a/src/views/recruit/recruitplanmajor/detaiform.vue +++ b/src/views/recruit/recruitplanmajor/detaiform.vue @@ -1,253 +1,189 @@ diff --git a/src/views/recruit/recruitplanmajor/majorGroupByDept.vue b/src/views/recruit/recruitplanmajor/majorGroupByDept.vue index 804be5c..362f5c9 100644 --- a/src/views/recruit/recruitplanmajor/majorGroupByDept.vue +++ b/src/views/recruit/recruitplanmajor/majorGroupByDept.vue @@ -1,5 +1,5 @@