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,303 @@
1
+ <template>
2
+ <component
3
+ :is="isShowRules ? 'el-form-item' : 'div'"
4
+ :prop="prop"
5
+ :rules="configEdit.rules"
6
+ :class="[
7
+ configEdit.className,
8
+ { single_edit_cell_rules: configEdit.rules },
9
+ 'single_edit_cell'
10
+ ]"
11
+ v-bind="$attrs"
12
+ >
13
+ <!-- 编辑组件自定义插槽 -->
14
+ <template v-if="configEdit.editSlotName">
15
+ <div :class="[prop, 'slot_edit_name']" @keyup="keyUpHandle">
16
+ <slot :name="configEdit.editSlotName" :scope="scope" />
17
+ </div>
18
+ </template>
19
+ <template v-if="configEdit.isSelfCom">
20
+ <component
21
+ v-if="configEdit.editComponent === 't-select-table'"
22
+ :ref="(el:any) => handleRef(el,configEdit)"
23
+ :is="configEdit.editComponent"
24
+ :placeholder="configEdit.placeholder || getPlaceholder(configEdit)"
25
+ v-bind="
26
+ typeof configEdit.bind == 'function'
27
+ ? configEdit.bind(scope)
28
+ : { clearable: true, filterable: true, ...configEdit.bind }
29
+ "
30
+ :style="{ width: configEdit.width || '100%' }"
31
+ v-on="cEvent(configEdit, 't-select-table')"
32
+ />
33
+ <component
34
+ v-else
35
+ :is="configEdit.editComponent"
36
+ v-model="childValue"
37
+ :placeholder="configEdit.placeholder || getPlaceholder(configEdit)"
38
+ :ref="(el: any) => getRefs(el, configEdit)"
39
+ v-bind="
40
+ typeof configEdit.bind == 'function'
41
+ ? configEdit.bind(scope)
42
+ : { clearable: true, filterable: true, ...configEdit.bind }
43
+ "
44
+ @change="handleEvent(configEdit.event)"
45
+ :style="{ width: configEdit.width || '100%' }"
46
+ v-on="cEvent(configEdit)"
47
+ />
48
+ </template>
49
+ <component
50
+ v-if="!configEdit.editSlotName && !configEdit.isSelfCom"
51
+ :is="configEdit.editComponent || 'el-input'"
52
+ v-model="childValue"
53
+ :type="configEdit.type"
54
+ :placeholder="configEdit.placeholder || getPlaceholder(configEdit)"
55
+ :ref="(el: any) => getRefs(el, configEdit)"
56
+ :class="prop"
57
+ @change="handleEvent(configEdit.event)"
58
+ @keyup="keyUpHandle"
59
+ :style="{ width: configEdit.width || '100%' }"
60
+ v-on="cEvent(configEdit)"
61
+ v-bind="
62
+ typeof configEdit.bind == 'function'
63
+ ? configEdit.bind(scope)
64
+ : { clearable: true, filterable: true, ...configEdit.bind }
65
+ "
66
+ >
67
+ <!-- 前置文本 -->
68
+ <template #prepend v-if="configEdit.prepend">{{ configEdit.prepend }}</template>
69
+ <!-- 后置文本 -->
70
+ <template #append v-if="configEdit.append">{{ configEdit.append }}</template>
71
+ <!-- 子组件自定义插槽 -->
72
+ <!-- <template v-if="configEdit.childSlotName">
73
+ <slot />
74
+ </template>-->
75
+ <template v-if="!configEdit.editComponent.includes('date')">
76
+ <component
77
+ :is="compChildName(configEdit)"
78
+ v-for="(value, key) in selectListType(configEdit)"
79
+ :key="key"
80
+ :disabled="value.disabled"
81
+ :label="compChildLabel(configEdit, value)"
82
+ :value="compChildValue(configEdit, value, key)"
83
+ >{{ compChildShowLabel(configEdit, value) }}</component
84
+ >
85
+ </template>
86
+ </component>
87
+ </component>
88
+ </template>
89
+
90
+ <script setup lang="ts">
91
+ import { computed, ref, watch } from "vue"
92
+ import { useLocale } from "@ff-ui-plus/hooks"
93
+ const { t } = useLocale()
94
+ defineOptions({
95
+ name: "SingleEditCell"
96
+ })
97
+ const props = defineProps({
98
+ /** 编辑配置项说明
99
+ * label: '爱好', // placeholder显示
100
+ * editComponent: 'el-select', // 组件
101
+ * type: 'select-arr', // option显示
102
+ * list: 'hobbyList', // 下拉选择数据源
103
+ * arrLabel: 'label', // 下拉选择中文显示
104
+ * arrKey: 'value' // 下拉选择number显示(最终传后台)
105
+ * bind:{} // 组件衍生属性(即第三方组件属性)
106
+ */
107
+ configEdit: {
108
+ type: Object as any,
109
+ default: () => ({})
110
+ },
111
+ // 下拉选择数据源
112
+ listTypeInfo: {
113
+ type: Object,
114
+ default: () => ({})
115
+ },
116
+ scope: {
117
+ type: Object,
118
+ default: () => ({})
119
+ },
120
+ prop: {
121
+ type: String,
122
+ default: "prop"
123
+ },
124
+ // 是否走表单验证(表头合并不校验)
125
+ isShowRules: {
126
+ type: Boolean,
127
+ default: true
128
+ },
129
+ modelValue: {
130
+ type: [String, Number, Array, Boolean, Date, Object]
131
+ },
132
+ // 列for index
133
+ indexColumns: [String, Number]
134
+ })
135
+ // 抛出事件
136
+ const emits = defineEmits(["handleEvent", "update:modelValue", "keyupHandle", "getRefs"])
137
+ // vue3 v-model简写
138
+ let childValue: any = computed({
139
+ get() {
140
+ return props?.modelValue
141
+ },
142
+ set(val) {
143
+ emits("update:modelValue", val)
144
+ }
145
+ })
146
+ watch(
147
+ () => props.modelValue,
148
+ data => {
149
+ childValue.value = data
150
+ }
151
+ )
152
+ // 绑定的相关事件
153
+ const handleEvent = (type: string) => {
154
+ setTimeout(() => {
155
+ // console.log("组件", type, childValue.value)
156
+ emits("handleEvent", { type, val: childValue.value })
157
+ }, 0)
158
+ }
159
+ // 键盘事件
160
+ const keyUpHandle = ($event: any) => {
161
+ emits("keyupHandle", $event, props.scope.$index, props.prop)
162
+ }
163
+ // 引用第三方事件
164
+ const cEvent: any = computed(() => {
165
+ return ({ eventHandle }: any, type = "") => {
166
+ let event = { ...eventHandle }
167
+ let changeEvent = {} as any
168
+ Object.keys(event).forEach(v => {
169
+ changeEvent[v] = (e: any, ids: any) => {
170
+ if (type === "t-select-table") {
171
+ const argument = {
172
+ row: e,
173
+ ids: ids,
174
+ prop: props.prop,
175
+ scope: props.scope
176
+ }
177
+ event[v] && event[v](argument)
178
+ } else {
179
+ if ((typeof e === "number" && e === 0) || e) {
180
+ event[v] && event[v]({ val: e, prop: props.prop, scope: props.scope })
181
+ } else {
182
+ event[v] && event[v]({ prop: props.prop, scope: props.scope })
183
+ }
184
+ }
185
+ }
186
+ })
187
+ return { ...changeEvent }
188
+ }
189
+ })
190
+
191
+ const selectListType = computed(() => {
192
+ return (item: { list: string | number }) => {
193
+ if (props.listTypeInfo) {
194
+ return props.listTypeInfo[item.list]
195
+ } else {
196
+ return []
197
+ }
198
+ }
199
+ })
200
+ // 子组件名称
201
+ const compChildName = computed(() => {
202
+ return (configEdit: { type: any }) => {
203
+ switch (configEdit.type) {
204
+ case "checkbox":
205
+ return "el-checkbox"
206
+ case "radio":
207
+ return "el-radio"
208
+ case "select-arr":
209
+ case "select-obj":
210
+ return "el-option"
211
+ }
212
+ }
213
+ })
214
+ // 子子组件label
215
+ const compChildLabel = computed(() => {
216
+ return (configEdit: { type: any; arrLabel: any }, value: { [x: string]: any; value: any }) => {
217
+ switch (configEdit.type) {
218
+ case "radio":
219
+ case "checkbox":
220
+ return value[configEdit.arrLabel || "label"]
221
+ case "el-select-multiple":
222
+ case "select-arr":
223
+ return value[configEdit.arrLabel || "label"]
224
+ case "select-obj":
225
+ return value
226
+ }
227
+ }
228
+ })
229
+ // 子子组件value
230
+ const compChildValue = computed(() => {
231
+ return (
232
+ configEdit: { type: any; arrKey: any },
233
+ value: { [x: string]: any; value: any },
234
+ key: any
235
+ ) => {
236
+ switch (configEdit.type) {
237
+ case "radio":
238
+ case "checkbox":
239
+ return value[configEdit.arrKey || "key"]
240
+ case "el-select-multiple":
241
+ case "select-arr":
242
+ return value[configEdit.arrKey || "key"]
243
+ case "select-obj":
244
+ return key
245
+ }
246
+ }
247
+ })
248
+ // 子子组件文字展示
249
+ const compChildShowLabel = computed(() => {
250
+ return (configEdit: { type: any; arrLabel: any }, value: { [x: string]: any; label: any }) => {
251
+ switch (configEdit.type) {
252
+ case "radio":
253
+ case "checkbox":
254
+ return value[configEdit.arrLabel || "label"]
255
+ case "el-select-multiple":
256
+ case "select-arr":
257
+ return value[configEdit.arrLabel || "label"]
258
+ case "select-obj":
259
+ return value
260
+ }
261
+ }
262
+ })
263
+ // 获取所有ref
264
+ const getRefs = (el: any, item: any) => {
265
+ emits("getRefs", el, item)
266
+ }
267
+ // 下拉选择表格组件 ref
268
+ const tselecttableref: any = ref({})
269
+ // 下拉选择表格组件 动态ref
270
+ const handleRef = (el: any, item: any) => {
271
+ emits("getRefs", el, item)
272
+ if (el) {
273
+ tselecttableref.value[`tselecttableref-${props.indexColumns}`] = el
274
+ }
275
+ }
276
+ // 重置下拉表格
277
+ const resetTselectTableFields = () => {
278
+ // 获取所有下拉选择表格组件
279
+ const refList = Object.keys(tselecttableref.value).filter(item =>
280
+ item.includes("tselecttableref")
281
+ )
282
+ if (refList.length > 0 && tselecttableref.value) {
283
+ refList.map(val => {
284
+ tselecttableref.value[val].clear()
285
+ })
286
+ }
287
+ }
288
+ // placeholder的显示
289
+ const getPlaceholder = (row: any) => {
290
+ if (!row.editComponent || typeof row.editComponent !== "string") {
291
+ return row.label
292
+ }
293
+ const componentType = row.editComponent.toLowerCase()
294
+ if (componentType.includes("input")) {
295
+ return t("plus.table.pleaseEnter") + row.label
296
+ } else if (componentType.includes("select") || componentType.includes("date")) {
297
+ return t("plus.table.pleaseSelect") + row.label
298
+ }
299
+ return row.label
300
+ }
301
+
302
+ defineExpose({ resetTselectTableFields })
303
+ </script>
@@ -0,0 +1,162 @@
1
+ import type { PropType, ExtractPropTypes } from "vue"
2
+ import type { ComponentSize } from "element-plus/es/constants"
3
+ import { useLocale } from "@ff-ui-plus/hooks"
4
+ const { t } = useLocale()
5
+ export const tableProps = {
6
+ // table所需数据
7
+ table: {
8
+ type: Object,
9
+ default: () => {
10
+ return {}
11
+ },
12
+ required: true
13
+ },
14
+ // 表头数据
15
+ columns: {
16
+ type: Array,
17
+ default: () => {
18
+ return []
19
+ }
20
+ // required: true
21
+ },
22
+ // 按钮权限数据集
23
+ btnPermissions: {
24
+ type: Array,
25
+ default: () => {
26
+ return []
27
+ }
28
+ },
29
+ // 表格标题
30
+ title: {
31
+ type: String
32
+ },
33
+ tableTitle: String,
34
+ // table对齐方式
35
+ align: {
36
+ type: String as PropType<"left" | "center" | "right">,
37
+ default: "center"
38
+ },
39
+ // 是否开启Tree-table
40
+ isTree: {
41
+ type: Boolean,
42
+ default: false
43
+ },
44
+ // 是否开启行拖拽
45
+ isRowSort: {
46
+ type: Boolean,
47
+ default: false
48
+ },
49
+ // 开启行拖拽,第一列是否显示拖拽图标
50
+ isRowSortIcon: {
51
+ type: Boolean,
52
+ default: false
53
+ },
54
+ // 显示拖拽列的配置
55
+ rowSortIconBind: {
56
+ type: Object,
57
+ default: () => {
58
+ return {}
59
+ }
60
+ },
61
+ // 是否复制单元格
62
+ isCopy: {
63
+ type: Boolean,
64
+ default: false
65
+ },
66
+ // 是否开启点击整行选中单选框
67
+ rowClickRadio: {
68
+ type: Boolean,
69
+ default: true
70
+ },
71
+ // 是否开启点击整行选中多选框
72
+ rowClickCheckbox: {
73
+ type: Boolean,
74
+ default: false
75
+ },
76
+ // 设置默认选中项(单选)defaultRadioCol值必须大于0!
77
+ defaultRadioCol: Number,
78
+ // 序列号显示是否分页累加
79
+ isPaginationCumulative: {
80
+ type: Boolean,
81
+ default: false
82
+ },
83
+ // 是否显示分页
84
+ isShowPagination: {
85
+ type: Boolean,
86
+ default: true
87
+ },
88
+ // 是否开启编辑保存按钮
89
+ isShowFooterBtn: {
90
+ type: Boolean,
91
+ default: false
92
+ },
93
+ // 是否显示设置(隐藏/显示列)
94
+ columnSetting: {
95
+ type: Boolean,
96
+ default: false
97
+ },
98
+ // 是否高亮选中行
99
+ highlightCurrentRow: {
100
+ type: Boolean,
101
+ default: false
102
+ },
103
+ // 如果设置为 'custom',则代表用户希望远程排序,需要监听 Table 的 sort-change 事件
104
+ sortable: {
105
+ type: [Boolean, String]
106
+ },
107
+ // 单元格编辑是否开启键盘事件
108
+ isKeyup: {
109
+ type: Boolean,
110
+ default: false
111
+ },
112
+ // TAdaptivePage组件是否使用了Toolbar插槽
113
+ isSlotToolbar: Boolean,
114
+ // TAdaptivePage组件是否使用了title插槽
115
+ isSlotTitle: Boolean,
116
+ // 是否开启边框
117
+ border: {
118
+ type: Boolean,
119
+ default: false
120
+ },
121
+ // table loading
122
+ tableLoading: {
123
+ type: Boolean,
124
+ default: false
125
+ },
126
+ loadingTxt: {
127
+ type: String,
128
+ default: () => t("plus.table.loadingTxt")
129
+ },
130
+ // 是否开启虚拟列表
131
+ useVirtual: Boolean,
132
+ // 虚拟列表的渲染行数
133
+ virtualShowSize: {
134
+ type: Number,
135
+ default: 30
136
+ },
137
+ footerBtnAlign: {
138
+ type: String,
139
+ default: "right"
140
+ },
141
+ /**
142
+ * 空数据时表头是否显示校验红点
143
+ */
144
+ isEmptyDataRequired: {
145
+ type: Boolean,
146
+ default: false
147
+ },
148
+ saveBtnTxt: {
149
+ type: String,
150
+ default: () => t("plus.table.saveBtnTxt")
151
+ },
152
+ defaultSize: {
153
+ type: String as PropType<ComponentSize>,
154
+ default: "default"
155
+ },
156
+ densitySeting: {
157
+ type: Boolean,
158
+ default: true
159
+ }
160
+ }
161
+
162
+ export type TTableProps = ExtractPropTypes<typeof tableProps>
@@ -0,0 +1,74 @@
1
+ import { ref } from "vue"
2
+
3
+ export function useExpose() {
4
+ // 获取el-table ref
5
+ const TTable = ref<HTMLElement | any>(null)
6
+ // 清空复选框
7
+ const clearSelection = () => {
8
+ return TTable.value.clearSelection()
9
+ }
10
+ // 返回当前选中的行
11
+ const getSelectionRows = () => {
12
+ return TTable.value.getSelectionRows()
13
+ }
14
+ // 取消某一项选中项
15
+ const toggleRowSelection = (row: any, selected = false) => {
16
+ return TTable.value.toggleRowSelection(row, selected)
17
+ }
18
+ // 全部选中
19
+ const toggleAllSelection = () => {
20
+ return TTable.value.toggleAllSelection()
21
+ }
22
+ // 用于可扩展的表格或树表格,如果某行被扩展,则切换。 使用第二个参数,您可以直接设置该行应该被扩展或折叠。
23
+ const toggleRowExpansion = (row: any, expanded: any) => {
24
+ return TTable.value.toggleRowExpansion(row, expanded)
25
+ }
26
+ // 用于单选表格,设定某一行为选中行, 如果调用时不加参数,则会取消目前高亮行的选中状态。
27
+ const setCurrentRow = (row: any) => {
28
+ return TTable.value.setCurrentRow(row)
29
+ }
30
+ // 清空排序条件
31
+ const clearSort = () => {
32
+ return TTable.value.clearSort()
33
+ }
34
+ // 传入由columnKey 组成的数组以清除指定列的过滤条件。 如果没有参数,清除所有过滤器
35
+ const clearFilter = (columnKey: any) => {
36
+ return TTable.value.clearFilter(columnKey)
37
+ }
38
+ // Table 进行重新布局
39
+ const doLayout = (columnKey: any) => {
40
+ return TTable.value.doLayout(columnKey)
41
+ }
42
+ // 手动排序表格。 参数 prop 属性指定排序列,order 指定排序顺序。
43
+ const sort = (prop: string, order: string) => {
44
+ return TTable.value.sort(prop, order)
45
+ }
46
+ // 滚动到一组特定坐标。
47
+ const scrollTo = (options: any, yCoord: any) => {
48
+ return TTable.value.scrollTo(options, yCoord)
49
+ }
50
+ // 设置垂直滚动位置
51
+ const setScrollTop = (top: any) => {
52
+ return TTable.value.setScrollTop(top)
53
+ }
54
+ // 设置水平滚动位置
55
+ const setScrollLeft = (left: any) => {
56
+ return TTable.value.setScrollLeft(left)
57
+ }
58
+ return {
59
+ TTable,
60
+ clearSelection,
61
+ getSelectionRows,
62
+ toggleRowSelection,
63
+ toggleAllSelection,
64
+ toggleRowExpansion,
65
+ setCurrentRow,
66
+ clearSort,
67
+ clearFilter,
68
+ doLayout,
69
+ sort,
70
+ scrollTo,
71
+ setScrollTop,
72
+ setScrollLeft
73
+ }
74
+ }
@@ -0,0 +1,70 @@
1
+ import { nextTick, ref } from "vue"
2
+ import type { Ref } from "vue"
3
+ export function useVirtualized() {
4
+ // 渲染实际高度的容器
5
+ const actualHeightContainerEl = ref<HTMLElement | any>(null)
6
+ // 用于偏移的元素选择器
7
+ const translateContainerEl = ref<HTMLElement | any>(null)
8
+ // 滚动容器的元素选择器
9
+ const scrollContainerEl = ref<HTMLElement | any>(null)
10
+ // 所有数据
11
+ const saveDATA: Ref<any[]> = ref([])
12
+ // 缓存已渲染元素的高度
13
+ const RenderedItemsCache: any = {}
14
+ // 获取dom元素
15
+ const getDom = () => {
16
+ actualHeightContainerEl.value = document.querySelector(
17
+ ".t_table_use_virtual .el-scrollbar__view"
18
+ )
19
+ translateContainerEl.value = document.querySelector(".t_table_use_virtual .el-table__body")
20
+ scrollContainerEl.value = document.querySelector(".t_table_use_virtual .el-scrollbar__wrap")
21
+ }
22
+ // 获取缓存高度,无缓存,取配置项的 itemHeight
23
+ const getItemHeightFromCache = (index: number | string) => {
24
+ const val = RenderedItemsCache[index]
25
+ return val === void 0 ? 50 : val
26
+ }
27
+ // 更新实际高度
28
+ const updateActualHeight = () => {
29
+ let actualHeight = 0
30
+ saveDATA.value.forEach((_, i) => {
31
+ actualHeight += getItemHeightFromCache(i)
32
+ })
33
+ actualHeightContainerEl.value!.style.height = actualHeight + "px"
34
+ }
35
+ // 更新偏移值
36
+ const updateOffset = (offset: number) => {
37
+ if (translateContainerEl.value && translateContainerEl.value.style) {
38
+ translateContainerEl.value!.style.transform = `translateY(${offset}px)`
39
+ }
40
+ }
41
+ // 更新已渲染列表项的缓存高度
42
+ const updateRenderedItemCache = (index: number) => {
43
+ // 当所有元素的实际高度更新完毕,就不需要重新计算高度
44
+ const shouldUpdate = Object.keys(RenderedItemsCache).length < saveDATA.value.length
45
+ if (!shouldUpdate) return
46
+ nextTick(() => {
47
+ // 获取所有列表项元素
48
+ const Items: HTMLElement[] = Array.from(
49
+ document.querySelectorAll(".t_table_use_virtual .el-table__row")
50
+ )
51
+ // 进行缓存
52
+ Items.forEach(el => {
53
+ if (!RenderedItemsCache[index]) {
54
+ RenderedItemsCache[index] = el.offsetHeight
55
+ }
56
+ index++
57
+ })
58
+ // 更新实际高度
59
+ updateActualHeight()
60
+ })
61
+ }
62
+ return {
63
+ scrollContainerEl,
64
+ updateRenderedItemCache,
65
+ updateOffset,
66
+ getDom,
67
+ getItemHeightFromCache,
68
+ saveDATA
69
+ }
70
+ }
@@ -0,0 +1 @@
1
+ import "@ff-ui-plus/theme-chalk/t-table.css"
@@ -0,0 +1 @@
1
+ import "@ff-ui-plus/theme-chalk/src/table.scss"
@@ -0,0 +1,4 @@
1
+ import Tabs from "./src/index.vue"
2
+ export type { TTabsProps } from "./src/index.vue"
3
+
4
+ export const TTabs = Tabs
@@ -0,0 +1,50 @@
1
+ <template>
2
+ <div class="t_tabs">
3
+ <el-tabs v-model="activeName" v-bind="$attrs">
4
+ <template v-for="(_index, name) in slots" v-slot:[name]="data">
5
+ <slot :name="name" v-bind="data" />
6
+ </template>
7
+ <el-tab-pane
8
+ v-for="tab in tabs"
9
+ :key="tab.key"
10
+ v-bind="{
11
+ name: tab.key,
12
+ label: tab.title,
13
+ ...tab.bind
14
+ }"
15
+ >
16
+ <template v-for="(_index, name) in slots" v-slot:[name]="data">
17
+ <slot :name="name" v-bind="data" />
18
+ </template>
19
+ <slot :name="tab.key"></slot>
20
+ </el-tab-pane>
21
+ </el-tabs>
22
+ </div>
23
+ </template>
24
+ <script setup lang="ts">
25
+ import { ref, useSlots } from "vue"
26
+ defineOptions({
27
+ name: "TTabs"
28
+ })
29
+ export interface TabItem {
30
+ key?: string
31
+ title?: string
32
+ bind?: Record<string, any>
33
+ }
34
+
35
+ export interface TTabsProps {
36
+ tabs: TabItem[]
37
+ }
38
+ const props = withDefaults(defineProps<TTabsProps>(), {
39
+ tabs: () => []
40
+ })
41
+ const slots = useSlots()
42
+ const activeName = ref(props.tabs && props.tabs[0].key)
43
+ const emit = defineEmits(["tabsChange"])
44
+ const setSelectedTab = (key: any) => {
45
+ activeName.value = key
46
+ }
47
+ defineExpose({
48
+ setSelectedTab
49
+ })
50
+ </script>
@@ -0,0 +1 @@
1
+ import "@ff-ui-plus/theme-chalk/t-tabs.css"
@@ -0,0 +1 @@
1
+ import "@ff-ui-plus/theme-chalk/src/tabs.scss"
@@ -0,0 +1,4 @@
1
+ import TimerBtn from "./src/index.vue"
2
+ export type { TTimerBtnProps } from "./src/index.vue"
3
+
4
+ export const TTimerBtn = TimerBtn