WidgetSubForm.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <template>
  2. <div class="widget-subform widget-view"
  3. :class="{
  4. active: select.key && select.key == element.key,
  5. 'is_hidden': element.options.hidden
  6. }"
  7. @click.stop="handleSelectWidget(index)"
  8. @mouseover.stop="handleMouseover"
  9. @mouseout="handleMouseout"
  10. ref="widgetSubform"
  11. >
  12. <el-form-item
  13. :label="element.options.hideLabel ? '' : element.name"
  14. :label-width="element.options.hideLabel ? '0px' : (element.options.isLabelWidth ? element.options.labelWidth + 'px' : '')"
  15. :class="{
  16. [element.options && element.options.customClass]: element.options.customClass?true: false,
  17. 'fm-label-wrap': element.options.labelWrap
  18. }"
  19. >
  20. <div v-if="element.options.tip" class="fm-item-tooltip" v-html="element.options.tip.replace(/\n/g, '<br/>')"></div>
  21. <div class="widget-subform-wrapper">
  22. <draggable
  23. v-model="element.list"
  24. v-bind="{group:{name: 'people', put: handlePut}, ghostClass: 'ghost',animation: 200, handle: '.drag-widget'}"
  25. :no-transition-on-drag="true"
  26. @add="handleWidgetSubFormAdd($event, element)"
  27. @update="handleWidgetSubFormUpdate"
  28. @start="setDragging(true)"
  29. @end="setDragging(false)"
  30. class="widget-col-list"
  31. :class="{
  32. [element.options && element.options.customClass]: element.options.customClass ? true : false
  33. }"
  34. item-key="key"
  35. >
  36. <template #item="{element:item, index}">
  37. <widget-tab-item
  38. v-if="item.type === 'tabs'"
  39. :key="`tabs-${item.key}`"
  40. :element="item"
  41. v-model:select="selectWidget"
  42. :index="index"
  43. :data="element"
  44. @select-change="handleSelectChange($event, item)"
  45. :platform="platform"
  46. :form-key="formKey"
  47. :subform="true"
  48. >
  49. </widget-tab-item>
  50. <widget-collapse
  51. v-else-if="item.type === 'collapse'"
  52. :key="`collapse-${item.key}`"
  53. :element="item"
  54. v-model:select="selectWidget"
  55. :index="index"
  56. :data="element"
  57. @select-change="handleSelectChange($event, item)"
  58. :platform="platform"
  59. :form-key="formKey"
  60. :subform="true"
  61. >
  62. </widget-collapse>
  63. <widget-card
  64. v-else-if="item.type === 'card'"
  65. :key="`card-${item.key}`"
  66. :element="item"
  67. v-model:select="selectWidget"
  68. :index="index"
  69. :data="element"
  70. @select-change="handleSelectChange($event, item)"
  71. :platform="platform"
  72. :form-key="formKey"
  73. :subform="true"
  74. >
  75. </widget-card>
  76. <widget-group
  77. v-else-if="item.type === 'group'"
  78. :key="`group-${item.key}`"
  79. :element="item"
  80. v-model:select="selectWidget"
  81. :index="index"
  82. :data="element"
  83. @select-change="handleSelectChange($event, item)"
  84. :platform="platform"
  85. :form-key="formKey"
  86. :subform="true"
  87. >
  88. </widget-group>
  89. <widget-inline
  90. v-else-if="item.type === 'inline'"
  91. :key="`inline-${item.key}`"
  92. :element="item"
  93. v-model:select="selectWidget"
  94. :index="index"
  95. :data="element"
  96. @select-change="handleSelectChange($event, item)"
  97. :platform="platform"
  98. :form-key="formKey"
  99. :subform="true"
  100. ></widget-inline>
  101. <widget-report
  102. v-else-if="item.type === 'report'"
  103. :key="`report-${item.key}`"
  104. :element="item"
  105. v-model:select="selectWidget"
  106. :index="index"
  107. :data="element"
  108. @select-change="handleSelectChange($event, item)"
  109. :platform="platform"
  110. :form-key="formKey"
  111. :subform="true"
  112. >
  113. </widget-report>
  114. <widget-sub-form
  115. v-else-if="item.type === 'subform'"
  116. :key="`subform-${item.key}`"
  117. :element="item"
  118. v-model:select="selectWidget"
  119. :index="index"
  120. :data="element"
  121. @select-change="handleSelectChange($event, item)"
  122. :platform="platform"
  123. :form-key="formKey"
  124. :subform="true"
  125. >
  126. </widget-sub-form>
  127. <widget-table
  128. v-else-if="item.type === 'table'"
  129. :key="`table-${item.key}`"
  130. :element="item"
  131. v-model:select="selectWidget"
  132. :index="index"
  133. :data="element"
  134. @select-change="handleSelectChange($event, item)"
  135. :platform="platform"
  136. :form-key="formKey"
  137. :subform="true"
  138. >
  139. </widget-table>
  140. <widget-form-item
  141. v-else-if="item.type !== 'grid'"
  142. :key="`form-item-${item.key}`"
  143. :element="item"
  144. v-model:select="selectWidget"
  145. :index="index" :data="element"
  146. @select-change="handleSelectChange($event, item)"
  147. :form-key="formKey"
  148. >
  149. </widget-form-item>
  150. <widget-col-item
  151. v-else
  152. :key="`grid-${item.key}`"
  153. :element="item"
  154. v-model:select="selectWidget"
  155. :index="index"
  156. :data="element"
  157. @select-change="handleSelectChange($event, item)"
  158. :platform="platform"
  159. :form-key="formKey"
  160. :subform="true"
  161. >
  162. </widget-col-item>
  163. </template>
  164. </draggable>
  165. </div>
  166. </el-form-item>
  167. <div class="widget-view-action widget-subform-action" v-if="select.key == element.key">
  168. <i class="fm-iconfont icon-icon_clone" @click.stop="handleWidgetClone(index)" :title="$t('fm.tooltip.clone')"></i>
  169. <i class="fm-iconfont icon-trash" @click.stop="handleWidgetDelete(index)" :title="$t('fm.tooltip.trash')"></i>
  170. </div>
  171. <div class="widget-view-drag widget-subform-drag" v-if="select.key == element.key">
  172. <i class="fm-iconfont icon-drag drag-widget"></i>
  173. </div>
  174. <div class="widget-view-model " :style="{'color': element.options.dataBind ? '' : '#666'}">
  175. <span>{{element.model}}</span>
  176. </div>
  177. <div class="widget-view-type ">
  178. <span>{{element.type ? this.$t('fm.components.fields.' + element.type) : ''}}</span>
  179. </div>
  180. </div>
  181. </template>
  182. <script>
  183. import Draggable from 'vuedraggable/src/vuedraggable'
  184. import WidgetFormItem from './WidgetFormItem.vue'
  185. import WidgetInline from './WidgetInline.vue'
  186. import WidgetTable from './WidgetTable.vue'
  187. import { defineAsyncComponent } from 'vue'
  188. import { widgetSubFormMixin } from '../mixins/widgetSubForm.js'
  189. export default {
  190. name: 'widget-sub-form',
  191. components: {
  192. Draggable,
  193. WidgetFormItem,
  194. WidgetInline,
  195. WidgetTable,
  196. WidgetColItem: defineAsyncComponent(() => import('./WidgetColItem.vue')),
  197. WidgetTabItem: defineAsyncComponent(() => import('./WidgetTabItem.vue')),
  198. WidgetReport: defineAsyncComponent(() => import('./WidgetReport.vue')),
  199. WidgetCollapse: defineAsyncComponent(() => import('./WidgetCollapse.vue')),
  200. WidgetCard: defineAsyncComponent(() => import('./WidgetCard.vue')),
  201. WidgetGroup: defineAsyncComponent(() => import('./WidgetGroup.vue'))
  202. },
  203. mixins: [widgetSubFormMixin]
  204. }
  205. </script>