WidgetForm.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <div class="widget-form-container"
  3. :class="`${platform}`"
  4. >
  5. <el-form
  6. :size="data.config.size"
  7. :label-position="data.config.labelPosition"
  8. :label-width="data.config.labelWidth + 'px'"
  9. :class="{
  10. [data.config && data.config.customClass]: (data.config && data.config.customClass) ? true : false,
  11. }"
  12. :style="{width: data.config.width, margin: 'auto'}"
  13. :label-suffix="data.config?.labelSuffix ? ' : ' : ' '"
  14. >
  15. <div v-if="data.list.length == 0" class="form-empty">{{$t('fm.description.containerEmpty')}}</div>
  16. <el-scrollbar ref="formScrollRef">
  17. <draggable
  18. :list="data.list"
  19. v-bind="{group:'people', ghostClass: 'ghost',animation: 200, handle: '.drag-widget'}"
  20. @add="handleWidgetAdd"
  21. @update="handleWidgetUpdate"
  22. @start="handleMoveStart"
  23. @end="handleMoveEnd"
  24. :no-transition-on-drag="true"
  25. item-key="key"
  26. class="widget-form-list"
  27. >
  28. <template #item="{element, index}">
  29. <widget-table
  30. v-if="element.type === 'table'"
  31. :key="`table-${element.key}`"
  32. :element="element"
  33. v-model:select="selectWidget"
  34. :index="index"
  35. :data="data"
  36. @select-change="handleSelectChange"
  37. :platform="platform"
  38. :form-key="formKey"
  39. >
  40. </widget-table>
  41. <widget-collapse
  42. v-else-if="element.type === 'collapse'"
  43. :key="`collapse-${element.key}`"
  44. :element="element"
  45. v-model:select="selectWidget"
  46. :index="index"
  47. :data="data"
  48. @select-change="handleSelectChange"
  49. :platform="platform"
  50. :form-key="formKey"
  51. >
  52. </widget-collapse>
  53. <widget-tab-item
  54. v-else-if="element.type === 'tabs'"
  55. :key="`tabs-${element.key}`"
  56. :element="element"
  57. v-model:select="selectWidget"
  58. :index="index"
  59. :data="data"
  60. @select-change="handleSelectChange"
  61. :platform="platform"
  62. :form-key="formKey"
  63. >
  64. </widget-tab-item>
  65. <widget-report
  66. v-else-if="element.type === 'report'"
  67. :key="`report-${element.key}`"
  68. :element="element"
  69. v-model:select="selectWidget"
  70. :index="index"
  71. :data="data"
  72. @select-change="handleSelectChange"
  73. :platform="platform"
  74. :form-key="formKey"
  75. >
  76. </widget-report>
  77. <widget-inline
  78. v-else-if="element.type === 'inline'"
  79. :key="`inline-${element.key}`"
  80. :element="element"
  81. v-model:select="selectWidget"
  82. :index="index"
  83. :data="data"
  84. @select-change="handleSelectChange"
  85. :platform="platform"
  86. :form-key="formKey"
  87. >
  88. </widget-inline>
  89. <widget-sub-form
  90. v-else-if="element.type === 'subform'"
  91. :key="`subform-${element.key}`"
  92. :element="element"
  93. v-model:select="selectWidget"
  94. :index="index"
  95. :data="data"
  96. @select-change="handleSelectChange"
  97. :platform="platform"
  98. :form-key="formKey"
  99. >
  100. </widget-sub-form>
  101. <widget-group
  102. v-else-if="element.type === 'group'"
  103. :key="`group-${element.key}`"
  104. :element="element"
  105. v-model:select="selectWidget"
  106. :index="index"
  107. :data="data"
  108. @select-change="handleSelectChange"
  109. :platform="platform"
  110. :form-key="formKey"
  111. >
  112. </widget-group>
  113. <widget-dialog
  114. v-else-if="element.type === 'dialog'"
  115. :key="`dialog-${element.key}`"
  116. :element="element"
  117. v-model:select="selectWidget"
  118. :index="index"
  119. :data="data"
  120. @select-change="handleSelectChange"
  121. :platform="platform"
  122. :form-key="formKey"
  123. >
  124. </widget-dialog>
  125. <widget-card
  126. v-else-if="element.type === 'card'"
  127. :key="`card-${element.key}`"
  128. :element="element"
  129. v-model:select="selectWidget"
  130. :index="index"
  131. :data="data"
  132. @select-change="handleSelectChange"
  133. :platform="platform"
  134. :form-key="formKey"
  135. >
  136. </widget-card>
  137. <widget-form-item
  138. v-else-if="element.type !== 'grid'"
  139. :key="`form-item-${element.key}`"
  140. :element="element"
  141. v-model:select="selectWidget"
  142. :index="index"
  143. :data="data"
  144. @select-change="handleSelectChange"
  145. :form-key="formKey"
  146. >
  147. </widget-form-item>
  148. <widget-col-item
  149. v-else
  150. :key="`grid-${element.key}`"
  151. :element="element"
  152. v-model:select="selectWidget"
  153. :index="index"
  154. :data="data"
  155. @select-change="handleSelectChange"
  156. :platform="platform"
  157. :form-key="formKey"
  158. >
  159. </widget-col-item>
  160. </template>
  161. </draggable>
  162. </el-scrollbar>
  163. </el-form>
  164. </div>
  165. </template>
  166. <script>
  167. import Draggable from 'vuedraggable/src/vuedraggable'
  168. import WidgetFormItem from './WidgetFormItem.vue'
  169. import WidgetColItem from './WidgetColItem.vue'
  170. import WidgetTable from './WidgetTable.vue'
  171. import WidgetTabItem from './WidgetTabItem.vue'
  172. import WidgetReport from './WidgetReport.vue'
  173. import WidgetInline from './WidgetInline.vue'
  174. import WidgetSubForm from './WidgetSubForm.vue'
  175. import WidgetCollapse from './WidgetCollapse.vue'
  176. import WidgetDialog from './WidgetDialog.vue'
  177. import WidgetCard from './WidgetCard.vue'
  178. import WidgetGroup from './WidgetGroup.vue'
  179. import { widgetFormMixin } from '../mixins/widgetForm.js'
  180. export default {
  181. name: 'WidgetForm',
  182. components: {
  183. Draggable,
  184. WidgetFormItem,
  185. WidgetColItem,
  186. WidgetTable,
  187. WidgetTabItem,
  188. WidgetReport,
  189. WidgetInline,
  190. WidgetSubForm,
  191. WidgetCollapse,
  192. WidgetDialog,
  193. WidgetCard,
  194. WidgetGroup
  195. },
  196. mixins: [widgetFormMixin]
  197. }
  198. </script>