GenerateColItem.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <el-row
  3. :class="{
  4. [element.options.customClass]: element.options.customClass?true: false
  5. }"
  6. :type="element.options.flex ? 'flex' : ''"
  7. :gutter="element.options.gutter || 0"
  8. :justify="element.options.justify"
  9. :align="element.options.align"
  10. v-if="display[element.model]"
  11. >
  12. <el-col v-for="(item, index) in element.columns" :key="index"
  13. :xs="element.options.responsive ? item.xs || 0 : item.span || 0"
  14. :sm="element.options.responsive ? item.sm || 0 : item.span || 0"
  15. :md="element.options.responsive ? item.md || 0 : item.span || 0"
  16. :lg="element.options.responsive ? item.lg || 0 : item.span || 0"
  17. :xl="element.options.responsive ? item.xl || 0 : item.span || 0"
  18. >
  19. <template v-for="col in item.list">
  20. <generate-col-item
  21. v-if="col.type == 'grid'"
  22. :key="col.key"
  23. :model.sync="dataModels"
  24. :rules="rules"
  25. :element="col"
  26. :remote="remote"
  27. :blanks="blanks"
  28. :display="display"
  29. @input-change="onInputChange"
  30. :edit="edit"
  31. :remote-option="remoteOption"
  32. >
  33. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  34. <slot :name="blank.name" :model="scope.model"></slot>
  35. </template>
  36. </generate-col-item>
  37. <generate-tab-item
  38. v-else-if="col.type == 'tabs'"
  39. :key="col.key"
  40. :model.sync="dataModels"
  41. :rules="rules"
  42. :element="col"
  43. :remote="remote"
  44. :blanks="blanks"
  45. :display="display"
  46. @input-change="onInputChange"
  47. :edit="edit"
  48. :remote-option="remoteOption"
  49. >
  50. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  51. <slot :name="blank.name" :model="scope.model"></slot>
  52. </template>
  53. </generate-tab-item>
  54. <generate-form-item
  55. v-else
  56. :key="col.key"
  57. :models.sync="dataModels"
  58. :rules="rules"
  59. :widget="col"
  60. :remote="remote"
  61. :blanks="blanks"
  62. :display="display"
  63. @input-change="onInputChange"
  64. :edit="edit"
  65. :remote-option="remoteOption"
  66. >
  67. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  68. <slot :name="blank.name" :model="scope.model"></slot>
  69. </template>
  70. </generate-form-item>
  71. </template>
  72. </el-col>
  73. </el-row>
  74. </template>
  75. <script>
  76. import GenerateFormItem from './GenerateFormItem'
  77. import GenerateTabItem from './GenerateTabItem'
  78. export default {
  79. name: 'generate-col-item',
  80. components: {
  81. GenerateFormItem,
  82. GenerateTabItem
  83. },
  84. props: ['element', 'model', 'rules', 'remote', 'blanks', 'display', 'edit', 'remoteOption'],
  85. data () {
  86. return {
  87. dataModels: this.model
  88. }
  89. },
  90. methods: {
  91. onInputChange (value, field) {
  92. this.$emit('input-change', value, field)
  93. }
  94. },
  95. watch: {
  96. model: {
  97. deep: true,
  98. handler (val) {
  99. this.dataModels = this.model
  100. }
  101. },
  102. dataModels: {
  103. deep: true,
  104. handler (val) {
  105. this.$emit('update:model', val)
  106. }
  107. }
  108. }
  109. }
  110. </script>