Merge remote-tracking branch 'origin/master'
# Conflicts: # src/option/business/shipping-template.js # src/option/business/transport-plan.js # src/option/business/waybill-manage.js # src/views/business/components/business-crud-page.vue # src/views/business/components/master-order-detail.vue # src/views/business/components/master-order-editor.vue # src/views/business/components/waybill-import-dialog.vue
This commit is contained in:
@@ -36,7 +36,6 @@ export const planStatusOptions = [
|
||||
{ label: '待调度', value: 'waiting_dispatch' },
|
||||
{ label: '调度中', value: 'dispatching' },
|
||||
{ label: '已完成', value: 'completed' },
|
||||
{ label: '已取消', value: 'cancelled' },
|
||||
];
|
||||
|
||||
export const waybillStatusOptions = [
|
||||
@@ -172,7 +171,7 @@ export const nonNegativeRule = label => ({
|
||||
});
|
||||
|
||||
export const phoneRule = label => ({
|
||||
pattern: /^(1\d{10}|0\d{2,3}-?\d{7,8})$/,
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
message: `${label}格式不正确`,
|
||||
trigger: 'blur',
|
||||
});
|
||||
@@ -209,6 +208,21 @@ export const createCrudOption = columns => ({
|
||||
column: columns,
|
||||
});
|
||||
|
||||
export const withSearchPlaceholders = columns =>
|
||||
columns.map(column => {
|
||||
if (!column.search || column.searchPlaceholder) return column;
|
||||
if (column.type === 'date' || column.type === 'datetime' || column.searchRange) return column;
|
||||
const isSelectSearch =
|
||||
column.type === 'select' ||
|
||||
column.searchType === 'select' ||
|
||||
Boolean(column.dicData) ||
|
||||
Boolean(column.dicUrl);
|
||||
return {
|
||||
...column,
|
||||
searchPlaceholder: isSelectSearch ? '请选择' : '请输入',
|
||||
};
|
||||
});
|
||||
|
||||
export const auditColumns = [
|
||||
{
|
||||
label: '创建人',
|
||||
|
||||
@@ -8,7 +8,7 @@ export const transportTypeDict = {
|
||||
},
|
||||
};
|
||||
|
||||
export const carrierTypeOptions = ['承运商', '自运', '网签平台'];
|
||||
export const carrierTypeOptions = ['承运商', '自运', '网货平台'];
|
||||
|
||||
export const loadingStatusOptions = [
|
||||
{ label: '草稿', value: 'draft' },
|
||||
@@ -28,6 +28,24 @@ export const loadingManageConfig = {
|
||||
permission: 'loading_manage',
|
||||
exportUrl: '/blade-transport/loading-manage/export-loading-manage',
|
||||
exportName: '配载管理',
|
||||
exportColumns: [
|
||||
{ prop: 'loadingNo', label: '配载单号' },
|
||||
{ prop: 'loadingSubNos', label: '配载子单号' },
|
||||
{ prop: 'vehicleNo', label: '车牌号/航班号/船号/班列号' },
|
||||
{ prop: 'driverName', label: '司机' },
|
||||
{ prop: 'driverPhone', label: '联系电话' },
|
||||
{ prop: 'carrierType', label: '承运类型' },
|
||||
{ prop: 'departureAddress', label: '发货地' },
|
||||
{ prop: 'transitAddress', label: '途经地' },
|
||||
{ prop: 'arrivalAddress', label: '到货地' },
|
||||
{ prop: 'carrierName', label: '承运商' },
|
||||
{ prop: 'transportType', label: '运输方式' },
|
||||
{ prop: 'dataSource', label: '数据来源' },
|
||||
{ prop: 'createTime', label: '创建时间' },
|
||||
{ prop: 'updateTime', label: '更新时间' },
|
||||
{ prop: 'currentProcessNode', label: '过程节点' },
|
||||
{ prop: 'businessStatus', label: '状态' },
|
||||
],
|
||||
createText: '新建配载',
|
||||
batchCompleteText: '批量完成',
|
||||
statusProp: 'businessStatus',
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
import { auditColumns, createCrudOption, selectRule, textRule, transportTypeOptions } from './common';
|
||||
import {
|
||||
auditColumns,
|
||||
createCrudOption,
|
||||
selectRule,
|
||||
textRule,
|
||||
transportTypeOptions,
|
||||
withSearchPlaceholders,
|
||||
} from './common';
|
||||
|
||||
const templateTypeOptions = [
|
||||
{ label: '运输计划', value: '运输计划' },
|
||||
@@ -8,10 +15,31 @@ const templateTypeOptions = [
|
||||
export const config = {
|
||||
title: '发货模板',
|
||||
permission: 'shipping_template',
|
||||
exportUrl: '/blade-transport/shipping-template/export-shipping-template',
|
||||
exportName: '发货模板',
|
||||
tableColumnOrder: [
|
||||
'templateCode',
|
||||
'templateName',
|
||||
'templateType',
|
||||
'transportType',
|
||||
'createUserName',
|
||||
'remark',
|
||||
'updateTime',
|
||||
'createTime',
|
||||
],
|
||||
exportColumns: [
|
||||
{ prop: 'templateCode', label: '模板编号' },
|
||||
{ prop: 'templateName', label: '模板名称' },
|
||||
{ prop: 'templateType', label: '模板类型' },
|
||||
{ prop: 'transportType', label: '运输方式' },
|
||||
{ prop: 'createUserName', label: '创建人' },
|
||||
{ prop: 'remark', label: '备注' },
|
||||
{ prop: 'updateTime', label: '更新时间' },
|
||||
{ prop: 'createTime', label: '创建时间' },
|
||||
],
|
||||
enableAllDept: false,
|
||||
enableProjectSelect: true,
|
||||
projectQueryParams: {
|
||||
approvalStatuses: 'approved,change_approved',
|
||||
},
|
||||
excludeVoidedProjects: true,
|
||||
enableAttachmentTable: true,
|
||||
enableTransportPlanForm: true,
|
||||
@@ -41,178 +69,206 @@ export const config = {
|
||||
};
|
||||
|
||||
export const option = {
|
||||
...createCrudOption([
|
||||
{
|
||||
label: '',
|
||||
prop: 'templateInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 400,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '模板编号',
|
||||
prop: 'templateCode',
|
||||
search: true,
|
||||
searchOrder: 4,
|
||||
span: 6,
|
||||
order: 390,
|
||||
minWidth: 170,
|
||||
disabled: true,
|
||||
placeholder: '系统自动生成',
|
||||
},
|
||||
{
|
||||
label: '模板名称',
|
||||
prop: 'templateName',
|
||||
search: true,
|
||||
searchOrder: 3,
|
||||
span: 6,
|
||||
order: 380,
|
||||
minWidth: 150,
|
||||
rules: textRule('模板名称', 50, true),
|
||||
},
|
||||
{
|
||||
label: '模板类型',
|
||||
prop: 'templateType',
|
||||
type: 'select',
|
||||
search: true,
|
||||
searchOrder: 2,
|
||||
span: 6,
|
||||
order: 370,
|
||||
dicData: templateTypeOptions,
|
||||
minWidth: 120,
|
||||
rules: selectRule('模板类型'),
|
||||
},
|
||||
{
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 2,
|
||||
span: 18,
|
||||
order: 360,
|
||||
minWidth: 180,
|
||||
maxlength: 200,
|
||||
showWordLimit: true,
|
||||
rules: textRule('备注', 200),
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'basicInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 350,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '项目',
|
||||
prop: 'projectName',
|
||||
formslot: true,
|
||||
search: true,
|
||||
searchOrder: 1,
|
||||
span: 6,
|
||||
order: 340,
|
||||
minWidth: 150,
|
||||
rules: textRule('项目', 100, true),
|
||||
},
|
||||
{
|
||||
label: '客户合同',
|
||||
prop: 'contractName',
|
||||
formslot: true,
|
||||
span: 6,
|
||||
order: 330,
|
||||
minWidth: 160,
|
||||
rules: textRule('客户合同', 100, true),
|
||||
},
|
||||
{
|
||||
label: '运输方式',
|
||||
prop: 'transportType',
|
||||
type: 'select',
|
||||
span: 6,
|
||||
order: 320,
|
||||
dicData: transportTypeOptions,
|
||||
minWidth: 130,
|
||||
rules: selectRule('运输方式'),
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'shippingInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 310,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '发货地址',
|
||||
prop: 'departureAddress',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 300,
|
||||
minWidth: 220,
|
||||
rules: textRule('发货地址', 255, true),
|
||||
},
|
||||
{
|
||||
label: '收货地址',
|
||||
prop: 'arrivalAddress',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 290,
|
||||
minWidth: 220,
|
||||
rules: textRule('收货地址', 255, true),
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'goodsInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 280,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'goodsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 270,
|
||||
hide: true,
|
||||
labelWidth: '0px',
|
||||
className: 'business-crud-page__full-form-item',
|
||||
},
|
||||
{ label: '运费信息', prop: 'freightJson', hide: true, display: false },
|
||||
{
|
||||
label: '',
|
||||
prop: 'attachmentTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 260,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'attachmentsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 250,
|
||||
hide: true,
|
||||
labelWidth: '0px',
|
||||
className: 'business-crud-page__full-form-item',
|
||||
},
|
||||
{ label: '项目ID', prop: 'projectId', hide: true, display: false },
|
||||
{ label: '客户合同ID', prop: 'contractId', hide: true, display: false },
|
||||
{ label: '发货地', prop: 'departureName', hide: true, display: false },
|
||||
{ label: '发货联系人', prop: 'departureContact', hide: true, display: false },
|
||||
{ label: '发货联系方式', prop: 'departurePhone', hide: true, display: false },
|
||||
{ label: '收货地', prop: 'arrivalName', hide: true, display: false },
|
||||
{ label: '收货联系人', prop: 'arrivalContact', hide: true, display: false },
|
||||
{ label: '收货联系方式', prop: 'arrivalPhone', hide: true, display: false },
|
||||
{ label: '所属组织', prop: 'deptName', minWidth: 150, addDisplay: false, editDisplay: false },
|
||||
...auditColumns,
|
||||
]),
|
||||
...createCrudOption(
|
||||
withSearchPlaceholders([
|
||||
{
|
||||
label: '',
|
||||
prop: 'templateInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 400,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '模板编号',
|
||||
prop: 'templateCode',
|
||||
search: true,
|
||||
searchOrder: 4,
|
||||
span: 8,
|
||||
order: 390,
|
||||
minWidth: 170,
|
||||
disabled: true,
|
||||
placeholder: '系统自动生成',
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '模板名称',
|
||||
prop: 'templateName',
|
||||
search: true,
|
||||
searchOrder: 3,
|
||||
span: 8,
|
||||
order: 380,
|
||||
minWidth: 150,
|
||||
rules: textRule('模板名称', 50, true),
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '模板类型',
|
||||
prop: 'templateType',
|
||||
type: 'select',
|
||||
search: true,
|
||||
searchOrder: 2,
|
||||
span: 8,
|
||||
order: 370,
|
||||
dicData: templateTypeOptions,
|
||||
minWidth: 120,
|
||||
rules: selectRule('模板类型'),
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 3,
|
||||
span: 24,
|
||||
order: 360,
|
||||
minWidth: 180,
|
||||
maxlength: 200,
|
||||
showWordLimit: true,
|
||||
rules: textRule('备注', 200),
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'basicInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 350,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '项目',
|
||||
prop: 'projectName',
|
||||
formslot: true,
|
||||
search: true,
|
||||
searchOrder: 1,
|
||||
span: 8,
|
||||
order: 340,
|
||||
minWidth: 150,
|
||||
rules: textRule('项目', 100, true),
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '客户合同',
|
||||
prop: 'contractName',
|
||||
formslot: true,
|
||||
span: 8,
|
||||
order: 330,
|
||||
minWidth: 160,
|
||||
rules: textRule('客户合同', 100, true),
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '运输方式',
|
||||
prop: 'transportType',
|
||||
type: 'select',
|
||||
span: 8,
|
||||
order: 320,
|
||||
dicData: transportTypeOptions,
|
||||
minWidth: 130,
|
||||
rules: selectRule('运输方式'),
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '备注',
|
||||
prop: 'basicRemark',
|
||||
type: 'textarea',
|
||||
minRows: 3,
|
||||
span: 24,
|
||||
order: 315,
|
||||
minWidth: 180,
|
||||
maxlength: 200,
|
||||
showWordLimit: true,
|
||||
rules: textRule('备注', 200),
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'shippingInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 310,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '发货地址',
|
||||
prop: 'departureAddress',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 300,
|
||||
minWidth: 220,
|
||||
rules: textRule('发货地址', 255, true),
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '收货地址',
|
||||
prop: 'arrivalAddress',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 290,
|
||||
minWidth: 220,
|
||||
rules: textRule('收货地址', 255, true),
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'goodsInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 280,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'goodsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 270,
|
||||
hide: true,
|
||||
labelWidth: '0px',
|
||||
className: 'business-crud-page__full-form-item',
|
||||
},
|
||||
{ label: '运费信息', prop: 'freightJson', hide: true, display: false },
|
||||
{
|
||||
label: '',
|
||||
prop: 'attachmentTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 260,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'attachmentsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 250,
|
||||
hide: true,
|
||||
labelWidth: '0px',
|
||||
className: 'business-crud-page__full-form-item',
|
||||
},
|
||||
{ label: '项目ID', prop: 'projectId', hide: true, display: false },
|
||||
{ label: '客户合同ID', prop: 'contractId', hide: true, display: false },
|
||||
{ label: '发货地', prop: 'departureName', hide: true, display: false },
|
||||
{ label: '发货联系人', prop: 'departureContact', hide: true, display: false },
|
||||
{ label: '发货联系方式', prop: 'departurePhone', hide: true, display: false },
|
||||
{ label: '收货地', prop: 'arrivalName', hide: true, display: false },
|
||||
{ label: '收货联系人', prop: 'arrivalContact', hide: true, display: false },
|
||||
{ label: '收货联系方式', prop: 'arrivalPhone', hide: true, display: false },
|
||||
{ label: '所属组织', prop: 'deptName', minWidth: 150, addDisplay: false, editDisplay: false, display: false },
|
||||
...auditColumns.map(column => ({
|
||||
...column,
|
||||
display: false,
|
||||
})),
|
||||
])
|
||||
),
|
||||
dialogWidth: '96%',
|
||||
dialogTop: '10px',
|
||||
};
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
planStatusOptions,
|
||||
selectRule,
|
||||
textRule,
|
||||
withSearchPlaceholders,
|
||||
} from './common';
|
||||
|
||||
const listDicFormatter = res => {
|
||||
@@ -104,8 +105,55 @@ const formatGoodsInfo = row => {
|
||||
return text || row.goodsInfo || '';
|
||||
};
|
||||
|
||||
const formatDispatchProgress = row =>
|
||||
row.dispatchProgressName || row.dispatchProgress || row.progress || '';
|
||||
const parseDispatchRows = row => {
|
||||
const sources = [
|
||||
row.dispatchRows,
|
||||
row.dispatchList,
|
||||
row.dispatchRecords,
|
||||
row.waybillList,
|
||||
row.waybillRows,
|
||||
];
|
||||
for (const source of sources) {
|
||||
const rows = parseGoodsRows(source);
|
||||
if (rows.length) return rows;
|
||||
}
|
||||
return [];
|
||||
};
|
||||
|
||||
const formatDispatchQuantity = value => {
|
||||
const number = Number(value || 0);
|
||||
if (!Number.isFinite(number)) return '0';
|
||||
const fixed = Math.round((number + Number.EPSILON) * 1000) / 1000;
|
||||
return Number.isInteger(fixed) ? String(fixed) : String(fixed).replace(/\.?0+$/, '');
|
||||
};
|
||||
|
||||
const formatDispatchProgress = row => {
|
||||
const goodsRows = parseGoodsRows(row.goodsJson);
|
||||
const totalRows = goodsRows.length ? goodsRows : [row];
|
||||
const dispatchRows = parseDispatchRows(row);
|
||||
const summary = new Map();
|
||||
const add = (item, field) => {
|
||||
const unit = item.quantityUnit || item.goodsQuantityUnit || item.unit || '吨';
|
||||
const quantity = Number(item.quantity || item.cargoQuantity || item.goodsQuantity || 0);
|
||||
if (!summary.has(unit)) summary.set(unit, { total: 0, assigned: 0 });
|
||||
if (Number.isFinite(quantity)) summary.get(unit)[field] += quantity;
|
||||
};
|
||||
totalRows.forEach(item => add(item, 'total'));
|
||||
dispatchRows.forEach(item => add(item, 'assigned'));
|
||||
|
||||
if (!dispatchRows.length) {
|
||||
const assigned = Number(row.dispatchedQuantity || row.dispatchQuantity || 0);
|
||||
if (Number.isFinite(assigned)) {
|
||||
const unit = row.quantityUnit || row.goodsQuantityUnit || row.unit || '吨';
|
||||
if (!summary.has(unit)) summary.set(unit, { total: 0, assigned: 0 });
|
||||
summary.get(unit).assigned = assigned;
|
||||
}
|
||||
}
|
||||
const lines = Array.from(summary.entries()).map(
|
||||
([unit, item]) => `${formatDispatchQuantity(item.assigned)}/${formatDispatchQuantity(item.total)}${unit}`
|
||||
);
|
||||
return lines.length ? lines.join('\n') : row.dispatchProgressName || row.dispatchProgress || row.progress || '';
|
||||
};
|
||||
|
||||
const auditColumn = prop => ({ ...auditColumns.find(item => item.prop === prop) });
|
||||
|
||||
@@ -116,11 +164,15 @@ export const config = {
|
||||
exportName: '运输计划',
|
||||
enableAllDept: false,
|
||||
enableProjectSelect: true,
|
||||
projectQueryParams: {
|
||||
approvalStatuses: 'approved,change_approved',
|
||||
},
|
||||
templateCreateTarget: 'transport-plan',
|
||||
enableAttachmentTable: true,
|
||||
enableTransportPlanForm: true,
|
||||
enableTransportPlanCreateActions: true,
|
||||
enableTransportPlanImport: true,
|
||||
fixedTransportAddressType: true,
|
||||
transportPlanImportTitle: '导入发货计划',
|
||||
transportPlanTemplateUrl: '/blade-transport/transport-plan/export-template',
|
||||
attachmentTitle: '附件',
|
||||
@@ -128,10 +180,10 @@ export const config = {
|
||||
planStartDateRange: ['planStartDateStart', 'planStartDateEnd'],
|
||||
planEndDateRange: ['planEndDateStart', 'planEndDateEnd'],
|
||||
},
|
||||
actions: ['copy', 'cancel', 'complete'],
|
||||
actions: ['copy', 'complete'],
|
||||
statusProp: 'businessStatus',
|
||||
statusTextProp: 'businessStatusName',
|
||||
deleteStatus: ['draft'],
|
||||
deleteStatus: ['draft', 'waiting_dispatch'],
|
||||
editStatus: ['draft', 'waiting_dispatch'],
|
||||
detailButton: true,
|
||||
detailSections: [
|
||||
@@ -177,7 +229,7 @@ export const config = {
|
||||
action: 'dispatch',
|
||||
label: '调度',
|
||||
statusProp: 'businessStatus',
|
||||
status: ['waiting_dispatch'],
|
||||
status: ['waiting_dispatch', 'dispatching'],
|
||||
permission: 'transport_plan_edit',
|
||||
confirm: '确定调度该运输计划?',
|
||||
},
|
||||
@@ -185,367 +237,370 @@ export const config = {
|
||||
};
|
||||
|
||||
export const option = {
|
||||
...createCrudOption([
|
||||
{
|
||||
label: '',
|
||||
prop: 'basicInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 400,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '计划单号',
|
||||
prop: 'planNo',
|
||||
search: true,
|
||||
searchOrder: 13,
|
||||
span: 6,
|
||||
order: 370,
|
||||
minWidth: 150,
|
||||
disabled: true,
|
||||
placeholder: '系统自动生成',
|
||||
},
|
||||
{
|
||||
label: '计划名称',
|
||||
prop: 'planName',
|
||||
search: true,
|
||||
searchOrder: 12,
|
||||
span: 6,
|
||||
order: 380,
|
||||
minWidth: 150,
|
||||
rules: textRule('计划名称', 50, true),
|
||||
},
|
||||
{
|
||||
label: '运输方式',
|
||||
prop: 'transportType',
|
||||
type: 'select',
|
||||
search: true,
|
||||
searchOrder: 10,
|
||||
span: 6,
|
||||
order: 360,
|
||||
dicUrl: '/blade-system/dict-biz/dictionary?code=transport_type',
|
||||
props: {
|
||||
label: 'dictValue',
|
||||
value: 'dictKey',
|
||||
...createCrudOption(
|
||||
withSearchPlaceholders([
|
||||
{
|
||||
label: '',
|
||||
prop: 'basicInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 400,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
minWidth: 130,
|
||||
rules: selectRule('运输类型'),
|
||||
},
|
||||
{
|
||||
label: '货物信息',
|
||||
prop: 'goodsInfo',
|
||||
formatter: row => formatGoodsInfo(row),
|
||||
minWidth: 320,
|
||||
className: 'business-crud-page__goods-info-cell',
|
||||
overHidden: false,
|
||||
showOverflowTooltip: false,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '调度进度',
|
||||
prop: 'dispatchProgress',
|
||||
formatter: row => formatDispatchProgress(row),
|
||||
minWidth: 120,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '发货地址',
|
||||
prop: 'departureAddress',
|
||||
formslot: true,
|
||||
search: true,
|
||||
searchOrder: 7,
|
||||
span: 24,
|
||||
order: 310,
|
||||
minWidth: 220,
|
||||
rules: textRule('发货地址', 255, true),
|
||||
},
|
||||
{
|
||||
label: '到货地址',
|
||||
prop: 'arrivalAddress',
|
||||
formslot: true,
|
||||
search: true,
|
||||
searchOrder: 6,
|
||||
span: 24,
|
||||
order: 300,
|
||||
minWidth: 220,
|
||||
rules: textRule('收货地址', 255, true),
|
||||
},
|
||||
{
|
||||
label: '项目名称',
|
||||
prop: 'projectName',
|
||||
formslot: true,
|
||||
search: true,
|
||||
searchOrder: 11,
|
||||
searchType: 'select',
|
||||
span: 6,
|
||||
order: 400,
|
||||
dicUrl: '/blade-transport/project-apply/list?current=1&size=9999',
|
||||
dicFormatter: listDicFormatter,
|
||||
props: {
|
||||
label: 'projectName',
|
||||
value: 'projectName',
|
||||
{
|
||||
label: '计划单号',
|
||||
prop: 'planNo',
|
||||
search: true,
|
||||
searchOrder: 13,
|
||||
span: 6,
|
||||
order: 370,
|
||||
minWidth: 150,
|
||||
disabled: true,
|
||||
placeholder: '系统自动生成',
|
||||
},
|
||||
filterable: true,
|
||||
minWidth: 150,
|
||||
rules: textRule('项目', 100, true),
|
||||
},
|
||||
{
|
||||
label: '客户名称',
|
||||
prop: 'customerName',
|
||||
search: true,
|
||||
searchOrder: 5,
|
||||
minWidth: 150,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '计划开始日期',
|
||||
prop: 'planStartDate',
|
||||
sortable: true,
|
||||
type: 'date',
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
span: 6,
|
||||
order: 350,
|
||||
minWidth: 130,
|
||||
},
|
||||
{
|
||||
label: '计划结束日期',
|
||||
prop: 'planEndDate',
|
||||
sortable: true,
|
||||
type: 'date',
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
span: 6,
|
||||
order: 340,
|
||||
minWidth: 130,
|
||||
},
|
||||
{
|
||||
label: '数据来源',
|
||||
prop: 'dataSource',
|
||||
type: 'select',
|
||||
search: true,
|
||||
searchOrder: 1,
|
||||
dicData: dataSourceOptions,
|
||||
minWidth: 120,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '货物类型',
|
||||
prop: 'cargoType',
|
||||
search: true,
|
||||
searchOrder: 8,
|
||||
formatter: row => formatGoodsField(row, ['cargoType', 'goodsType']),
|
||||
minWidth: 130,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '货物名称',
|
||||
prop: 'cargoName',
|
||||
search: true,
|
||||
searchOrder: 9,
|
||||
formatter: row => formatGoodsField(row, ['cargoName', 'goodsName']),
|
||||
minWidth: 150,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
order: 330,
|
||||
minWidth: 180,
|
||||
maxlength: 200,
|
||||
showWordLimit: true,
|
||||
rules: textRule('备注', 200),
|
||||
},
|
||||
{
|
||||
...auditColumn('updateUserName'),
|
||||
},
|
||||
{
|
||||
...auditColumn('createTime'),
|
||||
},
|
||||
{
|
||||
...auditColumn('updateTime'),
|
||||
},
|
||||
{
|
||||
label: '调度状态',
|
||||
prop: 'businessStatus',
|
||||
type: 'select',
|
||||
slot: true,
|
||||
search: true,
|
||||
searchLabel: '状态',
|
||||
searchOrder: 2,
|
||||
dicData: planStatusOptions,
|
||||
minWidth: 120,
|
||||
fixed: 'right',
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'shippingInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 320,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '项目ID',
|
||||
prop: 'projectId',
|
||||
hide: true,
|
||||
display: false,
|
||||
},
|
||||
{
|
||||
label: '客户合同',
|
||||
prop: 'contractName',
|
||||
formslot: true,
|
||||
hide: true,
|
||||
span: 6,
|
||||
order: 390,
|
||||
minWidth: 160,
|
||||
rules: textRule('客户合同', 100, true),
|
||||
},
|
||||
{
|
||||
label: '客户合同ID',
|
||||
prop: 'contractId',
|
||||
hide: true,
|
||||
display: false,
|
||||
},
|
||||
{
|
||||
label: '发货地',
|
||||
prop: 'departureName',
|
||||
hide: true,
|
||||
display: false,
|
||||
minWidth: 140,
|
||||
rules: textRule('发货地', 100, true),
|
||||
},
|
||||
{
|
||||
label: '收货地',
|
||||
prop: 'arrivalName',
|
||||
hide: true,
|
||||
display: false,
|
||||
minWidth: 140,
|
||||
rules: textRule('收货地', 100, true),
|
||||
},
|
||||
{
|
||||
label: '发货联系人',
|
||||
prop: 'departureContact',
|
||||
hide: true,
|
||||
display: false,
|
||||
rules: textRule('发货联系人', 50),
|
||||
},
|
||||
{
|
||||
label: '发货联系方式',
|
||||
prop: 'departurePhone',
|
||||
hide: true,
|
||||
display: false,
|
||||
rules: [phoneRule('发货联系方式'), ...textRule('发货联系方式', 50)],
|
||||
},
|
||||
{
|
||||
label: '收货联系人',
|
||||
prop: 'arrivalContact',
|
||||
hide: true,
|
||||
display: false,
|
||||
rules: textRule('收货联系人', 50),
|
||||
},
|
||||
{
|
||||
label: '收货联系方式',
|
||||
prop: 'arrivalPhone',
|
||||
hide: true,
|
||||
display: false,
|
||||
rules: [phoneRule('收货联系方式'), ...textRule('收货联系方式', 50)],
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'goodsInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 280,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '计划开始日期',
|
||||
prop: 'planStartDateRange',
|
||||
type: 'date',
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
search: true,
|
||||
searchRange: true,
|
||||
searchOrder: 4,
|
||||
hide: true,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '计划结束日期',
|
||||
prop: 'planEndDateRange',
|
||||
type: 'date',
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
search: true,
|
||||
searchRange: true,
|
||||
searchOrder: 3,
|
||||
hide: true,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '所属组织',
|
||||
prop: 'deptName',
|
||||
hide: true,
|
||||
minWidth: 150,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'goodsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
minRows: 5,
|
||||
span: 24,
|
||||
order: 270,
|
||||
hide: true,
|
||||
labelWidth: '0px',
|
||||
className: 'business-crud-page__full-form-item',
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'attachmentTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 265,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'attachmentsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
order: 260,
|
||||
hide: true,
|
||||
labelWidth: '0px',
|
||||
className: 'business-crud-page__full-form-item',
|
||||
},
|
||||
]),
|
||||
{
|
||||
label: '计划名称',
|
||||
prop: 'planName',
|
||||
search: true,
|
||||
searchOrder: 12,
|
||||
span: 6,
|
||||
order: 380,
|
||||
minWidth: 150,
|
||||
rules: textRule('计划名称', 50, true),
|
||||
},
|
||||
{
|
||||
label: '运输方式',
|
||||
prop: 'transportType',
|
||||
type: 'select',
|
||||
search: true,
|
||||
searchOrder: 10,
|
||||
span: 6,
|
||||
order: 360,
|
||||
dicUrl: '/blade-system/dict-biz/dictionary?code=transport_type',
|
||||
props: {
|
||||
label: 'dictValue',
|
||||
value: 'dictKey',
|
||||
},
|
||||
minWidth: 130,
|
||||
rules: selectRule('运输类型'),
|
||||
},
|
||||
{
|
||||
label: '货物信息',
|
||||
prop: 'goodsInfo',
|
||||
formatter: row => formatGoodsInfo(row),
|
||||
minWidth: 320,
|
||||
className: 'business-crud-page__goods-info-cell',
|
||||
overHidden: false,
|
||||
showOverflowTooltip: false,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '调度进度',
|
||||
prop: 'dispatchProgress',
|
||||
formatter: row => formatDispatchProgress(row),
|
||||
minWidth: 120,
|
||||
className: 'business-crud-page__dispatch-progress-cell',
|
||||
overHidden: false,
|
||||
showOverflowTooltip: false,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '发货地址',
|
||||
prop: 'departureAddress',
|
||||
formslot: true,
|
||||
search: true,
|
||||
searchOrder: 7,
|
||||
span: 24,
|
||||
order: 310,
|
||||
minWidth: 220,
|
||||
rules: textRule('发货地址', 255, true),
|
||||
},
|
||||
{
|
||||
label: '到货地址',
|
||||
prop: 'arrivalAddress',
|
||||
formslot: true,
|
||||
search: true,
|
||||
searchOrder: 6,
|
||||
span: 24,
|
||||
order: 300,
|
||||
minWidth: 220,
|
||||
rules: textRule('收货地址', 255, true),
|
||||
},
|
||||
{
|
||||
label: '项目名称',
|
||||
prop: 'projectName',
|
||||
formslot: true,
|
||||
search: true,
|
||||
searchOrder: 11,
|
||||
searchType: 'select',
|
||||
span: 6,
|
||||
order: 400,
|
||||
dicUrl: '/blade-transport/project-apply/list?current=1&size=9999',
|
||||
dicFormatter: listDicFormatter,
|
||||
props: {
|
||||
label: 'projectName',
|
||||
value: 'projectName',
|
||||
},
|
||||
filterable: true,
|
||||
minWidth: 150,
|
||||
rules: textRule('项目', 100, true),
|
||||
},
|
||||
{
|
||||
label: '客户名称',
|
||||
prop: 'customerName',
|
||||
search: true,
|
||||
searchOrder: 5,
|
||||
minWidth: 150,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '计划开始日期',
|
||||
prop: 'planStartDate',
|
||||
type: 'date',
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
span: 6,
|
||||
order: 350,
|
||||
minWidth: 150,
|
||||
},
|
||||
{
|
||||
label: '计划结束日期',
|
||||
prop: 'planEndDate',
|
||||
type: 'date',
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
span: 6,
|
||||
order: 340,
|
||||
minWidth: 150,
|
||||
},
|
||||
{
|
||||
label: '数据来源',
|
||||
prop: 'dataSource',
|
||||
type: 'select',
|
||||
search: true,
|
||||
searchOrder: 1,
|
||||
dicData: dataSourceOptions,
|
||||
minWidth: 120,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '货物类型',
|
||||
prop: 'cargoType',
|
||||
search: true,
|
||||
searchOrder: 8,
|
||||
formatter: row => formatGoodsField(row, ['cargoType', 'goodsType']),
|
||||
minWidth: 130,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '货物名称',
|
||||
prop: 'cargoName',
|
||||
search: true,
|
||||
searchOrder: 9,
|
||||
formatter: row => formatGoodsField(row, ['cargoName', 'goodsName']),
|
||||
minWidth: 150,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
span: 24,
|
||||
order: 330,
|
||||
minWidth: 180,
|
||||
maxlength: 200,
|
||||
showWordLimit: true,
|
||||
rules: textRule('备注', 200),
|
||||
},
|
||||
{
|
||||
...auditColumn('updateUserName'),
|
||||
},
|
||||
{
|
||||
...auditColumn('createTime'),
|
||||
},
|
||||
{
|
||||
...auditColumn('updateTime'),
|
||||
},
|
||||
{
|
||||
label: '调度状态',
|
||||
prop: 'businessStatus',
|
||||
type: 'select',
|
||||
slot: true,
|
||||
search: true,
|
||||
searchLabel: '状态',
|
||||
searchOrder: 2,
|
||||
dicData: planStatusOptions,
|
||||
minWidth: 120,
|
||||
fixed: 'right',
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'shippingInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 320,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '项目ID',
|
||||
prop: 'projectId',
|
||||
hide: true,
|
||||
display: false,
|
||||
},
|
||||
{
|
||||
label: '客户合同',
|
||||
prop: 'contractName',
|
||||
formslot: true,
|
||||
hide: true,
|
||||
span: 6,
|
||||
order: 390,
|
||||
minWidth: 160,
|
||||
rules: textRule('客户合同', 100, true),
|
||||
},
|
||||
{
|
||||
label: '客户合同ID',
|
||||
prop: 'contractId',
|
||||
hide: true,
|
||||
display: false,
|
||||
},
|
||||
{
|
||||
label: '发货地',
|
||||
prop: 'departureName',
|
||||
hide: true,
|
||||
display: false,
|
||||
minWidth: 140,
|
||||
rules: textRule('发货地', 100, true),
|
||||
},
|
||||
{
|
||||
label: '收货地',
|
||||
prop: 'arrivalName',
|
||||
hide: true,
|
||||
display: false,
|
||||
minWidth: 140,
|
||||
rules: textRule('收货地', 100, true),
|
||||
},
|
||||
{
|
||||
label: '发货联系人',
|
||||
prop: 'departureContact',
|
||||
hide: true,
|
||||
display: false,
|
||||
rules: textRule('发货联系人', 50),
|
||||
},
|
||||
{
|
||||
label: '发货联系方式',
|
||||
prop: 'departurePhone',
|
||||
hide: true,
|
||||
display: false,
|
||||
rules: [phoneRule('发货联系方式'), ...textRule('发货联系方式', 50)],
|
||||
},
|
||||
{
|
||||
label: '收货联系人',
|
||||
prop: 'arrivalContact',
|
||||
hide: true,
|
||||
display: false,
|
||||
rules: textRule('收货联系人', 50),
|
||||
},
|
||||
{
|
||||
label: '收货联系方式',
|
||||
prop: 'arrivalPhone',
|
||||
hide: true,
|
||||
display: false,
|
||||
rules: [phoneRule('收货联系方式'), ...textRule('收货联系方式', 50)],
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'goodsInfoTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 280,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '计划开始日期',
|
||||
prop: 'planStartDateRange',
|
||||
type: 'date',
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
search: true,
|
||||
searchRange: true,
|
||||
searchOrder: 4,
|
||||
hide: true,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '计划结束日期',
|
||||
prop: 'planEndDateRange',
|
||||
type: 'date',
|
||||
format: 'YYYY-MM-DD',
|
||||
valueFormat: 'YYYY-MM-DD',
|
||||
search: true,
|
||||
searchRange: true,
|
||||
searchOrder: 3,
|
||||
hide: true,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '所属组织',
|
||||
prop: 'deptName',
|
||||
hide: true,
|
||||
minWidth: 150,
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'goodsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
minRows: 5,
|
||||
span: 24,
|
||||
order: 270,
|
||||
hide: true,
|
||||
labelWidth: '0px',
|
||||
className: 'business-crud-page__full-form-item',
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'attachmentTitle',
|
||||
formslot: true,
|
||||
span: 24,
|
||||
order: 265,
|
||||
hide: true,
|
||||
labelWidth: 0,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
prop: 'attachmentsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
minRows: 3,
|
||||
span: 24,
|
||||
order: 260,
|
||||
hide: true,
|
||||
labelWidth: '0px',
|
||||
className: 'business-crud-page__full-form-item',
|
||||
},
|
||||
])
|
||||
),
|
||||
dialogWidth: '96%',
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user