有时候新增、修改数据时往往使用弹出窗口+表单的形式展现。
<a-modal:title="title" // 此处将标题设置为动态绑定属性,好处是可以根据不同情况展示"新增/修改xxx"width="640":visible="visible" // 弹窗是否可见,默认是false,只有在点击新增或修改按钮时可见:confirmLoading="confirmLoading" // 是否显示加载动画@ok="handleSubmit" // 确定按钮处理函数@cancel="handleCancel" // 取消按钮处理函数><a-spin :spinning="confirmLoading"><a-form :form="form"><a-form-itemlabel="字典名称":labelCol="labelCol" // label宽度:wrapperCol="wrapperCol" // wrapper控件宽度>// input组件<a-input v-decorator="['dictName', {rules: [{required: true, message: '请输入字典名称!'}, {max: 100, message: '最大不能超过100个字符'}]}]" /></a-form-item><a-form-itemlabel="字典代码":labelCol="labelCol":wrapperCol="wrapperCol">// input组件<a-input v-decorator="['dictCode', {rules: [{required: true, message: '请输入字典代码!'}, {max: 30, message: '最大不能超过30个字符'}]}]" /></a-form-item></a-form></a-spin></a-modal><script>export default {data () {return {labelCol: {xs: { span: 24 },sm: { span: 7 }},wrapperCol: {xs: { span: 24 },sm: { span: 13 }},visible: false, // 弹窗是否可见,默认是falseconfirmLoading: false,title: '新建字典', // 弹窗标题form: this.$form.createForm(this) // 初始化表单,form不是一个普通对象,而是一个组件实例对象}},methods: {add () { // 新增方法this.form.resetFields() // 新增记录时,需要把表单清空,否则控件会保留上次打开时的值this.title = '新建字典'this.visible = true},edit (record) { // 修改方法const { form: { setFieldsValue } } = this // ES6解构赋值了解一下:http://es6.ruanyifeng.com/#docs/destructuringconst { dictCode, dictName } = record // 同上this.title = '修改字典'this.visible = truethis.$nextTick(() => {setFieldsValue({ dictCode, dictName }) // 修改记录时,需要把对应的记录属性值初始化到表单控件,否则表单就是空表单})},handleSubmit () {const { form: { validateFields } } = this // 解构赋值,this是弹窗组件this.confirmLoading = true // 显示加载动画// 此处调用validateFields对表单控件进行前端校验,校验规则参见表单控件中的v-decorator属性validateFields((errors, values) => { // errors是校验框架返回的结果对象,values是提交的表单对象if (!errors) { // 校验通过console.log('values', values)setTimeout(() => {this.visible = falsethis.confirmLoading = false // 关闭加载动画this.$emit('ok', values)}, 1500)} else { // 校验不通过this.confirmLoading = false // 关闭加载动画}})},handleCancel () {this.visible = false}}}</script>
