ff-ui-plus 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/.nvmrc +1 -0
  2. package/.prettierrc.cjs +41 -0
  3. package/.stylelintignore +5 -0
  4. package/LICENSE +21 -0
  5. package/README.md +265 -0
  6. package/commitlint.config.cjs +162 -0
  7. package/global.d.ts +27 -0
  8. package/index.html +16 -0
  9. package/lib.sh +9 -0
  10. package/lint-staged.config.cjs +8 -0
  11. package/package.json +149 -0
  12. package/packages/components/adaptive-page/index.ts +5 -0
  13. package/packages/components/adaptive-page/src/index.vue +85 -0
  14. package/packages/components/adaptive-page/src/type.ts +9 -0
  15. package/packages/components/adaptive-page/style/css.ts +1 -0
  16. package/packages/components/adaptive-page/style/index.ts +1 -0
  17. package/packages/components/button/index.ts +5 -0
  18. package/packages/components/button/src/index.vue +41 -0
  19. package/packages/components/button/src/type.ts +11 -0
  20. package/packages/components/button/style/css.ts +1 -0
  21. package/packages/components/button/style/index.ts +1 -0
  22. package/packages/components/chart/index.ts +5 -0
  23. package/packages/components/chart/src/index.vue +121 -0
  24. package/packages/components/chart/src/type.ts +7 -0
  25. package/packages/components/chart/style/css.ts +1 -0
  26. package/packages/components/chart/style/index.ts +1 -0
  27. package/packages/components/checkbox/index.ts +3 -0
  28. package/packages/components/checkbox/src/checkbox.d.ts +5 -0
  29. package/packages/components/checkbox/src/index.vue +67 -0
  30. package/packages/components/checkbox/style/css.ts +1 -0
  31. package/packages/components/checkbox/style/index.ts +1 -0
  32. package/packages/components/date-picker/index.ts +5 -0
  33. package/packages/components/date-picker/src/index.vue +228 -0
  34. package/packages/components/date-picker/src/type.ts +22 -0
  35. package/packages/components/date-picker/style/css.ts +1 -0
  36. package/packages/components/date-picker/style/index.ts +1 -0
  37. package/packages/components/detail/index.ts +5 -0
  38. package/packages/components/detail/src/index.vue +102 -0
  39. package/packages/components/detail/src/renderLabel.vue +15 -0
  40. package/packages/components/detail/src/renderTooltip.vue +15 -0
  41. package/packages/components/detail/src/type.ts +28 -0
  42. package/packages/components/detail/style/css.ts +1 -0
  43. package/packages/components/detail/style/index.ts +1 -0
  44. package/packages/components/form/index.ts +5 -0
  45. package/packages/components/form/src/index.vue +407 -0
  46. package/packages/components/form/src/renderBtn.vue +15 -0
  47. package/packages/components/form/src/renderComp.vue +15 -0
  48. package/packages/components/form/src/type.ts +26 -0
  49. package/packages/components/form/style/css.ts +1 -0
  50. package/packages/components/form/style/index.ts +1 -0
  51. package/packages/components/index.ts +20 -0
  52. package/packages/components/input/index.ts +5 -0
  53. package/packages/components/input/src/index.vue +225 -0
  54. package/packages/components/input/src/type.ts +14 -0
  55. package/packages/components/input/style/css.ts +1 -0
  56. package/packages/components/input/style/index.ts +1 -0
  57. package/packages/components/layout-page/index.ts +4 -0
  58. package/packages/components/layout-page/src/index.vue +74 -0
  59. package/packages/components/layout-page/style/css.ts +1 -0
  60. package/packages/components/layout-page/style/index.ts +1 -0
  61. package/packages/components/layout-page-item/index.ts +3 -0
  62. package/packages/components/layout-page-item/src/index.vue +16 -0
  63. package/packages/components/layout-page-item/style/css.ts +1 -0
  64. package/packages/components/layout-page-item/style/index.ts +1 -0
  65. package/packages/components/module-form/index.ts +4 -0
  66. package/packages/components/module-form/src/index.vue +243 -0
  67. package/packages/components/module-form/src/moduleDetail.vue +61 -0
  68. package/packages/components/module-form/src/moduleForm.vue +88 -0
  69. package/packages/components/module-form/src/type.ts +16 -0
  70. package/packages/components/module-form/style/css.ts +1 -0
  71. package/packages/components/module-form/style/index.ts +1 -0
  72. package/packages/components/package.json +9 -0
  73. package/packages/components/query-condition/index.ts +4 -0
  74. package/packages/components/query-condition/src/index.vue +478 -0
  75. package/packages/components/query-condition/src/moreChoose.vue +159 -0
  76. package/packages/components/query-condition/src/renderComp.vue +15 -0
  77. package/packages/components/query-condition/src/type.ts +22 -0
  78. package/packages/components/query-condition/src/useComputed.ts +94 -0
  79. package/packages/components/query-condition/style/css.ts +1 -0
  80. package/packages/components/query-condition/style/index.ts +1 -0
  81. package/packages/components/radio/index.ts +3 -0
  82. package/packages/components/radio/src/index.vue +73 -0
  83. package/packages/components/radio/src/radio.d.ts +12 -0
  84. package/packages/components/radio/style/css.ts +1 -0
  85. package/packages/components/radio/style/index.ts +1 -0
  86. package/packages/components/select/index.ts +4 -0
  87. package/packages/components/select/src/index.vue +240 -0
  88. package/packages/components/select/src/type.ts +43 -0
  89. package/packages/components/select/style/css.ts +1 -0
  90. package/packages/components/select/style/index.ts +1 -0
  91. package/packages/components/select-icon/index.ts +4 -0
  92. package/packages/components/select-icon/src/index.vue +128 -0
  93. package/packages/components/select-icon/style/css.ts +1 -0
  94. package/packages/components/select-icon/style/index.ts +1 -0
  95. package/packages/components/select-table/index.ts +4 -0
  96. package/packages/components/select-table/src/ClickOutside.ts +106 -0
  97. package/packages/components/select-table/src/index.vue +851 -0
  98. package/packages/components/select-table/src/renderCol.vue +20 -0
  99. package/packages/components/select-table/src/type.ts +56 -0
  100. package/packages/components/select-table/src/useVirtualized.ts +86 -0
  101. package/packages/components/select-table/style/css.ts +1 -0
  102. package/packages/components/select-table/style/index.ts +1 -0
  103. package/packages/components/step-wizard/index.ts +4 -0
  104. package/packages/components/step-wizard/src/index.vue +99 -0
  105. package/packages/components/step-wizard/src/type.ts +17 -0
  106. package/packages/components/step-wizard/style/css.ts +1 -0
  107. package/packages/components/step-wizard/style/index.ts +1 -0
  108. package/packages/components/table/index.ts +5 -0
  109. package/packages/components/table/src/ColumnSet.vue +176 -0
  110. package/packages/components/table/src/TTableColumn.vue +100 -0
  111. package/packages/components/table/src/densitySet.vue +91 -0
  112. package/packages/components/table/src/firstColumn.vue +132 -0
  113. package/packages/components/table/src/index.vue +926 -0
  114. package/packages/components/table/src/operator.vue +246 -0
  115. package/packages/components/table/src/renderCol.vue +20 -0
  116. package/packages/components/table/src/renderHeader.vue +18 -0
  117. package/packages/components/table/src/singleEdit.vue +354 -0
  118. package/packages/components/table/src/singleEditCell.vue +303 -0
  119. package/packages/components/table/src/tableProps.ts +162 -0
  120. package/packages/components/table/src/useExpose.ts +74 -0
  121. package/packages/components/table/src/useVirtualized.ts +70 -0
  122. package/packages/components/table/style/css.ts +1 -0
  123. package/packages/components/table/style/index.ts +1 -0
  124. package/packages/components/tabs/index.ts +4 -0
  125. package/packages/components/tabs/src/index.vue +50 -0
  126. package/packages/components/tabs/style/css.ts +1 -0
  127. package/packages/components/tabs/style/index.ts +1 -0
  128. package/packages/components/timer-btn/index.ts +4 -0
  129. package/packages/components/timer-btn/src/index.vue +57 -0
  130. package/packages/components/timer-btn/style/css.ts +1 -0
  131. package/packages/components/timer-btn/style/index.ts +1 -0
  132. package/packages/components/utils/index.ts +142 -0
  133. package/packages/components/utils/install.ts +16 -0
  134. package/packages/eslint-config/build.config.ts +16 -0
  135. package/packages/eslint-config/dist/index.cjs +122 -0
  136. package/packages/eslint-config/dist/index.d.cts +92 -0
  137. package/packages/eslint-config/dist/index.d.mts +92 -0
  138. package/packages/eslint-config/dist/index.d.ts +92 -0
  139. package/packages/eslint-config/dist/index.mjs +120 -0
  140. package/packages/eslint-config/package.json +34 -0
  141. package/packages/eslint-config/src/index.ts +121 -0
  142. package/packages/ff-ui-plus/component.ts +55 -0
  143. package/packages/ff-ui-plus/defaults.ts +4 -0
  144. package/packages/ff-ui-plus/index.ts +9 -0
  145. package/packages/ff-ui-plus/make-installer.ts +10 -0
  146. package/packages/ff-ui-plus/package.json +117 -0
  147. package/packages/ff-ui-plus/version.ts +1 -0
  148. package/packages/hooks/index.ts +1 -0
  149. package/packages/hooks/package.json +9 -0
  150. package/packages/hooks/useLocale.ts +53 -0
  151. package/packages/locale/index.ts +11 -0
  152. package/packages/locale/lang/en.ts +157 -0
  153. package/packages/locale/lang/zh-cn.ts +155 -0
  154. package/packages/locale/package.json +12 -0
  155. package/packages/resolver/package.json +23 -0
  156. package/packages/resolver/src/index.ts +99 -0
  157. package/packages/theme-chalk/build.ts +76 -0
  158. package/packages/theme-chalk/dist/index.css +1 -0
  159. package/packages/theme-chalk/dist/src/adaptive-page.scss +48 -0
  160. package/packages/theme-chalk/dist/src/button.scss +23 -0
  161. package/packages/theme-chalk/dist/src/chart.scss +10 -0
  162. package/packages/theme-chalk/dist/src/checkbox.scss +0 -0
  163. package/packages/theme-chalk/dist/src/date-picker.scss +3 -0
  164. package/packages/theme-chalk/dist/src/detail.scss +7 -0
  165. package/packages/theme-chalk/dist/src/form.scss +104 -0
  166. package/packages/theme-chalk/dist/src/index.scss +19 -0
  167. package/packages/theme-chalk/dist/src/input.scss +0 -0
  168. package/packages/theme-chalk/dist/src/layout-page-item.scss +10 -0
  169. package/packages/theme-chalk/dist/src/layout-page.scss +37 -0
  170. package/packages/theme-chalk/dist/src/module-form.scss +335 -0
  171. package/packages/theme-chalk/dist/src/query-condition.scss +132 -0
  172. package/packages/theme-chalk/dist/src/radio.scss +0 -0
  173. package/packages/theme-chalk/dist/src/select-icon.scss +61 -0
  174. package/packages/theme-chalk/dist/src/select-table.scss +71 -0
  175. package/packages/theme-chalk/dist/src/select.scss +7 -0
  176. package/packages/theme-chalk/dist/src/step-wizard.scss +51 -0
  177. package/packages/theme-chalk/dist/src/table.scss +381 -0
  178. package/packages/theme-chalk/dist/src/tabs.scss +20 -0
  179. package/packages/theme-chalk/dist/src/timer-btn.scss +21 -0
  180. package/packages/theme-chalk/dist/t-adaptive-page.css +1 -0
  181. package/packages/theme-chalk/dist/t-button.css +1 -0
  182. package/packages/theme-chalk/dist/t-chart.css +1 -0
  183. package/packages/theme-chalk/dist/t-checkbox.css +0 -0
  184. package/packages/theme-chalk/dist/t-date-picker.css +1 -0
  185. package/packages/theme-chalk/dist/t-detail.css +1 -0
  186. package/packages/theme-chalk/dist/t-form.css +1 -0
  187. package/packages/theme-chalk/dist/t-input.css +0 -0
  188. package/packages/theme-chalk/dist/t-layout-page-item.css +1 -0
  189. package/packages/theme-chalk/dist/t-layout-page.css +1 -0
  190. package/packages/theme-chalk/dist/t-module-form.css +1 -0
  191. package/packages/theme-chalk/dist/t-query-condition.css +1 -0
  192. package/packages/theme-chalk/dist/t-radio.css +0 -0
  193. package/packages/theme-chalk/dist/t-select-icon.css +1 -0
  194. package/packages/theme-chalk/dist/t-select-table.css +1 -0
  195. package/packages/theme-chalk/dist/t-select.css +1 -0
  196. package/packages/theme-chalk/dist/t-step-wizard.css +1 -0
  197. package/packages/theme-chalk/dist/t-table.css +1 -0
  198. package/packages/theme-chalk/dist/t-tabs.css +1 -0
  199. package/packages/theme-chalk/dist/t-timer-btn.css +1 -0
  200. package/packages/theme-chalk/mixins/config.scss +8 -0
  201. package/packages/theme-chalk/mixins/function.scss +71 -0
  202. package/packages/theme-chalk/mixins/mixins.scss +79 -0
  203. package/packages/theme-chalk/package.json +21 -0
  204. package/packages/theme-chalk/src/adaptive-page.scss +48 -0
  205. package/packages/theme-chalk/src/button.scss +23 -0
  206. package/packages/theme-chalk/src/chart.scss +10 -0
  207. package/packages/theme-chalk/src/checkbox.scss +0 -0
  208. package/packages/theme-chalk/src/date-picker.scss +3 -0
  209. package/packages/theme-chalk/src/detail.scss +7 -0
  210. package/packages/theme-chalk/src/form.scss +104 -0
  211. package/packages/theme-chalk/src/index.scss +19 -0
  212. package/packages/theme-chalk/src/input.scss +0 -0
  213. package/packages/theme-chalk/src/layout-page-item.scss +10 -0
  214. package/packages/theme-chalk/src/layout-page.scss +37 -0
  215. package/packages/theme-chalk/src/module-form.scss +335 -0
  216. package/packages/theme-chalk/src/query-condition.scss +132 -0
  217. package/packages/theme-chalk/src/radio.scss +0 -0
  218. package/packages/theme-chalk/src/select-icon.scss +61 -0
  219. package/packages/theme-chalk/src/select-table.scss +71 -0
  220. package/packages/theme-chalk/src/select.scss +7 -0
  221. package/packages/theme-chalk/src/step-wizard.scss +51 -0
  222. package/packages/theme-chalk/src/table.scss +381 -0
  223. package/packages/theme-chalk/src/tabs.scss +20 -0
  224. package/packages/theme-chalk/src/timer-btn.scss +21 -0
  225. package/packages/types/global.ts +34 -0
  226. package/packages/types/index.ts +1 -0
  227. package/packages/types/package.json +10 -0
  228. package/packages/utils/build.config.ts +23 -0
  229. package/packages/utils/dist/cookie.cjs +1 -0
  230. package/packages/utils/dist/cookie.d.cts +16 -0
  231. package/packages/utils/dist/cookie.d.mts +16 -0
  232. package/packages/utils/dist/cookie.d.ts +16 -0
  233. package/packages/utils/dist/cookie.mjs +1 -0
  234. package/packages/utils/dist/day.cjs +1 -0
  235. package/packages/utils/dist/day.d.cts +37 -0
  236. package/packages/utils/dist/day.d.mts +37 -0
  237. package/packages/utils/dist/day.d.ts +37 -0
  238. package/packages/utils/dist/day.mjs +1 -0
  239. package/packages/utils/dist/file.cjs +1 -0
  240. package/packages/utils/dist/file.d.cts +61 -0
  241. package/packages/utils/dist/file.d.mts +61 -0
  242. package/packages/utils/dist/file.d.ts +61 -0
  243. package/packages/utils/dist/file.mjs +1 -0
  244. package/packages/utils/dist/index.cjs +1 -0
  245. package/packages/utils/dist/index.d.cts +13 -0
  246. package/packages/utils/dist/index.d.mts +13 -0
  247. package/packages/utils/dist/index.d.ts +13 -0
  248. package/packages/utils/dist/index.mjs +1 -0
  249. package/packages/utils/dist/is.cjs +1 -0
  250. package/packages/utils/dist/is.d.cts +117 -0
  251. package/packages/utils/dist/is.d.mts +117 -0
  252. package/packages/utils/dist/is.d.ts +117 -0
  253. package/packages/utils/dist/is.mjs +1 -0
  254. package/packages/utils/dist/letter.cjs +1 -0
  255. package/packages/utils/dist/letter.d.cts +12 -0
  256. package/packages/utils/dist/letter.d.mts +12 -0
  257. package/packages/utils/dist/letter.d.ts +12 -0
  258. package/packages/utils/dist/letter.mjs +1 -0
  259. package/packages/utils/dist/number.cjs +1 -0
  260. package/packages/utils/dist/number.d.cts +23 -0
  261. package/packages/utils/dist/number.d.mts +23 -0
  262. package/packages/utils/dist/number.d.ts +23 -0
  263. package/packages/utils/dist/number.mjs +1 -0
  264. package/packages/utils/dist/openExe.cjs +1 -0
  265. package/packages/utils/dist/openExe.d.cts +9 -0
  266. package/packages/utils/dist/openExe.d.mts +9 -0
  267. package/packages/utils/dist/openExe.d.ts +9 -0
  268. package/packages/utils/dist/openExe.mjs +1 -0
  269. package/packages/utils/dist/storage.cjs +1 -0
  270. package/packages/utils/dist/storage.d.cts +46 -0
  271. package/packages/utils/dist/storage.d.mts +46 -0
  272. package/packages/utils/dist/storage.d.ts +46 -0
  273. package/packages/utils/dist/storage.mjs +1 -0
  274. package/packages/utils/dist/validate.cjs +1 -0
  275. package/packages/utils/dist/validate.d.cts +32 -0
  276. package/packages/utils/dist/validate.d.mts +32 -0
  277. package/packages/utils/dist/validate.d.ts +32 -0
  278. package/packages/utils/dist/validate.mjs +1 -0
  279. package/packages/utils/dist/ws.cjs +1 -0
  280. package/packages/utils/dist/ws.d.cts +86 -0
  281. package/packages/utils/dist/ws.d.mts +86 -0
  282. package/packages/utils/dist/ws.d.ts +86 -0
  283. package/packages/utils/dist/ws.mjs +1 -0
  284. package/packages/utils/package.json +42 -0
  285. package/packages/utils/src/cookie.ts +24 -0
  286. package/packages/utils/src/day.ts +66 -0
  287. package/packages/utils/src/file.ts +173 -0
  288. package/packages/utils/src/index.ts +10 -0
  289. package/packages/utils/src/is.ts +159 -0
  290. package/packages/utils/src/letter.ts +15 -0
  291. package/packages/utils/src/number.ts +37 -0
  292. package/packages/utils/src/openExe.ts +45 -0
  293. package/packages/utils/src/storage.ts +77 -0
  294. package/packages/utils/src/validate.ts +55 -0
  295. package/packages/utils/src/ws.ts +191 -0
  296. package/pnpm-workspace.yaml +3 -0
  297. package/publish.sh +37 -0
  298. package/resolver.sh +9 -0
  299. package/scripts/build/all.ts +152 -0
  300. package/scripts/build/build.config.ts +10 -0
  301. package/scripts/build/dist/index.cjs +7 -0
  302. package/scripts/build/dist/index.d.ts +2 -0
  303. package/scripts/build/dist/index.mjs +12 -0
  304. package/scripts/build/index.ts +63 -0
  305. package/scripts/build/modules.ts +141 -0
  306. package/scripts/build/package.json +14 -0
  307. package/scripts/release/gen-version.ts +12 -0
  308. package/scripts/release/index.ts +209 -0
  309. package/scripts/utils/excludeFiles.ts +14 -0
  310. package/scripts/utils/index.ts +88 -0
  311. package/scripts/utils/main.ts +14 -0
  312. package/scripts/utils/paths.ts +40 -0
  313. package/scripts/utils/plugin.ts +61 -0
  314. package/tsconfig.base.json +23 -0
  315. package/tsconfig.vitest.json +11 -0
  316. package/tsconfig.web.json +18 -0
  317. package/typings/env.d.ts +22 -0
  318. package/typings/index.d.ts +161 -0
  319. package/vitest.config.ts +22 -0
@@ -0,0 +1,407 @@
1
+ <template>
2
+ <el-form
3
+ class="t-form"
4
+ ref="tform"
5
+ :class="className"
6
+ :model="formOpts.formData"
7
+ :rules="formOpts.rules"
8
+ :label-width="formOpts.labelWidth || '120px'"
9
+ :label-position="formOpts.labelPosition || labelPosition || 'right'"
10
+ v-bind="$attrs"
11
+ >
12
+ <template v-for="(item, index) in formOpts.fieldList">
13
+ <el-form-item
14
+ v-if="
15
+ typeof item.isHideItem == 'function'
16
+ ? item.isHideItem(formOpts.formData)
17
+ : !item.isHideItem
18
+ "
19
+ :key="index"
20
+ :prop="item.value"
21
+ :label="item.label"
22
+ :class="[
23
+ item.className,
24
+ { render_label: item.labelRender },
25
+ { slot_label: item.slotName },
26
+ { render_laber_position_left: formOpts.labelPosition === 'left' }
27
+ ]"
28
+ :rules="item.rules"
29
+ :label-width="item.labelWidth"
30
+ :style="getChildWidth(item)"
31
+ v-bind="$attrs"
32
+ >
33
+ <!-- 自定义label -->
34
+ <template #label v-if="item.labelSlotName || item.labelRender">
35
+ <render-comp v-if="item.labelRender" :render="item.labelRender" :item="item" />
36
+ <template v-if="item.labelSlotName">
37
+ <slot :name="item.labelSlotName" :scope="item"></slot>
38
+ </template>
39
+ </template>
40
+ <!-- 自定义输入框插槽 -->
41
+ <template v-if="item.slotName">
42
+ <slot :name="item.slotName" :scope="formOpts.formData"></slot>
43
+ </template>
44
+ <!-- 文本展示值 -->
45
+ <template v-if="item.textShow">
46
+ <span class="text_show">{{ item.textValue || formOpts.formData[item.value] }}</span>
47
+ </template>
48
+ <template v-if="item.isSelfCom">
49
+ <component
50
+ v-if="item.comp === 't-select-table'"
51
+ :is="item.comp"
52
+ :ref="(el:any) => handleRef(el, item, index)"
53
+ :placeholder="item.placeholder || getPlaceholder(item)"
54
+ v-bind="
55
+ typeof item.bind == 'function'
56
+ ? item.bind(formOpts.formData)
57
+ : { clearable: true, filterable: true, ...item.bind }
58
+ "
59
+ :style="{ width: item.width || '100%' }"
60
+ v-on="cEvent(item, 't-select-table')"
61
+ />
62
+ <component
63
+ v-else
64
+ :is="item.comp"
65
+ v-model="formOpts.formData[item.value]"
66
+ :placeholder="item.placeholder || getPlaceholder(item)"
67
+ :ref="(el: any) => getRefs(el, item, index)"
68
+ v-bind="
69
+ typeof item.bind == 'function'
70
+ ? item.bind(formOpts.formData)
71
+ : { clearable: true, filterable: true, ...item.bind }
72
+ "
73
+ :style="{ width: item.width || '100%' }"
74
+ v-on="cEvent(item)"
75
+ />
76
+ </template>
77
+ <component
78
+ v-if="!item.slotName && !item.textShow && !item.isSelfCom"
79
+ :is="item.comp"
80
+ v-model="formOpts.formData[item.value]"
81
+ :type="item.type"
82
+ :placeholder="item.placeholder || getPlaceholder(item)"
83
+ @change="handleEvent(item.event, formOpts.formData[item.value], item)"
84
+ :ref="(el: any) => getRefs(el, item, index)"
85
+ v-bind="
86
+ typeof item.bind == 'function'
87
+ ? item.bind(formOpts.formData)
88
+ : { clearable: true, filterable: true, ...item.bind }
89
+ "
90
+ :style="{ width: item.width || '100%' }"
91
+ v-on="cEvent(item)"
92
+ >
93
+ <!-- 前置文本 -->
94
+ <template #prepend v-if="item.prepend">{{ item.prepend }}</template>
95
+ <!-- 后置文本 -->
96
+ <template #append v-if="item.append">{{ item.append }}</template>
97
+ <!-- 子组件自定义插槽 -->
98
+ <template v-if="item.childSlotName">
99
+ <slot :name="item.childSlotName"></slot>
100
+ </template>
101
+ <component
102
+ :is="compChildName(item)"
103
+ v-for="(value, key) in selectListType(item)"
104
+ :key="index"
105
+ :disabled="value.disabled"
106
+ :label="compChildLabel(item, value)"
107
+ :value="compChildValue(item, value, key)"
108
+ >{{ compChildShowLabel(item, value) }}</component
109
+ >
110
+ </component>
111
+ </el-form-item>
112
+ </template>
113
+ <!-- 按钮 -->
114
+ <div class="footer_btn flex-box flex-ver t-margin-top-5">
115
+ <template v-if="formOpts.btnSlotName">
116
+ <slot :name="formOpts.btnSlotName"></slot>
117
+ </template>
118
+ <template
119
+ v-if="!formOpts.btnSlotName && formOpts.operatorList && formOpts.operatorList.length > 0"
120
+ >
121
+ <template v-for="(val, index) in formOpts.operatorList">
122
+ <template v-if="val.render">
123
+ <render-btn :key="index" :item="val" :render="val.render" />
124
+ </template>
125
+ <template v-else>
126
+ <el-button
127
+ :key="index"
128
+ @click="val.fun(val)"
129
+ v-bind="{
130
+ type: 'primary',
131
+ size: 'small',
132
+ ...val.bind
133
+ }"
134
+ v-if="!val.isHideBtn"
135
+ >
136
+ {{ val.label }}
137
+ </el-button>
138
+ </template>
139
+ </template>
140
+ </template>
141
+ </div>
142
+ </el-form>
143
+ </template>
144
+
145
+ <script setup lang="ts">
146
+ import RenderComp from "./renderComp.vue"
147
+ import RenderBtn from "./renderBtn.vue"
148
+ import { computed, ref, watch, onMounted, getCurrentInstance } from "vue"
149
+ import { useLocale } from "@ff-ui-plus/hooks"
150
+ import type { TFormSelfProps as TFormProps } from "./type"
151
+ defineOptions({
152
+ name: "TForm"
153
+ })
154
+
155
+ const props = withDefaults(defineProps<TFormProps>(), {
156
+ className: "",
157
+ formOpts: () => ({} as any),
158
+ widthSize: 2,
159
+ labelPosition: "right",
160
+ isTrim: true
161
+ })
162
+
163
+ const cEvent = computed(() => {
164
+ return (item: { eventHandle: any }, type = "") => {
165
+ let event = { ...item.eventHandle }
166
+ let changeEvent = {} as any
167
+ Object.keys(event).forEach(v => {
168
+ changeEvent[v] = (e: any, ids: any) => {
169
+ if (type === "t-select-table") {
170
+ event[v] && event[v](e, ids)
171
+ } else {
172
+ event[v] && event[v](e, props.formOpts)
173
+ }
174
+ }
175
+ })
176
+ return { ...changeEvent }
177
+ }
178
+ })
179
+
180
+ const selectListType = computed(() => {
181
+ return (item: { list: string | number }) => {
182
+ if (props.formOpts.listTypeInfo) {
183
+ return props.formOpts.listTypeInfo[item.list]
184
+ } else {
185
+ return []
186
+ }
187
+ }
188
+ })
189
+
190
+ // 子组件名称
191
+ const compChildName = computed(() => {
192
+ return (opt: { type: any }) => {
193
+ switch (opt.type) {
194
+ case "checkbox":
195
+ return "el-checkbox"
196
+ case "radio":
197
+ return "el-radio"
198
+ case "select-arr":
199
+ case "select-obj":
200
+ return "el-option"
201
+ }
202
+ }
203
+ })
204
+
205
+ // 子子组件label
206
+ const compChildLabel = computed(() => {
207
+ return (opt: { type: any; arrLabel: any }, value: { [x: string]: any; value: any }) => {
208
+ switch (opt.type) {
209
+ case "radio":
210
+ case "checkbox":
211
+ return value[opt.arrLabel || "label"]
212
+ case "el-select-multiple":
213
+ case "select-arr":
214
+ return value[opt.arrLabel || "label"]
215
+ case "select-obj":
216
+ return value
217
+ }
218
+ }
219
+ })
220
+
221
+ // 子子组件value
222
+ const compChildValue = computed(() => {
223
+ return (opt: { type: any; arrKey: any }, value: { [x: string]: any; value: any }, key: any) => {
224
+ switch (opt.type) {
225
+ case "radio":
226
+ case "checkbox":
227
+ return value[opt.arrKey || "key"]
228
+ case "el-select-multiple":
229
+ case "select-arr":
230
+ return value[opt.arrKey || "key"]
231
+ case "select-obj":
232
+ return key
233
+ }
234
+ }
235
+ })
236
+
237
+ // 子子组件文字展示
238
+ const compChildShowLabel = computed(() => {
239
+ return (opt: { type: any; arrLabel: any }, value: { [x: string]: any; label: any }) => {
240
+ switch (opt.type) {
241
+ case "radio":
242
+ case "checkbox":
243
+ return value[opt.arrLabel || "label"]
244
+ case "el-select-multiple":
245
+ case "select-arr":
246
+ return value[opt.arrLabel || "label"]
247
+ case "select-obj":
248
+ return value
249
+ }
250
+ }
251
+ })
252
+
253
+ const colSize = ref(props.widthSize)
254
+ // 获取ref
255
+ const tform = ref<HTMLElement | any>(null)
256
+ const { t } = useLocale()
257
+ // 获取实例方法
258
+ const instance = getCurrentInstance() as any
259
+ // 抛出事件
260
+ const emits = defineEmits(["update:modelValue", "handleEvent", "getRefs"])
261
+
262
+ watch(
263
+ () => props.formOpts.formData,
264
+ () => {
265
+ // 将form实例返回到父级
266
+ emits("update:modelValue", tform.value)
267
+ },
268
+ { deep: true }
269
+ )
270
+
271
+ watch(
272
+ () => props.widthSize,
273
+ val => {
274
+ if (val > 6) {
275
+ colSize.value = 6
276
+ } else {
277
+ colSize.value = val
278
+ }
279
+ },
280
+ { deep: true }
281
+ )
282
+
283
+ onMounted(() => {
284
+ const entries = Object.entries(tform.value.$.exposed)
285
+ for (const [key, value] of entries) {
286
+ instance.exposed[key] = value
287
+ }
288
+ // 默认赋值触发handleEvent事件
289
+ let event: null = null
290
+ let item: null = null
291
+ props.formOpts.formData &&
292
+ Object.keys(props?.formOpts?.formData).forEach(key => {
293
+ if (props.formOpts.formData[key]) {
294
+ props.formOpts.fieldList.map((val: { value: string; event: null } | any) => {
295
+ if (val.value == key) {
296
+ event = val.event
297
+ item = val
298
+ }
299
+ })
300
+ handleEvent(event, props.formOpts.formData[key], item, false)
301
+ }
302
+ })
303
+ // 将form实例返回到父级
304
+ emits("update:modelValue", tform.value)
305
+ })
306
+
307
+ // label与输入框的布局方式
308
+ const getChildWidth = (item: { widthSize: any }) => {
309
+ if (props.formOpts.labelPosition === "top") {
310
+ return `flex: 0 1 calc((${100 / (item.widthSize || colSize.value)}% - 10px));margin-right:10px;`
311
+ } else {
312
+ return `flex: 0 1 ${100 / (item.widthSize || colSize.value)}%;`
313
+ }
314
+ }
315
+
316
+ // placeholder的显示
317
+ const getPlaceholder = (row: any) => {
318
+ let placeholder
319
+ if (row.comp && typeof row.comp == "string") {
320
+ if (row.comp.includes("input")) {
321
+ placeholder = t("plus.form.pleaseEnter") + row.label
322
+ } else if (row.comp.includes("select") || row.comp.includes("date")) {
323
+ placeholder = t("plus.form.pleaseSelect") + row.label
324
+ } else {
325
+ placeholder = row.label
326
+ }
327
+ }
328
+ return placeholder
329
+ }
330
+
331
+ // 查询条件change事件
332
+ const handleEvent = (
333
+ type: null,
334
+ val: any,
335
+ item: { isTrim: any; comp: string | string[]; type: string; value: string | number } | any,
336
+ flag = true
337
+ ) => {
338
+ // 去除前后空格
339
+ if (
340
+ flag &&
341
+ props.isTrim &&
342
+ !item.isTrim &&
343
+ item.comp.includes("el-input") &&
344
+ item?.bind?.type !== "number" &&
345
+ item.type !== "password" &&
346
+ item.type !== "inputNumber"
347
+ ) {
348
+ props.formOpts.formData[item.value] = props.formOpts.formData[item.value].trim()
349
+ }
350
+
351
+ emits("handleEvent", type, val)
352
+ }
353
+
354
+ // 自定义校验
355
+ const selfValidate = () => {
356
+ return new Promise((resolve: any, reject: any) => {
357
+ tform.value.validate((valid: boolean) => {
358
+ if (valid) {
359
+ resolve({
360
+ valid,
361
+ formData: props.formOpts.formData
362
+ })
363
+ } else {
364
+ reject({
365
+ valid,
366
+ formData: null
367
+ })
368
+ }
369
+ })
370
+ })
371
+ }
372
+
373
+ // 获取所有ref
374
+ const getRefs = (el: any, item: any, index: any) => {
375
+ emits("getRefs", el, item, index)
376
+ }
377
+
378
+ // 下拉选择表格组件 ref
379
+ const tselecttableref = ref({})
380
+ // 下拉选择表格组件 动态ref
381
+ const handleRef = (el: any, item: any, key: any) => {
382
+ emits("getRefs", el, item, key)
383
+ if (el) {
384
+ tselecttableref.value[`tselecttableref-${key}`] = el
385
+ }
386
+ }
387
+
388
+ const selfResetFields = () => {
389
+ resetTselectTable()
390
+ tform.value.resetFields()
391
+ }
392
+
393
+ // 清除下拉表格组件
394
+ const resetTselectTable = () => {
395
+ const refList = Object.keys(tselecttableref.value).filter(item =>
396
+ item.includes("tselecttableref")
397
+ )
398
+ if (refList.length > 0 && tselecttableref.value) {
399
+ refList.map(val => {
400
+ tselecttableref.value[val].clear()
401
+ })
402
+ }
403
+ }
404
+
405
+ // 暴露方法出去
406
+ defineExpose({ ...instance.exposed, selfValidate, selfResetFields, resetTselectTable })
407
+ </script>
@@ -0,0 +1,15 @@
1
+ <template>
2
+ <component :is="renderComponent" />
3
+ </template>
4
+ <script lang="ts" setup>
5
+ defineOptions({
6
+ name: "RenderBtn"
7
+ })
8
+ const props: any = defineProps({
9
+ render: Function,
10
+ item: Object
11
+ })
12
+ const renderComponent = () => {
13
+ return props.render(props?.item)
14
+ }
15
+ </script>
@@ -0,0 +1,15 @@
1
+ <template>
2
+ <component :is="renderComponent" />
3
+ </template>
4
+ <script lang="ts" setup>
5
+ defineOptions({
6
+ name: "RenderComp"
7
+ })
8
+ const props: any = defineProps({
9
+ render: Function,
10
+ item: Object
11
+ })
12
+ const renderComponent = () => {
13
+ return props.render(props?.item)
14
+ }
15
+ </script>
@@ -0,0 +1,26 @@
1
+ import type { FormProps } from "element-plus"
2
+ import type { Mutable } from "element-plus/es/utils"
3
+ export interface FormOpts {
4
+ formData?: Record<string, any>
5
+ rules?: Record<string, any>
6
+ fieldList: Array<any>
7
+ operatorList?: Array<{
8
+ label: string
9
+ fun: Function
10
+ bind?: Record<string, any>
11
+ isHideBtn?: boolean
12
+ render?: Function
13
+ }>
14
+ listTypeInfo?: Record<string, any[]>
15
+ labelWidth?: string
16
+ btnSlotName?: string
17
+ labelPosition?: "left" | "right" | "top"
18
+ }
19
+ export interface TFormSelfProps {
20
+ className?: string
21
+ formOpts: FormOpts | any
22
+ widthSize?: 1 | 2 | 3 | 4 | 5 | 6
23
+ labelPosition?: "left" | "right" | "top"
24
+ isTrim?: boolean
25
+ }
26
+ export type TFormProps = TFormSelfProps & Partial<Mutable<FormProps>>
@@ -0,0 +1 @@
1
+ import "@ff-ui-plus/theme-chalk/t-form.css"
@@ -0,0 +1 @@
1
+ import "@ff-ui-plus/theme-chalk/src/form.scss"
@@ -0,0 +1,20 @@
1
+ export * from "./adaptive-page"
2
+ export * from "./button"
3
+ export * from "./chart"
4
+ export * from "./checkbox"
5
+ export * from "./date-picker"
6
+ export * from "./detail"
7
+ export * from "./form"
8
+ export * from "./input"
9
+ export * from "./layout-page"
10
+ export * from "./layout-page-item"
11
+ export * from "./module-form"
12
+ export * from "./query-condition"
13
+ export * from "./radio"
14
+ export * from "./select"
15
+ export * from "./select-icon"
16
+ export * from "./select-table"
17
+ export * from "./step-wizard"
18
+ export * from "./table"
19
+ export * from "./tabs"
20
+ export * from "./timer-btn"
@@ -0,0 +1,5 @@
1
+ import Input from "./src/index.vue"
2
+
3
+ export * from "./src/type"
4
+
5
+ export const FInput = Input