1、新增结算模块
2、调整业务模块 3、调整客商模块
This commit is contained in:
@@ -42,12 +42,18 @@ export const config = {
|
||||
batchDelete: false,
|
||||
enableContractForm: true,
|
||||
enableProjectSelect: true,
|
||||
projectQueryParams: {
|
||||
approvalStatuses: 'approved,change_approved',
|
||||
},
|
||||
enableContractPeriod: true,
|
||||
enableContractFileUpload: true,
|
||||
enableCurrentUserHandler: true,
|
||||
enableBillingPlan: true,
|
||||
enableSettlementRule: true,
|
||||
enableReconciliation: true,
|
||||
enableReconciliation: false,
|
||||
enableFeeGenerationMode: true,
|
||||
enableSettlementConfigTabs: true,
|
||||
enablePaymentRatio: true,
|
||||
enableAttachmentTable: true,
|
||||
enableChangeRecord: true,
|
||||
enableOrganizationSelect: true,
|
||||
@@ -57,6 +63,53 @@ export const config = {
|
||||
statusProp: 'approvalStatus',
|
||||
statusTextProp: 'approvalStatusName',
|
||||
customMenuActions: true,
|
||||
contractNameDetail: true,
|
||||
detailSections: [
|
||||
{
|
||||
title: '基本信息',
|
||||
fields: [
|
||||
['contractNo', '合同编号'],
|
||||
['contractName', '合同名称'],
|
||||
['projectName', '所属项目'],
|
||||
['organizationName', '所属组织'],
|
||||
['contractCategory', '合同类别'],
|
||||
['signType', '签约类型'],
|
||||
['partyA', '甲方'],
|
||||
['partyB', '乙方'],
|
||||
['handlerUserName', '经办人'],
|
||||
['signDate', '签订日期'],
|
||||
['contractFormat', '合同格式'],
|
||||
['legalSealFlag', '是否需要加盖法人章'],
|
||||
['copyCount', '一式'],
|
||||
['paymentDays', '回款账期'],
|
||||
['remark', '备注', 2],
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '合同期限',
|
||||
fields: [
|
||||
['startDate', '开始日期'],
|
||||
['endDate', '结束日期'],
|
||||
['temporaryStartDate', '临时效力起'],
|
||||
['temporaryEndDate', '临时效力止'],
|
||||
['effectiveType', '生效类型'],
|
||||
['contractStage', '合同阶段'],
|
||||
['approvalStatus', '审核状态'],
|
||||
['currentNode', '当前节点'],
|
||||
['currentProcessor', '当前处理人'],
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '计费与结算',
|
||||
fields: [
|
||||
['feeGenerationMode', '费用生成模式'],
|
||||
['billingPlanJson', '计费方案', 2],
|
||||
['settlementMode', '结算类型'],
|
||||
['settlementRuleJson', '结算规则', 2],
|
||||
['paymentRatioJson', '付款比例设置', 2],
|
||||
],
|
||||
},
|
||||
],
|
||||
editLabelStatusMap: {
|
||||
change_rejected: '编辑变更内容',
|
||||
},
|
||||
@@ -96,6 +149,22 @@ export const config = {
|
||||
stage: ['temporary', 'formal'],
|
||||
permission: 'contract_manage_reject',
|
||||
},
|
||||
{
|
||||
action: 'approve',
|
||||
label: '通过',
|
||||
statusProp: 'approvalStatus',
|
||||
status: ['change_reviewing'],
|
||||
stage: ['formal'],
|
||||
permission: 'contract_manage_approve',
|
||||
},
|
||||
{
|
||||
action: 'reject',
|
||||
label: '驳回',
|
||||
statusProp: 'approvalStatus',
|
||||
status: ['change_reviewing'],
|
||||
stage: ['formal'],
|
||||
permission: 'contract_manage_reject',
|
||||
},
|
||||
{
|
||||
action: 'submitFormal',
|
||||
label: '重新提交转正',
|
||||
@@ -186,6 +255,7 @@ export const option = createCrudOption([
|
||||
searchOrder: 7,
|
||||
searchPlaceholder: '请输入',
|
||||
order: 180,
|
||||
slot: true,
|
||||
minWidth: 180,
|
||||
rules: textRule('合同名称', 100, true),
|
||||
},
|
||||
@@ -198,7 +268,8 @@ export const option = createCrudOption([
|
||||
searchPlaceholder: '请选择',
|
||||
formslot: true,
|
||||
order: 140,
|
||||
dicUrl: '/blade-transport/project-apply/list?current=1&size=9999',
|
||||
dicUrl:
|
||||
'/blade-transport/project-apply/list?current=1&size=9999&approvalStatuses=approved,change_approved',
|
||||
dicFormatter: listDicFormatter,
|
||||
props: {
|
||||
label: 'projectName',
|
||||
@@ -481,7 +552,7 @@ export const option = createCrudOption([
|
||||
editDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '计费信息',
|
||||
label: '费用生成模式',
|
||||
prop: 'billingEnabled',
|
||||
type: 'switch',
|
||||
dicData: [
|
||||
@@ -515,10 +586,11 @@ export const option = createCrudOption([
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '附件',
|
||||
label: '',
|
||||
prop: 'contractFileJson',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
className: 'contract-file-form-item',
|
||||
order: 20,
|
||||
hide: true,
|
||||
},
|
||||
@@ -560,7 +632,7 @@ export const option = createCrudOption([
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'reconciliationTitle',
|
||||
prop: 'paymentRatioTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: -30,
|
||||
@@ -569,7 +641,7 @@ export const option = createCrudOption([
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'reconciliationJson',
|
||||
prop: 'paymentRatioJson',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: -40,
|
||||
|
||||
@@ -63,15 +63,6 @@ const parseProcessNodes = value => {
|
||||
return Array.isArray(value.nodes) ? value.nodes : [];
|
||||
};
|
||||
|
||||
const requiresDriverAcceptConfirmation = processJson =>
|
||||
parseProcessNodes(processJson).some(
|
||||
node =>
|
||||
(node.key === 'accept' || node.name === '接单') &&
|
||||
node.enabled !== false &&
|
||||
node.confirmMode === 'yes' &&
|
||||
node.confirmDriver === true
|
||||
);
|
||||
|
||||
const getProcessConfigNodes = row => {
|
||||
const sources = [
|
||||
row.processJson,
|
||||
@@ -99,11 +90,79 @@ const getProcessConfigNodes = row => {
|
||||
});
|
||||
};
|
||||
|
||||
const hasAcceptProcessNode = row =>
|
||||
const isAcceptProcessNode = node => node.key === 'accept' || node.name === '接单';
|
||||
|
||||
const requiresDriverAcceptConfirmation = row =>
|
||||
getProcessConfigNodes(row).some(
|
||||
node => node.enabled !== false && (node.key === 'accept' || node.name === '接单')
|
||||
node =>
|
||||
isAcceptProcessNode(node) &&
|
||||
node.enabled !== false &&
|
||||
node.confirmMode === 'yes' &&
|
||||
node.confirmDriver === true
|
||||
);
|
||||
|
||||
const isDriverRejectedStatus = value => {
|
||||
if (value === null || value === undefined || typeof value === 'boolean') return false;
|
||||
return [
|
||||
'-1',
|
||||
'2',
|
||||
'reject',
|
||||
'rejected',
|
||||
'refuse',
|
||||
'refused',
|
||||
'decline',
|
||||
'declined',
|
||||
'deny',
|
||||
'denied',
|
||||
'拒绝',
|
||||
'已拒绝',
|
||||
'拒绝接单',
|
||||
'已拒绝接单',
|
||||
].includes(String(value).trim().toLowerCase());
|
||||
};
|
||||
|
||||
const hasDriverRejectRecord = row => {
|
||||
const rejectRecordValues = [
|
||||
row.driverRejectTime,
|
||||
row.driverRejectedTime,
|
||||
row.driverRefuseTime,
|
||||
row.acceptRejectTime,
|
||||
row.driverRejectReason,
|
||||
row.driverRefuseReason,
|
||||
row.acceptRejectReason,
|
||||
];
|
||||
if (rejectRecordValues.some(value => !isEmpty(value))) return true;
|
||||
|
||||
const driverStatusProps = [
|
||||
'driverAcceptStatus',
|
||||
'driverAccepted',
|
||||
'driverAccept',
|
||||
'accepted',
|
||||
'isAccepted',
|
||||
'acceptStatus',
|
||||
'driverResponseStatus',
|
||||
'driverOrderStatus',
|
||||
'driverAcceptResult',
|
||||
'acceptResult',
|
||||
];
|
||||
if (driverStatusProps.some(prop => isDriverRejectedStatus(row[prop]))) return true;
|
||||
|
||||
const nodeStatusProps = [
|
||||
...driverStatusProps,
|
||||
'confirmStatus',
|
||||
'executionStatus',
|
||||
'nodeStatus',
|
||||
'status',
|
||||
'result',
|
||||
];
|
||||
return getProcessConfigNodes(row)
|
||||
.filter(isAcceptProcessNode)
|
||||
.some(node => nodeStatusProps.some(prop => isDriverRejectedStatus(node[prop])));
|
||||
};
|
||||
|
||||
const isDriverRejectedWaybill = row =>
|
||||
requiresDriverAcceptConfirmation(row) && hasDriverRejectRecord(row);
|
||||
|
||||
const hasDriverAcceptRecord = row => {
|
||||
const recordValues = [
|
||||
row.driverAcceptTime,
|
||||
@@ -304,7 +363,7 @@ export const config = {
|
||||
formatStatus(row, prop, defaultText) {
|
||||
if (
|
||||
prop === 'businessStatus' &&
|
||||
hasAcceptProcessNode(row) &&
|
||||
requiresDriverAcceptConfirmation(row) &&
|
||||
isInProgressStatus(row, defaultText) &&
|
||||
!hasDriverAcceptRecord(row)
|
||||
) {
|
||||
@@ -313,12 +372,18 @@ export const config = {
|
||||
if (
|
||||
prop === 'businessStatus' &&
|
||||
row.businessStatus === 'pending' &&
|
||||
!requiresDriverAcceptConfirmation(row.processJson)
|
||||
!requiresDriverAcceptConfirmation(row)
|
||||
) {
|
||||
return '进行中';
|
||||
}
|
||||
return defaultText;
|
||||
},
|
||||
canReassign(row) {
|
||||
return isDriverRejectedWaybill(row);
|
||||
},
|
||||
canEdit(row) {
|
||||
return !isDriverRejectedWaybill(row);
|
||||
},
|
||||
deleteStatus: ['draft'],
|
||||
editStatus: ['draft', 'pending'],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user