GenerateFormItem.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <div>
  3. <el-form-item v-if="widget.type != 'divider' && display[widget.model]" :label="widget.name" :prop="widget.model"
  4. :class="{
  5. [widget.options.customClass]: widget.options.customClass?true: false,
  6. 'no-label-form-item': widget.options.isLabelWidth && widget.options.labelWidth == 0
  7. }"
  8. :label-width="widget.options.isLabelWidth ? widget.options.labelWidth + 'px' : ''"
  9. >
  10. <generate-element-item
  11. :blanks="blanks"
  12. :is-table="false"
  13. :widget="widget"
  14. v-model="dataModel"
  15. :models.sync="dataModels"
  16. :remote="remote"
  17. :edit="edit"
  18. :remote-option="remoteOption"
  19. :key="widget.key"
  20. :rules="rules"
  21. >
  22. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  23. <slot :name="blank.name" :model="scope.model"></slot>
  24. </template>
  25. </generate-element-item>
  26. </el-form-item>
  27. <el-divider v-if="widget.type == 'divider' && display[widget.model]"
  28. :content-position="widget.options.contentPosition"
  29. >
  30. {{widget.name}}
  31. </el-divider>
  32. </div>
  33. </template>
  34. <script>
  35. import GenerateElementItem from './GenerateElementItem'
  36. export default {
  37. components: {
  38. GenerateElementItem
  39. },
  40. props: ['widget', 'models', 'rules', 'remote', 'blanks', 'display', 'edit', 'remoteOption'],
  41. data () {
  42. return {
  43. dataModel: this.models[this.widget.model],
  44. dataModels: this.models
  45. }
  46. },
  47. methods: {
  48. },
  49. watch: {
  50. dataModel: {
  51. deep: true,
  52. handler (val) {
  53. this.models[this.widget.model] = val
  54. this.$emit('update:models', {
  55. ...this.models,
  56. [this.widget.model]: val
  57. })
  58. this.$emit('input-change', val, this.widget.model)
  59. }
  60. },
  61. models: {
  62. deep: true,
  63. handler (val) {
  64. this.dataModel = val[this.widget.model]
  65. this.dataModels = val
  66. }
  67. },
  68. }
  69. }
  70. </script>