diff --git a/src/api/business/contract-change.js b/src/api/business/contract-change.js new file mode 100644 index 0000000..4f407ec --- /dev/null +++ b/src/api/business/contract-change.js @@ -0,0 +1,61 @@ +import { createCrudApi } from './common'; +import request from '@/axios'; + +const baseUrl = '/blade-transport/contract-change'; +const api = createCrudApi(baseUrl); + +export const getList = api.getList; +export const getDetail = api.getDetail; +export const submit = api.submit; +export const remove = api.remove; + +export const createFromContract = (contractId, changeType) => + request({ + url: `${baseUrl}/create-from-contract`, + method: 'post', + params: { contractId, changeType }, + }); + +export const saveDraft = row => + request({ + url: `${baseUrl}/save-draft`, + method: 'post', + data: row, + }); + +export const submitApproval = id => + request({ + url: `${baseUrl}/submit-approval`, + method: 'post', + params: { id }, + }); + +export const approve = id => + request({ + url: `${baseUrl}/approve`, + method: 'post', + params: { id }, + // 审批通过后同步推送合规(附件转传可达 20s+),覆盖全局 10s 超时 + timeout: 120000, + }); + +export const reject = id => + request({ + url: `${baseUrl}/reject`, + method: 'post', + params: { id }, + }); + +export const withdraw = id => + request({ + url: `${baseUrl}/withdraw`, + method: 'post', + params: { id }, + }); + +export const markSyncStatus = (ids, syncStatus) => + request({ + url: `${baseUrl}/mark-sync-status`, + method: 'post', + params: { ids, syncStatus }, + }); diff --git a/src/option/business/contract-change.js b/src/option/business/contract-change.js new file mode 100644 index 0000000..19c9cf7 --- /dev/null +++ b/src/option/business/contract-change.js @@ -0,0 +1,221 @@ +import { + approvalStatusOptions, + contractCategoryOptions, + createCrudOption, + hcsSyncStatusOptions, + signTypeOptions, +} from './common'; + +const listDicFormatter = res => { + const data = res?.data || res; + if (Array.isArray(data)) return data; + if (Array.isArray(data?.records)) return data.records; + if (Array.isArray(data?.data)) return data.data; + if (Array.isArray(data?.data?.records)) return data.data.records; + return []; +}; + +const projectNameDicFormatter = res => { + const list = listDicFormatter(res); + return list.filter(item => item && item.projectName && String(item.projectName).trim()); +}; + +export const changeTypeOptions = [ + { label: '合同信息变更', value: '合同信息变更' }, + { label: '结算规则变更', value: '结算规则变更' }, +]; + +export const config = { + title: '合同变更', + permission: 'contract_change', + statusProp: 'approvalStatus', + statusTextProp: 'approvalStatusName', + deleteStatus: ['draft', 'withdrawn', 'rejected'], + editStatus: ['draft', 'withdrawn', 'rejected'], + viewStatus: ['approved'], + operations: [ + { + action: 'submitApproval', + label: '提交', + statusProp: 'approvalStatus', + status: ['draft'], + permission: 'contract_change_submit', + }, + { + action: 'withdraw', + label: '撤回', + statusProp: 'approvalStatus', + status: ['reviewing'], + permission: 'contract_change_withdraw', + }, + { + action: 'mkAudit', + label: '流程', + statusProp: 'approvalStatus', + status: ['reviewing', 'rejected', 'approved'], + permission: 'contract_change_approve', + mkOnly: true, + }, + { + action: 'approve', + label: '通过', + type: 'success', + statusProp: 'approvalStatus', + status: ['reviewing'], + permission: 'contract_change_approve', + localOnly: true, + }, + { + action: 'reject', + label: '驳回', + type: 'warning', + statusProp: 'approvalStatus', + status: ['reviewing'], + permission: 'contract_change_reject', + localOnly: true, + }, + ], +}; + +export const option = createCrudOption([ + { + label: '合同编号', + prop: 'contractNo', + search: true, + searchPlaceholder: '请输入', + searchOrder: 20, + minWidth: 160, + }, + { + label: '合同名称', + prop: 'contractName', + search: true, + searchPlaceholder: '请输入', + searchOrder: 30, + minWidth: 180, + }, + { + label: '所属项目', + prop: 'projectName', + search: true, + searchType: 'select', + searchPlaceholder: '请选择', + searchOrder: 60, + dicUrl: '/blade-transport/project-apply/list?current=1&size=9999&contractSelectable=true', + dicFormatter: projectNameDicFormatter, + props: { + label: 'projectName', + value: 'projectName', + }, + filterable: true, + minWidth: 160, + }, + { + label: '所属组织', + prop: 'organizationName', + search: true, + searchPlaceholder: '请输入', + searchOrder: 10, + minWidth: 150, + }, + { + label: '合同类别', + prop: 'contractCategory', + type: 'select', + search: true, + searchPlaceholder: '请选择', + searchOrder: 70, + dicData: contractCategoryOptions, + minWidth: 130, + }, + { + label: '签约类型', + prop: 'signType', + type: 'select', + search: true, + searchPlaceholder: '请选择', + searchOrder: 50, + dicData: signTypeOptions, + minWidth: 120, + }, + { + label: '甲方', + prop: 'partyA', + minWidth: 160, + }, + { + label: '乙方', + prop: 'partyB', + minWidth: 160, + }, + { + label: '开始日期', + prop: 'startDate', + type: 'date', + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD', + minWidth: 130, + }, + { + label: '结束日期', + prop: 'endDate', + type: 'date', + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD', + minWidth: 130, + }, + { + label: '临时效力起', + prop: 'temporaryStartDate', + type: 'date', + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD', + minWidth: 130, + }, + { + label: '临时效力止', + prop: 'temporaryEndDate', + type: 'date', + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD', + minWidth: 130, + }, + { + label: '经办人', + prop: 'handlerUserName', + minWidth: 120, + }, + { + label: '创建时间', + prop: 'createTime', + type: 'datetime', + minWidth: 170, + }, + { + label: '审核状态', + prop: 'approvalStatus', + type: 'select', + search: true, + searchPlaceholder: '请选择', + searchOrder: 40, + dicData: approvalStatusOptions, + minWidth: 110, + }, + { + label: '当前节点', + prop: 'currentNode', + minWidth: 120, + }, + { + label: '当前处理人', + prop: 'currentProcessor', + minWidth: 120, + }, + { + label: '同步状态', + prop: 'syncStatus', + type: 'select', + dicData: hcsSyncStatusOptions, + minWidth: 110, + }, +]); diff --git a/src/router/page/index.js b/src/router/page/index.js index b009065..2c126f6 100644 --- a/src/router/page/index.js +++ b/src/router/page/index.js @@ -117,6 +117,17 @@ export default [ bizType: 'contract-manage', }, }, + { + path: '/business/contract-change/public-view', + name: '查看合同变更信息', + component: () => import('@/views/business/contract-change-public-view.vue'), + meta: { + keepAlive: false, + isTab: false, + isAuth: false, + bizType: 'contract-change', + }, + }, { path: '/settlement/pre-settlement/public-view', name: '查看预付结算单信息', diff --git a/src/router/views/index.js b/src/router/views/index.js index 6d4db1d..be1a05d 100644 --- a/src/router/views/index.js +++ b/src/router/views/index.js @@ -354,6 +354,18 @@ export default [ }, ], }, + { + path: '/business/contract-change/form', + component: Layout, + children: [ + { + path: '', + name: '合同变更表单', + meta: { keepAlive: false, activeMenu: '/business/contract-change' }, + component: loadView(() => import('@/views/business/contract-manage-change.vue')), + }, + ], + }, { path: '/wel', component: () => diff --git a/src/utils/mk-approval.js b/src/utils/mk-approval.js index 51fd02d..ee1b0ff 100644 --- a/src/utils/mk-approval.js +++ b/src/utils/mk-approval.js @@ -27,6 +27,12 @@ export const MK_BIZ = { rejected: ['rejected', 'change_rejected', 'withdrawn'], approved: ['approved', 'change_approved'], }, + 'contract-change': { + dictName: '提交合同变更审核流', + subjectPrefix: '合同变更审批', + rejected: ['rejected', 'withdrawn'], + approved: ['approved'], + }, 'pre-settlement': { dictName: '提交预结算审核流', subjectPrefix: '预付结算审批', diff --git a/src/views/business/contract-change-public-view.vue b/src/views/business/contract-change-public-view.vue new file mode 100644 index 0000000..5e5aa90 --- /dev/null +++ b/src/views/business/contract-change-public-view.vue @@ -0,0 +1,21 @@ + + + diff --git a/src/views/business/contract-change.vue b/src/views/business/contract-change.vue new file mode 100644 index 0000000..16a1673 --- /dev/null +++ b/src/views/business/contract-change.vue @@ -0,0 +1,407 @@ + + + + + diff --git a/src/views/business/contract-manage-change.vue b/src/views/business/contract-manage-change.vue index e8eb666..ba63590 100644 --- a/src/views/business/contract-manage-change.vue +++ b/src/views/business/contract-manage-change.vue @@ -1,12 +1,20 @@ -