diff --git a/README.md b/README.md index f31db442..a86a97fc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ ```shell -generate-api --swagger_url=http://127.0.0.1:4523/export/openapi/2?version=3.0 --template ./resource/apiDefinitions.ejs --output_dir ./resource --type path --prefix_to_filter / +generate-api --swagger_url="http://127.0.0.1:4523/export/openapi?projectId=4582192&specialPurpose=openapi-generator" --template ./resource/apiDefinitions.ejs --output_dir ./resource --type path --prefix_to_filter / ``` diff --git a/apps/web-contract/src/api/index.ts b/apps/web-contract/src/api/index.ts index 4ec32928..0e6a53b7 100644 --- a/apps/web-contract/src/api/index.ts +++ b/apps/web-contract/src/api/index.ts @@ -170,6 +170,11 @@ export default { /** 协同办公/出差申请 下一审核节点 */ post_getNextNodeUserConfig: (data?: BodyOptions) => http.post('/app/ccsq/getNextNodeUserConfig', data), + /** 协同办公/出差申请 查看出差信息 */ + get_getBusinessTripInfo: (data?: QueryOptions) => + http.get('/app/ccsq/getBusinessTripInfo', data), + /** 协同办公/出差申请 查看审核过程 */ + get_history: (data?: QueryOptions) => http.get('/app/ccsq/history', data), }, orderfood: { /** 协同办公/订餐管理/订餐 订餐加载接口 */ @@ -413,9 +418,6 @@ export default { /** 合同系统/立项废除 退回 */ post_rollback: (data?: BodyOptions) => http.post('/app/contractBaseInfo/rollback', data), - /** 合同系统/立项废除 合同立项废除 */ - post_abolish: (data?: BodyOptions) => - http.post('/app/contractBaseInfo/abolish', data), /** 合同系统/立项废除 提交 */ post_abolishSubmit: (data?: BodyOptions) => http.post('/app/contractBaseInfo/abolishSubmit', data), @@ -535,7 +537,7 @@ export default { /** 合同系统/选商废除 退回 */ post_abolishRollback: (data?: BodyOptions) => http.post('/app/selectMerchantsBasicInfo/abolishRollback', data), - // /contractBaseInfo/applyFlowStart + /** 合同系统/选商 流程启动(非待办提交) */ post_flowStart: (data?: BodyOptions) => http.post('/app/selectMerchantsBasicInfo/flowStart', data), }, @@ -613,7 +615,7 @@ export default { /** 合同系统/归档/合同归档 保存合同归档 */ post_save: (data?: BodyOptions) => http.post('/app/contractFilingFormal/save', data), - /** 合同系统/归档/合同回档 分页查询 */ + /** 合同系统/归档/合同回档 分页查询-已归档 */ get_pageArchivedContract: (data?: QueryOptions) => http.get('/app/contractFilingFormal/pageArchivedContract', data), /** 合同系统/归档/合同回档 回档 */ @@ -653,53 +655,49 @@ export default { }, flowCenter: { /** 流程中心 启动流程 */ - post_start: (data?: BodyOptions) => - http.post('/app/flowCenter/start', data), + post_start: (data?: BodyOptions) => http.post('/flowCenter/start', data), /** 流程中心 审核通过 */ - post_agree: (data?: BodyOptions) => - http.post('/app/flowCenter/agree', data), + post_agree: (data?: BodyOptions) => http.post('/flowCenter/agree', data), /** 流程中心 审核退回 */ post_rollback: (data?: BodyOptions) => - http.post('/app/flowCenter/rollback', data), + http.post('/flowCenter/rollback', data), /** 流程中心 获取待办 */ post_getTodoList: (data?: BodyOptions) => - http.post('/app/flowCenter/getTodoList', data), + http.post('/flowCenter/getTodoList', data), /** 流程中心 获取已办 */ post_doneList: (data?: BodyOptions) => - http.post('/app/flowCenter/doneList', data), + http.post('/flowCenter/doneList', data), /** 流程中心 审核撤回 */ - get_revoke: (data?: QueryOptions) => - http.get('/app/flowCenter/revoke', data), + get_revoke: (data?: QueryOptions) => http.get('/flowCenter/revoke', data), /** 流程中心 审核记录 */ - get_history: (data?: QueryOptions) => - http.get('/app/flowCenter/history', data), + get_history: (data?: QueryOptions) => http.get('/flowCenter/history', data), /** 流程中心 查看流程图 */ get_getFlowImg: (data?: QueryOptions) => - http.get('/app/flowCenter/getFlowImg', data), + http.get('/flowCenter/getFlowImg', data), /** 流程中心 获取可退回节点 */ get_getReturnNode: (data?: QueryOptions) => - http.get('/app/flowCenter/getReturnNode', data), + http.get('/flowCenter/getReturnNode', data), /** 流程中心 获取流程节点人员配置信息 */ get_getNextNodeUserConfig: (data?: QueryOptions) => - http.get('/app/flowCenter/getNextNodeUserConfig', data), + http.get('/flowCenter/getNextNodeUserConfig', data), /** 流程中心 获取待办数量 */ get_getTodoListSize: (data?: QueryOptions) => - http.get('/app/flowCenter/getTodoListSize', data), + http.get('/flowCenter/getTodoListSize', data), /** 流程中心 获取当前审核节点配置信息 */ get_getNodeConfigInfo: (data?: QueryOptions) => - http.get('/app/flowCenter/getNodeConfigInfo', data), + http.get('/flowCenter/getNodeConfigInfo', data), /** 流程中心 获取下一节点配置信息 */ get_getNextNodeConfig: (data?: QueryOptions) => - http.get('/app/flowCenter/getNextNodeConfig', data), + http.get('/flowCenter/getNextNodeConfig', data), /** 流程中心 获取流程节点人员配置信息 */ post_getFlowNodeUserConfig: (data?: BodyOptions) => - http.post('/app/flowCenter/getFlowNodeUserConfig', data), + http.post('/flowCenter/getFlowNodeUserConfig', data), /** 流程中心 获取流程变量配置 */ get_getFlowVariablesConfig: (data?: QueryOptions) => - http.get('/app/flowCenter/getFlowVariablesConfig', data), + http.get('/flowCenter/getFlowVariablesConfig', data), /** 流程中心 获取流程所有人员配置信息 */ get_getFlowUserConfig: (data?: QueryOptions) => - http.get('/app/flowCenter/getFlowUserConfig', data), + http.get('/flowCenter/getFlowUserConfig', data), }, rl: { moduleParameter: { @@ -782,6 +780,9 @@ export default { /** 合同系统 流程已办 */ get_getDoneTaskByUserID: (data?: QueryOptions) => http.get('/app/workFlow/getDoneTaskByUserID', data), + /** 合同系统 获取流程图 */ + get_getFlowImg: (data?: QueryOptions) => + http.get('/app/workFlow/getFlowImg', data), }, biddingResult: { /** 合同系统/选商/选商结果 分页查询 */ @@ -822,8 +823,110 @@ export default { /** 合同系统/签约授权 查询单条签约授权数据 */ get_getOne: (data?: QueryOptions) => http.get('/app/sqConsignPt/getOne', data), - /** 合同系统/签约授权 签约授权提交 */ + /** 合同系统/签约授权 签约授权提交(非待办提交) */ post_flowStart: (data?: BodyOptions) => http.post('/app/sqConsignPt/flowStart', data), + /** 合同系统/签约授权 删除 */ + post_deletes: (data?: BodyOptions) => + http.post('/app/sqConsignPt/deletes', data), + /** 合同系统/签约授权 签约授权提交 */ + post_submit: (data?: BodyOptions) => + http.post('/app/sqConsignPt/submit', data), + }, + addressorsort: { + /** 协同办公/会议管理/发言人顺序配置 发言人顺序查询 */ + get_page: (data?: QueryOptions) => + http.get('/app/addressorsort/page', data), + /** 协同办公/会议管理/发言人顺序配置 发言人排序保存 */ + post_save: (data?: BodyOptions) => + http.post('/app/addressorsort/save', data), + /** 协同办公/会议管理/发言人顺序配置 删除 */ + post_deletes: (data?: BodyOptions) => + http.post('/app/addressorsort/deletes', data), + }, + equInfo: { + /** 设备管理/设备静态库管理/ 设备信息维护 设备信息保存 */ + post_save: (data?: BodyOptions) => http.post('/app/equInfo/save', data), + /** 设备管理/设备静态库管理/ 设备信息维护 设备信息(获取/查询) */ + get_page: (data?: QueryOptions) => http.get('/app/equInfo/page', data), + /** 设备管理/设备静态库管理/ 设备信息维护 设备信息删除 */ + post_deletes: (data?: BodyOptions) => + http.post('/app/equInfo/deletes', data), + }, + equAllot: { + /** 设备管理/查询管理/设备调拨查询 查询 */ + get_page: (data?: QueryOptions) => http.get('/app/equAllot/page', data), + /** 设备管理/设备静态库管理/设备调拨 调拨信息保存 */ + post_save: (data?: BodyOptions) => http.post('/app/equAllot/save', data), + /** 设备管理/设备静态库管理/设备调拨 调拨信息删除 */ + post_delete: (data?: BodyOptions) => + http.post('/app/equAllot/delete', data), + }, + bidding: { + /** 合同系统/标段信息 标段查询 */ + get_list: (data?: QueryOptions) => http.get('/app/bidding/list', data), + /** 合同系统/标段信息 标段信息保存(弃用,在选商中报错) */ + post_save: (data?: BodyOptions) => http.post('/app/bidding/save', data), + /** 合同系统/标段信息 标段信息删除 */ + post_deletes: (data?: BodyOptions) => + http.post('/app/bidding/deletes', data), + }, + equAccident: { + /** 设备管理/设备使用管理/事故处理 事故处理(查询/获取) */ + get_page: (data?: QueryOptions) => http.get('/app/equAccident/page', data), + /** 设备管理/设备使用管理/事故处理 保存 */ + post_save: (data?: BodyOptions) => http.post('/app/equAccident/save', data), + /** 设备管理/设备使用管理/事故处理 删除 */ + post_deletes: (data?: BodyOptions) => + http.post('/app/equAccident/deletes', data), + /** 设备管理/查询管理/事故处理查询 查询 */ + get_query: (data?: QueryOptions) => + http.get('/app/equAccident/query', data), + }, + equStopRepair: { + /** 设备管理/设备使用管理/停炉检修处理 查询 */ + get_page: (data?: QueryOptions) => + http.get('/app/equStopRepair/page', data), + /** 设备管理/设备使用管理/停炉检修处理 保存 */ + post_save: (data?: BodyOptions) => + http.post('/app/equStopRepair/save', data), + /** 设备管理/设备使用管理/停炉检修处理 删除 */ + post_deletes: (data?: BodyOptions) => + http.post('/app/equStopRepair/deletes', data), + /** 设备管理/查询管理/停炉检修处理查询 查询 */ + get_query: (data?: QueryOptions) => + http.get('/app/equStopRepair/query', data), + }, + equDanger: { + /** 设备管理/设备使用管理/隐患排查 查询 */ + get_page: (data?: QueryOptions) => http.get('/app/equDanger/page', data), + /** 设备管理/设备使用管理/隐患排查 保存 */ + post_save: (data?: BodyOptions) => http.post('/app/equDanger/save', data), + /** 设备管理/设备使用管理/隐患排查 删除 */ + post_deletes: (data?: BodyOptions) => + http.post('/app/equDanger/deletes', data), + /** 设备管理/查询管理/隐患排查处理查询 查询 */ + get_query: (data?: QueryOptions) => http.get('/app/equDanger/query', data), + }, + equDayRepair: { + /** 设备管理/设备使用管理/日常维修 查询 */ + get_page: (data?: QueryOptions) => http.get('/app/equDayRepair/page', data), + /** 设备管理/设备使用管理/日常维修 保存 */ + post_save: (data?: BodyOptions) => + http.post('/app/equDayRepair/save', data), + /** 设备管理/设备使用管理/日常维修 删除 */ + get_deletes: (data?: QueryOptions) => + http.get('/app/equDayRepair/deletes', data), + /** 设备管理/查询管理/日常维修查询 查询 */ + get_query: (data?: QueryOptions) => + http.get('/app/equDayRepair/query', data), + }, + contractRecommendProvider: { + /** 合同系统/选商/合同推荐供应商信息 推荐供应商查询 */ + get_list: (data?: QueryOptions) => + http.get('/app/contractRecommendProvider/list', data), + /** 合同系统/选商/合同推荐供应商信息 删除 */ + post_deletes: (data?: BodyOptions) => + http.post('/app/contractRecommendProvider/deletes', data), }, }; diff --git a/apps/web-contract/src/components/flow-record-table/curd.tsx b/apps/web-contract/src/components/flow-record-table/curd.tsx new file mode 100644 index 00000000..9b355511 --- /dev/null +++ b/apps/web-contract/src/components/flow-record-table/curd.tsx @@ -0,0 +1,13 @@ +import type { VxeGridPropTypes } from 'vxe-table'; + +import dayjs from 'dayjs'; + +import { useRender } from '#/hooks/useRender'; + +export const PrimaryKey = 'guid'; + +export function getColumns(_params: any = {}): VxeGridPropTypes.Columns { + return [ + + ]; +} diff --git a/apps/web-contract/src/components/flow-record-table/flow-record-table.vue b/apps/web-contract/src/components/flow-record-table/flow-record-table.vue new file mode 100644 index 00000000..e69de29b diff --git a/apps/web-contract/src/components/temporary-form-modal/temporary-form-modal.vue b/apps/web-contract/src/components/temporary-form-modal/temporary-form-modal.vue index bbf22fbc..ffaebac5 100644 --- a/apps/web-contract/src/components/temporary-form-modal/temporary-form-modal.vue +++ b/apps/web-contract/src/components/temporary-form-modal/temporary-form-modal.vue @@ -1,12 +1,22 @@ diff --git a/apps/web-contract/src/router/routes/modules/contract.ts b/apps/web-contract/src/router/routes/modules/contract.ts index 681464bf..0bb65c4d 100644 --- a/apps/web-contract/src/router/routes/modules/contract.ts +++ b/apps/web-contract/src/router/routes/modules/contract.ts @@ -50,6 +50,15 @@ const routes: RouteRecordRaw[] = [ activePath: '/contract/approval/edit/:id?', }, }, + { + name: 'ContractApprovalList', + path: '/contract/approval/list', + component: () => import('#/views/contract/approval/list/index.vue'), + meta: { + icon: 'lucide:area-chart', + title: '立项编制', + }, + }, { name: 'ContractApprovalTodo', path: '/contract/approval/todo', @@ -59,15 +68,7 @@ const routes: RouteRecordRaw[] = [ title: '立项提示', }, }, - { - name: 'ContractApprovalList', - path: '/contract/approval/list', - component: () => import('#/views/contract/approval/list/index.vue'), - meta: { - icon: 'lucide:area-chart', - title: '立项查询', - }, - }, + { name: 'ContractApprovalSigningBasis', path: '/contract/approval/signing-basis', @@ -92,12 +93,6 @@ const routes: RouteRecordRaw[] = [ { name: 'ContractBusinessEdit', path: '/contract/business/edit/:id?', - beforeEnter: (e) => { - if (e.params.id && e.params.id === ':id') { - e.params.id = ''; - e.fullPath = '/contract/business/edit'; - } - }, component: () => import('#/views/contract/business/edit/index.vue'), meta: { hideInMenu: true, @@ -108,21 +103,44 @@ const routes: RouteRecordRaw[] = [ }, }, { - name: 'ContractBusinessTodo', - path: '/contract/business/todo', - component: () => import('#/views/contract/business/todo/index.vue'), + name: 'ContractBusinessResult', + path: '/contract/business/result/:id?', + component: () => import('#/views/contract/business/result/index.vue'), meta: { + hideInMenu: true, + hideInTab: true, icon: 'lucide:area-chart', - title: '选商提示', + title: '选商结果填报', + activePath: '/contract/business/todo', }, }, + { name: 'ContractBusinessList', path: '/contract/business/list', component: () => import('#/views/contract/business/list/index.vue'), meta: { icon: 'lucide:area-chart', - title: '选商查询', + title: '选商编制', + }, + }, + { + name: 'ContractBusinessResultList', + path: '/contract/business/result-list', + component: () => + import('#/views/contract/business/result-list/index.vue'), + meta: { + icon: 'lucide:area-chart', + title: '选商结果编制', + }, + }, + { + name: 'ContractBusinessTodo', + path: '/contract/business/todo', + component: () => import('#/views/contract/business/todo/index.vue'), + meta: { + icon: 'lucide:area-chart', + title: '选商提示', }, }, ], @@ -154,6 +172,15 @@ const routes: RouteRecordRaw[] = [ activePath: '/contract/declaration/todo', }, }, + { + name: 'ContractDeclarationList', + path: '/contract/declaration/list', + component: () => import('#/views/contract/declaration/list/index.vue'), + meta: { + icon: 'lucide:area-chart', + title: '申报编制', + }, + }, { name: 'ContractDeclarationTodo', path: '/contract/declaration/todo', @@ -163,15 +190,7 @@ const routes: RouteRecordRaw[] = [ title: '申报提示', }, }, - { - name: 'ContractDeclarationList', - path: '/contract/declaration/list', - component: () => import('#/views/contract/declaration/list/index.vue'), - meta: { - icon: 'lucide:area-chart', - title: '申报查询', - }, - }, + { name: 'ContractDeclarationPrint', path: '/contract/declaration/print', @@ -239,6 +258,15 @@ const routes: RouteRecordRaw[] = [ activePath: '/contract/sign/todo', }, }, + { + name: 'ContractSignList', + path: '/contract/sign/list', + component: () => import('#/views/contract/sign/list/index.vue'), + meta: { + icon: 'lucide:area-chart', + title: '签订编制', + }, + }, { name: 'ContractSignTodo', path: '/contract/sign/todo', @@ -248,15 +276,6 @@ const routes: RouteRecordRaw[] = [ title: '签订提示', }, }, - { - name: 'ContractSignList', - path: '/contract/sign/list', - component: () => import('#/views/contract/sign/list/index.vue'), - meta: { - icon: 'lucide:area-chart', - title: '签订查询', - }, - }, ], }, { @@ -286,6 +305,15 @@ const routes: RouteRecordRaw[] = [ activePath: '/contract/perform/todo', }, }, + { + name: 'ContractPerformList', + path: '/contract/perform/list', + component: () => import('#/views/contract/perform/list/index.vue'), + meta: { + icon: 'lucide:area-chart', + title: '履行编制', + }, + }, { name: 'ContractPerformTodo', path: '/contract/perform/todo', @@ -295,15 +323,6 @@ const routes: RouteRecordRaw[] = [ title: '履行提示', }, }, - { - name: 'ContractPerformList', - path: '/contract/perform/list', - component: () => import('#/views/contract/perform/list/index.vue'), - meta: { - icon: 'lucide:area-chart', - title: '履行查询', - }, - }, { name: 'ContractPerformResult', path: '/contract/perform/result', @@ -313,6 +332,16 @@ const routes: RouteRecordRaw[] = [ title: '履行结果填报', }, }, + { + name: 'ContractPerformResultList', + path: '/contract/perform/resultList', + component: () => + import('#/views/contract/perform/result-list/index.vue'), + meta: { + icon: 'lucide:area-chart', + title: '履行结果编制', + }, + }, { name: 'ContractPerformTemporaryArchive', path: '/contract/perform/temporary-archive', diff --git a/apps/web-contract/src/utils/dict/index.ts b/apps/web-contract/src/utils/dict/index.ts index 6a4b40c9..78afc682 100644 --- a/apps/web-contract/src/utils/dict/index.ts +++ b/apps/web-contract/src/utils/dict/index.ts @@ -47,14 +47,16 @@ export function getDictOpts(dictType: string) { return getDictDatas(dictType); } -export async function getDictDatasAsync(dictTypes: string[]) { +export async function getDictDatasAsync( + dictTypeParams: { type: string; valueType?: string }[], +) { const dictDataMap: Record = {}; const foundTypes = new Set(); - console.log(dictTypes); - // debugger; - // Process static dictionary data + + // 处理静态字典数据 for (const dictType of Object.keys(dataModule)) { - if (dictTypes.includes(dictType)) { + const dictParam = dictTypeParams.find((d) => d.type === dictType); + if (dictParam) { const dictEntries = dataModule[dictType]; if (dictEntries && dictEntries.data && dictEntries.data.length > 0) { dictEntries.data.forEach((dictData) => { @@ -73,23 +75,22 @@ export async function getDictDatasAsync(dictTypes: string[]) { }); foundTypes.add(dictType); } - // If all types are found, return early - console.log(foundTypes.size, dictTypes.length); - if (foundTypes.size === dictTypes.length) { + // 如果所有类型都已找到,提前返回 + if (foundTypes.size === dictTypeParams.length) { return dictDataMap; } } } - console.log(dictDataMap); - - // Fetch remote dictionary data in parallel - const promises = dictTypes.map(async (type) => { + // 并行获取远程字典数据 + const promises = dictTypeParams.map(async ({ type, valueType }) => { if (!foundTypes.has(type)) { try { - const data = await Apis.dictData.get_page({ params: { type } }); + const data = await Apis.dictData.get_page({ + params: { type }, + }); dictDataMap[type] = (data.rows || []).map((dictData: any) => ({ - value: dictData.value, + value: convertValue(dictData.value, valueType), label: dictData.name, colorType: dictData.colorType, cssClass: dictData.cssClass, @@ -146,7 +147,9 @@ export async function getDictOptionsAsync( valueType: 'boolean' | 'number' | 'string' = 'string', ): Promise { try { - const response = await getDictDatasAsync([dictType]); + const response = await getDictDatasAsync([ + { type: dictType, valueType: valueType }, + ]); const dictOptions: DictDataType[] = response[dictType] || []; return dictOptions.map((dict: DictDataType) => ({ diff --git a/apps/web-contract/src/utils/dict/shared.ts b/apps/web-contract/src/utils/dict/shared.ts index 6c4256b8..34555405 100644 --- a/apps/web-contract/src/utils/dict/shared.ts +++ b/apps/web-contract/src/utils/dict/shared.ts @@ -48,6 +48,8 @@ export enum DICT_TYPE { payment_nature = 'payment_nature', /** 合同立项节点流程 */ contract_approval_flow_node = 'contract_approval_flow_node', + /** 合同选商节点流程 */ + contract_business_flow_node = 'contract_business_flow_node', /** 合同立项节点流程 */ contract_abolish_flow_node = 'contract_abolish_flow_node', /** 合同授权类型 */ @@ -55,5 +57,5 @@ export enum DICT_TYPE { /** 合同授权期限 */ contract_authorization_period = 'contract_authorization_period', /** 合同待办类型 */ - contract_todo_type = 'contract_todo_type' + contract_todo_type = 'contract_todo_type', } diff --git a/apps/web-contract/src/utils/dict/static.data.js b/apps/web-contract/src/utils/dict/static.data.js index da33261d..26446cee 100644 --- a/apps/web-contract/src/utils/dict/static.data.js +++ b/apps/web-contract/src/utils/dict/static.data.js @@ -70,11 +70,22 @@ export default { ]), contract_approval_flow_node: createEntry('合同立项节点流程', [ - { label: '待提交', value: 'edit' }, - { label: '待部门审核', value: 'departmentAudit' }, - { label: '已结束', value: 'end' }, - { label: '废除发起', value: 'abolishEdit' }, - { label: '待废除审批', value: 'abolishDepartmentAudit' }, + { label: '开始节点', value: 'paStart' }, + { label: '待编制', value: 'paEdit' }, + { label: '待部门自审', value: 'paDepartmentAudit' }, + { label: '选商编制', value: 'smEdit' }, + ]), + + contract_business_flow_node: createEntry('合同选商节点流程', [ + { label: '开始节点', value: 'smStart' }, + { label: '待编制', value: 'smEdit' }, + { label: '待部门自审', value: 'smDepartmentAudit' }, + { label: '待计划规划部审查', value: 'smPlanningDepartment' }, + { label: '待财务资产部审查', value: 'smFinancialDepartment' }, + { label: '待合规审查(企管法规部)', value: 'smRegulationDepartment' }, + { label: '待主管领导审批', value: 'smManager' }, + { label: '待公司领导审核', value: 'smLeaders' }, + { label: '选商结果填报', value: 'smrEdit' }, ]), contract_abolish_flow_node: createEntry('合同立项节点流程', [ @@ -99,15 +110,10 @@ export default { // 合同待办类型 contract_todo_type: createEntry('合同待办类型', [ { label: '合同立项', value: 'contractSetup' }, - { label: '合同立项废除', value: 'contractSetupAbolish' }, { label: '合同选商', value: 'selectMerchant' }, - { label: '合同选商废除', value: 'selectMerchantAbolish' }, - { label: '合同选商结果', value: 'selectMerchantResult' }, - { label: '合同选商结果废除', value: 'selectMerchantResultAbolish' }, { label: '合同申报', value: 'contractDeclare' }, { label: '合同签订', value: 'contractSign' }, { label: '合同履行', value: 'contractPerform' }, { label: '合同归档', value: 'contractFile' }, - { label: '签约授权', value: 'signAuthorization' }, ]), }; diff --git a/apps/web-contract/src/views/contract/approval/edit/index.vue b/apps/web-contract/src/views/contract/approval/edit/index.vue index 4e7bcd67..eb00948b 100644 --- a/apps/web-contract/src/views/contract/approval/edit/index.vue +++ b/apps/web-contract/src/views/contract/approval/edit/index.vue @@ -19,6 +19,7 @@ import chooseUserModal from '#/views/system/user/choose-user-modal.vue'; import chooseSigningBasisModal from '../signing-basis/choose-signing-basis-modal.vue'; import { getColumns } from '../signing-basis/columns'; import { getFormSchema } from './curd'; +import AuditNodeTable from '#/views/contract/components/audit-node-table/audit-node-table.vue'; const { xGridRef, gridProps } = useVxeTable({ ref: 'xGridRef' }); @@ -43,6 +44,7 @@ const fileUploader = new FileUploader({}); const router = useRouter(); const route = useRoute(); const id = ref(route.params.id); +const taskId = route.query.taskId; const auditId = ref(); const pageRef = ref(); @@ -85,7 +87,7 @@ const gridOptions = reactive( }), ); -const collapses = ['1', '2']; +const collapses = ['1', '2', '3']; const collapseActiveKey = ref(collapses); function areArraysEqualUnordered(arr1, arr2) { if (arr1.length !== arr2.length) return false; @@ -114,7 +116,7 @@ function handleBack() { * 页面返回并关闭tab */ function back() { - router.replace('/contract/approval/list'); + router.replace('/contract/approval/todo'); } function handleOpenSignBasisChooseModal() { @@ -149,19 +151,153 @@ function removeRow(row) { } } -function handleAbolish() { - Modal.confirm({ - title: '提示', - content: '是否确认作废该合同?确认后该合同无法再次使用', - okType: 'danger', - onOk: async () => { - // await Apis.contractBaseInfo.post_abolish({ - // data: { - // guid: currData.value['guid'], - // }, - // }); - }, - }); +const userModalOpenType = ref<'abolish' | 'audit'>('audit'); +const currAuditType = ref<'abolish' | 'audit'>('audit'); + +const userListByAbolish = ref([]); + +async function handleAbolish(type: 'openModal' | 'confirm') { + userModalOpenType.value = 'abolish'; + if (type === 'openModal') { + Modal.confirm({ + title: '提示', + content: '是否确认作废该合同?确认后该合同无法再次使用', + okType: 'danger', + onOk: async () => { + chooseUserModalApi.setData({ + title: '选择立项废除审批人', + userIds: [], + }); + chooseUserModalApi.open(); + }, + }); + } + if (type === 'confirm') { + const hideLoading = message.loading('提交中...', 0); + try { + await Apis.contractBaseInfo.post_abolishFlowStart({ + data: { + guid: currData.value['guid'], + assigneeList: userListByAbolish.value.map((item) => item.ACCOUNT_ID), + }, + }); + } catch (error) { + logger.error('立项废除提交失败', error); + } finally { + hideLoading(); + } + } +} + +async function handleAbolishAudit( + type: 'access' | 'accessConfirm' | 'reject' | 'rejectConfirm', + data?: any, +) { + console.log(type); + + if (type === 'access') { + Modal.confirm({ + title: '提示', + content: '是否确认立项废除审核通过?', + onOk: () => { + temporaryFormModalApi.setData({ + title: '备注信息', + schema: { + columns: { + comment: { + title: '', + key: 'comment', + col: { span: 24 }, + colon: false, + component: { + name: 'a-textarea', + vModel: 'value', + autoSize: { minRows: 4, maxRows: 6 }, + placeholder: '请输入', + }, + rules: [{ required: true, message: '请输入退回原因' }], + }, + }, + }, + }); + temporaryFormModalApi.open(); + }, + }); + } + + if (type === 'accessConfirm') { + try { + await Apis.contractBaseInfo.post_abolishSubmit({ + params: { + guid: id.value, + }, + data: { + // appId: id.value, + taskId: taskId, + nodeId: '', + comment: '通过', + }, + }); + message.success('审核通过'); + back(); + } catch (error) { + logger.error('审核通过失败', error); + message.error('审核通过失败,请稍候再试'); + } + } + + if (type === 'reject') { + Modal.confirm({ + title: '提示', + content: '是否确认拒绝废除该立项?', + onOk: () => { + temporaryFormModalApi.setData({ + title: '退回原因', + schema: { + columns: { + comment: { + title: '', + key: 'comment', + col: { span: 24 }, + colon: false, + component: { + name: 'a-textarea', + vModel: 'value', + autoSize: { minRows: 4, maxRows: 6 }, + placeholder: '请输入', + }, + rules: [{ required: true, message: '请输入退回原因' }], + }, + }, + }, + }); + temporaryFormModalApi.open(); + }, + }); + } + + if (type === 'rejectConfirm') { + const comment = data.comment; + try { + await Apis.contractBaseInfo.post_rollback({ + params: { + guid: id.value, + }, + data: { + appId: id.value, + taskId: taskId, + nodeId: '', + comment, + }, + }); + temporaryFormModalApi.close(); + message.success('退回成功'); + back(); + } catch (error) { + logger.error('合同立项退回失败', error); + message.error('退回失败,请稍候再试'); + } + } } function handleDelete() { @@ -195,6 +331,11 @@ function handleChooseConfirm(rows) { async function handleChooseUserConfirm(e) { chooseUserModalApi.close(); isLoading.value = true; + if (userModalOpenType.value === 'abolish') { + userListByAbolish.value = e; + handleAbolish('confirm'); + return; + } try { await Apis.contractBaseInfo.post_applyFlowStart({ data: { @@ -290,7 +431,7 @@ async function handleSave() { handleSubmit(); }, onCancel: () => { - back(); + // back(); }, }); } catch (error) { @@ -302,77 +443,103 @@ async function handleSave() { } async function handleSubmit() { + userModalOpenType.value = 'audit'; // isLoading.value = true chooseUserModalApi.setData({ title: '选择审批人', + userIds: [], }); chooseUserModalApi.open(); } +let auditType = ref(''); +const isTemporaryFormModalLoading = ref(false); + async function handleAudit( - type: 'accessConfirm' | 'reject' | 'rejectConfirm', + type: 'openAccessModal' | 'openRejectModal' | 'confirm', data?: any, ) { console.log(type); - if (type === 'accessConfirm') { - Modal.confirm({ - title: '提示', - content: '是否确认审核通过?', - onOk: async () => { - try { - await Apis.contractBaseInfo.post_submit({ - params: { - guid: id.value, - }, - data: { - appId: id.value, - taskId: currData.value.taskId, - nodeId: '', - comment: '通过', - }, - }); - message.success('审核通过'); - back(); - } catch (error) { - logger.error('审核通过失败', error); - message.error('审核通过失败,请稍候再试'); - } - }, - }); - } - - if (type === 'reject') { - Modal.confirm({ - title: '提示', - content: '是否确认退回?', - onOk: () => { - temporaryFormModalApi.setData({ - title: '退回原因', - schema: { - columns: { - comment: { - title: '', - key: 'comment', - col: { span: 24 }, - colon: false, - component: { - name: 'a-textarea', - vModel: 'value', - autoSize: { minRows: 4, maxRows: 6 }, - placeholder: '请输入', - }, - rules: [{ required: true, message: '请输入退回原因' }], - }, + if (type === 'openAccessModal') { + auditType.value = 'access'; + temporaryFormModalApi.setData({ + title: '审核通过备注', + schema: { + columns: { + comment: { + title: '', + key: 'comment', + col: { span: 24 }, + colon: false, + component: { + name: 'a-textarea', + vModel: 'value', + autoSize: { minRows: 4, maxRows: 6 }, + placeholder: '请输入', }, }, - }); - temporaryFormModalApi.open(); + }, }, }); + temporaryFormModalApi.open(); } - if (type === 'rejectConfirm') { + if (type === 'confirm' && auditType.value === 'access') { + isTemporaryFormModalLoading.value = true; + const comment = data.comment; + + try { + await Apis.contractBaseInfo.post_submit({ + params: { + guid: id.value, + }, + data: { + appId: id.value, + taskId: taskId, + nodeId: '', + comment: comment || '', + }, + }); + message.success('审核通过'); + back(); + } catch (error) { + logger.error('审核通过失败', error); + message.error('审核通过失败,请稍候再试'); + } finally { + isTemporaryFormModalLoading.value = false; + } + } + + if (type === 'openRejectModal') { + auditType.value = 'reject'; + + temporaryFormModalApi.setData({ + title: '审核退回原因', + schema: { + columns: { + comment: { + title: '', + key: 'comment', + col: { span: 24 }, + colon: false, + component: { + name: 'a-textarea', + vModel: 'value', + autoSize: { minRows: 4, maxRows: 6 }, + placeholder: '请输入', + }, + rules: [{ required: true, message: '请输入退回原因' }], + }, + }, + }, + }); + temporaryFormModalApi.open(); + } + + if (type === 'confirm' && auditType.value === 'reject') { + isTemporaryFormModalLoading.value = true; + const comment = data.comment; try { await Apis.contractBaseInfo.post_rollback({ @@ -381,7 +548,7 @@ async function handleAudit( }, data: { appId: id.value, - taskId: currData.value.taskId, + taskId: taskId, nodeId: '', comment, }, @@ -392,6 +559,8 @@ async function handleAudit( } catch (error) { logger.error('合同立项退回失败', error); message.error('退回失败,请稍候再试'); + } finally { + isTemporaryFormModalLoading.value = false; } } } @@ -415,12 +584,12 @@ onMounted(async () => { formBinding.value.columns = getFormSchema({ contractTypeData: contractTypeData.value, - readOnly: !id.value || currData.value.step !== 'edit', + readOnly: !id.value || currData.value.step !== 'paEdit', }); xGridRef.value!.reloadColumn( getColumns({ - readOnly: !id.value || currData.value.step !== 'edit', + readOnly: !id.value || currData.value.step !== 'paEdit', }), ); @@ -473,35 +642,29 @@ onMounted(async () => { + + + + diff --git a/apps/web-contract/src/views/contract/approval/list/crud.tsx b/apps/web-contract/src/views/contract/approval/list/crud.tsx index d6c3621b..6552012c 100644 --- a/apps/web-contract/src/views/contract/approval/list/crud.tsx +++ b/apps/web-contract/src/views/contract/approval/list/crud.tsx @@ -19,7 +19,7 @@ export function getColumns(_params: any = {}): VxeGridPropTypes.Columns { }, { field: 'step', - title: '立项状态', + title: '节点状态', width: 130, slots: { default: ({ row }) => { diff --git a/apps/web-contract/src/views/contract/approval/list/index.vue b/apps/web-contract/src/views/contract/approval/list/index.vue index d5a9227a..7c37e222 100644 --- a/apps/web-contract/src/views/contract/approval/list/index.vue +++ b/apps/web-contract/src/views/contract/approval/list/index.vue @@ -1,8 +1,8 @@ @@ -143,11 +152,7 @@ onMounted(async () => {
- +