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,485 @@
1
+ # EventCalendar 日程日历组件
2
+
3
+ 一个零第三方依赖的 Vue 2 月历组件。支持月份自动补全(含跨年)、下拉切换、自动轮播、
4
+ 字段映射、插槽定制、骨架屏与多种切换动效。
5
+
6
+ > 整个 `EventCalendar` 文件夹可以直接拷贝到任意 Vue 2 项目使用,
7
+ > **不依赖 element-ui / dayjs / moment / lodash 等任何第三方库**,只用原生 `Date` 与 CSS。
8
+
9
+ ## 目录结构
10
+
11
+ ```
12
+ EventCalendar/
13
+ ├── index.vue # 组件本体
14
+ ├── MonthSelect.vue # 自研月份下拉框(不依赖 UI 库)
15
+ ├── CalendarSkeleton.vue # 骨架屏
16
+ ├── CodeBlock.vue # 示例页用的代码块(业务中可删)
17
+ ├── utils.js # 日期计算与字段映射工具
18
+ ├── recruitmentAdapter.js # NodeQ mock 响应 -> EventCalendar 数据
19
+ ├── mockData.js # 模拟数据(setTimeout 模拟异步接口)
20
+ ├── example.vue # 完整示例集合(14 个 demo + API 文档)
21
+ └── README.md
22
+ ```
23
+
24
+ 真正接入普通日历时,**必需**的只有 `index.vue`、`MonthSelect.vue`、`CalendarSkeleton.vue`、`utils.js`。
25
+ 接 NodeQ 招聘接口时再加入 `recruitmentAdapter.js`。`mockData.js` / `example.vue` / `CodeBlock.vue`
26
+ 是演示用的,可以删掉。
27
+
28
+ ## 快速开始
29
+
30
+ ```vue
31
+ <template>
32
+ <EventCalendar
33
+ :data="data"
34
+ :loading="loading"
35
+ title="宣讲日历"
36
+ subtitle="更多场次陆续上线中,宣讲进程以实际安排为准"
37
+ @item-click="onItemClick"
38
+ />
39
+ </template>
40
+
41
+ <script>
42
+ import EventCalendar from '@/components/EventCalendar/index.vue'
43
+
44
+ export default {
45
+ components: { EventCalendar },
46
+ data() {
47
+ return { data: [], loading: true }
48
+ },
49
+ async created() {
50
+ this.loading = true
51
+ try {
52
+ this.data = await this.$api.getCalendar()
53
+ } finally {
54
+ // 放 finally:接口失败也要收掉骨架屏,否则页面会一直卡在加载态
55
+ this.loading = false
56
+ }
57
+ },
58
+ methods: {
59
+ onItemClick(scope) {
60
+ console.log(scope.item) // 后端返回的原始对象
61
+ }
62
+ }
63
+ }
64
+ </script>
65
+ ```
66
+
67
+ ## 数据结构
68
+
69
+ ### 默认结构(按月分组)
70
+
71
+ ```js
72
+ [
73
+ {
74
+ month: '2026-09', // 月份标识
75
+ monthLabel: '2026年9月', // 下拉框文案,不传则自动生成
76
+ days: [
77
+ {
78
+ date: '2026-09-09', // 日期标识
79
+ items: [ // 当天的条目
80
+ {
81
+ id: 'a1',
82
+ label: '香港中文大学(深圳)', // 主文案
83
+ address: '深圳市南山区校区报告厅', // 地址,为空时不显示地址行
84
+ badge: '宣讲', // 右上角角标
85
+ type: 'talk' // 类型,决定配色
86
+ }
87
+ ]
88
+ }
89
+ ]
90
+ }
91
+ ]
92
+ ```
93
+
94
+ ### 扁平结构(也支持)
95
+
96
+ 不按月分组,直接给一维日期数组,组件会自动按日期归月:
97
+
98
+ ```js
99
+ [
100
+ { date: '2026-09-09', items: [...] },
101
+ { date: '2026-10-01', items: [...] }
102
+ ]
103
+ ```
104
+
105
+ ## NodeQ mock 数据转换
106
+
107
+ 转换方法只负责把当前 mock 响应中的 `data.nbcbRecAnnJourneyMaps` 映射为组件默认结构,
108
+ 不包含字段猜测或展示配置:
109
+
110
+ ```js
111
+ import EventCalendar from '@/components/EventCalendar/index.vue'
112
+ import { transformNodeqCalendarResponse } from '@/components/EventCalendar/recruitmentAdapter'
113
+
114
+ const data = transformNodeqCalendarResponse(response)
115
+ ```
116
+
117
+ ```vue
118
+ <EventCalendar
119
+ :data="data"
120
+ item-align="center"
121
+ :item-horizontal-padding="0"
122
+ :item-height="40"
123
+ />
124
+ ```
125
+
126
+ 转换后条目固定包含 `id`、`label`、`address`、`badge`、`type`、`disabled`。
127
+ mock 中没有的值使用空字符串或 `false`。`address` 为空时,日历组件不会渲染地址行。
128
+
129
+ 大学名称不超过 7 个字符时为 14px,超过 7 个字符时为 12px;地址统一为 12px。
130
+ `item-align` 控制靠左或居中,`item-horizontal-padding="0"` 可去掉条目左右内边距。
131
+
132
+ ## 原生布局配置工具栏
133
+
134
+ 外边距、内边距、条目、溢出与行高、角标缩放等均为组件原生 Props。开启工具栏后,
135
+ 改完点「复制配置」,把 JSON 粘回 `layoutConfig` 再 `v-bind` 即可:
136
+
137
+ ```vue
138
+ <EventCalendar
139
+ :data="data"
140
+ v-bind="layoutConfig"
141
+ :show-config-toolbar="isDevelopment"
142
+ />
143
+ ```
144
+
145
+ ```js
146
+ export default {
147
+ data() {
148
+ return {
149
+ isDevelopment: process.env.NODE_ENV !== 'production',
150
+ // 结构与工具栏「复制配置」得到的 JSON 一致,可直接赋值应用
151
+ layoutConfig: {
152
+ itemAlign: 'center',
153
+ calendarMargin: 0,
154
+ calendarPadding: 0,
155
+ headerPadding: '4px 4px 16px',
156
+ cellPadding: '12px 10px',
157
+ mobileCellPadding: '8px 6px',
158
+ itemHorizontalPadding: 0,
159
+ itemVerticalPadding: 4,
160
+ itemGap: 6,
161
+ itemLineGap: 2,
162
+ itemBgGradient: false,
163
+ itemBgGradientDir: 'to-bottom',
164
+ itemBgHover: true,
165
+ overflowMode: 'scroll',
166
+ maxVisibleItems: 4,
167
+ itemHeight: 28,
168
+ minRowHeight: 118,
169
+ badgeScale: 0.75,
170
+ // 条目色留空表示沿用 type/主题配色
171
+ itemTextColor: '',
172
+ itemBgColor: ''
173
+ }
174
+ }
175
+ }
176
+ }
177
+ ```
178
+
179
+ `show-config-toolbar` 默认是 `false`。开启后组件顶部会出现配置工具栏(P1~P14):
180
+ 条目对齐、日期格/窄屏日期格内边距(各拆「上下 / 左右」两块)、条目左右/上下内边距与间距、
181
+ 名称与地址间距、单格最多显示、条目高度、条目背景效果(纯色/渐变,方向可上下或左右)、
182
+ 悬浮加深(可关闭)与条目文字色/背景色;每张卡片右上角都有「还原」可回到初始值。
183
+ 选定条目背景色后,鼠标悬浮会自动把背景调淡一档,不喜欢可在「悬浮加深」里关闭。
184
+ 底部实时显示当前配置 JSON,右上角「复制配置」一键复制。用户把复制出的 JSON 发回后,
185
+ 研发直接把它赋给 `layoutConfig` 通过 `v-bind` 应用即可。
186
+
187
+ ## 字段映射(后端字段不一致时)
188
+
189
+ **不需要改数据**,传 `field-names` 即可。字段路径支持 `'a.b.c'` 形式。
190
+
191
+ ```js
192
+ const fieldNames = {
193
+ month: 'ym',
194
+ monthLabel: 'ymText',
195
+ days: 'dateList',
196
+ date: 'dayStr',
197
+ items: 'activityList',
198
+ itemKey: 'activityId',
199
+ itemLabel: 'schoolName',
200
+ itemAddress: 'rawAddress',
201
+ itemBadge: 'activityTypeName',
202
+ itemType: 'activityType',
203
+ itemDisabled: 'expired'
204
+ }
205
+ ```
206
+
207
+ ```vue
208
+ <EventCalendar :data="data" :field-names="fieldNames" />
209
+ ```
210
+
211
+ 完整默认值见 `utils.js` 里的 `DEFAULT_FIELD_NAMES`。
212
+
213
+ ## 核心机制说明
214
+
215
+ ### 1. 月份补全与跨年
216
+
217
+ 每个月天数(28/29/30/31)和「1 号是星期几」都不固定,组件会自动补齐首尾:
218
+
219
+ - 若 2 月 1 号是**周三**,首行补上 1 月的周日、周一、周二;
220
+ - 若 2 月 28 号是**周三**,末行补上 3 月的周四、周五、周六;
221
+ - 非当月的补位日期自动**置灰**(`.is-other-month`)。
222
+
223
+ 实现上先算出本月 1 号相对「一周起始日」的偏移量 `leading`,再用
224
+ `new Date(year, month - 1, 1 - leading + i)` 递推生成所有格子。
225
+ 原生 `Date` 对天数越界会自动进位/借位,**跨年(1 月往前补 12 月、12 月往后补次年 1 月)无需任何特判**。
226
+
227
+ 补位格子默认也会渲染条目,可用 `:show-adjacent-items="false"` 关掉。
228
+
229
+ ### 2. 行高与条目溢出
230
+
231
+ **行高由该行条目最多的那一天决定** —— 这是 CSS Grid 的天然行为
232
+ (同一行的格子会自动拉伸到该行最高格子的高度),无需 JS 计算,也不会因为窗口缩放而失准。
233
+
234
+ 单日条目超过 `max-visible-items`(默认 4)后有两种处理:
235
+
236
+ | overflow-mode | 行为 |
237
+ | --- | --- |
238
+ | `scroll`(默认) | 格内出现细滚动条,滚动区高度 = `n × item-height + (n-1) × item-gap` |
239
+ | `collapse` | 只显示前 n-1 条,末尾出现「还有 N 项」,可监听 `more-click` |
240
+
241
+ 大学名称不超过 7 个字符时使用 14px,超过 7 个字符时使用 12px;地址行统一使用 12px,
242
+ 地址为空时不渲染。
243
+
244
+ `min-row-height` 保证没有条目的行不会塌陷。
245
+
246
+ ### 3. 轮播与暂停
247
+
248
+ `autoplay` 开启后按 `autoplay-interval` 自动切换月份,顶部细进度条展示剩余时间。
249
+ 以下情况会**自动暂停并保留剩余时间**(恢复时接着走,进度条不跳):
250
+
251
+ - 鼠标悬停在组件上(`pause-on-hover`,默认开)
252
+ - 月份下拉框展开中
253
+ - 浏览器标签页切到后台(`visibilitychange`)
254
+ - 用户点击了暂停按钮
255
+
256
+ `loop="false"` 时播到最后一个月会停止并触发 `autoplay-end`。
257
+
258
+ ### 4. 切换动效
259
+
260
+ | transition-effect | 效果 |
261
+ | --- | --- |
262
+ | `slide`(默认) | 按切换方向左右滑入滑出 |
263
+ | `fade` | 淡入淡出 |
264
+ | `zoom` | 缩放 |
265
+ | `flip` | 带透视的 3D 翻页 |
266
+ | `none` | 关闭动效 |
267
+
268
+ 另有 `cell-stagger` 让单元格从左上到右下错峰入场。
269
+ 动效时长由 `transition-duration` 控制,设为 `0` 亦可视作关闭。
270
+
271
+ 切月时行数可能从 5 行变 6 行,组件用 `ResizeObserver` 测量面板高度并做高度过渡,不会突然跳动。
272
+
273
+ > 组件已适配 `prefers-reduced-motion`:系统开启「减少动态效果」时自动关闭全部动画。
274
+
275
+ ## API
276
+
277
+ ### Props
278
+
279
+ | 参数 | 说明 | 类型 | 默认值 |
280
+ | --- | --- | --- | --- |
281
+ | data | 日历数据,支持按月分组与扁平两种结构 | Array | `[]` |
282
+ | field-names | 字段映射,支持 `a.b.c` 点路径 | Object | `{}` |
283
+ | loading | 加载中,为 true 时渲染骨架屏 | Boolean | `false` |
284
+ | skeleton-rows | 骨架屏行数 | Number | `5` |
285
+ | active-month | 当前月份,支持 `v-model` / `.sync` | String | `''` |
286
+ | show-month-select | 是否显示月份下拉框 | Boolean | `true` |
287
+ | show-arrows | 是否显示左右翻月箭头 | Boolean | `false` |
288
+ | autoplay | 是否开启自动轮播 | Boolean | `false` |
289
+ | autoplay-interval | 轮播间隔(毫秒) | Number | `60000` |
290
+ | loop | 播到最后一个月后是否回到第一个 | Boolean | `true` |
291
+ | pause-on-hover | 鼠标悬停时暂停轮播 | Boolean | `true` |
292
+ | show-progress | 显示轮播倒计时进度条 | Boolean | `true` |
293
+ | show-autoplay-toggle | 显示播放/暂停按钮 | Boolean | `true` |
294
+ | transition-effect | `slide` / `fade` / `zoom` / `flip` / `none` | String | `'slide'` |
295
+ | transition-duration | 动效时长(毫秒) | Number | `420` |
296
+ | cell-stagger | 单元格错峰入场动画 | Boolean | `false` |
297
+ | show-header | 是否显示顶部区域 | Boolean | `true` |
298
+ | title / subtitle | 默认标题与副标题(`header-left` 未传时生效) | String | `''` |
299
+ | first-day-of-week | 一周起始日,0=周日 1=周一 | Number | `0` |
300
+ | week-labels | 星期文案,下标对应 `Date.getDay()` | Array | `['周日'…'周六']` |
301
+ | max-visible-items | 单日最多显示条目数 | Number | `4` |
302
+ | overflow-mode | 溢出处理:`scroll` / `collapse` | String | `'scroll'` |
303
+ | item-height | 单条条目高度(px) | Number | `28` |
304
+ | item-gap | 条目间距(px) | Number | `6` |
305
+ | item-align | 条目内容对齐方式:`left` / `center` | String | `'left'` |
306
+ | calendar-margin | 日历根节点外边距;Number 按 px 处理,String 支持 CSS 简写 | Number / String | `0` |
307
+ | calendar-padding | 日历根节点内边距;Number 按 px 处理,String 支持 CSS 简写 | Number / String | `0` |
308
+ | header-padding | 顶部区域内边距,支持 CSS 简写 | Number / String | `'4px 4px 16px'` |
309
+ | cell-padding | 日期格内边距,支持 CSS 简写 | Number / String | `'12px 10px'` |
310
+ | mobile-cell-padding | 768px 及以下日期格内边距 | Number / String | `'8px 6px'` |
311
+ | item-horizontal-padding | 条目左右内边距(px),传 0 可去除 | Number | `8` |
312
+ | item-vertical-padding | 条目上下内边距(px) | Number | `4` |
313
+ | item-line-gap | 条目内名称与地址的行间距(px) | Number | `2` |
314
+ | item-bg-gradient | 条目背景是否启用渐变(在底色上叠柔和渐变) | Boolean | `false` |
315
+ | item-bg-gradient-dir | 渐变方向:to-bottom 上到下 | to-right 左到右 | String | `'to-bottom'` |
316
+ | item-bg-hover | 悬浮时是否自动把条目背景调淡一档 | Boolean | `true` |
317
+ | badge-scale | 右上角角标整体缩放倍率(越小越紧凑) | Number | `0.75` |
318
+ | show-config-toolbar | 显示原生布局配置工具栏 | Boolean | `false` |
319
+ | item-bg-color | 条目(.ec__item)背景色覆盖;空串按 type/主题配色(工具栏可取色) | String | `''` |
320
+ | item-text-color | 条目(.ec__item)文字色覆盖;空串按 type/主题配色(工具栏可取色) | String | `''` |
321
+ | min-row-height | 单元格最小高度(px) | Number | `118` |
322
+ | show-adjacent-items | 补位日期是否也渲染条目 | Boolean | `true` |
323
+ | highlight-today | 高亮今天 | Boolean | `true` |
324
+ | colorful | 角标是否按 type 上色 | Boolean | `true` |
325
+ | type-colors | 类型配色 `{ type: { color, bg } }` | Object | 内置 4 种 |
326
+ | day-formatter | 日期文案格式化 `(cell) => string` | Function | `'9月7日'` |
327
+ | month-formatter | 月份下拉文案格式化 `(monthKey, raw) => string` | Function | `null` |
328
+ | empty-text | 空数据文案 | String | `'暂无日程数据'` |
329
+ | cell-focusable | 单元格可聚焦(键盘无障碍) | Boolean | `false` |
330
+ | theme | 主题变量覆盖 | Object | `{}` |
331
+
332
+ ### Events
333
+
334
+ | 事件名 | 说明 | 回调参数 |
335
+ | --- | --- | --- |
336
+ | day-click | 点击日期格子 | `(scope, event)` |
337
+ | item-click | 点击条目 | `(scope, event)` |
338
+ | tag-click | 点击条目右上角角标;**未监听时自动退化为 item-click** | `(scope, event)` |
339
+ | more-click | `collapse` 模式下点击「还有 N 项」 | `(scope, event)` |
340
+ | month-change | 月份变化 | `(month, { index, source, option, raw })` |
341
+ | update:activeMonth | 配合 `v-model` / `.sync` | `(month)` |
342
+ | autoplay-toggle | 点击播放/暂停按钮 | `(playing: Boolean)` |
343
+ | autoplay-end | `loop=false` 时播到最后一个月 | — |
344
+ | transition-end | 月份切换动画结束 | `(month)` |
345
+ | config-change | 工具栏配置变化(编辑每一项都会触发) | `(config)` |
346
+
347
+ `month-change` 的 `source` 表明触发来源:`select` / `arrow` / `autoplay` / `prop` / `api`。
348
+
349
+ 日期格子的 `scope`:
350
+
351
+ ```js
352
+ { day, date, dateKey, items, visibleItems, raw, isCurrentMonth, isToday, isWeekend, label }
353
+ ```
354
+
355
+ 条目的 `scope`:
356
+
357
+ ```js
358
+ { item, raw, label, badge, type, disabled, index, day, dateKey }
359
+ ```
360
+
361
+ 其中 `item` / `raw` 是后端返回的**原始对象**,字段齐全,不受 `field-names` 影响。
362
+
363
+ ### Slots
364
+
365
+ | 名称 | 说明 | 作用域参数 |
366
+ | --- | --- | --- |
367
+ | header-left | 顶部左侧(设计稿的标题区) | `{ month, monthLabel, monthIndex, monthCount, monthOptions, loading, paused, prev, next, goTo, toggleAutoplay }` |
368
+ | header-right | 顶部右侧,整体替换默认按钮与下拉 | 同上 |
369
+ | weekday | 星期表头单元 | `{ label, weekday, isWeekend, index }` |
370
+ | day | 整个日期格子(覆盖所有默认内容) | 日期 scope |
371
+ | day-header | 格子里的日期行 | 日期 scope |
372
+ | items | 格子里的条目列表区域 | 日期 scope |
373
+ | item | 单个条目 | 条目 scope |
374
+ | day-empty | 当天无数据时的占位 | 日期 scope |
375
+ | loading | 自定义骨架屏 | `{ rows }` |
376
+ | empty | 整体空状态 | — |
377
+
378
+ 不传插槽时全部回落到默认样式(即设计稿效果)。
379
+
380
+ ```vue
381
+ <EventCalendar :data="data">
382
+ <template #header-left="{ monthLabel }">
383
+ <div class="my-head">{{ monthLabel }}</div>
384
+ </template>
385
+
386
+ <template #item="{ item, label, badge }">
387
+ <div class="my-item">{{ item.startTime }} {{ label }} · {{ badge }}</div>
388
+ </template>
389
+ </EventCalendar>
390
+ ```
391
+
392
+ ### Methods(通过 `ref` 调用)
393
+
394
+ | 方法 | 说明 |
395
+ | --- | --- |
396
+ | `prev()` | 切到上一个月 |
397
+ | `next()` | 切到下一个月 |
398
+ | `goTo(index)` | 切到第 index 个月(从 0 开始) |
399
+ | `setMonth(month)` | 切到指定月份,如 `setMonth('2026-10')` |
400
+ | `restartAutoplay()` | 重置轮播计时 |
401
+ | `getLayoutConfig()` | 获取可直接通过 `v-bind` 应用的当前布局配置 |
402
+
403
+ ## 主题定制
404
+
405
+ 所有颜色都走 CSS 变量,用 `theme` 传入即可换肤:
406
+
407
+ ```vue
408
+ <EventCalendar
409
+ :data="data"
410
+ :theme="{
411
+ primary: '#10a37f',
412
+ primaryGhost: 'rgba(16,163,127,.12)',
413
+ border: '#e4e7ed',
414
+ borderLight: '#eef0f4',
415
+ text: '#303133',
416
+ textSecondary: '#606266',
417
+ muted: '#c8ccd4',
418
+ itemBg: '#f2f9f6',
419
+ cellHover: '#f7fcfa',
420
+ radius: '10px'
421
+ }"
422
+ />
423
+ ```
424
+
425
+ 按业务类型配色用 `type-colors`:
426
+
427
+ ```vue
428
+ <EventCalendar
429
+ :data="data"
430
+ :type-colors="{
431
+ talk: { color: '#3d6cf0', bg: 'rgba(61,108,240,.10)' },
432
+ fair: { color: '#e0821b', bg: 'rgba(224,130,27,.12)' }
433
+ }"
434
+ />
435
+ ```
436
+
437
+ `:colorful="false"` 会让角标统一回到中性灰(更贴近原始设计稿)。
438
+
439
+ ## 模拟数据
440
+
441
+ `mockData.js` 用 `setTimeout` 模拟异步接口,方便脱离后端联调:
442
+
443
+ ```js
444
+ import {
445
+ fetchCalendarData, // 默认字段,可指定月份 / 延迟 / 数据密度
446
+ fetchCalendarDataV2, // 字段名完全不同,配合 ALT_FIELD_NAMES 演示映射
447
+ fetchCrossYearData, // 2025-12 / 2026-01 / 2026-02,验证跨年补全
448
+ fetchEmptyData, // 空数据
449
+ fetchNodeqCalendarData, // NodeQ mock 响应(三个月、每天 3~5 条)
450
+ NODEQ_MOCK_RESPONSE, // 同一份响应的同步版本
451
+ createNodeqMockResponse,
452
+ SIMPLE_DATA, // 一份写死的小数据
453
+ ALT_FIELD_NAMES
454
+ } from './mockData'
455
+ import { transformNodeqCalendarResponse } from './recruitmentAdapter'
456
+
457
+ const data = await fetchCalendarData({
458
+ months: ['2026-09', '2026-10'],
459
+ delay: 1500,
460
+ maxItems: 6,
461
+ density: 0.62
462
+ })
463
+
464
+ const nodeqResponse = await fetchNodeqCalendarData()
465
+ const nodeqData = transformNodeqCalendarResponse(nodeqResponse)
466
+ ```
467
+
468
+ 数据用固定种子的伪随机生成,**每次刷新结果一致**,方便调样式和截图对比。
469
+ `createNodeqMockResponse()` 默认生成 2026 年 9~11 月,每个月 14 个有安排的日期,
470
+ 每天 3~5 条 NodeQ mock 记录。转换方法只按这份 mock 的固定字段做映射。
471
+
472
+ ## 示例页
473
+
474
+ `example.vue` 是按 UI 组件库文档形式组织的完整示例集合,包含 14 个可交互 demo
475
+ (基础用法、异步骨架屏、多月切换、自动轮播、切换动效、跨年补全、字段映射、
476
+ 溢出与行高、插槽定制、事件、主题、空状态、NodeQ 后端适配、布局配置与 JSON 导出)
477
+ 与完整 API 表格。
478
+
479
+ 本项目中已挂到路由 `/calendar`。
480
+
481
+ ## 浏览器兼容
482
+
483
+ - 依赖 CSS Grid、CSS 自定义属性 —— 现代浏览器均支持,不支持 IE11;
484
+ - `ResizeObserver` 用于高度过渡,缺失时自动降级(高度不做动画,功能不受影响);
485
+ - 复制代码在非 HTTPS 环境会回退到 `document.execCommand`。