GenerateColItem.vue 2.8 KB

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