GenerateForm.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <template>
  2. <div :style="{width: formData.config && formData.config.width}" class="fm-form"
  3. :class="{
  4. ['fm-'+formStyleKey]: true,
  5. 'is-print': printRead
  6. }"
  7. >
  8. <el-form :ref="formRef"
  9. @submit.prevent
  10. :key="formKey"
  11. v-if="formShow"
  12. :class="{
  13. [formData.config && formData.config.customClass]: (formData.config && formData.config.customClass) ? true : false,
  14. 'no-label-form': formData.config && (formData.config.labelWidth == 0)
  15. }"
  16. :size="formData.config && formData.config.size"
  17. :model="models"
  18. :rules="rules"
  19. :label-position="formData.config && formData.config.labelPosition"
  20. :disabled="!edit"
  21. :label-width="formData.config && formData.config.labelWidth + 'px'"
  22. :validate-on-rule-change="false"
  23. :label-suffix="formData.config?.labelSuffix ? ' : ' : ' '"
  24. >
  25. <template v-for="item in formData.list">
  26. <generate-col-item
  27. v-if="item.type == 'grid'"
  28. :key="`grid-${item.key}`"
  29. :model="models"
  30. :rules="rules"
  31. :element="item"
  32. :remote="remote"
  33. :blanks="blanks"
  34. :display="displayFields"
  35. @input-change="onInputChange"
  36. :edit="edit"
  37. :remote-option="remoteOption"
  38. :platform="platform"
  39. :preview="preview"
  40. :container-key="containerKey"
  41. :data-source-value="dataSourceValue"
  42. :event-function="eventFunction"
  43. :print-read="printRead"
  44. :form-component="$refs[formRef]"
  45. :group="''"
  46. :field-node="''"
  47. >
  48. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  49. <slot :name="blank.name" :model="scope.model"></slot>
  50. </template>
  51. </generate-col-item>
  52. <generate-tab-item
  53. v-else-if="item.type == 'tabs'"
  54. :key="`tab-${item.key}`"
  55. :model="models"
  56. :rules="rules"
  57. :element="item"
  58. :remote="remote"
  59. :blanks="blanks"
  60. :display="displayFields"
  61. @input-change="onInputChange"
  62. :edit="edit"
  63. :remote-option="remoteOption"
  64. :platform="platform"
  65. :preview="preview"
  66. :container-key="containerKey"
  67. :data-source-value="dataSourceValue"
  68. :event-function="eventFunction"
  69. :print-read="printRead"
  70. :form-component="$refs[formRef]"
  71. :group="''"
  72. :field-node="''"
  73. >
  74. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  75. <slot :name="blank.name" :model="scope.model"></slot>
  76. </template>
  77. </generate-tab-item>
  78. <generate-collapse
  79. v-else-if="item.type == 'collapse'"
  80. :key="`collapse-${item.key}`"
  81. :model="models"
  82. :rules="rules"
  83. :element="item"
  84. :remote="remote"
  85. :blanks="blanks"
  86. :display="displayFields"
  87. @input-change="onInputChange"
  88. :edit="edit"
  89. :remote-option="remoteOption"
  90. :platform="platform"
  91. :preview="preview"
  92. :container-key="containerKey"
  93. :data-source-value="dataSourceValue"
  94. :event-function="eventFunction"
  95. :print-read="printRead"
  96. :form-component="$refs[formRef]"
  97. :group="''"
  98. :field-node="''"
  99. >
  100. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  101. <slot :name="blank.name" :model="scope.model"></slot>
  102. </template>
  103. </generate-collapse>
  104. <generate-report
  105. v-else-if="item.type == 'report'"
  106. :key="`report-${item.key}`"
  107. :model="models"
  108. :rules="rules"
  109. :element="item"
  110. :remote="remote"
  111. :blanks="blanks"
  112. :display="displayFields"
  113. @input-change="onInputChange"
  114. :edit="edit"
  115. :remote-option="remoteOption"
  116. :platform="platform"
  117. :preview="preview"
  118. :container-key="containerKey"
  119. :data-source-value="dataSourceValue"
  120. :event-function="eventFunction"
  121. :print-read="printRead"
  122. :form-component="$refs[formRef]"
  123. :group="''"
  124. :field-node="''"
  125. >
  126. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  127. <slot :name="blank.name" :model="scope.model"></slot>
  128. </template>
  129. </generate-report>
  130. <generate-inline
  131. v-else-if="item.type == 'inline'"
  132. :key="`inline-${item.key}`"
  133. :model="models"
  134. :rules="rules"
  135. :element="item"
  136. :remote="remote"
  137. :blanks="blanks"
  138. :display="displayFields"
  139. @input-change="onInputChange"
  140. :edit="edit"
  141. :remote-option="remoteOption"
  142. :platform="platform"
  143. :preview="preview"
  144. :container-key="containerKey"
  145. :data-source-value="dataSourceValue"
  146. :event-function="eventFunction"
  147. :print-read="printRead"
  148. :form-component="$refs[formRef]"
  149. :group="''"
  150. :field-node="''"
  151. >
  152. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  153. <slot :name="blank.name" :model="scope.model"></slot>
  154. </template>
  155. </generate-inline>
  156. <generate-dialog
  157. v-else-if="item.type == 'dialog'"
  158. :key="`dialog-${item.key}`"
  159. v-model:models="models"
  160. :rules="rules"
  161. :element="item"
  162. :remote="remote"
  163. :blanks="blanks"
  164. :edit="edit"
  165. :remote-option="remoteOption"
  166. :platform="platform"
  167. :preview="preview"
  168. :container-key="containerKey"
  169. :data-source-value="dataSourceValue"
  170. :event-function="eventFunction"
  171. :print-read="printRead"
  172. :form-component="$refs[formRef]"
  173. :group="''"
  174. :field-node="''"
  175. >
  176. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  177. <slot :name="blank.name" :model="scope.model"></slot>
  178. </template>
  179. </generate-dialog>
  180. <generate-card
  181. v-else-if="item.type == 'card'"
  182. :key="`card-${item.key}`"
  183. :model="models"
  184. :rules="rules"
  185. :element="item"
  186. :remote="remote"
  187. :blanks="blanks"
  188. :display="displayFields"
  189. @input-change="onInputChange"
  190. :edit="edit"
  191. :remote-option="remoteOption"
  192. :platform="platform"
  193. :preview="preview"
  194. :container-key="containerKey"
  195. :data-source-value="dataSourceValue"
  196. :event-function="eventFunction"
  197. :print-read="printRead"
  198. :form-component="$refs[formRef]"
  199. :group="''"
  200. :field-node="''"
  201. >
  202. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  203. <slot :name="blank.name" :model="scope.model"></slot>
  204. </template>
  205. </generate-card>
  206. <generate-form-item
  207. v-else
  208. :key="`form-item-${item.key}`"
  209. :models="models"
  210. :rules="rules"
  211. :widget="item"
  212. :remote="remote"
  213. :blanks="blanks"
  214. :display="displayFields"
  215. @input-change="onInputChange"
  216. :edit="edit"
  217. :remote-option="remoteOption"
  218. :platform="platform"
  219. :preview="preview"
  220. :container-key="containerKey"
  221. :data-source-value="dataSourceValue"
  222. :event-function="eventFunction"
  223. :print-read="printRead"
  224. :form-component="$refs[formRef]"
  225. :group="''"
  226. :field-node="''"
  227. >
  228. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  229. <slot :name="blank.name" :model="scope.model"></slot>
  230. </template>
  231. </generate-form-item>
  232. </template>
  233. </el-form>
  234. </div>
  235. </template>
  236. <script>
  237. import GenerateFormItem from './GenerateFormItem.vue'
  238. import GenerateColItem from './GenerateColItem.vue'
  239. import GenerateTabItem from './GenerateTabItem.vue'
  240. import GenerateReport from './GenerateReport.vue'
  241. import GenerateInline from './GenerateInline.vue'
  242. import GenerateCollapse from './GenerateCollapse.vue'
  243. import GenerateDialog from './GenerateDialog.vue'
  244. import GenerateCard from './GenerateCard.vue'
  245. import { generateFormMixin } from '../mixins/generateForm.js'
  246. export default {
  247. name: 'fm-generate-form',
  248. components: {
  249. GenerateFormItem,
  250. GenerateColItem,
  251. GenerateTabItem,
  252. GenerateReport,
  253. GenerateInline,
  254. GenerateCollapse,
  255. GenerateDialog,
  256. GenerateCard
  257. },
  258. mixins: [generateFormMixin]
  259. }
  260. </script>