WidgetCollapse.vue 7.6 KB

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