Merge remote-tracking branch 'websoft/master'

# Conflicts:
#	src/views/settlement/transport-reconciliation.vue
This commit is contained in:
2026-08-21 00:18:28 +08:00
36 changed files with 517 additions and 336 deletions
+12
View File
@@ -110,3 +110,15 @@
- 改动:
1. `src/option/business/contract-manage.js`:该文件 option 在 `createCrudOption([...])` 之后本就用 `option.xxx = ...` 顶层赋值(span/dialogWidth/dialogTop 等),故在末尾追加 `option.dialogCustomClass = 'contract-manage-dialog';`(无需改结构,与文件既有写法一致)。
2. `src/styles/element-ui.scss`:新增 `.contract-manage-dialog` 四条规则,复刻 waybill-manage 方案——`height/max-height: calc(100vh - 40px) !important` 压过库内置 `.avue-dialog` 的 200px 上限;`.el-dialog__header { flex:none }``.el-dialog__body { flex:1 1 auto; min-height:0; max-height:none !important; overflow-y:auto }` 解开全局 avue-crud 200px body 限制;`.avue-dialog__footer { position:sticky; bottom:0; margin-top:0 !important; background:#fff }` 抵消全局 footer 的 -30px 上移。
## loading-manage 线路编辑「起/经/终」圆点分色
- 需求:用户反馈 `/business/loading-manage` 弹窗中"线路编辑"区域的「起/经/终」圆形徽标要区分颜色:起蓝、经橙、终绿。
- 改文件:`src/views/business/loading-manage.vue`
- 涉及两处:① 主弹窗 `loading-manage-dialog__route-type`;② 变更运输路线弹窗 `loading-route-change-dialog__route-type`(保持全站一致)。
- 实现方式(最小侵入、不破坏现有结构):
1. methods 各加一个 `routeTypeClass(index)` / `routeChangeTypeClass(index)`,返回 `'start' | 'middle' | 'end'`
2. 模板里 span 改用 `:class="['...route-type', '...route-type--' + ${xxxClass(index)}]"` 动态 class。
3. scoped 样式 `__route-type` 规则去掉硬编码 `background`,改用 `&--start/#409eff` + `&--middle/#e6a23c` + `&--end/#67c23a` 三个 modifier(颜色取 Element Plus 语义色:蓝主色 / 橙 warning / 绿 success),`color: #fff` 保留。
- 关键 trick:变更弹窗原 `route-type` 样式是单行压缩写法,本次顺手把它多行化(保持其他子规则不变),以便嵌套 `&--xxx` 修饰符。
- dev server(2889) HMR 自动生效,刷新后开新增/编辑弹窗向下滚到"线路编辑"分组即可见。
+141
View File
@@ -0,0 +1,141 @@
# 2026-08-20 工作日志
## 保险 OCR 识别模板弹窗列宽调整
- 调整文件:`src/views/base/insurance-ocr-template.vue`
- 修改内容:字段映射表格中,键名列由 `min-width="240"` 改为 `width="120" align="center"`;自定义映射值列由 `min-width="500"` 改为 `width="360"`
- 原因:原列宽导致表格总宽度超出 860px 弹窗 body 可用区域,输入框右侧字数统计(0/100)被截断看不全。
## 保险 OCR 识别模板弹窗卡片化
- 调整文件:`src/views/base/insurance-ocr-template.vue`
- 修改内容:将弹窗内表单的白色背景 `div` 替换为全局 `<section-card title="模板信息">` 组件,形成白底圆角卡片;同时为自定义映射值列保留 `width="360"`,避免在卡片内被撑开。
- 原因:用户希望弹窗表单区域呈现卡片效果,与项目统一的 `section-card` 分组风格一致。
## 运输计划调度弹窗表头背景色调整
- 调整文件:`src/views/business/components/business-crud-page.vue`
- 修改内容:在“计划调度”弹窗的待调度列表 `el-table` 上增加 `:header-cell-style="{ background: '#fafafa' }"`,将表头背景由白色改为浅灰。
- 原因:用户反馈 `/business/transport-plan` 页面白色表头需统一改为灰色 `#fafafa`
## 运单管理货物信息表头背景色调整
- 调整文件:`src/views/business/components/business-crud-page.vue`
- 修改内容:在 `goodsJson-form` 货物信息表格上增加 `:header-cell-style="{ background: '#fafafa' }"`,表头背景改为浅灰。
- 原因:用户反馈 `/business/waybill-manage` 页面货物信息表头需统一改为灰色 `#fafafa`
## 全站 el-table 表头背景色统一
- 调整文件:`src/styles/element-ui.scss`(修改原仅限 `.avue-crud` 的表头规则)
- 修改内容:将表头背景规则扩展为全站 `.el-table` 表头(含普通表格、avue-crud、固定列),统一 `background-color: #fafafa !important`
- 连带清理:移除 `business-crud-page.vue` 中两处冗余的 `:header-cell-style="{ background: '#fafafa' }"`(调度表、货物表),改由全局规则兜底。
- 影响:`/business/loading-manage``/business/waybill-manage``/business/transport-plan` 以及全站所有白色 el-table 表头均统一为 `#fafafa``!important` 同时覆盖了部分组件内 scoped 设定的 `#f5f7fa` 表头背景。
## 应收明细调整费用弹窗按钮间距
- 调整文件:`src/views/settlement/receivable-payable-detail.vue`
- 修改内容:为“调整费用”弹窗内的 `.settlement-detail-page__adjust-toolbar` 增加 `margin-bottom: 16px`,让“新增费用项”按钮与下方表格拉开间距。
- 原因:用户反馈 `/settlement/receivable-detail` 页面调整费用弹窗中“新增费用项”按钮与表格贴得太近。
## 应收明细生成费用弹窗搜索区域加白底
- 调整文件:`src/views/settlement/receivable-payable-detail.vue`
- 修改内容:为“生成费用”弹窗内的搜索 `el-form` 增加 class `settlement-detail-page__generate-search`,设置白底、圆角 6px、轻阴影,并与下方表格保留 16px 间距。
- 原因:用户反馈 `/settlement/receivable-detail` 页面生成费用弹窗中搜索区域缺少白底卡片效果。
## 应收明细更新费用弹窗表单加白底
- 调整文件:`src/views/settlement/receivable-payable-detail.vue`
- 修改内容:为“更新费用”弹窗的 `.settlement-detail-page__dialog-form` 增加白底、圆角 6px、轻阴影;将 padding 由 `16px 20px 0` 改为 `16px 20px`,并去掉最后一个表单项的底部外边距。
- 原因:用户反馈 `/settlement/receivable-detail` 页面更新费用弹窗中表单区域缺少白底卡片效果。
## 应收明细批量转结算弹窗搜索区域加白底
- 调整文件:`src/views/settlement/receivable-payable-detail.vue`
- 修改内容:为“批量转结算”弹窗的 `.settlement-detail-page__transfer-form` 搜索区域增加白底、圆角 6px、轻阴影,并保留与下方表格 16px 间距。
- 原因:用户反馈 `/settlement/receivable-detail` 页面批量转结算弹窗中搜索区域缺少白底卡片效果。
## 预结算单编辑弹窗改白底卡片分组
- 调整文件:`src/views/settlement/components/pre-settlement-editor.vue`
- 修改内容:将“新增/编辑预结算单”弹窗内的全部板块由自定义 `dialog-section-title` + `<section>` 改为全局 `<section-card>` 组件,包括:结算基本信息、结算合计、结算明细、附件、预付信息(readonly)、变更记录(readonly)。结算合计/结算明细头部右侧按钮改为 section-card 的 `#extra` 插槽;删除了不再使用的 `.pre-settlement-editor__section``.pre-settlement-editor__section-head` 样式,并去掉了 `.pre-settlement-editor__form` 多余的 `margin-top`
- 间距:卡片间距沿用全局 `.section-card``margin-bottom: 12px`(符合用户要求)。候选弹窗(添加应收应付明细)的 `dialog-section-title` 保持不变。
- 原因:用户要求预结算单弹窗各板块使用白底卡片分隔,统一项目视觉规范。
## 应收明细详情弹窗 tabs 内容区背景改白
- 调整文件:`src/views/settlement/receivable-payable-detail.vue`
- 修改内容:在 scoped 样式末尾新增 `.settlement-detail-dialog` 规则块,对 `:deep(.el-tabs__content)` 设置 `background: #fff; padding: 16px; border-radius: 0 0 6px 6px;``:deep(.el-tab-pane)` 设为透明。
- 原因:全局 `.el-dialog__body { background: #f5f6fa }` 灰底透到 tabs 内容区(费用明细/变更记录),用户要求改为白色背景。
## 预结算单打印弹窗白底卡片化
- 调整文件:`src/views/settlement/pre-settlement.vue`
- 修改内容:将“打印”弹窗内的手写 `.dialog-section-title` + 普通 `el-form` 改为全局 `<section-card title="选择打印模板">` 包裹表单;为打印弹窗增加 `class="pre-settlement-print-dialog"`;删除页面底部不再使用的 `.dialog-section-title` 样式块,并去掉 `.pre-settlement-page__print-form``margin-top`
- 原因:用户要求 `/settlement/pre-settlement` 打印弹窗按项目规范使用白底卡片分组,与预结算单编辑弹窗风格统一。
## 正式结算付款申请弹窗白底卡片化
- 调整文件:`src/views/settlement/formal-settlement.vue`
- 修改内容:将“付款申请”弹窗内的普通 `el-form` 改为全局 `<section-card title="付款信息">` 包裹;为弹窗增加 `class="formal-payment-dialog"`;按全站按钮规范将“提交”按钮由 `type="primary"` 改为 `type="success"`
- 原因:用户要求 `/settlement/formal-settlement` 付款申请弹窗使用白底卡片分组,并与项目统一按钮风格对齐。
## 正式结算单编辑弹窗改白底卡片分组
- 调整文件:`src/views/settlement/components/formal-settlement-editor.vue`
- 修改内容:将“新增/编辑正式结算单”弹窗内的全部板块由 `dialog-section-title` + `<section>` 改为全局 `<section-card>` 组件,包括:结算基本信息、来源预结算单、结算明细、附件、付款信息(readonly)。“来源预结算单”头部按钮改为 section-card 的 `#extra` 插槽;删除了不再使用的 `.formal-editor__section``.formal-editor__section-head` 样式。
- 间距:沿用全局 `.section-card``margin-bottom: 12px`
- 原因:用户要求 `/settlement/formal-settlement` 页面与预结算单弹窗统一使用白底卡片分隔。
## 正式结算选择预结算单/选择结算明细弹窗搜索区白底
- 调整文件:`src/views/settlement/components/formal-settlement-editor.vue`
- 修改内容:为"选择预结算单"和"选择结算明细"两个弹窗内的搜索 `el-form` 分别增加 class `formal-editor__candidate-search` / `formal-editor__detail-search`,统一样式:白底、圆角 6px、12px 内边距、16px 底间距、轻阴影。
- 原因:用户反馈 `/settlement/formal-settlement` 页面"选择预结算单"弹窗搜索区域缺少白底卡片效果。
## 运输对账单编辑弹窗改白底卡片分组
- 调整文件:`src/views/settlement/components/transport-reconciliation-editor.vue`
- 修改内容:将"新增/编辑运输对账单"弹窗内的全部板块由 `dialog-section-title` + `<section>` 改为全局 `<section-card>` 组件,包括:导入外部账单与内部账单核对、内部账单、导入外部账单、操作说明。"导入外部账单"头部按钮改为 section-card 的 `#extra` 插槽;删除了不再使用的 `.reconciliation-editor__section``.reconciliation-editor__section-head` 样式。
- 间距:沿用全局 `.section-card``margin-bottom: 12px`
- 验证:已通过 SFC 解析与模板编译检查。
- 原因:用户要求 `/settlement/transport-reconciliation` 页面与预结算单/正式结算单弹窗统一使用白底卡片分隔。
## 结算调整单编辑弹窗改白底卡片分组
- 调整文件:`src/views/settlement/components/settlement-adjustment-editor.vue`
- 修改内容:将"新增/编辑结算调整单"弹窗内的全部板块由 `dialog-section-title` + `<section>` 改为全局 `<section-card>` 组件,包括:基本信息、调整费用。"调整费用"头部"添加费用"按钮改为 section-card 的 `#extra` 插槽;删除了不再使用的 `.settlement-adjustment-editor__section``.settlement-adjustment-editor__section-head` 以及 `.dialog-section-title` 样式块。
- 间距:沿用全局 `.section-card``margin-bottom: 12px`
- 验证:已通过 SFC 解析与模板编译检查。
- 原因:用户要求 `/settlement/settlement-adjustment` 页面与预结算单/正式结算单弹窗统一使用白底卡片分隔。
## 运单详情起终点区域改垂直时间轴(方案B)
- 调整文件:`src/views/business/components/business-crud-page.vue`
- 修改内容:在 `isWaybillDetailLayout` 区块,将 `__waybill-route` 的横向“起/终方块+横杠”改为垂直时间轴:左列两个圆点(蓝 `#409eff` / 橙 `#e6a23c`,带白圈光晕),之间用绝对定位的虚线(`repeating-linear-gradient`)连接;右列为“发货地/收货地”标签 + 地名(`-webkit-line-clamp: 2` 允许长名换行)+ 省市区地址(`el-tooltip` 悬浮显示完整地址)。
- 删除旧类:`__waybill-route-head``__waybill-route-text` 及其样式(已确认全仓无其它引用)。
- 响应式:1200px 断点下的 `grid-row:auto; grid-column: 1/-1` 规则仍生效,垂直轴在窄屏自动转为整行。
- 原因:用户认为原右上角起终点方块像按钮、地址被挤压截断、层级不清晰,选择方案B(垂直时间轴)。
## 多联总单编辑页收发货信息布局整改
- 调整文件:`src/views/business/components/master-order-editor.vue`(仅样式,逻辑未动)
- 修改内容:
1. `.route-step-icon``min-width: 32px; min-height: 32px; flex-shrink: 0;`,并给外层 `:deep(.el-step__icon)``flex-shrink: 0;` —— 修复竖向时间轴「起/经/终」节点(尤其「经」字)被压扁变形。
2. `.route-node-form` grid 由 `minmax(360px,1.8fr) minmax(200px,1fr) minmax(260px,1.2fr) minmax(260px,1.2fr)` 改为 `repeat(2, minmax(420px,1fr)) repeat(2, minmax(260px,1fr))`;新增 `:deep(.el-form-item.route-address-form-item) { grid-column: span 2; }` —— 地址项独占前两列(更宽)。
3. `.route-address-name`(行政区划 cascader)由 `flex: 0 0 140px` 加宽到 `220px` —— 完整显示「大坡服务区(梧州段)」等较长名称。
4. 响应式 `@media (max-width:1440px)``.route-node-form``repeat(2, minmax(320px,1fr))` 并同步 `.route-address-form-item { grid-column: span 2 }` —— 小屏地址项独占整行。
- 原因:客户反馈该页收发货信息中行政区划/详细地址输入框过窄导致长地址被截断,且左侧时间轴节点变形。改完用户刷新 localhost:2889 查看效果。
## master-order 弹窗搜索栏白底补齐
- `src/views/business/components/master-order-editor.vue` line 1815-1818:把 `.common-cargo-dialog__search` 单条白底规则改写为 `.common-address-dialog__search, .common-cargo-dialog__search { background: #fff }`,让"选择常用地址"弹窗的搜索栏也跟随既有白卡样式(其他 `.route-dialog__search` 默认无该 class,仍保留灰底)。
## 合同管理合同名称列左对齐修复
- 调整文件:`src/views/business/components/business-crud-page.vue``src/option/business/contract-manage.js`
- 修改内容:
1.`business-crud-page.vue``#contractName` 插槽内,用 `<div class="business-crud-page__contract-name">` 包裹 `el-link` / `span` 内容。
2.`business-crud-page.vue` 的 scoped SCSS 中新增 `.business-crud-page__contract-name { text-align: left; }`
3. 保留 `contract-manage.js``contractName` 列的 `align: 'left'` / `headerAlign: 'left'` 配置(虽然 Avue slot 列的 align 未生效,作为兜底仍保留)。
- 原因:用户反馈 `/business/contract-manage` 的合同名称列文字仍居中。Avue 自定义 slot 列的 `align` 属性似乎没有正确作用到单元格,改由插槽内容自身强制 `text-align: left` 更可靠。
- 影响:所有使用 `business-crud-page` 且渲染 `contractName` 插槽的页面,其合同名称单元格内容都会左对齐。
+1 -1
View File
@@ -164,7 +164,7 @@ Avue 表格/表单配置独立存放于 `src/option/` 目录,与 `views` 和 `
- 各页面搜索栏多行展示时,行与行之间的垂直间距统一为 `8px`
- 搜索组件 label 宽度统一不小于 `160px`label 文本不得换行。
- 搜索组件内部 padding 统一为上、左右 `12px`,底部 `4px`
- 搜索组件需展示轻量阴影,统一使用 `0 2px 8px rgba(0, 0, 0, 0.06)`,不得被局部卡片去样式规则覆盖。
- 搜索组件需展示轻量阴影,统一使用 `0 2px 8px rgba(0, 0, 0, 0.04)`,不得被局部卡片去样式规则覆盖。
- 表格线条颜色需统一使用 `#EFF1F7`,包括表格外边框、单元格分割线和固定列边线。
- 表格偶数行需统一使用 `#FAFAFA` 背景色,固定列单元格必须与对应行背景保持一致。
- 表格操作列同时展示“查看、编辑、删除”等三个按钮时,操作列宽度统一不小于 `220px`;操作列最大按钮数量超过 3 个时,操作列宽度统一加宽到不小于 `320px`;最大按钮数量超过 4 个时,仍按 `320px` 保持列宽,并从第 5 个按钮开始换行展示,禁止出现按钮裁切或显示不全。
+3 -1
View File
@@ -251,12 +251,14 @@ export const option = createCrudOption([
{
label: '合同名称',
prop: 'contractName',
align: 'left',
headerAlign: 'left',
search: true,
searchOrder: 7,
searchPlaceholder: '请输入',
order: 180,
slot: true,
minWidth: 180,
minWidth: 240,
rules: textRule('合同名称', 100, true),
},
{
+3 -3
View File
@@ -28,7 +28,7 @@ export const ocrTemplateDic = [];
export const option = {
height: 'auto',
calcHeight: 32,
dialogWidth: 1100,
dialogWidth: 1024,
labelPosition: 'right',
tip: false,
searchBtnText: '查询',
@@ -46,7 +46,7 @@ export const option = {
viewBtn: true,
selection: true,
dialogClickModal: false,
menuWidth: 180,
menuWidth: 120,
column: [
{
label: '车船类型',
@@ -97,7 +97,7 @@ export const option = {
type: 'select',
dicData: insuranceTypeDic,
search: true,
minWidth: 130,
minWidth: 120,
rules: [{ required: true, message: '请选择保险类型', trigger: 'change' }],
},
{
+7 -7
View File
@@ -100,7 +100,7 @@
.basic-container__card .avue-crud__search.el-card {
border: none;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.basic-container__card .avue-crud > .el-card > .el-card__body,
@@ -137,7 +137,7 @@
.avue-crud__search.el-card {
border: none;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.avue-crud__search.el-card > .el-card__body {
@@ -598,11 +598,11 @@
border-color: #eff1f7;
}
// 统一 avue-crud 表头背景色
.avue-crud .el-table th.el-table__cell,
.avue-crud .el-table__header-wrapper tr th.el-table-fixed-column--left,
.avue-crud .el-table__header-wrapper tr th.el-table-fixed-column--right {
background-color: #fafafa;
// 统一全站 el-table 表头背景色为浅灰 #fafafa(普通表格、avue-crud、固定列均覆盖)
.el-table .el-table__header-wrapper th.el-table__cell,
.el-table .el-table__header-wrapper tr th.el-table-fixed-column--left,
.el-table .el-table__header-wrapper tr th.el-table-fixed-column--right {
background-color: #fafafa !important;
}
// 统一 avue-crud 偶数行背景色
+1 -1
View File
@@ -26,7 +26,7 @@
}
.avue-logo {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.avue-tags {
+1 -1
View File
@@ -2,7 +2,7 @@
.avue-top, .avue-logo {
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
color: rgba(0, 0, 0, 0.85);
}
+2 -2
View File
@@ -35,7 +35,7 @@
.avue-top {
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.avue-tags {
@@ -63,7 +63,7 @@
.avue-logo {
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.avue-sidebar--tip {
+2 -2
View File
@@ -1,7 +1,7 @@
.theme-d2 {
.avue-logo {
color: rgba(0, 0, 0, 0.85);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
.avue-logo_title {
font-size: 20px;
@@ -10,7 +10,7 @@
}
.avue-top {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.avue-main {
+1 -1
View File
@@ -33,7 +33,7 @@
.avue-logo {
background-color: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
.avue-logo_title {
color: var(--el-color-primary);
+1 -1
View File
@@ -1,7 +1,7 @@
.theme-iview {
.avue-logo {
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
text-align: center;
.avue-logo_title {
+1 -1
View File
@@ -1,7 +1,7 @@
.theme-lte {
.avue-logo {
background-color: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
.avue-logo_title {
font-weight: 500;
+1 -1
View File
@@ -37,7 +37,7 @@
.avue-logo,
.tags-container {
background-color: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.avue-sidebar--tip {
+1 -1
View File
@@ -3,7 +3,7 @@
.avue-top {
position: relative;
background-color: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
color: rgba(0, 0, 0, 0.85);
font-size: 28px;
height: variables.$top_height;
+8 -3
View File
@@ -1,5 +1,5 @@
<template>
<basic-container class="insurance-ocr-template-page">
<basic-container>
<div class="insurance-ocr-template-page__toolbar">
<el-button
v-if="hasPermission('insurance_ocr_template_add')"
@@ -90,13 +90,14 @@
@closed="resetForm"
>
<el-form ref="templateForm" :model="form" :rules="rules" label-width="100px" :disabled="readonly">
<section-card title="模板信息">
<el-form-item label="模板名称" prop="name">
<el-input v-model="form.name" maxlength="100" show-word-limit />
</el-form-item>
<el-form-item label="字段映射" required>
<el-table :data="mappingRows" border class="insurance-ocr-template-page__mapping-table">
<el-table-column prop="key" label="键名" min-width="240" />
<el-table-column label="自定义映射值" min-width="500">
<el-table-column prop="key" label="键名" width="180" align="center" />
<el-table-column label="自定义映射值">
<template #default="{ row }">
<el-input
v-model="row.value"
@@ -108,7 +109,9 @@
</el-table-column>
</el-table>
</el-form-item>
</section-card>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button v-if="!readonly" type="primary" :loading="submitLoading" @click="handleSubmit">
@@ -122,6 +125,7 @@
<script>
import { mapGetters } from 'vuex';
import { getDetail, getList, remove, submit } from '@/api/base/insurance-ocr-template';
import SectionCard from '@/components/section-card/main.vue';
const insuranceFieldKeys = [
'保险类型',
@@ -152,6 +156,7 @@ const createMappingRows = mappingConfig => {
};
export default {
components: { SectionCard },
data() {
return {
loading: false,
@@ -126,6 +126,7 @@
</template>
<template #contractName="{ row }">
<div class="business-crud-page__contract-name">
<el-link
v-if="config.contractNameDetail && row.contractName"
type="primary"
@@ -134,6 +135,7 @@
{{ row.contractName }}
</el-link>
<span v-else>{{ row.contractName || '-' }}</span>
</div>
</template>
<template #loadingNo="{ row }">
@@ -2715,28 +2717,35 @@
</span>
</div>
<div class="business-crud-page__waybill-route">
<div class="business-crud-page__waybill-route-head">
<b></b
><strong>{{
<div class="business-crud-page__waybill-route-item">
<span class="business-crud-page__waybill-route-dot"></span>
<div class="business-crud-page__waybill-route-detail">
<span class="business-crud-page__waybill-route-label">发货地</span>
<strong class="business-crud-page__waybill-route-name">{{
detailRow.departureName || detailRow.departureAddress || '-'
}}</strong
><b class="end"></b
><strong>{{ detailRow.arrivalName || detailRow.arrivalAddress || '-' }}</strong>
</div>
<div class="business-crud-page__waybill-route-text">
}}</strong>
<el-tooltip :content="detailRow.departureAddress || '-'" placement="top">
<span>{{
<span class="business-crud-page__waybill-route-addr">{{
formatTransportPlanProvinceCityDistrict(detailRow.departureAddress)
}}</span>
</el-tooltip>
<span>  </span>
</div>
</div>
<div class="business-crud-page__waybill-route-item">
<span class="business-crud-page__waybill-route-dot is-end"></span>
<div class="business-crud-page__waybill-route-detail">
<span class="business-crud-page__waybill-route-label">收货地</span>
<strong class="business-crud-page__waybill-route-name">{{
detailRow.arrivalName || detailRow.arrivalAddress || '-'
}}</strong>
<el-tooltip :content="detailRow.arrivalAddress || '-'" placement="top">
<span>{{
<span class="business-crud-page__waybill-route-addr">{{
formatTransportPlanProvinceCityDistrict(detailRow.arrivalAddress)
}}</span>
</el-tooltip>
</div>
</div>
</div>
<div class="business-crud-page__waybill-attachments">
<span class="business-crud-page__waybill-label">附件</span>
<div>
@@ -13955,6 +13964,10 @@ export default {
width: 100%;
}
&__contract-name {
text-align: left;
}
&__contract-expiry-search {
display: flex;
align-items: center;
@@ -14583,7 +14596,7 @@ export default {
background: #fff;
border: 1px solid #eff1f7;
border-radius: 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
:deep(.el-form-item) {
margin-bottom: 8px;
@@ -15710,62 +15723,86 @@ export default {
grid-row: 1 / span 3;
grid-column: 5;
min-width: 0;
padding: 8px 0;
padding: 4px 0;
}
&__waybill-route-head {
&__waybill-route-item {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
align-items: stretch;
gap: 12px;
b {
display: inline-flex;
& + & {
margin-top: 18px;
}
}
&__waybill-route-dot {
position: relative;
flex: 0 0 auto;
width: 34px;
height: 34px;
align-items: center;
justify-content: center;
color: #fff;
border-radius: 4px;
background: #409eff;
&.end {
background: #e6a23c;
}
}
strong {
min-width: 0;
overflow: hidden;
color: #303133;
font-size: 18px;
text-overflow: ellipsis;
white-space: nowrap;
}
width: 12px;
margin-top: 2px;
&::before {
flex: 1;
order: 2;
height: 4px;
display: block;
width: 12px;
height: 12px;
border-radius: 50%;
content: '';
background: #e4e7ed;
background: #409eff;
box-shadow: 0 0 0 3px #fff, 0 0 0 4px #c6e0ff;
}
b.end {
order: 3;
}
strong:last-child {
order: 4;
&.is-end::before {
background: #e6a23c;
box-shadow: 0 0 0 3px #fff, 0 0 0 4px #f5d9b0;
}
}
&__waybill-route-text {
margin-top: 12px;
&__waybill-route-item:not(:last-child) &__waybill-route-dot::after {
content: '';
position: absolute;
top: 14px;
left: 5px;
width: 2px;
height: calc(100% + 10px);
background: repeating-linear-gradient(
to bottom,
#c0c4cc 0,
#c0c4cc 4px,
transparent 4px,
transparent 8px
);
}
&__waybill-route-detail {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
&__waybill-route-label {
color: #909399;
font-size: 12px;
}
&__waybill-route-name {
color: #303133;
font-size: 15px;
font-weight: 500;
line-height: 1.4;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
&__waybill-route-addr {
overflow: hidden;
color: #606266;
text-align: center;
font-size: 12px;
text-overflow: ellipsis;
white-space: nowrap;
}
@@ -1810,8 +1810,9 @@ export default {
.route-dialog__search {
margin-bottom: 8px;
padding: 12px 12px 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.common-address-dialog__search,
.common-cargo-dialog__search {
background: #fff;
}
@@ -1845,6 +1846,7 @@ export default {
:deep(.el-step__icon) {
width: 32px;
height: 32px;
flex-shrink: 0;
border: 0;
background: transparent;
}
@@ -1852,6 +1854,9 @@ export default {
display: inline-flex;
width: 32px;
height: 32px;
min-width: 32px;
min-height: 32px;
flex-shrink: 0;
align-items: center;
justify-content: center;
border-radius: 6px;
@@ -1870,15 +1875,15 @@ export default {
}
.route-node-form {
display: grid;
grid-template-columns: minmax(360px, 1.8fr) minmax(200px, 1fr) minmax(260px, 1.2fr) minmax(
260px,
1.2fr
);
grid-template-columns: repeat(2, minmax(420px, 1fr)) repeat(2, minmax(260px, 1fr));
gap: 0 16px;
align-items: start;
:deep(.el-form-item) {
margin: 0 0 12px;
}
:deep(.el-form-item.route-address-form-item) {
grid-column: span 2;
}
:deep(.el-form-item__content) {
min-width: 0;
}
@@ -1894,7 +1899,7 @@ export default {
gap: 8px;
}
.route-address-name {
flex: 0 0 140px;
flex: 0 0 220px;
}
.route-address-detail,
.route-contact-actions :deep(.el-input) {
@@ -1961,7 +1966,10 @@ export default {
}
@media screen and (max-width: 1440px) {
.route-node-form {
grid-template-columns: repeat(2, minmax(280px, 1fr));
grid-template-columns: repeat(2, minmax(320px, 1fr));
:deep(.el-form-item.route-address-form-item) {
grid-column: span 2;
}
}
.route-step-title {
align-items: flex-start;
+1 -1
View File
@@ -3,7 +3,7 @@
:api="api"
:config="config"
:crud-option="option"
:menu-width="252"
:menu-width="280"
contract-form-page
/>
</template>
+1 -1
View File
@@ -2354,7 +2354,7 @@ export default {
padding: 12px 12px 4px;
margin-bottom: 8px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.loading-manage-page__search-grid {
+1 -1
View File
@@ -398,7 +398,7 @@ export default {
margin-bottom: 8px;
padding: 12px 12px 4px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
.el-form-item {
margin-bottom: 8px;
}
+2 -2
View File
@@ -958,7 +958,7 @@ load();
padding: 12px 12px 4px;
margin-bottom: 8px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
&__search-grid {
display: grid;
@@ -1046,7 +1046,7 @@ load();
padding: 12px;
margin-bottom: 8px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
:deep(.el-form-item) {
margin-bottom: 8px;
@@ -1,8 +1,7 @@
<template>
<el-dialog v-model="visible" :title="title" width="96%" top="2vh" append-to-body destroy-on-close>
<div v-loading="loading" class="formal-editor">
<section class="formal-editor__section">
<div class="dialog-section-title">结算基本信息</div>
<section-card title="结算基本信息">
<el-form
ref="formRef"
:model="form"
@@ -64,11 +63,10 @@
</el-col>
</el-row>
</el-form>
</section>
</section-card>
<section class="formal-editor__section">
<div class="formal-editor__section-head">
<div class="dialog-section-title">来源预结算单</div>
<section-card title="来源预结算单">
<template #extra>
<div class="formal-editor__actions">
<el-button v-if="editable" type="primary" plain @click="openCandidateDialog"
>选择预结算单</el-button
@@ -77,7 +75,7 @@
>选择结算明细</el-button
>
</div>
</div>
</template>
<el-table :data="sources" border>
<el-table-column type="index" label="序号" width="64" align="center" />
<el-table-column
@@ -97,10 +95,9 @@
>
</el-table-column>
</el-table>
</section>
</section-card>
<section v-if="details.length" class="formal-editor__section">
<div class="dialog-section-title">结算明细</div>
<section-card v-if="details.length" title="结算明细">
<el-table :data="details" border>
<el-table-column type="index" label="序号" width="64" fixed="left" align="center" />
<el-table-column
@@ -131,10 +128,9 @@
</template>
</el-table-column>
</el-table>
</section>
</section-card>
<section class="formal-editor__section">
<div class="dialog-section-title">附件</div>
<section-card title="附件">
<vehicle-attachment-upload
v-model="attachments"
:readonly="!editable"
@@ -143,10 +139,9 @@
:max-size="500"
:file-types="attachmentFileTypes"
/>
</section>
</section-card>
<section v-if="readonly && payments.length" class="formal-editor__section">
<div class="dialog-section-title">付款信息</div>
<section-card v-if="readonly && payments.length" title="付款信息">
<el-table :data="payments" border>
<el-table-column type="index" label="序号" width="64" align="center" />
<el-table-column
@@ -167,7 +162,7 @@
</template>
</el-table-column>
</el-table>
</section>
</section-card>
</div>
<template #footer>
<el-button @click="visible = false">取消</el-button>
@@ -177,7 +172,7 @@
</template>
<el-dialog v-model="candidate.visible" title="选择预结算单" width="88%" append-to-body>
<el-form :model="candidate.query" inline label-position="right" label-width="160px">
<el-form :model="candidate.query" inline label-position="right" label-width="160px" class="formal-editor__candidate-search">
<el-form-item label="预结算单号"
><el-input v-model="candidate.query.preSettlementNo" clearable
/></el-form-item>
@@ -227,7 +222,7 @@
</el-dialog>
<el-dialog v-model="detailCandidate.visible" title="选择结算明细" width="92%" append-to-body>
<el-form :model="detailCandidate.query" inline label-position="right" label-width="160px">
<el-form :model="detailCandidate.query" inline label-position="right" label-width="160px" class="formal-editor__detail-search">
<el-form-item label="批次号"
><el-input v-model="detailCandidate.query.batchNo" clearable
/></el-form-item>
@@ -725,15 +720,6 @@ export default {
</script>
<style scoped lang="scss">
.formal-editor__section {
margin-bottom: 24px;
}
.formal-editor__section-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.formal-editor__actions {
display: flex;
gap: 8px;
@@ -761,4 +747,13 @@ export default {
.formal-editor__adjust-reason {
margin-top: 16px;
}
/* 选择预结算单 / 选择结算明细 弹窗搜索区白底 */
.formal-editor__candidate-search,
.formal-editor__detail-search {
background: #fff;
border-radius: 6px;
padding: 12px;
margin-bottom: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
</style>
@@ -10,7 +10,7 @@
@closed="handleClosed"
>
<div v-loading="loading" class="pre-settlement-editor__content">
<div class="dialog-section-title">结算基本信息</div>
<section-card title="结算基本信息">
<el-form
ref="formRef"
:model="form"
@@ -81,14 +81,14 @@
</el-col>
</el-row>
</el-form>
</section-card>
<section class="pre-settlement-editor__section">
<div class="pre-settlement-editor__section-head">
<div class="dialog-section-title">结算合计</div>
<section-card title="结算合计">
<template #extra>
<el-button v-if="editable" type="primary" plain @click="addSummaryFee">
添加费用
</el-button>
</div>
</template>
<el-table :data="summaryFees" border>
<el-table-column type="index" label="序号" width="64" align="center" />
<el-table-column
@@ -161,11 +161,10 @@
<div class="pre-settlement-editor__summary-total">
合计{{ formatMoney(summaryTotal, form.currency) }}
</div>
</section>
</section-card>
<section class="pre-settlement-editor__section">
<div class="pre-settlement-editor__section-head">
<div class="dialog-section-title">结算明细</div>
<section-card title="结算明细">
<template #extra>
<div class="pre-settlement-editor__section-actions">
<el-button
v-if="hasPermission('pre_settlement_export')"
@@ -182,7 +181,7 @@
{{ detailCollapsed ? '展开明细' : '收起明细' }}
</el-button>
</div>
</div>
</template>
<el-form
:model="detailQuery"
inline
@@ -284,12 +283,9 @@
</el-table-column>
</el-table>
</div>
</section>
</section-card>
<section class="pre-settlement-editor__section">
<div class="pre-settlement-editor__section-head">
<div class="dialog-section-title">附件</div>
</div>
<section-card title="附件">
<div class="pre-settlement-editor__attachment">
<div class="pre-settlement-editor__attachment-actions">
<vehicle-attachment-upload
@@ -344,10 +340,9 @@
</el-table-column>
</el-table>
</div>
</section>
</section-card>
<section v-if="form.id && readonly" class="pre-settlement-editor__section">
<div class="dialog-section-title">预付信息</div>
<section-card v-if="form.id && readonly" title="预付信息">
<el-table :data="advances" border>
<el-table-column type="index" label="序号" width="64" align="center" />
<el-table-column
@@ -370,10 +365,9 @@
</template>
</el-table-column>
</el-table>
</section>
</section-card>
<section v-if="form.id && readonly" class="pre-settlement-editor__section">
<div class="dialog-section-title">变更记录</div>
<section-card v-if="form.id && readonly" title="变更记录">
<el-table :data="changeRecords" border>
<el-table-column type="index" label="序号" width="64" align="center" />
<el-table-column
@@ -391,7 +385,7 @@
</template>
</el-table-column>
</el-table>
</section>
</section-card>
</div>
<template #footer>
@@ -1317,12 +1311,9 @@ export default {
&__content {
max-height: 82vh;
overflow-y: auto;
padding: 4px 12px 16px;
}
&__form {
margin-top: 12px;
:deep(.el-select),
:deep(.el-date-editor),
:deep(.el-input-number) {
@@ -1330,17 +1321,6 @@ export default {
}
}
&__section {
margin-top: 20px;
}
&__section-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
&__section-actions,
&__links {
display: flex;
@@ -1,8 +1,7 @@
<template>
<el-dialog v-model="visible" :title="title" width="94%" top="3vh" append-to-body destroy-on-close>
<div v-loading="loading" class="settlement-adjustment-editor">
<section class="settlement-adjustment-editor__section">
<div class="dialog-section-title">基本信息</div>
<section-card title="基本信息">
<el-form
ref="formRef"
:model="form"
@@ -57,11 +56,10 @@
>
</el-row>
</el-form>
</section>
</section-card>
<section class="settlement-adjustment-editor__section">
<div class="settlement-adjustment-editor__section-head">
<div class="dialog-section-title">调整费用</div>
<section-card title="调整费用">
<template #extra>
<el-button
v-if="editable && form.formalSettlementId"
type="primary"
@@ -69,7 +67,7 @@
@click="openFeeDialog"
>添加费用</el-button
>
</div>
</template>
<el-table :data="details" border>
<el-table-column type="index" label="序号" width="64" align="center" /><el-table-column
prop="feeType"
@@ -141,7 +139,7 @@
}}</strong
>调整后结算金额<strong>{{ formatMoney(form.adjustedSettlementAmount) }}</strong>
</div>
</section>
</section-card>
</div>
<template #footer
><el-button @click="visible = false">取消</el-button
@@ -354,15 +352,6 @@ export default {
</script>
<style scoped lang="scss">
.settlement-adjustment-editor__section {
margin-bottom: 24px;
}
.settlement-adjustment-editor__section-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.settlement-adjustment-editor__summary {
padding: 12px 0;
text-align: right;
@@ -379,18 +368,4 @@ export default {
.negative {
color: #f56c6c;
}
.dialog-section-title {
display: flex;
align-items: center;
min-height: 22px;
font-size: 16px;
font-weight: 600;
}
.dialog-section-title::before {
width: 4px;
height: 18px;
margin-right: 8px;
background: #409eff;
content: '';
}
</style>
@@ -1,8 +1,7 @@
<template>
<el-dialog v-model="visible" :title="title" width="98%" top="2vh" append-to-body destroy-on-close>
<div v-loading="loading" class="reconciliation-editor">
<section class="reconciliation-editor__section">
<div class="dialog-section-title">导入外部账单与内部账单核对</div>
<section-card title="导入外部账单,与内部账单核对">
<el-form
ref="formRef"
:model="form"
@@ -61,10 +60,9 @@
</el-col>
</el-row>
</el-form>
</section>
</section-card>
<section class="reconciliation-editor__section">
<div class="dialog-section-title">内部账单</div>
<section-card title="内部账单">
<div class="reconciliation-editor__stats">
<div class="stat-card">
<b>{{ form.internalBillCount || 0 }}</b
@@ -149,11 +147,10 @@
</template>
</el-table-column>
</el-table>
</section>
</section-card>
<section class="reconciliation-editor__section">
<div class="reconciliation-editor__section-head">
<div class="dialog-section-title">导入外部账单</div>
<section-card title="导入外部账单">
<template #extra>
<div class="reconciliation-editor__actions" v-if="editable">
<el-button type="primary" plain @click="downloadTemplate('vehicle')"
>下载整车对账模板</el-button
@@ -171,7 +168,7 @@
@change="handleImport"
/>
</div>
</div>
</template>
<el-tabs v-model="externalTab">
<el-tab-pane :label="`导入明细(${externalDetails.length}`" name="all" />
<el-tab-pane :label="`疑似重复(${duplicateRows.length}`" name="duplicate" />
@@ -203,9 +200,9 @@
>
</el-table-column>
</el-table>
</section>
</section-card>
<section class="reconciliation-editor__section">
<section-card title="操作说明">
<el-collapse>
<el-collapse-item title="操作说明" name="help">
<div class="reconciliation-editor__help">
@@ -224,7 +221,7 @@
</div>
</el-collapse-item>
</el-collapse>
</section>
</section-card>
</div>
<template #footer>
@@ -744,15 +741,6 @@ export default {
</script>
<style scoped lang="scss">
.reconciliation-editor__section {
margin-bottom: 24px;
}
.reconciliation-editor__section-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.reconciliation-editor__actions,
.reconciliation-editor__links {
display: flex;
+12 -4
View File
@@ -117,7 +117,7 @@
<span v-else>{{ displayValue(row[column.prop]) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="320" fixed="right" align="center">
<el-table-column label="操作" width="120" fixed="right" align="center">
<template #default="{ row }"
><div class="formal-page__links">
<el-link
@@ -192,7 +192,14 @@
:readonly="editor.readonly"
@success="loadTable"
/>
<el-dialog v-model="paymentDialog.visible" title="付款申请" width="520px" append-to-body>
<el-dialog
v-model="paymentDialog.visible"
title="付款申请"
width="520px"
append-to-body
class="formal-payment-dialog"
>
<section-card title="付款信息">
<el-form :model="paymentDialog.form" label-position="right" label-width="auto">
<el-form-item label="结算单号">{{
paymentDialog.row.formalSettlementNo || '-'
@@ -216,9 +223,10 @@
show-word-limit
/></el-form-item>
</el-form>
</section-card>
<template #footer
><el-button @click="paymentDialog.visible = false">取消</el-button
><el-button type="primary" :loading="paymentDialog.loading" @click="submitPayment"
><el-button type="success" :loading="paymentDialog.loading" @click="submitPayment"
>提交</el-button
></template
>
@@ -530,7 +538,7 @@ export default {
.formal-page__search {
padding: 12px 12px 4px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.formal-page__search-grid {
display: grid;
+11 -22
View File
@@ -130,7 +130,7 @@
<span v-else>{{ displayValue(row[column.prop]) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="320" fixed="right" align="center">
<el-table-column label="操作" width="130" fixed="right" align="center">
<template #default="{ row }">
<div class="pre-settlement-page__links">
<el-link
@@ -257,8 +257,14 @@
</template>
</el-dialog>
<el-dialog v-model="printDialog.visible" title="打印" width="620px" append-to-body>
<div class="dialog-section-title">选择打印模板</div>
<el-dialog
v-model="printDialog.visible"
title="打印"
width="620px"
append-to-body
class="pre-settlement-print-dialog"
>
<section-card title="选择打印模板">
<el-form label-position="right" label-width="auto" class="pre-settlement-page__print-form">
<el-form-item label="项目">
<span>{{ printDialog.row.projectName || '-' }}</span>
@@ -274,6 +280,7 @@
</el-select>
</el-form-item>
</el-form>
</section-card>
<template #footer>
<el-button @click="printDialog.visible = false">取消</el-button>
<el-button type="primary" :loading="printDialog.loading" @click="handlePrintPreview">
@@ -699,7 +706,7 @@ export default {
&__search {
padding: 12px 12px 4px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
&__search-grid {
@@ -754,8 +761,6 @@ export default {
}
&__print-form {
margin-top: 20px;
:deep(.el-select) {
width: 320px;
}
@@ -774,22 +779,6 @@ export default {
}
}
.dialog-section-title {
display: flex;
align-items: center;
min-height: 22px;
font-size: 16px;
font-weight: 600;
&::before {
width: 4px;
height: 18px;
margin-right: 8px;
background: #409eff;
content: '';
}
}
:deep(.pre-settlement-page .el-table) {
--el-table-border-color: #eff1f7;
background: #fff;
@@ -76,7 +76,7 @@
<span v-else>{{ formatColumnValue(row, column) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="220" fixed="right" align="center">
<el-table-column label="操作" width="120" fixed="right" align="center">
<template #default="{ row }">
<div class="settlement-detail-page__actions">
<el-link v-if="row.settlementStatus === 'pending'" type="primary" @click="openAdjustDialog(row)">
@@ -111,7 +111,7 @@
destroy-on-close
class="settlement-detail-dialog"
>
<el-tabs v-model="detailDialog.activeTab" @tab-change="handleDetailTabChange">
<el-tabs type="border-card" style="background-color: #ffffff" v-model="detailDialog.activeTab" @tab-change="handleDetailTabChange">
<el-tab-pane label="费用明细" name="fee">
<el-table v-loading="detailDialog.loading" :data="feeRows" border>
<el-table-column type="index" label="序号" width="64" align="center" />
@@ -399,7 +399,13 @@
</el-dialog>
<el-dialog v-model="generateDialog.visible" title="生成费用" width="88%" append-to-body>
<el-form :model="generateQuery" inline label-position="right" label-width="120px">
<el-form
:model="generateQuery"
class="settlement-detail-page__generate-search"
inline
label-position="right"
label-width="120px"
>
<el-form-item label="运单合同" required>
<el-select
v-model="generateQuery.contractId"
@@ -1258,7 +1264,7 @@ export default {
margin-bottom: 8px;
padding: 12px 12px 4px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
:deep(.el-form-item__label) {
min-width: 160px;
@@ -1334,10 +1340,17 @@ export default {
}
.settlement-detail-page__dialog-form {
padding: 16px 20px 0;
padding: 16px 20px;
background: #fff;
border-radius: 6px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
:deep(.el-form-item) {
margin-bottom: 16px;
&:last-child {
margin-bottom: 0;
}
}
:deep(.el-select) {
@@ -1345,8 +1358,24 @@ export default {
}
}
.settlement-detail-page__adjust-toolbar {
margin-bottom: 8px;
}
.settlement-detail-page__generate-search {
margin-bottom: 16px;
padding: 12px 12px 4px;
background: #fff;
border-radius: 6px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.settlement-detail-page__transfer-form {
margin-bottom: 16px;
padding: 12px 12px 4px;
background: #fff;
border-radius: 6px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
@media screen and (max-width: 1200px) {
@@ -1360,4 +1389,17 @@ export default {
grid-template-columns: 1fr;
}
}
/* 详情弹窗 tabs 白底 */
.settlement-detail-dialog {
:deep(.el-tabs__content) {
background: #fff;
padding: 16px;
border-radius: 0 0 6px 6px;
}
:deep(.el-tab-pane) {
background: transparent;
}
}
</style>
@@ -78,7 +78,7 @@
><span v-else>{{ displayValue(row[column.prop]) }}</span></template
></el-table-column
>
<el-table-column label="操作" width="320" fixed="right" align="center"
<el-table-column label="操作" width="120" fixed="right" align="center"
><template #default="{ row }"
><div class="settlement-adjustment-page__links">
<el-link
@@ -312,7 +312,7 @@ export default {
&__search {
padding: 12px 12px 4px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
&__search-grid {
display: grid;
+1 -1
View File
@@ -721,7 +721,7 @@ export default {
<style scoped>
.carrier-search-form {
padding: 12px 12px 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.carrier-pagination {
+1 -1
View File
@@ -437,7 +437,7 @@ export default {
margin-bottom: 8px;
padding: 12px 12px 4px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
:deep(.el-form-item__label) {
min-width: 160px;
+1 -1
View File
@@ -384,7 +384,7 @@ export default {
margin-bottom: 8px;
padding: 12px 12px 4px;
background: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.risk-disposal-page__search-grid {
@@ -1129,7 +1129,6 @@ export default {
color: #303133;
font-size: 14px;
font-weight: 400;
text-align: center;
}
:deep(.score-description-input .el-input__inner) {
+2 -2
View File
@@ -451,7 +451,7 @@ export default {
gap: 16px;
margin-bottom: 16px;
border-left: 4px solid var(--accent);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
transition: transform 0.2s, box-shadow 0.2s;
&:hover {
transform: translateY(-2px);
@@ -508,7 +508,7 @@ export default {
border-radius: 10px;
padding: 18px 20px;
margin-bottom: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
// flex
.trend,
+13 -13
View File
@@ -50,26 +50,26 @@ export default ({
__VUE_I18N_LEGACY_API__: true,
__INTLIFY_PROD_DEVTOOLS__: false,
},
server: {
port: 2888,
proxy: {
'/api': {
target: 'http://localhost',
//target: 'https://saber3.bladex.cn/api',
changeOrigin: true,
rewrite: path => path.replace(/^\/api/, ''),
},
},
},
// server: {
// port: 2889,
// port: 2888,
// proxy: {
// '/api': {
// target: 'http://172.16.203.228:8000',
// target: 'http://localhost',
// //target: 'https://saber3.bladex.cn/api',
// changeOrigin: true,
// rewrite: path => path.replace(/^\/api/, ''),
// },
// },
// },
server: {
port: 2889,
proxy: {
'/api': {
target: 'http://172.16.203.228:8000',
changeOrigin: true,
},
},
},
resolve: {
alias: {
'~': resolve(__dirname, './'),