form.vue 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <template>
  2. <el-form :model="form" :rules="rules" ref="ruleForm" label-width="100px" size="mini">
  3. <div v-for="(item, index) in meta" :key="index" >
  4. <el-form-item :label="item.title" :prop="item.name" v-if="!item.slots || item.slots == 'field'">
  5. <slot name="field" v-if="item.slots" v-bind="{ item, form }"></slot>
  6. <el-input :size="item.size || 'mini'" v-if="!item.formatter && !item.slots && item.type !== 'number'" v-model="form[item.name]" :placeholder="item.placeholder || `请输入${item.title}`" :disabled="item.disabled"></el-input>
  7. <el-input :size="item.size || 'mini'" v-if="!item.formatter && !item.slots && item.type == 'number'" v-model.number="form[item.name]" :placeholder="item.placeholder || `请输入${item.title}`" :disabled="item.disabled"></el-input>
  8. <el-select :size="item.size || 'mini'" v-if="item.formatter && !item.slots" v-model="form[item.name]" :placeholder="item.placeholder || `请选择${item.title}`" :disabled="item.disabled">
  9. <el-option v-for="(i, idx) in $dict(item.formatter)" :key="idx" :label="i.title" :value="i.value"></el-option>
  10. </el-select>
  11. </el-form-item>
  12. <slot name="end" v-if="item.slots == 'end'" v-bind="{ item, form }"></slot>
  13. </div>
  14. <el-form-item>
  15. <el-button type="primary" @click="submitForm('ruleForm')">保存</el-button>
  16. <el-button v-if="isresetForm" @click="resetForm('ruleForm')">重置</el-button>
  17. <el-button v-if="close" @click="$emit('close')">取消</el-button>
  18. </el-form-item>
  19. </el-form>
  20. </template>
  21. <script>
  22. export default {
  23. components: {},
  24. props: {
  25. rules: Object,
  26. meta: Array,
  27. data: Object,
  28. isresetForm: {
  29. type: Boolean,
  30. default: false
  31. },
  32. close: {
  33. type: Boolean,
  34. default: false
  35. }
  36. },
  37. data () {
  38. return {
  39. form: {}
  40. }
  41. },
  42. methods: {
  43. reset () {
  44. this.form = { ...this.data }
  45. },
  46. submitForm (formName) {
  47. this.$refs[formName].validate((valid) => {
  48. if (valid) {
  49. this.meta.filter(p => {
  50. if (p.formatter) {
  51. const items = this.$dict(p.formatter)
  52. const item = items.filter(z => z.title === this.form[p.name])
  53. if (item.length > 0) this.form[p.name] = item[0].value
  54. }
  55. })
  56. this.$emit('save', this.form)
  57. } else {
  58. console.log('error submit!!')
  59. return false
  60. }
  61. })
  62. },
  63. formChage (name, val) {
  64. this.$set(this.form, name, val)
  65. },
  66. resetForm (formName) {
  67. this.$refs[formName].resetFields()
  68. },
  69. clearValidate (formName) {
  70. this.$refs.ruleForm.clearValidate()
  71. }
  72. },
  73. mounted () {
  74. this.reset()
  75. }
  76. }
  77. </script>
  78. <style lang="less" scoped></style>