From 992e9f5a3ec42891e897a7288777b0fb9270deb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E7=BA=A2=E5=85=B5?= <374362909@qq.com> Date: Sun, 1 Mar 2026 21:55:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=87=87=E8=B4=AD=E7=94=B3?= =?UTF-8?q?=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/purchase/docProcess.ts | 179 ++++++ src/api/purchase/purchasingdoc.ts | 34 +- src/api/purchase/purchasingrequisition.ts | 14 +- src/router/route.ts | 9 +- src/stores/userInfo.ts | 2 + src/types/pinia.d.ts | 1 + .../purchase/purchasingrequisition/add.vue | 16 +- .../agentDoc/AgentDocDialog.vue | 397 ------------- .../purchasingrequisition/agentDoc/index.vue | 166 ------ .../docAudit/DocAuditDialog.vue | 323 ----------- .../AuditRecordList.vue | 2 +- .../docProcess/DocProcessDialog.vue | 520 ++++++++++++++++++ .../{docAudit => docProcess}/index.vue | 112 +++- .../purchase/purchasingrequisition/index.vue | 10 +- 14 files changed, 837 insertions(+), 948 deletions(-) create mode 100644 src/api/purchase/docProcess.ts delete mode 100644 src/views/purchase/purchasingrequisition/agentDoc/AgentDocDialog.vue delete mode 100644 src/views/purchase/purchasingrequisition/agentDoc/index.vue delete mode 100644 src/views/purchase/purchasingrequisition/docAudit/DocAuditDialog.vue rename src/views/purchase/purchasingrequisition/{docAudit => docProcess}/AuditRecordList.vue (96%) create mode 100644 src/views/purchase/purchasingrequisition/docProcess/DocProcessDialog.vue rename src/views/purchase/purchasingrequisition/{docAudit => docProcess}/index.vue (64%) diff --git a/src/api/purchase/docProcess.ts b/src/api/purchase/docProcess.ts new file mode 100644 index 0000000..48a6c0e --- /dev/null +++ b/src/api/purchase/docProcess.ts @@ -0,0 +1,179 @@ +/* + * 招标文件处理统一API + * 整合招标代理和审核部门的接口调用 + */ + +import request from '/@/utils/request'; + +/** + * 获取列表数据(根据模式调用不同接口) + * @param mode 模式:agent-招标代理,audit-审核部门 + * @param params 分页参数 + */ +export function getDocProcessList(mode: string, params?: any) { + const url = mode === 'agent' + ? '/purchase/purchasingdoc/agent/list' + : '/purchase/purchasingdoc/audit/page'; + return request({ + url, + method: 'get', + params + }); +} + +/** + * 获取采购需求文件列表 + * @param applyId 采购申请ID + */ +export function getRequirementFiles(applyId: number | string) { + return request({ + url: `/purchase/purchasingdoc/agent/requirement/${applyId}`, + method: 'get' + }); +} + +/** + * 获取招标文件列表 + * @param applyId 采购申请ID + */ +export function getDocList(applyId: number | string) { + return request({ + url: `/purchase/purchasingdoc/list/${applyId}`, + method: 'get' + }); +} + +/** + * 上传招标文件(招标代理) + * @param data 文件数据 + */ +export function uploadDoc(data: any) { + return request({ + url: '/purchase/purchasingdoc/upload', + method: 'post', + data + }); +} + +/** + * 重新上传招标文件 + * @param data 文件数据 + */ +export function reuploadDoc(data: any) { + return request({ + url: '/purchase/purchasingdoc/reupload', + method: 'post', + data + }); +} + +/** + * 获取招标文件下载地址 + * @param id 招标文件ID + */ +export function getDocDownloadUrl(id: number | string) { + return `/purchase/purchasingdoc/download/${id}`; +} + +/** + * 下载招标文件(返回blob) + * @param id 招标文件ID + */ +export function downloadDocById(id: number | string) { + return request({ + url: `/purchase/purchasingdoc/download/${id}`, + method: 'get', + responseType: 'blob' + }); +} + +/** + * 根据文件ID下载采购附件(返回blob) + * @param fileId 文件ID + */ +export function downloadFileById(fileId: string | number) { + return request({ + url: '/purchase/purchasingfiles/downloadById', + method: 'get', + params: { fileId }, + responseType: 'blob' + }); +} + +/** + * 确认无误 + * @param data 审核信息 + */ +export function confirmDoc(data: any) { + return request({ + url: '/purchase/purchasingdoc/confirm', + method: 'post', + data + }); +} + +/** + * 退回修改 + * @param data 审核信息 + */ +export function returnDoc(data: any) { + return request({ + url: '/purchase/purchasingdoc/return', + method: 'post', + data + }); +} + +/** + * 确认流程结束 + * @param applyId 采购申请ID + */ +export function completeDoc(applyId: number | string) { + return request({ + url: '/purchase/purchasingdoc/complete', + method: 'post', + params: { applyId } + }); +} + +/** + * 获取审核记录 + * @param applyId 采购申请ID + */ +export function getAuditRecords(applyId: number | string) { + return request({ + url: `/purchase/purchasingdoc/audit-records/${applyId}`, + method: 'get' + }); +} + +/** + * 获取可执行操作 + * @param applyId 采购申请ID + */ +export function getAvailableActions(applyId: number | string) { + return request({ + url: `/purchase/purchasingdoc/actions/${applyId}`, + method: 'get' + }); +} + +/** + * 获取采购申请附件列表 + * @param purchaseId 采购申请ID + */ +export function getApplyFiles(purchaseId: string | number) { + return request({ + url: '/purchase/purchasingfiles/applyFiles', + method: 'post', + params: { purchaseId } + }); +} + +/** + * 获取文件上传地址 + */ +export function getFileUploadUrl() { + const baseUrl = import.meta.env.VITE_API_URL || ''; + return `${baseUrl}/purchase/purchasingfiles/upload`; +} \ No newline at end of file diff --git a/src/api/purchase/purchasingdoc.ts b/src/api/purchase/purchasingdoc.ts index cb8e3ea..76c62f0 100644 --- a/src/api/purchase/purchasingdoc.ts +++ b/src/api/purchase/purchasingdoc.ts @@ -18,7 +18,7 @@ import request from '/@/utils/request'; /** - * 获取采购文件列表(含历史版本) + * 获取招标文件列表(含历史版本) * @param applyId 采购申请ID */ export function getDocList(applyId: number | string) { @@ -29,7 +29,7 @@ export function getDocList(applyId: number | string) { } /** - * 上传采购文件(招标代理) + * 上传招标文件(招标代理) * @param data 文件信息 */ export function uploadDoc(data: any) { @@ -41,7 +41,7 @@ export function uploadDoc(data: any) { } /** - * 重新上传采购文件 + * 重新上传招标文件 * @param data 文件信息 */ export function reuploadDoc(data: any) { @@ -53,13 +53,25 @@ export function reuploadDoc(data: any) { } /** - * 获取采购文件下载地址 - * @param id 采购文件ID + * 获取招标文件下载地址 + * @param id 招标文件ID */ export function getDocDownloadUrl(id: number | string) { return `/purchase/purchasingdoc/download/${id}`; } +/** + * 下载招标文件(返回blob) + * @param id 招标文件ID + */ +export function downloadDocById(id: number | string) { + return request({ + url: `/purchase/purchasingdoc/download/${id}`, + method: 'get', + responseType: 'blob' + }); +} + /** * 确认无误 * @param data 审核信息 @@ -128,4 +140,16 @@ export function getAvailableActions(applyId: number | string) { url: '/purchase/purchasingdoc/actions/' + applyId, method: 'get' }); +} + +/** + * 审核人员分页查询招标文件列表(只查询有招标文件记录的申请) + * @param params 分页和筛选参数 + */ +export function getDocAuditPage(params?: any) { + return request({ + url: '/purchase/purchasingdoc/audit/page', + method: 'get', + params + }); } \ No newline at end of file diff --git a/src/api/purchase/purchasingrequisition.ts b/src/api/purchase/purchasingrequisition.ts index 3fa6c95..5e05784 100644 --- a/src/api/purchase/purchasingrequisition.ts +++ b/src/api/purchase/purchasingrequisition.ts @@ -176,9 +176,9 @@ export function getContracts(params?: any) { } /** - * 实施采购:上传采购文件并关联到申请单(可同时保存采购代表人方式与人员) + * 实施采购:上传招标文件并关联到申请单(可同时保存采购代表人方式与人员) * @param id 采购申请ID - * @param fileIds 已上传的采购文件ID列表(fileType=130) + * @param fileIds 已上传的招标文件ID列表(fileType=130) * @param implementType 实施采购方式 1:自行组织采购 2:委托代理采购 * @param representorTeacherNo 需求部门初审-指定采购代表人(单人) * @param representors 需求部门初审-部门多人逗号分隔 @@ -198,7 +198,7 @@ export function implementApply( } /** - * 发起采购文件审批流程(需已实施采购并上传采购文件) + * 发起招标文件审批流程(需已实施采购并上传招标文件) * @param id 采购申请ID * @param representorTeacherNo 需求部门初审-指定采购代表人(单人,用户ID或工号) * @param representors 需求部门初审-部门多人由系统抽取(多人,用户ID或工号逗号分隔) @@ -256,7 +256,7 @@ export function getApplyTemplateDownloadUrl(id: string | number) { } /** - * 下载文件审批表:导出采购文件审批表 Word 文档(fileapply.docx 模板) + * 下载文件审批表:导出招标文件审批表 Word 文档(fileapply.docx 模板) * @param id 采购申请ID */ export function getFileApplyTemplateDownloadUrl(id: string | number) { @@ -300,7 +300,7 @@ export function getAgentApplyDetail(applyId: number | string) { } /** - * 招标代理上传采购文件 + * 招标代理上传招标文件 * @param data 文件数据 */ export function uploadAgentDoc(data: any) { @@ -312,7 +312,7 @@ export function uploadAgentDoc(data: any) { } /** - * 招标代理重新上传采购文件 + * 招标代理重新上传招标文件 * @param data 文件数据 */ export function reuploadAgentDoc(data: any) { @@ -324,7 +324,7 @@ export function reuploadAgentDoc(data: any) { } /** - * 获取采购文件列表 + * 获取招标文件列表 * @param applyId 采购申请ID */ export function getDocList(applyId: number | string) { diff --git a/src/router/route.ts b/src/router/route.ts index 8c46803..82f9a8a 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -99,14 +99,7 @@ export const staticRoutes: Array = [ isAuth: true, }, }, - { - path: '/purchase/purchasingrequisition/add', - name: 'purchasingrequisition.add', - component: () => import('/@/views/purchase/purchasingrequisition/add.vue'), - meta: { - isAuth: false, // 不需要认证,纯页面展示 - }, - }, + ...staticRoutesFlow ]; diff --git a/src/stores/userInfo.ts b/src/stores/userInfo.ts index fd43023..9c40d33 100644 --- a/src/stores/userInfo.ts +++ b/src/stores/userInfo.ts @@ -15,6 +15,7 @@ export const useUserInfo = defineStore('userInfo', { photo: '', time: 0, roles: [], + roleCodes: [], authBtnList: [], }, }), @@ -134,6 +135,7 @@ export const useUserInfo = defineStore('userInfo', { user: res.data.sysUser, time: new Date().getTime(), roles: res.data.roles, + roleCodes: res.data.roleCodes || [], authBtnList: res.data.permissions, }; this.userInfos = userInfo; diff --git a/src/types/pinia.d.ts b/src/types/pinia.d.ts index c1acace..8e48a96 100644 --- a/src/types/pinia.d.ts +++ b/src/types/pinia.d.ts @@ -8,6 +8,7 @@ declare interface UserInfosState { authBtnList: string[]; photo: string; roles: string[]; + roleCodes: string[]; time: number; userName: string; [key: string]: T; diff --git a/src/views/purchase/purchasingrequisition/add.vue b/src/views/purchase/purchasingrequisition/add.vue index 6100480..07a424b 100644 --- a/src/views/purchase/purchasingrequisition/add.vue +++ b/src/views/purchase/purchasingrequisition/add.vue @@ -440,7 +440,7 @@
-
采购文件
+
招标文件
@@ -632,7 +632,7 @@ const dataForm = reactive({ agentId: '', agentName: '', }); -/** 查看时展示的采购文件列表(实施采购上传的 type=130) */ +/** 查看时展示的招标文件列表(实施采购上传的 type=130) */ const viewImplementPurchaseFiles = ref<{ id: string; fileTitle?: string; createTime?: string; remark?: string }[]>([]); const categoryTreeData = ref([]); const categoryCodePath = ref([]); // 级联选择器的路径数组 @@ -652,7 +652,7 @@ const loading = ref(false); const helpDialogVisible = ref(false); // 文件类型映射(对应数据库 file_type 字段) -// 10:商务洽谈纪要 20:市场采购纪要 30:网上商城采购相关材料 40:可行性论证报告 50:会议记录 60:其他材料 70:单一来源专家论证表 90:进口产品专家论证表 100:政府采购意向表 110:履约验收单 120:采购需求表 130:采购文件 +// 10:商务洽谈纪要 20:市场采购纪要 30:网上商城采购相关材料 40:可行性论证报告 50:会议记录 60:其他材料 70:单一来源专家论证表 90:进口产品专家论证表 100:政府采购意向表 110:履约验收单 120:采购需求表 130:招标文件 const FILE_TYPE_MAP: Record = { businessNegotiationTable: '10', // 商务洽谈纪要 marketPurchaseMinutes: '20', // 市场采购纪要 @@ -1286,10 +1286,10 @@ async function loadDetail(applyId: string | number) { }); } }); - // 查看时展示实施采购的采购文件列表(type=130) + // 查看时展示实施采购的招标文件列表(type=130) const purchaseFiles = fileList.filter((f: any) => String(f.fileType) === '130').map((f: any) => ({ id: f.id, - fileTitle: f.fileTitle || f.file_title || '采购文件', + fileTitle: f.fileTitle || f.file_title || '招标文件', createTime: f.createTime || f.create_time, remark: f.remark, })); @@ -1318,13 +1318,13 @@ function downloadImplementFile(file: { id?: string; remark?: string; fileTitle?: // 优先使用文件ID下载 if (file?.id) { const url = `/purchase/purchasingfiles/downloadById?fileId=${encodeURIComponent(file.id)}`; - other.downBlobFile(url, {}, file.fileTitle || '采购文件'); + other.downBlobFile(url, {}, file.fileTitle || '招标文件'); return; } // 兼容旧数据:使用文件路径下载 if (file?.remark) { - const url = `/purchase/purchasingfiles/download?fileName=${encodeURIComponent(file.remark)}&fileTitle=${encodeURIComponent(file.fileTitle || '采购文件')}`; - other.downBlobFile(url, {}, file.fileTitle || '采购文件'); + const url = `/purchase/purchasingfiles/download?fileName=${encodeURIComponent(file.remark)}&fileTitle=${encodeURIComponent(file.fileTitle || '招标文件')}`; + other.downBlobFile(url, {}, file.fileTitle || '招标文件'); return; } useMessage().warning('无法获取文件信息'); diff --git a/src/views/purchase/purchasingrequisition/agentDoc/AgentDocDialog.vue b/src/views/purchase/purchasingrequisition/agentDoc/AgentDocDialog.vue deleted file mode 100644 index 6736044..0000000 --- a/src/views/purchase/purchasingrequisition/agentDoc/AgentDocDialog.vue +++ /dev/null @@ -1,397 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/purchase/purchasingrequisition/agentDoc/index.vue b/src/views/purchase/purchasingrequisition/agentDoc/index.vue deleted file mode 100644 index 1a3b22e..0000000 --- a/src/views/purchase/purchasingrequisition/agentDoc/index.vue +++ /dev/null @@ -1,166 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/purchase/purchasingrequisition/docAudit/DocAuditDialog.vue b/src/views/purchase/purchasingrequisition/docAudit/DocAuditDialog.vue deleted file mode 100644 index 8eda76d..0000000 --- a/src/views/purchase/purchasingrequisition/docAudit/DocAuditDialog.vue +++ /dev/null @@ -1,323 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/purchase/purchasingrequisition/docAudit/AuditRecordList.vue b/src/views/purchase/purchasingrequisition/docProcess/AuditRecordList.vue similarity index 96% rename from src/views/purchase/purchasingrequisition/docAudit/AuditRecordList.vue rename to src/views/purchase/purchasingrequisition/docProcess/AuditRecordList.vue index d72e2de..d5cf60e 100644 --- a/src/views/purchase/purchasingrequisition/docAudit/AuditRecordList.vue +++ b/src/views/purchase/purchasingrequisition/docProcess/AuditRecordList.vue @@ -21,7 +21,7 @@ + + \ No newline at end of file diff --git a/src/views/purchase/purchasingrequisition/docAudit/index.vue b/src/views/purchase/purchasingrequisition/docProcess/index.vue similarity index 64% rename from src/views/purchase/purchasingrequisition/docAudit/index.vue rename to src/views/purchase/purchasingrequisition/docProcess/index.vue index 8cd6cd2..dd3a66c 100644 --- a/src/views/purchase/purchasingrequisition/docAudit/index.vue +++ b/src/views/purchase/purchasingrequisition/docProcess/index.vue @@ -26,7 +26,8 @@ clearable style="width: 200px" /> - + +
- - 采购文件审核 + + + + {{ pageTitle }}
@@ -78,28 +81,33 @@ - - + + + + - + + - + + + @@ -117,32 +125,73 @@
- - + + {{mode}} +
- diff --git a/src/views/purchase/purchasingrequisition/index.vue b/src/views/purchase/purchasingrequisition/index.vue index 2717d95..d4bf562 100644 --- a/src/views/purchase/purchasingrequisition/index.vue +++ b/src/views/purchase/purchasingrequisition/index.vue @@ -292,8 +292,8 @@ - - + + import('./implementForm.vue')); const ActionDropdown = defineAsyncComponent(() => import('/@/components/tools/action-dropdown.vue')); const PurchasingAcceptModal = defineAsyncComponent(() => import('./accept/PurchasingAcceptModal.vue')); const FlowCommentTimeline = defineAsyncComponent(() => import('/@/views/jsonflow/comment/timeline.vue')); -const DocAuditDialog = defineAsyncComponent(() => import('./docAudit/DocAuditDialog.vue')); +// const DocAuditDialog = defineAsyncComponent(() => import('./docAudit/DocAuditDialog.vue')); // 字典数据和品目树数据 const dictData = ref({ @@ -537,7 +537,7 @@ const handleImplement = (row: any) => { implementFormRef.value?.openDialog(row); }; -/** 打开采购文件审核 */ +/** 打开招标文件审核 */ const handleDocAudit = (row: any) => { docAuditDialogRef.value?.open(row); }; @@ -639,7 +639,7 @@ const getActionMenuItems = (row: any) => { // }, // { // command: 'docAudit', - // label: '采购文件审核', + // label: '招标文件审核', // icon: DocumentChecked, // visible: () => row?.implementType === '2' && row?.agentId, // },