diff --git a/AGENTS.md b/AGENTS.md
index a200e7f..3b6157b 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -167,7 +167,7 @@ Avue 表格/表单配置独立存放于 `src/option/` 目录,与 `views` 和 `
- 搜索组件需展示轻量阴影,统一使用 `0 2px 8px rgba(0, 0, 0, 0.06)`,不得被局部卡片去样式规则覆盖。
- 表格线条颜色需统一使用 `#EFF1F7`,包括表格外边框、单元格分割线和固定列边线。
- 表格偶数行需统一使用 `#FAFAFA` 背景色,固定列单元格必须与对应行背景保持一致。
-- 表格操作列同时展示“查看、编辑、删除”等三个按钮时,操作列宽度统一不小于 `220px`,禁止出现按钮裁切或显示不全。
+- 表格操作列同时展示“查看、编辑、删除”等三个按钮时,操作列宽度统一不小于 `220px`;操作列最大按钮数量超过 3 个时,操作列宽度统一加宽到不小于 `320px`;最大按钮数量超过 4 个时,仍按 `320px` 保持列宽,并从第 5 个按钮开始换行展示,禁止出现按钮裁切或显示不全。
- 表格操作列按钮统一仅展示文字,禁止配置 `icon` / `:icon` 或在操作按钮、操作下拉项中嵌入图标;顶部工具栏按钮不受此条限制。
- `.avue-crud__header` 顶部间距统一为 `12px`。
- 分页组件整体靠右展示,必须展示接口返回的数据总条数,`X条/页` 的页容量选择器必须放在总条数右侧。
diff --git a/src/api/business/project-apply.js b/src/api/business/project-apply.js
index 6d8224c..a08c3ea 100644
--- a/src/api/business/project-apply.js
+++ b/src/api/business/project-apply.js
@@ -51,6 +51,20 @@ export const voidProject = (id, reason) =>
params: { id, reason },
});
+export const saveChange = row =>
+ request({
+ url: `${baseUrl}/save-change`,
+ method: 'post',
+ data: row,
+ });
+
+export const submitChange = row =>
+ request({
+ url: `${baseUrl}/submit-change`,
+ method: 'post',
+ data: row,
+ });
+
export const startChange = (id, reason) =>
request({
url: `${baseUrl}/start-change`,
diff --git a/src/api/business/waybill-manage.js b/src/api/business/waybill-manage.js
index 64ed50e..f762bae 100644
--- a/src/api/business/waybill-manage.js
+++ b/src/api/business/waybill-manage.js
@@ -1,6 +1,8 @@
+import request from '@/axios';
import { createCrudApi } from './common';
-const api = createCrudApi('/blade-transport/waybill-manage');
+const baseUrl = '/blade-transport/waybill-manage';
+const api = createCrudApi(baseUrl);
export const getList = api.getList;
export const getDetail = api.getDetail;
@@ -11,3 +13,11 @@ export const cancel = api.cancel;
export const reassign = api.reassign;
export const complete = api.complete;
export const batchComplete = api.batchComplete;
+export const roadLoading = ids =>
+ request({
+ url: `${baseUrl}/road-loading`,
+ method: 'post',
+ params: {
+ ids,
+ },
+ });
diff --git a/src/api/transportCapacity/driver.js b/src/api/transportCapacity/driver.js
index 16597ae..f3962af 100644
--- a/src/api/transportCapacity/driver.js
+++ b/src/api/transportCapacity/driver.js
@@ -58,3 +58,23 @@ export const getExpiryStat = params => {
params,
});
};
+
+export const recognitionIDCard = url => {
+ return request({
+ url: '/blade-file/file/recognitionIDCard',
+ method: 'get',
+ timeout: 60000,
+ params: {
+ url,
+ },
+ });
+};
+
+export const recognitionTransportCertificates = objectKeys => {
+ return request({
+ url: '/blade-file/file/recognitionTransportCertificates',
+ method: 'post',
+ timeout: 60000,
+ data: objectKeys,
+ });
+};
diff --git a/src/api/transportCapacity/transport-vehicle.js b/src/api/transportCapacity/transport-vehicle.js
index 573d67d..8c8b741 100644
--- a/src/api/transportCapacity/transport-vehicle.js
+++ b/src/api/transportCapacity/transport-vehicle.js
@@ -58,3 +58,12 @@ export const getExpiryStat = params => {
params,
});
};
+
+export const recognitionTransportCertificates = objectKeys => {
+ return request({
+ url: '/blade-file/file/recognitionTransportCertificates',
+ method: 'post',
+ timeout: 60000,
+ data: objectKeys,
+ });
+};
diff --git a/src/components/image-upload-field/main.vue b/src/components/image-upload-field/main.vue
index 608fb83..802c128 100644
--- a/src/components/image-upload-field/main.vue
+++ b/src/components/image-upload-field/main.vue
@@ -4,11 +4,13 @@
:class="[`${classPrefix}-uploader`, { [`${classPrefix}-uploader--large`]: large }]"
action="/api/blade-resource/oss/endpoint/put-file"
name="file"
- :headers="headers"
+ :headers="uploadHeaders"
:show-file-list="false"
:disabled="readonly"
:before-upload="beforeUpload"
+ :on-progress="handleProgress"
:on-success="handleSuccess"
+ :on-error="handleError"
>
{{ emptyText }}
@@ -24,11 +26,13 @@
:class="`${classPrefix}-upload-card__uploader`"
action="/api/blade-resource/oss/endpoint/put-file"
name="file"
- :headers="headers"
+ :headers="uploadHeaders"
:show-file-list="false"
:disabled="readonly"
:before-upload="beforeUpload"
+ :on-progress="handleProgress"
:on-success="handleSuccess"
+ :on-error="handleError"
>
{{ emptyText }}
@@ -38,6 +42,9 @@
+
+
diff --git a/src/views/business/components/business-crud-page.vue b/src/views/business/components/business-crud-page.vue
index 625b886..985dac2 100644
--- a/src/views/business/components/business-crud-page.vue
+++ b/src/views/business/components/business-crud-page.vue
@@ -27,7 +27,7 @@
plain
v-if="canCreate"
@click="$refs.crud.rowAdd()"
- >新增
+ >{{ config.createText || '新增' }}
批量导入
+ >{{ config.importText || '批量导入' }}
批量完成
+ {{ config.roadLoadingText || '公路配载' }}
+
批量删除
-
@@ -99,6 +101,746 @@
+
+ 基本信息
+
+
+ 合同类型
+
+
+ visible && loadProjectOptions()"
+ @change="handleProjectChange"
+ >
+
+
+
+
+
+ visible && loadContractOptionsForProject()"
+ @change="handleContractChange"
+ >
+
+
+
+
+
+
+ 收发货信息
+
+ 选择线路
+
+
+
+
+
+
+
+
+
+
+
+ 联系人
+
+ 联系方式
+
+
+
+
+
+
+
+
+
+
+
+ 联系人
+
+ 联系方式
+
+
+
+
+
+
+
货物信息
+
+ 导入货物
+ 常用货物
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 货物类型
+
+
+ visible && ensureBillingCargoTypeOptions()"
+ @change="value => handleTransportCargoTypeChange(row, value)"
+ />
+
+
+
+
+ handleTransportCargoQuantityInput(row, value)"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新增
+
+
+ 删除
+
+
+
+
+
+ 运输数量合计:{{ transportCargoQuantityTotal }}
+
+
+
+
+
+ visible && loadOrganizationOptions()"
+ @change="handleOrganizationChange"
+ />
+
+
+
+ handleAmountInput('applyLimit', value)"
+ />
+
+
+
+
+
+ 至
+
+
+
+
+
+
+ handleIntegerInput('copyCount', value)"
+ />
+ 份
+
+
+
+
+
+ handleIntegerInput('paymentDays', value)"
+ />
+ 天
+
+
+
+
+ 合同文件
+
+
+
+
+
+
+
+
+
+
+ {{ row.originalName || row.name }}
+
+
+ {{ formatFileSize(row.size) }}
+
+
+
+
+
+
+ 删除
+
+
+ 下载
+
+
+
+
+
+
+
+
+ 计费信息
+
+
+
+
+
+
+ 自动生成费用明细
+
+ 开启
+ 关闭
+
+
+
+ 添加
+
+
+
+
+
+
+ {{ row.defaultPlan ? '是' : '' }}
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+ 结算生成规则
+
+
+
+
+
+ 自动生成结算单
+
+ 开启
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 对账配置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ config.attachmentTitle || '其它附件' }}
+
+
+
+
+
+
+
+ 批量下载
+
+
+
+
+
+ {{ row.originalName || row.name }}
+
+
+
+
+
+
+
+ {{ formatFileSize(row.size) }}
+
+
+
+
+
+
+ 删除
+
+
+ 下载
+
+
+
+
+
+
+
+
+ 变更记录
+
+
+
+
+
+
+
+
+
+
+
+
+ 流程
+
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+ 关闭
+
+
+ 暂存
+
+
+ 确认创建
+
+
+
+
+ 保存
+
+
+ 提交临时合同
+
+
+ 提交正式合同
+
+
+
+
{{ displayStatus(row, 'contractStage') }}
@@ -106,52 +848,80 @@
-
- 查看
-
-
- 编辑
-
-
- 复制
-
-
- 启用
-
-
- 停用
-
-
- 重新派单
-
-
- 取消
-
-
- 完成
-
-
- {{ operation.label }}
-
-
- 删除
-
+
+
+ {{ action.label }}
+
+
+
+
+ 查看
+
+
+ 编辑
+
+
+ 复制
+
+
+ 启用
+
+
+ 停用
+
+
+ 重新派单
+
+
+ 取消
+
+
+ 完成
+
+
+ {{ operation.label }}
+
+
+ 删除
+
+
@@ -162,6 +932,841 @@
@load="onLoad(page, query)"
/>
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+ 默认方案
+
+
+
+
+
+
+
+
+
+
+ +添加规则
+
+
+
+
+
+
+
+ 费用类型
+
+
+ handleBillingFeeTypeChange(row, value)"
+ >
+
+
+
+
+
+
+ 费用项
+
+
+
+
+
+
+
+
+
+ 计费要素
+
+
+
+
+
+
+
+
+
+ 计费类型
+
+
+
+
+
+
+
+
+
+ 计费单位
+
+
+
+
+
+
+
+
+
+ 单价(元)
+
+
+ handleBillingDecimalInput(row, 'unitPrice', value)"
+ />
+
+
+
+
+
+ handleBillingLimitInput(row, rangeIndex, 'lowerLimit', value)"
+ />
+
+
+
+
+
+
+
+ handleBillingLimitInput(row, rangeIndex, 'upperLimit', value)"
+ />
+
+ 添加
+
+
+ 删除
+
+
+
+
+
+
+
+ handleBillingDecimalInput(row, 'minimumBillingWeight', value)"
+ />
+
+
+
+
+
+
+
+
+
+
+ 设置匹配条件
+
+
+ 复制
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ visible && ensureBillingMatchRegionOptions()"
+ @change="value => handleBillingMatchRegionChange('origin', value)"
+ />
+
+
+
+
+ visible && ensureBillingMatchRegionOptions()"
+ @change="value => handleBillingMatchRegionChange('destination', value)"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+ visible && ensureBillingCargoTypeOptions()"
+ @change="handleBillingMatchCargoTypeChange"
+ />
+
+
+
+
+
+ 取消
+
+ 保存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+ {{ transportMapStatus }}
+ 行政区划:{{ transportMapSelected.regionName }}
+
+
+ 取消
+
+ 确定
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ visible && ensureBillingCargoTypeOptions()"
+ @change="handleCommonCargoTypeChange"
+ />
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+ 将 Excel 文件拖到此处,或点击上传
+
+
+ 按货物信息表头读取:货物名称、货物类型、数量、数量单位、包装、品牌、规格、型号、物料编码、设备编码、备注
+
+
+
+
+ 关闭
+
+
+
@@ -176,13 +1781,112 @@