npmapps 1.1.4 → 1.1.6

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 (293) hide show
  1. package/app/wujie-wk/dev.log +1979 -0
  2. package/app/wujie-wk/t.html +90 -0
  3. package/app/wujie-wk/wujie-react-child/README.md +126 -0
  4. package/app/wujie-wk/wujie-react-child/eslint.config.js +28 -0
  5. package/app/wujie-wk/wujie-react-child/index.html +13 -0
  6. package/app/wujie-wk/wujie-react-child/package-lock.json +4344 -0
  7. package/app/wujie-wk/wujie-react-child/package.json +32 -0
  8. package/app/wujie-wk/wujie-react-child/public/vite.svg +1 -0
  9. package/app/wujie-wk/wujie-react-child/src/App.css +0 -0
  10. package/app/wujie-wk/wujie-react-child/src/App.tsx +72 -0
  11. package/app/wujie-wk/wujie-react-child/src/assets/react.svg +1 -0
  12. package/app/wujie-wk/wujie-react-child/src/components/FeatureCards.css +63 -0
  13. package/app/wujie-wk/wujie-react-child/src/components/FeatureCards.tsx +112 -0
  14. package/app/wujie-wk/wujie-react-child/src/components/LightCard/index.tsx +36 -0
  15. package/app/wujie-wk/wujie-react-child/src/components/LightCard/style.css +20 -0
  16. package/app/wujie-wk/wujie-react-child/src/hooks/use3DCard.ts +53 -0
  17. package/app/wujie-wk/wujie-react-child/src/hooks/useLightCard.ts +141 -0
  18. package/app/wujie-wk/wujie-react-child/src/index.css +0 -0
  19. package/app/wujie-wk/wujie-react-child/src/main.tsx +8 -0
  20. package/app/wujie-wk/wujie-react-child/src/pages/ChildToParent/index.css +55 -0
  21. package/app/wujie-wk/wujie-react-child/src/pages/ChildToParent/index.tsx +88 -0
  22. package/app/wujie-wk/wujie-react-child/src/pages/Css.tsx +28 -0
  23. package/app/wujie-wk/wujie-react-child/src/pages/Home.tsx +72 -0
  24. package/app/wujie-wk/wujie-react-child/src/pages/ParentToChild.css +85 -0
  25. package/app/wujie-wk/wujie-react-child/src/pages/ParentToChild.tsx +119 -0
  26. package/app/wujie-wk/wujie-react-child/src/pages/RouterJump/index.css +61 -0
  27. package/app/wujie-wk/wujie-react-child/src/pages/RouterJump/index.tsx +87 -0
  28. package/app/wujie-wk/wujie-react-child/src/router/index.tsx +63 -0
  29. package/app/wujie-wk/wujie-react-child/src/types/wujie.d.ts +26 -0
  30. package/app/wujie-wk/wujie-react-child/src/vite-env.d.ts +1 -0
  31. package/app/wujie-wk/wujie-react-child/tsconfig.app.json +26 -0
  32. package/app/wujie-wk/wujie-react-child/tsconfig.json +7 -0
  33. package/app/wujie-wk/wujie-react-child/tsconfig.node.json +24 -0
  34. package/app/wujie-wk/wujie-react-child/vite.config.ts +10 -0
  35. package/app/wujie-wk/wujie-vue2-child/.eslintrc.js +19 -0
  36. package/app/wujie-wk/wujie-vue2-child/README.md +24 -0
  37. package/app/wujie-wk/wujie-vue2-child/babel.config.js +5 -0
  38. package/app/wujie-wk/wujie-vue2-child/docs/superpowers/plans/2026-05-29-quill-editor.md +836 -0
  39. package/app/wujie-wk/wujie-vue2-child/docs/superpowers/specs/2026-05-29-quill-editor-design.md +210 -0
  40. package/app/wujie-wk/wujie-vue2-child/jsconfig.json +19 -0
  41. package/app/wujie-wk/wujie-vue2-child/package-lock.json +21333 -0
  42. package/app/wujie-wk/wujie-vue2-child/package.json +63 -0
  43. package/app/wujie-wk/wujie-vue2-child/postcss.config.js +10 -0
  44. package/app/wujie-wk/wujie-vue2-child/public/favicon.ico +0 -0
  45. package/app/wujie-wk/wujie-vue2-child/public/index.html +17 -0
  46. package/app/wujie-wk/wujie-vue2-child/public/rili.jpg +0 -0
  47. package/app/wujie-wk/wujie-vue2-child/public//344/270/200/351/224/256/351/273/221/346/232/227.html +136 -0
  48. package/app/wujie-wk/wujie-vue2-child/src/App.vue +110 -0
  49. package/app/wujie-wk/wujie-vue2-child/src/assets/bpmn-camunda.jpg +0 -0
  50. package/app/wujie-wk/wujie-vue2-child/src/assets/css/diagram.less +17 -0
  51. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/Icon.less +31 -0
  52. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/app-codes.css +26 -0
  53. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/app.eot +0 -0
  54. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/app.svg +60 -0
  55. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/app.ttf +0 -0
  56. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/app.woff +0 -0
  57. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/app.woff2 +0 -0
  58. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/config.json +248 -0
  59. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/raw/align-bottom-tool.svg +30 -0
  60. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/raw/align-horizontal-center-tool.svg +85 -0
  61. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/raw/align-left-tool.svg +84 -0
  62. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/raw/align-right-tool.svg +80 -0
  63. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/raw/align-top-tool.svg +84 -0
  64. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/raw/align-vertical-center-tool.svg +89 -0
  65. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/raw/distribute-horizontally-tool.svg +95 -0
  66. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/raw/distribute-vertically-tool.svg +99 -0
  67. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/raw/set-color-tool.svg +111 -0
  68. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/symbols/align-bottom-tool.svg +30 -0
  69. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/symbols/align-horizontal-center-tool.svg +30 -0
  70. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/symbols/align-left-tool.svg +30 -0
  71. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/symbols/align-right-tool.svg +30 -0
  72. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/symbols/align-top-tool.svg +30 -0
  73. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/symbols/align-vertical-center-tool.svg +30 -0
  74. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/symbols/distribute-horizontally-tool.svg +30 -0
  75. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/symbols/distribute-vertically-tool.svg +30 -0
  76. package/app/wujie-wk/wujie-vue2-child/src/assets/icon/font/source/symbols/set-color-tool.svg +63 -0
  77. package/app/wujie-wk/wujie-vue2-child/src/assets/logo.png +0 -0
  78. package/app/wujie-wk/wujie-vue2-child/src/components/EllTable/README.md +70 -0
  79. package/app/wujie-wk/wujie-vue2-child/src/components/EllTable/article.md +184 -0
  80. package/app/wujie-wk/wujie-vue2-child/src/components/EllTable/index.js +213 -0
  81. package/app/wujie-wk/wujie-vue2-child/src/components/EventCalendar/CalendarSkeleton.vue +147 -0
  82. package/app/wujie-wk/wujie-vue2-child/src/components/EventCalendar/CodeBlock.vue +199 -0
  83. package/app/wujie-wk/wujie-vue2-child/src/components/EventCalendar/MonthSelect.vue +376 -0
  84. package/app/wujie-wk/wujie-vue2-child/src/components/EventCalendar/README.md +485 -0
  85. package/app/wujie-wk/wujie-vue2-child/src/components/EventCalendar/example.vue +1747 -0
  86. package/app/wujie-wk/wujie-vue2-child/src/components/EventCalendar/index.vue +2720 -0
  87. package/app/wujie-wk/wujie-vue2-child/src/components/EventCalendar/mockData.js +475 -0
  88. package/app/wujie-wk/wujie-vue2-child/src/components/EventCalendar/recruitmentAdapter.js +51 -0
  89. package/app/wujie-wk/wujie-vue2-child/src/components/EventCalendar/utils.js +202 -0
  90. package/app/wujie-wk/wujie-vue2-child/src/components/FormulaEditor/FunctionSelector.vue +123 -0
  91. package/app/wujie-wk/wujie-vue2-child/src/components/FormulaEditor/OperatorSelector.vue +184 -0
  92. package/app/wujie-wk/wujie-vue2-child/src/components/FormulaEditor/ParameterSelector.vue +123 -0
  93. package/app/wujie-wk/wujie-vue2-child/src/components/FormulaEditor/api.js +69 -0
  94. package/app/wujie-wk/wujie-vue2-child/src/components/FormulaEditor/index.vue +435 -0
  95. package/app/wujie-wk/wujie-vue2-child/src/components/HelloWorld.vue +58 -0
  96. package/app/wujie-wk/wujie-vue2-child/src/components/PageHeader/index.vue +158 -0
  97. package/app/wujie-wk/wujie-vue2-child/src/components/Splitter/README.md +144 -0
  98. package/app/wujie-wk/wujie-vue2-child/src/components/Splitter/example.vue +84 -0
  99. package/app/wujie-wk/wujie-vue2-child/src/components/Splitter/index.vue +203 -0
  100. package/app/wujie-wk/wujie-vue2-child/src/components/diagram/ToolBar.vue +357 -0
  101. package/app/wujie-wk/wujie-vue2-child/src/components/diagram/customTranslate/customTranslate.js +12 -0
  102. package/app/wujie-wk/wujie-vue2-child/src/components/diagram/customTranslate/translationsGerman.js +241 -0
  103. package/app/wujie-wk/wujie-vue2-child/src/components/diagram/index.vue +261 -0
  104. package/app/wujie-wk/wujie-vue2-child/src/components/diagram/xmlData.js +29 -0
  105. package/app/wujie-wk/wujie-vue2-child/src/directives/filldown.js +155 -0
  106. package/app/wujie-wk/wujie-vue2-child/src/directives/filldownTable.js +291 -0
  107. package/app/wujie-wk/wujie-vue2-child/src/main.js +40 -0
  108. package/app/wujie-wk/wujie-vue2-child/src/router/index.js +72 -0
  109. package/app/wujie-wk/wujie-vue2-child/src/store/index.js +23 -0
  110. package/app/wujie-wk/wujie-vue2-child/src/utils/winBox.js +23 -0
  111. package/app/wujie-wk/wujie-vue2-child/src/views/Extend/A.vue +12 -0
  112. package/app/wujie-wk/wujie-vue2-child/src/views/Extend/B.vue +10 -0
  113. package/app/wujie-wk/wujie-vue2-child/src/views/Extend/MagicalComponentsForELFormItem.vue +78 -0
  114. package/app/wujie-wk/wujie-vue2-child/src/views/Extend/index.vue +59 -0
  115. package/app/wujie-wk/wujie-vue2-child/src/views/Extend/tableMouseHorizontalWheel.vue +184 -0
  116. package/app/wujie-wk/wujie-vue2-child/src/views/Home.vue +27 -0
  117. package/app/wujie-wk/wujie-vue2-child/src/views/RouterJump.vue +145 -0
  118. package/app/wujie-wk/wujie-vue2-child/src/views/calendar/index.vue +19 -0
  119. package/app/wujie-wk/wujie-vue2-child/src/views/css.vue +57 -0
  120. package/app/wujie-wk/wujie-vue2-child/src/views/cssComponents/EllipsisText.vue +73 -0
  121. package/app/wujie-wk/wujie-vue2-child/src/views/cssComponents/HoverCard.vue +69 -0
  122. package/app/wujie-wk/wujie-vue2-child/src/views/cssComponents/TableHover.vue +130 -0
  123. package/app/wujie-wk/wujie-vue2-child/src/views/cssComponents/inputSlo.vue +42 -0
  124. package/app/wujie-wk/wujie-vue2-child/src/views/cssComponents/tableFixed.vue +148 -0
  125. package/app/wujie-wk/wujie-vue2-child/src/views/echarts/echart-dome.vue +73 -0
  126. package/app/wujie-wk/wujie-vue2-child/src/views/echarts/index.vue +118 -0
  127. package/app/wujie-wk/wujie-vue2-child/src/views/echarts/pei3d.vue +658 -0
  128. package/app/wujie-wk/wujie-vue2-child/src/views/element/bpmn/index.vue +15 -0
  129. package/app/wujie-wk/wujie-vue2-child/src/views/element/components/attendanceCycle/index.vue +131 -0
  130. package/app/wujie-wk/wujie-vue2-child/src/views/element/components/attendanceGroup/index.vue +147 -0
  131. package/app/wujie-wk/wujie-vue2-child/src/views/element/components/attendancePersonnel/index.vue +158 -0
  132. package/app/wujie-wk/wujie-vue2-child/src/views/element/components/companyCalendar/index.vue +147 -0
  133. package/app/wujie-wk/wujie-vue2-child/src/views/element/components/shift/index.vue +147 -0
  134. package/app/wujie-wk/wujie-vue2-child/src/views/element/components/shiftRotationSystem/index.vue +147 -0
  135. package/app/wujie-wk/wujie-vue2-child/src/views/element/elTableJsx/columnManagement.vue +340 -0
  136. package/app/wujie-wk/wujie-vue2-child/src/views/element/elTableJsx/dialogInput.vue +71 -0
  137. package/app/wujie-wk/wujie-vue2-child/src/views/element/elTableJsx/elTableJsx.vue +1826 -0
  138. package/app/wujie-wk/wujie-vue2-child/src/views/element/elTableJsx/formTable.vue +595 -0
  139. package/app/wujie-wk/wujie-vue2-child/src/views/element/elTableJsx/index.vue +29 -0
  140. package/app/wujie-wk/wujie-vue2-child/src/views/element/elTableJsx/simpleTable.vue +189 -0
  141. package/app/wujie-wk/wujie-vue2-child/src/views/element/elTableJsx.zip +0 -0
  142. package/app/wujie-wk/wujie-vue2-child/src/views/element/index.vue +39 -0
  143. package/app/wujie-wk/wujie-vue2-child/src/views/element/quillEditor/README.md +163 -0
  144. package/app/wujie-wk/wujie-vue2-child/src/views/element/quillEditor/example.vue +307 -0
  145. package/app/wujie-wk/wujie-vue2-child/src/views/element/quillEditor/index.vue +409 -0
  146. package/app/wujie-wk/wujie-vue2-child/src/views/element/quillEditor/toolbar.js +122 -0
  147. package/app/wujie-wk/wujie-vue2-child/vue.config.js +15 -0
  148. package/app/wujie-wk/wujie-vue3-child/.claude/settings.local.json +8 -0
  149. package/app/wujie-wk/wujie-vue3-child/.vscode/extensions.json +3 -0
  150. package/app/wujie-wk/wujie-vue3-child/PROJECT_MEMORY.md +427 -0
  151. package/app/wujie-wk/wujie-vue3-child/README.md +5 -0
  152. package/app/wujie-wk/wujie-vue3-child/index.html +13 -0
  153. package/app/wujie-wk/wujie-vue3-child/package-lock.json +5744 -0
  154. package/app/wujie-wk/wujie-vue3-child/package.json +28 -0
  155. package/app/wujie-wk/wujie-vue3-child/public/vite.svg +1 -0
  156. package/app/wujie-wk/wujie-vue3-child/src/App.vue +130 -0
  157. package/app/wujie-wk/wujie-vue3-child/src/assets/vue.svg +1 -0
  158. package/app/wujie-wk/wujie-vue3-child/src/components/HelloWorld.vue +43 -0
  159. package/app/wujie-wk/wujie-vue3-child/src/components/SmartAnchorTabs/index.jsx +224 -0
  160. package/app/wujie-wk/wujie-vue3-child/src/components/SmartAnchorTabs/style.css +154 -0
  161. package/app/wujie-wk/wujie-vue3-child/src/components/tags-view.vue +193 -0
  162. package/app/wujie-wk/wujie-vue3-child/src/components/tags-view1.vue +131 -0
  163. package/app/wujie-wk/wujie-vue3-child/src/directives/aiLoading.js +182 -0
  164. package/app/wujie-wk/wujie-vue3-child/src/hooks/useClickOutside.js +11 -0
  165. package/app/wujie-wk/wujie-vue3-child/src/hooks/useTableDragSort.js +28 -0
  166. package/app/wujie-wk/wujie-vue3-child/src/main.js +18 -0
  167. package/app/wujie-wk/wujie-vue3-child/src/router/index.js +104 -0
  168. package/app/wujie-wk/wujie-vue3-child/src/store/tagsViewStroe.js +34 -0
  169. package/app/wujie-wk/wujie-vue3-child/src/style.css +171 -0
  170. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/collapseExpand/index.jsx +108 -0
  171. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/collapseExpand/index.module.scss +97 -0
  172. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/README.md +836 -0
  173. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/REFLEX_EXAMPLES.md +728 -0
  174. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentPersonnelSelector.jsx +687 -0
  175. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentPersonnelSelector.module.scss +560 -0
  176. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentSelector.jsx +570 -0
  177. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentSelector.module.scss +330 -0
  178. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentSelectorV2.jsx +378 -0
  179. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentSelectorV2.module.scss +228 -0
  180. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/OptionsSelector.jsx +399 -0
  181. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/OptionsSelector.module.scss +252 -0
  182. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/PersonnelSelector.jsx +585 -0
  183. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/PersonnelSelector.module.scss +331 -0
  184. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/PopoverSelector.jsx +392 -0
  185. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/PopoverSelector.module.scss +39 -0
  186. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/README.md +248 -0
  187. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/SelectorTrigger.jsx +194 -0
  188. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/index.jsx +1459 -0
  189. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/mockData.js +301 -0
  190. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/dialogueSegment/index.jsx +182 -0
  191. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/dialogueSegment/index.module.scss +28 -0
  192. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/index.jsx +375 -0
  193. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/ChartsPanel/index.jsx +121 -0
  194. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/ChartsPanel/index.module.scss +76 -0
  195. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/DonutChart/index.jsx +104 -0
  196. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/PracticeTable/index.jsx +75 -0
  197. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/PracticeTable/index.module.scss +12 -0
  198. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankBarChart/index.jsx +62 -0
  199. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankBarChart/index.module.scss +43 -0
  200. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankingGroup/index.jsx +29 -0
  201. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankingGroup/index.module.scss +5 -0
  202. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankingList/index.jsx +58 -0
  203. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankingList/index.module.scss +85 -0
  204. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/ScriptStatsPanel/index.jsx +92 -0
  205. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/ScriptStatsPanel/index.module.scss +56 -0
  206. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/StatCardsRow/index.jsx +40 -0
  207. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/StatCardsRow/index.module.scss +53 -0
  208. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/echarts/EchartsDonut.jsx +106 -0
  209. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/echarts/EchartsRankBar.jsx +132 -0
  210. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/index.jsx +176 -0
  211. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/practiceStatus/index.module.scss +96 -0
  212. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/CoachReport/index.jsx +162 -0
  213. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/CoachReport/index.module.scss +16 -0
  214. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ComprehensiveEvaluation/index.jsx +29 -0
  215. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ComprehensiveEvaluation/index.module.scss +25 -0
  216. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DialogueBubble/index.jsx +106 -0
  217. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DialogueBubble/index.module.scss +164 -0
  218. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DialogueRecord/index.jsx +182 -0
  219. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DialogueRecord/index.module.scss +203 -0
  220. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DimensionDetail/index.jsx +145 -0
  221. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DimensionDetail/index.module.scss +126 -0
  222. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DimensionScores/index.jsx +67 -0
  223. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DimensionScores/index.module.scss +105 -0
  224. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ReportHeader/index.jsx +81 -0
  225. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ReportHeader/index.module.scss +47 -0
  226. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/RoleInfo/index.jsx +64 -0
  227. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/RoleInfo/index.module.scss +85 -0
  228. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ScoreBadge/index.jsx +39 -0
  229. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ScoreBadge/index.module.scss +44 -0
  230. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/SubDimensionItem/index.jsx +83 -0
  231. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/components/SubDimensionItem/index.module.scss +101 -0
  232. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/index.jsx +50 -0
  233. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/reportDetail/index.module.scss +25 -0
  234. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/scriptTable/index.jsx +196 -0
  235. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/scriptTable/index.module.scss +41 -0
  236. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/scriptTable/inputColumn/index.jsx +183 -0
  237. package/app/wujie-wk/wujie-vue3-child/src/views/aiCoach/scriptTable/inputColumn/index.module.scss +115 -0
  238. package/app/wujie-wk/wujie-vue3-child/src/views/child-to-parent.vue +117 -0
  239. package/app/wujie-wk/wujie-vue3-child/src/views/home.vue +53 -0
  240. package/app/wujie-wk/wujie-vue3-child/src/views/jsx/btnSelect/btnSelect.vue +169 -0
  241. package/app/wujie-wk/wujie-vue3-child/src/views/jsx/btnSelect/index.vue +69 -0
  242. package/app/wujie-wk/wujie-vue3-child/src/views/jsx/com.vue +44 -0
  243. package/app/wujie-wk/wujie-vue3-child/src/views/jsx/dialog.jsx +66 -0
  244. package/app/wujie-wk/wujie-vue3-child/src/views/jsx/index.vue +72 -0
  245. package/app/wujie-wk/wujie-vue3-child/src/views/jsx/props.vue +33 -0
  246. package/app/wujie-wk/wujie-vue3-child/src/views/parent-to-child.vue +225 -0
  247. package/app/wujie-wk/wujie-vue3-child/src/views/phone-code.vue +318 -0
  248. package/app/wujie-wk/wujie-vue3-child/src/views/router-jump.vue +123 -0
  249. package/app/wujie-wk/wujie-vue3-child/src/views/test.vue +192 -0
  250. package/app/wujie-wk/wujie-vue3-child/vite.config.js +15 -0
  251. package/app/wujie-wk/wujie-vue3-child copy/.vscode/extensions.json +3 -0
  252. package/app/wujie-wk/wujie-vue3-child copy/README.md +5 -0
  253. package/app/wujie-wk/wujie-vue3-child copy/index.html +13 -0
  254. package/app/wujie-wk/wujie-vue3-child copy/package-lock.json +4617 -0
  255. package/app/wujie-wk/wujie-vue3-child copy/package.json +22 -0
  256. package/app/wujie-wk/wujie-vue3-child copy/public/vite.svg +1 -0
  257. package/app/wujie-wk/wujie-vue3-child copy/src/App.vue +124 -0
  258. package/app/wujie-wk/wujie-vue3-child copy/src/assets/vue.svg +1 -0
  259. package/app/wujie-wk/wujie-vue3-child copy/src/components/HelloWorld.vue +43 -0
  260. package/app/wujie-wk/wujie-vue3-child copy/src/main.js +12 -0
  261. package/app/wujie-wk/wujie-vue3-child copy/src/router/index.js +84 -0
  262. package/app/wujie-wk/wujie-vue3-child copy/src/style.css +4 -0
  263. package/app/wujie-wk/wujie-vue3-child copy/src/views/child-to-parent.vue +117 -0
  264. package/app/wujie-wk/wujie-vue3-child copy/src/views/home.vue +53 -0
  265. package/app/wujie-wk/wujie-vue3-child copy/src/views/parent-to-child.vue +225 -0
  266. package/app/wujie-wk/wujie-vue3-child copy/src/views/phone-code.vue +318 -0
  267. package/app/wujie-wk/wujie-vue3-child copy/src/views/router-jump.vue +115 -0
  268. package/app/wujie-wk/wujie-vue3-child copy/src/views/test.vue +192 -0
  269. package/app/wujie-wk/wujie-vue3-child copy/vite.config.js +10 -0
  270. package/app/wujie-wk/wujie-vue3-main/.vscode/extensions.json +3 -0
  271. package/app/wujie-wk/wujie-vue3-main/README.md +154 -0
  272. package/app/wujie-wk/wujie-vue3-main/index.html +13 -0
  273. package/app/wujie-wk/wujie-vue3-main/package-lock.json +4736 -0
  274. package/app/wujie-wk/wujie-vue3-main/package.json +25 -0
  275. package/app/wujie-wk/wujie-vue3-main/public/vite.svg +1 -0
  276. package/app/wujie-wk/wujie-vue3-main/src/App.vue +879 -0
  277. package/app/wujie-wk/wujie-vue3-main/src/assets/vue.svg +1 -0
  278. package/app/wujie-wk/wujie-vue3-main/src/components/HelloWorld.vue +43 -0
  279. package/app/wujie-wk/wujie-vue3-main/src/components/WujieReact/index.vue +20 -0
  280. package/app/wujie-wk/wujie-vue3-main/src/components/WujieVue2/index.vue +8 -0
  281. package/app/wujie-wk/wujie-vue3-main/src/components/WujieVue3/index.vue +8 -0
  282. package/app/wujie-wk/wujie-vue3-main/src/components/WujieVue3Copy/index.vue +8 -0
  283. package/app/wujie-wk/wujie-vue3-main/src/main.js +23 -0
  284. package/app/wujie-wk/wujie-vue3-main/src/router/index.js +88 -0
  285. package/app/wujie-wk/wujie-vue3-main/src/store/useMicroAppStore.js +66 -0
  286. package/app/wujie-wk/wujie-vue3-main/src/style.css +3 -0
  287. package/app/wujie-wk/wujie-vue3-main/src/views/home.vue +103 -0
  288. package/app/wujie-wk/wujie-vue3-main/src/views/router-jump.vue +159 -0
  289. package/app/wujie-wk/wujie-vue3-main/src/views/test.vue +125 -0
  290. package/app/wujie-wk/wujie-vue3-main/src/views/vue3-child-msg.vue +108 -0
  291. package/app/wujie-wk/wujie-vue3-main/vite.config.js +12 -0
  292. package/package.json +1 -1
  293. package/app/check-import-case.js +0 -344
@@ -0,0 +1,331 @@
1
+ // 人员选择器样式
2
+ .personnelSelector {
3
+ position: relative;
4
+ width: 100%;
5
+ }
6
+
7
+ // 自定义输入框
8
+ .customInput {
9
+ display: flex;
10
+ align-items: center;
11
+ width: 100%;
12
+ min-height: 32px;
13
+ padding: 1px 11px;
14
+ background: #fff;
15
+ border: 1px solid #dcdfe6;
16
+ border-radius: 4px;
17
+ cursor: pointer;
18
+ transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
19
+ outline: none;
20
+ box-sizing: border-box;
21
+
22
+ &:hover {
23
+ border-color: #c0c4cc;
24
+ }
25
+
26
+ &.focused {
27
+ border-color: #409eff;
28
+ }
29
+
30
+ &.disabled {
31
+ background-color: #f5f7fa;
32
+ border-color: #e4e7ed;
33
+ color: #c0c4cc;
34
+ cursor: not-allowed;
35
+ }
36
+ }
37
+
38
+ // 输入框内容区域
39
+ .inputContent {
40
+ flex: 1;
41
+ display: flex;
42
+ align-items: center;
43
+ min-width: 0;
44
+ min-height: 30px;
45
+ padding: 2px 0;
46
+ }
47
+
48
+ // 占位符
49
+ .placeholder {
50
+ color: #c0c4cc;
51
+ font-size: 14px;
52
+ }
53
+
54
+ // 前置标签
55
+ .label {
56
+ color: #606266;
57
+ font-size: 14px;
58
+ margin-right: 4px;
59
+ flex-shrink: 0;
60
+ }
61
+
62
+ // 单选文本
63
+ .text {
64
+ color: #606266;
65
+ font-size: 14px;
66
+ overflow: hidden;
67
+ text-overflow: ellipsis;
68
+ white-space: nowrap;
69
+ }
70
+
71
+ // 标签容器
72
+ .tagsWrapper {
73
+ display: flex;
74
+ align-items: center;
75
+ flex-wrap: wrap;
76
+ gap: 4px;
77
+ }
78
+
79
+ // 标签
80
+ .tag {
81
+ margin: 0;
82
+ max-width: 100%;
83
+
84
+ :global(.el-tag__content) {
85
+ overflow: hidden;
86
+ text-overflow: ellipsis;
87
+ white-space: nowrap;
88
+ }
89
+ }
90
+
91
+ // 按钮模式包装器
92
+ .buttonWrapper {
93
+ // width: 100%;
94
+ }
95
+
96
+ // 按钮内部容器
97
+ .buttonInner {
98
+ display: flex;
99
+ align-items: center;
100
+ justify-content: space-between;
101
+ width: 100%;
102
+ gap: 8px;
103
+ }
104
+
105
+ // 按钮内容区域
106
+ .buttonContent {
107
+ flex: 1;
108
+ display: flex;
109
+ align-items: center;
110
+ min-width: 0;
111
+ text-align: left;
112
+ overflow: hidden;
113
+ }
114
+
115
+ // 按钮文字包装器(用于显示文字+徽章)
116
+ .buttonTextWrapper {
117
+ display: flex;
118
+ align-items: center;
119
+ gap: 8px;
120
+ }
121
+
122
+ // 数量徽章(圆圈显示 +N)
123
+ .countBadge {
124
+ display: inline-flex;
125
+ align-items: center;
126
+ justify-content: center;
127
+ min-width: 20px;
128
+ height: 20px;
129
+ padding: 0 4px;
130
+ background-color: #ecf5ff;
131
+ color: #409eff;
132
+ font-size: 12px;
133
+ font-weight: 500;
134
+ border-radius: 10px;
135
+ white-space: nowrap;
136
+ flex-shrink: 0;
137
+ }
138
+
139
+ // 右侧图标区域
140
+ .suffixIcons {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 4px;
144
+ margin-left: 8px;
145
+ flex-shrink: 0;
146
+ }
147
+
148
+ // 清除图标
149
+ .clearIcon {
150
+ font-size: 14px;
151
+ color: #c0c4cc;
152
+ cursor: pointer;
153
+ transition: color 0.2s;
154
+
155
+ &:hover {
156
+ color: #909399;
157
+ }
158
+ }
159
+
160
+ // 下拉箭头图标
161
+ .arrowIcon {
162
+ font-size: 14px;
163
+ color: #c0c4cc;
164
+ transition: transform 0.3s;
165
+
166
+ &.reverse {
167
+ transform: rotate(180deg);
168
+ }
169
+ }
170
+
171
+ .disabled {
172
+ .clearIcon,
173
+ .arrowIcon {
174
+ cursor: not-allowed;
175
+ }
176
+ }
177
+
178
+ // 下拉框容器
179
+ .dropdown {
180
+ position: fixed;
181
+ background: #fff;
182
+ border: 1px solid #e4e7ed;
183
+ border-radius: 4px;
184
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
185
+ z-index: 2000;
186
+ display: flex;
187
+ flex-direction: column;
188
+ overflow: hidden;
189
+ }
190
+
191
+ // 悬浮窗内容
192
+ .dropdownContent {
193
+ display: flex;
194
+ flex-direction: column;
195
+ height: 100%;
196
+ max-height: inherit; // 继承父容器的 maxHeight
197
+ overflow: hidden; // 防止内容溢出到悬浮窗外
198
+ }
199
+
200
+ // 搜索框区域
201
+ .searchBox {
202
+ padding: 8px;
203
+ border-bottom: 1px solid #e4e7ed;
204
+ background: #fff;
205
+ }
206
+
207
+ // 列表容器
208
+ .listWrapper {
209
+ flex: 1;
210
+ overflow-y: auto;
211
+
212
+ // 自定义滚动条样式
213
+ &::-webkit-scrollbar {
214
+ width: 6px;
215
+ }
216
+
217
+ &::-webkit-scrollbar-track {
218
+ background: #f1f1f1;
219
+ border-radius: 3px;
220
+ }
221
+
222
+ &::-webkit-scrollbar-thumb {
223
+ background: #c1c1c1;
224
+ border-radius: 3px;
225
+
226
+ &:hover {
227
+ background: #a8a8a8;
228
+ }
229
+ }
230
+ }
231
+
232
+ // 人员列表
233
+ .personnelList {
234
+ padding: 4px 0;
235
+ }
236
+
237
+ // 人员列表项
238
+ .personnelItem {
239
+ display: flex;
240
+ align-items: center;
241
+ padding: 8px 12px;
242
+ cursor: pointer;
243
+ transition: background-color 0.2s;
244
+
245
+ &:hover {
246
+ background-color: #f5f7fa;
247
+ }
248
+
249
+ &.selected {
250
+ background-color: #ecf5ff;
251
+
252
+ .personName {
253
+ color: #409eff;
254
+ font-weight: 500;
255
+ }
256
+ }
257
+ }
258
+
259
+ // 复选框
260
+ .checkbox {
261
+ margin-right: 8px;
262
+ pointer-events: none;
263
+ }
264
+
265
+ // 人员信息
266
+ .personInfo {
267
+ flex: 1;
268
+ min-width: 0;
269
+ }
270
+
271
+ // 人员姓名
272
+ .personName {
273
+ font-size: 14px;
274
+ color: #606266;
275
+ margin-bottom: 4px;
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ white-space: nowrap;
279
+ }
280
+
281
+ // 人员元数据
282
+ .personMeta {
283
+ display: flex;
284
+ align-items: center;
285
+ font-size: 12px;
286
+ color: #909399;
287
+ }
288
+
289
+ // 职位
290
+ .position {
291
+ overflow: hidden;
292
+ text-overflow: ellipsis;
293
+ white-space: nowrap;
294
+ }
295
+
296
+ // 分隔符
297
+ .divider {
298
+ margin: 0 6px;
299
+ color: #dcdfe6;
300
+ }
301
+
302
+ // 电话
303
+ .phone {
304
+ overflow: hidden;
305
+ text-overflow: ellipsis;
306
+ white-space: nowrap;
307
+ }
308
+
309
+ // 空状态
310
+ .empty {
311
+ padding: 40px 16px;
312
+ text-align: center;
313
+ color: #909399;
314
+ font-size: 14px;
315
+ }
316
+
317
+ // 加载状态
318
+ .loading {
319
+ display: flex;
320
+ flex-direction: column;
321
+ align-items: center;
322
+ justify-content: center;
323
+ padding: 40px 16px;
324
+ color: #909399;
325
+ font-size: 14px;
326
+
327
+ .el-icon {
328
+ font-size: 24px;
329
+ margin-bottom: 8px;
330
+ }
331
+ }
@@ -0,0 +1,392 @@
1
+ import { defineComponent, ref, onMounted, onBeforeUnmount, nextTick } from 'vue'
2
+ import styles from './PopoverSelector.module.scss'
3
+
4
+ /**
5
+ * 通用悬浮窗选择器组件
6
+ * @component PopoverSelector
7
+ * @description 提供触发器和悬浮窗两个插槽,实现解耦的选择器组件
8
+ *
9
+ * @example
10
+ * <PopoverSelector width={400} maxHeight={500}>
11
+ * {{
12
+ * trigger: ({ open, visible }) => (
13
+ * <el-button onClick={open}>选择部门</el-button>
14
+ * ),
15
+ * default: ({ close }) => (
16
+ * <div>悬浮窗内容</div>
17
+ * )
18
+ * }}
19
+ * </PopoverSelector>
20
+ */
21
+ export default defineComponent({
22
+ name: 'PopoverSelector',
23
+
24
+ props: {
25
+ /**
26
+ * 悬浮窗宽度
27
+ * @type {number|string}
28
+ */
29
+ width: {
30
+ type: [Number, String],
31
+ default: 400,
32
+ },
33
+ /**
34
+ * 悬浮窗高度(不设置则自适应)
35
+ * @type {number|string}
36
+ */
37
+ height: {
38
+ type: [Number, String],
39
+ default: null,
40
+ },
41
+ /**
42
+ * 悬浮窗最大高度
43
+ * @type {number}
44
+ */
45
+ maxHeight: {
46
+ type: Number,
47
+ default: 400,
48
+ },
49
+ /**
50
+ * 悬浮窗自定义 class
51
+ * @type {string|Array|Object}
52
+ */
53
+ dropdownClass: {
54
+ type: [String, Array, Object],
55
+ default: '',
56
+ },
57
+ /**
58
+ * 悬浮窗自定义 style
59
+ * @type {Object}
60
+ */
61
+ dropdownStyle: {
62
+ type: Object,
63
+ default: () => ({}),
64
+ },
65
+ /**
66
+ * 是否禁用
67
+ * @type {boolean}
68
+ */
69
+ disabled: {
70
+ type: Boolean,
71
+ default: false,
72
+ },
73
+ /**
74
+ * 悬浮窗位置:auto 自动 | top 上方 | bottom 下方
75
+ * @type {string}
76
+ */
77
+ placement: {
78
+ type: String,
79
+ default: 'auto',
80
+ validator: (value) => ['auto', 'top', 'bottom'].includes(value),
81
+ },
82
+ /**
83
+ * 悬浮窗与触发器的间距
84
+ * @type {number}
85
+ */
86
+ offset: {
87
+ type: Number,
88
+ default: 4,
89
+ },
90
+ /**
91
+ * 是否显示动画
92
+ * @type {boolean}
93
+ */
94
+ animated: {
95
+ type: Boolean,
96
+ default: true,
97
+ },
98
+ /**
99
+ * 触发方式:click 点击 | hover 悬浮
100
+ * @type {string}
101
+ */
102
+ triggerEvent: {
103
+ type: String,
104
+ default: 'click',
105
+ validator: (value) => ['click', 'hover'].includes(value),
106
+ },
107
+ /**
108
+ * hover 触发时的延迟(毫秒)
109
+ * @type {number}
110
+ */
111
+ hoverDelay: {
112
+ type: Number,
113
+ default: 200,
114
+ },
115
+ },
116
+
117
+ emits: ['open', 'close', 'update:visible'],
118
+
119
+ setup(props, { emit, slots }) {
120
+ // 是否显示悬浮窗
121
+ const visible = ref(false)
122
+
123
+ // 触发器 ref
124
+ const triggerRef = ref(null)
125
+
126
+ // 悬浮窗 ref
127
+ const dropdownRef = ref(null)
128
+
129
+ // 悬浮窗动态样式
130
+ const computedDropdownStyle = ref({})
131
+
132
+ // hover 延迟定时器
133
+ let hoverTimer = null
134
+
135
+ /**
136
+ * 计算悬浮窗位置
137
+ */
138
+ const calculatePosition = () => {
139
+ if (!triggerRef.value || !dropdownRef.value) return
140
+
141
+ // 获取真正的 DOM 元素(处理 el-button 等组件实例)
142
+ const triggerEl = triggerRef.value.$el || triggerRef.value
143
+ const rect = triggerEl.getBoundingClientRect()
144
+
145
+ // 悬浮窗尺寸
146
+ const dropdownWidth = typeof props.width === 'number' ? props.width : parseInt(props.width)
147
+ const dropdownHeight = props.height
148
+ ? (typeof props.height === 'number' ? props.height : parseInt(props.height))
149
+ : null
150
+
151
+ // 计算可用空间
152
+ const spaceBelow = window.innerHeight - rect.bottom
153
+ const spaceAbove = rect.top
154
+
155
+ // 判断显示位置
156
+ let showAbove = false
157
+ if (props.placement === 'top') {
158
+ showAbove = true
159
+ } else if (props.placement === 'bottom') {
160
+ showAbove = false
161
+ } else {
162
+ // auto 模式:根据空间自动判断
163
+ showAbove = spaceBelow < props.maxHeight && spaceAbove > spaceBelow
164
+ }
165
+
166
+ // 基础样式
167
+ const baseStyle = {
168
+ position: 'fixed',
169
+ left: `${rect.left}px`,
170
+ width: `${dropdownWidth}px`,
171
+ }
172
+
173
+ // 根据位置计算样式
174
+ if (showAbove) {
175
+ // 显示在上方
176
+ const availableHeight = Math.min(props.maxHeight, spaceAbove - props.offset)
177
+ computedDropdownStyle.value = {
178
+ ...baseStyle,
179
+ bottom: `${window.innerHeight - rect.top + props.offset}px`,
180
+ maxHeight: dropdownHeight ? 'none' : `${availableHeight}px`,
181
+ height: dropdownHeight ? `${Math.min(dropdownHeight, availableHeight)}px` : 'auto',
182
+ }
183
+ } else {
184
+ // 显示在下方
185
+ const availableHeight = Math.min(props.maxHeight, spaceBelow - props.offset)
186
+ computedDropdownStyle.value = {
187
+ ...baseStyle,
188
+ top: `${rect.bottom + props.offset}px`,
189
+ maxHeight: dropdownHeight ? 'none' : `${availableHeight}px`,
190
+ height: dropdownHeight ? `${Math.min(dropdownHeight, availableHeight)}px` : 'auto',
191
+ }
192
+ }
193
+
194
+ // 合并用户自定义样式
195
+ computedDropdownStyle.value = {
196
+ ...computedDropdownStyle.value,
197
+ ...props.dropdownStyle,
198
+ }
199
+ }
200
+
201
+ /**
202
+ * 打开悬浮窗
203
+ */
204
+ const open = async () => {
205
+ if (props.disabled) return
206
+
207
+ visible.value = true
208
+ emit('update:visible', true)
209
+ emit('open')
210
+
211
+ // 等待 DOM 更新后计算位置
212
+ await nextTick()
213
+ calculatePosition()
214
+ }
215
+
216
+ /**
217
+ * 关闭悬浮窗
218
+ */
219
+ const close = () => {
220
+ visible.value = false
221
+ emit('update:visible', false)
222
+ emit('close')
223
+ }
224
+
225
+ /**
226
+ * 切换悬浮窗
227
+ */
228
+ const toggle = () => {
229
+ if (visible.value) {
230
+ close()
231
+ } else {
232
+ open()
233
+ }
234
+ }
235
+
236
+ /**
237
+ * 处理 hover 进入
238
+ */
239
+ const handleMouseEnter = () => {
240
+ if (props.triggerEvent !== 'hover' || props.disabled) return
241
+
242
+ // 清除之前的定时器
243
+ if (hoverTimer) {
244
+ clearTimeout(hoverTimer)
245
+ }
246
+
247
+ // 延迟打开
248
+ hoverTimer = setTimeout(() => {
249
+ open()
250
+ }, props.hoverDelay)
251
+ }
252
+
253
+ /**
254
+ * 处理 hover 离开
255
+ */
256
+ const handleMouseLeave = () => {
257
+ if (props.triggerEvent !== 'hover') return
258
+
259
+ // 清除定时器
260
+ if (hoverTimer) {
261
+ clearTimeout(hoverTimer)
262
+ }
263
+
264
+ // 延迟关闭
265
+ hoverTimer = setTimeout(() => {
266
+ close()
267
+ }, props.hoverDelay)
268
+ }
269
+
270
+ /**
271
+ * 取消关闭(鼠标进入悬浮窗时)
272
+ */
273
+ const cancelClose = () => {
274
+ if (hoverTimer) {
275
+ clearTimeout(hoverTimer)
276
+ }
277
+ }
278
+
279
+ /**
280
+ * 点击外部关闭
281
+ */
282
+ const handleClickOutside = (e) => {
283
+ if (!visible.value) return
284
+
285
+ const triggerEl = triggerRef.value?.$el || triggerRef.value
286
+ const dropdownEl = dropdownRef.value
287
+
288
+ if (
289
+ triggerEl &&
290
+ dropdownEl &&
291
+ !triggerEl.contains(e.target) &&
292
+ !dropdownEl.contains(e.target)
293
+ ) {
294
+ close()
295
+ }
296
+ }
297
+
298
+ /**
299
+ * 窗口大小改变时重新计算位置
300
+ */
301
+ const handleResize = () => {
302
+ if (visible.value) {
303
+ calculatePosition()
304
+ }
305
+ }
306
+
307
+ // 生命周期
308
+ onMounted(() => {
309
+ document.addEventListener('click', handleClickOutside)
310
+ window.addEventListener('resize', handleResize)
311
+ window.addEventListener('scroll', handleResize, true)
312
+ })
313
+
314
+ onBeforeUnmount(() => {
315
+ document.removeEventListener('click', handleClickOutside)
316
+ window.removeEventListener('resize', handleResize)
317
+ window.removeEventListener('scroll', handleResize, true)
318
+
319
+ // 清除定时器
320
+ if (hoverTimer) {
321
+ clearTimeout(hoverTimer)
322
+ }
323
+ })
324
+
325
+ return () => {
326
+ // 检查是否提供了必需的插槽
327
+ if (!slots.trigger) {
328
+ console.warn('PopoverSelector: trigger 插槽是必需的')
329
+ return null
330
+ }
331
+
332
+ // 构建触发器事件
333
+ const triggerEvents = {}
334
+ if (props.triggerEvent === 'hover') {
335
+ triggerEvents.onMouseenter = handleMouseEnter
336
+ triggerEvents.onMouseleave = handleMouseLeave
337
+ }
338
+
339
+ // 渲染触发器插槽
340
+ const triggerSlot = slots.trigger?.({
341
+ open,
342
+ close,
343
+ toggle,
344
+ visible: visible.value,
345
+ // 传递事件给插槽,让用户可以自定义
346
+ events: triggerEvents,
347
+ })
348
+
349
+ // 渲染悬浮窗内容插槽
350
+ const dropdownContent = slots.default?.({
351
+ close,
352
+ visible: visible.value,
353
+ })
354
+
355
+ // 悬浮窗的 hover 事件(用于 hover 模式)
356
+ const dropdownEvents = {}
357
+ if (props.triggerEvent === 'hover') {
358
+ dropdownEvents.onMouseenter = cancelClose
359
+ dropdownEvents.onMouseleave = handleMouseLeave
360
+ }
361
+
362
+ return (
363
+ <div class={styles.popoverSelector}>
364
+ {/* 触发器 */}
365
+ <div
366
+ ref={triggerRef}
367
+ class={styles.trigger}
368
+ {...triggerEvents}
369
+ >
370
+ {triggerSlot}
371
+ </div>
372
+
373
+ {/* 悬浮窗 */}
374
+ {visible.value && (
375
+ <div
376
+ ref={dropdownRef}
377
+ class={[
378
+ styles.dropdown,
379
+ props.animated && styles.animated,
380
+ props.dropdownClass,
381
+ ]}
382
+ style={computedDropdownStyle.value}
383
+ {...dropdownEvents}
384
+ >
385
+ {dropdownContent}
386
+ </div>
387
+ )}
388
+ </div>
389
+ )
390
+ }
391
+ },
392
+ })