表单字段自由组合校验规则,避免重复书写相同规则,参照代码如下:
<template>
  <!-- 表单对话框 -->
  <ft-dialog v-el-drag-dialog :title="formTitle" width="800px" :visible.sync="dialogVisible" @confirm="handleSubmit">
    <el-form ref="dataFormAddUpdate" :model="formEntity" :rules="validateRules" label-position="left"
      label-width="100px" label-suffix=":">
      <el-form-item label="模板编码" prop="TemplateCode" :rules="validateRules.NotEmpty">
        <el-input v-model="formEntity.TemplateCode" autocomplete="off" :disabled="codeDisable" />
      </el-form-item>
      <el-form-item label="模板描述" prop="TemplateDesc" :rules="[validateRules.NotEmpty,validateRules.Min0Max5]">
        <el-input v-model="formEntity.TemplateDesc" autocomplete="off" />
      </el-form-item>
      <el-form-item label="模板文件" prop="TemplateFile" :rules="validateRules.NotEmpty">
        <el-input v-model="formEntity.TemplateFile" autocomplete="off" />
      </el-form-item>
      <el-form-item label="备注" prop="Remark">
        <el-input v-model="formEntity.Remark" :autosize="{ minRows: 3, maxRows: 5 }" type="textarea" />
      </el-form-item>
    </el-form>
  </ft-dialog>
</template>
<script>
import { add, update } from '@/api/Sys/Sys_PrintTemplate'
export default {
  name: 'Sys.Sys_PrintTemplate.addUpdate',
  data() {
    return {
      dialogVisible: false,
      formEntity: {
        RowUid: '',
        RoleCode: '',
        UserDesc: '',
        Remark: ''
      },
      validateRules: {
        NotEmpty: { required: true, message: '必须输入!', trigger: 'blur' },
        Min0Max5: { min: 0, max: 5, message: '长度在 0 到 5 个字符', trigger: 'blur' }
      }
    }
  },
  computed: {
    mode: function () {
      const entityKey = this.formEntity.RowUid
      return entityKey === undefined || entityKey === null || entityKey === '' ? 'Add' : 'Update'
    },
    codeDisable: function () {
      return this.mode === 'Update'
    },
    formTitle: function () {
      return this.mode === 'Add' ? '添加' : '编辑'
    }
  },
  methods: {
    show: function (entity) {
      // 注意本处写法,更新显示dialogVisible =true,然后nextTick中调用resetFields
      this.dialogVisible = true
      // console.log(this.formEntity,this.$options.data(), 'formEntity')
      if (undefined !== entity && entity !== null) {
        // console.log(entity,entity===null,'entity')
        this.formEntity = Object.assign({}, entity)
      } else {
        this.formEntity = this.$options.data().formEntity
      }
      // this.$nextTick(() => {
      //   // 注意visibile属性为true设置后才可以获取到$refs
      //   this.$refs.dataFormAddUpdate.resetFields()
      //   if (undefined !== entity && entity !== null) {
      //     const entityCopy = Object.assign({}, entity)
      //     this.formEntity = entityCopy
      //   }
      // })
    },
    hide: function () {
      this.dialogVisible = false
    },
    handleSubmit() {
      const action = this.mode === 'Add' ? add(this.formEntity) : update(this.formEntity)
      this.doSubmit(action)
    },
    doSubmit(submitAction) {
      this.$refs.dataFormAddUpdate
        .validate()
        .then(() => {
          console.log(submitAction, typeof submitAction, 'dddddddddf')
          submitAction.then(result => {
            this.dialogVisible = false
            console.log(this.dialogVisible, 'hide')
            this.$emit('confirm')
          })
        })
        .catch(error => {
          console.log('failed', error)
          this.$emit('cancel', error)
        })
    }
  }
}
</script>
<style scoped></style>
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号