1、完善发货模板

2、完善运输计划
3、完善运单管理
This commit is contained in:
2026-08-05 15:52:24 +08:00
parent e683c2cc00
commit 433c611195
72 changed files with 7556 additions and 772 deletions

View File

@@ -219,7 +219,8 @@ export const option = createCrudOption([
type: 'select',
search: true,
searchOrder: 1,
span: 24,
span: 6,
row: true,
order: 190,
dicData: signTypeOptions,
minWidth: 120,

View File

@@ -0,0 +1,36 @@
import { dataSourceOptions } from './common';
export const transportTypeDict = {
dicUrl: '/blade-system/dict-biz/dictionary?code=transport_type',
props: {
label: 'dictValue',
value: 'dictKey',
},
};
export const carrierTypeOptions = ['承运商', '自运', '网签平台'];
export const loadingStatusOptions = [
{ label: '草稿', value: 'draft' },
{ label: '待执行', value: 'pending' },
{ label: '进行中', value: 'running' },
{ label: '已完成', value: 'completed' },
{ label: '已取消', value: 'cancelled' },
];
export const loadingStatusMap = loadingStatusOptions.reduce((result, item) => {
result[item.value] = item.label;
return result;
}, {});
export const loadingManageConfig = {
title: '配载管理',
permission: 'loading_manage',
exportUrl: '/blade-transport/loading-manage/export-loading-manage',
exportName: '配载管理',
createText: '新建配载',
batchCompleteText: '批量完成',
statusProp: 'businessStatus',
statusTextProp: 'businessStatusName',
dataSourceOptions,
};

View File

@@ -1,11 +1,9 @@
import {
auditColumns,
createCrudOption,
templateTypeOptions,
transportTypeOptions,
selectRule,
textRule,
} from './common';
import { auditColumns, createCrudOption, selectRule, textRule, transportTypeOptions } from './common';
const templateTypeOptions = [
{ label: '运输计划', value: '运输计划' },
{ label: '运单', value: '运单' },
];
export const config = {
title: '发货模板',
@@ -13,155 +11,203 @@ export const config = {
exportUrl: '/blade-transport/shipping-template/export-shipping-template',
exportName: '发货模板',
enableAllDept: false,
enableProjectSelect: true,
enableAttachmentTable: true,
enableTransportPlanForm: true,
enableTemplateCodePreview: true,
attachmentTitle: '附件',
defaultForm: {
templateType: '运输计划',
},
transportFormRequiredFields: [
['projectName', '项目'],
['contractName', '客户合同'],
['transportType', '运输方式'],
['departureAddress', '发货地址'],
['arrivalAddress', '收货地址'],
],
actions: ['copy'],
operations: [
{
action: 'createFromTemplate',
label: '从模板新建',
permission: 'shipping_template_add',
},
],
};
export const option = createCrudOption([
{
label: '模板编号',
prop: 'templateCode',
search: true,
minWidth: 150,
addDisplay: false,
editDisabled: true,
},
{
label: '模板名称',
prop: 'templateName',
search: true,
minWidth: 150,
rules: textRule('模板名称', 50, true),
},
{
label: '模板类型',
prop: 'templateType',
type: 'select',
search: true,
dicData: templateTypeOptions,
minWidth: 120,
value: '运输计划',
rules: selectRule('模板类型'),
},
{
label: '项目',
prop: 'projectName',
search: true,
minWidth: 150,
rules: textRule('项目', 100, true),
},
{
label: '项目ID',
prop: 'projectId',
hide: true,
},
{
label: '客户合同',
prop: 'contractName',
minWidth: 160,
rules: textRule('客户合同', 100, true),
},
{
label: '客户合同ID',
prop: 'contractId',
hide: true,
},
{
label: '运输类型',
prop: 'transportType',
type: 'select',
dicData: transportTypeOptions,
minWidth: 130,
rules: selectRule('运输类型'),
},
{
label: '发货地',
prop: 'departureName',
minWidth: 140,
rules: textRule('发货地', 100, true),
},
{
label: '发货地址',
prop: 'departureAddress',
minWidth: 220,
rules: textRule('发货地址', 255, true),
},
{
label: '发货联系人',
prop: 'departureContact',
minWidth: 120,
rules: textRule('发货联系人', 20),
},
{
label: '发货联系方式',
prop: 'departurePhone',
minWidth: 140,
rules: textRule('发货联系方式', 20),
},
{
label: '收货地',
prop: 'arrivalName',
minWidth: 140,
rules: textRule('收货地', 100, true),
},
{
label: '收货地址',
prop: 'arrivalAddress',
minWidth: 220,
rules: textRule('收货地址', 255, true),
},
{
label: '收货联系人',
prop: 'arrivalContact',
minWidth: 120,
rules: textRule('收货联系人', 20),
},
{
label: '收货联系方式',
prop: 'arrivalPhone',
minWidth: 140,
rules: textRule('收货联系方式', 20),
},
{
label: '货物信息JSON',
prop: 'goodsJson',
type: 'textarea',
minRows: 5,
span: 24,
hide: true,
},
{
label: '运费信息JSON',
prop: 'freightJson',
type: 'textarea',
minRows: 4,
span: 24,
hide: true,
},
{
label: '附件JSON',
prop: 'attachmentsJson',
type: 'textarea',
minRows: 3,
span: 24,
hide: true,
},
{
label: '所属组织',
prop: 'deptName',
minWidth: 150,
addDisplay: false,
editDisplay: false,
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
span: 24,
hide: true,
maxlength: 200,
showWordLimit: true,
rules: textRule('备注', 200),
},
...auditColumns,
]);
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: 8,
order: 390,
minWidth: 170,
disabled: true,
placeholder: '系统自动生成',
},
{
label: '模板名称',
prop: 'templateName',
search: true,
searchOrder: 3,
span: 8,
order: 380,
minWidth: 150,
rules: textRule('模板名称', 50, true),
},
{
label: '模板类型',
prop: 'templateType',
type: 'select',
search: true,
searchOrder: 2,
span: 8,
order: 370,
dicData: templateTypeOptions,
minWidth: 120,
rules: selectRule('模板类型'),
},
{
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 3,
span: 24,
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: 8,
order: 340,
minWidth: 150,
rules: textRule('项目', 100, true),
},
{
label: '客户合同',
prop: 'contractName',
formslot: true,
span: 8,
order: 330,
minWidth: 160,
rules: textRule('客户合同', 100, true),
},
{
label: '运输方式',
prop: 'transportType',
type: 'select',
span: 8,
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: '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,
]),
dialogWidth: '96%',
};

View File

@@ -116,9 +116,13 @@ export const config = {
exportName: '运输计划',
enableAllDept: false,
enableProjectSelect: true,
templateCreateTarget: 'transport-plan',
enableAttachmentTable: true,
enableTransportPlanForm: true,
enableTransportPlanCreateActions: true,
enableTransportPlanImport: true,
transportPlanImportTitle: '导入发货计划',
transportPlanTemplateUrl: '/blade-transport/transport-plan/export-template',
attachmentTitle: '附件',
searchRangeMap: {
planStartDateRange: ['planStartDateStart', 'planStartDateEnd'],
@@ -129,6 +133,55 @@ export const config = {
statusTextProp: 'businessStatusName',
deleteStatus: ['draft'],
editStatus: ['draft', 'waiting_dispatch'],
detailButton: true,
detailSections: [
{
title: '基本信息',
fields: [
['planNo', '计划单号'],
['planName', '计划名称'],
['projectName', '项目名称'],
['customerName', '客户名称'],
['transportType', '运输方式'],
['businessStatus', '调度状态'],
['planStartDate', '计划开始日期'],
['planEndDate', '计划结束日期'],
['dataSource', '数据来源'],
],
},
{
title: '收发货信息',
fields: [
['departureName', '发货地'],
['departureAddress', '发货地址', 2],
['departureContact', '发货联系人'],
['departurePhone', '发货联系方式'],
['arrivalName', '收货地'],
['arrivalAddress', '到货地址', 2],
['arrivalContact', '收货联系人'],
['arrivalPhone', '收货联系方式'],
],
},
{
title: '其它信息',
fields: [
['remark', '备注', 2],
['updateUserName', '更新人'],
['updateTime', '更新时间'],
['createTime', '创建时间'],
],
},
],
operations: [
{
action: 'dispatch',
label: '调度',
statusProp: 'businessStatus',
status: ['waiting_dispatch'],
permission: 'transport_plan_edit',
confirm: '确定调度该运输计划?',
},
],
};
export const option = {

View File

@@ -2,6 +2,7 @@ import {
auditColumns,
createCrudOption,
dataSourceOptions,
phoneRule,
selectRule,
textRule,
waybillStatusOptions,
@@ -96,9 +97,17 @@ export const config = {
exportName: '运单管理',
importUrl: '/blade-transport/waybill-manage/import-waybill-manage',
enableAllDept: false,
enableProjectSelect: true,
templateCreateTarget: 'waybill-manage',
enableContractSelect: true,
enableShippingPlanSelect: true,
enableShippingInfoForm: true,
enableTaskInfoForm: true,
batchDelete: false,
actionButtonLikeSearch: true,
createText: '新建运单',
importText: '导入运单',
enableWaybillImport: true,
roadLoading: true,
roadLoadingText: '公路配载',
searchRangeMap: {
@@ -115,6 +124,15 @@ export const config = {
export const option = {
...createCrudOption([
{
label: '',
prop: 'basicInfoTitle',
formslot: true,
span: 24,
order: 900,
hide: true,
labelWidth: 0,
},
{
label: '运单号',
prop: 'waybillNo',
@@ -129,6 +147,8 @@ export const option = {
prop: 'loadingNo',
search: true,
searchOrder: 5,
span: 6,
order: 840,
minWidth: 140,
},
{
@@ -137,13 +157,18 @@ export const option = {
search: true,
searchLabel: '多联总单',
searchOrder: 6,
span: 6,
order: 830,
minWidth: 140,
},
{
label: '项目名称',
label: '项目',
prop: 'projectName',
formslot: true,
search: true,
searchOrder: 22,
span: 6,
order: 890,
minWidth: 150,
rules: textRule('项目', 100, true),
},
@@ -154,6 +179,10 @@ export const option = {
searchLabel: '客户名称',
searchOrder: 21,
minWidth: 150,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
label: '车牌号/航班号/船号/班列号',
@@ -162,6 +191,7 @@ export const option = {
searchLabel: '车/船/航班/班列',
searchOrder: 13,
minWidth: 210,
display: false,
},
{
label: '司机',
@@ -170,6 +200,7 @@ export const option = {
searchLabel: '司机名称',
searchOrder: 14,
minWidth: 120,
display: false,
},
{
label: '联系方式',
@@ -179,6 +210,7 @@ export const option = {
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
label: '运输方式',
@@ -199,6 +231,8 @@ export const option = {
type: 'select',
search: true,
searchOrder: 20,
span: 6,
order: 850,
...transportTypeDict,
minWidth: 130,
rules: selectRule('运输类型'),
@@ -207,6 +241,10 @@ export const option = {
label: '过程节点',
prop: 'currentProcessNode',
minWidth: 140,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
label: '承运类型',
@@ -216,6 +254,7 @@ export const option = {
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
label: '承运商',
@@ -224,6 +263,7 @@ export const option = {
searchLabel: '承运商名称',
searchOrder: 15,
minWidth: 150,
display: false,
},
{
label: '货物信息',
@@ -238,17 +278,23 @@ export const option = {
{
label: '发货地址',
prop: 'departureAddress',
formslot: true,
search: true,
searchOrder: 17,
span: 24,
order: 790,
minWidth: 220,
rules: textRule('发货地址', 255, true),
},
{
label: '到货地址',
prop: 'arrivalAddress',
formslot: true,
search: true,
searchLabel: '收货地址',
searchOrder: 16,
span: 24,
order: 780,
minWidth: 220,
rules: textRule('收货地址', 255, true),
},
@@ -307,14 +353,20 @@ export const option = {
{
label: '客户合同',
prop: 'contractName',
formslot: true,
span: 6,
order: 880,
minWidth: 160,
rules: textRule('客户合同', 100, true),
},
{
label: '计划名称',
label: '发货计划',
prop: 'planName',
formslot: true,
search: true,
searchOrder: 7,
span: 6,
order: 870,
minWidth: 150,
},
{
@@ -324,6 +376,7 @@ export const option = {
searchOrder: 18,
formatter: row => formatGoodsField(row, ['cargoType', 'goodsType', 'typeName']),
minWidth: 130,
display: false,
rules: textRule('货物类型', 100, true),
},
{
@@ -333,6 +386,7 @@ export const option = {
searchOrder: 19,
formatter: row => formatGoodsField(row, ['cargoName', 'goodsName', 'name']),
minWidth: 150,
display: false,
rules: textRule('货物名称', 100, true),
},
{
@@ -356,6 +410,8 @@ export const option = {
prop: 'originalNo',
search: true,
searchOrder: 12,
span: 6,
order: 860,
minWidth: 140,
},
{
@@ -365,30 +421,36 @@ export const option = {
searchLabel: '运输批次',
searchOrder: 3,
minWidth: 140,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
label: '预计发货时间',
label: '预计发货日期',
prop: 'estimatedStartTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
formatter: row => getFirstValue(row, ['estimatedStartTime', 'planStartDate']),
minWidth: 170,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
label: '预计完成时间',
label: '预计完成日期',
prop: 'estimatedEndTime',
type: 'datetime',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'date',
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
formatter: row => getFirstValue(row, ['estimatedEndTime', 'planEndDate']),
minWidth: 170,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
label: '备注',
@@ -396,11 +458,12 @@ export const option = {
type: 'textarea',
minRows: 4,
span: 24,
order: 810,
minWidth: 180,
overHidden: true,
maxlength: 500,
maxlength: 200,
showWordLimit: true,
rules: textRule('备注', 500),
rules: textRule('备注', 200),
},
{
label: '数据来源',
@@ -410,6 +473,10 @@ export const option = {
searchOrder: 10,
dicData: dataSourceOptions,
minWidth: 120,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
...auditColumn('createTime'),
@@ -431,6 +498,34 @@ export const option = {
addDisplay: false,
editDisplay: false,
},
{
label: '',
prop: 'shippingInfoTitle',
formslot: true,
span: 24,
order: 800,
hide: true,
labelWidth: 0,
},
{
label: '',
prop: 'taskInfoTitle',
formslot: true,
span: 24,
order: 770,
hide: true,
labelWidth: 0,
},
{
label: '',
prop: 'taskInfoForm',
formslot: true,
span: 24,
order: 760,
hide: true,
labelWidth: '0px',
className: 'business-crud-page__full-form-item',
},
{
label: '实际发货时间',
prop: 'startDateRange',
@@ -444,6 +539,7 @@ export const option = {
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
label: '实际完成时间',
@@ -458,6 +554,7 @@ export const option = {
addDisplay: false,
editDisplay: false,
viewDisplay: false,
display: false,
},
{
label: '创建时间',
@@ -478,51 +575,70 @@ export const option = {
prop: 'relationNo',
search: true,
searchOrder: 2,
span: 6,
order: 820,
minWidth: 140,
hide: true,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '货物信息JSON',
label: '货物信息',
prop: 'goodsJson',
type: 'textarea',
minRows: 5,
span: 24,
hide: true,
display: false,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '承运信息JSON',
label: '承运信息',
prop: 'carrierJson',
type: 'textarea',
minRows: 4,
span: 24,
hide: true,
display: false,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '过程配置JSON',
label: '过程配置',
prop: 'processJson',
type: 'textarea',
minRows: 4,
span: 24,
hide: true,
display: false,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '运费信息JSON',
label: '运费信息',
prop: 'freightJson',
type: 'textarea',
minRows: 4,
span: 24,
hide: true,
display: false,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '附件JSON',
label: '附件',
prop: 'attachmentsJson',
type: 'textarea',
minRows: 3,
span: 24,
hide: true,
display: false,
addDisplay: false,
editDisplay: false,
viewDisplay: false,
},
{
label: '所属组织',
@@ -532,6 +648,36 @@ export const option = {
addDisplay: false,
editDisplay: 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: 'departurePhone',
hide: true,
display: false,
rules: [phoneRule('发货联系方式'), ...textRule('发货联系方式', 50)],
},
{
label: '收货联系方式',
prop: 'arrivalPhone',
hide: true,
display: false,
rules: [phoneRule('收货联系方式'), ...textRule('收货联系方式', 50)],
},
{
label: '项目ID',
prop: 'projectId',
@@ -544,6 +690,33 @@ export const option = {
hide: true,
display: false,
},
{
label: '发货计划ID',
prop: 'planId',
hide: true,
display: false,
},
{
label: '任务录入模式',
prop: 'taskEntryMode',
hide: true,
display: false,
value: 'simple',
},
{
label: '任务备注',
prop: 'taskRemark',
hide: true,
display: false,
},
{
label: '任务信息',
prop: 'taskInfoJson',
hide: true,
display: false,
},
]),
dialogWidth: '96%',
dialogTop: '10px',
menuWidth: 320,
};

View File

@@ -9,12 +9,14 @@ export const option = {
searchMenuPosition: 'right',
border: true,
index: true,
indexLabel: '序号',
indexWidth: 70,
selection: true,
addBtn: false,
editBtn: false,
delBtn: false,
viewBtn: false,
menuWidth: 160,
menuWidth: 220,
dialogClickModal: false,
column: [
{
@@ -23,14 +25,14 @@ export const option = {
search: true,
searchOrder: 7,
slot: true,
width: 110,
minWidth: 120,
},
{
label: '手机号',
prop: 'mobile',
search: true,
searchOrder: 6,
width: 130,
minWidth: 130,
},
{
label: '准驾车型',
@@ -69,7 +71,7 @@ export const option = {
value: 'C2',
},
],
width: 110,
minWidth: 110,
},
{
label: '状态',
@@ -107,7 +109,7 @@ export const option = {
value: '外协',
},
],
width: 100,
minWidth: 110,
align: 'center',
},
{
@@ -115,7 +117,7 @@ export const option = {
prop: 'idCardNo',
search: true,
searchOrder: 2,
width: 190,
minWidth: 190,
},
{
label: '所属组织',
@@ -125,7 +127,7 @@ export const option = {
type: 'select',
filterable: true,
dicData: [],
width: 140,
minWidth: 160,
},
{
label: '性别',
@@ -136,20 +138,20 @@ export const option = {
{
label: '岗位',
prop: 'posts',
width: 150,
minWidth: 150,
},
{
label: '驾驶认证',
prop: 'drivingLicenseEndDate',
slot: true,
width: 130,
minWidth: 140,
align: 'center',
},
{
label: '从业资格认证',
prop: 'qualificationEndDate',
slot: true,
width: 140,
minWidth: 150,
align: 'center',
},
],