FormWrapper.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <template>
  2. <el-form ref="form" :model="form" label-width="130px" v-if="form && form.type">
  3. <!-- Text component form items -->
  4. <text-form-items
  5. v-if="form.type === 'h5-text'"
  6. :config="form"
  7. @update:config="updateFormConfig"
  8. />
  9. <!-- Image component form items -->
  10. <image-form-items
  11. v-if="form.type === 'h5-image'"
  12. :config="form"
  13. />
  14. <!-- Sep component form items -->
  15. <sep-form-items
  16. v-if="form.type === 'h5-sep'"
  17. :config="form"
  18. />
  19. <!-- Countdown component form items -->
  20. <countdown-form-items
  21. v-if="form.type === 'h5-countdown'"
  22. :config="form"
  23. @update:config="updateFormConfig"
  24. />
  25. <!-- Form component form items -->
  26. <form-form-items
  27. v-if="form.type === 'h5-form'"
  28. :config="form"
  29. @update:config="updateFormConfig"
  30. />
  31. <!-- Link Button component form items -->
  32. <link-button-form-items
  33. v-if="form.type === 'h5-link-button'"
  34. :config="form"
  35. @update:config="updateFormConfig"
  36. />
  37. <!-- Add Wechat Button component form items -->
  38. <add-wechat-button-form-items
  39. v-if="form.type === 'h5-add-wechat-button'"
  40. :config="form"
  41. @update:config="updateFormConfig"
  42. />
  43. <!-- Qrcode component form items -->
  44. <qrcode-form-items
  45. v-if="form.type === 'h5-qrcode'"
  46. :config="form"
  47. @update:config="updateFormConfig"
  48. />
  49. <chat-form-items
  50. v-if="form.type === 'h5-chat'"
  51. :config="form"
  52. @update:config="updateFormConfig"
  53. />
  54. <!-- Common form items for all components -->
  55. <common-form-items
  56. :config="form"
  57. :index="index"
  58. :list="list"
  59. @bottom-change="handleBottomChange"
  60. @update:config="updateFormConfig"
  61. />
  62. </el-form>
  63. </template>
  64. <script>
  65. import TextFormItems from './config-item/h5-text-config.vue';
  66. import ImageFormItems from './config-item/h5-image-config.vue';
  67. import SepFormItems from './config-item/h5-sep-config.vue';
  68. import CommonFormItems from './config-item/common-config.vue';
  69. import CountdownFormItems from './config-item/h5-countdown-config.vue';
  70. import FormFormItems from './config-item/h5-form-config.vue';
  71. import LinkButtonFormItems from './config-item/h5-link-button-config.vue';
  72. import AddWechatButtonFormItems from './config-item/h5-add-wechat-button-config.vue';
  73. import QrcodeFormItems from './config-item/h5-qrcode-config.vue';
  74. import ChatFormItems from './config-item/h5-chat-config.vue'
  75. export default {
  76. name: 'FormWrapper',
  77. components: {
  78. TextFormItems,
  79. ImageFormItems,
  80. SepFormItems,
  81. CommonFormItems,
  82. CountdownFormItems,
  83. FormFormItems,
  84. LinkButtonFormItems,
  85. AddWechatButtonFormItems,
  86. QrcodeFormItems,
  87. ChatFormItems
  88. },
  89. props: {
  90. form: {
  91. type: Object,
  92. default: () => ({})
  93. },
  94. index: {
  95. type: Number,
  96. default: -1
  97. },
  98. list: {
  99. type: Array,
  100. default: () => []
  101. }
  102. },
  103. methods: {
  104. updateFormConfig(newConfig) {
  105. console.log("更新表单配置...");
  106. // Update form config
  107. this.$emit('update:form', newConfig);
  108. },
  109. handleBottomChange() {
  110. // Check if another item is already fixed to bottom
  111. let hasFooter = this.list.some((item, idx) =>
  112. idx !== this.index && item.classText && item.classText.includes('footer')
  113. );
  114. if(hasFooter) {
  115. alert('全局只能允许有一个在底部!');
  116. this.form.fixe = false;
  117. return;
  118. }
  119. // Update the class
  120. let className = "footer";
  121. if (this.form.fixe) {
  122. this.addClassToItem(className);
  123. } else {
  124. this.removeClassFromItem(className);
  125. }
  126. },
  127. addClassToItem(className) {
  128. if (!this.form.classText.includes(className)) {
  129. this.form.classText.push(className);
  130. }
  131. },
  132. removeClassFromItem(className) {
  133. this.form.classText = this.form.classText.filter(cls => cls !== className);
  134. }
  135. }
  136. }
  137. </script>
  138. <style>
  139. .el-form-item__label{
  140. text-align: center !important;
  141. }
  142. </style>