✨ 新增合同变更菜单列表与MK审批对接

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-27 18:34:11 +08:00
parent 2b51619728
commit 450505715a
9 changed files with 905 additions and 66 deletions
+221
View File
@@ -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,
},
]);