form.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <template>
  2. <el-form :model="form" :rules="rules" ref="ruleForm" label-width="100px" size="mini">
  3. <el-form-item v-for="(item, index) in meta" :key="index" :label="item.title" :prop="item.name">
  4. <slot name="field" v-if="item.slots" v-bind="{ item, form }"></slot>
  5. <el-input v-if="!item.formatter && !item.slots" v-model="form[item.name]" :placeholder="item.placeholder || `请输入${item.title}`" :disabled="item.disabled"></el-input>
  6. <el-select v-if="item.formatter && !item.slots" v-model="form[item.name]" :placeholder="item.placeholder || `请选择${item.title}`" :disabled="item.disabled">
  7. <el-option v-for="(i, idx) in $dict(item.formatter)" :key="idx" :label="i.title" :value="i.value"></el-option>
  8. </el-select>
  9. </el-form-item>
  10. <el-form-item>
  11. <el-button type="primary" @click="submitForm('ruleForm')">保存</el-button>
  12. <el-button @click="resetForm('ruleForm')">重置</el-button>
  13. </el-form-item>
  14. </el-form>
  15. </template>
  16. <script>
  17. export default {
  18. components: {},
  19. props: {
  20. rules: Object,
  21. meta: Array,
  22. data: Object
  23. },
  24. data () {
  25. return {
  26. form: {}
  27. }
  28. },
  29. methods: {
  30. reset () {
  31. this.form = { ...this.data }
  32. },
  33. submitForm (formName) {
  34. this.$refs[formName].validate((valid) => {
  35. if (valid) {
  36. this.$emit('save', this.form)
  37. } else {
  38. console.log('error submit!!')
  39. return false
  40. }
  41. })
  42. },
  43. resetForm (formName) {
  44. this.$refs[formName].resetFields()
  45. }
  46. },
  47. mounted () {
  48. this.reset()
  49. }
  50. }
  51. </script>
  52. <style lang="less" scoped></style>