Merge remote-tracking branch 'websoft/master'

This commit is contained in:
2026-08-13 20:56:00 +08:00
44 changed files with 1170 additions and 806 deletions
+31
View File
@@ -0,0 +1,31 @@
# 2026-08-12
## 全站自定义表单弹窗样式统一为客商档案风格
- 新增全局弹窗表单标准类 `.dialog-form--carded``src/styles/element-ui.scss`),统一实现:
- `section-card` 白底卡片分组
- label 固定宽度 `calc(6em + 24px)`、右对齐、上下居中
- input/select/cascader/tree-select/date-editor/textarea 等控件固定宽度 250px
- radio/checkbox 组宽度自适应
- 改造文件清单:
- `src/views/flow/manager.vue`:流程变更弹窗
- `src/views/flow/follow.vue`:流程删除弹窗
- `src/views/system/param.vue`:参数编辑弹窗
- `src/views/system/authlock.vue`:锁定用户、解锁确认弹窗
- `src/views/system/user.vue`:用户编辑、修改密码弹窗
- `src/views/business/components/waybill-import-dialog.vue`:新建导入弹窗表单区
- 已跳过(非编辑表单弹窗):`system/dept.vue` 承运商选择搜索弹窗、`business/master-order-editor.vue` 页面级组件。
- `npm run build` 构建通过。
## 港口码头(port-terminal)编辑弹窗 input 宽度统一 250px
- 文件:`src/views/base/port-terminal.vue`
- 做法:option 加 `dialogCustomClass: 'port-terminal-edit-dialog'`,并在文件末尾新增非 scoped `<style>` 块,`.port-terminal-edit-dialog .el-input { width: 250px !important }`
- 说明:弹窗 `append-to-body`,scoped 命中不到,故用全局样式 + 自定义 dialog class 限定作用域;`.el-input``.el-select` 统一 `width: 250px !important`(含 formslot 内带内联 `width:100%` 的 country/cityCode/districtCode 下拉,!important 覆盖)。`textarea`(详细地址/备注)、类型 `el-radio-group` 维持自适应,未改。新增弹窗复用同一 dialog,故一并生效。
## 港口码头 详细地址/备注字段形态调整(接续上方宽度统一)
- `detailAddress`:移除 `type: 'textarea'` / `minRows: 3` 改单行 input;因属整行字段需放宽,启用 `formslot` + 模板 `#detailAddress-form` 手写 `<el-input class="detail-address-input">`,并用 `.port-terminal-edit-dialog .detail-address-input { width: 100% !important }` 覆盖全局 250px 规则,占满整行。表格列仍由 `slot: true` + `#detailAddress` 显示插槽控制。
- `remark``minRows: 4``2`(约 2 行高度),仍为 textarea(本身不受 250px 规则约束,已是整行宽)。
- 表单字段排序调整:按截图示意重新排为——类型(10) → 名称(20) → 编码(30) → 国家(40) → 城市(50) → 区县(60) → 详细地址(70) → 经度(80) → 纬度(90) → 上级港口(100) → 备注(无 order 置底)。即区县和详细地址插在国家/城市那一行下面。
- 备注宽度改为 80%`remark``formslot: true` + 模板 `#remark-form` 手写 `<el-input type="textarea" class="remark-input" :rows="2" maxlength="200" show-word-limit>`CSS `.port-terminal-edit-dialog .remark-input { width: 80% !important }`。注意:详细地址 `.detail-address-input` 当前宽度为 81%(用户手动调整,非本次设定)。
+95
View File
@@ -0,0 +1,95 @@
# 2026-08-13 工作记录
## business-crud-page.vue UI 对齐 customer-archivesection-card 间隔 + 表单排列统一)
### 问题
- 该组件内 `.section-card { margin-bottom: 0 !important }`scoped 顶层)把全局 8px 卡片间距清零,导致弹窗里的 section-card 卡片贴在一起(与 customer-archive 的留白不一致)。
- 手写的 dispatch-item 表单 markup 仍写 `label-width="auto"`(虽被共享 CSS 块强制为 `calc(6em+24px)`,但不直观)。
### 改动(src/views/business/components/business-crud-page.vue
1. 删除 `margin-bottom:0 !important` 覆盖,改为 `.section-card{margin-bottom:8px !important; &:last-child{margin-bottom:0}}`,与 customer-archive/全局 element-ui.scss 的 8px 节奏一致。
2. `.business-crud-page__detail-content`(详情弹窗,原本 `gap:12px`)改为 `gap:8px` 并给内部 `.section-card{margin-bottom:0 !important}`,避免 8px 外边距 + gap 双重留白。
3. `:deep(.avue-form__group:has(.dialog-section-title))` 白卡 `margin-bottom:16px→8px`,使主弹窗分组白卡与 section-card 同节奏。
4. `&__dispatch-summary``margin-bottom:12px→8px`
5. dispatch-item 表单 `label-width="auto"→"calc(6em + 24px)"`(与 task-form/freight-form 共享的 label 标准一致;参考 customer-archive 的右侧固定宽 label + `el-row :gutter` 网格思路)。
### 验证
- 仅改 scoped SCSS + 1 处 markup 属性,未动逻辑;SFC 结构未变。表单组件排列本就通过共享 `__task-form/__freight-form/__dispatch-item-form` 块统一为 `calc(6em+24px)` label + 4 列网格,本次使其显式对齐。
## 弹窗样式与交互调整(base 模块)
### 1. port-terminal.vue 港口/码头弹窗
- 去掉浏览器 input autocomplete 地址联想:新增 `disableDialogAutocomplete()` 方法(批量给 `.port-terminal-edit-dialog` 内 input/textarea 设 autocomplete=off 等),在 `beforeOpen` 两个分支 `done()` 后用 `setTimeout(50)` 调用。
- option 字段调整(用户此前需求,已指导):详细地址 `detailAddress``span:24→12``order:86→88`,与区县 `districtCode`(span12,order87) 并排。
### 2. railway-station.vue 铁路车站弹窗
- label 宽度 85→108option `labelWidth:'auto'→'108px'`(字符串不生效),再补 `dialogCustomClass:'railway-station-edit-dialog'` + 非 scoped `<style>` 强制 `.el-form-item__label{width:108px!important}`
### 3. 全站弹窗底部浮动按钮(统一规范)
-`src/styles/element-ui.scss` 新增全局规则:`.el-dialog__body{max-height:calc(100vh-200px);overflow-y:auto}` + `.el-dialog__footer{白底+上边框+轻阴影}`,实现取消/保存按钮固定在底部(参照 business/project-apply)。全站 Avue 弹窗自动生效,含 railway-station。已记入 MEMORY.md 长期规范。
### 4. port-terminal.vue 字段分组白卡 + label 108(本次)
- 改用 Avue `option.group` 把表单分成 3 张白卡:基础信息 / 位置信息 / 其他信息(对齐 driver/vehicle/ship/customer-archive 的 section-card 风格)。
- root `column` 保留不动(脚本大量用 `findColumn(this.option.column,...)` 动态设 dicData/显示),在 `created()` 里循环把 root 列 `display=false`,使其只服务表格/搜索、不重复渲染进表单。
- 新增 `getColumnsByProp(prop)` 助手,统一把 8 处 `dicData`/显示切换同时作用于 root 与 group 两处(否则 group 列的级联下拉不会刷新)。
- 样式:外层 `.avue-form` 透明化(卡片交由分组);`.avue-form__group` 白卡 + 4px 主色竖条标题 + 内容区左右 16px;`.el-form-item__label{width:108px!important}` 对齐 railway-station。
- 关键坑:Avue form 的 `columnOption` 会把 root column 也作为「无标题组」渲染进表单,故 group 页必须给 root 列 `display:false`,否则字段重复;且动态 dicData 必须双写 root+group。
### 5. port-terminal.vue 回退分组白卡 + label 108(用户要求)
- 用户决定不在本页使用分组白卡与 label 宽度 108,已全部回退:
- 删除 `option.group` 三张白卡,恢复扁平 `column` 结构(`sed` 删 695974 行)。
- `created()` 去掉 root 列 `display=false` 循环;删除 `getColumnsByProp` 助手;`setColumnDisplay` 与 8 处 `dicData`/显示切换全部还原为 `findColumn(this.option.column, prop)` 写法。
- 样式块恢复:`.avue-form` 恢复为单张白卡(去透明化),删除 `.avue-form__group` 分组白卡规则与 `.el-form-item__label{width:108px}`;保留灰底 + 浮动底栏统一风格、input/select 250px、备注 85%。
- 校验:SFC 解析通过,无 getColumnsByProp/group/avue-form__group/label108 残留。
### 6. railway-station.vue 对齐 port-terminal 统一风格(用户要求"按 port-terminal 效果改"
- 扩充 `.railway-station-edit-dialog` 非 scoped 样式块,对齐 port-terminal:灰底 `.el-dialog__body`(#f2f2f2, padding 8px) + 表单白卡 `.avue-form`(白底/圆角6/轻阴影/内边距16px) + 浮动底栏 `.avue-dialog__footer`(白底/圆角/轻阴影/右对齐) + 输入框 `.el-input,.el-select` 宽 250px + 备注 `.remark-input` 宽 85%。
- 给备注字段(`prop:'remark'`)加 `class:'remark-input'`,使备注 85% 规则生效(原字段仅 `type:textarea`,无 class)。
- 保留用户之前要求的 `labelWidth:'108px'``.el-form-item__label{width:108px!important}`
- 未包含 port-terminal 的「关闭浏览器地址联想 autocomplete」逻辑(用户未要求,railway 未反馈该问题);如需一致可后续补。
- 校验:SFC 解析通过。
### 7. 方向纠正:应改 port-terminal 参考 railway-station(非改 railway 参考 port
- 用户澄清:第6条方向搞反了。正确语义是「改 port-terminal,参考 railway-station」。railway-station 是参考样板,不应被改。
- 还原 railway-station(撤销第6条):删除误加的冗余专属灰底白卡/250px/备注85% 块(该块 `.avue-form{padding:16px}` 会与全局 `.el-dialog .avue-form` 的 24px 冲突造成不齐),仅保留 `labelWidth:'108px'` + `.el-form-item__label{width:108px!important}`;移除备注字段误加的 `class:'remark-input'`
- 关键认知:全局 `src/styles/element-ui.scss` 第240-265行**已有完整弹窗标准规则**(灰底 `.el-dialog__body`#f2f2f2 + 白卡 `.el-dialog .avue-form` padding 24px + 浮动底栏 `.avue-crud__dialog .avue-dialog__footer`)。railway-station「整齐」即靠全局规则 + label 108;专属块属冗余且会覆盖全局 24px→16px 导致不齐。
- 改造 port-terminal 对齐 railway-station:保留专属灰底白卡兜底(其历史未命中全局,保留以防回归),补 `labelWidth:'108px'` + 样式块 `.el-form-item__label{width:108px!important}`;并将专属块 `.avue-form` padding 由 16px 改为 **24px** 以与全局/railway 一致。
- 校验:两文件 SFC 解析通过;railway 无 remark-input/padding16px 残留;port-terminal 已含 label 108 + padding 24px。
### 8. railway-station.vue label 加宽(用户反馈太挤)
- 用户反馈新增弹窗中"所属区县"label 太挤(实测约 85×32px),要求加宽。
- 已把 `option.labelWidth: '108px' → '140px'`,同步全局覆盖 `.el-form-item__label{width:108px!important} → 140px!important`
- 140px 够"所属区县"4字+必填星号+留白,也覆盖表单其他 label("行政区划编号"6字 + * 也够)。若仍觉不够可再调到 160px。
## process-config.vue 套用 customer-archive 样式(用户要求"和 business-crud-page 一样的问题"
- 根因同商务页:本页原用灰色 `div.dialog-section-title` 标题 + 自定义 `__field` flex 布局(label `flex:0 0 150px`),既无白卡样式也无 8px 卡片间距,与 customer-archive 的 `<section-card>` 白卡风格不一致。Avue form 本身 `labelPosition:'right'``labelWidth:'auto'`,故原页才需自定义固定宽 label。
- 改动(src/views/business/process-config.vue):
1. `#basicInfo-form` 槽:去掉 `process-config-page__section` + `dialog-section-title`,改为 `<section-card title="基本信息">` + 嵌套 `<el-form label-position="right" label-width="calc(6em + 24px)">` + `<el-row :gutter="18">` + `el-col`(配置名称6/项目6/运输完成时限12/备注24) + `el-form-item`,与 customer-archive 右侧固定宽 label 栅格完全对齐。必填项加 `required`
2. `#nodeConfigJson-form` 槽:两个 `dialog-section-title`(现行过程节点 / 节点设置)分别改为 `<section-card title=...>` 包裹(timeline 与 el-table 内容不变)。
3. 删除不再使用的 `__section/__field/__field-label/__field-label--required` 样式;保留 `__finish-days` 与节点表格相关样式。
- 卡片间距:全局 `.section-card{margin-bottom:8px}` 在本页生效(无 `!important` 覆盖),三张白卡自动保持 8px 间隔。
- 校验:@vue/compiler-sfc 编译通过,3 个 section-card 均正确闭合;未动任何业务逻辑(validateRow/syncNodeFields 等不变)。
## business-crud-page.vue 待调度列表汇总「件」蓝色高亮
- 需求:调度弹窗「待调度列表」标题右侧汇总 `共50吨、100件 | 已调度 50吨、100件,剩余0吨、0件` 中,单位是「件」的数字用蓝色显示。
- 改造(src/views/business/components/business-crud-page.vue):
1. 新增 computed `dispatchSummarySegments`,把原纯文本 `dispatchSummaryText` 拆成结构化三段(共/已调度/剩余),每段 items 带 `{unit, value, isPiece: unit==='件'}`,文本拼接方式与原格式完全一致(含空格、`|``、`、逗号)。
2. 模板(约 2546 行)由 `{{ dispatchSummaryText }}` 改为 `v-for` 渲染;`件` 数字包裹 `<span class="dispatch-summary-value is-piece">`
3. 样式:`.business-crud-page__dispatch-list-summary .dispatch-summary-value.is-piece { color:#409eff; font-weight:600 }`(项目主蓝,轻微加粗更醒目)。
- 校验:文本格式与原串逐字符一致,仅「件」数字变色;未动 `dispatchSummaryItems` 等其它逻辑。
- 修正(用户反馈):原把整段「数字+件」一起变蓝导致「件」字也蓝。改为数字与单位拆成两个 span(`dispatch-summary-value` 仅含数字、`dispatch-summary-unit` 含单位),蓝色与加粗只作用于数字,「件」字保持默认色。
- 二次修正(用户反馈):「吨」数字也要蓝。将 `isPiece``unit==='件'` 放宽为恒 `true`,即所有单位的数字均蓝色、单位字默认色(覆盖 吨/件/方 等)。
## business-crud-page.vue 调度弹窗顶部两卡片对齐 + 下方间距 12px
- 需求:截图显示「基本信息」与「收发货路线」两张 section-card 高度不一致,且与下方「待调度列表」间距需 12px。
- 改动(src/views/business/components/business-crud-page.vue):
1. `&__dispatch-summary` 容器 `margin-bottom:8px→12px`,并在容器内覆盖 `.section-card{margin-bottom:0 !important}`,避免 section-card 自带 8px margin 与容器 margin 叠加。
2. `&__dispatch-summary-card``&__dispatch-route-card``min-height:260px`;内部 `:deep(.section-card)``:deep(.section-card__body)``flex:1` 并设 `display:flex;flex-direction:column`,确保左右卡片外框与内部白底区域都等高对齐。
- 校验:grid `align-items:stretch` + section-card flex:1 撑满,卡片底部会对齐;下方间距精确 12px。
## business-crud-page.vue「货物信息」标题与右侧链接水平对齐
- 需求:截图显示「货物信息」标题与右侧「导入货物」「常用货物」两个 `el-link` 不在同一水平线。
- 改动(src/views/business/components/business-crud-page.vue):
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` 的货物信息标题都会生效。
+8
View File
@@ -24,6 +24,14 @@
### 简单分组(仅 3 项)
- 联系信息等仅 3 项的分组,可用 `el-col :span="8"` 让三项均分一行,避免 4 列网格留白。
### 弹窗底部操作栏浮动效果(全站统一规范)
- **需求来源**:用户要求参考 `business/project-apply`(手写 el-dialog + `#footer` slotbody `max-height:76vh;overflow-y:auto`footer 固定底部)实现"取消/保存按钮浮动在底部"。因绝大多数页面是 Avue CRUD 内置弹窗(无法用 `#footer` slot),统一用**全局 CSS** 实现,全站自动生效。
- **实现位置**`src/styles/element-ui.scss`(在 `.el-dialog .el-form-item` 规则之后新增)。
- **规则**
- `.el-dialog__body { max-height: calc(100vh - 200px); overflow-y: auto; overflow-x: hidden; }` —— 内容超高时独立滚动,footer(位于 body 之外)始终可见。
- `.el-dialog__footer { margin:0; padding:12px 20px; background:#fff; border-top:1px solid var(--el-border-color-lighter,#ebeef5); box-shadow:0 -2px 8px rgba(0,0,0,.04); border-radius:0 0 var(--el-dialog-border-radius,4px); .el-button+.el-button{margin-left:8px} }` —— 视觉底栏(白底+上边框+轻阴影),与主内容区分。
- **注意**`.el-dialog__body``max-height` 会作用于所有弹窗(含纯展示/表格弹窗),无 footer 的弹窗不受影响;project-apply 自身 `.project-apply-dialog .el-dialog__body{76vh}` 特异性更高仍优先。如需让某弹窗豁免,加更具体 class 覆盖即可。
### 上传证件区域尺寸规范(transportCapacity 模块强制)
- **比例**:中国二代身份证标准尺寸 85.6 × 53.98 mm → 宽:高 = **1.586 : 1**(横放)
- **尺寸**:取真实身份证的 ~75% → 固定 **240 × 151 px**1.586:1 精确:151 × 1.586 ≈ 240
+1 -1
View File
@@ -172,7 +172,7 @@ export const getCargoTypeOption = ctx => ({
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 180,
placeholder: '请输入',
+2 -2
View File
@@ -74,7 +74,7 @@ export const createOption = () => ({
prop: 'detailAddress',
formslot: true,
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
minWidth: 220,
showOverflowTooltip: true,
@@ -136,7 +136,7 @@ export const createOption = () => ({
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 160,
overHidden: true,
+1 -1
View File
@@ -254,7 +254,7 @@ export const option = createCrudOption([
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
maxlength: 200,
showWordLimit: true,
+1 -1
View File
@@ -127,7 +127,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 180,
maxlength: 500,
+1 -1
View File
@@ -253,7 +253,7 @@ export const option = createCrudOption([
prop: 'signType',
type: 'select',
search: false,
span: 6,
span: 8,
order: 190,
dicData: signTypeOptions,
minWidth: 120,
+1 -1
View File
@@ -101,7 +101,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 180,
addDisplay: false,
+2 -2
View File
@@ -373,7 +373,7 @@ export default {
label: '任务描述',
prop: 'jobDescription',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
},
],
@@ -509,7 +509,7 @@ export default {
labelTip: '供开发者使用,用于功能扩展,powerjob 自身不会使用该字段',
prop: 'extra',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
},
],
+1 -1
View File
@@ -74,7 +74,7 @@ export default {
label: '任务备注',
prop: 'jobRemark',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
},
],
+2 -2
View File
@@ -147,7 +147,7 @@ export const option = {
label: '事故原因及损坏情况',
prop: 'accidentReasonDamage',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
search: true,
minWidth: 220,
@@ -159,7 +159,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
minWidth: 180,
overHidden: true,
@@ -166,7 +166,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
minWidth: 180,
overHidden: true,
+1 -1
View File
@@ -124,7 +124,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
order: 10,
minWidth: 180,
+1 -1
View File
@@ -137,7 +137,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 180,
overHidden: true,
+1 -1
View File
@@ -167,7 +167,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
hide: true,
rules: [{ max: 200, message: '备注最多 200 个字', trigger: 'blur' }],
+1 -1
View File
@@ -118,7 +118,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 180,
overHidden: true,
+1 -1
View File
@@ -155,7 +155,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 180,
overHidden: true,
+1 -1
View File
@@ -127,7 +127,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 180,
overHidden: true,
@@ -123,7 +123,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 180,
overHidden: true,
@@ -65,7 +65,7 @@ export const option = {
label: '变更内容',
prop: 'changeContent',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
search: true,
minWidth: 260,
@@ -79,7 +79,7 @@ export const option = {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
minWidth: 180,
overHidden: true,
+2 -2
View File
@@ -181,7 +181,7 @@ export const option = {
label: '过程描述',
prop: 'processDescription',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
minWidth: 220,
overHidden: true,
@@ -195,7 +195,7 @@ export const option = {
label: '处理结果',
prop: 'processResult',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
minWidth: 220,
overHidden: true,
+70 -5
View File
@@ -173,7 +173,29 @@
.el-dialog .el-form-item--small.el-form-item,
.el-dialog .el-form-item--large.el-form-item,
.el-dialog .el-form-item--medium.el-form-item {
margin-bottom: 20px;
//margin-bottom: 20px;
}
/* 全站弹窗:底部操作栏浮动效果(参照 business/project-apply
* - body 超高时内部独立滚动,footer(取消/保存等按钮)始终固定在底部可见
* - footer 加视觉底栏:白底 + 上边框 + 轻阴影,与主内容区分 */
.el-dialog__body {
max-height: calc(100vh - 200px);
overflow-y: auto;
overflow-x: hidden;
}
.el-dialog__footer {
margin: 0;
padding: 12px 20px;
background: #fff;
border-top: 1px solid var(--el-border-color-lighter, #ebeef5);
//box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.04);
border-radius: 0 0 var(--el-dialog-border-radius, 4px);
.el-button + .el-button {
margin-left: 8px;
}
}
.el-dialog__title,
@@ -217,7 +239,7 @@
// 1) 所有弹窗内容区统一灰底 + 8px 内边距(全站统一)
.el-dialog__body {
background-color: #f2f2f2;
padding: 8px !important;
padding: 12px !important;
}
// Avue CRUD 弹窗:表单白卡 + 底部按钮区视觉合一(按钮在卡片内部)
@@ -305,9 +327,9 @@
}
}
// 4) 弹窗内表单项默认上下间距 20px(覆盖默认 18px / 22px,与 customer-archive 对齐)
// 4) 弹窗内表单项默认上下间距 16px(覆盖默认 18px / 22px,与 customer-archive 对齐)
.el-dialog .el-form-item {
margin-bottom: 20px;
//margin-bottom: 16px;
}
// 5) 通用分组白卡组件(<section-card>):标题融入卡头
@@ -315,7 +337,8 @@
background: #fff;
border-radius: 6px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
margin-bottom: 8px;
margin-bottom: 12px;
padding-bottom: 8px;
overflow: hidden;
&:last-child {
@@ -362,6 +385,40 @@
row-gap: 0;
}
// 7) 卡片式弹窗表单标准(与 vehicle/customer-archive 编辑弹窗一致)
// 在 el-dialog 上添加 class="dialog-form--carded" 即可生效
.dialog-form--carded {
.el-form-item {
align-items: center;
margin-bottom: 20px;
}
.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__content > .el-input,
.el-form-item__content > .el-select,
.el-form-item__content > .el-cascader,
.el-form-item__content > .el-tree-select,
.el-form-item__content > .el-input-number,
.el-form-item__content > .el-date-editor,
.el-form-item__content > .el-textarea {
width: 250px;
max-width: 100%;
}
.el-form-item__content > .el-radio-group,
.el-form-item__content > .el-checkbox-group {
width: auto;
}
}
.avue-crud__dialog .avue-dialog__footer > .el-button {
margin-left: 12px;
}
@@ -724,3 +781,11 @@
opacity: 0.55;
}
}
.avue-crud__dialog .avue-dialog__footer{
border-top: 0 !important;
margin-top: -30px !important;
}
.el-form-item__label {
margin-left: 20px !important;
}
+2 -2
View File
@@ -370,7 +370,7 @@ export default {
label: '详细地址',
prop: 'detailAddress',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
minWidth: 220,
overHidden: false,
@@ -429,7 +429,7 @@ export default {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
hide: true,
maxlength: 200,
+1 -1
View File
@@ -271,7 +271,7 @@ export default {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
hide: true,
maxlength: 200,
+101 -18
View File
@@ -75,6 +75,7 @@
filterable
:disabled="isParentRegionLocked"
:placeholder="isParentRegionLocked ? '自动带出' : '请选择国家'"
autocomplete="off"
style="width: 100%"
@change="handleCountryChange"
>
@@ -171,6 +172,27 @@
<template #detailAddress="{ row }">
<span class="port-terminal-page__detail-address">{{ row.detailAddress || '-' }}</span>
</template>
<template #detailAddress-form>
<el-input
v-model="form.detailAddress"
class="detail-address-input"
clearable
maxlength="255"
show-word-limit
placeholder="请输入"
/>
</template>
<template #remark-form>
<el-input
v-model="form.remark"
class="remark-input"
type="textarea"
:rows="2"
maxlength="200"
show-word-limit
placeholder="请输入"
/>
</template>
<template #longitude-form>
<el-input
v-model="form.longitude"
@@ -195,7 +217,7 @@
@load="onLoad(page, query)"
/>
<el-dialog title="港口码头主数据导入" append-to-body v-model="excelBox" width="555px">
<el-dialog title="港口码头主数据导入" append-to-body v-model="excelBox" width="500px">
<avue-form :option="excelOption" v-model="excelForm">
<template #excelTemplate>
<el-button type="primary" @click="handleTemplate">
@@ -303,6 +325,7 @@ const removeExcelColumnsByHeaders = async (blob, options = {}) => {
return new Blob([buffer], { type: 'application/vnd.ms-excel' });
};
const newLocal = '请选择类型';
export default {
data() {
const validateCode = (rule, value, callback) => {
@@ -368,9 +391,10 @@ export default {
option: {
height: 'auto',
calcHeight: 32,
dialogWidth: 980,
dialogWidth: 900,
dialogCustomClass: 'port-terminal-edit-dialog',
labelPosition: 'right',
labelWidth: 'auto',
labelWidth: '108px',
tip: false,
searchShow: true,
searchLabelWidth: 160,
@@ -396,7 +420,7 @@ export default {
formslot: true,
width: 140,
span: 12,
order: 70,
order: 89,
placeholder: '请输入编码',
rules: [
{ required: true, message: '请输入编码', trigger: 'blur' },
@@ -412,7 +436,7 @@ export default {
search: true,
searchOrder: 7,
span: 12,
order: 80,
order: 90,
placeholder: '请输入',
rules: [{ required: true, message: '请输入港口/码头名称', trigger: 'blur' }],
},
@@ -444,7 +468,7 @@ export default {
dicData: [],
hide: true,
span: 12,
order: 90,
order: 100,
placeholder: '请选择',
rules: [{ required: false, message: '请选择上级港口', trigger: 'change' }],
change: ({ value }) => this.handleParentChange(value),
@@ -478,7 +502,7 @@ export default {
filterable: true,
dicData: [],
span: 12,
order: 60,
order: 89,
minWidth: 140,
overHidden: false,
placeholder: '自动带出',
@@ -492,7 +516,7 @@ export default {
formslot: true,
hide: true,
span: 12,
order: 50,
order: 88,
placeholder: '自动带出',
rules: [{ required: true, message: '请选择所属城市', trigger: 'change' }],
},
@@ -515,6 +539,7 @@ export default {
type: 'select',
formslot: true,
hide: true,
order: 87,
props: {
label: 'title',
value: 'id',
@@ -543,7 +568,7 @@ export default {
formslot: true,
minWidth: 130,
span: 12,
order: 20,
order: 68,
placeholder: '请输入',
overHidden: false,
rules: [
@@ -557,7 +582,7 @@ export default {
formslot: true,
minWidth: 130,
span: 12,
order: 10,
order: 66,
placeholder: '请输入',
overHidden: false,
rules: [
@@ -578,13 +603,12 @@ export default {
{
label: '详细地址',
prop: 'detailAddress',
type: 'textarea',
slot: true,
minRows: 3,
span: 24,
formslot: true,
span: 12,
minWidth: 220,
overHidden: false,
order: 30,
order: 86,
placeholder: '请输入',
maxlength: 255,
showWordLimit: true,
@@ -611,8 +635,9 @@ export default {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
formslot: true,
hide: true,
maxlength: 200,
showWordLimit: true,
@@ -805,9 +830,12 @@ export default {
this.clearCityValue();
},
handleCategoryChange(value, reset = true) {
const required = value === '码头';
const parentColumn = this.findColumn(this.option.column, 'parentId');
parentColumn.rules[0].required = value === '码头';
this.setColumnDisplay('parentId', value === '码头');
if (parentColumn && parentColumn.rules && parentColumn.rules[0]) {
parentColumn.rules[0].required = required;
}
this.setColumnDisplay('parentId', required);
if (value === '港口') {
this.form.parentId = undefined;
this.form.parentCode = '';
@@ -1057,7 +1085,7 @@ export default {
return false;
}
if (isBlank(row.category)) {
this.$message.warning('请选择类型');
this.$message.warning(newLocal);
return false;
}
if (row.category === '码头' && isBlank(row.parentId)) {
@@ -1209,6 +1237,7 @@ export default {
this.handleCategoryChange(this.form.category, false);
this.syncTerminalCode();
done();
setTimeout(() => this.disableDialogAutocomplete(), 50);
});
});
return;
@@ -1232,6 +1261,19 @@ export default {
this.handleDistrictChange(this.form.districtCode);
}
done();
setTimeout(() => this.disableDialogAutocomplete(), 50);
});
},
disableDialogAutocomplete() {
this.$nextTick(() => {
const dialog = document.querySelector('.port-terminal-edit-dialog');
if (!dialog) return;
dialog.querySelectorAll('input, textarea').forEach(el => {
el.setAttribute('autocomplete', 'off');
el.setAttribute('autocorrect', 'off');
el.setAttribute('autocapitalize', 'off');
el.setAttribute('spellcheck', 'false');
});
});
},
searchReset() {
@@ -1338,3 +1380,44 @@ export default {
padding: 4px 0;
}
</style>
<style lang="scss">
/* 港口码头编辑/新增弹窗:对齐 railway-station 统一风格(灰底 + 白卡表单 + 浮动底栏,padding 24px 与全局弹窗标准一致) */
//.port-terminal-edit-dialog {
// /* 灰底内容区 */
// .el-dialog__body {
// background-color: #f2f2f2;
// padding: 8px;
// }
// /* 表单白卡(与全局 .el-dialog .avue-form 一致,padding 24px 对齐 customer-archive / railway-station */
// .avue-form {
// background: #fff;
// border-radius: 6px;
// box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
// padding: 24px !important;
// margin-bottom: 0;
// }
// /* 底部按钮区白卡(Avue 弹窗 footer 在 body 内,接续白卡) */
// .avue-dialog__footer {
// background: #fff;
// border-radius: 0 0 6px 6px;
// box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
// padding: 16px 24px !important;
// display: flex;
// justify-content: flex-end;
// }
// /* label 宽度统一 108px(对齐 railway-station,标签对齐更整齐) */
// .el-form-item__label {
// width: 108px !important;
// }
// /* 所有 input 文本框、select 下拉控件统一宽度 250px */
// .el-input,
// .el-select {
// width: 250px !important;
// }
// /* 备注宽度 85% */
// .remark-input {
// width: 85% !important;
// }
//}
</style>
+15 -3
View File
@@ -202,8 +202,9 @@ export default {
height: 'auto',
calcHeight: 32,
dialogWidth: 980,
dialogCustomClass: 'railway-station-edit-dialog',
labelPosition: 'right',
labelWidth: 'auto',
labelWidth: '140px',
tip: false,
searchShow: true,
searchMenuSpan: 24,
@@ -339,7 +340,7 @@ export default {
label: '详细地址',
prop: 'detailAddress',
type: 'textarea',
minRows: 3,
minRows: 2,
span: 24,
minWidth: 220,
overHidden: false,
@@ -393,7 +394,7 @@ export default {
label: '备注',
prop: 'remark',
type: 'textarea',
minRows: 4,
minRows: 2,
span: 24,
hide: true,
maxlength: 200,
@@ -892,5 +893,16 @@ export default {
:deep(.el-table td .cell) {
white-space: nowrap;
}
}
</style>
<style lang="scss">
/* 铁路车站编辑/新增弹窗:强制 label 宽度 140px(覆盖 Avue 默认 auto 计算值),灰底白卡与浮动底栏由全局 element-ui.scss 弹窗标准规则统一提供 */
.railway-station-edit-dialog {
.el-form-item__label {
width: 140px !important;
}
}
</style>
+1 -1
View File
@@ -2348,7 +2348,7 @@ export default {
.loading-detail {
display: flex;
flex-direction: column;
gap: 8px;
//gap: 8px;
color: #303133;
.loading-detail__summary { display: flex; align-items: center; flex-wrap: wrap; gap: 24px; padding: 4px 0 16px; }
.loading-detail__heading { font-size: 20px; font-weight: 600; margin-right: 8px; }
+1 -1
View File
@@ -416,7 +416,7 @@ export default {
.master-list-panel {
background: #fff;
.toolbar {
padding: 12px 12px 0;
padding: 8px;
}
}
.master-card {
+23 -54
View File
@@ -80,31 +80,25 @@
</template>
<template #basicInfo-form>
<div class="process-config-page__section">
<div class="dialog-section-title">基本信息</div>
<el-row :gutter="16">
<el-col :span="8">
<div class="process-config-page__field">
<span
class="process-config-page__field-label process-config-page__field-label--required"
<section-card title="基本信息">
<el-form
:model="form"
label-position="right"
label-width="calc(6em + 24px)"
>
配置名称
</span>
<el-row :gutter="18">
<el-col :span="6">
<el-form-item label="配置名称" required>
<el-input
v-model="form.configName"
:disabled="dialogReadonly"
maxlength="100"
placeholder="请输入"
/>
</div>
</el-form-item>
</el-col>
<el-col :span="8">
<div class="process-config-page__field">
<span
class="process-config-page__field-label process-config-page__field-label--required"
>
项目
</span>
<el-col :span="6">
<el-form-item label="项目" required>
<el-select
v-model="selectedProjectId"
clearable
@@ -124,11 +118,10 @@
:value="String(item.id)"
/>
</el-select>
</div>
</el-form-item>
</el-col>
<el-col :span="8">
<div class="process-config-page__field">
<span class="process-config-page__field-label">运输完成时限</span>
<el-col :span="12">
<el-form-item label="运输完成时限">
<div class="process-config-page__finish-days">
<span>默认</span>
<el-input
@@ -140,11 +133,10 @@
/>
<span>天后完成运输</span>
</div>
</div>
</el-form-item>
</el-col>
<el-col :span="24">
<div class="process-config-page__field">
<span class="process-config-page__field-label">备注</span>
<el-form-item label="备注">
<el-input
v-model="form.remark"
type="textarea"
@@ -154,15 +146,16 @@
show-word-limit
placeholder="请输入"
/>
</div>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
</section-card>
</template>
<template #nodeConfigJson-form>
<div class="process-config-page__custom-form">
<div class="dialog-section-title">现行过程节点</div>
<section-card title="现行过程节点">
<div class="process-config-page__timeline" v-if="enabledNodes.length">
<div class="process-config-page__timeline-line"></div>
<div
@@ -178,8 +171,9 @@
</div>
</div>
<el-empty v-else description="请在节点设置中勾选过程节点" :image-size="72" />
</section-card>
<div class="dialog-section-title">节点设置</div>
<section-card title="节点设置">
<el-table
class="process-config-page__node-table"
border
@@ -363,6 +357,7 @@
</template>
</el-table-column>
</el-table>
</section-card>
</div>
</template>
@@ -1106,32 +1101,6 @@ export default {
<style lang="scss" scoped>
.process-config-page {
&__section {
width: 100%;
}
&__field {
display: flex;
align-items: flex-start;
gap: 10px;
margin-bottom: 16px;
}
&__field-label {
flex: 0 0 150px;
line-height: 32px;
color: #303133;
font-weight: 500;
text-align: right;
white-space: nowrap;
&--required::before {
margin-right: 4px;
color: #f56c6c;
content: '*';
}
}
&__node-value {
white-space: normal;
word-break: break-all;
+5 -5
View File
@@ -1908,7 +1908,7 @@ export default {
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
column-gap: 72px;
row-gap: 0;
margin-bottom: 16px;
margin-bottom: 12px;
background: #fff;
border-radius: 0 0 6px 6px;
padding: 14px 16px 4px;
@@ -1934,7 +1934,7 @@ export default {
&__table {
width: 100%;
margin-bottom: 16px;
margin-bottom: 12px;
background: #fff;
border-radius: 0 0 6px 6px;
padding: 12px;
@@ -1952,7 +1952,7 @@ export default {
}
&__textarea-list {
margin-bottom: 16px;
margin-bottom: 12px;
background: #fff;
border-radius: 0 0 6px 6px;
padding: 14px 16px 4px;
@@ -1975,7 +1975,7 @@ export default {
}
&__material-card {
margin-bottom: 16px;
margin-bottom: 12px;
background: #fff;
border-radius: 6px;
padding: 14px 16px;
@@ -2016,7 +2016,7 @@ export default {
margin: 0 0 16px;
background: #fff;
border-radius: 6px;
padding: 12px;
padding: 12px 0;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}
+3 -3
View File
@@ -200,7 +200,7 @@ export default {
prop: 'oldData',
type: 'textarea',
span: 24,
minRows: 3,
minRows: 2,
hide: true,
},
{
@@ -208,7 +208,7 @@ export default {
prop: 'newData',
type: 'textarea',
span: 24,
minRows: 3,
minRows: 2,
hide: true,
},
{
@@ -216,7 +216,7 @@ export default {
prop: 'recordResult',
type: 'textarea',
span: 24,
minRows: 3,
minRows: 2,
hide: true,
},
{
+1 -1
View File
@@ -153,7 +153,7 @@ const option = reactive({
url: 'link',
},
hide: true,
minRows: 4,
minRows: 2,
span: 24,
},
],
+1 -1
View File
@@ -155,7 +155,7 @@ export default {
url: 'link',
},
hide: true,
minRows: 4,
minRows: 2,
span: 24,
},
+14 -2
View File
@@ -21,12 +21,24 @@
<el-tag>{{ row.suspensionState === 1 ? '激活' : '挂起' }}</el-tag>
</template>
</avue-crud>
<el-dialog title="流程删除" append-to-body v-model="followBox" width="20%">
<el-form :model="form" ref="form" label-width="auto">
<el-dialog
title="流程删除"
append-to-body
v-model="followBox"
width="400px"
class="dialog-form--carded"
>
<section-card title="删除理由">
<el-form :model="form" ref="form" label-position="right" label-width="calc(6em + 24px)">
<el-row :gutter="18">
<el-col :span="24">
<el-form-item label="删除理由">
<el-input v-model="deleteReason" placeholder="请输入删除理由" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</section-card>
<template #footer>
<span class="dialog-footer">
<el-button @click="followBox = false"> </el-button>
+14 -2
View File
@@ -81,8 +81,17 @@
</span>
</template>
</el-dialog>
<el-dialog title="流程变更" append-to-body v-model="stateBox" width="20%">
<el-form :model="form" ref="form" label-width="auto">
<el-dialog
title="流程变更"
append-to-body
v-model="stateBox"
width="400px"
class="dialog-form--carded"
>
<section-card title="流程状态">
<el-form :model="form" ref="form" label-position="right" label-width="calc(6em + 24px)">
<el-row :gutter="18">
<el-col :span="24">
<el-form-item label="流程状态">
<el-select v-model="flowState" placeholder="请选择" value="">
<el-option
@@ -94,7 +103,10 @@
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</section-card>
<template #footer>
<span class="dialog-footer">
<el-button @click="stateBox = false"> </el-button>
+44 -6
View File
@@ -61,11 +61,28 @@
</el-drawer>
<!-- 手动锁定用户 -->
<el-dialog title="锁定用户" append-to-body v-model="lockUserBox" width="500px">
<el-form :model="lockUserForm" label-width="auto" :rules="lockUserRules" ref="lockUserFormRef">
<el-dialog
title="锁定用户"
append-to-body
v-model="lockUserBox"
width="520px"
class="dialog-form--carded"
>
<section-card title="锁定信息">
<el-form
:model="lockUserForm"
label-position="right"
label-width="calc(6em + 24px)"
:rules="lockUserRules"
ref="lockUserFormRef"
>
<el-row :gutter="18">
<el-col :span="24">
<el-form-item label="用户账号">
<el-input :model-value="lockUserForm.account" disabled />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="锁定原因" prop="lockReason">
<el-input
v-model="lockUserForm.lockReason"
@@ -74,25 +91,30 @@
placeholder="请输入锁定原因"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="锁定开始" prop="lockBeginTime">
<el-date-picker
v-model="lockUserForm.lockBeginTime"
type="datetime"
placeholder="不填则立即生效"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="锁定结束" prop="lockEndTime">
<el-date-picker
v-model="lockUserForm.lockEndTime"
type="datetime"
placeholder="不填则永久锁定"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</section-card>
<template #footer>
<span class="dialog-footer">
<el-button @click="lockUserBox = false"> </el-button>
@@ -102,8 +124,21 @@
</el-dialog>
<!-- 解锁原因确认 -->
<el-dialog title="解锁确认" append-to-body v-model="unlockReasonBox" width="450px">
<el-form :model="unlockReasonForm" label-width="auto">
<el-dialog
title="解锁确认"
append-to-body
v-model="unlockReasonBox"
width="520px"
class="dialog-form--carded"
>
<section-card title="解锁原因">
<el-form
:model="unlockReasonForm"
label-position="right"
label-width="calc(6em + 24px)"
>
<el-row :gutter="18">
<el-col :span="24">
<el-form-item label="解锁原因">
<el-input
v-model="unlockReasonForm.unlockReason"
@@ -112,7 +147,10 @@
placeholder="请输入解锁原因(可选)"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</section-card>
<template #footer>
<span class="dialog-footer">
<el-button @click="unlockReasonBox = false"> </el-button>
+25 -7
View File
@@ -126,37 +126,55 @@
<el-dialog
:title="title"
v-model="box"
width="50%"
width="560px"
:before-close="beforeClose"
append-to-body
class="dialog-form--carded"
>
<el-form :disabled="view" ref="form" :model="form" label-width="auto">
<!-- 表单字段 -->
<el-form-item label="参数名:" prop="paramName">
<section-card title="参数信息">
<el-form
:disabled="view"
ref="form"
:model="form"
label-position="right"
label-width="calc(6em + 24px)"
>
<el-row :gutter="18">
<el-col :span="24">
<el-form-item label="参数名" prop="paramName">
<el-input v-model="form.paramName" placeholder="请输入参数名" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="paramKey">
<template #label>
<el-tooltip content="参数键为系统内部唯一标识,请勿随意修改" placement="top">
<el-icon style="margin-right: 4px; vertical-align: middle; color: #909399; cursor: pointer"><el-icon-question-filled /></el-icon>
</el-tooltip>
<span>参数键:</span>
<span>参数键</span>
</template>
<el-input v-model="form.paramKey" placeholder="请输入参数键" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="paramValue">
<template #label>
<el-tooltip content="包含敏感关键词的配置不展示具体数值" placement="top">
<el-icon style="margin-right: 4px; vertical-align: middle; color: #909399; cursor: pointer"><el-icon-question-filled /></el-icon>
</el-tooltip>
<span>参数值:</span>
<span>参数值</span>
</template>
<el-input v-model="form.paramValue" placeholder="请输入参数值" />
</el-form-item>
<el-form-item label="备注:" prop="remark">
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</section-card>
<!-- 表单按钮 -->
<template #footer>
<span v-if="!view" class="dialog-footer">
+1 -1
View File
@@ -216,7 +216,7 @@ export default {
label: '备注',
prop: 'remark',
span: 24,
minRows: 3,
minRows: 2,
hide: true,
type: 'textarea',
},
+28 -9
View File
@@ -181,27 +181,29 @@
top="5vh"
append-to-body
destroy-on-close
class="user-edit-dialog"
class="user-edit-dialog dialog-form--carded"
>
<template #header>
<span class="dialog-title">{{ userDialogMode === 'add' ? '新增用户' : '编辑用户' }}</span>
</template>
<el-form ref="userFormRef" :model="form" :rules="userRules" label-position="right" label-width="120px">
<el-row :gutter="20">
<section-card title="用户信息">
<el-form ref="userFormRef" :model="form" :rules="userRules" label-position="right" label-width="calc(6em + 24px)">
<el-row :gutter="18">
<el-col :span="6"><el-form-item label="账号名" prop="account"><el-input v-model="form.account" /></el-form-item></el-col>
<el-col :span="6"><el-form-item label="姓名" prop="realName"><el-input v-model="form.realName" /></el-form-item></el-col>
<el-col :span="6"><el-form-item label="手机号" prop="phone"><el-input v-model="form.phone" /></el-form-item></el-col>
<el-col :span="6"><el-form-item label="邮箱"><el-input v-model="form.email" /></el-form-item></el-col>
<el-col :span="6"><el-form-item label="性别"><el-select v-model="form.sex" class="full-width"><el-option label="男" :value="1" /><el-option label="女" :value="2" /><el-option label="未知" :value="3" /></el-select></el-form-item></el-col>
<el-col :span="6"><el-form-item label="岗位" prop="postId"><el-tree-select v-model="form.postId" :data="postList" :props="{ label: 'postName', value: 'id' }" check-strictly class="full-width" /></el-form-item></el-col>
<el-col :span="6"><el-form-item label="所属组织" prop="deptId"><el-tree-select v-model="form.deptId" :data="permissionDeptTree" :props="{ label: 'title', value: 'id' }" multiple check-strictly show-checkbox class="full-width" /></el-form-item></el-col>
<el-col :span="6"><el-form-item label="性别"><el-select v-model="form.sex"><el-option label="男" :value="1" /><el-option label="女" :value="2" /><el-option label="未知" :value="3" /></el-select></el-form-item></el-col>
<el-col :span="6"><el-form-item label="岗位" prop="postId"><el-tree-select v-model="form.postId" :data="postList" :props="{ label: 'postName', value: 'id' }" check-strictly /></el-form-item></el-col>
<el-col :span="6"><el-form-item label="所属组织" prop="deptId"><el-tree-select v-model="form.deptId" :data="permissionDeptTree" :props="{ label: 'title', value: 'id' }" multiple check-strictly show-checkbox /></el-form-item></el-col>
<el-col :span="6"><el-form-item label="工号"><el-input v-model="form.code" /></el-form-item></el-col>
<el-col :span="6"><el-form-item label="人员类别"><el-select v-model="form.personCategory" class="full-width"><el-option label="内部员工" :value="1" /><el-option label="承运商" :value="2" /></el-select></el-form-item></el-col>
<el-col :span="6"><el-form-item label="人员类别"><el-select v-model="form.personCategory"><el-option label="内部员工" :value="1" /><el-option label="承运商" :value="2" /></el-select></el-form-item></el-col>
<el-col :span="18"><el-form-item label="数据权限范围"><el-radio-group v-model="form.dataScopeRange"><el-radio :value="1">仅所属组织</el-radio><el-radio :value="2">全部组织</el-radio><el-radio :value="3">自定义</el-radio></el-radio-group></el-form-item></el-col>
<el-col :span="18" :offset="6"><el-form-item label="数据层级范围"><el-radio-group v-model="form.dataLevelRange"><el-radio :value="1">包含下级</el-radio><el-radio :value="2">仅本级</el-radio></el-radio-group></el-form-item></el-col>
<el-col :span="24"><el-form-item label="备注"><el-input v-model="form.remark" type="textarea" :rows="3" maxlength="200" show-word-limit /></el-form-item></el-col>
</el-row>
</el-form>
</section-card>
<el-tabs class="user-permission-tabs">
<el-tab-pane label="已拥有角色">
<el-table :data="formRoleList" border>
@@ -288,23 +290,40 @@
</el-dialog>
<!-- 管理员修改密码 -->
<el-dialog title="修改密码" append-to-body v-model="passwordBox" width="460px">
<el-dialog
title="修改密码"
append-to-body
v-model="passwordBox"
width="520px"
class="dialog-form--carded"
>
<section-card title="密码信息">
<el-form
ref="passwordFormRef"
:model="passwordForm"
:rules="passwordRules"
label-width="auto"
label-position="right"
label-width="calc(6em + 24px)"
>
<el-row :gutter="18">
<el-col :span="24">
<el-form-item label="账号名">
<el-input v-model="passwordForm.account" disabled />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="新密码" prop="password">
<el-input v-model="passwordForm.password" type="password" show-password />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="确认密码" prop="password2">
<el-input v-model="passwordForm.password2" type="password" show-password />
</el-form-item>
</el-col>
</el-row>
</el-form>
</section-card>
<template #footer>
<span class="dialog-footer">
<el-button @click="passwordBox = false"> </el-button>
+1 -1
View File
@@ -217,7 +217,7 @@ export default {
label: '备注',
prop: 'remark',
span: 24,
minRows: 3,
minRows: 2,
hide: true,
type: 'textarea',
},
+4 -2
View File
@@ -967,6 +967,7 @@
class="score-detail-dialog"
@closed="resetScoreDialog"
>
<section-card>
<el-form
ref="scoreForm"
:model="currentScore"
@@ -1140,6 +1141,7 @@
</template>
</el-table-column>
</el-table>
</section-card>
<section-card title="证明材料" class="score-material-card">
<template #extra>
@@ -3797,7 +3799,7 @@ export default {
}
.archive-detail-card {
margin-top: 8px;
margin-top: 12px;
}
.archive-tabs {
:deep(.el-tabs__header) {
@@ -3849,7 +3851,7 @@ export default {
.score-category-table {
width: calc(100% - 72px);
margin: 8px 36px 0;
margin: 8px 36px 16px;
:deep(.el-table__body td) {
height: 56px;
+1 -1
View File
@@ -62,7 +62,7 @@ export default ({
},
},
// server: {
// port: 2888,
// port: 2889,
// proxy: {
// '/api': {
// target: 'http://172.16.203.228:8000',