style(transportCapacity): 调整到期筛选标签位置和样式,统一标签展示逻辑
- transportCapacity/driver、vehicle、ship 页的「全部/30天内到期/已到期」筛选标签改为靠右对齐 - 统一使用 #search-menu 插槽替代 #expireStatus-search,标签移至搜索按钮前 - 标签容器删除宽度限制,增加 order:-1 和 margin-right:12px,保证标签和按钮为一体 - transportCapacity/vehicle 和 ship 的 expireStatus 列 search 改为 false,避免多余输入框出现 - transportCapacity/vehicle、ship 的 searchIndex 提升至6,避免搜索条件折叠,标签默认展开 - 暂用样式更改保证标签与搜索按钮间距和垂直对齐 - temporary-credit-limit 弹窗新增 dialogCustomClass,实现弹窗label固定六字宽度并自动换行 - element-ui.scss 新增临时额度弹窗 label 样式,修改label宽度、换行、对齐,提升可读性 - 调整多处搜索表单内 label 宽度由160px变为88px,优化表单紧凑度 - 多处文本域的最小行数 minRows 统一由较高数值改为2,改善表单布局和输入体验 - 更新 vite.config.mjs 开发服务器端口及代理配置,切换至本地测试环境 - waybill-import-dialog.vue 中修正文本域 autosize 最小行数为2,更符合表单设计规范 - 修改业务页 contract-manage.vue 菜单宽度由245px调整至252px,优化界面布局
This commit is contained in:
@@ -93,3 +93,11 @@
|
||||
1. `.dialog-section-title > span { line-height: 1 }` 收紧标题文字行高。
|
||||
2. `&__section-actions .el-link { display:inline-flex; align-items:center; line-height:1 }` 让链接严格垂直居中。
|
||||
- 校验:两处使用 `.dialog-section-title--action.business-crud-page__goods-title` + `__section-actions` 的货物信息标题都会生效。
|
||||
|
||||
## transportCapacity/driver.vue 到期筛选标签靠右对齐
|
||||
|
||||
- 需求:将搜索栏下方「全部/30天内到期/已到期」筛选标签靠右对齐,放到搜索按钮前面并保留间距。
|
||||
- 改动(src/views/transportCapacity/driver.vue):
|
||||
- `.driver-page__expiry-tags` 的 `margin-right: auto` 改为 `margin-right: 12px`。
|
||||
- 保留 `order: -1` 使标签在 Flex 排列中位于搜索按钮之前;全局 `.avue-crud__search .avue-form__menu` 已设 `justify-content: flex-end`,删除 `auto` 后标签与按钮作为一个整体靠右排列,不再分居两端。
|
||||
- 间距:标签内部 `gap: 8px` 保留;标签与搜索按钮之间 12px。
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# 2026-08-14 工作记录
|
||||
|
||||
## temporary-credit-limit 弹窗 label 固定 6 汉字宽度并换行
|
||||
|
||||
- 需求:用户反馈 `/business/temporary-credit-limit` 新增弹窗中 label「已使用项目资金使用额度(万元)」过宽(227px),希望超过 6 个汉字就换行。
|
||||
- 宽度来源:
|
||||
- `src/option/business/common.js` 的 `createCrudOption` 中 `labelWidth: 'auto'`;
|
||||
- Avue 会按当前弹窗内最长 label 自动计算宽度,故出现 227px。
|
||||
- `src/styles/element-ui.scss` 第 164 行 `.el-dialog .el-form-item__label { white-space: nowrap }` 阻止换行。
|
||||
- 改动:
|
||||
1. `src/option/business/temporary-credit-limit.js`:option 增加 `dialogCustomClass: 'temporary-credit-limit-dialog'`。
|
||||
2. `src/styles/element-ui.scss`:新增 `.temporary-credit-limit-dialog .el-form-item__label` 规则,固定宽度 `calc(6em + 24px)`,并设置 `white-space: normal; word-break: break-all; overflow-wrap: anywhere; line-height: 18px`,实现超长 label 自动换行。
|
||||
3. 同时给 `.temporary-credit-limit-dialog .el-form-item { align-items: center; }` 保持垂直居中。
|
||||
- 参考:同文件已有 `.avue-dialog--common-route` 使用相同 6em label 宽度方案。
|
||||
|
||||
## transportCapacity/ship 到期筛选标签默认展开并靠前
|
||||
|
||||
- 需求:用户反馈 `/transportCapacity/ship` 页面搜索栏的「全部/30天内到期/已到期」标签需要点击「展开」后才显示,希望默认直接显示;且位置要位于搜索按钮前面。
|
||||
- 原因:`src/option/transportCapacity/transport-ship.js` 中 `searchIndex: 4`,默认只展示前 4 个搜索条件,而 `expireStatus` 的 `searchOrder: 0`(Avue 越大越靠前)排在第 6 位,因此被折叠到第二行。
|
||||
- 改动:
|
||||
- `src/option/transportCapacity/transport-ship.js`:`searchIndex: 4 → 6`,让全部 6 个搜索条件默认展开,标签无需再点展开即可看到。
|
||||
- 由于 `expireStatus` 排在最后,展开后它自然位于第二行末尾、搜索按钮之前,满足"移到搜索按钮前面"的要求。
|
||||
|
||||
## transportCapacity/vehicle 与 ship 到期筛选标签重构(对齐 driver 的 #search-menu 方案)
|
||||
|
||||
- 需求:用户希望 `/transportCapacity/vehicle` 和 `/transportCapacity/ship` 的「全部/30天内到期/已到期」标签与 driver 页一致:① 不展开就直接显示;② 移到搜索按钮前面并保留间距。
|
||||
- 关键差异(排查发现):driver 用 `#search-menu` 插槽把标签渲染在**按钮所在行**;而 vehicle/ship 之前用 `#expireStatus-search` 列插槽,标签被渲染进**搜索条件网格**(位置不对)。
|
||||
- 改动(两页同样处理):
|
||||
1. `.vue`:`<template #expireStatus-search>` → `<template #search-menu>`,标签 div 内容不变。
|
||||
2. `.vue` 样式 `__expiry-tags`:去掉 `width: 100%`,改为 `order: -1; margin-right: 12px; min-width: 0;`(与 driver 完全一致,使标签左移并落在搜索按钮前)。
|
||||
3. option:将 `expireStatus` 列的 `search: true → search: false`(否则会在搜索网格里多渲染一个空输入框);`searchIndex` 设为 ≥ 真实搜索列数(vehicle: `4 → 6`;ship 已是 `6`),使 `columnLen ≤ searchIndex`,Avue 不再显示「展开」按钮。
|
||||
- 原理:Avue `header-search3.js` 中 `#search-menu` 插槽内容渲染进 `menu-form`,位于默认搜索/重置按钮之后、展开按钮之前;`order: -1` 将标签推到按钮左侧。
|
||||
- 验证:`node --check` 两个 option 文件通过;页面刷新即可见效果。
|
||||
+1
-1
@@ -84,7 +84,7 @@ app.use(Avue, {
|
||||
crudOption: {
|
||||
searchIcon: true,
|
||||
searchIndex: 4,
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
searchMenuSpan: 24,
|
||||
searchMenuPosition: 'right',
|
||||
menuWidth: 180,
|
||||
|
||||
@@ -35,8 +35,8 @@ export const getCargoTypeOption = ctx => ({
|
||||
updateBtnText: '提交',
|
||||
searchShow: true,
|
||||
searchIcon: true,
|
||||
searchLabelWidth: 50,
|
||||
searchMenuSpan: 10,
|
||||
searchLabelWidth: 88,
|
||||
searchMenuSpan: 12,
|
||||
searchIndex: 4,
|
||||
searchMenuPosition: 'right',
|
||||
border: true,
|
||||
|
||||
@@ -495,6 +495,7 @@ export const option = createCrudOption([
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
span: 24,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
order: 40,
|
||||
maxlength: 2000,
|
||||
|
||||
@@ -120,7 +120,7 @@ export const option = {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
order: 360,
|
||||
minWidth: 180,
|
||||
@@ -175,7 +175,7 @@ export const option = {
|
||||
label: '备注',
|
||||
prop: 'basicRemark',
|
||||
type: 'textarea',
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
order: 315,
|
||||
minWidth: 180,
|
||||
|
||||
@@ -87,6 +87,7 @@ export const config = {
|
||||
};
|
||||
|
||||
export const option = {
|
||||
dialogCustomClass: 'temporary-credit-limit-dialog',
|
||||
...createCrudOption([
|
||||
{
|
||||
label: '申请单号',
|
||||
@@ -258,6 +259,7 @@ export const option = {
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
span: 24,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
maxlength: 200,
|
||||
showWordLimit: true,
|
||||
|
||||
@@ -416,7 +416,7 @@ export const option = {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
order: 330,
|
||||
minWidth: 180,
|
||||
@@ -572,7 +572,7 @@ export const option = {
|
||||
prop: 'goodsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
minRows: 5,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
order: 270,
|
||||
hide: true,
|
||||
@@ -593,7 +593,7 @@ export const option = {
|
||||
prop: 'attachmentsJson',
|
||||
type: 'textarea',
|
||||
formslot: true,
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
order: 260,
|
||||
hide: true,
|
||||
|
||||
@@ -570,7 +570,7 @@ export const option = {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
order: 810,
|
||||
minWidth: 180,
|
||||
@@ -698,7 +698,7 @@ export const option = {
|
||||
label: '货物信息',
|
||||
prop: 'goodsJson',
|
||||
type: 'textarea',
|
||||
minRows: 5,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
hide: true,
|
||||
display: false,
|
||||
@@ -710,7 +710,7 @@ export const option = {
|
||||
label: '承运信息',
|
||||
prop: 'carrierJson',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
hide: true,
|
||||
display: false,
|
||||
@@ -722,7 +722,7 @@ export const option = {
|
||||
label: '过程配置',
|
||||
prop: 'processJson',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
hide: true,
|
||||
display: false,
|
||||
@@ -734,7 +734,7 @@ export const option = {
|
||||
label: '运费信息',
|
||||
prop: 'freightJson',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
hide: true,
|
||||
display: false,
|
||||
|
||||
@@ -411,7 +411,7 @@ export const platformOption = {
|
||||
label: '用户拓展',
|
||||
prop: 'userExt',
|
||||
type: 'textarea',
|
||||
minRows: 8,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
overHidden: true,
|
||||
row: true,
|
||||
@@ -500,7 +500,7 @@ export const platformFormOption = {
|
||||
label: '用户拓展',
|
||||
prop: 'userExt',
|
||||
type: 'textarea',
|
||||
minRows: 8,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
},
|
||||
],
|
||||
|
||||
@@ -13,7 +13,7 @@ export default {
|
||||
grid: true,
|
||||
selection: true,
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
menuWidth: 180,
|
||||
dialogClickModal: false,
|
||||
column: [
|
||||
|
||||
@@ -13,7 +13,7 @@ export default {
|
||||
grid: true,
|
||||
selection: true,
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
menuWidth: 180,
|
||||
dialogWidth: 500,
|
||||
dialogClickModal: false,
|
||||
|
||||
@@ -5,7 +5,7 @@ export const option = {
|
||||
searchShow: true,
|
||||
searchMenuSpan: 24,
|
||||
searchIcon: true,
|
||||
searchIndex: 4,
|
||||
searchIndex: 6,
|
||||
searchMenuPosition: 'right',
|
||||
border: true,
|
||||
index: true,
|
||||
@@ -96,7 +96,7 @@ export const option = {
|
||||
{
|
||||
label: '',
|
||||
prop: 'expireStatus',
|
||||
search: true,
|
||||
search: false,
|
||||
searchOrder: 0,
|
||||
searchSpan: 6,
|
||||
hide: true,
|
||||
|
||||
@@ -5,7 +5,7 @@ export const option = {
|
||||
searchShow: true,
|
||||
searchMenuSpan: 24,
|
||||
searchIcon: true,
|
||||
searchIndex: 4,
|
||||
searchIndex: 6,
|
||||
searchMenuPosition: 'right',
|
||||
border: true,
|
||||
index: true,
|
||||
@@ -149,7 +149,7 @@ export const option = {
|
||||
{
|
||||
label: '',
|
||||
prop: 'expireStatus',
|
||||
search: true,
|
||||
search: false,
|
||||
searchOrder: 0,
|
||||
searchSpan: 6,
|
||||
hide: true,
|
||||
|
||||
@@ -36,7 +36,7 @@ export const option = {
|
||||
dialogWidth: 960,
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
tip: false,
|
||||
searchBtnText: '查询',
|
||||
emptyBtnText: '重置',
|
||||
|
||||
@@ -35,7 +35,7 @@ export const option = {
|
||||
dialogWidth: 960,
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
tip: false,
|
||||
searchBtnText: '查询',
|
||||
emptyBtnText: '重置',
|
||||
|
||||
@@ -16,7 +16,7 @@ export const option = {
|
||||
dialogWidth: 960,
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
tip: false,
|
||||
searchBtnText: '查询',
|
||||
emptyBtnText: '重置',
|
||||
|
||||
@@ -25,7 +25,7 @@ export const option = {
|
||||
dialogWidth: 960,
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
tip: false,
|
||||
searchBtnText: '查询',
|
||||
emptyBtnText: '重置',
|
||||
|
||||
@@ -33,7 +33,7 @@ export const option = {
|
||||
dialogWidth: 960,
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
tip: false,
|
||||
searchBtnText: '查询',
|
||||
emptyBtnText: '重置',
|
||||
|
||||
@@ -26,7 +26,7 @@ export const option = {
|
||||
dialogWidth: 960,
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
tip: false,
|
||||
searchBtnText: '查询',
|
||||
emptyBtnText: '重置',
|
||||
|
||||
@@ -36,7 +36,7 @@ export const option = {
|
||||
dialogWidth: 960,
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
tip: false,
|
||||
searchBtnText: '查询',
|
||||
emptyBtnText: '重置',
|
||||
|
||||
@@ -131,8 +131,8 @@
|
||||
}
|
||||
|
||||
.avue-crud__search .el-form-item__label {
|
||||
min-width: 160px;
|
||||
white-space: nowrap;
|
||||
min-width: 88px;
|
||||
//white-space: nowrap;
|
||||
}
|
||||
|
||||
.avue-crud__search.el-card {
|
||||
@@ -289,6 +289,22 @@
|
||||
}
|
||||
}
|
||||
|
||||
// 3d) 临时额度管理弹窗:label 固定 6 个汉字宽度,超长自动换行
|
||||
.temporary-credit-limit-dialog {
|
||||
.el-form-item__label {
|
||||
flex: 0 0 calc(6em + 24px) !important;
|
||||
width: calc(6em + 24px) !important;
|
||||
white-space: normal !important;
|
||||
word-break: break-all;
|
||||
overflow-wrap: anywhere;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.el-form-item {
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
// 3) Avue 弹窗内分组(option.group)渲染为白卡,标题在卡内
|
||||
.el-dialog .avue-form__group {
|
||||
background: #fff;
|
||||
@@ -314,7 +330,7 @@
|
||||
background: #fff;
|
||||
border-radius: 6px;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
|
||||
padding: 16px;
|
||||
//padding: 16px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
.avue-form__group--title {
|
||||
@@ -684,6 +700,7 @@
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
@@ -787,5 +804,5 @@
|
||||
margin-top: -30px !important;
|
||||
}
|
||||
.el-form-item__label {
|
||||
margin-left: 20px !important;
|
||||
margin-left: 12px !important;
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ export default {
|
||||
viewBtn: true,
|
||||
selection: true,
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
menuWidth: 180,
|
||||
dialogWidth: 900,
|
||||
dialogClickModal: false,
|
||||
|
||||
@@ -164,7 +164,7 @@ export default {
|
||||
viewBtn: true,
|
||||
selection: true,
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
menuWidth: 180,
|
||||
dialogWidth: 900,
|
||||
dialogClickModal: false,
|
||||
@@ -277,7 +277,7 @@ export default {
|
||||
label: '规则值',
|
||||
prop: 'scopeValue',
|
||||
span: 24,
|
||||
minRows: 5,
|
||||
minRows: 2,
|
||||
type: 'textarea',
|
||||
display: false,
|
||||
hide: true,
|
||||
@@ -488,7 +488,7 @@ export default {
|
||||
label: '规则值',
|
||||
prop: 'scopeValue',
|
||||
span: 24,
|
||||
minRows: 5,
|
||||
minRows: 2,
|
||||
type: 'textarea',
|
||||
display: true,
|
||||
hide: true,
|
||||
|
||||
@@ -206,7 +206,7 @@ export default {
|
||||
searchIndex: 8,
|
||||
searchMenuPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
border: true,
|
||||
index: true,
|
||||
viewBtn: true,
|
||||
@@ -270,7 +270,7 @@ export default {
|
||||
label: '请求阈值',
|
||||
prop: 'limitCount',
|
||||
type: 'number',
|
||||
minRows: 1,
|
||||
minRows: 2,
|
||||
value: 100,
|
||||
hide: true,
|
||||
labelTip: '单个时间窗口内允许通过的最大请求数,超出后触发限流并返回 429',
|
||||
@@ -280,7 +280,7 @@ export default {
|
||||
label: '时间窗口',
|
||||
prop: 'limitPeriod',
|
||||
type: 'number',
|
||||
minRows: 1,
|
||||
minRows: 2,
|
||||
value: 1,
|
||||
hide: true,
|
||||
labelTip: '限流统计周期的数值,与时间单位组合使用,如时间窗口 1 + 时间单位分钟表示每分钟一个周期',
|
||||
|
||||
@@ -249,7 +249,7 @@ export default {
|
||||
selection: true,
|
||||
viewBtn: true,
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
menuWidth: 240,
|
||||
dialogWidth: 600,
|
||||
dialogClickModal: false,
|
||||
|
||||
@@ -239,7 +239,7 @@ export default {
|
||||
tip: false,
|
||||
searchShow: true,
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
searchMenuSpan: 24,
|
||||
searchIcon: true,
|
||||
searchIndex: 4,
|
||||
|
||||
@@ -397,7 +397,7 @@ export default {
|
||||
labelWidth: '108px',
|
||||
tip: false,
|
||||
searchShow: true,
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
searchIcon: true,
|
||||
searchIndex: 4,
|
||||
searchMenuSpan: 24,
|
||||
|
||||
@@ -291,7 +291,7 @@ export default {
|
||||
label: '区划备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 6,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
},
|
||||
],
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
</el-form>
|
||||
<div class="waybill-import-create__form-actions"><el-button @click="createVisible = false">关闭</el-button><el-button @click="saveDraft">保存草稿</el-button><el-button type="primary" @click="confirmImport">确认导入</el-button></div>
|
||||
</section>
|
||||
<section class="waybill-import-create__detail-panel" v-if="rows.length"><div class="waybill-import-create__detail-head"><div class="dialog-section-title">导入数据明细</div><el-button type="danger" plain :disabled="!rowSelection.length" @click="removeSelectedRows">批量删除</el-button></div><el-tabs v-model="previewTab"><el-tab-pane :label="`运单数(${rows.length})`" name="all" /><el-tab-pane :label="`疑似重复(${duplicateRows.length})`" name="duplicate" /></el-tabs><el-table :data="previewRows" border max-height="440" @selection-change="rowSelection = $event"><el-table-column type="selection" width="55" /><el-table-column type="index" label="序号" width="65" /><el-table-column v-for="column in detailColumns" :key="column.prop" :prop="column.prop" :label="column.label" :min-width="column.minWidth || 150" show-overflow-tooltip><template #default="{ row }"><template v-if="row._editing"><el-select v-if="column.editor === 'transportType'" v-model="row.transportType" clearable filterable placeholder="请选择"><el-option v-for="item in transportTypeOptions" :key="item.value" :label="item.label" :value="item.value" /></el-select><el-select v-else-if="column.editor === 'driver'" v-model="row.driverName" clearable filterable placeholder="请选择" @change="value => handleEditorChange(column, row, value)"><el-option v-for="item in driverOptions" :key="item.id || item.driverName || item.name" :label="item.driverName || item.name" :value="item.driverName || item.name" /></el-select><el-cascader v-else-if="column.editor === 'cargoType'" :model-value="resolveCargoTypePath(row)" :options="cargoTypeOptions" :props="{ label: 'cargoName', value: 'id', children: 'children', emitPath: true }" clearable filterable placeholder="请选择" @change="value => handleEditorChange(column, row, value)" /><el-select v-else-if="column.editor === 'cargoName'" v-model="row.cargoName" clearable filterable placeholder="请选择" @visible-change="visible => visible && loadCommonCargoOptions(row)" @change="value => handleEditorChange(column, row, value)"><el-option v-for="item in getCommonCargoOptions(row)" :key="item.id || item.cargoName || item.name" :label="formatCargoTypeLabel(item)" :value="formatCargoTypeLabel(item)" /></el-select><el-date-picker v-else-if="column.editor === 'datetime'" v-model="row[column.prop]" type="datetime" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择" /><el-input v-else-if="column.editor === 'textarea'" v-model="row[column.prop]" type="textarea" :autosize="{ minRows: 1, maxRows: 3 }" :placeholder="`请输入${column.label}`" /><el-input v-else-if="column.editor === 'number'" :model-value="row[column.prop]" inputmode="decimal" :placeholder="`请输入${column.label}`" @input="value => updateEditorValue(column, row, value)" /><el-input v-else v-model="row[column.prop]" :placeholder="`请输入${column.label}`" /></template><span v-else>{{ formatCell(row, column) }}</span></template></el-table-column><el-table-column label="操作" width="180" fixed="right"><template #default="{ row }"><template v-if="row._editing"><el-link type="primary" @click="saveRow(row)">保存</el-link><el-link type="primary" @click="cancelRow(row)">取消</el-link></template><template v-else><el-link type="primary" @click="editRow(row)">编辑</el-link><el-link type="danger" @click="deleteRow(row)">删除</el-link></template></template></el-table-column></el-table></section>
|
||||
<section class="waybill-import-create__detail-panel" v-if="rows.length"><div class="waybill-import-create__detail-head"><div class="dialog-section-title">导入数据明细</div><el-button type="danger" plain :disabled="!rowSelection.length" @click="removeSelectedRows">批量删除</el-button></div><el-tabs v-model="previewTab"><el-tab-pane :label="`运单数(${rows.length})`" name="all" /><el-tab-pane :label="`疑似重复(${duplicateRows.length})`" name="duplicate" /></el-tabs><el-table :data="previewRows" border max-height="440" @selection-change="rowSelection = $event"><el-table-column type="selection" width="55" /><el-table-column type="index" label="序号" width="65" /><el-table-column v-for="column in detailColumns" :key="column.prop" :prop="column.prop" :label="column.label" :min-width="column.minWidth || 150" show-overflow-tooltip><template #default="{ row }"><template v-if="row._editing"><el-select v-if="column.editor === 'transportType'" v-model="row.transportType" clearable filterable placeholder="请选择"><el-option v-for="item in transportTypeOptions" :key="item.value" :label="item.label" :value="item.value" /></el-select><el-select v-else-if="column.editor === 'driver'" v-model="row.driverName" clearable filterable placeholder="请选择" @change="value => handleEditorChange(column, row, value)"><el-option v-for="item in driverOptions" :key="item.id || item.driverName || item.name" :label="item.driverName || item.name" :value="item.driverName || item.name" /></el-select><el-cascader v-else-if="column.editor === 'cargoType'" :model-value="resolveCargoTypePath(row)" :options="cargoTypeOptions" :props="{ label: 'cargoName', value: 'id', children: 'children', emitPath: true }" clearable filterable placeholder="请选择" @change="value => handleEditorChange(column, row, value)" /><el-select v-else-if="column.editor === 'cargoName'" v-model="row.cargoName" clearable filterable placeholder="请选择" @visible-change="visible => visible && loadCommonCargoOptions(row)" @change="value => handleEditorChange(column, row, value)"><el-option v-for="item in getCommonCargoOptions(row)" :key="item.id || item.cargoName || item.name" :label="formatCargoTypeLabel(item)" :value="formatCargoTypeLabel(item)" /></el-select><el-date-picker v-else-if="column.editor === 'datetime'" v-model="row[column.prop]" type="datetime" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择" /><el-input v-else-if="column.editor === 'textarea'" v-model="row[column.prop]" type="textarea" :autosize="{ minRows: 2, maxRows: 3 }" :placeholder="`请输入${column.label}`" /><el-input v-else-if="column.editor === 'number'" :model-value="row[column.prop]" inputmode="decimal" :placeholder="`请输入${column.label}`" @input="value => updateEditorValue(column, row, value)" /><el-input v-else v-model="row[column.prop]" :placeholder="`请输入${column.label}`" /></template><span v-else>{{ formatCell(row, column) }}</span></template></el-table-column><el-table-column label="操作" width="180" fixed="right"><template #default="{ row }"><template v-if="row._editing"><el-link type="primary" @click="saveRow(row)">保存</el-link><el-link type="primary" @click="cancelRow(row)">取消</el-link></template><template v-else><el-link type="primary" @click="editRow(row)">编辑</el-link><el-link type="danger" @click="deleteRow(row)">删除</el-link></template></template></el-table-column></el-table></section>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<business-crud-page :api="api" :config="config" :crud-option="option" :menu-width="245" />
|
||||
<business-crud-page :api="api" :config="config" :crud-option="option" :menu-width="252" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
@@ -103,7 +103,7 @@ export default {
|
||||
value: 1,
|
||||
span: 24,
|
||||
width: 120,
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
row: true,
|
||||
dicUrl: '/blade-system/dict/dictionary?code=oss',
|
||||
props: {
|
||||
|
||||
@@ -102,7 +102,7 @@ export default {
|
||||
value: 1,
|
||||
span: 24,
|
||||
width: 100,
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
row: true,
|
||||
dicUrl: '/blade-system/dict/dictionary?code=sms',
|
||||
props: {
|
||||
|
||||
@@ -152,7 +152,7 @@ export default {
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
span: 24,
|
||||
minRows: 6,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
},
|
||||
],
|
||||
|
||||
@@ -87,7 +87,7 @@ export default {
|
||||
value: 1,
|
||||
span: 24,
|
||||
width: 120,
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
row: true,
|
||||
gridRow: true,
|
||||
dicUrl: '/blade-system/dict/dictionary?code=datasource_category',
|
||||
@@ -110,7 +110,7 @@ export default {
|
||||
label: 'YAML',
|
||||
prop: 'shardingConfig',
|
||||
span: 24,
|
||||
minRows: 5,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
display: false,
|
||||
gridRow: true,
|
||||
|
||||
@@ -89,7 +89,7 @@ export default {
|
||||
value: 1,
|
||||
span: 24,
|
||||
width: 120,
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
row: true,
|
||||
gridRow: true,
|
||||
display: false,
|
||||
@@ -113,7 +113,7 @@ export default {
|
||||
label: 'YAML',
|
||||
prop: 'shardingConfig',
|
||||
span: 24,
|
||||
minRows: 5,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
display: false,
|
||||
gridRow: true,
|
||||
|
||||
@@ -1350,7 +1350,7 @@ export default {
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
order: -1;
|
||||
margin-right: auto;
|
||||
margin-right: 12px;
|
||||
min-width: 0;
|
||||
|
||||
:deep(.el-check-tag) {
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
批量删除
|
||||
</el-button>
|
||||
</template>
|
||||
<template #expireStatus-search>
|
||||
<template #search-menu>
|
||||
<div class="transport-ship-page__expiry-tags">
|
||||
<el-check-tag
|
||||
v-for="item in expiryTagOptions"
|
||||
@@ -1051,7 +1051,9 @@ export default {
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
width: 100%;
|
||||
order: -1;
|
||||
margin-right: 12px;
|
||||
min-width: 0;
|
||||
|
||||
:deep(.el-check-tag) {
|
||||
margin: 0;
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
>批量删除
|
||||
</el-button>
|
||||
</template>
|
||||
<template #expireStatus-search>
|
||||
<template #search-menu>
|
||||
<div class="transport-vehicle-page__expiry-tags">
|
||||
<el-check-tag
|
||||
v-for="item in expiryTagOptions"
|
||||
@@ -1195,7 +1195,9 @@ export default {
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
width: 100%;
|
||||
order: -1;
|
||||
margin-right: 12px;
|
||||
min-width: 0;
|
||||
|
||||
:deep(.el-check-tag) {
|
||||
margin: 0;
|
||||
|
||||
@@ -41,7 +41,7 @@ export default {
|
||||
label: '个性签名',
|
||||
prop: 'textarea',
|
||||
type: 'textarea',
|
||||
minRows: 8,
|
||||
minRows: 2,
|
||||
row: true,
|
||||
},
|
||||
],
|
||||
|
||||
@@ -112,7 +112,7 @@ export default {
|
||||
label: '个性签名',
|
||||
prop: 'textarea',
|
||||
type: 'textarea',
|
||||
minRows: 8,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
overHidden: true,
|
||||
row: true,
|
||||
|
||||
@@ -193,7 +193,7 @@ export default {
|
||||
dialogWidth: 960,
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
tip: false,
|
||||
searchShow: true,
|
||||
searchMenuSpan: 24,
|
||||
@@ -346,7 +346,7 @@ export default {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 5,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
hide: true,
|
||||
placeholder: '请输入',
|
||||
|
||||
@@ -180,7 +180,7 @@ export default {
|
||||
dialogWidth: 960,
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
searchLabelWidth: 160,
|
||||
searchLabelWidth: 88,
|
||||
tip: false,
|
||||
searchShow: true,
|
||||
searchMenuSpan: 24,
|
||||
@@ -333,7 +333,7 @@ export default {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 5,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
hide: true,
|
||||
placeholder: '请输入',
|
||||
|
||||
+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