@ebiz/designer-components 0.0.46 → 0.0.48

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 (761) hide show
  1. package/README.md +29 -29
  2. package/dist/designer-components.css +1 -1
  3. package/dist/index.mjs +34335 -43915
  4. package/package.json +1 -1
  5. package/src/App.vue +26 -26
  6. package/src/apiService/SIMPLE_DATA_SERVICE.md +284 -284
  7. package/src/apiService/mockDataService.js +115 -115
  8. package/src/apiService/simpleDataService.js +297 -297
  9. package/src/assets/base.css +86 -86
  10. package/src/assets/logo.svg +1 -1
  11. package/src/assets/styles/charts/main.less +29 -29
  12. package/src/components/Button.vue +152 -152
  13. package/src/components/DataContainer.vue +40 -40
  14. package/src/components/EbizAutoForm.vue +596 -596
  15. package/src/components/EbizAvatar.vue +115 -115
  16. package/src/components/EbizCheckbox.vue +93 -93
  17. package/src/components/EbizCheckboxGroup.vue +69 -69
  18. package/src/components/EbizDepartmentSelector.vue +144 -144
  19. package/src/components/EbizDescriptions.vue +340 -340
  20. package/src/components/EbizDescriptionsItem.vue +47 -47
  21. package/src/components/EbizDetailBlock.vue +81 -81
  22. package/src/components/EbizDialog.vue +260 -260
  23. package/src/components/EbizDivider.vue +96 -96
  24. package/src/components/EbizEmployeeInfo.vue +138 -138
  25. package/src/components/EbizEmployeeSelector.vue +1044 -1045
  26. package/src/components/EbizFileUpload.vue +201 -201
  27. package/src/components/EbizMap.vue +541 -541
  28. package/src/components/EbizMindmap/README.md +8 -8
  29. package/src/components/EbizMindmap/components/GridNode.vue +102 -102
  30. package/src/components/EbizMindmap/components/node.vue +91 -91
  31. package/src/components/EbizMindmap/components/vueNode.vue +63 -63
  32. package/src/components/EbizMindmap/index.vue +382 -382
  33. package/src/components/EbizOkrTree.vue +99 -99
  34. package/src/components/EbizPageHeader.vue +95 -95
  35. package/src/components/EbizPagination.vue +162 -162
  36. package/src/components/EbizPopconfirm.vue +47 -47
  37. package/src/components/EbizRadio.vue +86 -86
  38. package/src/components/EbizRadioGroup.vue +83 -83
  39. package/src/components/EbizRemoteSelect.vue +232 -232
  40. package/src/components/EbizRouteBreadcrumb.vue +46 -46
  41. package/src/components/EbizSelect.vue +95 -95
  42. package/src/components/EbizSpace.vue +100 -100
  43. package/src/components/EbizStatistic.vue +149 -149
  44. package/src/components/EbizStatsCard.vue +113 -113
  45. package/src/components/EbizSwiper.vue +113 -113
  46. package/src/components/EbizSwiperItem.vue +13 -13
  47. package/src/components/EbizSwitch.vue +85 -85
  48. package/src/components/EbizTabHeader.vue +144 -144
  49. package/src/components/EbizTabPanel.vue +22 -22
  50. package/src/components/EbizTable.vue +469 -469
  51. package/src/components/EbizTableColumn.vue +116 -116
  52. package/src/components/EbizTableSort.vue +179 -179
  53. package/src/components/EbizTabs.vue +142 -142
  54. package/src/components/EbizTdesignButtonDialog.vue +332 -332
  55. package/src/components/EbizTdesignLoading.vue +107 -107
  56. package/src/components/EbizTimePicker.vue +143 -143
  57. package/src/components/EbizTitle.vue +91 -91
  58. package/src/components/EbizTree.vue +152 -152
  59. package/src/components/EbizTreeMergeTable.vue +1414 -1414
  60. package/src/components/EbizTreeSelector.vue +418 -418
  61. package/src/components/Form.vue +28 -28
  62. package/src/components/Home.vue +7 -7
  63. package/src/components/MyComponent.vue +39 -39
  64. package/src/components/Table.vue +45 -45
  65. package/src/components/TdesignAlert.vue +115 -115
  66. package/src/components/TdesignButton.vue +135 -135
  67. package/src/components/TdesignCalendar/index.vue +145 -145
  68. package/src/components/TdesignCard.vue +195 -195
  69. package/src/components/TdesignCol.vue +101 -101
  70. package/src/components/TdesignCollapse.vue +142 -142
  71. package/src/components/TdesignCollapsePanel.vue +79 -79
  72. package/src/components/TdesignDatePicker.vue +124 -124
  73. package/src/components/TdesignDescriptions.vue +74 -74
  74. package/src/components/TdesignDescriptionsItem.vue +50 -50
  75. package/src/components/TdesignDialog.vue +225 -225
  76. package/src/components/TdesignForm.vue +138 -138
  77. package/src/components/TdesignFormItem.vue +105 -105
  78. package/src/components/TdesignGrid.vue +55 -55
  79. package/src/components/TdesignIcon.vue +67 -67
  80. package/src/components/TdesignImage.vue +162 -162
  81. package/src/components/TdesignImageViewer.vue +200 -200
  82. package/src/components/TdesignInput.vue +242 -242
  83. package/src/components/TdesignSelect.vue +444 -444
  84. package/src/components/TdesignTag.vue +117 -117
  85. package/src/components/TdesignTextarea.vue +142 -142
  86. package/src/components/TdesignTimeline.vue +58 -58
  87. package/src/components/TdesignTimelineItem.vue +71 -71
  88. package/src/components/TdesignUpload.vue +756 -756
  89. package/src/components/TdesignWatermark.vue +107 -107
  90. package/src/components/charts/chart.js +47 -47
  91. package/src/components/charts/components/AssembleBubbleChart/BaseOption.js +50 -50
  92. package/src/components/charts/components/AssembleBubbleChart/chartToken.js +16 -16
  93. package/src/components/charts/components/AssembleBubbleChart/handleOption.js +66 -66
  94. package/src/components/charts/components/AssembleBubbleChart/handleRootData.js +165 -165
  95. package/src/components/charts/components/AssembleBubbleChart/handleSeriesData.js +70 -70
  96. package/src/components/charts/components/AssembleBubbleChart/index.js +65 -65
  97. package/src/components/charts/components/AutonaviMapChart/index.js +162 -162
  98. package/src/components/charts/components/BaiduMapChart/index.js +147 -147
  99. package/src/components/charts/components/BarChart/barChartOption.js +75 -75
  100. package/src/components/charts/components/BarChart/chartToken.js +17 -17
  101. package/src/components/charts/components/BarChart/handleOptipn.js +102 -102
  102. package/src/components/charts/components/BarChart/handleSeries.js +716 -716
  103. package/src/components/charts/components/BarChart/handleVisualMap.js +48 -48
  104. package/src/components/charts/components/BarChart/index.js +151 -151
  105. package/src/components/charts/components/BaseChart/index.js +122 -122
  106. package/src/components/charts/components/BoxplotChart/chartToken.js +17 -17
  107. package/src/components/charts/components/BoxplotChart/handleOption.js +64 -64
  108. package/src/components/charts/components/BoxplotChart/handleSeries.js +149 -149
  109. package/src/components/charts/components/BoxplotChart/index.js +47 -47
  110. package/src/components/charts/components/BubbleChart/chartToken.js +17 -17
  111. package/src/components/charts/components/BubbleChart/handleData.js +33 -33
  112. package/src/components/charts/components/BubbleChart/handleOptipn.js +62 -62
  113. package/src/components/charts/components/BubbleChart/handleSeries.js +86 -86
  114. package/src/components/charts/components/BubbleChart/handleTrendLine.js +119 -119
  115. package/src/components/charts/components/BubbleChart/handleVisualMap.js +50 -50
  116. package/src/components/charts/components/BubbleChart/index.js +96 -96
  117. package/src/components/charts/components/BulletChart/bulletChartOption.js +81 -81
  118. package/src/components/charts/components/BulletChart/chartToken.js +17 -17
  119. package/src/components/charts/components/BulletChart/handleOptipn.js +74 -74
  120. package/src/components/charts/components/BulletChart/handleSeries.js +142 -142
  121. package/src/components/charts/components/BulletChart/index.js +93 -93
  122. package/src/components/charts/components/CandlestickChart/BaseOption.js +44 -44
  123. package/src/components/charts/components/CandlestickChart/chartToken.js +17 -17
  124. package/src/components/charts/components/CandlestickChart/hanleOption.js +130 -130
  125. package/src/components/charts/components/CandlestickChart/hanleSeries.js +123 -123
  126. package/src/components/charts/components/CandlestickChart/index.js +68 -68
  127. package/src/components/charts/components/CircleProcessChart/chartToken.js +17 -17
  128. package/src/components/charts/components/CircleProcessChart/handleOption.js +67 -67
  129. package/src/components/charts/components/CircleProcessChart/handleSeries.js +126 -126
  130. package/src/components/charts/components/CircleProcessChart/index.js +63 -63
  131. package/src/components/charts/components/FlowChart/Layout.js +211 -211
  132. package/src/components/charts/components/FlowChart/LineBezier.js +120 -120
  133. package/src/components/charts/components/FlowChart/LineDirect.js +42 -42
  134. package/src/components/charts/components/FlowChart/LineManager.js +278 -278
  135. package/src/components/charts/components/FlowChart/LineMode.js +43 -43
  136. package/src/components/charts/components/FlowChart/LineRound.js +335 -335
  137. package/src/components/charts/components/FlowChart/NodeManager.js +185 -185
  138. package/src/components/charts/components/FlowChart/dagre.js +8829 -8829
  139. package/src/components/charts/components/FlowChart/frameworkFn.js +37 -37
  140. package/src/components/charts/components/FlowChart/index.js +267 -267
  141. package/src/components/charts/components/FlowChart/index.less +90 -90
  142. package/src/components/charts/components/FlowChart/insert.js +40 -40
  143. package/src/components/charts/components/FlowChart/util.js +42 -42
  144. package/src/components/charts/components/FunnelChart/chartToken.js +17 -17
  145. package/src/components/charts/components/FunnelChart/handleLegend.js +44 -44
  146. package/src/components/charts/components/FunnelChart/handleSeries.js +77 -77
  147. package/src/components/charts/components/FunnelChart/index.js +43 -43
  148. package/src/components/charts/components/GanttChart/CoordinateSystem.js +358 -358
  149. package/src/components/charts/components/GanttChart/TimeLine.js +379 -379
  150. package/src/components/charts/components/GanttChart/constant.js +71 -71
  151. package/src/components/charts/components/GanttChart/index.js +51 -51
  152. package/src/components/charts/components/GanttChart/index.less +267 -267
  153. package/src/components/charts/components/GanttChart/util.js +335 -335
  154. package/src/components/charts/components/GaugeChart/BaseOption.js +22 -22
  155. package/src/components/charts/components/GaugeChart/chartToken.js +17 -17
  156. package/src/components/charts/components/GaugeChart/handleOptipn.js +22 -22
  157. package/src/components/charts/components/GaugeChart/handleSeries.js +504 -504
  158. package/src/components/charts/components/GaugeChart/index.js +53 -53
  159. package/src/components/charts/components/GraphChart/index.js +34 -34
  160. package/src/components/charts/components/GraphTreeChart/BaseOption.js +42 -42
  161. package/src/components/charts/components/GraphTreeChart/handleData.js +118 -118
  162. package/src/components/charts/components/GraphTreeChart/handleOption.js +142 -142
  163. package/src/components/charts/components/GraphTreeChart/index.js +65 -65
  164. package/src/components/charts/components/GraphTreeChart/mixTree.js +35 -35
  165. package/src/components/charts/components/GraphTreeChart/utils.js +75 -75
  166. package/src/components/charts/components/HeatMapChart/BaseOption.js +66 -66
  167. package/src/components/charts/components/HeatMapChart/chartToken.js +17 -17
  168. package/src/components/charts/components/HeatMapChart/handleData.js +138 -138
  169. package/src/components/charts/components/HeatMapChart/handleOptipn.js +227 -227
  170. package/src/components/charts/components/HeatMapChart/handleSeries.js +82 -82
  171. package/src/components/charts/components/HeatMapChart/handleVisualMap.js +91 -91
  172. package/src/components/charts/components/HeatMapChart/index.js +70 -70
  173. package/src/components/charts/components/HillChart/baseOption.js +50 -50
  174. package/src/components/charts/components/HillChart/chartToken.js +17 -17
  175. package/src/components/charts/components/HillChart/handleOption.js +193 -193
  176. package/src/components/charts/components/HillChart/handleSeries.js +39 -39
  177. package/src/components/charts/components/HillChart/index.js +96 -96
  178. package/src/components/charts/components/HoneycombChart/NodeManager.js +172 -172
  179. package/src/components/charts/components/HoneycombChart/TipManager.js +74 -74
  180. package/src/components/charts/components/HoneycombChart/index.js +117 -117
  181. package/src/components/charts/components/HoneycombChart/index.less +48 -48
  182. package/src/components/charts/components/JadeJueChart/BaseOption.js +40 -40
  183. package/src/components/charts/components/JadeJueChart/chartToken.js +17 -17
  184. package/src/components/charts/components/JadeJueChart/handleOption.js +261 -261
  185. package/src/components/charts/components/JadeJueChart/handleSeries.js +246 -246
  186. package/src/components/charts/components/JadeJueChart/index.js +71 -71
  187. package/src/components/charts/components/JadeJueChart/labelFormatter.js +130 -130
  188. package/src/components/charts/components/LineChart/AreaChart/bottomArea.js +177 -177
  189. package/src/components/charts/components/LineChart/AreaChart/chartToken.js +17 -17
  190. package/src/components/charts/components/LineChart/AreaChart/index.js +17 -17
  191. package/src/components/charts/components/LineChart/AreaChart/topArea.js +139 -139
  192. package/src/components/charts/components/LineChart/chartToken.js +17 -17
  193. package/src/components/charts/components/LineChart/handleOptipn.js +145 -145
  194. package/src/components/charts/components/LineChart/handlePredict.js +73 -73
  195. package/src/components/charts/components/LineChart/handleSeries.js +266 -266
  196. package/src/components/charts/components/LineChart/handleVisualMap.js +137 -137
  197. package/src/components/charts/components/LineChart/index.js +133 -133
  198. package/src/components/charts/components/LiquidfillChart/chartToken.js +17 -17
  199. package/src/components/charts/components/LiquidfillChart/handleSeries.js +170 -170
  200. package/src/components/charts/components/LiquidfillChart/index.js +42 -42
  201. package/src/components/charts/components/LiquidfillChart/plugSeries.js +78 -78
  202. package/src/components/charts/components/LiquidfillChart/plugShape.js +163 -163
  203. package/src/components/charts/components/LiquidfillChart/plugView.js +537 -537
  204. package/src/components/charts/components/MilestoneChart/Layout.js +183 -183
  205. package/src/components/charts/components/MilestoneChart/Node.js +319 -319
  206. package/src/components/charts/components/MilestoneChart/assets/next.svg +7 -7
  207. package/src/components/charts/components/MilestoneChart/assets/prev.svg +7 -7
  208. package/src/components/charts/components/MilestoneChart/assets/prompt.svg +9 -9
  209. package/src/components/charts/components/MilestoneChart/index.js +108 -108
  210. package/src/components/charts/components/MilestoneChart/index.less +243 -243
  211. package/src/components/charts/components/MilestoneChart/insertDom.js +32 -32
  212. package/src/components/charts/components/MilestoneChart/insertIcon.js +24 -24
  213. package/src/components/charts/components/MilestoneChart/insertSvg.js +108 -108
  214. package/src/components/charts/components/OrganizationChart/NodeManager.js +188 -188
  215. package/src/components/charts/components/OrganizationChart/RotateManager.js +349 -349
  216. package/src/components/charts/components/OrganizationChart/index.js +124 -124
  217. package/src/components/charts/components/OrganizationChart/index.less +111 -111
  218. package/src/components/charts/components/PieChart/chartToken.js +17 -17
  219. package/src/components/charts/components/PieChart/handleLabel.js +94 -94
  220. package/src/components/charts/components/PieChart/handleMulti.js +131 -131
  221. package/src/components/charts/components/PieChart/handleSeries.js +236 -236
  222. package/src/components/charts/components/PieChart/index.js +58 -58
  223. package/src/components/charts/components/PolarBarChart/chartToken.js +17 -17
  224. package/src/components/charts/components/PolarBarChart/handleOption.js +102 -102
  225. package/src/components/charts/components/PolarBarChart/handleSeries.js +127 -127
  226. package/src/components/charts/components/PolarBarChart/index.js +61 -61
  227. package/src/components/charts/components/ProcessChart/BaseOption.js +295 -295
  228. package/src/components/charts/components/ProcessChart/chartToken.js +17 -17
  229. package/src/components/charts/components/ProcessChart/handleData.js +156 -156
  230. package/src/components/charts/components/ProcessChart/handleOption.js +212 -212
  231. package/src/components/charts/components/ProcessChart/handleSeries.js +369 -369
  232. package/src/components/charts/components/ProcessChart/index.js +76 -76
  233. package/src/components/charts/components/RadarChart/BaseOption.js +248 -248
  234. package/src/components/charts/components/RadarChart/GradientRadar/index.js +421 -421
  235. package/src/components/charts/components/RadarChart/chartToken.js +17 -17
  236. package/src/components/charts/components/RadarChart/handleOptipn.js +316 -316
  237. package/src/components/charts/components/RadarChart/handleSeries.js +120 -120
  238. package/src/components/charts/components/RadarChart/index.js +77 -77
  239. package/src/components/charts/components/RegionChart/chartToken.js +17 -17
  240. package/src/components/charts/components/RegionChart/handleOption.js +29 -29
  241. package/src/components/charts/components/RegionChart/index.js +48 -48
  242. package/src/components/charts/components/RiverChart/Belt.js +181 -181
  243. package/src/components/charts/components/RiverChart/Manager.js +173 -173
  244. package/src/components/charts/components/RiverChart/Node.js +425 -425
  245. package/src/components/charts/components/RiverChart/baseOption.js +51 -51
  246. package/src/components/charts/components/RiverChart/index.js +79 -79
  247. package/src/components/charts/components/RiverChart/index.less +41 -41
  248. package/src/components/charts/components/RiverChart/util.js +160 -160
  249. package/src/components/charts/components/SankeyChart/BaseOption.js +74 -74
  250. package/src/components/charts/components/SankeyChart/chartToken.js +17 -17
  251. package/src/components/charts/components/SankeyChart/handleOption.js +257 -257
  252. package/src/components/charts/components/SankeyChart/index.js +111 -111
  253. package/src/components/charts/components/SankeyChart/tooltip.js +52 -52
  254. package/src/components/charts/components/ScatterChart/chartToken.js +17 -17
  255. package/src/components/charts/components/ScatterChart/handleMarkPoint.js +74 -74
  256. package/src/components/charts/components/ScatterChart/handleOptipn.js +66 -66
  257. package/src/components/charts/components/ScatterChart/handleSeries.js +48 -48
  258. package/src/components/charts/components/ScatterChart/index.js +60 -60
  259. package/src/components/charts/components/SnowFlakeChart/BranchManager.js +323 -323
  260. package/src/components/charts/components/SnowFlakeChart/CommonConstant.js +110 -110
  261. package/src/components/charts/components/SnowFlakeChart/LeafManager.js +75 -75
  262. package/src/components/charts/components/SnowFlakeChart/NodeManager.js +239 -239
  263. package/src/components/charts/components/SnowFlakeChart/TagManager.js +79 -79
  264. package/src/components/charts/components/SnowFlakeChart/assets/down.svg +7 -7
  265. package/src/components/charts/components/SnowFlakeChart/assets/image2L.svg +6 -6
  266. package/src/components/charts/components/SnowFlakeChart/assets/image2R.svg +6 -6
  267. package/src/components/charts/components/SnowFlakeChart/assets/image5L.svg +6 -6
  268. package/src/components/charts/components/SnowFlakeChart/assets/image5R.svg +6 -6
  269. package/src/components/charts/components/SnowFlakeChart/assets/outerBorder.svg +24 -24
  270. package/src/components/charts/components/SnowFlakeChart/assets/outerBorderOverAll.svg +18 -18
  271. package/src/components/charts/components/SnowFlakeChart/assets/up.svg +7 -7
  272. package/src/components/charts/components/SnowFlakeChart/assets/wirelessL.svg +6 -6
  273. package/src/components/charts/components/SnowFlakeChart/assets/wirelessR.svg +6 -6
  274. package/src/components/charts/components/SnowFlakeChart/defaultOption.js +284 -284
  275. package/src/components/charts/components/SnowFlakeChart/index.js +407 -407
  276. package/src/components/charts/components/SnowFlakeChart/index.less +502 -502
  277. package/src/components/charts/components/SnowFlakeChart/line/LineArrow.js +61 -61
  278. package/src/components/charts/components/SnowFlakeChart/line/LineDashed.js +28 -28
  279. package/src/components/charts/components/SnowFlakeChart/line/LineDotted.js +28 -28
  280. package/src/components/charts/components/SnowFlakeChart/line/LineStraight.js +27 -27
  281. package/src/components/charts/components/SnowFlakeChart/line/index.js +201 -201
  282. package/src/components/charts/components/SnowFlakeChart/util.js +430 -430
  283. package/src/components/charts/components/SunburstChart/chartToken.js +17 -17
  284. package/src/components/charts/components/SunburstChart/handleSeries.js +48 -48
  285. package/src/components/charts/components/SunburstChart/index.js +40 -40
  286. package/src/components/charts/components/TerraceChart/defaultGradient.js +115 -115
  287. package/src/components/charts/components/TerraceChart/defaultPath.js +29 -29
  288. package/src/components/charts/components/TerraceChart/index.js +276 -276
  289. package/src/components/charts/components/TerraceChart/index.less +170 -170
  290. package/src/components/charts/components/TerraceChart/insert.js +35 -35
  291. package/src/components/charts/components/TerraceChart/loading.js +33 -33
  292. package/src/components/charts/components/TimelineChart/chartToken.js +16 -16
  293. package/src/components/charts/components/TimelineChart/index.js +108 -108
  294. package/src/components/charts/components/TimelineChart/index.less +151 -151
  295. package/src/components/charts/components/TimelineChart/insertDom.js +45 -45
  296. package/src/components/charts/components/TimelineChart/timeline.js +460 -460
  297. package/src/components/charts/components/TreeChart/chartToken.js +17 -17
  298. package/src/components/charts/components/TreeChart/handleOptipn.js +101 -101
  299. package/src/components/charts/components/TreeChart/handleSeries.js +148 -148
  300. package/src/components/charts/components/TreeChart/index.js +50 -50
  301. package/src/components/charts/components/TreeMapChart/handleOptipn.js +57 -57
  302. package/src/components/charts/components/TreeMapChart/handleSeries.js +56 -56
  303. package/src/components/charts/components/TreeMapChart/handleVisualMap.js +31 -31
  304. package/src/components/charts/components/TreeMapChart/index.js +56 -56
  305. package/src/components/charts/components/WaveChart/chartToken.js +17 -17
  306. package/src/components/charts/components/WaveChart/index.js +418 -418
  307. package/src/components/charts/components/WaveChart/index.less +76 -76
  308. package/src/components/charts/components/WaveChart/insert.js +38 -38
  309. package/src/components/charts/components/WaveChart/loading.js +33 -33
  310. package/src/components/charts/components/WordCloudChart/BaseOption.js +19 -19
  311. package/src/components/charts/components/WordCloudChart/chartToken.js +17 -17
  312. package/src/components/charts/components/WordCloudChart/handleOptipn.js +20 -20
  313. package/src/components/charts/components/WordCloudChart/handleSeries.js +106 -106
  314. package/src/components/charts/components/WordCloudChart/index.js +67 -67
  315. package/src/components/charts/core.js +385 -385
  316. package/src/components/charts/feature/adaptive/index.js +45 -45
  317. package/src/components/charts/feature/adaptive/series/AssembleBubbleChart.js +21 -21
  318. package/src/components/charts/feature/adaptive/series/BarChart.js +26 -26
  319. package/src/components/charts/feature/adaptive/series/BoxplotChart.js +25 -25
  320. package/src/components/charts/feature/adaptive/series/BubbleChart.js +25 -25
  321. package/src/components/charts/feature/adaptive/series/BulletChart.js +26 -26
  322. package/src/components/charts/feature/adaptive/series/CircleProcessChart.js +24 -24
  323. package/src/components/charts/feature/adaptive/series/FunnelChart.js +21 -21
  324. package/src/components/charts/feature/adaptive/series/HeatMapChart.js +25 -25
  325. package/src/components/charts/feature/adaptive/series/JadeJueChart.js +23 -23
  326. package/src/components/charts/feature/adaptive/series/LineChart.js +25 -25
  327. package/src/components/charts/feature/adaptive/series/LiquidfillChart.js +25 -25
  328. package/src/components/charts/feature/adaptive/series/PieChart.js +24 -24
  329. package/src/components/charts/feature/adaptive/series/PolarBarChart.js +21 -21
  330. package/src/components/charts/feature/adaptive/series/ScatterChart.js +25 -25
  331. package/src/components/charts/feature/adaptive/series/SunburstChart.js +24 -24
  332. package/src/components/charts/feature/adaptive/utils/axis.js +25 -25
  333. package/src/components/charts/feature/adaptive/utils/label.js +29 -29
  334. package/src/components/charts/feature/adaptive/utils/legend.js +29 -29
  335. package/src/components/charts/feature/adaptive/utils/title.js +29 -29
  336. package/src/components/charts/feature/adaptive/utils/tooltip.js +29 -29
  337. package/src/components/charts/feature/axistip/index.js +116 -116
  338. package/src/components/charts/feature/card/chartToken.js +17 -17
  339. package/src/components/charts/feature/card/index.js +225 -225
  340. package/src/components/charts/feature/card/index.less +166 -166
  341. package/src/components/charts/feature/drag/index.js +353 -353
  342. package/src/components/charts/feature/drag/index.less +53 -53
  343. package/src/components/charts/feature/equalLabel/index.js +62 -62
  344. package/src/components/charts/feature/expandLegend/constants.js +22 -22
  345. package/src/components/charts/feature/expandLegend/index.js +190 -190
  346. package/src/components/charts/feature/expandLegend/index.less +1043 -1043
  347. package/src/components/charts/feature/expandLegend/mutiSelect/constants.js +40 -40
  348. package/src/components/charts/feature/expandLegend/mutiSelect/index.js +157 -157
  349. package/src/components/charts/feature/expandLegend/mutiSelect/item.js +133 -133
  350. package/src/components/charts/feature/expandLegend/mutiSelect/position.js +43 -43
  351. package/src/components/charts/feature/expandLegend/mutiSelect/search.js +79 -79
  352. package/src/components/charts/feature/expandLegend/mutiSelectLegend/constants.js +41 -41
  353. package/src/components/charts/feature/expandLegend/mutiSelectLegend/group.js +111 -111
  354. package/src/components/charts/feature/expandLegend/mutiSelectLegend/index.js +97 -97
  355. package/src/components/charts/feature/expandLegend/mutiSelectLegend/item.js +114 -114
  356. package/src/components/charts/feature/expandLegend/mutiSelectLegend/more.js +100 -100
  357. package/src/components/charts/feature/expandLegend/mutiSelectLegend/paging.js +102 -102
  358. package/src/components/charts/feature/expandLegend/mutiSelectLegend/scroll.js +33 -33
  359. package/src/components/charts/feature/expandLegend/mutiSelectList/constants.js +34 -34
  360. package/src/components/charts/feature/expandLegend/mutiSelectList/index.js +181 -181
  361. package/src/components/charts/feature/expandLegend/mutiSelectList/statisticList.js +145 -145
  362. package/src/components/charts/feature/expandLegend/singleSelect/constants.js +40 -40
  363. package/src/components/charts/feature/expandLegend/singleSelect/index.js +170 -170
  364. package/src/components/charts/feature/expandLegend/singleSelect/item.js +74 -74
  365. package/src/components/charts/feature/expandLegend/singleSelect/position.js +33 -33
  366. package/src/components/charts/feature/expandLegend/singleSelect/search.js +76 -76
  367. package/src/components/charts/feature/expandLegend/singleSelectLegend/constants.js +41 -41
  368. package/src/components/charts/feature/expandLegend/singleSelectLegend/group.js +115 -115
  369. package/src/components/charts/feature/expandLegend/singleSelectLegend/index.js +97 -97
  370. package/src/components/charts/feature/expandLegend/singleSelectLegend/item.js +112 -112
  371. package/src/components/charts/feature/expandLegend/singleSelectLegend/more.js +39 -39
  372. package/src/components/charts/feature/expandLegend/singleSelectLegend/scroll.js +33 -33
  373. package/src/components/charts/feature/expandLegend/tips/constants.js +21 -21
  374. package/src/components/charts/feature/expandLegend/tips/index.js +168 -168
  375. package/src/components/charts/feature/fluctuation/index.js +64 -64
  376. package/src/components/charts/feature/linter/dialog/index.js +111 -111
  377. package/src/components/charts/feature/linter/index.js +130 -130
  378. package/src/components/charts/feature/linter/lints/charts/Bar.js +45 -45
  379. package/src/components/charts/feature/linter/lints/charts/Line.js +30 -30
  380. package/src/components/charts/feature/linter/lints/charts/Pie.js +38 -38
  381. package/src/components/charts/feature/linter/lints/charts/Radar.js +37 -37
  382. package/src/components/charts/feature/linter/lints/charts/index.js +36 -36
  383. package/src/components/charts/feature/linter/lints/modules/angleAxis.js +46 -46
  384. package/src/components/charts/feature/linter/lints/modules/color.js +18 -18
  385. package/src/components/charts/feature/linter/lints/modules/dataZoom.js +51 -51
  386. package/src/components/charts/feature/linter/lints/modules/index.js +63 -63
  387. package/src/components/charts/feature/linter/lints/modules/legend.js +63 -63
  388. package/src/components/charts/feature/linter/lints/modules/radar.js +58 -58
  389. package/src/components/charts/feature/linter/lints/modules/radiusAxis.js +48 -48
  390. package/src/components/charts/feature/linter/lints/modules/title.js +43 -43
  391. package/src/components/charts/feature/linter/lints/modules/tooltip.js +28 -28
  392. package/src/components/charts/feature/linter/lints/modules/util.js +97 -97
  393. package/src/components/charts/feature/linter/lints/modules/xAxis.js +51 -51
  394. package/src/components/charts/feature/linter/lints/modules/yAxis.js +51 -51
  395. package/src/components/charts/feature/mediaScreen/index.js +94 -94
  396. package/src/components/charts/feature/mini/miniBarChart.js +57 -57
  397. package/src/components/charts/feature/mini/miniCircleProcessChart.js +31 -31
  398. package/src/components/charts/feature/mini/miniLineChart.js +57 -57
  399. package/src/components/charts/feature/mini/miniProcessChart.js +63 -63
  400. package/src/components/charts/feature/nodeRender/angular-node.js +99 -99
  401. package/src/components/charts/feature/nodeRender/index.js +30 -30
  402. package/src/components/charts/feature/nodeRender/react-node.js +82 -82
  403. package/src/components/charts/feature/nodeRender/vue-node.js +108 -108
  404. package/src/components/charts/feature/performance/lttb.js +84 -84
  405. package/src/components/charts/feature/readScreen/index.js +18 -18
  406. package/src/components/charts/feature/token/color/bpit/dark.js +67 -67
  407. package/src/components/charts/feature/token/color/bpit/index.js +20 -20
  408. package/src/components/charts/feature/token/color/bpit/light.js +66 -66
  409. package/src/components/charts/feature/token/color/cloud/board-dark.js +260 -260
  410. package/src/components/charts/feature/token/color/cloud/board.js +275 -275
  411. package/src/components/charts/feature/token/color/cloud/dark.js +78 -78
  412. package/src/components/charts/feature/token/color/cloud/index.js +20 -20
  413. package/src/components/charts/feature/token/color/cloud/light.js +77 -77
  414. package/src/components/charts/feature/token/color/hdesign/board.js +204 -204
  415. package/src/components/charts/feature/token/color/hdesign/dark.js +78 -78
  416. package/src/components/charts/feature/token/color/hdesign/index.js +20 -20
  417. package/src/components/charts/feature/token/color/hdesign/light.js +79 -79
  418. package/src/components/charts/feature/token/color/ict/board.js +190 -190
  419. package/src/components/charts/feature/token/color/ict/dark.js +61 -61
  420. package/src/components/charts/feature/token/color/ict/index.js +20 -20
  421. package/src/components/charts/feature/token/color/ict/light.js +62 -62
  422. package/src/components/charts/feature/token/color/index.js +29 -29
  423. package/src/components/charts/feature/token/color/util.js +42 -42
  424. package/src/components/charts/feature/token/factory/chartsToken/AreaChart.js +20 -20
  425. package/src/components/charts/feature/token/factory/chartsToken/AssembleBubbleChart.js +26 -26
  426. package/src/components/charts/feature/token/factory/chartsToken/BarChart.js +27 -27
  427. package/src/components/charts/feature/token/factory/chartsToken/BoxplotChart.js +27 -27
  428. package/src/components/charts/feature/token/factory/chartsToken/BubbleChart.js +22 -22
  429. package/src/components/charts/feature/token/factory/chartsToken/BulletChart.js +23 -23
  430. package/src/components/charts/feature/token/factory/chartsToken/CandlestickChart.js +20 -20
  431. package/src/components/charts/feature/token/factory/chartsToken/ChartCard.js +33 -33
  432. package/src/components/charts/feature/token/factory/chartsToken/CircleProcessChart.js +23 -23
  433. package/src/components/charts/feature/token/factory/chartsToken/FunnelChart.js +26 -26
  434. package/src/components/charts/feature/token/factory/chartsToken/GaugeChart.js +27 -27
  435. package/src/components/charts/feature/token/factory/chartsToken/HeatMapChart.js +21 -21
  436. package/src/components/charts/feature/token/factory/chartsToken/HillChart.js +21 -21
  437. package/src/components/charts/feature/token/factory/chartsToken/JadeJueChart.js +28 -28
  438. package/src/components/charts/feature/token/factory/chartsToken/LineChart.js +36 -36
  439. package/src/components/charts/feature/token/factory/chartsToken/LiquidfillChart.js +22 -22
  440. package/src/components/charts/feature/token/factory/chartsToken/PieChart.js +49 -49
  441. package/src/components/charts/feature/token/factory/chartsToken/PolarBarChart.js +22 -22
  442. package/src/components/charts/feature/token/factory/chartsToken/ProcessChart.js +40 -40
  443. package/src/components/charts/feature/token/factory/chartsToken/RadarChart.js +36 -36
  444. package/src/components/charts/feature/token/factory/chartsToken/RegionChart.js +20 -20
  445. package/src/components/charts/feature/token/factory/chartsToken/SankeyChart.js +22 -22
  446. package/src/components/charts/feature/token/factory/chartsToken/ScatterChart.js +21 -21
  447. package/src/components/charts/feature/token/factory/chartsToken/SunburstChart.js +22 -22
  448. package/src/components/charts/feature/token/factory/chartsToken/TimelineChart.js +21 -21
  449. package/src/components/charts/feature/token/factory/chartsToken/TreeChart.js +21 -21
  450. package/src/components/charts/feature/token/factory/chartsToken/WaveChart.js +23 -23
  451. package/src/components/charts/feature/token/factory/chartsToken/WordCloudChart.js +21 -21
  452. package/src/components/charts/feature/token/factory/chartsToken/index.js +79 -79
  453. package/src/components/charts/feature/token/factory/getAliasToken.js +41 -41
  454. package/src/components/charts/feature/token/factory/getExportColors.js +45 -45
  455. package/src/components/charts/feature/token/factory/getGlobalToken.js +25 -25
  456. package/src/components/charts/feature/token/factory/getModelToken.js +389 -389
  457. package/src/components/charts/feature/token/factory/getSceneToken.js +41 -41
  458. package/src/components/charts/feature/token/factory/globalToken/border.js +21 -21
  459. package/src/components/charts/feature/token/factory/globalToken/borderRadius.js +22 -22
  460. package/src/components/charts/feature/token/factory/globalToken/font.js +26 -26
  461. package/src/components/charts/feature/token/factory/globalToken/index.js +28 -28
  462. package/src/components/charts/feature/token/factory/globalToken/lineType.js +19 -19
  463. package/src/components/charts/feature/token/factory/globalToken/size.js +22 -22
  464. package/src/components/charts/feature/token/factory/globalToken/space.js +25 -25
  465. package/src/components/charts/feature/token/factory/index.js +39 -39
  466. package/src/components/charts/feature/token/factory/mergeToken.js +72 -72
  467. package/src/components/charts/feature/token/index.js +176 -176
  468. package/src/components/charts/feature/token/readme.md +11 -11
  469. package/src/components/charts/feature/token/theme/bpit/index.js +19 -19
  470. package/src/components/charts/feature/token/theme/cloud/getAliasToken.js +247 -247
  471. package/src/components/charts/feature/token/theme/cloud/getSceneToken.js +73 -73
  472. package/src/components/charts/feature/token/theme/cloud/index.js +19 -19
  473. package/src/components/charts/feature/token/theme/hdesign/getAliasToken.js +249 -249
  474. package/src/components/charts/feature/token/theme/hdesign/getSceneToken.js +74 -74
  475. package/src/components/charts/feature/token/theme/hdesign/index.js +19 -19
  476. package/src/components/charts/feature/token/theme/ict/getAliasToken.js +249 -249
  477. package/src/components/charts/feature/token/theme/ict/getSceneToken.js +71 -71
  478. package/src/components/charts/feature/token/theme/ict/index.js +19 -19
  479. package/src/components/charts/feature/wcag/index.js +335 -335
  480. package/src/components/charts/feature/xss/index.js +51 -51
  481. package/src/components/charts/framework/charts/CircleArcChart/index.js +142 -142
  482. package/src/components/charts/framework/charts/CircleChart/index.js +140 -140
  483. package/src/components/charts/framework/charts/CustomizeChart/index.js +166 -166
  484. package/src/components/charts/framework/charts/ForceDirectedChart/index.js +140 -140
  485. package/src/components/charts/framework/charts/ForceDirectedChart/initDom.js +20 -20
  486. package/src/components/charts/framework/charts/ForceDirectedChart/libs/Node.js +148 -148
  487. package/src/components/charts/framework/charts/ForceDirectedChart/libs/center.js +71 -71
  488. package/src/components/charts/framework/charts/ForceDirectedChart/libs/collide.js +151 -151
  489. package/src/components/charts/framework/charts/ForceDirectedChart/libs/constant.js +17 -17
  490. package/src/components/charts/framework/charts/ForceDirectedChart/libs/dispatch.js +95 -95
  491. package/src/components/charts/framework/charts/ForceDirectedChart/libs/index.js +19 -19
  492. package/src/components/charts/framework/charts/ForceDirectedChart/libs/jiggle.js +16 -16
  493. package/src/components/charts/framework/charts/ForceDirectedChart/libs/lcg.js +23 -23
  494. package/src/components/charts/framework/charts/ForceDirectedChart/libs/link.js +128 -128
  495. package/src/components/charts/framework/charts/ForceDirectedChart/libs/manyBody.js +127 -127
  496. package/src/components/charts/framework/charts/ForceDirectedChart/libs/quadtree.js +393 -393
  497. package/src/components/charts/framework/charts/ForceDirectedChart/libs/radial.js +68 -68
  498. package/src/components/charts/framework/charts/ForceDirectedChart/libs/simulation.js +171 -171
  499. package/src/components/charts/framework/charts/ForceDirectedChart/libs/timer.js +121 -121
  500. package/src/components/charts/framework/charts/ForceDirectedChart/libs/x.js +52 -52
  501. package/src/components/charts/framework/charts/ForceDirectedChart/libs/y.js +52 -52
  502. package/src/components/charts/framework/charts/GridChart/index.js +174 -174
  503. package/src/components/charts/framework/charts/LinearArcChart/index.js +143 -143
  504. package/src/components/charts/framework/charts/MindmapChart/index.js +166 -166
  505. package/src/components/charts/framework/charts/MindmapChart/index.less +84 -84
  506. package/src/components/charts/framework/core/Base.js +53 -53
  507. package/src/components/charts/framework/core/Relation.js +77 -77
  508. package/src/components/charts/framework/module/animation/Animate.js +433 -433
  509. package/src/components/charts/framework/module/animation/Animation.js +75 -75
  510. package/src/components/charts/framework/module/animation/AnimationGroup.js +136 -136
  511. package/src/components/charts/framework/module/animation/Easing.js +224 -224
  512. package/src/components/charts/framework/module/animation/Interpolation.js +87 -87
  513. package/src/components/charts/framework/module/animation/index.js +19 -19
  514. package/src/components/charts/framework/module/arrow/Manager.js +132 -132
  515. package/src/components/charts/framework/module/arrow/index.js +96 -96
  516. package/src/components/charts/framework/module/canvas/grid.js +287 -287
  517. package/src/components/charts/framework/module/canvas/index.js +433 -433
  518. package/src/components/charts/framework/module/canvas/index.less +102 -102
  519. package/src/components/charts/framework/module/canvas/initDom.js +66 -66
  520. package/src/components/charts/framework/module/canvas/tool.js +61 -61
  521. package/src/components/charts/framework/module/connector/Manager.js +103 -103
  522. package/src/components/charts/framework/module/connector/index.js +98 -98
  523. package/src/components/charts/framework/module/connector/index.less +36 -36
  524. package/src/components/charts/framework/module/connector/type/dot.js +20 -20
  525. package/src/components/charts/framework/module/connector/type/expand.js +210 -210
  526. package/src/components/charts/framework/module/contextmenu/index.js +149 -149
  527. package/src/components/charts/framework/module/contextmenu/index.less +39 -39
  528. package/src/components/charts/framework/module/data/Manager.js +55 -55
  529. package/src/components/charts/framework/module/legend/Item.js +217 -217
  530. package/src/components/charts/framework/module/legend/constants.js +13 -13
  531. package/src/components/charts/framework/module/legend/getSymbol.js +85 -85
  532. package/src/components/charts/framework/module/legend/index.js +118 -118
  533. package/src/components/charts/framework/module/legend/util.js +80 -80
  534. package/src/components/charts/framework/module/line/Animation.js +124 -124
  535. package/src/components/charts/framework/module/line/Manager.js +299 -299
  536. package/src/components/charts/framework/module/line/Tag.js +60 -60
  537. package/src/components/charts/framework/module/line/bufferRender.js +73 -73
  538. package/src/components/charts/framework/module/line/cross/pathPoints.js +232 -232
  539. package/src/components/charts/framework/module/line/cross/vectorUtil.js +66 -66
  540. package/src/components/charts/framework/module/line/customize.js +28 -28
  541. package/src/components/charts/framework/module/line/index.js +259 -259
  542. package/src/components/charts/framework/module/line/index.less +23 -23
  543. package/src/components/charts/framework/module/line/type/Bezier.js +90 -90
  544. package/src/components/charts/framework/module/line/type/Circle.js +38 -38
  545. package/src/components/charts/framework/module/line/type/Direct.js +23 -23
  546. package/src/components/charts/framework/module/line/type/Ellipse.js +88 -88
  547. package/src/components/charts/framework/module/line/type/Round.js +245 -245
  548. package/src/components/charts/framework/module/lineLayout/CircleShape/calculate.js +70 -70
  549. package/src/components/charts/framework/module/lineLayout/CircleShape/index.js +31 -31
  550. package/src/components/charts/framework/module/lineLayout/CircleShape/init.js +33 -33
  551. package/src/components/charts/framework/module/lineLayout/RectShape/calculate.js +173 -173
  552. package/src/components/charts/framework/module/lineLayout/RectShape/index.js +43 -43
  553. package/src/components/charts/framework/module/lineLayout/RectShape/init.js +78 -78
  554. package/src/components/charts/framework/module/lineLayout/RectShape/sharing.js +56 -56
  555. package/src/components/charts/framework/module/lineLayout/index.js +30 -30
  556. package/src/components/charts/framework/module/node/Manager.js +189 -189
  557. package/src/components/charts/framework/module/node/bufferRender.js +72 -72
  558. package/src/components/charts/framework/module/node/convertData/index.js +23 -23
  559. package/src/components/charts/framework/module/node/convertData/returnSelf.js +15 -15
  560. package/src/components/charts/framework/module/node/convertData/transform.js +23 -23
  561. package/src/components/charts/framework/module/node/convertData/treeToLink.js +35 -35
  562. package/src/components/charts/framework/module/node/index.js +187 -187
  563. package/src/components/charts/framework/module/nodeLayout/circle/excute.js +269 -269
  564. package/src/components/charts/framework/module/nodeLayout/circle/index.js +23 -23
  565. package/src/components/charts/framework/module/nodeLayout/customize/index.js +15 -15
  566. package/src/components/charts/framework/module/nodeLayout/defaults/excute.js +26 -26
  567. package/src/components/charts/framework/module/nodeLayout/defaults/index.js +19 -19
  568. package/src/components/charts/framework/module/nodeLayout/grid/excute.js +391 -391
  569. package/src/components/charts/framework/module/nodeLayout/grid/index.js +19 -19
  570. package/src/components/charts/framework/module/nodeLayout/index.js +26 -26
  571. package/src/components/charts/framework/module/nodeLayout/linearArc/index.js +33 -33
  572. package/src/components/charts/framework/module/nodeLayout/nonLayeredTidyTree/NodeBox.js +165 -165
  573. package/src/components/charts/framework/module/nodeLayout/nonLayeredTidyTree/algorithm.js +261 -261
  574. package/src/components/charts/framework/module/nodeLayout/nonLayeredTidyTree/index.js +277 -277
  575. package/src/components/charts/framework/module/readme.js +126 -126
  576. package/src/components/charts/index.js +65 -65
  577. package/src/components/charts/index.less +28 -28
  578. package/src/components/charts/option/PolarSys/index.js +43 -43
  579. package/src/components/charts/option/RectSys/index.js +58 -58
  580. package/src/components/charts/option/base/index.js +24 -24
  581. package/src/components/charts/option/config/angleAxis/base.js +56 -56
  582. package/src/components/charts/option/config/angleAxis/index.js +43 -43
  583. package/src/components/charts/option/config/animation/index.js +63 -63
  584. package/src/components/charts/option/config/datazoom/base.js +123 -123
  585. package/src/components/charts/option/config/datazoom/index.js +61 -61
  586. package/src/components/charts/option/config/grid/base.js +22 -22
  587. package/src/components/charts/option/config/grid/index.js +32 -32
  588. package/src/components/charts/option/config/legend/base.js +80 -80
  589. package/src/components/charts/option/config/legend/icon.js +21 -21
  590. package/src/components/charts/option/config/legend/index.js +63 -63
  591. package/src/components/charts/option/config/legend/itemStyle.js +16 -16
  592. package/src/components/charts/option/config/legend/ldata.js +29 -29
  593. package/src/components/charts/option/config/legend/pageIcon.js +54 -54
  594. package/src/components/charts/option/config/legend/position.js +18 -18
  595. package/src/components/charts/option/config/legend/size.js +16 -16
  596. package/src/components/charts/option/config/legend/textStyle.js +16 -16
  597. package/src/components/charts/option/config/mark/index.js +73 -73
  598. package/src/components/charts/option/config/polar/base.js +30 -30
  599. package/src/components/charts/option/config/polar/index.js +35 -35
  600. package/src/components/charts/option/config/polarTitle/base.js +40 -40
  601. package/src/components/charts/option/config/polarTitle/index.js +52 -52
  602. package/src/components/charts/option/config/polarTitle/subtextStyle.js +21 -21
  603. package/src/components/charts/option/config/polarTitle/textStyle.js +22 -22
  604. package/src/components/charts/option/config/radiusAxis/base.js +55 -55
  605. package/src/components/charts/option/config/radiusAxis/index.js +41 -41
  606. package/src/components/charts/option/config/rectTitle/base.js +31 -31
  607. package/src/components/charts/option/config/rectTitle/index.js +52 -52
  608. package/src/components/charts/option/config/toolbox/base.js +42 -42
  609. package/src/components/charts/option/config/toolbox/index.js +11 -11
  610. package/src/components/charts/option/config/tooltip/axisPointer.js +31 -31
  611. package/src/components/charts/option/config/tooltip/base.js +62 -62
  612. package/src/components/charts/option/config/tooltip/formatter.js +63 -63
  613. package/src/components/charts/option/config/tooltip/index.js +41 -41
  614. package/src/components/charts/option/config/visualMap/index.js +90 -90
  615. package/src/components/charts/option/config/xAxis/axisLabel.js +35 -35
  616. package/src/components/charts/option/config/xAxis/axisLine.js +29 -29
  617. package/src/components/charts/option/config/xAxis/axisMargin.js +31 -31
  618. package/src/components/charts/option/config/xAxis/base.js +66 -66
  619. package/src/components/charts/option/config/xAxis/boundaryGap.js +17 -17
  620. package/src/components/charts/option/config/xAxis/index.js +52 -52
  621. package/src/components/charts/option/config/xAxis/name.js +18 -18
  622. package/src/components/charts/option/config/xAxis/xdata.js +22 -22
  623. package/src/components/charts/option/config/xAxis/xkey.js +20 -20
  624. package/src/components/charts/option/config/yAxis/axisOptimization.js +31 -31
  625. package/src/components/charts/option/config/yAxis/base.js +59 -59
  626. package/src/components/charts/option/config/yAxis/index.js +68 -68
  627. package/src/components/charts/option/config/yAxis/ydata.js +28 -28
  628. package/src/components/charts/option/init/index.js +204 -204
  629. package/src/components/charts/register.js +178 -178
  630. package/src/components/charts/theme.js +62 -62
  631. package/src/components/charts/util/Sequence.js +21 -21
  632. package/src/components/charts/util/centerDom.js +92 -92
  633. package/src/components/charts/util/cloneDeep.js +29 -29
  634. package/src/components/charts/util/color.js +192 -192
  635. package/src/components/charts/util/constants.js +124 -124
  636. package/src/components/charts/util/convert.js +49 -49
  637. package/src/components/charts/util/debounce.js +23 -23
  638. package/src/components/charts/util/defendXSS.js +81 -81
  639. package/src/components/charts/util/dom.js +89 -89
  640. package/src/components/charts/util/equal.js +62 -62
  641. package/src/components/charts/util/event.js +25 -25
  642. package/src/components/charts/util/hashMap.js +111 -111
  643. package/src/components/charts/util/init/insert.js +164 -164
  644. package/src/components/charts/util/math.js +182 -182
  645. package/src/components/charts/util/merge.js +78 -78
  646. package/src/components/charts/util/paint.js +98 -98
  647. package/src/components/charts/util/sort/max.js +64 -64
  648. package/src/components/charts/util/sort/min.js +64 -64
  649. package/src/components/charts/util/throttle.js +33 -33
  650. package/src/components/charts/util/tips.js +24 -24
  651. package/src/components/charts/util/type.js +45 -45
  652. package/src/components/ebiz-form/components/cascader.vue +61 -61
  653. package/src/components/ebiz-form/components/checkbox.vue +37 -37
  654. package/src/components/ebiz-form/components/city.vue +137 -137
  655. package/src/components/ebiz-form/components/date-panel.vue +52 -52
  656. package/src/components/ebiz-form/components/date-range-panel.vue +52 -52
  657. package/src/components/ebiz-form/components/date-range.vue +56 -56
  658. package/src/components/ebiz-form/components/date.vue +52 -52
  659. package/src/components/ebiz-form/components/editor-multi-language.vue +47 -47
  660. package/src/components/ebiz-form/components/editor.vue +78 -78
  661. package/src/components/ebiz-form/components/file-multi-language.vue +52 -52
  662. package/src/components/ebiz-form/components/file.vue +149 -149
  663. package/src/components/ebiz-form/components/images-multi-language.vue +52 -52
  664. package/src/components/ebiz-form/components/images.vue +129 -129
  665. package/src/components/ebiz-form/components/img-multi-language.vue +51 -51
  666. package/src/components/ebiz-form/components/img.vue +129 -129
  667. package/src/components/ebiz-form/components/number.vue +50 -50
  668. package/src/components/ebiz-form/components/radio.vue +28 -28
  669. package/src/components/ebiz-form/components/select.vue +119 -119
  670. package/src/components/ebiz-form/components/switch.vue +23 -23
  671. package/src/components/ebiz-form/components/text-multi-language.vue +47 -47
  672. package/src/components/ebiz-form/components/text.vue +52 -52
  673. package/src/components/ebiz-form/components/textarea-multi-language.vue +48 -48
  674. package/src/components/ebiz-form/components/textarea.vue +29 -29
  675. package/src/components/ebiz-form/components/video-multi-language.vue +51 -51
  676. package/src/components/ebiz-form/components/video.vue +97 -97
  677. package/src/components/ebiz-form/index.vue +157 -157
  678. package/src/components/examples/PopconfirmExample.vue +149 -149
  679. package/src/components/icons/IconCommunity.vue +7 -7
  680. package/src/components/icons/IconDocumentation.vue +7 -7
  681. package/src/components/icons/IconEcosystem.vue +7 -7
  682. package/src/components/icons/IconSupport.vue +7 -7
  683. package/src/components/icons/IconTooling.vue +19 -19
  684. package/src/components/senior/EbizSData/index.vue +264 -264
  685. package/src/components/senior/EbizSDialog/index.vue +712 -708
  686. package/src/components/senior/EbizSForm/README.md +157 -157
  687. package/src/components/senior/EbizSForm/index.vue +668 -668
  688. package/src/components/senior/EbizSForm/item.vue +522 -522
  689. package/src/components/senior/EbizSForm/mItems/DateTimePicker.vue +51 -51
  690. package/src/components/senior/EbizSForm/mItems/Picker.vue +63 -63
  691. package/src/index.js +215 -215
  692. package/src/main.js +57 -57
  693. package/src/router/index.js +356 -356
  694. package/src/utils/formatCode.js +24 -24
  695. package/src/utils/generateImportStatement.js +52 -52
  696. package/src/utils/hasJsx.js +25 -25
  697. package/src/utils/index.js +166 -166
  698. package/src/utils/mergeOptions.js +29 -29
  699. package/src/utils/parseRequiredBlocks.js +18 -18
  700. package/src/utils/upload.ts +126 -126
  701. package/src/utils/vue-sfc-validator.js +155 -155
  702. package/src/views/Button.vue +23 -23
  703. package/src/views/CheckboxDemo.vue +104 -104
  704. package/src/views/DataContainer.vue +19 -19
  705. package/src/views/DialogDemo.vue +125 -125
  706. package/src/views/EbizAutoFormDemo.vue +129 -129
  707. package/src/views/EbizAvatar.vue +223 -223
  708. package/src/views/EbizDepartmentSelectorDemo.vue +169 -169
  709. package/src/views/EbizDetailBlockDemo.vue +30 -30
  710. package/src/views/EbizEmployeeInfo.vue +249 -249
  711. package/src/views/EbizEmployeeSelector.vue +83 -83
  712. package/src/views/EbizMap.vue +201 -201
  713. package/src/views/EbizRadioDemo.vue +151 -151
  714. package/src/views/EbizSDataDemo.vue +137 -137
  715. package/src/views/EbizSDialogDemo.vue +301 -301
  716. package/src/views/EbizSForm/index.vue +359 -359
  717. package/src/views/EbizSFormDemo.vue +420 -420
  718. package/src/views/EbizSpace.vue +185 -185
  719. package/src/views/EbizSwiper.vue +157 -157
  720. package/src/views/EbizTdesignButtonDialogExample.vue +437 -437
  721. package/src/views/Form.vue +19 -19
  722. package/src/views/GridDemo.vue +238 -238
  723. package/src/views/Home.vue +139 -139
  724. package/src/views/Mindmap.vue +19 -19
  725. package/src/views/MyComponent.vue +19 -19
  726. package/src/views/OkrTree.vue +19 -19
  727. package/src/views/PageHeaderDemo.vue +104 -104
  728. package/src/views/PaginationDemo.vue +96 -96
  729. package/src/views/PopconfirmDemo.vue +80 -80
  730. package/src/views/RemoteSelect.vue +350 -350
  731. package/src/views/StatisticDemo.vue +190 -190
  732. package/src/views/SwitchDemo.vue +79 -79
  733. package/src/views/Table.vue +19 -19
  734. package/src/views/TableDemo.vue +334 -334
  735. package/src/views/TableSortDemo.vue +143 -143
  736. package/src/views/TableView.vue +68 -68
  737. package/src/views/TabsDemo.vue +282 -282
  738. package/src/views/TagDemo.vue +101 -101
  739. package/src/views/TdesignAlert.vue +98 -98
  740. package/src/views/TdesignButton.vue +190 -190
  741. package/src/views/TdesignCalendar.vue +94 -94
  742. package/src/views/TdesignCard.vue +296 -296
  743. package/src/views/TdesignCollapse.vue +293 -293
  744. package/src/views/TdesignDatePicker.vue +187 -187
  745. package/src/views/TdesignDescriptions.vue +101 -101
  746. package/src/views/TdesignForm.vue +248 -248
  747. package/src/views/TdesignIcon.vue +203 -203
  748. package/src/views/TdesignImage.vue +215 -215
  749. package/src/views/TdesignImageViewer.vue +198 -198
  750. package/src/views/TdesignInput.vue +252 -252
  751. package/src/views/TdesignSelect.vue +473 -473
  752. package/src/views/TdesignSwiper.vue +157 -157
  753. package/src/views/TextareaDemo.vue +93 -93
  754. package/src/views/TimePickerDemo.vue +146 -146
  755. package/src/views/TimelineDemo.vue +160 -160
  756. package/src/views/Title.vue +19 -19
  757. package/src/views/TreeDemo.vue +254 -254
  758. package/src/views/TreeMergeTableDemo.vue +239 -239
  759. package/src/views/TreeSelectorDemo.vue +245 -245
  760. package/src/views/UploadDemo.vue +121 -121
  761. package/src/views/WatermarkDemo.vue +85 -85
@@ -1,1046 +1,1045 @@
1
- <template>
2
- <div class="ebiz-employee-selector">
3
- <!-- 选择框展示区 -->
4
- <div style="display: flex; flex-direction: column; align-items: flex-start; gap: 10px;">
5
- <div class="selected-items" v-if="selectedItems && selectedItems.length">
6
- <div v-for="(item, index) in selectedItems" :key="index" class="selected-item">
7
- <t-avatar v-if="item.avatar" :image="item.avatar" size="small" />
8
- <t-avatar v-else size="small">{{ getAvatarText(item.name) }}</t-avatar>
9
- <span class="item-info">
10
- <span class="item-code">{{ item.no }} - </span>
11
- <span class="item-name">{{ item.name }}</span>
12
- </span>
13
- <t-icon name="close" class="item-remove" @click="removeItem(index, item.id)"></t-icon>
14
- </div>
15
- </div>
16
- <t-button @click="showDialog" variant="text" theme="primary">选择人员</t-button>
17
- </div>
18
-
19
- <!-- 选择弹窗 -->
20
- <t-dialog v-model:visible="dialogVisible" header="选择人员" :width="800" footer :close-btn="true"
21
- :close-on-esc-keydown="true" :close-on-overlay-click="true">
22
-
23
- <!-- 选项卡 -->
24
- <t-tabs v-model="activeTab" class="selector-tabs">
25
- <t-tab-panel value="organization" label="组织架构" :destroyOnHide="false"></t-tab-panel>
26
- <t-tab-panel value="role" label="角色" :destroyOnHide="false"></t-tab-panel>
27
- <!-- <t-tab-panel value="position" label="岗位" :destroyOnHide="false"></t-tab-panel> -->
28
- <!-- <t-tab-panel value="department" label="同部门" :destroyOnHide="false"></t-tab-panel> -->
29
- <!-- <t-tab-panel value="subordinate" label="我的下属" :destroyOnHide="false"></t-tab-panel> -->
30
- </t-tabs>
31
-
32
-
33
- <div>
34
-
35
- <div class="selector-dialog-content">
36
- <!-- 左侧选择区域 -->
37
- <div class="left-panel">
38
- <!-- 内容区域 -->
39
- <div class="content-area">
40
- <div v-if="loading" class="loading-container">
41
- <t-loading />
42
- </div>
43
-
44
- <!-- 组织架构 -->
45
- <div v-show="activeTab === 'organization'" class="tab-content">
46
- <t-tree ref="organizationTree" :data="organizationData"
47
- :keys="{ label: 'name', value: 'id', children: 'children' }" hover activable :active="currentActive"
48
- @active="handleActive" />
49
- </div>
50
-
51
- <!-- 角色 -->
52
- <div v-show="activeTab === 'role'" class="tab-content">
53
- <t-tree ref="roleTree" :data="roleData" :keys="{ label: 'name', value: 'id' }" hover activable
54
- :active="currentActive" @active="handleActive" />
55
- </div>
56
-
57
- <!-- 岗位 -->
58
- <div v-show="activeTab === 'position'" class="tab-content">
59
- <t-tree ref="positionTree" :data="positionData" :keys="{ label: 'name', value: 'id' }" hover activable
60
- :active="currentActive" @active="handleActive" />
61
- </div>
62
-
63
- <!-- 同部门 -->
64
- <div v-show="activeTab === 'department'" class="tab-content">
65
- <t-list :split="true" size="small">
66
- <t-list-item v-for="(item, index) in departmentData" :key="index">
67
- <div class="department-item" @click="selectDepartment(item)">
68
- {{ item.name }}
69
- </div>
70
- </t-list-item>
71
- </t-list>
72
- </div>
73
-
74
- <!-- 我的下属 -->
75
- <div v-show="activeTab === 'subordinate'" class="tab-content">
76
- <t-list :split="true" size="small">
77
- <t-list-item v-for="(item, index) in subordinateData" :key="index">
78
- <div class="department-item" @click="selectDepartment(item)">
79
- {{ item.name }}
80
- </div>
81
- </t-list-item>
82
- </t-list>
83
- </div>
84
- </div>
85
- </div>
86
-
87
- <!-- 右侧人员列表区域 -->
88
- <div class="right-panel">
89
- <div class="employee-header">
90
- <div class="employee-title">
91
- {{ currentNodeName || '人员列表' }}
92
- <div v-if="activeTab === 'organization'" class="sub-dept-option">
93
- <t-checkbox v-model="childDeptEnable">包含子部门</t-checkbox>
94
- </div>
95
- </div>
96
- <div class="employee-count">
97
- <t-checkbox v-model="selectAll" @change="handleSelectAll">全选</t-checkbox>
98
- <span class="count-info">共 {{ employeeList.length }} 人</span>
99
- </div>
100
- </div>
101
-
102
- <!-- 搜索框 -->
103
- <div class="search-box">
104
- <t-input v-model="searchText" placeholder="请输入姓名/拼音/工号搜索" clearable
105
- @keyup.enter="handleSearchEnter">
106
- <template #suffix-icon>
107
- <t-icon name="search" @click="handleSearchClick"></t-icon>
108
- </template>
109
- </t-input>
110
- <t-button v-if="searchText" size="small" theme="default" class="clear-search-btn" @click="clearSearch">清除搜索</t-button>
111
- </div>
112
-
113
- <div class="employee-list">
114
- <div v-for="(item, index) in filteredEmployeeList" :key="index" class="employee-item">
115
- <t-checkbox v-model="item.checked" @change="handleCheckChange(item)"></t-checkbox>
116
- <div class="employee-avatar">
117
- <t-avatar v-if="item.avatar" :image="item.avatar" size="small" />
118
- <t-avatar v-else size="small">{{ getAvatarText(item.name) }}</t-avatar>
119
- </div>
120
- <div class="employee-info">
121
- <div class="employee-code">{{ item.no }} - </div>
122
- <div class="employee-name">{{ item.name }}</div>
123
- </div>
124
- </div>
125
- <div v-if="filteredEmployeeList.length === 0" class="empty-data">
126
- <t-empty />
127
- </div>
128
- </div>
129
- </div>
130
- </div>
131
- </div>
132
-
133
-
134
- <!-- 底部按钮区域 -->
135
- <template #footer>
136
- <div class="dialog-footer">
137
- <div class="selected-preview">
138
- 已选: {{ tempSelectedEmployees.length }} 人
139
- <div class="selected-people-list" v-if="tempSelectedEmployees.length > 0">
140
- <div v-for="(item, index) in tempSelectedEmployees" :key="index" class="selected-people-item">
141
- <t-avatar v-if="item.avatar" :image="item.avatar" size="small" />
142
- <t-avatar v-else size="small">{{ getAvatarText(item.name) }}</t-avatar>
143
- <span class="item-info">
144
- <span class="item-code">{{ item.no }}</span>
145
- <span class="item-name">{{ item.name }}</span>
146
- </span>
147
- <t-icon name="close" class="item-remove" @click="removeSelectedEmployee(item)"></t-icon>
148
- </div>
149
- </div>
150
- </div>
151
- <div class="dialog-actions">
152
- <t-button theme="default" @click="handleCancel">取消</t-button>
153
- <t-button theme="primary" @click="handleConfirm">确定</t-button>
154
- </div>
155
- </div>
156
- </template>
157
- </t-dialog>
158
- </div>
159
- </template>
160
-
161
- <script setup>
162
- import { ref, computed, watch, onMounted } from 'vue';
163
- import {
164
- Dialog as TDialog,
165
- Button as TButton,
166
- Icon as TIcon,
167
- Input as TInput,
168
- Tabs as TTabs,
169
- TabPanel as TTabPanel,
170
- Loading as TLoading,
171
- Tree as TTree,
172
- Avatar as TAvatar,
173
- Checkbox as TCheckbox,
174
- Empty as TEmpty,
175
- List as TList,
176
- ListItem as TListItem,
177
- MessagePlugin
178
- } from 'tdesign-vue-next';
179
- import dataService from '../apiService/simpleDataService';
180
-
181
- // 定义组件属性
182
- const props = defineProps({
183
- // 选中的数据,支持v-model,只存储ID列表
184
- modelValue: {
185
- type: Array,
186
- default: () => []
187
- },
188
- // 单选模式
189
- single: {
190
- type: Boolean,
191
- default: false
192
- },
193
- // 是否包含部门
194
- includeDepartment: {
195
- type: Boolean,
196
- default: false
197
- },
198
- // 默认标签页
199
- defaultTab: {
200
- type: String,
201
- default: 'organization'
202
- },
203
- // 是否展示顶层组织
204
- showRootOrg: {
205
- type: Boolean,
206
- default: true
207
- },
208
- // 最大选择数量,0表示不限制
209
- maxCount: {
210
- type: Number,
211
- default: 0
212
- }
213
- });
214
-
215
- // 定义组件事件
216
- const emit = defineEmits(['update:modelValue', 'change']);
217
-
218
- // 内部状态变量
219
- const dialogVisible = ref(false);
220
- const searchText = ref('');
221
- const activeTab = ref(props.defaultTab);
222
- const loading = ref(false);
223
- const selectedItems = ref([]);
224
- // 对话框中临时保存的选中员工列表
225
- const tempSelectedEmployees = ref([]);
226
- // 是否查询子部门
227
- const childDeptEnable = ref(false);
228
-
229
- // 数据源
230
- const organizationData = ref([]);
231
- const roleData = ref([]);
232
- const positionData = ref([]);
233
- const departmentData = ref([]);
234
- const subordinateData = ref([]);
235
- const employeeList = ref([]);
236
- const currentActive = ref([]);
237
- const currentNodeName = ref('');
238
- const selectAll = ref(false);
239
-
240
- // 从名称中获取头像显示文本
241
- const getAvatarText = (name) => {
242
- return name ? name.substring(0, 1) : '';
243
- };
244
-
245
- // 处理组织数据,转换为树形结构
246
- const _processOrgData = (data) => {
247
- // 转换数据结构为树形结构
248
- const map = {};
249
- const result = [];
250
-
251
- data.forEach(item => {
252
- map[item.id] = {
253
- ...item,
254
- name: item.name,
255
- id: item.id,
256
- children: []
257
- };
258
- });
259
-
260
- data.forEach(item => {
261
- const node = map[item.id];
262
-
263
- if (item.manager_dept && map[item.manager_dept]) {
264
- map[item.manager_dept].children.push(node);
265
- } else {
266
- // 只有在显示根组织或不存在父节点时才添加到结果中
267
- if (props.showRootOrg || !item.manager_dept) {
268
- result.push(node);
269
- }
270
- }
271
- });
272
-
273
- return result;
274
- };
275
-
276
- // 更新全选状态
277
- const updateSelectAllStatus = () => {
278
- selectAll.value = employeeList.value.length > 0 && employeeList.value.every(item => item.checked);
279
- };
280
-
281
- // 选中的员工列表
282
- const selectedEmployees = computed(() => {
283
- return employeeList.value.filter((item) => item.checked);
284
- });
285
-
286
- // 根据搜索文本过滤的员工列表
287
- const filteredEmployeeList = computed(() => {
288
- if (!searchText.value) {
289
- return employeeList.value;
290
- }
291
-
292
- const keyword = searchText.value.toLowerCase();
293
- return employeeList.value.filter((item) => {
294
- return (
295
- item.name.toLowerCase().includes(keyword) ||
296
- (item.pinyin && item.pinyin.toLowerCase().includes(keyword)) ||
297
- (item.code && item.code.toLowerCase().includes(keyword))
298
- );
299
- });
300
- });
301
-
302
- // 获取组织架构数据
303
- const fetchOrganizationData = async () => {
304
- loading.value = true;
305
- try {
306
- const response = await dataService.fetch(
307
- {},
308
- {
309
- apiId: 1933,
310
- key: 'organizationalStructure'
311
- },"/process/deptList"
312
- );
313
- organizationData.value = response
314
- // organizationData.value = processOrgData(response.data || []);
315
- } catch (error) {
316
- MessagePlugin.error({
317
- content: '获取组织架构数据失败',
318
- duration: 3000
319
- });
320
- } finally {
321
- loading.value = false;
322
- }
323
- };
324
-
325
- // 获取角色数据
326
- const fetchRoleData = async () => {
327
- loading.value = true;
328
- try {
329
- const response = await dataService.fetch(
330
- {},
331
- {},
332
- '/process/roleList'
333
- );
334
- roleData.value = response || [];
335
- } catch (error) {
336
- MessagePlugin.error({
337
- content: '获取角色数据失败',
338
- duration: 3000
339
- });
340
- } finally {
341
- loading.value = false;
342
- }
343
- };
344
-
345
- // 获取岗位数据
346
- const fetchPositionData = async () => {
347
- loading.value = true;
348
- try {
349
- const response = await dataService.fetch(
350
- {},
351
- {
352
- },
353
- '/process/roleList'
354
- );
355
- positionData.value = response?.data || [];
356
- } catch (error) {
357
- MessagePlugin.error({
358
- content: '获取岗位数据失败',
359
- duration: 3000
360
- });
361
- } finally {
362
- loading.value = false;
363
- }
364
- };
365
-
366
- // 获取部门数据
367
- const fetchDepartmentData = async () => {
368
- loading.value = true;
369
- try {
370
- const response = await dataService.fetch(
371
- {},
372
- {
373
- apiId: 1933,
374
- key: 'departmentList',
375
- apiType: 'MULTIPLE_DATA_SEARCH'
376
- }
377
- );
378
- departmentData.value = response?.data || [];
379
- } catch (error) {
380
- MessagePlugin.error({
381
- content: '获取部门数据失败',
382
- duration: 3000
383
- });
384
- } finally {
385
- loading.value = false;
386
- }
387
- };
388
-
389
- // 获取下属数据
390
- const fetchSubordinateData = async () => {
391
- loading.value = true;
392
- try {
393
- const response = await dataService.fetch(
394
- {},
395
- {
396
- apiKey: 'subordinateList',
397
- apiType: 'MULTIPLE_DATA_SEARCH'
398
- }
399
- );
400
- subordinateData.value = response?.data || [];
401
- } catch (error) {
402
- MessagePlugin.error({
403
- content: '获取下属数据失败',
404
- duration: 3000
405
- });
406
- } finally {
407
- loading.value = false;
408
- }
409
- };
410
-
411
- // 根据节点ID获取员工列表
412
- const fetchEmployeesByNode = async (nodeId, type, keyword = searchText.value) => {
413
- loading.value = true;
414
-
415
- try {
416
- const params = {};
417
-
418
- // 只有当nodeId不为空且type有效时,添加对应参数
419
- if (nodeId && type) {
420
- // 根据不同类型设置不同的查询参数
421
- switch (type) {
422
- case 'organization':
423
- params.deptId = Array.isArray(nodeId) ? nodeId[0] : nodeId;
424
- // 添加子部门查询参数
425
- params.childDeptEnable = childDeptEnable.value;
426
- break;
427
- case 'role':
428
- params.roleId = nodeId;
429
- break;
430
- case 'position':
431
- params.positionId = nodeId;
432
- break;
433
- case 'department':
434
- params.departmentId = nodeId;
435
- break;
436
- case 'subordinate':
437
- params.managerId = nodeId;
438
- break;
439
- }
440
- }
441
-
442
- // 如果有搜索关键词,添加到查询参数中
443
- if (keyword) {
444
- params.keyWord = keyword;
445
- }
446
-
447
- const response = await dataService.fetch(
448
- params,
449
- {},
450
- '/process/userList'
451
- );
452
-
453
- // 获取当前已选择的员工ID列表
454
- const selectedIds = new Set(tempSelectedEmployees.value.map(emp => emp.id));
455
-
456
- // 处理返回数据,添加checked属性,保留已选状态
457
- const employees = (response || []).map(emp => ({
458
- ...emp,
459
- checked: selectedIds.has(emp.id)
460
- }));
461
-
462
- employeeList.value = employees;
463
- updateSelectAllStatus();
464
- } catch (error) {
465
- MessagePlugin.error({
466
- content: '获取员工列表失败',
467
- duration: 3000
468
- });
469
- } finally {
470
- loading.value = false;
471
- }
472
- };
473
-
474
- // 根据ID列表批量获取员工信息
475
- const fetchEmployeesByIds = async (ids) => {
476
- if (!ids || ids.length === 0) {
477
- selectedItems.value = [];
478
- return;
479
- }
480
-
481
- loading.value = true;
482
- try {
483
- const response = await dataService.fetch(
484
- {
485
- userIds: ids // 使用新的接口参数格式
486
- },
487
- {},
488
- '/process/userList' // 直接使用新的API路径
489
- );
490
-
491
- if (response && Array.isArray(response)) {
492
- selectedItems.value = response;
493
- } else {
494
- selectedItems.value = [];
495
- MessagePlugin.warning({
496
- content: '获取员工详情返回的数据格式不正确',
497
- duration: 3000
498
- });
499
- }
500
- } catch (error) {
501
- selectedItems.value = [];
502
- MessagePlugin.error({
503
- content: '获取员工详情失败: ' + (error.message || '未知错误'),
504
- duration: 3000
505
- });
506
- } finally {
507
- loading.value = false;
508
- }
509
- };
510
-
511
- // 处理节点激活
512
- const handleActive = (value, context) => {
513
- currentActive.value = [value];
514
- currentNodeName.value = context.node?.label || '';
515
-
516
- // 获取该节点下的员工
517
- fetchEmployeesByNode(value, activeTab.value);
518
- };
519
-
520
- // 选择部门
521
- const selectDepartment = (department) => {
522
- currentNodeName.value = department.name;
523
- fetchEmployeesByNode(department.id, activeTab.value);
524
- };
525
-
526
- // 处理全选
527
- const handleSelectAll = (checked) => {
528
- employeeList.value.forEach(item => {
529
- item.checked = checked;
530
-
531
- // 如果选中,确保添加到临时选中列表
532
- if (checked && !tempSelectedEmployees.value.some(emp => emp.id === item.id)) {
533
- tempSelectedEmployees.value.push(item);
534
- }
535
- });
536
- };
537
-
538
- // 处理选中状态变更
539
- const handleCheckChange = (item) => {
540
- // 单选模式下,取消其他选中
541
- if (props.single && item.checked) {
542
- employeeList.value.forEach(emp => {
543
- if (emp.id !== item.id) {
544
- emp.checked = false;
545
- }
546
- });
547
-
548
- // 单选模式下,直接替换tempSelectedEmployees
549
- tempSelectedEmployees.value = item.checked ? [item] : [];
550
- } else {
551
- // 多选模式
552
- // 如果选中,添加到临时选中列表
553
- if (item.checked && !tempSelectedEmployees.value.some(emp => emp.id === item.id)) {
554
- tempSelectedEmployees.value.push(item);
555
- } else if (!item.checked) {
556
- // 如果取消选中,从临时选中列表中移除
557
- const index = tempSelectedEmployees.value.findIndex(emp => emp.id === item.id);
558
- if (index !== -1) {
559
- tempSelectedEmployees.value.splice(index, 1);
560
- }
561
- }
562
- }
563
-
564
- // 检查最大选择数量限制
565
- if (props.maxCount > 0) {
566
- const checkedCount = tempSelectedEmployees.value.length;
567
- if (checkedCount > props.maxCount) {
568
- item.checked = false;
569
- const index = tempSelectedEmployees.value.findIndex(emp => emp.id === item.id);
570
- if (index !== -1) {
571
- tempSelectedEmployees.value.splice(index, 1);
572
- }
573
- MessagePlugin.warning({
574
- content: `最多只能选择${props.maxCount}个人员`,
575
- duration: 3000
576
- });
577
- }
578
- }
579
-
580
- updateSelectAllStatus();
581
- };
582
-
583
- // 移除已选择的项目
584
- const removeItem = (index, id) => {
585
- // 移除ID
586
- const newIds = [...props.modelValue];
587
- const idIndex = newIds.indexOf(id);
588
- if (idIndex !== -1) {
589
- newIds.splice(idIndex, 1);
590
- emit('update:modelValue', newIds);
591
- emit('change', newIds);
592
- }
593
-
594
- // 移除展示项
595
- selectedItems.value.splice(index, 1);
596
- };
597
-
598
- // 从已选列表中移除员工
599
- const removeSelectedEmployee = (employee) => {
600
- // 将员工的checked状态设为false
601
- const foundEmployee = employeeList.value.find(item => item.id === employee.id);
602
- if (foundEmployee) {
603
- foundEmployee.checked = false;
604
- }
605
-
606
- // 从临时选中列表中移除
607
- const index = tempSelectedEmployees.value.findIndex(emp => emp.id === employee.id);
608
- if (index !== -1) {
609
- tempSelectedEmployees.value.splice(index, 1);
610
- }
611
-
612
- // 更新全选状态
613
- updateSelectAllStatus();
614
- };
615
-
616
- // 初始化选择器
617
- const initSelector = async () => {
618
- // 获取数据
619
- if (activeTab.value === 'organization' && organizationData.value.length === 0) {
620
- await fetchOrganizationData();
621
- } else if (activeTab.value === 'role' && roleData.value.length === 0) {
622
- await fetchRoleData();
623
- } else if (activeTab.value === 'position' && positionData.value.length === 0) {
624
- await fetchPositionData();
625
- } else if (activeTab.value === 'department' && departmentData.value.length === 0) {
626
- await fetchDepartmentData();
627
- } else if (activeTab.value === 'subordinate' && subordinateData.value.length === 0) {
628
- await fetchSubordinateData();
629
- }
630
- };
631
-
632
- // 显示对话框
633
- const showDialog = () => {
634
- // 初始化临时选中列表
635
- if (selectedItems.value.length > 0) {
636
- tempSelectedEmployees.value = [...selectedItems.value];
637
- } else {
638
- tempSelectedEmployees.value = [];
639
- }
640
-
641
- // 初始化数据
642
- initSelector();
643
- dialogVisible.value = true;
644
- };
645
-
646
- // 确认选择
647
- const handleConfirm = () => {
648
- const selectedEmployeeIds = tempSelectedEmployees.value.map(item => item.id);
649
-
650
- emit('update:modelValue', selectedEmployeeIds);
651
- emit('change', selectedEmployeeIds);
652
- dialogVisible.value = false;
653
- };
654
-
655
- // 取消选择
656
- const handleCancel = () => {
657
- // 放弃临时选择
658
- tempSelectedEmployees.value = [];
659
- dialogVisible.value = false;
660
- };
661
-
662
- // 监听标签页切换
663
- watch(activeTab, () => {
664
- // 切换标签页时重新加载数据
665
- initSelector();
666
- });
667
-
668
- // 监听modelValue变化,更新展示的员工信息
669
- watch(() => props.modelValue, (newIds, oldIds) => {
670
- // 判断值是否真的变化了 (通过比较JSON字符串)
671
- const newIdsStr = JSON.stringify(newIds || []);
672
- const oldIdsStr = JSON.stringify(oldIds || []);
673
-
674
- if (newIdsStr !== oldIdsStr) {
675
- // 获取员工详情数据
676
- fetchEmployeesByIds(newIds);
677
- }
678
- }, { immediate: true, deep: true });
679
-
680
- // 监听选中员工变化,更新临时已选列表
681
- watch(selectedEmployees, (newVal) => {
682
- // 更新临时选中列表,保留之前不在当前列表中的已选员工
683
- const currentIds = new Set(newVal.map(emp => emp.id));
684
-
685
- // 移除tempSelectedEmployees中已经不再选中的员工
686
- tempSelectedEmployees.value = tempSelectedEmployees.value.filter(emp =>
687
- !currentIds.has(emp.id) || newVal.some(item => item.id === emp.id)
688
- );
689
-
690
- // 添加新选中的员工
691
- newVal.forEach(emp => {
692
- if (!tempSelectedEmployees.value.some(item => item.id === emp.id)) {
693
- tempSelectedEmployees.value.push(emp);
694
- }
695
- });
696
- }, { deep: true });
697
-
698
- // 监听子部门查询开关变化
699
- watch(childDeptEnable, () => {
700
- // 如果当前在组织架构页面且有选中节点,重新加载员工列表
701
- if (activeTab.value === 'organization' && currentActive.value && currentActive.value.length > 0) {
702
- fetchEmployeesByNode(currentActive.value[0], activeTab.value);
703
- }
704
- });
705
-
706
- // 防抖函数
707
- const debounce = (fn, delay) => {
708
- let timer = null;
709
- return function(...args) {
710
- if (timer) clearTimeout(timer);
711
- timer = setTimeout(() => {
712
- fn.apply(this, args);
713
- }, delay);
714
- };
715
- };
716
-
717
- // 防抖处理过的搜索函数
718
- const debouncedSearch = debounce((keyword) => {
719
- if (keyword) {
720
- const nodeId = currentActive.value && currentActive.value.length > 0 ? currentActive.value[0] : null;
721
- const type = nodeId ? activeTab.value : null;
722
- fetchEmployeesByNode(nodeId, type, keyword);
723
- } else if (currentActive.value && currentActive.value.length > 0) {
724
- // 如果搜索框清空,恢复显示当前选中节点的员工列表
725
- fetchEmployeesByNode(currentActive.value[0], activeTab.value);
726
- } else {
727
- // 如果没有选中节点,清空员工列表
728
- employeeList.value = [];
729
- }
730
- }, 300); // 300ms防抖
731
-
732
- // 监听搜索文本变化,触发搜索
733
- watch(searchText, (newValue) => {
734
- debouncedSearch(newValue);
735
- }, { immediate: false });
736
-
737
- // 组件挂载时执行
738
- onMounted(() => {
739
- // 获取已选员工详情
740
- fetchEmployeesByIds(props.modelValue);
741
- });
742
-
743
- // 处理搜索图标点击
744
- const handleSearchClick = () => {
745
- if (searchText.value) {
746
- const nodeId = currentActive.value && currentActive.value.length > 0 ? currentActive.value[0] : null;
747
- const type = nodeId ? activeTab.value : null;
748
- fetchEmployeesByNode(nodeId, type, searchText.value);
749
- }
750
- };
751
-
752
- // 处理回车键搜索
753
- const handleSearchEnter = () => {
754
- if (searchText.value) {
755
- const nodeId = currentActive.value && currentActive.value.length > 0 ? currentActive.value[0] : null;
756
- const type = nodeId ? activeTab.value : null;
757
- fetchEmployeesByNode(nodeId, type, searchText.value);
758
- }
759
- };
760
-
761
- // 清除搜索
762
- const clearSearch = () => {
763
- searchText.value = '';
764
- if (currentActive.value && currentActive.value.length > 0) {
765
- fetchEmployeesByNode(currentActive.value[0], activeTab.value);
766
- } else {
767
- // 如果没有选中节点,重置员工列表但保留选中状态
768
- employeeList.value = employeeList.value.map(emp => ({
769
- ...emp,
770
- checked: tempSelectedEmployees.value.some(item => item.id === emp.id)
771
- }));
772
- }
773
- };
774
- </script>
775
-
776
- <style scoped>
777
- .ebiz-employee-selector {
778
- width: 100%;
779
- display: flex;
780
- flex-direction: column;
781
- }
782
-
783
- /* 选择框展示区 */
784
- .employee-selector-container {
785
- min-height: 32px;
786
- width: 100%;
787
- border: 1px solid #dcdcdc;
788
- border-radius: 3px;
789
- padding: 4px 8px;
790
- display: flex;
791
- flex-wrap: wrap;
792
- gap: 8px;
793
- align-items: center;
794
- }
795
-
796
- .selected-items {
797
- display: flex;
798
- flex-wrap: wrap;
799
- gap: 8px;
800
- }
801
-
802
- .selected-item {
803
- display: flex;
804
- align-items: center;
805
- background-color: #f0f0f0;
806
- border-radius: 3px;
807
- padding: 2px 8px 2px 2px;
808
- gap: 8px;
809
- }
810
-
811
- .item-info {
812
- display: flex;
813
- align-items: center;
814
- gap: 4px;
815
- }
816
-
817
- .item-code {
818
- color: #999;
819
- font-size: 12px;
820
- }
821
-
822
- .item-name {
823
- font-size: 14px;
824
- }
825
-
826
- .item-remove {
827
- cursor: pointer;
828
- color: #999;
829
- font-size: 12px;
830
- }
831
-
832
- .item-remove:hover {
833
- color: #E34D59;
834
- }
835
-
836
- /* 选择弹窗 */
837
- .selector-dialog-content {
838
- display: flex;
839
- height: 500px;
840
- }
841
-
842
- .left-panel, .right-panel {
843
- height: 100%;
844
- overflow: hidden;
845
- display: flex;
846
- flex-direction: column;
847
- }
848
-
849
- .left-panel {
850
- width: 40%;
851
- border-right: 1px solid #dcdcdc;
852
- padding-right: 16px;
853
- }
854
-
855
- .right-panel {
856
- width: 60%;
857
- padding-left: 16px;
858
- }
859
-
860
- .search-box {
861
- margin-bottom: 16px;
862
- }
863
-
864
- .right-panel .search-box {
865
- margin-top: 8px;
866
- margin-bottom: 16px;
867
- display: flex;
868
- align-items: center;
869
- gap: 8px;
870
- }
871
-
872
- .right-panel .search-box .t-input {
873
- width: 100%;
874
- border-radius: 4px;
875
- }
876
-
877
- .right-panel .search-box .t-input__suffix-icon {
878
- cursor: pointer;
879
- }
880
-
881
- .right-panel .search-box .t-input__suffix-icon:hover {
882
- color: var(--td-brand-color);
883
- }
884
-
885
- .selector-tabs {
886
- margin-bottom: 16px;
887
- }
888
-
889
- .content-area {
890
- flex: 1;
891
- overflow: auto;
892
- position: relative;
893
- }
894
-
895
- .loading-container {
896
- position: absolute;
897
- top: 0;
898
- left: 0;
899
- right: 0;
900
- bottom: 0;
901
- display: flex;
902
- justify-content: center;
903
- align-items: center;
904
- background-color: rgba(255, 255, 255, 0.6);
905
- z-index: 1;
906
- }
907
-
908
- .tab-content {
909
- height: 100%;
910
- overflow: auto;
911
- }
912
-
913
- .department-item {
914
- cursor: pointer;
915
- padding: 8px;
916
- }
917
-
918
- .department-item:hover {
919
- background-color: #f5f5f5;
920
- }
921
-
922
- .employee-header {
923
- display: flex;
924
- justify-content: space-between;
925
- align-items: center;
926
- margin-bottom: 16px;
927
- }
928
-
929
- .employee-title {
930
- font-weight: bold;
931
- font-size: 16px;
932
- display: flex;
933
- align-items: center;
934
- gap: 10px;
935
- }
936
-
937
- .sub-dept-option {
938
- margin-left: 10px;
939
- font-weight: normal;
940
- font-size: 14px;
941
- }
942
-
943
- .employee-count {
944
- display: flex;
945
- align-items: center;
946
- gap: 8px;
947
- }
948
-
949
- .count-info {
950
- color: #999;
951
- font-size: 14px;
952
- }
953
-
954
- .employee-list {
955
- flex: 1;
956
- overflow: auto;
957
- display: flex;
958
- flex-direction: column;
959
- gap: 8px;
960
- }
961
-
962
- .employee-item {
963
- display: flex;
964
- align-items: center;
965
- gap: 12px;
966
- padding: 8px;
967
- border-radius: 4px;
968
- }
969
-
970
- .employee-item:hover {
971
- background-color: #f5f5f5;
972
- }
973
-
974
- .employee-avatar {
975
- display: flex;
976
- align-items: center;
977
- }
978
-
979
- .employee-info {
980
- display: flex;
981
- gap: 8px;
982
- align-items: center;
983
- }
984
-
985
- .employee-code {
986
- color: #999;
987
- font-size: 12px;
988
- }
989
-
990
- .employee-name {
991
- font-size: 14px;
992
- }
993
-
994
- .empty-data {
995
- display: flex;
996
- justify-content: center;
997
- align-items: center;
998
- height: 200px;
999
- }
1000
-
1001
- .dialog-footer {
1002
- display: flex;
1003
- justify-content: space-between;
1004
- align-items: center;
1005
- padding: 16px 0;
1006
- }
1007
-
1008
- .selected-preview {
1009
- color: #666;
1010
- }
1011
-
1012
- .dialog-actions {
1013
- display: flex;
1014
- gap: 8px;
1015
- }
1016
-
1017
- .selected-people-list {
1018
- margin-top: 8px;
1019
- display: flex;
1020
- flex-wrap: wrap;
1021
- gap: 8px;
1022
- }
1023
-
1024
- .selected-people-item {
1025
- display: flex;
1026
- align-items: center;
1027
- background-color: #f0f0f0;
1028
- border-radius: 3px;
1029
- padding: 2px 8px 2px 2px;
1030
- gap: 8px;
1031
- }
1032
-
1033
- .selected-people-item:hover {
1034
- background-color: #e0e0e0;
1035
- }
1036
-
1037
- .selected-people-item .item-remove {
1038
- cursor: pointer;
1039
- color: #999;
1040
- font-size: 12px;
1041
- }
1042
-
1043
- .selected-people-item .item-remove:hover {
1044
- color: #E34D59;
1045
- }
1
+ <template>
2
+ <div class="ebiz-employee-selector">
3
+ <!-- 选择框展示区 -->
4
+ <div style="display: flex; flex-direction: column; align-items: flex-start; gap: 10px;">
5
+ <div class="selected-items" v-if="selectedItems && selectedItems.length">
6
+ <div v-for="(item, index) in selectedItems" :key="index" class="selected-item">
7
+ <t-avatar v-if="item.avatar" :image="item.avatar" size="small" />
8
+ <t-avatar v-else size="small">{{ getAvatarText(item.name) }}</t-avatar>
9
+ <span class="item-info">
10
+ <span class="item-code">{{ item.no }} - </span>
11
+ <span class="item-name">{{ item.name }}</span>
12
+ </span>
13
+ <t-icon name="close" class="item-remove" @click="removeItem(index, item.id)"></t-icon>
14
+ </div>
15
+ </div>
16
+ <t-button @click="showDialog" variant="text" theme="primary">选择人员</t-button>
17
+ </div>
18
+
19
+ <!-- 选择弹窗 -->
20
+ <t-dialog v-model:visible="dialogVisible" header="选择人员" :width="800" footer :close-btn="true"
21
+ :close-on-esc-keydown="true" :close-on-overlay-click="true">
22
+
23
+ <!-- 选项卡 -->
24
+ <t-tabs v-model="activeTab" class="selector-tabs">
25
+ <t-tab-panel value="organization" label="组织架构" :destroyOnHide="false"></t-tab-panel>
26
+ <t-tab-panel value="role" label="角色" :destroyOnHide="false"></t-tab-panel>
27
+ <!-- <t-tab-panel value="position" label="岗位" :destroyOnHide="false"></t-tab-panel> -->
28
+ <!-- <t-tab-panel value="department" label="同部门" :destroyOnHide="false"></t-tab-panel> -->
29
+ <!-- <t-tab-panel value="subordinate" label="我的下属" :destroyOnHide="false"></t-tab-panel> -->
30
+ </t-tabs>
31
+
32
+
33
+ <div>
34
+
35
+ <div class="selector-dialog-content">
36
+ <!-- 左侧选择区域 -->
37
+ <div class="left-panel">
38
+ <!-- 内容区域 -->
39
+ <div class="content-area">
40
+ <div v-if="loading" class="loading-container">
41
+ <t-loading />
42
+ </div>
43
+
44
+ <!-- 组织架构 -->
45
+ <div v-show="activeTab === 'organization'" class="tab-content">
46
+ <t-tree ref="organizationTree" :data="organizationData"
47
+ :keys="{ label: 'name', value: 'id', children: 'children' }" hover activable :active="currentActive"
48
+ @active="handleActive" />
49
+ </div>
50
+
51
+ <!-- 角色 -->
52
+ <div v-show="activeTab === 'role'" class="tab-content">
53
+ <t-tree ref="roleTree" :data="roleData" :keys="{ label: 'name', value: 'code' }" hover activable
54
+ :active="currentActive" @active="handleActive" />
55
+ </div>
56
+
57
+ <!-- 岗位 -->
58
+ <div v-show="activeTab === 'position'" class="tab-content">
59
+ <t-tree ref="positionTree" :data="positionData" :keys="{ label: 'name', value: 'id' }" hover activable
60
+ :active="currentActive" @active="handleActive" />
61
+ </div>
62
+
63
+ <!-- 同部门 -->
64
+ <div v-show="activeTab === 'department'" class="tab-content">
65
+ <t-list :split="true" size="small">
66
+ <t-list-item v-for="(item, index) in departmentData" :key="index">
67
+ <div class="department-item" @click="selectDepartment(item)">
68
+ {{ item.name }}
69
+ </div>
70
+ </t-list-item>
71
+ </t-list>
72
+ </div>
73
+
74
+ <!-- 我的下属 -->
75
+ <div v-show="activeTab === 'subordinate'" class="tab-content">
76
+ <t-list :split="true" size="small">
77
+ <t-list-item v-for="(item, index) in subordinateData" :key="index">
78
+ <div class="department-item" @click="selectDepartment(item)">
79
+ {{ item.name }}
80
+ </div>
81
+ </t-list-item>
82
+ </t-list>
83
+ </div>
84
+ </div>
85
+ </div>
86
+
87
+ <!-- 右侧人员列表区域 -->
88
+ <div class="right-panel">
89
+ <div class="employee-header">
90
+ <div class="employee-title">
91
+ {{ currentNodeName || '人员列表' }}
92
+ <div v-if="activeTab === 'organization'" class="sub-dept-option">
93
+ <t-checkbox v-model="childDeptEnable">包含子部门</t-checkbox>
94
+ </div>
95
+ </div>
96
+ <div class="employee-count">
97
+ <t-checkbox v-model="selectAll" @change="handleSelectAll">全选</t-checkbox>
98
+ <span class="count-info">共 {{ employeeList.length }} 人</span>
99
+ </div>
100
+ </div>
101
+
102
+ <!-- 搜索框 -->
103
+ <div class="search-box">
104
+ <t-input v-model="searchText" placeholder="请输入姓名/拼音/工号搜索" clearable
105
+ @keyup.enter="handleSearchEnter">
106
+ <template #suffix-icon>
107
+ <t-icon name="search" @click="handleSearchClick"></t-icon>
108
+ </template>
109
+ </t-input>
110
+ <t-button v-if="searchText" size="small" theme="default" class="clear-search-btn" @click="clearSearch">清除搜索</t-button>
111
+ </div>
112
+
113
+ <div class="employee-list">
114
+ <div v-for="(item, index) in filteredEmployeeList" :key="index" class="employee-item">
115
+ <t-checkbox v-model="item.checked" @change="handleCheckChange(item)"></t-checkbox>
116
+ <div class="employee-avatar">
117
+ <t-avatar v-if="item.avatar" :image="item.avatar" size="small" />
118
+ <t-avatar v-else size="small">{{ getAvatarText(item.name) }}</t-avatar>
119
+ </div>
120
+ <div class="employee-info">
121
+ <div class="employee-code">{{ item.no }} - </div>
122
+ <div class="employee-name">{{ item.name }}</div>
123
+ </div>
124
+ </div>
125
+ <div v-if="filteredEmployeeList.length === 0" class="empty-data">
126
+ <t-empty />
127
+ </div>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+
133
+
134
+ <!-- 底部按钮区域 -->
135
+ <template #footer>
136
+ <div class="dialog-footer">
137
+ <div class="selected-preview">
138
+ 已选: {{ tempSelectedEmployees.length }} 人
139
+ <div class="selected-people-list" v-if="tempSelectedEmployees.length > 0">
140
+ <div v-for="(item, index) in tempSelectedEmployees" :key="index" class="selected-people-item">
141
+ <t-avatar v-if="item.avatar" :image="item.avatar" size="small" />
142
+ <t-avatar v-else size="small">{{ getAvatarText(item.name) }}</t-avatar>
143
+ <span class="item-info">
144
+ <span class="item-code">{{ item.no }}</span>
145
+ <span class="item-name">{{ item.name }}</span>
146
+ </span>
147
+ <t-icon name="close" class="item-remove" @click="removeSelectedEmployee(item)"></t-icon>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ <div class="dialog-actions">
152
+ <t-button theme="default" @click="handleCancel">取消</t-button>
153
+ <t-button theme="primary" @click="handleConfirm">确定</t-button>
154
+ </div>
155
+ </div>
156
+ </template>
157
+ </t-dialog>
158
+ </div>
159
+ </template>
160
+
161
+ <script setup>
162
+ import { ref, computed, watch, onMounted } from 'vue';
163
+ import {
164
+ Dialog as TDialog,
165
+ Button as TButton,
166
+ Icon as TIcon,
167
+ Input as TInput,
168
+ Tabs as TTabs,
169
+ TabPanel as TTabPanel,
170
+ Loading as TLoading,
171
+ Tree as TTree,
172
+ Avatar as TAvatar,
173
+ Checkbox as TCheckbox,
174
+ Empty as TEmpty,
175
+ List as TList,
176
+ ListItem as TListItem,
177
+ MessagePlugin
178
+ } from 'tdesign-vue-next';
179
+ import dataService from '../apiService/simpleDataService';
180
+
181
+ // 定义组件属性
182
+ const props = defineProps({
183
+ // 选中的数据,支持v-model,只存储ID列表
184
+ modelValue: {
185
+ type: Array,
186
+ default: () => []
187
+ },
188
+ // 单选模式
189
+ single: {
190
+ type: Boolean,
191
+ default: false
192
+ },
193
+ // 是否包含部门
194
+ includeDepartment: {
195
+ type: Boolean,
196
+ default: false
197
+ },
198
+ // 默认标签页
199
+ defaultTab: {
200
+ type: String,
201
+ default: 'organization'
202
+ },
203
+ // 是否展示顶层组织
204
+ showRootOrg: {
205
+ type: Boolean,
206
+ default: true
207
+ },
208
+ // 最大选择数量,0表示不限制
209
+ maxCount: {
210
+ type: Number,
211
+ default: 0
212
+ }
213
+ });
214
+
215
+ // 定义组件事件
216
+ const emit = defineEmits(['update:modelValue', 'change']);
217
+
218
+ // 内部状态变量
219
+ const dialogVisible = ref(false);
220
+ const searchText = ref('');
221
+ const activeTab = ref(props.defaultTab);
222
+ const loading = ref(false);
223
+ const selectedItems = ref([]);
224
+ // 对话框中临时保存的选中员工列表
225
+ const tempSelectedEmployees = ref([]);
226
+ // 是否查询子部门
227
+ const childDeptEnable = ref(false);
228
+
229
+ // 数据源
230
+ const organizationData = ref([]);
231
+ const roleData = ref([]);
232
+ const positionData = ref([]);
233
+ const departmentData = ref([]);
234
+ const subordinateData = ref([]);
235
+ const employeeList = ref([]);
236
+ const currentActive = ref([]);
237
+ const currentNodeName = ref('');
238
+ const selectAll = ref(false);
239
+
240
+ // 从名称中获取头像显示文本
241
+ const getAvatarText = (name) => {
242
+ return name ? name.substring(0, 1) : '';
243
+ };
244
+
245
+ // 处理组织数据,转换为树形结构
246
+ const _processOrgData = (data) => {
247
+ // 转换数据结构为树形结构
248
+ const map = {};
249
+ const result = [];
250
+
251
+ data.forEach(item => {
252
+ map[item.id] = {
253
+ ...item,
254
+ name: item.name,
255
+ id: item.id,
256
+ children: []
257
+ };
258
+ });
259
+
260
+ data.forEach(item => {
261
+ const node = map[item.id];
262
+
263
+ if (item.manager_dept && map[item.manager_dept]) {
264
+ map[item.manager_dept].children.push(node);
265
+ } else {
266
+ // 只有在显示根组织或不存在父节点时才添加到结果中
267
+ if (props.showRootOrg || !item.manager_dept) {
268
+ result.push(node);
269
+ }
270
+ }
271
+ });
272
+
273
+ return result;
274
+ };
275
+
276
+ // 更新全选状态
277
+ const updateSelectAllStatus = () => {
278
+ selectAll.value = employeeList.value.length > 0 && employeeList.value.every(item => item.checked);
279
+ };
280
+
281
+ // 选中的员工列表
282
+ const selectedEmployees = computed(() => {
283
+ return employeeList.value.filter((item) => item.checked);
284
+ });
285
+
286
+ // 根据搜索文本过滤的员工列表
287
+ const filteredEmployeeList = computed(() => {
288
+ if (!searchText.value) {
289
+ return employeeList.value;
290
+ }
291
+
292
+ const keyword = searchText.value.toLowerCase();
293
+ return employeeList.value.filter((item) => {
294
+ return (
295
+ item.name.toLowerCase().includes(keyword) ||
296
+ (item.pinyin && item.pinyin.toLowerCase().includes(keyword)) ||
297
+ (item.code && item.code.toLowerCase().includes(keyword))
298
+ );
299
+ });
300
+ });
301
+
302
+ // 获取组织架构数据
303
+ const fetchOrganizationData = async () => {
304
+ loading.value = true;
305
+ try {
306
+ const response = await dataService.fetch(
307
+ {},
308
+ {
309
+ apiId: 1933,
310
+ key: 'organizationalStructure'
311
+ },"/process/deptList"
312
+ );
313
+ organizationData.value = response
314
+ // organizationData.value = processOrgData(response.data || []);
315
+ } catch (error) {
316
+ MessagePlugin.error({
317
+ content: '获取组织架构数据失败',
318
+ duration: 3000
319
+ });
320
+ } finally {
321
+ loading.value = false;
322
+ }
323
+ };
324
+
325
+ // 获取角色数据
326
+ const fetchRoleData = async () => {
327
+ loading.value = true;
328
+ try {
329
+ const response = await dataService.fetch(
330
+ {},
331
+ {},
332
+ '/process/roleList'
333
+ );
334
+ roleData.value = response || [];
335
+ } catch (error) {
336
+ MessagePlugin.error({
337
+ content: '获取角色数据失败',
338
+ duration: 3000
339
+ });
340
+ } finally {
341
+ loading.value = false;
342
+ }
343
+ };
344
+
345
+ // 获取岗位数据
346
+ const fetchPositionData = async () => {
347
+ loading.value = true;
348
+ try {
349
+ const response = await dataService.fetch(
350
+ {},
351
+ {
352
+ },
353
+ '/process/roleList'
354
+ );
355
+ positionData.value = response?.data || [];
356
+ } catch (error) {
357
+ MessagePlugin.error({
358
+ content: '获取岗位数据失败',
359
+ duration: 3000
360
+ });
361
+ } finally {
362
+ loading.value = false;
363
+ }
364
+ };
365
+
366
+ // 获取部门数据
367
+ const fetchDepartmentData = async () => {
368
+ loading.value = true;
369
+ try {
370
+ const response = await dataService.fetch(
371
+ {},
372
+ {
373
+ apiId: 1933,
374
+ key: 'departmentList',
375
+ apiType: 'MULTIPLE_DATA_SEARCH'
376
+ }
377
+ );
378
+ departmentData.value = response?.data || [];
379
+ } catch (error) {
380
+ MessagePlugin.error({
381
+ content: '获取部门数据失败',
382
+ duration: 3000
383
+ });
384
+ } finally {
385
+ loading.value = false;
386
+ }
387
+ };
388
+
389
+ // 获取下属数据
390
+ const fetchSubordinateData = async () => {
391
+ loading.value = true;
392
+ try {
393
+ const response = await dataService.fetch(
394
+ {},
395
+ {
396
+ apiKey: 'subordinateList',
397
+ apiType: 'MULTIPLE_DATA_SEARCH'
398
+ }
399
+ );
400
+ subordinateData.value = response?.data || [];
401
+ } catch (error) {
402
+ MessagePlugin.error({
403
+ content: '获取下属数据失败',
404
+ duration: 3000
405
+ });
406
+ } finally {
407
+ loading.value = false;
408
+ }
409
+ };
410
+
411
+ // 根据节点ID获取员工列表
412
+ const fetchEmployeesByNode = async (nodeId, type, keyword = searchText.value) => {
413
+ loading.value = true;
414
+ try {
415
+ const params = {};
416
+
417
+ // 只有当nodeId不为空且type有效时,添加对应参数
418
+ if (nodeId && type) {
419
+ // 根据不同类型设置不同的查询参数
420
+ switch (type) {
421
+ case 'organization':
422
+ params.deptId = Array.isArray(nodeId) ? nodeId[0] : nodeId;
423
+ // 添加子部门查询参数
424
+ params.childDeptEnable = childDeptEnable.value;
425
+ break;
426
+ case 'role':
427
+ params.roleKeyWork = nodeId[0];
428
+ break;
429
+ case 'position':
430
+ params.positionId = nodeId;
431
+ break;
432
+ case 'department':
433
+ params.departmentId = nodeId;
434
+ break;
435
+ case 'subordinate':
436
+ params.managerId = nodeId;
437
+ break;
438
+ }
439
+ }
440
+
441
+ // 如果有搜索关键词,添加到查询参数中
442
+ if (keyword) {
443
+ params.keyWord = keyword;
444
+ }
445
+
446
+ const response = await dataService.fetch(
447
+ params,
448
+ {},
449
+ '/process/userList'
450
+ );
451
+
452
+ // 获取当前已选择的员工ID列表
453
+ const selectedIds = new Set(tempSelectedEmployees.value.map(emp => emp.id));
454
+
455
+ // 处理返回数据,添加checked属性,保留已选状态
456
+ const employees = (response || []).map(emp => ({
457
+ ...emp,
458
+ checked: selectedIds.has(emp.id)
459
+ }));
460
+
461
+ employeeList.value = employees;
462
+ updateSelectAllStatus();
463
+ } catch (error) {
464
+ MessagePlugin.error({
465
+ content: '获取员工列表失败',
466
+ duration: 3000
467
+ });
468
+ } finally {
469
+ loading.value = false;
470
+ }
471
+ };
472
+
473
+ // 根据ID列表批量获取员工信息
474
+ const fetchEmployeesByIds = async (ids) => {
475
+ if (!ids || ids.length === 0) {
476
+ selectedItems.value = [];
477
+ return;
478
+ }
479
+
480
+ loading.value = true;
481
+ try {
482
+ const response = await dataService.fetch(
483
+ {
484
+ userIds: ids // 使用新的接口参数格式
485
+ },
486
+ {},
487
+ '/process/userList' // 直接使用新的API路径
488
+ );
489
+
490
+ if (response && Array.isArray(response)) {
491
+ selectedItems.value = response;
492
+ } else {
493
+ selectedItems.value = [];
494
+ MessagePlugin.warning({
495
+ content: '获取员工详情返回的数据格式不正确',
496
+ duration: 3000
497
+ });
498
+ }
499
+ } catch (error) {
500
+ selectedItems.value = [];
501
+ MessagePlugin.error({
502
+ content: '获取员工详情失败: ' + (error.message || '未知错误'),
503
+ duration: 3000
504
+ });
505
+ } finally {
506
+ loading.value = false;
507
+ }
508
+ };
509
+
510
+ // 处理节点激活
511
+ const handleActive = (value, context) => {
512
+ currentActive.value = [value];
513
+ currentNodeName.value = context.node?.label || '';
514
+
515
+ // 获取该节点下的员工
516
+ fetchEmployeesByNode(value, activeTab.value);
517
+ };
518
+
519
+ // 选择部门
520
+ const selectDepartment = (department) => {
521
+ currentNodeName.value = department.name;
522
+ fetchEmployeesByNode(department.id, activeTab.value);
523
+ };
524
+
525
+ // 处理全选
526
+ const handleSelectAll = (checked) => {
527
+ employeeList.value.forEach(item => {
528
+ item.checked = checked;
529
+
530
+ // 如果选中,确保添加到临时选中列表
531
+ if (checked && !tempSelectedEmployees.value.some(emp => emp.id === item.id)) {
532
+ tempSelectedEmployees.value.push(item);
533
+ }
534
+ });
535
+ };
536
+
537
+ // 处理选中状态变更
538
+ const handleCheckChange = (item) => {
539
+ // 单选模式下,取消其他选中
540
+ if (props.single && item.checked) {
541
+ employeeList.value.forEach(emp => {
542
+ if (emp.id !== item.id) {
543
+ emp.checked = false;
544
+ }
545
+ });
546
+
547
+ // 单选模式下,直接替换tempSelectedEmployees
548
+ tempSelectedEmployees.value = item.checked ? [item] : [];
549
+ } else {
550
+ // 多选模式
551
+ // 如果选中,添加到临时选中列表
552
+ if (item.checked && !tempSelectedEmployees.value.some(emp => emp.id === item.id)) {
553
+ tempSelectedEmployees.value.push(item);
554
+ } else if (!item.checked) {
555
+ // 如果取消选中,从临时选中列表中移除
556
+ const index = tempSelectedEmployees.value.findIndex(emp => emp.id === item.id);
557
+ if (index !== -1) {
558
+ tempSelectedEmployees.value.splice(index, 1);
559
+ }
560
+ }
561
+ }
562
+
563
+ // 检查最大选择数量限制
564
+ if (props.maxCount > 0) {
565
+ const checkedCount = tempSelectedEmployees.value.length;
566
+ if (checkedCount > props.maxCount) {
567
+ item.checked = false;
568
+ const index = tempSelectedEmployees.value.findIndex(emp => emp.id === item.id);
569
+ if (index !== -1) {
570
+ tempSelectedEmployees.value.splice(index, 1);
571
+ }
572
+ MessagePlugin.warning({
573
+ content: `最多只能选择${props.maxCount}个人员`,
574
+ duration: 3000
575
+ });
576
+ }
577
+ }
578
+
579
+ updateSelectAllStatus();
580
+ };
581
+
582
+ // 移除已选择的项目
583
+ const removeItem = (index, id) => {
584
+ // 移除ID
585
+ const newIds = [...props.modelValue];
586
+ const idIndex = newIds.indexOf(id);
587
+ if (idIndex !== -1) {
588
+ newIds.splice(idIndex, 1);
589
+ emit('update:modelValue', newIds);
590
+ emit('change', newIds);
591
+ }
592
+
593
+ // 移除展示项
594
+ selectedItems.value.splice(index, 1);
595
+ };
596
+
597
+ // 从已选列表中移除员工
598
+ const removeSelectedEmployee = (employee) => {
599
+ // 将员工的checked状态设为false
600
+ const foundEmployee = employeeList.value.find(item => item.id === employee.id);
601
+ if (foundEmployee) {
602
+ foundEmployee.checked = false;
603
+ }
604
+
605
+ // 从临时选中列表中移除
606
+ const index = tempSelectedEmployees.value.findIndex(emp => emp.id === employee.id);
607
+ if (index !== -1) {
608
+ tempSelectedEmployees.value.splice(index, 1);
609
+ }
610
+
611
+ // 更新全选状态
612
+ updateSelectAllStatus();
613
+ };
614
+
615
+ // 初始化选择器
616
+ const initSelector = async () => {
617
+ // 获取数据
618
+ if (activeTab.value === 'organization' && organizationData.value.length === 0) {
619
+ await fetchOrganizationData();
620
+ } else if (activeTab.value === 'role' && roleData.value.length === 0) {
621
+ await fetchRoleData();
622
+ } else if (activeTab.value === 'position' && positionData.value.length === 0) {
623
+ await fetchPositionData();
624
+ } else if (activeTab.value === 'department' && departmentData.value.length === 0) {
625
+ await fetchDepartmentData();
626
+ } else if (activeTab.value === 'subordinate' && subordinateData.value.length === 0) {
627
+ await fetchSubordinateData();
628
+ }
629
+ };
630
+
631
+ // 显示对话框
632
+ const showDialog = () => {
633
+ // 初始化临时选中列表
634
+ if (selectedItems.value.length > 0) {
635
+ tempSelectedEmployees.value = [...selectedItems.value];
636
+ } else {
637
+ tempSelectedEmployees.value = [];
638
+ }
639
+
640
+ // 初始化数据
641
+ initSelector();
642
+ dialogVisible.value = true;
643
+ };
644
+
645
+ // 确认选择
646
+ const handleConfirm = () => {
647
+ const selectedEmployeeIds = tempSelectedEmployees.value.map(item => item.id);
648
+
649
+ emit('update:modelValue', selectedEmployeeIds);
650
+ emit('change', selectedEmployeeIds);
651
+ dialogVisible.value = false;
652
+ };
653
+
654
+ // 取消选择
655
+ const handleCancel = () => {
656
+ // 放弃临时选择
657
+ tempSelectedEmployees.value = [];
658
+ dialogVisible.value = false;
659
+ };
660
+
661
+ // 监听标签页切换
662
+ watch(activeTab, () => {
663
+ // 切换标签页时重新加载数据
664
+ initSelector();
665
+ });
666
+
667
+ // 监听modelValue变化,更新展示的员工信息
668
+ watch(() => props.modelValue, (newIds, oldIds) => {
669
+ // 判断值是否真的变化了 (通过比较JSON字符串)
670
+ const newIdsStr = JSON.stringify(newIds || []);
671
+ const oldIdsStr = JSON.stringify(oldIds || []);
672
+
673
+ if (newIdsStr !== oldIdsStr) {
674
+ // 获取员工详情数据
675
+ fetchEmployeesByIds(newIds);
676
+ }
677
+ }, { immediate: true, deep: true });
678
+
679
+ // 监听选中员工变化,更新临时已选列表
680
+ watch(selectedEmployees, (newVal) => {
681
+ // 更新临时选中列表,保留之前不在当前列表中的已选员工
682
+ const currentIds = new Set(newVal.map(emp => emp.id));
683
+
684
+ // 移除tempSelectedEmployees中已经不再选中的员工
685
+ tempSelectedEmployees.value = tempSelectedEmployees.value.filter(emp =>
686
+ !currentIds.has(emp.id) || newVal.some(item => item.id === emp.id)
687
+ );
688
+
689
+ // 添加新选中的员工
690
+ newVal.forEach(emp => {
691
+ if (!tempSelectedEmployees.value.some(item => item.id === emp.id)) {
692
+ tempSelectedEmployees.value.push(emp);
693
+ }
694
+ });
695
+ }, { deep: true });
696
+
697
+ // 监听子部门查询开关变化
698
+ watch(childDeptEnable, () => {
699
+ // 如果当前在组织架构页面且有选中节点,重新加载员工列表
700
+ if (activeTab.value === 'organization' && currentActive.value && currentActive.value.length > 0) {
701
+ fetchEmployeesByNode(currentActive.value[0], activeTab.value);
702
+ }
703
+ });
704
+
705
+ // 防抖函数
706
+ const debounce = (fn, delay) => {
707
+ let timer = null;
708
+ return function(...args) {
709
+ if (timer) clearTimeout(timer);
710
+ timer = setTimeout(() => {
711
+ fn.apply(this, args);
712
+ }, delay);
713
+ };
714
+ };
715
+
716
+ // 防抖处理过的搜索函数
717
+ const debouncedSearch = debounce((keyword) => {
718
+ if (keyword) {
719
+ const nodeId = currentActive.value && currentActive.value.length > 0 ? currentActive.value[0] : null;
720
+ const type = nodeId ? activeTab.value : null;
721
+ fetchEmployeesByNode(nodeId, type, keyword);
722
+ } else if (currentActive.value && currentActive.value.length > 0) {
723
+ // 如果搜索框清空,恢复显示当前选中节点的员工列表
724
+ fetchEmployeesByNode(currentActive.value[0], activeTab.value);
725
+ } else {
726
+ // 如果没有选中节点,清空员工列表
727
+ employeeList.value = [];
728
+ }
729
+ }, 300); // 300ms防抖
730
+
731
+ // 监听搜索文本变化,触发搜索
732
+ watch(searchText, (newValue) => {
733
+ debouncedSearch(newValue);
734
+ }, { immediate: false });
735
+
736
+ // 组件挂载时执行
737
+ onMounted(() => {
738
+ // 获取已选员工详情
739
+ fetchEmployeesByIds(props.modelValue);
740
+ });
741
+
742
+ // 处理搜索图标点击
743
+ const handleSearchClick = () => {
744
+ if (searchText.value) {
745
+ const nodeId = currentActive.value && currentActive.value.length > 0 ? currentActive.value[0] : null;
746
+ const type = nodeId ? activeTab.value : null;
747
+ fetchEmployeesByNode(nodeId, type, searchText.value);
748
+ }
749
+ };
750
+
751
+ // 处理回车键搜索
752
+ const handleSearchEnter = () => {
753
+ if (searchText.value) {
754
+ const nodeId = currentActive.value && currentActive.value.length > 0 ? currentActive.value[0] : null;
755
+ const type = nodeId ? activeTab.value : null;
756
+ fetchEmployeesByNode(nodeId, type, searchText.value);
757
+ }
758
+ };
759
+
760
+ // 清除搜索
761
+ const clearSearch = () => {
762
+ searchText.value = '';
763
+ if (currentActive.value && currentActive.value.length > 0) {
764
+ fetchEmployeesByNode(currentActive.value[0], activeTab.value);
765
+ } else {
766
+ // 如果没有选中节点,重置员工列表但保留选中状态
767
+ employeeList.value = employeeList.value.map(emp => ({
768
+ ...emp,
769
+ checked: tempSelectedEmployees.value.some(item => item.id === emp.id)
770
+ }));
771
+ }
772
+ };
773
+ </script>
774
+
775
+ <style scoped>
776
+ .ebiz-employee-selector {
777
+ width: 100%;
778
+ display: flex;
779
+ flex-direction: column;
780
+ }
781
+
782
+ /* 选择框展示区 */
783
+ .employee-selector-container {
784
+ min-height: 32px;
785
+ width: 100%;
786
+ border: 1px solid #dcdcdc;
787
+ border-radius: 3px;
788
+ padding: 4px 8px;
789
+ display: flex;
790
+ flex-wrap: wrap;
791
+ gap: 8px;
792
+ align-items: center;
793
+ }
794
+
795
+ .selected-items {
796
+ display: flex;
797
+ flex-wrap: wrap;
798
+ gap: 8px;
799
+ }
800
+
801
+ .selected-item {
802
+ display: flex;
803
+ align-items: center;
804
+ background-color: #f0f0f0;
805
+ border-radius: 3px;
806
+ padding: 2px 8px 2px 2px;
807
+ gap: 8px;
808
+ }
809
+
810
+ .item-info {
811
+ display: flex;
812
+ align-items: center;
813
+ gap: 4px;
814
+ }
815
+
816
+ .item-code {
817
+ color: #999;
818
+ font-size: 12px;
819
+ }
820
+
821
+ .item-name {
822
+ font-size: 14px;
823
+ }
824
+
825
+ .item-remove {
826
+ cursor: pointer;
827
+ color: #999;
828
+ font-size: 12px;
829
+ }
830
+
831
+ .item-remove:hover {
832
+ color: #E34D59;
833
+ }
834
+
835
+ /* 选择弹窗 */
836
+ .selector-dialog-content {
837
+ display: flex;
838
+ height: 500px;
839
+ }
840
+
841
+ .left-panel, .right-panel {
842
+ height: 100%;
843
+ overflow: hidden;
844
+ display: flex;
845
+ flex-direction: column;
846
+ }
847
+
848
+ .left-panel {
849
+ width: 40%;
850
+ border-right: 1px solid #dcdcdc;
851
+ padding-right: 16px;
852
+ }
853
+
854
+ .right-panel {
855
+ width: 60%;
856
+ padding-left: 16px;
857
+ }
858
+
859
+ .search-box {
860
+ margin-bottom: 16px;
861
+ }
862
+
863
+ .right-panel .search-box {
864
+ margin-top: 8px;
865
+ margin-bottom: 16px;
866
+ display: flex;
867
+ align-items: center;
868
+ gap: 8px;
869
+ }
870
+
871
+ .right-panel .search-box .t-input {
872
+ width: 100%;
873
+ border-radius: 4px;
874
+ }
875
+
876
+ .right-panel .search-box .t-input__suffix-icon {
877
+ cursor: pointer;
878
+ }
879
+
880
+ .right-panel .search-box .t-input__suffix-icon:hover {
881
+ color: var(--td-brand-color);
882
+ }
883
+
884
+ .selector-tabs {
885
+ margin-bottom: 16px;
886
+ }
887
+
888
+ .content-area {
889
+ flex: 1;
890
+ overflow: auto;
891
+ position: relative;
892
+ }
893
+
894
+ .loading-container {
895
+ position: absolute;
896
+ top: 0;
897
+ left: 0;
898
+ right: 0;
899
+ bottom: 0;
900
+ display: flex;
901
+ justify-content: center;
902
+ align-items: center;
903
+ background-color: rgba(255, 255, 255, 0.6);
904
+ z-index: 1;
905
+ }
906
+
907
+ .tab-content {
908
+ height: 100%;
909
+ overflow: auto;
910
+ }
911
+
912
+ .department-item {
913
+ cursor: pointer;
914
+ padding: 8px;
915
+ }
916
+
917
+ .department-item:hover {
918
+ background-color: #f5f5f5;
919
+ }
920
+
921
+ .employee-header {
922
+ display: flex;
923
+ justify-content: space-between;
924
+ align-items: center;
925
+ margin-bottom: 16px;
926
+ }
927
+
928
+ .employee-title {
929
+ font-weight: bold;
930
+ font-size: 16px;
931
+ display: flex;
932
+ align-items: center;
933
+ gap: 10px;
934
+ }
935
+
936
+ .sub-dept-option {
937
+ margin-left: 10px;
938
+ font-weight: normal;
939
+ font-size: 14px;
940
+ }
941
+
942
+ .employee-count {
943
+ display: flex;
944
+ align-items: center;
945
+ gap: 8px;
946
+ }
947
+
948
+ .count-info {
949
+ color: #999;
950
+ font-size: 14px;
951
+ }
952
+
953
+ .employee-list {
954
+ flex: 1;
955
+ overflow: auto;
956
+ display: flex;
957
+ flex-direction: column;
958
+ gap: 8px;
959
+ }
960
+
961
+ .employee-item {
962
+ display: flex;
963
+ align-items: center;
964
+ gap: 12px;
965
+ padding: 8px;
966
+ border-radius: 4px;
967
+ }
968
+
969
+ .employee-item:hover {
970
+ background-color: #f5f5f5;
971
+ }
972
+
973
+ .employee-avatar {
974
+ display: flex;
975
+ align-items: center;
976
+ }
977
+
978
+ .employee-info {
979
+ display: flex;
980
+ gap: 8px;
981
+ align-items: center;
982
+ }
983
+
984
+ .employee-code {
985
+ color: #999;
986
+ font-size: 12px;
987
+ }
988
+
989
+ .employee-name {
990
+ font-size: 14px;
991
+ }
992
+
993
+ .empty-data {
994
+ display: flex;
995
+ justify-content: center;
996
+ align-items: center;
997
+ height: 200px;
998
+ }
999
+
1000
+ .dialog-footer {
1001
+ display: flex;
1002
+ justify-content: space-between;
1003
+ align-items: center;
1004
+ padding: 16px 0;
1005
+ }
1006
+
1007
+ .selected-preview {
1008
+ color: #666;
1009
+ }
1010
+
1011
+ .dialog-actions {
1012
+ display: flex;
1013
+ gap: 8px;
1014
+ }
1015
+
1016
+ .selected-people-list {
1017
+ margin-top: 8px;
1018
+ display: flex;
1019
+ flex-wrap: wrap;
1020
+ gap: 8px;
1021
+ }
1022
+
1023
+ .selected-people-item {
1024
+ display: flex;
1025
+ align-items: center;
1026
+ background-color: #f0f0f0;
1027
+ border-radius: 3px;
1028
+ padding: 2px 8px 2px 2px;
1029
+ gap: 8px;
1030
+ }
1031
+
1032
+ .selected-people-item:hover {
1033
+ background-color: #e0e0e0;
1034
+ }
1035
+
1036
+ .selected-people-item .item-remove {
1037
+ cursor: pointer;
1038
+ color: #999;
1039
+ font-size: 12px;
1040
+ }
1041
+
1042
+ .selected-people-item .item-remove:hover {
1043
+ color: #E34D59;
1044
+ }
1046
1045
  </style>