# Add Or Update Dialog Configs > 通过传入合理的配置项来使用 addOrUpdate Dialog ## 用途 通过给对话框传递配置项,并自动根据这些配置项来初始化对话框的功能 ## props - configs 对象 ``` 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[] } ``` ## 示例 ```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') } ] } ``` ## 配置项解释
### type 类型: string 值:dialog | drawer | page 含义:对话框、抽屉、新页面 ### infoUrl 类型:string 含义:详情的接口,如 `/monitoring/product` ### fields 含义:设置新增、编辑时的字段 类型:`Array` - 当类型为 string 时,默认渲染 `` - 当类型为 object 时,有如下选项: - name: 字段名 - label: 字段的 label - api: 如果设置了该属性,则该字段会自动从服务器获取值,一般为 code 字段需要 - placeholder - type: 渲染何种类型的组件,默认值: 'input' - options: 当上一条 type 值为 'select' 时,需要自行动态获取并加载 options 列表 - required: 是否是必须填写的字段(或可用过 rules 做更加具体的设定,设定方式参考 async-validator ) - rules: 验证规则数组,如果只有"必填"的需求,可直接用上一条 ### operations 含义:设置对话框等组件里,需要哪些按钮 类型:`Array` 属性: - 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 选项: - title, 内嵌表格的标题 - url, 内嵌表格的数据地址 - tableConfigs,内嵌表格的配置选项 - 类型:`Array` - 配置: - 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 组件) ### extraComponents 含义: 需要在对话框里使用的自定义组件列表 类型: Array 对象选项: - name: 该组件对应的 dataForm 字段(需要参照后端文档来指定) - hasModel: boolean, 上传组件一般设置为 false,设置是否和 dataForm 关联 - label - fieldType: 设置该组件的数据将以什么数据类型形式来保存 - component: 组件 - props 传给组件的配置