import { auditColumns, contractApprovalStatusOptions, contractCategoryOptions, contractStageOptions, createCrudOption, effectiveTypeOptions, selectRule, settlementModeOptions, signTypeOptions, textRule, } 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 []; }; export const config = { title: '合同管理', permission: 'contract_manage', exportUrl: '/blade-transport/contract-manage/export-contract-manage', exportName: '合同管理', enableAllDept: false, batchDelete: false, enableContractForm: true, enableProjectSelect: true, enableContractPeriod: true, enableContractFileUpload: true, enableCurrentUserHandler: true, enableBillingPlan: true, enableSettlementRule: true, enableReconciliation: true, enableAttachmentTable: true, enableChangeRecord: true, enableOrganizationSelect: true, enableContractCreateActions: true, actions: ['copy'], statusProp: 'approvalStatus', statusTextProp: 'approvalStatusName', customMenuActions: true, editLabelStatusMap: { change_rejected: '编辑变更内容', }, deleteStatus: ['draft'], deleteStage: ['draft'], editStatus: ['draft', 'rejected', 'change_rejected'], operations: [ { action: 'flow', label: '查看流程', statusProp: 'approvalStatus', status: ['reviewing', 'change_reviewing'], stage: ['temporary', 'formal'], permission: 'contract_manage_view', }, { action: 'withdraw', label: '撤回', statusProp: 'approvalStatus', status: ['reviewing'], stage: ['temporary'], permission: 'contract_manage_withdraw', }, { action: 'submitFormal', label: '重新提交转正', statusProp: 'approvalStatus', status: ['rejected'], stage: ['temporary'], permission: 'contract_manage_formal', }, { action: 'startChange', label: '发起变更', statusProp: 'approvalStatus', status: ['approved'], stage: ['formal'], permission: 'contract_manage_change', prompt: '请输入变更内容与原因', }, { action: 'startChange', label: '再次发起变更', statusProp: 'approvalStatus', status: ['change_approved'], stage: ['formal'], permission: 'contract_manage_change', prompt: '请输入变更内容与原因', }, { action: 'attachmentUpload', label: '附件上传', statusProp: 'approvalStatus', status: ['approved', 'change_approved'], stage: ['formal'], permission: 'contract_manage_edit', }, { action: 'flow', label: '查看流程', statusProp: 'approvalStatus', status: ['approved', 'change_approved'], stage: ['formal', 'terminated'], permission: 'contract_manage_view', }, { action: 'withdraw', label: '撤回变更', statusProp: 'approvalStatus', status: ['change_reviewing'], stage: ['formal'], permission: 'contract_manage_withdraw', }, { action: 'startChange', label: '重新提交变更', statusProp: 'approvalStatus', status: ['change_rejected'], stage: ['formal'], permission: 'contract_manage_change', prompt: '请输入变更内容与原因', }, ], }; export const option = createCrudOption([ { label: '', prop: 'basicInfoTitle', formslot: true, span: 24, order: 200, hide: true, labelWidth: 0, }, { label: '合同编号', prop: 'contractNo', search: true, searchOrder: 6, order: 185, disabled: true, placeholder: '不填写,则系统自动生成', minWidth: 160, }, { label: '合同名称', prop: 'contractName', search: true, searchOrder: 7, order: 180, minWidth: 180, rules: textRule('合同名称', 100, true), }, { label: '所属项目', prop: 'projectName', search: true, searchOrder: 8, searchType: 'select', formslot: true, order: 140, dicUrl: '/blade-transport/project-apply/list?current=1&size=9999', dicFormatter: listDicFormatter, props: { label: 'projectName', value: 'projectName', }, filterable: true, minWidth: 160, rules: selectRule('所属项目'), }, { label: '所属项目ID', prop: 'projectId', hide: true, display: false, }, { label: '所属组织', prop: 'organizationName', search: true, searchOrder: 3, searchType: 'cascader', formslot: true, order: 120, dicData: [], props: { label: 'label', value: 'id', children: 'children', }, checkStrictly: true, emitPath: false, showAllLevels: false, filterable: true, minWidth: 150, rules: selectRule('所属组织'), }, { label: '合同类别', prop: 'contractCategory', type: 'select', search: true, searchOrder: 9, order: 170, dicData: contractCategoryOptions, minWidth: 130, rules: selectRule('合同类别'), }, { label: '签约类型', prop: 'signType', type: 'select', search: true, searchOrder: 1, span: 6, row: true, order: 190, dicData: signTypeOptions, minWidth: 120, rules: selectRule('签约类型'), }, { label: '生效类型', prop: 'effectiveType', type: 'select', search: true, searchOrder: 5, dicData: effectiveTypeOptions, hide: true, display: false, }, { label: '甲方', prop: 'partyA', type: 'select', order: 160, dicUrl: '/blade-transport/customer-archive/list?current=1&size=9999&approvalStatus=approved&status=1', dicFormatter: listDicFormatter, props: { label: 'fullName', value: 'fullName', }, filterable: true, minWidth: 160, rules: selectRule('甲方'), }, { label: '乙方', prop: 'partyB', type: 'select', order: 150, dicUrl: '/blade-transport/customer-archive/list?current=1&size=9999&approvalStatus=approved&status=1', dicFormatter: listDicFormatter, props: { label: 'fullName', value: 'fullName', }, filterable: true, minWidth: 160, rules: selectRule('乙方'), }, { label: '合同期限', prop: 'contractPeriod', formslot: true, order: 130, hide: true, rules: [{ required: true, message: '请选择合同期限', trigger: 'change' }], }, { label: '开始日期', prop: 'startDate', type: 'date', format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', minWidth: 130, addDisplay: false, editDisplay: false, }, { label: '结束日期', prop: 'endDate', type: 'date', format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', minWidth: 130, addDisplay: false, editDisplay: false, }, { label: '临时效力起', prop: 'temporaryStartDate', type: 'date', format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', minWidth: 130, addDisplay: false, editDisplay: false, }, { label: '临时效力止', prop: 'temporaryEndDate', type: 'date', format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', minWidth: 130, addDisplay: false, editDisplay: false, }, { label: '经办人', prop: 'handlerUserName', order: 110, disabled: true, minWidth: 120, rules: textRule('经办人', 50, true), }, { label: '签订日期', prop: 'signDate', type: 'date', format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', hide: true, order: 100, minWidth: 130, rules: [{ required: true, message: '请选择签订日期', trigger: 'change' }], }, { label: '结算方式', prop: 'settlementMode', type: 'select', dicData: settlementModeOptions, hide: true, order: 90, minWidth: 120, rules: selectRule('结算方式'), }, { label: '合同格式', prop: 'contractFormat', type: 'select', dicData: [ { label: '电子合同', value: '电子合同' }, { label: '纸质合同', value: '纸质合同' }, ], hide: true, order: 80, minWidth: 120, rules: selectRule('合同格式'), }, { label: '是否需要加盖法人章', prop: 'legalSealFlag', type: 'select', dicData: [ { label: '否', value: 0 }, { label: '是', value: 1 }, ], value: 0, hide: true, order: 70, minWidth: 100, rules: selectRule('是否需要加盖法人章'), }, { label: '一式', prop: 'copyCount', formslot: true, hide: true, order: 60, minWidth: 110, }, { label: '回款账期', prop: 'paymentDays', formslot: true, hide: true, order: 50, minWidth: 130, }, { label: '创建时间', prop: 'createTime', type: 'datetime', format: 'YYYY-MM-DD HH:mm:ss', valueFormat: 'YYYY-MM-DD HH:mm:ss', minWidth: 160, addDisplay: false, editDisplay: false, }, { label: '合同阶段', prop: 'contractStage', type: 'select', search: true, searchOrder: 2, slot: true, dicData: contractStageOptions, minWidth: 120, addDisplay: false, editDisplay: false, }, { label: '审核状态', prop: 'approvalStatus', type: 'select', search: true, searchOrder: 4, slot: true, dicData: contractApprovalStatusOptions, minWidth: 130, addDisplay: false, editDisplay: false, }, { label: '当前节点', prop: 'currentNode', minWidth: 140, addDisplay: false, editDisplay: false, }, { label: '当前处理人', prop: 'currentProcessor', minWidth: 130, addDisplay: false, editDisplay: false, }, { label: '计费信息', prop: 'billingEnabled', type: 'switch', dicData: [ { label: '关闭', value: 0 }, { label: '开启', value: 1 }, ], value: 1, hide: true, display: false, minWidth: 110, }, { label: '备注', prop: 'remark', type: 'textarea', span: 24, hide: true, order: 40, maxlength: 2000, showWordLimit: true, rules: textRule('备注', 2000), }, { label: '', prop: 'contractFileTitle', formslot: true, span: 24, order: 30, hide: true, labelWidth: 0, }, { label: '附件', prop: 'contractFileJson', formslot: true, span: 24, order: 20, hide: true, }, { label: '', prop: 'billingInfoTitle', formslot: true, span: 24, order: 10, hide: true, labelWidth: 0, }, { label: '', prop: 'billingPlanJson', formslot: true, span: 24, order: 0, hide: true, labelWidth: 0, }, { label: '', prop: 'settlementRuleTitle', formslot: true, span: 24, order: -10, hide: true, labelWidth: 0, }, { label: '', prop: 'settlementRuleJson', formslot: true, span: 24, order: -20, hide: true, labelWidth: 0, }, { label: '', prop: 'reconciliationTitle', formslot: true, span: 24, order: -30, hide: true, labelWidth: 0, }, { label: '', prop: 'reconciliationJson', formslot: true, span: 24, order: -40, hide: true, labelWidth: 0, }, { label: '', prop: 'attachmentTitle', formslot: true, span: 24, order: -50, hide: true, labelWidth: 0, }, { label: '', prop: 'attachmentsJson', formslot: true, span: 24, order: -60, hide: true, labelWidth: 0, }, { label: '', prop: 'changeRecordTitle', formslot: true, span: 24, order: -70, hide: true, labelWidth: 0, }, { label: '', prop: 'changeRecordJson', formslot: true, span: 24, order: -80, hide: true, labelWidth: 0, }, ...auditColumns .filter(column => column.prop !== 'createTime') .map(column => ({ ...column, hide: true })), ]); option.span = 8; option.dialogWidth = 1480;