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,246 @@
1
+ <template>
2
+ <!-- 操作按钮 -->
3
+ <el-table-column
4
+ v-if="table.operator"
5
+ v-bind="{
6
+ fixed: table.operatorConfig?.fixed,
7
+ label: table.operatorConfig?.label || t('plus.table.operator.label'),
8
+ 'min-width': table.operatorConfig?.minWidth,
9
+ width: table.operatorConfig?.width,
10
+ align: table.operatorConfig?.align || align,
11
+ ...table.operatorConfig?.bind
12
+ }"
13
+ class-name="operator"
14
+ >
15
+ <template #default="scope">
16
+ <div
17
+ class="operator_btn"
18
+ :style="{
19
+ justifyContent:
20
+ (table.operatorConfig?.align || align) == 'center'
21
+ ? 'center'
22
+ : (table.operatorConfig?.align || align) == 'right'
23
+ ? 'flex-end'
24
+ : 'flex-start',
25
+ ...table.operatorConfig?.style
26
+ }"
27
+ >
28
+ <template v-for="(item, index) in table.operator">
29
+ <template v-if="!item.isMore">
30
+ <el-button
31
+ :key="index"
32
+ @click="item.fun && item.fun(scope.row, scope.$index, tableData)"
33
+ :disabled="item.isDisabled && item.isDisabled(scope.row, item)"
34
+ v-bind="{
35
+ type: 'primary',
36
+ link: true,
37
+ text: true,
38
+ size: 'small',
39
+ ...item.bind
40
+ }"
41
+ v-if="checkIsShow(scope, item)"
42
+ >
43
+ <template v-if="item.render">
44
+ <render-col
45
+ :column="item"
46
+ :row="scope.row"
47
+ :render="item.render"
48
+ :index="scope.$index"
49
+ />
50
+ </template>
51
+ <span v-if="!item.render">{{ item.text }}</span>
52
+ </el-button>
53
+ </template>
54
+ </template>
55
+ <template v-if="hasMoreOper() && isTotalPage(scope)">
56
+ <el-dropdown v-bind="hasMoreBind" class="oper_more_dropdown" v-if="hasMoreItems(scope)">
57
+ <span class="more_dropdown-link">
58
+ <el-button
59
+ v-bind="{
60
+ type: 'primary',
61
+ link: true,
62
+ text: true,
63
+ size: 'small',
64
+ ...hasMoreBind.btnBind
65
+ }"
66
+ >
67
+ {{ hasMoreBind.btnTxt || t("plus.table.operator.more") }}
68
+ <el-icon v-if="hasMoreBind.isShowArrwIcon">
69
+ <ArrowDown />
70
+ </el-icon>
71
+ </el-button>
72
+ </span>
73
+ <template #dropdown>
74
+ <el-dropdown-menu v-bind="hasMoreBind.menuBind" class="oper_more_dropdown_menu">
75
+ <template v-for="(item, index) in table.operator">
76
+ <el-dropdown-item
77
+ v-if="item.isMore && checkIsShow(scope, item)"
78
+ @click="item.fun && item.fun(scope.row, scope.$index, tableData)"
79
+ :key="'more_' + index"
80
+ v-bind="{
81
+ disabled: item.isDisabled && item.isDisabled(scope.row, item),
82
+ ...item.itemBind
83
+ }"
84
+ >
85
+ <el-button
86
+ :key="index"
87
+ v-bind="{
88
+ link: true,
89
+ text: true,
90
+ size: 'small',
91
+ disabled: item.isDisabled && item.isDisabled(scope.row, item),
92
+ ...item.bind
93
+ }"
94
+ >
95
+ <template v-if="item.render">
96
+ <render-col
97
+ :column="item"
98
+ :row="scope.row"
99
+ :render="item.render"
100
+ :index="scope.$index"
101
+ />
102
+ </template>
103
+ <span v-if="!item.render">{{ item.text }}</span>
104
+ </el-button>
105
+ </el-dropdown-item>
106
+ </template>
107
+ </el-dropdown-menu>
108
+ </template>
109
+ </el-dropdown>
110
+ </template>
111
+ </div>
112
+ </template>
113
+ </el-table-column>
114
+ </template>
115
+
116
+ <script setup lang="ts">
117
+ import { computed, useAttrs } from "vue"
118
+ import { ArrowDown } from "@element-plus/icons-vue"
119
+ import RenderCol from "@ff-ui-plus/components/table/src/renderCol.vue"
120
+ import { useLocale } from "@ff-ui-plus/hooks"
121
+ const { t } = useLocale()
122
+ const props = defineProps({
123
+ tableData: {
124
+ type: Array,
125
+ default: () => []
126
+ },
127
+ table: { type: Object, default: () => {} },
128
+ btnPermissions: {
129
+ type: Array,
130
+ default: () => []
131
+ },
132
+ align: {
133
+ type: String,
134
+ default: "center"
135
+ }
136
+ })
137
+ defineOptions({
138
+ name: "Operator"
139
+ })
140
+
141
+ // 是否显示表格操作按钮
142
+ const checkIsShow = (
143
+ scope: { row: { [s: string]: unknown } | ArrayLike<unknown> | any },
144
+ item: {
145
+ noshow: any
146
+ show: { val: string | any[]; key: string | number }
147
+ hasPermi: any
148
+ field: string | number
149
+ isField: string | number
150
+ }
151
+ ) => {
152
+ let isNoshow = false
153
+ if (item.noshow) {
154
+ // 解决双重判断循环递归
155
+ let nushowFun = JSON.parse(JSON.stringify(item.noshow))
156
+ // 双重判断
157
+ nushowFun.map((rs: { isShow: string; val: string | any[]; key: string | number }) => {
158
+ rs.isShow =
159
+ typeof rs.val === "string"
160
+ ? rs.val === "isHasVal"
161
+ ? scope.row[rs.key]
162
+ ? "true"
163
+ : "false"
164
+ : "true"
165
+ : rs.val.includes(scope.row[rs.key])
166
+ ? "false"
167
+ : "true"
168
+ })
169
+ isNoshow = nushowFun.every((key: { isShow: string }) => {
170
+ return key.isShow === "true"
171
+ })
172
+ } else {
173
+ isNoshow = true
174
+ }
175
+ // 单独判断
176
+ // let isShow = !item.show || item.show.val.includes(scope.row[item.show.key])
177
+ // 多重判断
178
+ let isShow = true
179
+ if (Array.isArray(item.show)) {
180
+ const showConditions = item.show
181
+ isShow = showConditions.some(condition => condition.val.includes(scope.row[condition.key]))
182
+ } else if (item.show) {
183
+ isShow = item.show.val.includes(scope.row[item.show.key])
184
+ }
185
+ // 按钮权限
186
+ let isPermission = item.hasPermi ? props.btnPermissions?.includes(item.hasPermi) : true
187
+ // table页面合计
188
+ let totalTxt = Object.values(scope.row).every(key => {
189
+ return key !== t("plus.table.operator.sum")
190
+ })
191
+ // table页面合计
192
+ let totalTxt1 = Object.values(scope.row).every(key => {
193
+ return key !== t("plus.table.operator.allSum")
194
+ })
195
+ let totalTxt2 = Object.values(scope.row).every(key => {
196
+ return key !== t("plus.table.operator.total")
197
+ })
198
+ return (
199
+ isShow &&
200
+ isNoshow &&
201
+ !scope.row[item.field] &&
202
+ (item.isField ? scope.row[item.isField] : true) &&
203
+ totalTxt &&
204
+ totalTxt1 &&
205
+ totalTxt2 &&
206
+ isPermission
207
+ )
208
+ }
209
+ const isTotalPage = (scope: { row: { [s: string]: unknown } | ArrayLike<unknown> | any }) => {
210
+ let totalTxt = Object.values(scope.row).every(key => {
211
+ return key !== t("plus.table.operator.sum")
212
+ })
213
+ // table页面合计
214
+ let totalTxt1 = Object.values(scope.row).every(key => {
215
+ return key !== t("plus.table.operator.allSum")
216
+ })
217
+ let totalTxt2 = Object.values(scope.row).every(key => {
218
+ return key !== t("plus.table.operator.total")
219
+ })
220
+ return totalTxt && totalTxt1 && totalTxt2
221
+ }
222
+ // 更多下拉配置
223
+ const $attrs = useAttrs()
224
+ const hasMoreBind: any = computed(() => {
225
+ const btnBind = { type: "primary", link: true, text: true, size: "small" } // 按钮属性
226
+ const menuBind = {} // 下拉menu属性
227
+ const setBind = {
228
+ btnTxt: t("plus.table.operator.more"),
229
+ isShowArrwIcon: true, // 是否显示下拉箭头
230
+ ...menuBind, // 下拉menu属性
231
+ ...btnBind, // 按钮属性
232
+ ...props.table.operatorConfig.dropdownBind // 下拉属性
233
+ }
234
+ return { ...$attrs, ...setBind }
235
+ })
236
+ // 判断操作是否显示最多
237
+ const hasMoreOper = () => {
238
+ return props.table.operator.some((item: { isMore: boolean }) => item.isMore === true)
239
+ }
240
+ // 判断是否显示更多按钮
241
+ const hasMoreItems = computed(() => {
242
+ return (scope: any) => {
243
+ return props.table.operator?.some((item: any) => item.isMore && checkIsShow(scope, item))
244
+ }
245
+ })
246
+ </script>
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <component :is="renderComponent" />
3
+ </template>
4
+ <script lang="ts" setup>
5
+ defineOptions({
6
+ name: "RenderCol"
7
+ })
8
+ const props: any = defineProps({
9
+ row: Object,
10
+ render: Function,
11
+ index: Number,
12
+ column: {
13
+ type: Object,
14
+ default: null
15
+ }
16
+ })
17
+ const renderComponent = () => {
18
+ return props.render(props?.row[props?.column?.prop], props.row, props.index)
19
+ }
20
+ </script>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <component :is="renderComponent" />
3
+ </template>
4
+ <script lang="ts" setup>
5
+ defineOptions({
6
+ name: "RenderHeader"
7
+ })
8
+ const props: any = defineProps({
9
+ render: Function,
10
+ column: {
11
+ type: Object,
12
+ default: null
13
+ }
14
+ })
15
+ const renderComponent = () => {
16
+ return props.render(props?.column)
17
+ }
18
+ </script>
@@ -0,0 +1,354 @@
1
+ <template>
2
+ <div @click="onFieldClick" class="single_edit_cell">
3
+ <div class="cell-content" v-if="!editMode">
4
+ <el-tooltip
5
+ v-if="configEdit.isShowTips"
6
+ class="item"
7
+ v-bind="{
8
+ effect: 'light',
9
+ content: t('plus.table.singleEdit.tipText'),
10
+ placement: 'top',
11
+ ...configEdit.tipbind
12
+ }"
13
+ >
14
+ <div v-if="childCom.includes(configEdit.type)">{{ childVal }}&nbsp;</div>
15
+ <div v-else>{{ model }}&nbsp;</div>
16
+ <slot name="content"></slot>
17
+ </el-tooltip>
18
+ <template v-else>
19
+ <div v-if="childCom.includes(configEdit.type)">{{ childVal }}&nbsp;</div>
20
+ <div v-else>{{ model }}&nbsp;</div>
21
+ <slot name="content"></slot>
22
+ </template>
23
+ </div>
24
+ <template v-if="editMode">
25
+ <template v-if="configEdit.editSlotName">
26
+ <div :class="[prop, 'slot_edit_name']">
27
+ <slot :name="configEdit.editSlotName" :scope="scope" />
28
+ </div>
29
+ </template>
30
+ <template v-if="configEdit.isSelfCom">
31
+ <component
32
+ v-if="configEdit.editComponent === 't-select-table'"
33
+ :ref="(el:any) => handleRef(el)"
34
+ :is="configEdit.editComponent"
35
+ :placeholder="configEdit.placeholder || getPlaceholder(configEdit)"
36
+ v-bind="
37
+ typeof configEdit.bind == 'function'
38
+ ? configEdit.bind(scope)
39
+ : { clearable: true, filterable: true, ...configEdit.bind }
40
+ "
41
+ :style="{ width: configEdit.width || '100%' }"
42
+ v-on="cEvent(configEdit, 't-select-table')"
43
+ />
44
+ <component
45
+ v-else
46
+ :is="configEdit.editComponent"
47
+ v-model="model"
48
+ :type="configEdit.type"
49
+ :placeholder="configEdit.placeholder || getPlaceholder(configEdit)"
50
+ ref="parentCom"
51
+ v-bind="
52
+ typeof configEdit.bind == 'function'
53
+ ? configEdit.bind(scope)
54
+ : { clearable: true, filterable: true, ...configEdit.bind }
55
+ "
56
+ @change="handleEvent(configEdit.event, model, configEdit.type)"
57
+ :style="{ width: configEdit.width || '100%' }"
58
+ v-on="cEvent(configEdit)"
59
+ />
60
+ </template>
61
+ <component
62
+ v-if="!configEdit.editSlotName && !configEdit.isSelfCom"
63
+ :is="configEdit.editComponent || 'el-input'"
64
+ v-model="model"
65
+ :type="configEdit.type"
66
+ :placeholder="configEdit.placeholder || getPlaceholder(configEdit)"
67
+ :class="prop"
68
+ ref="parentCom"
69
+ @change="handleEvent(configEdit.event, model, configEdit.type)"
70
+ @keyup.enter.native="onInputExit"
71
+ @blur="onInputExit"
72
+ v-bind="
73
+ typeof configEdit.bind == 'function'
74
+ ? configEdit.bind(scope)
75
+ : { clearable: true, filterable: true, ...configEdit.bind }
76
+ "
77
+ :style="{ width: configEdit.width || '100%' }"
78
+ v-on="cEvent(configEdit)"
79
+ >
80
+ <template v-for="(_index, name) in slots" v-slot:[name]="data">
81
+ <slot :name="name" v-bind="data"></slot>
82
+ </template>
83
+ <template #prepend v-if="configEdit.prepend">{{ configEdit.prepend }}</template>
84
+ <template #append v-if="configEdit.append">{{ configEdit.append }}</template>
85
+ <slot name="editChild" />
86
+ <div v-if="!$slots.editChild">
87
+ <component
88
+ :is="compChildName(configEdit)"
89
+ v-for="(value, key) in listTypeInfo[configEdit.list]"
90
+ :key="key"
91
+ :disabled="value.disabled"
92
+ :label="compChildLabel(configEdit, value)"
93
+ :value="compChildValue(configEdit, value, key)"
94
+ >{{ compChildShowLabel(configEdit, value) }}</component
95
+ >
96
+ </div>
97
+ </component>
98
+ </template>
99
+ </div>
100
+ </template>
101
+
102
+ <script setup lang="ts">
103
+ import { computed, nextTick, ref, watch, useSlots } from "vue"
104
+ import { useLocale } from "@ff-ui-plus/hooks"
105
+ const { t } = useLocale()
106
+ defineOptions({
107
+ name: "SingleEdit"
108
+ })
109
+ const props = defineProps({
110
+ /** 编辑配置项说明
111
+ * label: '爱好', // placeholder显示
112
+ * editComponent: 'el-select', // 组件
113
+ * type: 'select-arr', // option显示
114
+ * list: 'hobbyList', // 下拉选择数据源
115
+ * arrLabel: 'label', // 下拉选择中文显示
116
+ * arrKey: 'value' // 下拉选择number显示(最终传后台)
117
+ * bind:{} // 组件衍生属性(即第三方组件属性)
118
+ */
119
+ configEdit: {
120
+ type: Object as any,
121
+ default: () => ({})
122
+ },
123
+ // 下拉选择数据源
124
+ listTypeInfo: {
125
+ type: Object,
126
+ default: () => ({})
127
+ },
128
+ scope: {
129
+ type: Object,
130
+ default: () => ({})
131
+ },
132
+ prop: {
133
+ type: String,
134
+ default: "prop"
135
+ },
136
+ // 是否开启单击编辑
137
+ isClickEdit: {
138
+ type: Boolean,
139
+ default: false
140
+ },
141
+ modelValue: {
142
+ type: [String, Number, Object, Array, Date]
143
+ },
144
+ // 列for index
145
+ indexColumns: [String, Number]
146
+ })
147
+ // 抛出事件
148
+ const emits = defineEmits(["handleEvent", "update:modelValue"])
149
+ const slots = useSlots()
150
+ const childCom = ref(["select-arr", "checkbox", "radio", "select-obj", "el-select-multiple"])
151
+ const editMode = ref(false)
152
+ // 下拉选择表格组件 ref
153
+ const tselecttableref: any = ref({})
154
+ // 下拉选择表格组件 动态ref
155
+ const handleRef = (el: any) => {
156
+ if (el) {
157
+ tselecttableref.value[`tselecttableref-${props.indexColumns}`] = el
158
+ }
159
+ }
160
+ // 重置下拉表格
161
+ const resetClickTselectTable = () => {
162
+ // 获取所有下拉选择表格组件
163
+ const refList = Object.keys(tselecttableref.value).filter(item =>
164
+ item.includes("tselecttableref")
165
+ )
166
+ if (refList.length > 0 && tselecttableref.value) {
167
+ refList.map(val => {
168
+ tselecttableref.value[val].clear()
169
+ })
170
+ }
171
+ }
172
+ let model: any = computed({
173
+ get() {
174
+ return props?.modelValue
175
+ },
176
+ set(val) {
177
+ emits("update:modelValue", val)
178
+ }
179
+ })
180
+ watch(
181
+ () => props.modelValue,
182
+ data => {
183
+ model.value = data
184
+ }
185
+ )
186
+ // 引用第三方事件
187
+ const cEvent: any = computed(() => {
188
+ return ({ eventHandle }: any, type = "") => {
189
+ let event = { ...eventHandle }
190
+ let changeEvent = {} as any
191
+ Object.keys(event).forEach(v => {
192
+ changeEvent[v] = (e: any, ids: any) => {
193
+ if (type === "t-select-table") {
194
+ const argument = {
195
+ row: e,
196
+ ids: ids,
197
+ prop: props.prop,
198
+ scope: props.scope
199
+ }
200
+ event[v] && event[v](argument)
201
+ } else {
202
+ if ((typeof e === "number" && e === 0) || e) {
203
+ event[v] && event[v]({ val: e, prop: props.prop, scope: props.scope })
204
+ } else {
205
+ event[v] && event[v]({ prop: props.prop, scope: props.scope })
206
+ }
207
+ }
208
+ }
209
+ })
210
+ return { ...changeEvent }
211
+ }
212
+ })
213
+ const childVal = computed({
214
+ get() {
215
+ let valLabel
216
+ let checkboxVal = [] as any
217
+ let selcetMultiple = [] as any
218
+ props.listTypeInfo[props.configEdit.list] &&
219
+ props.listTypeInfo[props.configEdit.list].map((val: any) => {
220
+ switch (props.configEdit.type) {
221
+ case "checkbox":
222
+ case "radio":
223
+ if (model.value.join(",").includes(val.value)) {
224
+ checkboxVal.push(val.label)
225
+ }
226
+ valLabel = checkboxVal.join(",")
227
+ break
228
+ case "select-arr":
229
+ // eslint-disable-next-line eqeqeq
230
+ if (model.value == val[props.configEdit.arrKey]) {
231
+ valLabel = val[props.configEdit.arrLabel]
232
+ }
233
+ break
234
+ case "el-select-multiple":
235
+ if (model.value && model.value.join(",").includes(val[props.configEdit.arrKey])) {
236
+ selcetMultiple.push(val[props.configEdit.arrLabel])
237
+ }
238
+ valLabel = selcetMultiple.join(",")
239
+ break
240
+ case "select-obj":
241
+ valLabel = val
242
+ break
243
+ }
244
+ })
245
+ return valLabel
246
+ },
247
+ set(val) {
248
+ return val
249
+ }
250
+ })
251
+ // 子组件名称
252
+ const compChildName = computed(() => {
253
+ return (configEdit: { type: any }) => {
254
+ switch (configEdit.type) {
255
+ case "checkbox":
256
+ return "el-checkbox"
257
+ case "radio":
258
+ return "el-radio"
259
+ case "el-select-multiple":
260
+ case "select-arr":
261
+ case "select-obj":
262
+ return "el-option"
263
+ }
264
+ }
265
+ })
266
+ // 子子组件label
267
+ const compChildLabel = computed(() => {
268
+ return (configEdit: { type: any; arrLabel: any }, value: { [x: string]: any; value: any }) => {
269
+ switch (configEdit.type) {
270
+ case "radio":
271
+ case "checkbox":
272
+ return value[configEdit.arrLabel || "label"]
273
+ case "el-select-multiple":
274
+ case "select-arr":
275
+ return value[configEdit.arrLabel || "label"]
276
+ case "select-obj":
277
+ return value
278
+ }
279
+ }
280
+ })
281
+ // 子子组件value
282
+ const compChildValue = computed(() => {
283
+ return (
284
+ configEdit: { type: any; arrKey: any },
285
+ value: { [x: string]: any; value: any },
286
+ key: any
287
+ ) => {
288
+ switch (configEdit.type) {
289
+ case "radio":
290
+ case "checkbox":
291
+ return value[configEdit.arrKey || "key"]
292
+ case "el-select-multiple":
293
+ case "select-arr":
294
+ return value[configEdit.arrKey || "key"]
295
+ case "select-obj":
296
+ return key
297
+ }
298
+ }
299
+ })
300
+ // 子子组件文字展示
301
+ const compChildShowLabel = computed(() => {
302
+ return (configEdit: { type: any; arrLabel: any }, value: { [x: string]: any; label: any }) => {
303
+ switch (configEdit.type) {
304
+ case "radio":
305
+ case "checkbox":
306
+ return value[configEdit.arrLabel || "label"]
307
+ case "el-select-multiple":
308
+ case "select-arr":
309
+ return value[configEdit.arrLabel || "label"]
310
+ case "select-obj":
311
+ return value
312
+ }
313
+ }
314
+ })
315
+ const parentCom = ref<null | any>()
316
+ // 点击外层开启编辑focus
317
+ const onFieldClick = () => {
318
+ if (props.isClickEdit) {
319
+ editMode.value = true
320
+ nextTick(() => {
321
+ let parentRef = parentCom.value
322
+ if (parentRef && parentRef.focus) {
323
+ parentRef.focus()
324
+ }
325
+ })
326
+ }
327
+ }
328
+ const onInputExit = () => {
329
+ editMode.value = false
330
+ }
331
+ // placeholder的显示
332
+ const getPlaceholder = (row: any) => {
333
+ if (!row.editComponent || typeof row.editComponent !== "string") {
334
+ return row.label
335
+ }
336
+ const componentType = row.editComponent.toLowerCase()
337
+ if (componentType.includes("input")) {
338
+ return t("plus.table.pleaseEnter") + row.label
339
+ } else if (componentType.includes("select") || componentType.includes("date")) {
340
+ return t("plus.table.pleaseSelect") + row.label
341
+ }
342
+ return row.label
343
+ }
344
+ // 绑定的相关事件
345
+ const handleEvent = (type, val, comType) => {
346
+ // console.log("type---comType", comType)
347
+ if (comType === "datetime") onInputExit()
348
+ setTimeout(() => {
349
+ // console.log("组件", type, childValue.value)
350
+ emits("handleEvent", { type, val })
351
+ }, 0)
352
+ }
353
+ defineExpose({ resetClickTselectTable })
354
+ </script>