2022-08-11 11:39:45 +08:00
|
|
|
# Add Or Update Dialog Configs
|
|
|
|
|
|
|
|
> 通过传入合理的配置项来使用 addOrUpdate Dialog
|
|
|
|
|
2022-10-08 09:39:47 +08:00
|
|
|
## 用途
|
|
|
|
|
|
|
|
通过给对话框传递配置项,并自动根据这些配置项来初始化对话框的功能
|
|
|
|
|
|
|
|
## props
|
|
|
|
|
|
|
|
- configs 对象
|
|
|
|
|
|
|
|
```
|
|
|
|
<my-dialog :configs="SomeConfigs" ... />
|
|
|
|
|
|
|
|
|
|
|
|
type Operation = {
|
|
|
|
name: 'add' | 'edit' | 'detail' | 'delete' | ...,
|
|
|
|
url: string, /** 该操作需要的接口地址,如删除接口 */
|
|
|
|
showAlways: boolean,
|
|
|
|
showOnEdit: boolean,
|
|
|
|
permission: string,
|
|
|
|
}
|
|
|
|
|
|
|
|
type SubTableConfig = {
|
|
|
|
[_:string]: any,
|
|
|
|
title: string, /** 表格的名称 */
|
|
|
|
url: string, /** 涉及的接口 */
|
|
|
|
tableConfigs: {
|
|
|
|
[_:string]: any,
|
|
|
|
type?: 'index' | ...,
|
|
|
|
prop: string,
|
|
|
|
name: string,
|
|
|
|
rules?: any[],
|
|
|
|
fixed?: string,
|
|
|
|
width?: string,
|
|
|
|
subcomponent: VueComponent,
|
|
|
|
options: any[],
|
|
|
|
formField: boolean, /** 是否在新增编辑子表单里出现该字段 */
|
|
|
|
}[], /** 表格prop配置数组,参考 components/base-table 组件和 element-ui 文档 */
|
|
|
|
}
|
|
|
|
|
|
|
|
type ExtraComponent = {
|
|
|
|
name: string,
|
|
|
|
label: string,
|
|
|
|
hasModel: boolean, /** 是否需要为该组件设置 v-model */
|
|
|
|
component: VueComponent, /** 动态加载的 vue 组件 */
|
|
|
|
props: {
|
|
|
|
[_:string]: string | object
|
|
|
|
extraParams?: { /** 上传组件使用 */
|
|
|
|
typeCode: string
|
|
|
|
}
|
|
|
|
}[]
|
|
|
|
}
|
|
|
|
|
|
|
|
type Field = {
|
|
|
|
[_:string]: string | boolean | object | object[],
|
|
|
|
name: string,
|
|
|
|
type?: 'input' | 'select' | ...,
|
|
|
|
options?: any[], /** 设置 type 为 select 时的选项数据 */
|
|
|
|
label?: string, /** 没有时会用 name 替代 */
|
|
|
|
placeholder?: string, /** 没有时会生成默认占位符 */
|
|
|
|
api?: string, /** 如果有该字段,就自动从api地址获取数据并填充到对应的输入框里,一般为 getCode 的接口 */
|
|
|
|
relatedField?: string, /** 关联字段,当设置此字段时,意味着需要在对话框组件上监听 select-change 事件,并当该字段数据被改变时刷新 relatedField 的列表,一般是像选择产线时更新工段列表这样的场景使用 */,
|
|
|
|
required?: boolean, /** 验证规则的简写,只需要限制必填项时,不需要其他验证规则时使用 */
|
|
|
|
rules?: object[], /** 规则设置参考 element-ui 的表单验证配置 */
|
|
|
|
}
|
|
|
|
|
|
|
|
type Configs = {
|
|
|
|
type: 'dialog',
|
|
|
|
infoUrl: string, /** 编辑时获取信息的接口地址 */
|
|
|
|
fields: Field[],
|
|
|
|
extraComponents?: ExtraComponent[],
|
|
|
|
subtable?: SubTableConfig[],
|
|
|
|
operations?: Operation[]
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
2022-08-11 11:39:45 +08:00
|
|
|
## 示例
|
|
|
|
|
|
|
|
```js
|
|
|
|
const addOrUpdateConfigs = {
|
|
|
|
type: 'dialog', // dialog | drawer | page
|
|
|
|
infoUrl: '/monitoring/product',
|
|
|
|
fields: [
|
|
|
|
'name',
|
|
|
|
{
|
|
|
|
name: 'code',
|
|
|
|
api: '/monitoring/product/getCode'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'processTime',
|
|
|
|
label: '加工时间',
|
|
|
|
placeholder: '请输入加工时间',
|
|
|
|
type: 'number', // type: number(input+number) | default(input) | textarea | select(options在父组件里获取) | datetime
|
|
|
|
required: true,
|
|
|
|
rules: [
|
|
|
|
// 除了required之外的验证规则
|
|
|
|
{
|
|
|
|
type: 'number',
|
|
|
|
trigger: 'blur',
|
|
|
|
transform: val => Number(val),
|
|
|
|
message: '必须输入数字'
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
'remark',
|
|
|
|
'specifications',
|
|
|
|
{
|
|
|
|
name: 'typeDictValue',
|
|
|
|
rules: [{ required: true, trigger: 'blur' }],
|
|
|
|
label: '产品类型', // 对于非常见属性,最好自己指定label
|
|
|
|
type: 'select',
|
|
|
|
options: [
|
|
|
|
// 动态获取
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'unitDictValue',
|
|
|
|
label: '单位',
|
|
|
|
type: 'select',
|
|
|
|
placeholder: '请选择单位',
|
|
|
|
options: [
|
|
|
|
// 动态获取
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
operations: [
|
|
|
|
// { name: 'reset', url: true },
|
|
|
|
{ name: 'cancel', url: true, showAlways: true },
|
|
|
|
{ name: 'save', url: '/monitoring/product', permission: '', showOnEdit: false },
|
|
|
|
{ name: 'update', url: '/monitoring/product', permission: '', showOnEdit: true }
|
|
|
|
],
|
|
|
|
subtable: {
|
|
|
|
// for i18n
|
|
|
|
title: '动态属性',
|
|
|
|
url: '/monitoring/productArrt',
|
|
|
|
tableConfigs: [
|
|
|
|
{ type: 'index', name: '序号' },
|
|
|
|
{ prop: 'createTime', name: '添加时间', filter: val => (val ? moment(val).format('YYYY-MM-DD hh:mm:ss') : '-') },
|
|
|
|
{ prop: 'name', name: '属性名', formField: true, rules: [{ required: true, message: '必填', trigger: 'blur' }] },
|
|
|
|
{ prop: 'code', name: '属性值', formField: true },
|
|
|
|
{ prop: 'operations', name: '操作', fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] }
|
|
|
|
]
|
|
|
|
},
|
|
|
|
extraComponents: [
|
|
|
|
{
|
|
|
|
name: 'CompName',
|
|
|
|
label: 'markdown编辑器',
|
|
|
|
component: () => import('xx.vue')
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2022-10-08 09:39:47 +08:00
|
|
|
## 配置项解释
|
2022-08-11 11:39:45 +08:00
|
|
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
### type
|
|
|
|
|
|
|
|
类型: string
|
|
|
|
值:dialog | drawer | page
|
|
|
|
含义:对话框、抽屉、新页面
|
|
|
|
|
|
|
|
### infoUrl
|
|
|
|
|
|
|
|
类型:string
|
|
|
|
含义:详情的接口,如 `/monitoring/product`
|
|
|
|
|
|
|
|
### fields
|
|
|
|
|
|
|
|
含义:设置新增、编辑时的字段
|
|
|
|
类型:`Array<string | object>`
|
|
|
|
|
|
|
|
- 当类型为 string 时,默认渲染 `<input>`
|
|
|
|
- 当类型为 object 时,有如下选项:
|
|
|
|
- name: 字段名
|
|
|
|
- label: 字段的 label
|
|
|
|
- api: 如果设置了该属性,则该字段会自动从服务器获取值,一般为 code 字段需要
|
|
|
|
- placeholder
|
|
|
|
- type: 渲染何种类型的组件,默认值: 'input'
|
|
|
|
- options: 当上一条 type 值为 'select' 时,需要自行动态获取并加载 options 列表
|
|
|
|
- required: 是否是必须填写的字段(或可用过 rules 做更加具体的设定,设定方式参考 async-validator )
|
|
|
|
- rules: 验证规则数组,如果只有"必填"的需求,可直接用上一条
|
|
|
|
|
|
|
|
### operations
|
|
|
|
|
|
|
|
含义:设置对话框等组件里,需要哪些按钮
|
|
|
|
类型:`Array<object>`
|
|
|
|
属性:
|
|
|
|
|
|
|
|
- name,按钮的类型,决定按钮的文字和颜色
|
|
|
|
- url,按钮操作的接口地址,不需要的可以给 null 或 true
|
|
|
|
- permission,该操作需要的权限,如 "sys:xxx:add" 形式
|
|
|
|
- showOnEdit: boolean,是否编辑页面展示,不设置则始终展示
|
|
|
|
示例:
|
|
|
|
|
|
|
|
```js
|
|
|
|
operations: [
|
|
|
|
{ name: 'reset', url: true },
|
|
|
|
{ name: 'cancel', url: true, showAlways: true },
|
|
|
|
{ name: 'save', url: '/monitoring/product', permission: '', showOnEdit: false },
|
|
|
|
{ name: 'update', url: '/monitoring/product', permission: '', showOnEdit: true }
|
|
|
|
],
|
|
|
|
```
|
|
|
|
|
|
|
|
### subtable
|
|
|
|
|
|
|
|
含义:有些对话框里需要额外的表格来展示更深层次的数据,如“产品属性”
|
|
|
|
类型:object
|
|
|
|
选项:
|
2022-10-08 09:39:47 +08:00
|
|
|
|
2022-08-11 11:39:45 +08:00
|
|
|
- title, 内嵌表格的标题
|
|
|
|
- url, 内嵌表格的数据地址
|
|
|
|
- tableConfigs,内嵌表格的配置选项
|
|
|
|
- 类型:`Array<object>`
|
|
|
|
- 配置:
|
|
|
|
- type: 同 element-ui 的 table 属性的 type
|
|
|
|
- fixed: 同 element-ui 的 table 属性的 fixed
|
|
|
|
- width: 同 element-ui 的 table 属性的 width
|
|
|
|
- name: 表头显示的内容
|
|
|
|
- filter: 一般用于转换时间
|
|
|
|
- prop: 字段
|
|
|
|
- formField: boolean, 是否用于表单的填写
|
|
|
|
- rules: 表单验证规则,详见:async-validator
|
|
|
|
- subcomponent: 同 base-table 的 subcomponent
|
|
|
|
- options: 表格操作列需要哪些操作
|
|
|
|
- 值:`edit` | `delete` | `detail`,需要其他可自行添加(修改 base-table 组件)
|
2022-08-16 16:47:46 +08:00
|
|
|
|
|
|
|
### extraComponents
|
2022-10-08 09:39:47 +08:00
|
|
|
|
2022-08-16 16:47:46 +08:00
|
|
|
含义: 需要在对话框里使用的自定义组件列表
|
|
|
|
类型: Array<object>
|
|
|
|
对象选项:
|
2022-10-08 09:39:47 +08:00
|
|
|
|
|
|
|
- name: 该组件对应的 dataForm 字段(需要参照后端文档来指定)
|
|
|
|
- hasModel: boolean, 上传组件一般设置为 false,设置是否和 dataForm 关联
|
|
|
|
- label
|
|
|
|
- fieldType: 设置该组件的数据将以什么数据类型形式来保存
|
|
|
|
- component: 组件
|
|
|
|
- props 传给组件的配置
|