Merge remote-tracking branch 'websoft/master'
# Conflicts: # src/views/settlement/transport-reconciliation.vue
This commit is contained in:
@@ -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 自动生效,刷新后开新增/编辑弹窗向下滚到"线路编辑"分组即可见。
|
||||
|
||||
@@ -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` 插槽的页面,其合同名称单元格内容都会左对齐。
|
||||
@@ -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 个按钮开始换行展示,禁止出现按钮裁切或显示不全。
|
||||
|
||||
@@ -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),
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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' }],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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 偶数行背景色
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,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,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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
:api="api"
|
||||
:config="config"
|
||||
:crud-option="option"
|
||||
:menu-width="252"
|
||||
:menu-width="280"
|
||||
contract-form-page
|
||||
/>
|
||||
</template>
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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, './'),
|
||||
|
||||
Reference in New Issue
Block a user