adspecs 0.1.12

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 (1578) hide show
  1. package/.adspecs/extensions/.registry +30 -0
  2. package/.adspecs/extensions/git/README.md +100 -0
  3. package/.adspecs/extensions/git/commands/adspecs.git.commit.md +48 -0
  4. package/.adspecs/extensions/git/commands/adspecs.git.feature.md +67 -0
  5. package/.adspecs/extensions/git/commands/adspecs.git.initialize.md +49 -0
  6. package/.adspecs/extensions/git/commands/adspecs.git.remote.md +45 -0
  7. package/.adspecs/extensions/git/commands/adspecs.git.validate.md +49 -0
  8. package/.adspecs/extensions/git/config-template.yml +62 -0
  9. package/.adspecs/extensions/git/extension.yml +140 -0
  10. package/.adspecs/extensions/git/git-config.yml +62 -0
  11. package/.adspecs/extensions/git/scripts/bash/auto-commit.sh +140 -0
  12. package/.adspecs/extensions/git/scripts/bash/create-new-feature.sh +453 -0
  13. package/.adspecs/extensions/git/scripts/bash/git-common.sh +54 -0
  14. package/.adspecs/extensions/git/scripts/bash/initialize-repo.sh +54 -0
  15. package/.adspecs/extensions/git/scripts/powershell/auto-commit.ps1 +169 -0
  16. package/.adspecs/extensions/git/scripts/powershell/create-new-feature.ps1 +403 -0
  17. package/.adspecs/extensions/git/scripts/powershell/git-common.ps1 +51 -0
  18. package/.adspecs/extensions/git/scripts/powershell/initialize-repo.ps1 +69 -0
  19. package/.adspecs/extensions.yml +165 -0
  20. package/.adspecs/feature.json +16 -0
  21. package/.adspecs/feature.yml +28 -0
  22. package/.adspecs/project.json +8 -0
  23. package/.adspecs/scripts/bash/check-prerequisites.sh +195 -0
  24. package/.adspecs/scripts/bash/common.sh +640 -0
  25. package/.adspecs/scripts/bash/create-new-feature.sh +301 -0
  26. package/.adspecs/scripts/bash/setup-plan.sh +84 -0
  27. package/.adspecs/scripts/bash/setup-tasks.sh +91 -0
  28. package/.adspecs/scripts/powershell/check-prerequisites.ps1 +149 -0
  29. package/.adspecs/scripts/powershell/common.ps1 +545 -0
  30. package/.adspecs/scripts/powershell/create-new-feature.ps1 +237 -0
  31. package/.adspecs/scripts/powershell/setup-plan.ps1 +64 -0
  32. package/.adspecs/scripts/powershell/setup-tasks.ps1 +70 -0
  33. package/.adspecs/scripts/python/check_prerequisites.py +207 -0
  34. package/.adspecs/scripts/python/common.py +210 -0
  35. package/.adspecs/templates/01-/344/270/232/345/212/241/351/234/200/346/261/202/345/210/206/346/236/220/346/250/241/346/235/277.md +228 -0
  36. package/.adspecs/templates/02-/344/272/247/345/223/201/351/234/200/346/261/202/350/257/264/346/230/216/344/271/246/346/250/241/346/235/277.md +623 -0
  37. package/.adspecs/templates/03-/347/263/273/347/273/237/350/256/276/350/256/241/346/250/241/346/235/277.md +1878 -0
  38. package/.adspecs/templates/04-/345/211/215/347/253/257/345/212/237/350/203/275/350/256/276/350/256/241/346/250/241/346/235/277.md +176 -0
  39. package/.adspecs/templates/05-/345/220/216/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +724 -0
  40. package/.adspecs/templates/05b-/345/211/215/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +492 -0
  41. package/.adspecs/templates/06-/344/273/243/347/240/201/350/257/204/345/256/241/346/212/245/345/221/212/346/250/241/346/235/277.md +1012 -0
  42. package/.adspecs/templates/07-/345/215/225/345/205/203/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +694 -0
  43. package/.adspecs/templates/08-/347/263/273/347/273/237/351/233/206/346/210/220/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +1098 -0
  44. package/.adspecs/templates/09-/346/200/247/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +610 -0
  45. package/.adspecs/templates/10-/345/256/211/345/205/250/346/243/200/346/237/245/346/270/205/345/215/225.md +912 -0
  46. package/.adspecs/templates/11-/344/273/243/347/240/201/350/264/250/351/207/217/346/240/207/345/207/206.md +753 -0
  47. package/.adspecs/templates/13-/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/346/235/277.md +543 -0
  48. package/.adspecs/templates/14-/351/234/200/346/261/202/350/277/275/346/272/257/347/237/251/351/230/265/346/250/241/346/235/277.md +225 -0
  49. package/.adspecs/templates/15-/344/270/232/345/212/241/345/212/237/350/203/275/346/236/266/346/236/204/346/226/207/346/241/243/346/250/241/346/235/277.md +168 -0
  50. package/.adspecs/templates/16-/347/263/273/347/273/237/346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/346/235/277.md +608 -0
  51. package/.adspecs/templates/17-/345/255/220/346/250/241/345/235/227/344/276/235/350/265/226/345/205/263/347/263/273/346/250/241/346/235/277.md +308 -0
  52. package/.adspecs/templates/18-/347/273/237/344/270/200/346/225/260/346/215/256/346/250/241/345/236/213/346/250/241/346/235/277.md +297 -0
  53. package/.adspecs/templates/19-/351/241/271/347/233/256/347/233/256/345/275/225/347/273/223/346/236/204/346/250/241/346/235/277.md +468 -0
  54. package/.adspecs/templates/20-/345/267/245/344/275/234/350/257/264/346/230/216/344/271/246SOW/346/250/241/346/235/277.md +372 -0
  55. package/.adspecs/templates/21-/344/270/232/345/212/241/346/226/271/346/241/210/346/250/241/346/235/277.md +661 -0
  56. package/.adspecs/workflows/adspecs/workflow.yml +82 -0
  57. package/.adspecs/workflows/workflow-registry.json +13 -0
  58. package/.claude-plugin/marketplace.json +23 -0
  59. package/.claude-plugin/plugin.json +14 -0
  60. package/.qoder-plugin/plugin.json +21 -0
  61. package/CHANGELOG.md +1 -0
  62. package/CLAUDE.md +207 -0
  63. package/INSTALL.md +134 -0
  64. package/LICENSE +201 -0
  65. package/README.md +605 -0
  66. package/bin/adspecs.js +126 -0
  67. package/hooks/commit-queue.js +245 -0
  68. package/hooks/hooks.json +63 -0
  69. package/hooks/session-start.js +44 -0
  70. package/hooks/wiki-queue.js +127 -0
  71. package/package.json +61 -0
  72. package/references/ant6-front-standard/01-/345/237/272/347/241/200/350/247/204/350/214/203.md +181 -0
  73. package/references/ant6-front-standard/02-/347/273/204/344/273/266/350/247/204/350/214/203.md +189 -0
  74. package/references/ant6-front-standard/03-/345/210/227/350/241/250/350/247/204/350/214/203.md +147 -0
  75. package/references/ant6-front-standard/04-/350/241/250/345/215/225/350/247/204/350/214/203.md +312 -0
  76. package/references/ant6-front-standard/05-/345/211/215/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +1443 -0
  77. package/references/ant6-front-standard/05-/350/267/257/347/224/261/347/212/266/346/200/201/346/216/245/345/217/243/350/247/204/350/214/203.md +175 -0
  78. package/references/ant6-front-standard/06-/345/233/275/351/231/205/345/214/226/350/247/204/350/214/203.md +126 -0
  79. package/references/ant6-front-standard/07-/345/255/227/345/205/270/346/235/203/351/231/220/350/247/204/350/214/203.md +71 -0
  80. package/references/ant6-front-standard/08-/346/200/247/350/203/275/350/264/250/351/207/217/350/247/204/350/214/203.md +91 -0
  81. package/references/ant6-front-standard/09-/345/270/270/350/247/201/351/227/256/351/242/230/350/247/204/350/214/203.md +87 -0
  82. package/references/ant6-front-standard/index.md +100 -0
  83. package/references/ant6-front-standard/vue/350/277/201/347/247/273/345/210/260react/350/247/204/350/214/203.md +37 -0
  84. package/references/antd-front-demo/.env +15 -0
  85. package/references/antd-front-demo/.env.production +7 -0
  86. package/references/antd-front-demo/eslint.config.js +23 -0
  87. package/references/antd-front-demo/index.html +16 -0
  88. package/references/antd-front-demo/package-lock.json +6603 -0
  89. package/references/antd-front-demo/package.json +53 -0
  90. package/references/antd-front-demo/public/favicon.svg +4 -0
  91. package/references/antd-front-demo/public/mockServiceWorker.js +361 -0
  92. package/references/antd-front-demo/src/App.tsx +68 -0
  93. package/references/antd-front-demo/src/api/aps/coil.ts +42 -0
  94. package/references/antd-front-demo/src/api/aps/order.ts +42 -0
  95. package/references/antd-front-demo/src/api/aps/param.ts +19 -0
  96. package/references/antd-front-demo/src/api/aps/plan.ts +30 -0
  97. package/references/antd-front-demo/src/api/aps/task.ts +31 -0
  98. package/references/antd-front-demo/src/api/auth.ts +41 -0
  99. package/references/antd-front-demo/src/api/mdm/codeRule.ts +23 -0
  100. package/references/antd-front-demo/src/api/mdm/coding-system.ts +130 -0
  101. package/references/antd-front-demo/src/api/system/dept.ts +38 -0
  102. package/references/antd-front-demo/src/api/system/dict-data.ts +42 -0
  103. package/references/antd-front-demo/src/api/system/dict-type.ts +35 -0
  104. package/references/antd-front-demo/src/api/system/menu.ts +38 -0
  105. package/references/antd-front-demo/src/api/system/post.ts +15 -0
  106. package/references/antd-front-demo/src/api/system/role.ts +42 -0
  107. package/references/antd-front-demo/src/api/system/user.ts +48 -0
  108. package/references/antd-front-demo/src/components/Access/index.tsx +14 -0
  109. package/references/antd-front-demo/src/components/DictTag/index.tsx +29 -0
  110. package/references/antd-front-demo/src/components/Footer/index.tsx +35 -0
  111. package/references/antd-front-demo/src/components/Icon/iconMap.ts +131 -0
  112. package/references/antd-front-demo/src/components/Icon/index.tsx +62 -0
  113. package/references/antd-front-demo/src/hooks/useAccess.ts +5 -0
  114. package/references/antd-front-demo/src/i18n/index.ts +22 -0
  115. package/references/antd-front-demo/src/layouts/AdminLayout/Header.tsx +137 -0
  116. package/references/antd-front-demo/src/layouts/AdminLayout/Sidebar.tsx +103 -0
  117. package/references/antd-front-demo/src/layouts/AdminLayout/StyleSettings.tsx +165 -0
  118. package/references/antd-front-demo/src/layouts/AdminLayout/index.tsx +25 -0
  119. package/references/antd-front-demo/src/locales/en-US/aps/coil.ts +18 -0
  120. package/references/antd-front-demo/src/locales/en-US/aps/order.ts +27 -0
  121. package/references/antd-front-demo/src/locales/en-US/aps/param.ts +32 -0
  122. package/references/antd-front-demo/src/locales/en-US/aps/plan.ts +33 -0
  123. package/references/antd-front-demo/src/locales/en-US/aps/task.ts +33 -0
  124. package/references/antd-front-demo/src/locales/en-US/common.ts +27 -0
  125. package/references/antd-front-demo/src/locales/en-US/components/upload.ts +12 -0
  126. package/references/antd-front-demo/src/locales/en-US/dashboard.ts +18 -0
  127. package/references/antd-front-demo/src/locales/en-US/header.ts +27 -0
  128. package/references/antd-front-demo/src/locales/en-US/login.ts +42 -0
  129. package/references/antd-front-demo/src/locales/en-US/mdm/codeRule.ts +20 -0
  130. package/references/antd-front-demo/src/locales/en-US/mdm/coding-system-state-flow.ts +28 -0
  131. package/references/antd-front-demo/src/locales/en-US/mdm/coding-system.ts +139 -0
  132. package/references/antd-front-demo/src/locales/en-US/menu.ts +18 -0
  133. package/references/antd-front-demo/src/locales/en-US/profile.ts +38 -0
  134. package/references/antd-front-demo/src/locales/en-US/system/dept.ts +20 -0
  135. package/references/antd-front-demo/src/locales/en-US/system/dict.ts +30 -0
  136. package/references/antd-front-demo/src/locales/en-US/system/menu.ts +28 -0
  137. package/references/antd-front-demo/src/locales/en-US/system/role.ts +18 -0
  138. package/references/antd-front-demo/src/locales/en-US/system/user.ts +29 -0
  139. package/references/antd-front-demo/src/locales/zh-CN/aps/coil.ts +18 -0
  140. package/references/antd-front-demo/src/locales/zh-CN/aps/order.ts +27 -0
  141. package/references/antd-front-demo/src/locales/zh-CN/aps/param.ts +32 -0
  142. package/references/antd-front-demo/src/locales/zh-CN/aps/plan.ts +33 -0
  143. package/references/antd-front-demo/src/locales/zh-CN/aps/task.ts +33 -0
  144. package/references/antd-front-demo/src/locales/zh-CN/common.ts +27 -0
  145. package/references/antd-front-demo/src/locales/zh-CN/components/upload.ts +12 -0
  146. package/references/antd-front-demo/src/locales/zh-CN/dashboard.ts +18 -0
  147. package/references/antd-front-demo/src/locales/zh-CN/header.ts +27 -0
  148. package/references/antd-front-demo/src/locales/zh-CN/login.ts +42 -0
  149. package/references/antd-front-demo/src/locales/zh-CN/mdm/codeRule.ts +20 -0
  150. package/references/antd-front-demo/src/locales/zh-CN/mdm/coding-system-state-flow.ts +28 -0
  151. package/references/antd-front-demo/src/locales/zh-CN/mdm/coding-system.ts +154 -0
  152. package/references/antd-front-demo/src/locales/zh-CN/menu.ts +18 -0
  153. package/references/antd-front-demo/src/locales/zh-CN/profile.ts +38 -0
  154. package/references/antd-front-demo/src/locales/zh-CN/system/dept.ts +20 -0
  155. package/references/antd-front-demo/src/locales/zh-CN/system/dict.ts +30 -0
  156. package/references/antd-front-demo/src/locales/zh-CN/system/menu.ts +28 -0
  157. package/references/antd-front-demo/src/locales/zh-CN/system/role.ts +18 -0
  158. package/references/antd-front-demo/src/locales/zh-CN/system/user.ts +29 -0
  159. package/references/antd-front-demo/src/main.tsx +18 -0
  160. package/references/antd-front-demo/src/mocks/browser.ts +10 -0
  161. package/references/antd-front-demo/src/mocks/data/aps.ts +255 -0
  162. package/references/antd-front-demo/src/mocks/data/index.ts +382 -0
  163. package/references/antd-front-demo/src/mocks/handlers/apsCoil.ts +151 -0
  164. package/references/antd-front-demo/src/mocks/handlers/apsOrder.ts +166 -0
  165. package/references/antd-front-demo/src/mocks/handlers/apsParam.ts +71 -0
  166. package/references/antd-front-demo/src/mocks/handlers/apsPlan.ts +98 -0
  167. package/references/antd-front-demo/src/mocks/handlers/apsTask.ts +249 -0
  168. package/references/antd-front-demo/src/mocks/handlers/auth.ts +244 -0
  169. package/references/antd-front-demo/src/mocks/handlers/codeRule.ts +141 -0
  170. package/references/antd-front-demo/src/mocks/handlers/coding-system.ts +256 -0
  171. package/references/antd-front-demo/src/mocks/handlers/dept.ts +154 -0
  172. package/references/antd-front-demo/src/mocks/handlers/dict.ts +297 -0
  173. package/references/antd-front-demo/src/mocks/handlers/image.ts +13 -0
  174. package/references/antd-front-demo/src/mocks/handlers/index.ts +33 -0
  175. package/references/antd-front-demo/src/mocks/handlers/menu.ts +132 -0
  176. package/references/antd-front-demo/src/mocks/handlers/post.ts +19 -0
  177. package/references/antd-front-demo/src/mocks/handlers/role.ts +184 -0
  178. package/references/antd-front-demo/src/mocks/handlers/user.ts +223 -0
  179. package/references/antd-front-demo/src/pages/aps/coil/components/CoilDrawer.tsx +141 -0
  180. package/references/antd-front-demo/src/pages/aps/coil/index.tsx +209 -0
  181. package/references/antd-front-demo/src/pages/aps/optimization/index.tsx +192 -0
  182. package/references/antd-front-demo/src/pages/aps/order/components/OrderDrawer.tsx +251 -0
  183. package/references/antd-front-demo/src/pages/aps/order/index.tsx +273 -0
  184. package/references/antd-front-demo/src/pages/aps/param/index.tsx +153 -0
  185. package/references/antd-front-demo/src/pages/aps/plan/components/CuttingPlanVisualization.tsx +821 -0
  186. package/references/antd-front-demo/src/pages/aps/plan/index.tsx +254 -0
  187. package/references/antd-front-demo/src/pages/aps/task/index.tsx +190 -0
  188. package/references/antd-front-demo/src/pages/dashboard/index.tsx +67 -0
  189. package/references/antd-front-demo/src/pages/error/404/index.tsx +25 -0
  190. package/references/antd-front-demo/src/pages/login/components/ForgetPasswordForm.tsx +101 -0
  191. package/references/antd-front-demo/src/pages/login/components/LoginForm.tsx +83 -0
  192. package/references/antd-front-demo/src/pages/login/components/RegisterForm.tsx +69 -0
  193. package/references/antd-front-demo/src/pages/login/components/index.ts +3 -0
  194. package/references/antd-front-demo/src/pages/login/index.module.css +62 -0
  195. package/references/antd-front-demo/src/pages/login/index.tsx +60 -0
  196. package/references/antd-front-demo/src/pages/mdm/coding-system/approval/index.tsx +227 -0
  197. package/references/antd-front-demo/src/pages/mdm/coding-system/code-log/index.tsx +103 -0
  198. package/references/antd-front-demo/src/pages/mdm/coding-system/code-mapping/components/CodeMappingDrawer.tsx +120 -0
  199. package/references/antd-front-demo/src/pages/mdm/coding-system/code-mapping/index.tsx +170 -0
  200. package/references/antd-front-demo/src/pages/mdm/coding-system/code-rule/components/CodeRuleDrawer.tsx +235 -0
  201. package/references/antd-front-demo/src/pages/mdm/coding-system/code-rule/index.tsx +204 -0
  202. package/references/antd-front-demo/src/pages/mdm/coding-system/state-flow/index.tsx +101 -0
  203. package/references/antd-front-demo/src/pages/mdm/coding-system/sync/index.tsx +151 -0
  204. package/references/antd-front-demo/src/pages/mdm/coding-system/variable-dict/components/VariableDictDrawer.tsx +108 -0
  205. package/references/antd-front-demo/src/pages/mdm/coding-system/variable-dict/index.tsx +163 -0
  206. package/references/antd-front-demo/src/pages/profile/index.tsx +136 -0
  207. package/references/antd-front-demo/src/pages/system/dept/components/DeptDrawer.tsx +157 -0
  208. package/references/antd-front-demo/src/pages/system/dept/index.tsx +224 -0
  209. package/references/antd-front-demo/src/pages/system/dict/components/DictDataDrawer.tsx +243 -0
  210. package/references/antd-front-demo/src/pages/system/dict/components/DictTypeModal.tsx +102 -0
  211. package/references/antd-front-demo/src/pages/system/dict/index.tsx +162 -0
  212. package/references/antd-front-demo/src/pages/system/menu/components/MenuDrawer.tsx +215 -0
  213. package/references/antd-front-demo/src/pages/system/menu/index.tsx +236 -0
  214. package/references/antd-front-demo/src/pages/system/role/components/RoleDrawer.tsx +118 -0
  215. package/references/antd-front-demo/src/pages/system/role/index.tsx +142 -0
  216. package/references/antd-front-demo/src/pages/system/user/components/DeptTree.tsx +71 -0
  217. package/references/antd-front-demo/src/pages/system/user/components/UserDrawer.tsx +197 -0
  218. package/references/antd-front-demo/src/pages/system/user/index.tsx +189 -0
  219. package/references/antd-front-demo/src/router/authGuard.tsx +67 -0
  220. package/references/antd-front-demo/src/router/dynamicRoutes.tsx +179 -0
  221. package/references/antd-front-demo/src/router/index.tsx +105 -0
  222. package/references/antd-front-demo/src/setupTests.ts +1 -0
  223. package/references/antd-front-demo/src/stores/useAppStore.ts +43 -0
  224. package/references/antd-front-demo/src/stores/useAuthStore.ts +78 -0
  225. package/references/antd-front-demo/src/stores/useDictStore.ts +41 -0
  226. package/references/antd-front-demo/src/types/api.ts +17 -0
  227. package/references/antd-front-demo/src/types/aps/coil.ts +42 -0
  228. package/references/antd-front-demo/src/types/aps/order.ts +63 -0
  229. package/references/antd-front-demo/src/types/aps/param.ts +48 -0
  230. package/references/antd-front-demo/src/types/aps/plan.ts +59 -0
  231. package/references/antd-front-demo/src/types/aps/task.ts +66 -0
  232. package/references/antd-front-demo/src/types/auth.ts +81 -0
  233. package/references/antd-front-demo/src/types/mdm/codeRule.ts +43 -0
  234. package/references/antd-front-demo/src/types/mdm/coding-system.ts +187 -0
  235. package/references/antd-front-demo/src/utils/formatTime.ts +68 -0
  236. package/references/antd-front-demo/src/utils/menuConverter.ts +113 -0
  237. package/references/antd-front-demo/src/utils/messageHolder.ts +14 -0
  238. package/references/antd-front-demo/src/utils/permission.ts +18 -0
  239. package/references/antd-front-demo/src/utils/request.ts +165 -0
  240. package/references/antd-front-demo/src/utils/token.ts +91 -0
  241. package/references/antd-front-demo/tsconfig.app.json +30 -0
  242. package/references/antd-front-demo/tsconfig.json +7 -0
  243. package/references/antd-front-demo/tsconfig.node.json +24 -0
  244. package/references/antd-front-demo/vite.config.ts +30 -0
  245. package/references/ecp-end-standard/ES/344/275/277/347/224/250/350/247/204/350/214/203.md +231 -0
  246. package/references/ecp-end-standard/IdToName/344/275/277/347/224/250/350/247/204/350/214/203.md +148 -0
  247. package/references/ecp-end-standard/Liquibase /346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/347/256/241/347/220/206/350/247/204/350/214/203.md" +197 -0
  248. package/references/ecp-end-standard/Redis/344/275/277/347/224/250/350/247/204/350/214/203.md +78 -0
  249. package/references/ecp-end-standard/index.md +63 -0
  250. package/references/ecp-end-standard//345/210/206/345/270/203/345/274/217/351/224/201/350/247/204/350/214/203.md +65 -0
  251. package/references/ecp-end-standard//345/220/216/347/253/257/345/210/206/345/261/202/345/274/200/345/217/221/344/270/216/346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/350/247/204/350/214/203.md +385 -0
  252. package/references/ecp-end-standard//345/244/232/350/257/255/350/250/200/345/217/212/345/205/250/345/261/200/345/274/202/345/270/270/345/244/204/347/220/206/350/247/204/350/214/203.md +442 -0
  253. package/references/ecp-end-standard//346/226/207/344/273/266/344/270/255/345/277/203/344/275/277/347/224/250/350/247/204/350/214/203.md +278 -0
  254. package/references/ecp-end-standard//346/265/201/347/250/213/344/270/255/345/277/203/346/216/245/345/205/245/350/247/204/350/214/203.md +464 -0
  255. package/references/ecp-end-standard//347/274/226/347/240/201/350/207/252/345/212/250/347/224/237/346/210/220/350/247/204/350/214/203.md +69 -0
  256. package/references/ecp-end-standard//351/200/232/347/224/250/345/267/245/345/205/267/347/261/273/344/275/277/347/224/250/350/247/204/350/214/203.md +189 -0
  257. package/references/front-demo/.claude/rules/INDEX.md +54 -0
  258. package/references/front-demo/.claude/rules/api-i18n-rules.md +65 -0
  259. package/references/front-demo/.claude/rules/gushen-components.md +174 -0
  260. package/references/front-demo/.claude/rules/page-development-rules.md +262 -0
  261. package/references/front-demo/.claude/rules/page-template-index.md +374 -0
  262. package/references/front-demo/.claude/rules/project-overview.md +48 -0
  263. package/references/front-demo/.claude/skills/generate-vue3-page/SKILL.md +145 -0
  264. package/references/front-demo/.editorconfig +9 -0
  265. package/references/front-demo/.gitattributes +1 -0
  266. package/references/front-demo/.playwright-mcp/page-2026-06-10T08-21-21-503Z.yml +7 -0
  267. package/references/front-demo/.playwright-mcp/page-2026-06-10T10-02-33-237Z.yml +4 -0
  268. package/references/front-demo/.prettierrc.json +6 -0
  269. package/references/front-demo/README.md +39 -0
  270. package/references/front-demo/app-startup.png +0 -0
  271. package/references/front-demo/auto-imports.d.ts +10 -0
  272. package/references/front-demo/build-log.txt +214 -0
  273. package/references/front-demo/claude.md +62 -0
  274. package/references/front-demo/components.d.ts +95 -0
  275. package/references/front-demo/env.d.ts +1 -0
  276. package/references/front-demo/eslint.config.ts +22 -0
  277. package/references/front-demo/index.html +22 -0
  278. package/references/front-demo/package.json +77 -0
  279. package/references/front-demo/public/apiurls.js +70 -0
  280. package/references/front-demo/public/config.js +93 -0
  281. package/references/front-demo/public/favicon.ico +0 -0
  282. package/references/front-demo/src/App.vue +117 -0
  283. package/references/front-demo/src/api/app.ts +316 -0
  284. package/references/front-demo/src/api/attachment.ts +30 -0
  285. package/references/front-demo/src/api/base-exception/index.ts +87 -0
  286. package/references/front-demo/src/api/collect/index.ts +37 -0
  287. package/references/front-demo/src/api/comment/index.ts +44 -0
  288. package/references/front-demo/src/api/dashboard/index.ts +83 -0
  289. package/references/front-demo/src/api/dataImport.ts +97 -0
  290. package/references/front-demo/src/api/dingding/index.ts +43 -0
  291. package/references/front-demo/src/api/export.ts +25 -0
  292. package/references/front-demo/src/api/forecast/forecast-order.ts +42 -0
  293. package/references/front-demo/src/api/forecast/forecastChangeOrder.ts +54 -0
  294. package/references/front-demo/src/api/forecast/forecastConfig.ts +30 -0
  295. package/references/front-demo/src/api/forecast/forecastOrder.ts +78 -0
  296. package/references/front-demo/src/api/home/index.ts +78 -0
  297. package/references/front-demo/src/api/letters/index.ts +93 -0
  298. package/references/front-demo/src/api/login.ts +140 -0
  299. package/references/front-demo/src/api/mdmCustomer/index.ts +77 -0
  300. package/references/front-demo/src/api/menu/index.ts +79 -0
  301. package/references/front-demo/src/api/multi-login/index.ts +36 -0
  302. package/references/front-demo/src/api/personalInformation/index.ts +9 -0
  303. package/references/front-demo/src/api/portal/index.ts +95 -0
  304. package/references/front-demo/src/api/practice/index.ts +32 -0
  305. package/references/front-demo/src/api/product-master-data/__tests__/product.spec.ts +114 -0
  306. package/references/front-demo/src/api/product-master-data/product.ts +158 -0
  307. package/references/front-demo/src/api/reset-password/index.ts +16 -0
  308. package/references/front-demo/src/api/system-manage/dataImport/index.ts +87 -0
  309. package/references/front-demo/src/api/system-manage/menu/index.ts +34 -0
  310. package/references/front-demo/src/api/system-manage/reverse-authorization/index.ts +18 -0
  311. package/references/front-demo/src/api/testMenu/demo1/index.ts +14 -0
  312. package/references/front-demo/src/api/testMenu/demo2/index.ts +0 -0
  313. package/references/front-demo/src/api/testMenu/leaveApplication/index.ts +53 -0
  314. package/references/front-demo/src/api/testMenu/testDemo/index.ts +66 -0
  315. package/references/front-demo/src/api/update/index.ts +43 -0
  316. package/references/front-demo/src/api/worktable/agenda.ts +19 -0
  317. package/references/front-demo/src/api/worktable/approved.ts +32 -0
  318. package/references/front-demo/src/api/worktable/entrusted.ts +92 -0
  319. package/references/front-demo/src/api/worktable/myProcess.ts +48 -0
  320. package/references/front-demo/src/api/worktable/startTask.ts +56 -0
  321. package/references/front-demo/src/api/worktable/tobeRead.ts +28 -0
  322. package/references/front-demo/src/api/wx-work/index.ts +43 -0
  323. package/references/front-demo/src/assets/images/404.png +0 -0
  324. package/references/front-demo/src/assets/images/404_cloud.png +0 -0
  325. package/references/front-demo/src/assets/images/compact_layout.png +0 -0
  326. package/references/front-demo/src/assets/images/dingding.png +0 -0
  327. package/references/front-demo/src/assets/images/feishu.png +0 -0
  328. package/references/front-demo/src/assets/images/hover.png +0 -0
  329. package/references/front-demo/src/assets/images/login_background.jpg +0 -0
  330. package/references/front-demo/src/assets/images/login_banner.jpg +0 -0
  331. package/references/front-demo/src/assets/images/logo.png +0 -0
  332. package/references/front-demo/src/assets/images/noData.png +0 -0
  333. package/references/front-demo/src/assets/images/no_data.png +0 -0
  334. package/references/front-demo/src/assets/images/normal_layout.png +0 -0
  335. package/references/front-demo/src/assets/images/qiyeweixin.png +0 -0
  336. package/references/front-demo/src/assets/images/sider-open.png +0 -0
  337. package/references/front-demo/src/assets/images/vertical.png +0 -0
  338. package/references/front-demo/src/assets/png/pass.png +0 -0
  339. package/references/front-demo/src/components/ActionButtons.vue +193 -0
  340. package/references/front-demo/src/components/GsIcon/index.ts +7 -0
  341. package/references/front-demo/src/components/GsIcon/index.vue +47 -0
  342. package/references/front-demo/src/components/GsIconDialog/icons.ts +2167 -0
  343. package/references/front-demo/src/components/GsIconDialog/index.ts +7 -0
  344. package/references/front-demo/src/components/GsIconDialog/index.vue +856 -0
  345. package/references/front-demo/src/components/GsUpload/GsOverloadText.vue +68 -0
  346. package/references/front-demo/src/components/GsUpload/attachmentList.vue +241 -0
  347. package/references/front-demo/src/components/GsUpload/copper.vue +117 -0
  348. package/references/front-demo/src/components/GsUpload/imgUpload.vue +382 -0
  349. package/references/front-demo/src/components/GsUpload/index.vue +468 -0
  350. package/references/front-demo/src/components/GsUpload/preview.vue +44 -0
  351. package/references/front-demo/src/components/GsUpload/utils.ts +151 -0
  352. package/references/front-demo/src/components/StatusTag.vue +110 -0
  353. package/references/front-demo/src/components/SvgIcon/index.ts +7 -0
  354. package/references/front-demo/src/components/SvgIcon/index.vue +39 -0
  355. package/references/front-demo/src/components/UploadImg/index.ts +7 -0
  356. package/references/front-demo/src/components/UploadImg/index.vue +292 -0
  357. package/references/front-demo/src/components/global-register.ts +25 -0
  358. package/references/front-demo/src/components/utils/index.ts +12 -0
  359. package/references/front-demo/src/config/index.js +64 -0
  360. package/references/front-demo/src/core/initMain.ts +97 -0
  361. package/references/front-demo/src/hooks/useApsSchedule.ts +79 -0
  362. package/references/front-demo/src/hooks/useForecastOrderForm.ts +139 -0
  363. package/references/front-demo/src/hooks/usePagination.ts +40 -0
  364. package/references/front-demo/src/hooks/useRoleBasedVisibility.ts +35 -0
  365. package/references/front-demo/src/icons/index.ts +6 -0
  366. package/references/front-demo/src/icons/svg/AssessmentInfo.svg +1 -0
  367. package/references/front-demo/src/icons/svg/BasicConfig.svg +1 -0
  368. package/references/front-demo/src/icons/svg/DataEase.svg +86 -0
  369. package/references/front-demo/src/icons/svg/PDF.svg +1 -0
  370. package/references/front-demo/src/icons/svg/account_box.svg +5 -0
  371. package/references/front-demo/src/icons/svg/add.svg +1 -0
  372. package/references/front-demo/src/icons/svg/alert.svg +8 -0
  373. package/references/front-demo/src/icons/svg/alertlist.svg +18 -0
  374. package/references/front-demo/src/icons/svg/all-msg.svg +1 -0
  375. package/references/front-demo/src/icons/svg/analysis.svg +1 -0
  376. package/references/front-demo/src/icons/svg/app.svg +1 -0
  377. package/references/front-demo/src/icons/svg/assPersonnel.svg +1 -0
  378. package/references/front-demo/src/icons/svg/assessment.svg +1 -0
  379. package/references/front-demo/src/icons/svg/bar-horizontal.svg +1 -0
  380. package/references/front-demo/src/icons/svg/bar-stack-horizontal.svg +1 -0
  381. package/references/front-demo/src/icons/svg/bar-stack.svg +1 -0
  382. package/references/front-demo/src/icons/svg/bar.svg +1 -0
  383. package/references/front-demo/src/icons/svg/basicalgorithm.svg +1 -0
  384. package/references/front-demo/src/icons/svg/battery.svg +1 -0
  385. package/references/front-demo/src/icons/svg/bbgl.svg +1 -0
  386. package/references/front-demo/src/icons/svg/bell.svg +5 -0
  387. package/references/front-demo/src/icons/svg/bfcx.svg +1 -0
  388. package/references/front-demo/src/icons/svg/bjqd.svg +1 -0
  389. package/references/front-demo/src/icons/svg/bjxhtj.svg +1 -0
  390. package/references/front-demo/src/icons/svg/bjxhxq.svg +1 -0
  391. package/references/front-demo/src/icons/svg/bmll.svg +1 -0
  392. package/references/front-demo/src/icons/svg/bmtl.svg +1 -0
  393. package/references/front-demo/src/icons/svg/bqcj.svg +1 -0
  394. package/references/front-demo/src/icons/svg/bqmbgl.svg +1 -0
  395. package/references/front-demo/src/icons/svg/buddle-map.svg +1 -0
  396. package/references/front-demo/src/icons/svg/bug.svg +1 -0
  397. package/references/front-demo/src/icons/svg/bygd.svg +1 -0
  398. package/references/front-demo/src/icons/svg/bz.svg +1 -0
  399. package/references/front-demo/src/icons/svg/bzgl.svg +1 -0
  400. package/references/front-demo/src/icons/svg/characteristics.svg +1 -0
  401. package/references/front-demo/src/icons/svg/chart-mix.svg +1 -0
  402. package/references/front-demo/src/icons/svg/checkbox-checked.svg +5 -0
  403. package/references/front-demo/src/icons/svg/checkimage.svg +1 -0
  404. package/references/front-demo/src/icons/svg/ck.svg +1 -0
  405. package/references/front-demo/src/icons/svg/classifymark.svg +1 -0
  406. package/references/front-demo/src/icons/svg/closeEyes.svg +15 -0
  407. package/references/front-demo/src/icons/svg/club.svg +1 -0
  408. package/references/front-demo/src/icons/svg/collector.svg +1 -0
  409. package/references/front-demo/src/icons/svg/collectormanage.svg +1 -0
  410. package/references/front-demo/src/icons/svg/crkdcx.svg +1 -0
  411. package/references/front-demo/src/icons/svg/dashboard-collector.svg +38 -0
  412. package/references/front-demo/src/icons/svg/dashboard-device.svg +40 -0
  413. package/references/front-demo/src/icons/svg/dashboard-gateway.svg +38 -0
  414. package/references/front-demo/src/icons/svg/dashboard-warning.svg +40 -0
  415. package/references/front-demo/src/icons/svg/dashboard.svg +1 -0
  416. package/references/front-demo/src/icons/svg/database.svg +1 -0
  417. package/references/front-demo/src/icons/svg/dataset-task.svg +1 -0
  418. package/references/front-demo/src/icons/svg/datasource.svg +1 -0
  419. package/references/front-demo/src/icons/svg/db.svg +1 -0
  420. package/references/front-demo/src/icons/svg/ddgl.svg +1 -0
  421. package/references/front-demo/src/icons/svg/ddycjk.svg +1 -0
  422. package/references/front-demo/src/icons/svg/default.svg +1 -0
  423. package/references/front-demo/src/icons/svg/definition.svg +1 -0
  424. package/references/front-demo/src/icons/svg/depassessment.svg +1 -0
  425. package/references/front-demo/src/icons/svg/dept.svg +1 -0
  426. package/references/front-demo/src/icons/svg/device.svg +1 -0
  427. package/references/front-demo/src/icons/svg/devicebig.svg +1 -0
  428. package/references/front-demo/src/icons/svg/devicegroup.svg +1 -0
  429. package/references/front-demo/src/icons/svg/devicelist.svg +1 -0
  430. package/references/front-demo/src/icons/svg/devicemanage.svg +1 -0
  431. package/references/front-demo/src/icons/svg/deviceparam.svg +1 -0
  432. package/references/front-demo/src/icons/svg/devicetype.svg +1 -0
  433. package/references/front-demo/src/icons/svg/diagnose.svg +1 -0
  434. package/references/front-demo/src/icons/svg/diagnoseresult.svg +1 -0
  435. package/references/front-demo/src/icons/svg/distribution.svg +1 -0
  436. package/references/front-demo/src/icons/svg/doc.svg +1 -0
  437. package/references/front-demo/src/icons/svg/docs.svg +1 -0
  438. package/references/front-demo/src/icons/svg/dqby.svg +1 -0
  439. package/references/front-demo/src/icons/svg/dqbydb.svg +1 -0
  440. package/references/front-demo/src/icons/svg/dqbygc.svg +1 -0
  441. package/references/front-demo/src/icons/svg/dqbygd.svg +1 -0
  442. package/references/front-demo/src/icons/svg/dqbyjh.svg +1 -0
  443. package/references/front-demo/src/icons/svg/ds-api.svg +1 -0
  444. package/references/front-demo/src/icons/svg/ds-custom.svg +1 -0
  445. package/references/front-demo/src/icons/svg/ds-db.svg +1 -0
  446. package/references/front-demo/src/icons/svg/ds-excel.svg +1 -0
  447. package/references/front-demo/src/icons/svg/ds-sql.svg +1 -0
  448. package/references/front-demo/src/icons/svg/ds-union.svg +1 -0
  449. package/references/front-demo/src/icons/svg/dxjdb.svg +1 -0
  450. package/references/front-demo/src/icons/svg/dxjgc.svg +1 -0
  451. package/references/front-demo/src/icons/svg/dxjgd.svg +1 -0
  452. package/references/front-demo/src/icons/svg/dxjjh.svg +1 -0
  453. package/references/front-demo/src/icons/svg/dy.svg +1 -0
  454. package/references/front-demo/src/icons/svg/earth.svg +5 -0
  455. package/references/front-demo/src/icons/svg/echart-fullscreen.svg +1 -0
  456. package/references/front-demo/src/icons/svg/echart-nomalscreen.svg +1 -0
  457. package/references/front-demo/src/icons/svg/edit.svg +1 -0
  458. package/references/front-demo/src/icons/svg/email-task.svg +1 -0
  459. package/references/front-demo/src/icons/svg/envelop.svg +5 -0
  460. package/references/front-demo/src/icons/svg/equalizer.svg +5 -0
  461. package/references/front-demo/src/icons/svg/example.svg +1 -0
  462. package/references/front-demo/src/icons/svg/exclamationmark.svg +1 -0
  463. package/references/front-demo/src/icons/svg/exclamationmark2.svg +1 -0
  464. package/references/front-demo/src/icons/svg/exit-fullscreen.svg +1 -0
  465. package/references/front-demo/src/icons/svg/eye-open.svg +1 -0
  466. package/references/front-demo/src/icons/svg/eye.svg +1 -0
  467. package/references/front-demo/src/icons/svg/fav.svg +1 -0
  468. package/references/front-demo/src/icons/svg/field_location.svg +1 -0
  469. package/references/front-demo/src/icons/svg/field_text.svg +1 -0
  470. package/references/front-demo/src/icons/svg/field_time.svg +1 -0
  471. package/references/front-demo/src/icons/svg/field_value.svg +1 -0
  472. package/references/front-demo/src/icons/svg/folder.svg +1 -0
  473. package/references/front-demo/src/icons/svg/form.svg +1 -0
  474. package/references/front-demo/src/icons/svg/fullscreen.svg +1 -0
  475. package/references/front-demo/src/icons/svg/funnel.svg +1 -0
  476. package/references/front-demo/src/icons/svg/gateway.svg +1 -0
  477. package/references/front-demo/src/icons/svg/gatewaymanage.svg +16 -0
  478. package/references/front-demo/src/icons/svg/gauge.svg +1 -0
  479. package/references/front-demo/src/icons/svg/gdgl.svg +1 -0
  480. package/references/front-demo/src/icons/svg/gdll.svg +1 -0
  481. package/references/front-demo/src/icons/svg/gdtl.svg +1 -0
  482. package/references/front-demo/src/icons/svg/gdwcqk.svg +1 -0
  483. package/references/front-demo/src/icons/svg/gdwcxq.svg +1 -0
  484. package/references/front-demo/src/icons/svg/gnwz.svg +1 -0
  485. package/references/front-demo/src/icons/svg/gs-add.svg +14 -0
  486. package/references/front-demo/src/icons/svg/gs-change.svg +18 -0
  487. package/references/front-demo/src/icons/svg/gs-choose-icon.svg +23 -0
  488. package/references/front-demo/src/icons/svg/gs-close.svg +15 -0
  489. package/references/front-demo/src/icons/svg/gs-delete.svg +19 -0
  490. package/references/front-demo/src/icons/svg/gs-down.svg +12 -0
  491. package/references/front-demo/src/icons/svg/gs-edit.svg +23 -0
  492. package/references/front-demo/src/icons/svg/gs-edit2.svg +18 -0
  493. package/references/front-demo/src/icons/svg/gs-page.svg +14 -0
  494. package/references/front-demo/src/icons/svg/gs-resize.svg +12 -0
  495. package/references/front-demo/src/icons/svg/gs-select.svg +15 -0
  496. package/references/front-demo/src/icons/svg/gzbx.svg +1 -0
  497. package/references/front-demo/src/icons/svg/gzgd.svg +1 -0
  498. package/references/front-demo/src/icons/svg/gzk.svg +1 -0
  499. package/references/front-demo/src/icons/svg/gzzd.svg +1 -0
  500. package/references/front-demo/src/icons/svg/head.svg +13 -0
  501. package/references/front-demo/src/icons/svg/iconfont.svg +71 -0
  502. package/references/front-demo/src/icons/svg/im_message.svg +1 -0
  503. package/references/front-demo/src/icons/svg/indexdefine.svg +1 -0
  504. package/references/front-demo/src/icons/svg/inner-join.svg +1 -0
  505. package/references/front-demo/src/icons/svg/international.svg +1 -0
  506. package/references/front-demo/src/icons/svg/jcsj.svg +1 -0
  507. package/references/front-demo/src/icons/svg/jhjxgd.svg +1 -0
  508. package/references/front-demo/src/icons/svg/jilu.svg +1 -0
  509. package/references/front-demo/src/icons/svg/jldw.svg +1 -0
  510. package/references/front-demo/src/icons/svg/jscsfp.svg +1 -0
  511. package/references/front-demo/src/icons/svg/jscswh.svg +1 -0
  512. package/references/front-demo/src/icons/svg/kccx.svg +1 -0
  513. package/references/front-demo/src/icons/svg/kcpd.svg +1 -0
  514. package/references/front-demo/src/icons/svg/konwledgelist.svg +1 -0
  515. package/references/front-demo/src/icons/svg/kucun.svg +1 -0
  516. package/references/front-demo/src/icons/svg/language.svg +1 -0
  517. package/references/front-demo/src/icons/svg/left-join.svg +1 -0
  518. package/references/front-demo/src/icons/svg/leftBack.svg +15 -0
  519. package/references/front-demo/src/icons/svg/line-stack.svg +1 -0
  520. package/references/front-demo/src/icons/svg/line.svg +1 -0
  521. package/references/front-demo/src/icons/svg/link.svg +1 -0
  522. package/references/front-demo/src/icons/svg/liquid.svg +1 -0
  523. package/references/front-demo/src/icons/svg/list.svg +5 -0
  524. package/references/front-demo/src/icons/svg/location2.svg +5 -0
  525. package/references/front-demo/src/icons/svg/lock_closed.svg +1 -0
  526. package/references/front-demo/src/icons/svg/lock_open.svg +1 -0
  527. package/references/front-demo/src/icons/svg/logo.svg +32 -0
  528. package/references/front-demo/src/icons/svg/map.svg +1 -0
  529. package/references/front-demo/src/icons/svg/map_old.svg +1 -0
  530. package/references/front-demo/src/icons/svg/menu.svg +1 -0
  531. package/references/front-demo/src/icons/svg/message.svg +1 -0
  532. package/references/front-demo/src/icons/svg/messaged.svg +1 -0
  533. package/references/front-demo/src/icons/svg/meter.svg +5 -0
  534. package/references/front-demo/src/icons/svg/mobile.svg +5 -0
  535. package/references/front-demo/src/icons/svg/model.svg +1 -0
  536. package/references/front-demo/src/icons/svg/money.svg +1 -0
  537. package/references/front-demo/src/icons/svg/more_v.svg +1 -0
  538. package/references/front-demo/src/icons/svg/msg-setting.svg +1 -0
  539. package/references/front-demo/src/icons/svg/mttr&mtbf.svg +1 -0
  540. package/references/front-demo/src/icons/svg/multiplemp.svg +1 -0
  541. package/references/front-demo/src/icons/svg/myassessment.svg +1 -0
  542. package/references/front-demo/src/icons/svg/nested.svg +1 -0
  543. package/references/front-demo/src/icons/svg/new-message.svg +5 -0
  544. package/references/front-demo/src/icons/svg/no-join.svg +1 -0
  545. package/references/front-demo/src/icons/svg/normal-fx.svg +1 -0
  546. package/references/front-demo/src/icons/svg/notification.svg +1 -0
  547. package/references/front-demo/src/icons/svg/openEyes.svg +12 -0
  548. package/references/front-demo/src/icons/svg/openai.svg +1 -0
  549. package/references/front-demo/src/icons/svg/panel.svg +1 -0
  550. package/references/front-demo/src/icons/svg/password.svg +1 -0
  551. package/references/front-demo/src/icons/svg/people.svg +1 -0
  552. package/references/front-demo/src/icons/svg/peoples.svg +1 -0
  553. package/references/front-demo/src/icons/svg/pie-rose.svg +1 -0
  554. package/references/front-demo/src/icons/svg/pie.svg +1 -0
  555. package/references/front-demo/src/icons/svg/plus.svg +5 -0
  556. package/references/front-demo/src/icons/svg/podcast.svg +5 -0
  557. package/references/front-demo/src/icons/svg/preview.svg +1 -0
  558. package/references/front-demo/src/icons/svg/qrcode.svg +5 -0
  559. package/references/front-demo/src/icons/svg/radar.svg +1 -0
  560. package/references/front-demo/src/icons/svg/readed-msg.svg +1 -0
  561. package/references/front-demo/src/icons/svg/remove.svg +1 -0
  562. package/references/front-demo/src/icons/svg/rhdb.svg +1 -0
  563. package/references/front-demo/src/icons/svg/rhgc.svg +1 -0
  564. package/references/front-demo/src/icons/svg/rhgd.svg +1 -0
  565. package/references/front-demo/src/icons/svg/right-join.svg +1 -0
  566. package/references/front-demo/src/icons/svg/role.svg +1 -0
  567. package/references/front-demo/src/icons/svg/rulelist.svg +1 -0
  568. package/references/front-demo/src/icons/svg/runconfig.svg +1 -0
  569. package/references/front-demo/src/icons/svg/sbgzlbb.svg +1 -0
  570. package/references/front-demo/src/icons/svg/sbqy.svg +1 -0
  571. package/references/front-demo/src/icons/svg/sbrhjh.svg +1 -0
  572. package/references/front-demo/src/icons/svg/sbwhl.svg +1 -0
  573. package/references/front-demo/src/icons/svg/scatter.svg +1 -0
  574. package/references/front-demo/src/icons/svg/scene.svg +1 -0
  575. package/references/front-demo/src/icons/svg/shoppingCard.svg +1 -0
  576. package/references/front-demo/src/icons/svg/shouqi.svg +13 -0
  577. package/references/front-demo/src/icons/svg/singlemp.svg +1 -0
  578. package/references/front-demo/src/icons/svg/size.svg +1 -0
  579. package/references/front-demo/src/icons/svg/slimHead.svg +12 -0
  580. package/references/front-demo/src/icons/svg/sort-asc.svg +1 -0
  581. package/references/front-demo/src/icons/svg/sort-desc.svg +1 -0
  582. package/references/front-demo/src/icons/svg/standard.svg +1 -0
  583. package/references/front-demo/src/icons/svg/star.svg +1 -0
  584. package/references/front-demo/src/icons/svg/stats-bars.svg +5 -0
  585. package/references/front-demo/src/icons/svg/suffix-obj.svg +1 -0
  586. package/references/front-demo/src/icons/svg/sys-tools.svg +1 -0
  587. package/references/front-demo/src/icons/svg/system.svg +1 -0
  588. package/references/front-demo/src/icons/svg/table-info.svg +1 -0
  589. package/references/front-demo/src/icons/svg/table-normal.svg +1 -0
  590. package/references/front-demo/src/icons/svg/table-pivot.svg +1 -0
  591. package/references/front-demo/src/icons/svg/table.svg +1 -0
  592. package/references/front-demo/src/icons/svg/taizhang.svg +1 -0
  593. package/references/front-demo/src/icons/svg/task.svg +1 -0
  594. package/references/front-demo/src/icons/svg/tenant.svg +1 -0
  595. package/references/front-demo/src/icons/svg/text.svg +1 -0
  596. package/references/front-demo/src/icons/svg/tjqq.svg +1 -0
  597. package/references/front-demo/src/icons/svg/tree-company.svg +1 -0
  598. package/references/front-demo/src/icons/svg/tree-department.svg +1 -0
  599. package/references/front-demo/src/icons/svg/tree-device.svg +1 -0
  600. package/references/front-demo/src/icons/svg/tree-organization.svg +1 -0
  601. package/references/front-demo/src/icons/svg/tree.svg +1 -0
  602. package/references/front-demo/src/icons/svg/treemap.svg +1 -0
  603. package/references/front-demo/src/icons/svg/undefinedata.svg +1 -0
  604. package/references/front-demo/src/icons/svg/unread-msg.svg +1 -0
  605. package/references/front-demo/src/icons/svg/user-check.svg +6 -0
  606. package/references/front-demo/src/icons/svg/user.svg +1 -0
  607. package/references/front-demo/src/icons/svg/users.svg +6 -0
  608. package/references/front-demo/src/icons/svg/warn-tre.svg +1 -0
  609. package/references/front-demo/src/icons/svg/waterfall.svg +1 -0
  610. package/references/front-demo/src/icons/svg/wdgzt.svg +1 -0
  611. package/references/front-demo/src/icons/svg/wdlc.svg +1 -0
  612. package/references/front-demo/src/icons/svg/web-msg.svg +1 -0
  613. package/references/front-demo/src/icons/svg/wlbm.svg +1 -0
  614. package/references/front-demo/src/icons/svg/wlfl.svg +1 -0
  615. package/references/front-demo/src/icons/svg/wlgl.svg +1 -0
  616. package/references/front-demo/src/icons/svg/word-cloud.svg +1 -0
  617. package/references/front-demo/src/icons/svg/wtsp.svg +1 -0
  618. package/references/front-demo/src/icons/svg/wxdb.svg +1 -0
  619. package/references/front-demo/src/icons/svg/wxgc.svg +1 -0
  620. package/references/front-demo/src/icons/svg/xiaoxi.svg +13 -0
  621. package/references/front-demo/src/icons/svg/xyldr.svg +1 -0
  622. package/references/front-demo/src/icons/svg/ysp.svg +1 -0
  623. package/references/front-demo/src/icons/svg/yxgl.svg +1 -0
  624. package/references/front-demo/src/icons/svg/zcfbjzttj.svg +1 -0
  625. package/references/front-demo/src/icons/svg/zcfl.svg +1 -0
  626. package/references/front-demo/src/icons/svg/zcgl.svg +1 -0
  627. package/references/front-demo/src/icons/svg/zclk.svg +1 -0
  628. package/references/front-demo/src/icons/svg/zcll.svg +1 -0
  629. package/references/front-demo/src/icons/svg/zclx.svg +1 -0
  630. package/references/front-demo/src/icons/svg/zcpd.svg +1 -0
  631. package/references/front-demo/src/icons/svg/zctjbb.svg +1 -0
  632. package/references/front-demo/src/icons/svg/zcz.svg +1 -0
  633. package/references/front-demo/src/icons/svg/zhankai.svg +13 -0
  634. package/references/front-demo/src/icons/svg/zichan.svg +1 -0
  635. package/references/front-demo/src/icons/svg/zxck.svg +1 -0
  636. package/references/front-demo/src/icons/svg/zxrk.svg +1 -0
  637. package/references/front-demo/src/lang/element-lang.ts +26 -0
  638. package/references/front-demo/src/lang/en-us.ts +146 -0
  639. package/references/front-demo/src/lang/hu-hu.ts +1141 -0
  640. package/references/front-demo/src/lang/index.ts +108 -0
  641. package/references/front-demo/src/lang/modules/button/en-us.ts +158 -0
  642. package/references/front-demo/src/lang/modules/button/zh-cn.ts +157 -0
  643. package/references/front-demo/src/lang/modules/button/zh-tw.ts +157 -0
  644. package/references/front-demo/src/lang/modules/customizeTable/en-us.ts +56 -0
  645. package/references/front-demo/src/lang/modules/customizeTable/zh-cn.ts +55 -0
  646. package/references/front-demo/src/lang/modules/customizeTable/zh-tw.ts +55 -0
  647. package/references/front-demo/src/lang/modules/exportData/en-us.ts +19 -0
  648. package/references/front-demo/src/lang/modules/exportData/zh-cn.ts +19 -0
  649. package/references/front-demo/src/lang/modules/exportData/zh-tw.ts +19 -0
  650. package/references/front-demo/src/lang/modules/exportHistroy/en-us.ts +10 -0
  651. package/references/front-demo/src/lang/modules/exportHistroy/zh-cn.ts +10 -0
  652. package/references/front-demo/src/lang/modules/exportHistroy/zh-tw.ts +10 -0
  653. package/references/front-demo/src/lang/modules/forecast-order/en-us.ts +412 -0
  654. package/references/front-demo/src/lang/modules/forecast-order/zh-cn.ts +413 -0
  655. package/references/front-demo/src/lang/modules/forecast-order/zh-tw.ts +410 -0
  656. package/references/front-demo/src/lang/modules/gsReport/en-us.ts +41 -0
  657. package/references/front-demo/src/lang/modules/gsReport/zh-cn.ts +41 -0
  658. package/references/front-demo/src/lang/modules/gsReport/zh-tw.ts +41 -0
  659. package/references/front-demo/src/lang/modules/gsUploadFile/en-us.ts +10 -0
  660. package/references/front-demo/src/lang/modules/gsUploadFile/zh-cn.ts +10 -0
  661. package/references/front-demo/src/lang/modules/gsUploadFile/zh-tw.ts +10 -0
  662. package/references/front-demo/src/lang/modules/home/en-us.ts +19 -0
  663. package/references/front-demo/src/lang/modules/home/zh-cn.ts +19 -0
  664. package/references/front-demo/src/lang/modules/home/zh-tw.ts +19 -0
  665. package/references/front-demo/src/lang/modules/importData/en-us.ts +42 -0
  666. package/references/front-demo/src/lang/modules/importData/zh-cn.ts +42 -0
  667. package/references/front-demo/src/lang/modules/importData/zh-tw.ts +42 -0
  668. package/references/front-demo/src/lang/modules/importHistroy/en-us.ts +9 -0
  669. package/references/front-demo/src/lang/modules/importHistroy/zh-cn.ts +9 -0
  670. package/references/front-demo/src/lang/modules/importHistroy/zh-tw.ts +9 -0
  671. package/references/front-demo/src/lang/modules/js/en-us.ts +63 -0
  672. package/references/front-demo/src/lang/modules/js/zh-cn.ts +60 -0
  673. package/references/front-demo/src/lang/modules/js/zh-tw.ts +60 -0
  674. package/references/front-demo/src/lang/modules/letters/en-us.ts +21 -0
  675. package/references/front-demo/src/lang/modules/letters/zh-cn.ts +22 -0
  676. package/references/front-demo/src/lang/modules/letters/zh-tw.ts +22 -0
  677. package/references/front-demo/src/lang/modules/login/en-us.ts +68 -0
  678. package/references/front-demo/src/lang/modules/login/zh-cn.ts +64 -0
  679. package/references/front-demo/src/lang/modules/login/zh-tw.ts +64 -0
  680. package/references/front-demo/src/lang/modules/mdmCustomer/en-us.ts +81 -0
  681. package/references/front-demo/src/lang/modules/mdmCustomer/zh-cn.ts +92 -0
  682. package/references/front-demo/src/lang/modules/mdmCustomer/zh-tw.ts +81 -0
  683. package/references/front-demo/src/lang/modules/menu/en-us.ts +429 -0
  684. package/references/front-demo/src/lang/modules/menu/zh-cn.ts +423 -0
  685. package/references/front-demo/src/lang/modules/menu/zh-tw.ts +423 -0
  686. package/references/front-demo/src/lang/modules/message/en-us.ts +4 -0
  687. package/references/front-demo/src/lang/modules/message/zh-cn.ts +4 -0
  688. package/references/front-demo/src/lang/modules/message/zh-tw.ts +4 -0
  689. package/references/front-demo/src/lang/modules/otherLang/en-us.ts +63 -0
  690. package/references/front-demo/src/lang/modules/otherLang/zh-cn.ts +60 -0
  691. package/references/front-demo/src/lang/modules/otherLang/zh-tw.ts +58 -0
  692. package/references/front-demo/src/lang/modules/person/en-us.ts +27 -0
  693. package/references/front-demo/src/lang/modules/person/zh-cn.ts +27 -0
  694. package/references/front-demo/src/lang/modules/person/zh-tw.ts +27 -0
  695. package/references/front-demo/src/lang/modules/product-master-data/en-us.ts +65 -0
  696. package/references/front-demo/src/lang/modules/product-master-data/zh-cn.ts +82 -0
  697. package/references/front-demo/src/lang/modules/product-master-data/zh-tw.ts +82 -0
  698. package/references/front-demo/src/lang/modules/source_data/en-us.ts +49 -0
  699. package/references/front-demo/src/lang/modules/source_data/zh-cn.ts +41 -0
  700. package/references/front-demo/src/lang/modules/source_data/zh-tw.ts +41 -0
  701. package/references/front-demo/src/lang/modules/theme/en-us.ts +22 -0
  702. package/references/front-demo/src/lang/modules/theme/zh-cn.ts +22 -0
  703. package/references/front-demo/src/lang/modules/theme/zh-tw.ts +23 -0
  704. package/references/front-demo/src/lang/modules/third/en-us.ts +10 -0
  705. package/references/front-demo/src/lang/modules/third/zh-cn.ts +9 -0
  706. package/references/front-demo/src/lang/modules/third/zh-tw.ts +9 -0
  707. package/references/front-demo/src/lang/modules/toast/en-us.ts +21 -0
  708. package/references/front-demo/src/lang/modules/toast/zh-cn.ts +21 -0
  709. package/references/front-demo/src/lang/modules/toast/zh-tw.ts +21 -0
  710. package/references/front-demo/src/lang/modules/uploadDocument/en-us.ts +6 -0
  711. package/references/front-demo/src/lang/modules/uploadDocument/zh-cn.ts +6 -0
  712. package/references/front-demo/src/lang/modules/uploadDocument/zh-tw.ts +6 -0
  713. package/references/front-demo/src/lang/utils.ts +20 -0
  714. package/references/front-demo/src/lang/vi-vn.ts +1140 -0
  715. package/references/front-demo/src/lang/zh-cn.ts +180 -0
  716. package/references/front-demo/src/lang/zh-tw.ts +147 -0
  717. package/references/front-demo/src/main.ts +25 -0
  718. package/references/front-demo/src/mock/forecast/index.ts +1 -0
  719. package/references/front-demo/src/mock/forecast/router.ts +824 -0
  720. package/references/front-demo/src/mock/forecast/seed.ts +577 -0
  721. package/references/front-demo/src/mock/index.ts +74 -0
  722. package/references/front-demo/src/mock/mdmCustomer/index.ts +1 -0
  723. package/references/front-demo/src/mock/mdmCustomer/router.ts +468 -0
  724. package/references/front-demo/src/mock/mdmCustomer/seed.ts +359 -0
  725. package/references/front-demo/src/mock/platform/router.ts +119 -0
  726. package/references/front-demo/src/mock/platform/seed.ts +145 -0
  727. package/references/front-demo/src/mock/storage.ts +55 -0
  728. package/references/front-demo/src/permission.ts +448 -0
  729. package/references/front-demo/src/plugins/i18n.ts +3 -0
  730. package/references/front-demo/src/plugins/pinia.ts +7 -0
  731. package/references/front-demo/src/qiankun.js +114 -0
  732. package/references/front-demo/src/router/index.ts +132 -0
  733. package/references/front-demo/src/router/modules/forecast-order.ts +68 -0
  734. package/references/front-demo/src/store/index.ts +43 -0
  735. package/references/front-demo/src/store/modules/app/actions.ts +137 -0
  736. package/references/front-demo/src/store/modules/app/getters.ts +16 -0
  737. package/references/front-demo/src/store/modules/app/index.ts +52 -0
  738. package/references/front-demo/src/store/modules/app/mutations.ts +108 -0
  739. package/references/front-demo/src/store/modules/forecast-order/__tests__/forecastOrderDetailStore.spec.ts +379 -0
  740. package/references/front-demo/src/store/modules/forecast-order/__tests__/forecastOrderListStore.spec.ts +297 -0
  741. package/references/front-demo/src/store/modules/forecast-order/changeOrderFormStore.ts +245 -0
  742. package/references/front-demo/src/store/modules/forecast-order/configStore.ts +157 -0
  743. package/references/front-demo/src/store/modules/forecast-order/forecastOrderDetailStore.ts +243 -0
  744. package/references/front-demo/src/store/modules/forecast-order/forecastOrderFormStore.ts +281 -0
  745. package/references/front-demo/src/store/modules/forecast-order/forecastOrderListStore.ts +101 -0
  746. package/references/front-demo/src/store/modules/forecast-order/index.ts +5 -0
  747. package/references/front-demo/src/store/modules/mdmCustomer/__tests__/customerStore.spec.ts +206 -0
  748. package/references/front-demo/src/store/modules/mdmCustomer/customerStore.ts +303 -0
  749. package/references/front-demo/src/store/modules/permission/actions.ts +11 -0
  750. package/references/front-demo/src/store/modules/permission/getters.ts +5 -0
  751. package/references/front-demo/src/store/modules/permission/index.ts +14 -0
  752. package/references/front-demo/src/store/modules/permission/mutations.ts +13 -0
  753. package/references/front-demo/src/store/modules/product-master-data/__tests__/productListStore.spec.ts +378 -0
  754. package/references/front-demo/src/store/modules/product-master-data/productListStore.ts +333 -0
  755. package/references/front-demo/src/store/modules/tagsView/actions.ts +87 -0
  756. package/references/front-demo/src/store/modules/tagsView/getters.ts +6 -0
  757. package/references/front-demo/src/store/modules/tagsView/index.ts +18 -0
  758. package/references/front-demo/src/store/modules/tagsView/mutations.ts +118 -0
  759. package/references/front-demo/src/store/modules/theme/actions.ts +77 -0
  760. package/references/front-demo/src/store/modules/theme/getters.ts +10 -0
  761. package/references/front-demo/src/store/modules/theme/index.ts +27 -0
  762. package/references/front-demo/src/store/modules/theme/mutations.ts +28 -0
  763. package/references/front-demo/src/store/modules/user/actions.ts +243 -0
  764. package/references/front-demo/src/store/modules/user/getters.ts +10 -0
  765. package/references/front-demo/src/store/modules/user/index.ts +44 -0
  766. package/references/front-demo/src/store/modules/user/mutations.ts +104 -0
  767. package/references/front-demo/src/store/piniaToVuex/index.ts +283 -0
  768. package/references/front-demo/src/stores/counter.ts +12 -0
  769. package/references/front-demo/src/styles/element-plus.scss +937 -0
  770. package/references/front-demo/src/styles/global.scss +826 -0
  771. package/references/front-demo/src/styles/iconfont/demo.css +539 -0
  772. package/references/front-demo/src/styles/iconfont/iconfont.css +68 -0
  773. package/references/front-demo/src/styles/iconfont/iconfont.js +63 -0
  774. package/references/front-demo/src/styles/iconfont/iconfont.ttf +0 -0
  775. package/references/front-demo/src/styles/index.scss +116 -0
  776. package/references/front-demo/src/styles/mixin.scss +78 -0
  777. package/references/front-demo/src/styles/theme/black/content-management.scss +11 -0
  778. package/references/front-demo/src/styles/theme/black/dynamic-report.scss +31 -0
  779. package/references/front-demo/src/styles/theme/black/form-design.scss +181 -0
  780. package/references/front-demo/src/styles/theme/black/open-api.scss +118 -0
  781. package/references/front-demo/src/styles/theme/black/platform.scss +57 -0
  782. package/references/front-demo/src/styles/theme/black/process-manage.scss +48 -0
  783. package/references/front-demo/src/styles/theme/black/rent-mannage.scss +8 -0
  784. package/references/front-demo/src/styles/theme/black/schedule.scss +45 -0
  785. package/references/front-demo/src/styles/theme/black/service-management.scss +14 -0
  786. package/references/front-demo/src/styles/theme/black/system-manage.scss +144 -0
  787. package/references/front-demo/src/styles/theme/black.scss +1642 -0
  788. package/references/front-demo/src/styles/theme/default/index.scss +1 -0
  789. package/references/front-demo/src/styles/theme/default/menu.scss +199 -0
  790. package/references/front-demo/src/styles/transition.scss +107 -0
  791. package/references/front-demo/src/styles/variables.scss +66 -0
  792. package/references/front-demo/src/types/forecast-order/api.ts +44 -0
  793. package/references/front-demo/src/types/forecast-order/enums.ts +122 -0
  794. package/references/front-demo/src/types/forecast-order/forecastChangeOrder.ts +40 -0
  795. package/references/front-demo/src/types/forecast-order/forecastOrder.ts +98 -0
  796. package/references/front-demo/src/types/forecast-order/index.ts +43 -0
  797. package/references/front-demo/src/types/mdmCustomer/api.ts +26 -0
  798. package/references/front-demo/src/types/mdmCustomer/customer.ts +75 -0
  799. package/references/front-demo/src/types/product-master-data/api.ts +27 -0
  800. package/references/front-demo/src/types/product-master-data/product.ts +58 -0
  801. package/references/front-demo/src/utils/ArrayExtension.ts +175 -0
  802. package/references/front-demo/src/utils/app-mixin.ts +50 -0
  803. package/references/front-demo/src/utils/areas.ts +1712 -0
  804. package/references/front-demo/src/utils/auth.ts +336 -0
  805. package/references/front-demo/src/utils/base64.ts +231 -0
  806. package/references/front-demo/src/utils/browser-helper.ts +39 -0
  807. package/references/front-demo/src/utils/bus.ts +35 -0
  808. package/references/front-demo/src/utils/deprecated-utils.ts +116 -0
  809. package/references/front-demo/src/utils/errorHandler.ts +61 -0
  810. package/references/front-demo/src/utils/events.ts +59 -0
  811. package/references/front-demo/src/utils/forecastOrderActions.ts +117 -0
  812. package/references/front-demo/src/utils/i18nHelper.ts +24 -0
  813. package/references/front-demo/src/utils/index.ts +819 -0
  814. package/references/front-demo/src/utils/name-auth.ts +97 -0
  815. package/references/front-demo/src/utils/onlyMsgBox.ts +38 -0
  816. package/references/front-demo/src/utils/pinyinList.ts +417 -0
  817. package/references/front-demo/src/utils/request-utils.ts +277 -0
  818. package/references/front-demo/src/utils/request.ts +146 -0
  819. package/references/front-demo/src/utils/routeHelper.ts +66 -0
  820. package/references/front-demo/src/utils/statusTagHelper.ts +55 -0
  821. package/references/front-demo/src/utils/storage.ts +80 -0
  822. package/references/front-demo/src/utils/theme.ts +192 -0
  823. package/references/front-demo/src/utils/toPinYin.ts +34 -0
  824. package/references/front-demo/src/utils/tool.ts +7103 -0
  825. package/references/front-demo/src/utils/utilsFn.ts +73 -0
  826. package/references/front-demo/src/utils/validate.ts +110 -0
  827. package/references/front-demo/src/utils/watermark.ts +161 -0
  828. package/references/front-demo/src/utils/watermarkcompact.ts +180 -0
  829. package/references/front-demo/src/utils/wordRender.ts +100 -0
  830. package/references/front-demo/src/utils/ws.ts +42 -0
  831. package/references/front-demo/src/views/404.vue +245 -0
  832. package/references/front-demo/src/views/CollectButton/demand.vue +39 -0
  833. package/references/front-demo/src/views/CollectButton/dialog.vue +178 -0
  834. package/references/front-demo/src/views/CollectButton/index.vue +306 -0
  835. package/references/front-demo/src/views/FlowCharts/FormDemo.vue +236 -0
  836. package/references/front-demo/src/views/FlowCharts/components/ListDetailButton/index.vue +36 -0
  837. package/references/front-demo/src/views/FlowCharts/leaveApplication.vue +56 -0
  838. package/references/front-demo/src/views/FlowCharts/testForm.vue +56 -0
  839. package/references/front-demo/src/views/Password/index.vue +148 -0
  840. package/references/front-demo/src/views/authorize/components/ForgetPassword.vue +309 -0
  841. package/references/front-demo/src/views/authorize/components/FormLogin/components/VerificationDialog.vue +297 -0
  842. package/references/front-demo/src/views/authorize/components/FormLogin/index.vue +649 -0
  843. package/references/front-demo/src/views/authorize/index.vue +149 -0
  844. package/references/front-demo/src/views/dynamic-form/index.vue +42 -0
  845. package/references/front-demo/src/views/forecast-order/ChangeOrderEdit.vue +113 -0
  846. package/references/front-demo/src/views/forecast-order/ForecastOrderDetail.vue +732 -0
  847. package/references/front-demo/src/views/forecast-order/ForecastOrderEdit.vue +179 -0
  848. package/references/front-demo/src/views/forecast-order/__tests__/ChangeOrderEdit.spec.ts +157 -0
  849. package/references/front-demo/src/views/forecast-order/__tests__/ForecastOrderDetail.spec.ts +230 -0
  850. package/references/front-demo/src/views/forecast-order/__tests__/ForecastOrderE2E.spec.ts +607 -0
  851. package/references/front-demo/src/views/forecast-order/__tests__/ForecastOrderEdit.spec.ts +283 -0
  852. package/references/front-demo/src/views/forecast-order/__tests__/ForecastOrderList.spec.ts +428 -0
  853. package/references/front-demo/src/views/forecast-order/__tests__/Selectors.spec.ts +209 -0
  854. package/references/front-demo/src/views/forecast-order/components/ApproveChangeDialog.vue +165 -0
  855. package/references/front-demo/src/views/forecast-order/components/ChangeForm.vue +235 -0
  856. package/references/front-demo/src/views/forecast-order/components/CustomerSelector.vue +165 -0
  857. package/references/front-demo/src/views/forecast-order/components/ForecastOrderForm.vue +299 -0
  858. package/references/front-demo/src/views/forecast-order/components/ProductSelector.vue +167 -0
  859. package/references/front-demo/src/views/forecast-order/components/ReplyDialog.vue +170 -0
  860. package/references/front-demo/src/views/forecast-order/components/StatusFlowBar.vue +156 -0
  861. package/references/front-demo/src/views/forecast-order/components/TransferFoDialog.vue +97 -0
  862. package/references/front-demo/src/views/forecast-order/config/index.vue +205 -0
  863. package/references/front-demo/src/views/forecast-order/index.vue +539 -0
  864. package/references/front-demo/src/views/home-page/WorkTable.vue +116 -0
  865. package/references/front-demo/src/views/home-page/index.vue +14 -0
  866. package/references/front-demo/src/views/layout/Frame.vue +75 -0
  867. package/references/front-demo/src/views/layout/Layout.vue +186 -0
  868. package/references/front-demo/src/views/layout/MiddleView.vue +29 -0
  869. package/references/front-demo/src/views/layout/components/AppMain.vue +302 -0
  870. package/references/front-demo/src/views/layout/components/CompactTools/index.vue +59 -0
  871. package/references/front-demo/src/views/layout/components/Navbar/components/AVue.vue +34 -0
  872. package/references/front-demo/src/views/layout/components/Navbar/components/Gpt.vue +51 -0
  873. package/references/front-demo/src/views/layout/components/Navbar/components/Help.vue +52 -0
  874. package/references/front-demo/src/views/layout/components/Navbar/components/Locale.vue +143 -0
  875. package/references/front-demo/src/views/layout/components/Navbar/components/Message.vue +495 -0
  876. package/references/front-demo/src/views/layout/components/Navbar/components/NavbarMenu.vue +196 -0
  877. package/references/front-demo/src/views/layout/components/Navbar/components/Personal.vue +308 -0
  878. package/references/front-demo/src/views/layout/components/Navbar/components/Portal.vue +34 -0
  879. package/references/front-demo/src/views/layout/components/Navbar/components/SystemChange.vue +133 -0
  880. package/references/front-demo/src/views/layout/components/Navbar/components/Tablet.vue +206 -0
  881. package/references/front-demo/src/views/layout/components/Navbar/components/TenantChange.vue +186 -0
  882. package/references/front-demo/src/views/layout/components/Navbar/components/Theme.vue +429 -0
  883. package/references/front-demo/src/views/layout/components/Navbar/index.vue +220 -0
  884. package/references/front-demo/src/views/layout/components/Sidebar/components/CustomSliderMenu.vue +267 -0
  885. package/references/front-demo/src/views/layout/components/Sidebar/components/FetchMenuItem.vue +45 -0
  886. package/references/front-demo/src/views/layout/components/Sidebar/components/MenuItem.vue +135 -0
  887. package/references/front-demo/src/views/layout/components/Sidebar/components/MenuSearch.vue +102 -0
  888. package/references/front-demo/src/views/layout/components/Sidebar/components/SubMenu.js +190 -0
  889. package/references/front-demo/src/views/layout/components/Sidebar/components/SubMenu.vue +125 -0
  890. package/references/front-demo/src/views/layout/components/Sidebar/components/ToggleSidebar.vue +51 -0
  891. package/references/front-demo/src/views/layout/components/Sidebar/index.vue +464 -0
  892. package/references/front-demo/src/views/layout/components/TagsView.vue +683 -0
  893. package/references/front-demo/src/views/layout/components/chatGPT/image/chatgpt.png +0 -0
  894. package/references/front-demo/src/views/layout/components/chatGPT/image/knowledge_IT.png +0 -0
  895. package/references/front-demo/src/views/layout/components/chatGPT/image/knowledge_gushen.png +0 -0
  896. package/references/front-demo/src/views/layout/components/chatGPT/image/pmo_background.png +0 -0
  897. package/references/front-demo/src/views/layout/components/chatGPT/image/smile.png +0 -0
  898. package/references/front-demo/src/views/layout/components/chatGPT/image/stop.svg +1 -0
  899. package/references/front-demo/src/views/layout/components/chatGPT/image/titleIcon.png +0 -0
  900. package/references/front-demo/src/views/layout/components/chatGPT/index.js +7 -0
  901. package/references/front-demo/src/views/layout/components/chatGPT/index.vue +517 -0
  902. package/references/front-demo/src/views/layout/components/chatGPT/styles/index.scss +360 -0
  903. package/references/front-demo/src/views/layout/components/chatGPT/utils/gpt.js +29 -0
  904. package/references/front-demo/src/views/layout/components/chatGPT/utils/index.js +70 -0
  905. package/references/front-demo/src/views/layout/components/index.js +6 -0
  906. package/references/front-demo/src/views/layout/mixin/ResizeHandler.js +28 -0
  907. package/references/front-demo/src/views/layout/utils/dynamicFormHelper.js +44 -0
  908. package/references/front-demo/src/views/layout/utils/scroll.js +89 -0
  909. package/references/front-demo/src/views/letters/config/gridConfig.js +59 -0
  910. package/references/front-demo/src/views/letters/index.vue +401 -0
  911. package/references/front-demo/src/views/login/ForgetPassword.vue +425 -0
  912. package/references/front-demo/src/views/login/FormLogin.vue +1222 -0
  913. package/references/front-demo/src/views/login/ScanLogin.vue +256 -0
  914. package/references/front-demo/src/views/login/index.vue +432 -0
  915. package/references/front-demo/src/views/mdmCustomer/__tests__/CustomerList.spec.ts +90 -0
  916. package/references/front-demo/src/views/mdmCustomer/components/AddressFormDialog.vue +95 -0
  917. package/references/front-demo/src/views/mdmCustomer/components/ConfirmDialog.vue +37 -0
  918. package/references/front-demo/src/views/mdmCustomer/components/CustomerDetailDrawer.vue +118 -0
  919. package/references/front-demo/src/views/mdmCustomer/components/CustomerFormDialog.vue +254 -0
  920. package/references/front-demo/src/views/mdmCustomer/index.vue +397 -0
  921. package/references/front-demo/src/views/person-info/components/information.vue +99 -0
  922. package/references/front-demo/src/views/person-info/index.vue +28 -0
  923. package/references/front-demo/src/views/product-master-data/__tests__/ProductFormDialog.spec.ts +246 -0
  924. package/references/front-demo/src/views/product-master-data/__tests__/ProductList.spec.ts +423 -0
  925. package/references/front-demo/src/views/product-master-data/components/ConfirmDialog.vue +69 -0
  926. package/references/front-demo/src/views/product-master-data/components/ProductDetailDrawer.vue +140 -0
  927. package/references/front-demo/src/views/product-master-data/components/ProductFormDialog.vue +198 -0
  928. package/references/front-demo/src/views/product-master-data/index.vue +384 -0
  929. package/references/front-demo/src/views/sso/login/index.vue +128 -0
  930. package/references/front-demo/src/views/sso/multi-login/index.vue +95 -0
  931. package/references/front-demo/src/views/third-login/index.vue +73 -0
  932. package/references/front-demo/src/views/third-view.vue +86 -0
  933. package/references/front-demo/tsconfig.app.json +12 -0
  934. package/references/front-demo/tsconfig.json +11 -0
  935. package/references/front-demo/tsconfig.node.json +19 -0
  936. package/references/front-demo/vite.config.ts +56 -0
  937. package/references/front-demo/vitest.config.ts +35 -0
  938. package/references/python-end-standard/01-Python/345/220/216/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +372 -0
  939. package/references/python-end-standard/02-/346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/344/270/216/344/275/277/347/224/250/350/247/204/350/214/203.md +226 -0
  940. package/references/python-end-standard/03-Celery/345/274/202/346/255/245/344/273/273/345/212/241/350/247/204/350/214/203.md +237 -0
  941. package/references/python-end-standard/04-Redis/344/275/277/347/224/250/350/247/204/350/214/203.md +231 -0
  942. package/references/python-end-standard/index.md +12 -0
  943. package/references/web-ui/.editorconfig +9 -0
  944. package/references/web-ui/.gitattributes +1 -0
  945. package/references/web-ui/.prettierrc.json +6 -0
  946. package/references/web-ui/README.md +39 -0
  947. package/references/web-ui/auto-imports.d.ts +10 -0
  948. package/references/web-ui/components.d.ts +78 -0
  949. package/references/web-ui/env.d.ts +1 -0
  950. package/references/web-ui/eslint.config.ts +22 -0
  951. package/references/web-ui/index.html +22 -0
  952. package/references/web-ui/package.json +57 -0
  953. package/references/web-ui/public/apiurls.js +69 -0
  954. package/references/web-ui/public/config.js +93 -0
  955. package/references/web-ui/public/favicon.ico +0 -0
  956. package/references/web-ui/src/App.vue +117 -0
  957. package/references/web-ui/src/api/app.ts +298 -0
  958. package/references/web-ui/src/api/attachment.ts +30 -0
  959. package/references/web-ui/src/api/base-exception/index.ts +87 -0
  960. package/references/web-ui/src/api/collect/index.ts +37 -0
  961. package/references/web-ui/src/api/comment/index.ts +44 -0
  962. package/references/web-ui/src/api/dashboard/index.ts +83 -0
  963. package/references/web-ui/src/api/dataImport.ts +97 -0
  964. package/references/web-ui/src/api/dingding/index.ts +43 -0
  965. package/references/web-ui/src/api/export.ts +25 -0
  966. package/references/web-ui/src/api/home/index.ts +78 -0
  967. package/references/web-ui/src/api/iotBaseRole/index.ts +32 -0
  968. package/references/web-ui/src/api/iotBaseSystem/index.ts +32 -0
  969. package/references/web-ui/src/api/letters/index.ts +93 -0
  970. package/references/web-ui/src/api/login.ts +140 -0
  971. package/references/web-ui/src/api/menu/index.ts +79 -0
  972. package/references/web-ui/src/api/multi-login/index.ts +36 -0
  973. package/references/web-ui/src/api/personalInformation/index.ts +9 -0
  974. package/references/web-ui/src/api/portal/index.ts +95 -0
  975. package/references/web-ui/src/api/practice/index.ts +32 -0
  976. package/references/web-ui/src/api/reset-password/index.ts +16 -0
  977. package/references/web-ui/src/api/system-manage/dataImport/index.ts +87 -0
  978. package/references/web-ui/src/api/system-manage/menu/index.ts +34 -0
  979. package/references/web-ui/src/api/system-manage/reverse-authorization/index.ts +18 -0
  980. package/references/web-ui/src/api/testMenu/demo1/index.ts +14 -0
  981. package/references/web-ui/src/api/testMenu/demo2/index.ts +0 -0
  982. package/references/web-ui/src/api/testMenu/leaveApplication/index.ts +53 -0
  983. package/references/web-ui/src/api/testMenu/testDemo/index.ts +66 -0
  984. package/references/web-ui/src/api/update/index.ts +43 -0
  985. package/references/web-ui/src/api/worktable/agenda.ts +19 -0
  986. package/references/web-ui/src/api/worktable/approved.ts +32 -0
  987. package/references/web-ui/src/api/worktable/entrusted.ts +92 -0
  988. package/references/web-ui/src/api/worktable/myProcess.ts +48 -0
  989. package/references/web-ui/src/api/worktable/startTask.ts +56 -0
  990. package/references/web-ui/src/api/worktable/tobeRead.ts +28 -0
  991. package/references/web-ui/src/api/wx-work/index.ts +43 -0
  992. package/references/web-ui/src/assets/images/404.png +0 -0
  993. package/references/web-ui/src/assets/images/404_cloud.png +0 -0
  994. package/references/web-ui/src/assets/images/compact_layout.png +0 -0
  995. package/references/web-ui/src/assets/images/dingding.png +0 -0
  996. package/references/web-ui/src/assets/images/feishu.png +0 -0
  997. package/references/web-ui/src/assets/images/hover.png +0 -0
  998. package/references/web-ui/src/assets/images/login_background.jpg +0 -0
  999. package/references/web-ui/src/assets/images/login_banner.jpg +0 -0
  1000. package/references/web-ui/src/assets/images/logo.png +0 -0
  1001. package/references/web-ui/src/assets/images/noData.png +0 -0
  1002. package/references/web-ui/src/assets/images/no_data.png +0 -0
  1003. package/references/web-ui/src/assets/images/normal_layout.png +0 -0
  1004. package/references/web-ui/src/assets/images/qiyeweixin.png +0 -0
  1005. package/references/web-ui/src/assets/images/sider-open.png +0 -0
  1006. package/references/web-ui/src/assets/images/vertical.png +0 -0
  1007. package/references/web-ui/src/assets/png/pass.png +0 -0
  1008. package/references/web-ui/src/components/GsIcon/index.ts +7 -0
  1009. package/references/web-ui/src/components/GsIcon/index.vue +47 -0
  1010. package/references/web-ui/src/components/GsIconDialog/icons.ts +2167 -0
  1011. package/references/web-ui/src/components/GsIconDialog/index.ts +7 -0
  1012. package/references/web-ui/src/components/GsIconDialog/index.vue +856 -0
  1013. package/references/web-ui/src/components/GsUpload/GsOverloadText.vue +68 -0
  1014. package/references/web-ui/src/components/GsUpload/attachmentList.vue +241 -0
  1015. package/references/web-ui/src/components/GsUpload/copper.vue +117 -0
  1016. package/references/web-ui/src/components/GsUpload/imgUpload.vue +382 -0
  1017. package/references/web-ui/src/components/GsUpload/index.vue +468 -0
  1018. package/references/web-ui/src/components/GsUpload/preview.vue +44 -0
  1019. package/references/web-ui/src/components/GsUpload/utils.ts +151 -0
  1020. package/references/web-ui/src/components/SvgIcon/index.ts +7 -0
  1021. package/references/web-ui/src/components/SvgIcon/index.vue +39 -0
  1022. package/references/web-ui/src/components/UploadImg/index.ts +7 -0
  1023. package/references/web-ui/src/components/UploadImg/index.vue +292 -0
  1024. package/references/web-ui/src/components/global-register.ts +31 -0
  1025. package/references/web-ui/src/components/utils/index.ts +12 -0
  1026. package/references/web-ui/src/config/index.js +64 -0
  1027. package/references/web-ui/src/core/initMain.ts +89 -0
  1028. package/references/web-ui/src/icons/index.ts +5 -0
  1029. package/references/web-ui/src/icons/svg/AssessmentInfo.svg +1 -0
  1030. package/references/web-ui/src/icons/svg/BasicConfig.svg +1 -0
  1031. package/references/web-ui/src/icons/svg/DataEase.svg +86 -0
  1032. package/references/web-ui/src/icons/svg/PDF.svg +1 -0
  1033. package/references/web-ui/src/icons/svg/account_box.svg +5 -0
  1034. package/references/web-ui/src/icons/svg/add.svg +1 -0
  1035. package/references/web-ui/src/icons/svg/alert.svg +8 -0
  1036. package/references/web-ui/src/icons/svg/alertlist.svg +18 -0
  1037. package/references/web-ui/src/icons/svg/all-msg.svg +1 -0
  1038. package/references/web-ui/src/icons/svg/analysis.svg +1 -0
  1039. package/references/web-ui/src/icons/svg/app.svg +1 -0
  1040. package/references/web-ui/src/icons/svg/assPersonnel.svg +1 -0
  1041. package/references/web-ui/src/icons/svg/assessment.svg +1 -0
  1042. package/references/web-ui/src/icons/svg/bar-horizontal.svg +1 -0
  1043. package/references/web-ui/src/icons/svg/bar-stack-horizontal.svg +1 -0
  1044. package/references/web-ui/src/icons/svg/bar-stack.svg +1 -0
  1045. package/references/web-ui/src/icons/svg/bar.svg +1 -0
  1046. package/references/web-ui/src/icons/svg/basicalgorithm.svg +1 -0
  1047. package/references/web-ui/src/icons/svg/battery.svg +1 -0
  1048. package/references/web-ui/src/icons/svg/bbgl.svg +1 -0
  1049. package/references/web-ui/src/icons/svg/bell.svg +5 -0
  1050. package/references/web-ui/src/icons/svg/bfcx.svg +1 -0
  1051. package/references/web-ui/src/icons/svg/bjqd.svg +1 -0
  1052. package/references/web-ui/src/icons/svg/bjxhtj.svg +1 -0
  1053. package/references/web-ui/src/icons/svg/bjxhxq.svg +1 -0
  1054. package/references/web-ui/src/icons/svg/bmll.svg +1 -0
  1055. package/references/web-ui/src/icons/svg/bmtl.svg +1 -0
  1056. package/references/web-ui/src/icons/svg/bqcj.svg +1 -0
  1057. package/references/web-ui/src/icons/svg/bqmbgl.svg +1 -0
  1058. package/references/web-ui/src/icons/svg/buddle-map.svg +1 -0
  1059. package/references/web-ui/src/icons/svg/bug.svg +1 -0
  1060. package/references/web-ui/src/icons/svg/bygd.svg +1 -0
  1061. package/references/web-ui/src/icons/svg/bz.svg +1 -0
  1062. package/references/web-ui/src/icons/svg/bzgl.svg +1 -0
  1063. package/references/web-ui/src/icons/svg/characteristics.svg +1 -0
  1064. package/references/web-ui/src/icons/svg/chart-mix.svg +1 -0
  1065. package/references/web-ui/src/icons/svg/checkbox-checked.svg +5 -0
  1066. package/references/web-ui/src/icons/svg/checkimage.svg +1 -0
  1067. package/references/web-ui/src/icons/svg/ck.svg +1 -0
  1068. package/references/web-ui/src/icons/svg/classifymark.svg +1 -0
  1069. package/references/web-ui/src/icons/svg/closeEyes.svg +15 -0
  1070. package/references/web-ui/src/icons/svg/club.svg +1 -0
  1071. package/references/web-ui/src/icons/svg/collector.svg +1 -0
  1072. package/references/web-ui/src/icons/svg/collectormanage.svg +1 -0
  1073. package/references/web-ui/src/icons/svg/crkdcx.svg +1 -0
  1074. package/references/web-ui/src/icons/svg/dashboard-collector.svg +38 -0
  1075. package/references/web-ui/src/icons/svg/dashboard-device.svg +40 -0
  1076. package/references/web-ui/src/icons/svg/dashboard-gateway.svg +38 -0
  1077. package/references/web-ui/src/icons/svg/dashboard-warning.svg +40 -0
  1078. package/references/web-ui/src/icons/svg/dashboard.svg +1 -0
  1079. package/references/web-ui/src/icons/svg/database.svg +1 -0
  1080. package/references/web-ui/src/icons/svg/dataset-task.svg +1 -0
  1081. package/references/web-ui/src/icons/svg/datasource.svg +1 -0
  1082. package/references/web-ui/src/icons/svg/db.svg +1 -0
  1083. package/references/web-ui/src/icons/svg/ddgl.svg +1 -0
  1084. package/references/web-ui/src/icons/svg/ddycjk.svg +1 -0
  1085. package/references/web-ui/src/icons/svg/default.svg +1 -0
  1086. package/references/web-ui/src/icons/svg/definition.svg +1 -0
  1087. package/references/web-ui/src/icons/svg/depassessment.svg +1 -0
  1088. package/references/web-ui/src/icons/svg/dept.svg +1 -0
  1089. package/references/web-ui/src/icons/svg/device.svg +1 -0
  1090. package/references/web-ui/src/icons/svg/devicebig.svg +1 -0
  1091. package/references/web-ui/src/icons/svg/devicegroup.svg +1 -0
  1092. package/references/web-ui/src/icons/svg/devicelist.svg +1 -0
  1093. package/references/web-ui/src/icons/svg/devicemanage.svg +1 -0
  1094. package/references/web-ui/src/icons/svg/deviceparam.svg +1 -0
  1095. package/references/web-ui/src/icons/svg/devicetype.svg +1 -0
  1096. package/references/web-ui/src/icons/svg/diagnose.svg +1 -0
  1097. package/references/web-ui/src/icons/svg/diagnoseresult.svg +1 -0
  1098. package/references/web-ui/src/icons/svg/distribution.svg +1 -0
  1099. package/references/web-ui/src/icons/svg/doc.svg +1 -0
  1100. package/references/web-ui/src/icons/svg/docs.svg +1 -0
  1101. package/references/web-ui/src/icons/svg/dqby.svg +1 -0
  1102. package/references/web-ui/src/icons/svg/dqbydb.svg +1 -0
  1103. package/references/web-ui/src/icons/svg/dqbygc.svg +1 -0
  1104. package/references/web-ui/src/icons/svg/dqbygd.svg +1 -0
  1105. package/references/web-ui/src/icons/svg/dqbyjh.svg +1 -0
  1106. package/references/web-ui/src/icons/svg/ds-api.svg +1 -0
  1107. package/references/web-ui/src/icons/svg/ds-custom.svg +1 -0
  1108. package/references/web-ui/src/icons/svg/ds-db.svg +1 -0
  1109. package/references/web-ui/src/icons/svg/ds-excel.svg +1 -0
  1110. package/references/web-ui/src/icons/svg/ds-sql.svg +1 -0
  1111. package/references/web-ui/src/icons/svg/ds-union.svg +1 -0
  1112. package/references/web-ui/src/icons/svg/dxjdb.svg +1 -0
  1113. package/references/web-ui/src/icons/svg/dxjgc.svg +1 -0
  1114. package/references/web-ui/src/icons/svg/dxjgd.svg +1 -0
  1115. package/references/web-ui/src/icons/svg/dxjjh.svg +1 -0
  1116. package/references/web-ui/src/icons/svg/dy.svg +1 -0
  1117. package/references/web-ui/src/icons/svg/earth.svg +5 -0
  1118. package/references/web-ui/src/icons/svg/echart-fullscreen.svg +1 -0
  1119. package/references/web-ui/src/icons/svg/echart-nomalscreen.svg +1 -0
  1120. package/references/web-ui/src/icons/svg/edit.svg +1 -0
  1121. package/references/web-ui/src/icons/svg/email-task.svg +1 -0
  1122. package/references/web-ui/src/icons/svg/envelop.svg +5 -0
  1123. package/references/web-ui/src/icons/svg/equalizer.svg +5 -0
  1124. package/references/web-ui/src/icons/svg/example.svg +1 -0
  1125. package/references/web-ui/src/icons/svg/exclamationmark.svg +1 -0
  1126. package/references/web-ui/src/icons/svg/exclamationmark2.svg +1 -0
  1127. package/references/web-ui/src/icons/svg/exit-fullscreen.svg +1 -0
  1128. package/references/web-ui/src/icons/svg/eye-open.svg +1 -0
  1129. package/references/web-ui/src/icons/svg/eye.svg +1 -0
  1130. package/references/web-ui/src/icons/svg/fav.svg +1 -0
  1131. package/references/web-ui/src/icons/svg/field_location.svg +1 -0
  1132. package/references/web-ui/src/icons/svg/field_text.svg +1 -0
  1133. package/references/web-ui/src/icons/svg/field_time.svg +1 -0
  1134. package/references/web-ui/src/icons/svg/field_value.svg +1 -0
  1135. package/references/web-ui/src/icons/svg/folder.svg +1 -0
  1136. package/references/web-ui/src/icons/svg/form.svg +1 -0
  1137. package/references/web-ui/src/icons/svg/fullscreen.svg +1 -0
  1138. package/references/web-ui/src/icons/svg/funnel.svg +1 -0
  1139. package/references/web-ui/src/icons/svg/gateway.svg +1 -0
  1140. package/references/web-ui/src/icons/svg/gatewaymanage.svg +16 -0
  1141. package/references/web-ui/src/icons/svg/gauge.svg +1 -0
  1142. package/references/web-ui/src/icons/svg/gdgl.svg +1 -0
  1143. package/references/web-ui/src/icons/svg/gdll.svg +1 -0
  1144. package/references/web-ui/src/icons/svg/gdtl.svg +1 -0
  1145. package/references/web-ui/src/icons/svg/gdwcqk.svg +1 -0
  1146. package/references/web-ui/src/icons/svg/gdwcxq.svg +1 -0
  1147. package/references/web-ui/src/icons/svg/gnwz.svg +1 -0
  1148. package/references/web-ui/src/icons/svg/gs-add.svg +14 -0
  1149. package/references/web-ui/src/icons/svg/gs-change.svg +18 -0
  1150. package/references/web-ui/src/icons/svg/gs-choose-icon.svg +23 -0
  1151. package/references/web-ui/src/icons/svg/gs-close.svg +15 -0
  1152. package/references/web-ui/src/icons/svg/gs-delete.svg +19 -0
  1153. package/references/web-ui/src/icons/svg/gs-down.svg +12 -0
  1154. package/references/web-ui/src/icons/svg/gs-edit.svg +23 -0
  1155. package/references/web-ui/src/icons/svg/gs-edit2.svg +18 -0
  1156. package/references/web-ui/src/icons/svg/gs-page.svg +14 -0
  1157. package/references/web-ui/src/icons/svg/gs-resize.svg +12 -0
  1158. package/references/web-ui/src/icons/svg/gs-select.svg +15 -0
  1159. package/references/web-ui/src/icons/svg/gzbx.svg +1 -0
  1160. package/references/web-ui/src/icons/svg/gzgd.svg +1 -0
  1161. package/references/web-ui/src/icons/svg/gzk.svg +1 -0
  1162. package/references/web-ui/src/icons/svg/gzzd.svg +1 -0
  1163. package/references/web-ui/src/icons/svg/head.svg +13 -0
  1164. package/references/web-ui/src/icons/svg/iconfont.svg +71 -0
  1165. package/references/web-ui/src/icons/svg/im_message.svg +1 -0
  1166. package/references/web-ui/src/icons/svg/indexdefine.svg +1 -0
  1167. package/references/web-ui/src/icons/svg/inner-join.svg +1 -0
  1168. package/references/web-ui/src/icons/svg/international.svg +1 -0
  1169. package/references/web-ui/src/icons/svg/jcsj.svg +1 -0
  1170. package/references/web-ui/src/icons/svg/jhjxgd.svg +1 -0
  1171. package/references/web-ui/src/icons/svg/jilu.svg +1 -0
  1172. package/references/web-ui/src/icons/svg/jldw.svg +1 -0
  1173. package/references/web-ui/src/icons/svg/jscsfp.svg +1 -0
  1174. package/references/web-ui/src/icons/svg/jscswh.svg +1 -0
  1175. package/references/web-ui/src/icons/svg/kccx.svg +1 -0
  1176. package/references/web-ui/src/icons/svg/kcpd.svg +1 -0
  1177. package/references/web-ui/src/icons/svg/konwledgelist.svg +1 -0
  1178. package/references/web-ui/src/icons/svg/kucun.svg +1 -0
  1179. package/references/web-ui/src/icons/svg/language.svg +1 -0
  1180. package/references/web-ui/src/icons/svg/left-join.svg +1 -0
  1181. package/references/web-ui/src/icons/svg/leftBack.svg +15 -0
  1182. package/references/web-ui/src/icons/svg/line-stack.svg +1 -0
  1183. package/references/web-ui/src/icons/svg/line.svg +1 -0
  1184. package/references/web-ui/src/icons/svg/link.svg +1 -0
  1185. package/references/web-ui/src/icons/svg/liquid.svg +1 -0
  1186. package/references/web-ui/src/icons/svg/list.svg +5 -0
  1187. package/references/web-ui/src/icons/svg/location2.svg +5 -0
  1188. package/references/web-ui/src/icons/svg/lock_closed.svg +1 -0
  1189. package/references/web-ui/src/icons/svg/lock_open.svg +1 -0
  1190. package/references/web-ui/src/icons/svg/logo.svg +32 -0
  1191. package/references/web-ui/src/icons/svg/map.svg +1 -0
  1192. package/references/web-ui/src/icons/svg/map_old.svg +1 -0
  1193. package/references/web-ui/src/icons/svg/menu.svg +1 -0
  1194. package/references/web-ui/src/icons/svg/message.svg +1 -0
  1195. package/references/web-ui/src/icons/svg/messaged.svg +1 -0
  1196. package/references/web-ui/src/icons/svg/meter.svg +5 -0
  1197. package/references/web-ui/src/icons/svg/mobile.svg +5 -0
  1198. package/references/web-ui/src/icons/svg/model.svg +1 -0
  1199. package/references/web-ui/src/icons/svg/money.svg +1 -0
  1200. package/references/web-ui/src/icons/svg/more_v.svg +1 -0
  1201. package/references/web-ui/src/icons/svg/msg-setting.svg +1 -0
  1202. package/references/web-ui/src/icons/svg/mttr&mtbf.svg +1 -0
  1203. package/references/web-ui/src/icons/svg/multiplemp.svg +1 -0
  1204. package/references/web-ui/src/icons/svg/myassessment.svg +1 -0
  1205. package/references/web-ui/src/icons/svg/nested.svg +1 -0
  1206. package/references/web-ui/src/icons/svg/new-message.svg +5 -0
  1207. package/references/web-ui/src/icons/svg/no-join.svg +1 -0
  1208. package/references/web-ui/src/icons/svg/normal-fx.svg +1 -0
  1209. package/references/web-ui/src/icons/svg/notification.svg +1 -0
  1210. package/references/web-ui/src/icons/svg/openEyes.svg +12 -0
  1211. package/references/web-ui/src/icons/svg/openai.svg +1 -0
  1212. package/references/web-ui/src/icons/svg/panel.svg +1 -0
  1213. package/references/web-ui/src/icons/svg/password.svg +1 -0
  1214. package/references/web-ui/src/icons/svg/people.svg +1 -0
  1215. package/references/web-ui/src/icons/svg/peoples.svg +1 -0
  1216. package/references/web-ui/src/icons/svg/pie-rose.svg +1 -0
  1217. package/references/web-ui/src/icons/svg/pie.svg +1 -0
  1218. package/references/web-ui/src/icons/svg/plus.svg +5 -0
  1219. package/references/web-ui/src/icons/svg/podcast.svg +5 -0
  1220. package/references/web-ui/src/icons/svg/preview.svg +1 -0
  1221. package/references/web-ui/src/icons/svg/qrcode.svg +5 -0
  1222. package/references/web-ui/src/icons/svg/radar.svg +1 -0
  1223. package/references/web-ui/src/icons/svg/readed-msg.svg +1 -0
  1224. package/references/web-ui/src/icons/svg/remove.svg +1 -0
  1225. package/references/web-ui/src/icons/svg/rhdb.svg +1 -0
  1226. package/references/web-ui/src/icons/svg/rhgc.svg +1 -0
  1227. package/references/web-ui/src/icons/svg/rhgd.svg +1 -0
  1228. package/references/web-ui/src/icons/svg/right-join.svg +1 -0
  1229. package/references/web-ui/src/icons/svg/role.svg +1 -0
  1230. package/references/web-ui/src/icons/svg/rulelist.svg +1 -0
  1231. package/references/web-ui/src/icons/svg/runconfig.svg +1 -0
  1232. package/references/web-ui/src/icons/svg/sbgzlbb.svg +1 -0
  1233. package/references/web-ui/src/icons/svg/sbqy.svg +1 -0
  1234. package/references/web-ui/src/icons/svg/sbrhjh.svg +1 -0
  1235. package/references/web-ui/src/icons/svg/sbwhl.svg +1 -0
  1236. package/references/web-ui/src/icons/svg/scatter.svg +1 -0
  1237. package/references/web-ui/src/icons/svg/scene.svg +1 -0
  1238. package/references/web-ui/src/icons/svg/shoppingCard.svg +1 -0
  1239. package/references/web-ui/src/icons/svg/shouqi.svg +13 -0
  1240. package/references/web-ui/src/icons/svg/singlemp.svg +1 -0
  1241. package/references/web-ui/src/icons/svg/size.svg +1 -0
  1242. package/references/web-ui/src/icons/svg/slimHead.svg +12 -0
  1243. package/references/web-ui/src/icons/svg/sort-asc.svg +1 -0
  1244. package/references/web-ui/src/icons/svg/sort-desc.svg +1 -0
  1245. package/references/web-ui/src/icons/svg/standard.svg +1 -0
  1246. package/references/web-ui/src/icons/svg/star.svg +1 -0
  1247. package/references/web-ui/src/icons/svg/stats-bars.svg +5 -0
  1248. package/references/web-ui/src/icons/svg/suffix-obj.svg +1 -0
  1249. package/references/web-ui/src/icons/svg/sys-tools.svg +1 -0
  1250. package/references/web-ui/src/icons/svg/system.svg +1 -0
  1251. package/references/web-ui/src/icons/svg/table-info.svg +1 -0
  1252. package/references/web-ui/src/icons/svg/table-normal.svg +1 -0
  1253. package/references/web-ui/src/icons/svg/table-pivot.svg +1 -0
  1254. package/references/web-ui/src/icons/svg/table.svg +1 -0
  1255. package/references/web-ui/src/icons/svg/taizhang.svg +1 -0
  1256. package/references/web-ui/src/icons/svg/task.svg +1 -0
  1257. package/references/web-ui/src/icons/svg/tenant.svg +1 -0
  1258. package/references/web-ui/src/icons/svg/text.svg +1 -0
  1259. package/references/web-ui/src/icons/svg/tjqq.svg +1 -0
  1260. package/references/web-ui/src/icons/svg/tree-company.svg +1 -0
  1261. package/references/web-ui/src/icons/svg/tree-department.svg +1 -0
  1262. package/references/web-ui/src/icons/svg/tree-device.svg +1 -0
  1263. package/references/web-ui/src/icons/svg/tree-organization.svg +1 -0
  1264. package/references/web-ui/src/icons/svg/tree.svg +1 -0
  1265. package/references/web-ui/src/icons/svg/treemap.svg +1 -0
  1266. package/references/web-ui/src/icons/svg/undefinedata.svg +1 -0
  1267. package/references/web-ui/src/icons/svg/unread-msg.svg +1 -0
  1268. package/references/web-ui/src/icons/svg/user-check.svg +6 -0
  1269. package/references/web-ui/src/icons/svg/user.svg +1 -0
  1270. package/references/web-ui/src/icons/svg/users.svg +6 -0
  1271. package/references/web-ui/src/icons/svg/warn-tre.svg +1 -0
  1272. package/references/web-ui/src/icons/svg/waterfall.svg +1 -0
  1273. package/references/web-ui/src/icons/svg/wdgzt.svg +1 -0
  1274. package/references/web-ui/src/icons/svg/wdlc.svg +1 -0
  1275. package/references/web-ui/src/icons/svg/web-msg.svg +1 -0
  1276. package/references/web-ui/src/icons/svg/wlbm.svg +1 -0
  1277. package/references/web-ui/src/icons/svg/wlfl.svg +1 -0
  1278. package/references/web-ui/src/icons/svg/wlgl.svg +1 -0
  1279. package/references/web-ui/src/icons/svg/word-cloud.svg +1 -0
  1280. package/references/web-ui/src/icons/svg/wtsp.svg +1 -0
  1281. package/references/web-ui/src/icons/svg/wxdb.svg +1 -0
  1282. package/references/web-ui/src/icons/svg/wxgc.svg +1 -0
  1283. package/references/web-ui/src/icons/svg/xiaoxi.svg +13 -0
  1284. package/references/web-ui/src/icons/svg/xyldr.svg +1 -0
  1285. package/references/web-ui/src/icons/svg/ysp.svg +1 -0
  1286. package/references/web-ui/src/icons/svg/yxgl.svg +1 -0
  1287. package/references/web-ui/src/icons/svg/zcfbjzttj.svg +1 -0
  1288. package/references/web-ui/src/icons/svg/zcfl.svg +1 -0
  1289. package/references/web-ui/src/icons/svg/zcgl.svg +1 -0
  1290. package/references/web-ui/src/icons/svg/zclk.svg +1 -0
  1291. package/references/web-ui/src/icons/svg/zcll.svg +1 -0
  1292. package/references/web-ui/src/icons/svg/zclx.svg +1 -0
  1293. package/references/web-ui/src/icons/svg/zcpd.svg +1 -0
  1294. package/references/web-ui/src/icons/svg/zctjbb.svg +1 -0
  1295. package/references/web-ui/src/icons/svg/zcz.svg +1 -0
  1296. package/references/web-ui/src/icons/svg/zhankai.svg +13 -0
  1297. package/references/web-ui/src/icons/svg/zichan.svg +1 -0
  1298. package/references/web-ui/src/icons/svg/zxck.svg +1 -0
  1299. package/references/web-ui/src/icons/svg/zxrk.svg +1 -0
  1300. package/references/web-ui/src/lang/element-lang.ts +26 -0
  1301. package/references/web-ui/src/lang/en-us.ts +146 -0
  1302. package/references/web-ui/src/lang/hu-hu.ts +1141 -0
  1303. package/references/web-ui/src/lang/index.ts +109 -0
  1304. package/references/web-ui/src/lang/iotBaseRole/en-us.ts +28 -0
  1305. package/references/web-ui/src/lang/iotBaseRole/zh-cn.ts +28 -0
  1306. package/references/web-ui/src/lang/iotBaseSystem/en-us.ts +35 -0
  1307. package/references/web-ui/src/lang/iotBaseSystem/zh-cn.ts +35 -0
  1308. package/references/web-ui/src/lang/modules/button/en-us.ts +158 -0
  1309. package/references/web-ui/src/lang/modules/button/zh-cn.ts +157 -0
  1310. package/references/web-ui/src/lang/modules/button/zh-tw.ts +157 -0
  1311. package/references/web-ui/src/lang/modules/customizeTable/en-us.ts +56 -0
  1312. package/references/web-ui/src/lang/modules/customizeTable/zh-cn.ts +55 -0
  1313. package/references/web-ui/src/lang/modules/customizeTable/zh-tw.ts +55 -0
  1314. package/references/web-ui/src/lang/modules/exportData/en-us.ts +19 -0
  1315. package/references/web-ui/src/lang/modules/exportData/zh-cn.ts +19 -0
  1316. package/references/web-ui/src/lang/modules/exportData/zh-tw.ts +19 -0
  1317. package/references/web-ui/src/lang/modules/exportHistroy/en-us.ts +10 -0
  1318. package/references/web-ui/src/lang/modules/exportHistroy/zh-cn.ts +10 -0
  1319. package/references/web-ui/src/lang/modules/exportHistroy/zh-tw.ts +10 -0
  1320. package/references/web-ui/src/lang/modules/gsReport/en-us.ts +41 -0
  1321. package/references/web-ui/src/lang/modules/gsReport/zh-cn.ts +41 -0
  1322. package/references/web-ui/src/lang/modules/gsReport/zh-tw.ts +41 -0
  1323. package/references/web-ui/src/lang/modules/gsUploadFile/en-us.ts +10 -0
  1324. package/references/web-ui/src/lang/modules/gsUploadFile/zh-cn.ts +10 -0
  1325. package/references/web-ui/src/lang/modules/gsUploadFile/zh-tw.ts +10 -0
  1326. package/references/web-ui/src/lang/modules/home/en-us.ts +19 -0
  1327. package/references/web-ui/src/lang/modules/home/zh-cn.ts +19 -0
  1328. package/references/web-ui/src/lang/modules/home/zh-tw.ts +19 -0
  1329. package/references/web-ui/src/lang/modules/importData/en-us.ts +42 -0
  1330. package/references/web-ui/src/lang/modules/importData/zh-cn.ts +42 -0
  1331. package/references/web-ui/src/lang/modules/importData/zh-tw.ts +42 -0
  1332. package/references/web-ui/src/lang/modules/importHistroy/en-us.ts +9 -0
  1333. package/references/web-ui/src/lang/modules/importHistroy/zh-cn.ts +9 -0
  1334. package/references/web-ui/src/lang/modules/importHistroy/zh-tw.ts +9 -0
  1335. package/references/web-ui/src/lang/modules/js/en-us.ts +63 -0
  1336. package/references/web-ui/src/lang/modules/js/zh-cn.ts +60 -0
  1337. package/references/web-ui/src/lang/modules/js/zh-tw.ts +60 -0
  1338. package/references/web-ui/src/lang/modules/letters/en-us.ts +21 -0
  1339. package/references/web-ui/src/lang/modules/letters/zh-cn.ts +22 -0
  1340. package/references/web-ui/src/lang/modules/letters/zh-tw.ts +22 -0
  1341. package/references/web-ui/src/lang/modules/login/en-us.ts +68 -0
  1342. package/references/web-ui/src/lang/modules/login/zh-cn.ts +64 -0
  1343. package/references/web-ui/src/lang/modules/login/zh-tw.ts +64 -0
  1344. package/references/web-ui/src/lang/modules/menu/en-us.ts +429 -0
  1345. package/references/web-ui/src/lang/modules/menu/zh-cn.ts +423 -0
  1346. package/references/web-ui/src/lang/modules/menu/zh-tw.ts +423 -0
  1347. package/references/web-ui/src/lang/modules/message/en-us.ts +4 -0
  1348. package/references/web-ui/src/lang/modules/message/zh-cn.ts +4 -0
  1349. package/references/web-ui/src/lang/modules/message/zh-tw.ts +4 -0
  1350. package/references/web-ui/src/lang/modules/otherLang/en-us.ts +63 -0
  1351. package/references/web-ui/src/lang/modules/otherLang/zh-cn.ts +60 -0
  1352. package/references/web-ui/src/lang/modules/otherLang/zh-tw.ts +58 -0
  1353. package/references/web-ui/src/lang/modules/person/en-us.ts +27 -0
  1354. package/references/web-ui/src/lang/modules/person/zh-cn.ts +27 -0
  1355. package/references/web-ui/src/lang/modules/person/zh-tw.ts +27 -0
  1356. package/references/web-ui/src/lang/modules/source_data/en-us.ts +49 -0
  1357. package/references/web-ui/src/lang/modules/source_data/zh-cn.ts +41 -0
  1358. package/references/web-ui/src/lang/modules/source_data/zh-tw.ts +41 -0
  1359. package/references/web-ui/src/lang/modules/theme/en-us.ts +22 -0
  1360. package/references/web-ui/src/lang/modules/theme/zh-cn.ts +22 -0
  1361. package/references/web-ui/src/lang/modules/theme/zh-tw.ts +23 -0
  1362. package/references/web-ui/src/lang/modules/third/en-us.ts +10 -0
  1363. package/references/web-ui/src/lang/modules/third/zh-cn.ts +9 -0
  1364. package/references/web-ui/src/lang/modules/third/zh-tw.ts +9 -0
  1365. package/references/web-ui/src/lang/modules/toast/en-us.ts +21 -0
  1366. package/references/web-ui/src/lang/modules/toast/zh-cn.ts +21 -0
  1367. package/references/web-ui/src/lang/modules/toast/zh-tw.ts +21 -0
  1368. package/references/web-ui/src/lang/modules/uploadDocument/en-us.ts +6 -0
  1369. package/references/web-ui/src/lang/modules/uploadDocument/zh-cn.ts +6 -0
  1370. package/references/web-ui/src/lang/modules/uploadDocument/zh-tw.ts +6 -0
  1371. package/references/web-ui/src/lang/utils.ts +20 -0
  1372. package/references/web-ui/src/lang/vi-vn.ts +1140 -0
  1373. package/references/web-ui/src/lang/zh-cn.ts +180 -0
  1374. package/references/web-ui/src/lang/zh-tw.ts +147 -0
  1375. package/references/web-ui/src/main.ts +25 -0
  1376. package/references/web-ui/src/permission.ts +407 -0
  1377. package/references/web-ui/src/plugins/i18n.ts +3 -0
  1378. package/references/web-ui/src/plugins/pinia.ts +7 -0
  1379. package/references/web-ui/src/qiankun.js +114 -0
  1380. package/references/web-ui/src/router/index.ts +119 -0
  1381. package/references/web-ui/src/store/index.ts +43 -0
  1382. package/references/web-ui/src/store/modules/app/actions.ts +137 -0
  1383. package/references/web-ui/src/store/modules/app/getters.ts +17 -0
  1384. package/references/web-ui/src/store/modules/app/index.ts +52 -0
  1385. package/references/web-ui/src/store/modules/app/mutations.ts +108 -0
  1386. package/references/web-ui/src/store/modules/permission/actions.ts +11 -0
  1387. package/references/web-ui/src/store/modules/permission/getters.ts +5 -0
  1388. package/references/web-ui/src/store/modules/permission/index.ts +14 -0
  1389. package/references/web-ui/src/store/modules/permission/mutations.ts +13 -0
  1390. package/references/web-ui/src/store/modules/tagsView/actions.ts +87 -0
  1391. package/references/web-ui/src/store/modules/tagsView/getters.ts +6 -0
  1392. package/references/web-ui/src/store/modules/tagsView/index.ts +18 -0
  1393. package/references/web-ui/src/store/modules/tagsView/mutations.ts +118 -0
  1394. package/references/web-ui/src/store/modules/theme/actions.ts +38 -0
  1395. package/references/web-ui/src/store/modules/theme/getters.ts +10 -0
  1396. package/references/web-ui/src/store/modules/theme/index.ts +26 -0
  1397. package/references/web-ui/src/store/modules/theme/mutations.ts +28 -0
  1398. package/references/web-ui/src/store/modules/user/actions.ts +243 -0
  1399. package/references/web-ui/src/store/modules/user/getters.ts +10 -0
  1400. package/references/web-ui/src/store/modules/user/index.ts +44 -0
  1401. package/references/web-ui/src/store/modules/user/mutations.ts +104 -0
  1402. package/references/web-ui/src/store/piniaToVuex/index.ts +179 -0
  1403. package/references/web-ui/src/stores/counter.ts +12 -0
  1404. package/references/web-ui/src/styles/element-plus.scss +937 -0
  1405. package/references/web-ui/src/styles/global.scss +826 -0
  1406. package/references/web-ui/src/styles/iconfont/demo.css +539 -0
  1407. package/references/web-ui/src/styles/iconfont/iconfont.css +68 -0
  1408. package/references/web-ui/src/styles/iconfont/iconfont.js +63 -0
  1409. package/references/web-ui/src/styles/iconfont/iconfont.ttf +0 -0
  1410. package/references/web-ui/src/styles/index.scss +116 -0
  1411. package/references/web-ui/src/styles/mixin.scss +78 -0
  1412. package/references/web-ui/src/styles/theme/black/content-management.scss +11 -0
  1413. package/references/web-ui/src/styles/theme/black/dynamic-report.scss +31 -0
  1414. package/references/web-ui/src/styles/theme/black/form-design.scss +181 -0
  1415. package/references/web-ui/src/styles/theme/black/open-api.scss +118 -0
  1416. package/references/web-ui/src/styles/theme/black/platform.scss +57 -0
  1417. package/references/web-ui/src/styles/theme/black/process-manage.scss +48 -0
  1418. package/references/web-ui/src/styles/theme/black/rent-mannage.scss +8 -0
  1419. package/references/web-ui/src/styles/theme/black/schedule.scss +45 -0
  1420. package/references/web-ui/src/styles/theme/black/service-management.scss +14 -0
  1421. package/references/web-ui/src/styles/theme/black/system-manage.scss +144 -0
  1422. package/references/web-ui/src/styles/theme/black.scss +1642 -0
  1423. package/references/web-ui/src/styles/theme/default/index.scss +1 -0
  1424. package/references/web-ui/src/styles/theme/default/menu.scss +199 -0
  1425. package/references/web-ui/src/styles/transition.scss +107 -0
  1426. package/references/web-ui/src/styles/variables.scss +66 -0
  1427. package/references/web-ui/src/utils/ArrayExtension.ts +175 -0
  1428. package/references/web-ui/src/utils/app-mixin.ts +50 -0
  1429. package/references/web-ui/src/utils/areas.ts +1712 -0
  1430. package/references/web-ui/src/utils/auth.ts +329 -0
  1431. package/references/web-ui/src/utils/base64.ts +231 -0
  1432. package/references/web-ui/src/utils/browser-helper.ts +39 -0
  1433. package/references/web-ui/src/utils/bus.ts +35 -0
  1434. package/references/web-ui/src/utils/deprecated-utils.ts +116 -0
  1435. package/references/web-ui/src/utils/events.ts +59 -0
  1436. package/references/web-ui/src/utils/index.ts +790 -0
  1437. package/references/web-ui/src/utils/name-auth.ts +97 -0
  1438. package/references/web-ui/src/utils/onlyMsgBox.ts +38 -0
  1439. package/references/web-ui/src/utils/pinyinList.ts +417 -0
  1440. package/references/web-ui/src/utils/request-utils.ts +277 -0
  1441. package/references/web-ui/src/utils/request.ts +100 -0
  1442. package/references/web-ui/src/utils/routeHelper.ts +66 -0
  1443. package/references/web-ui/src/utils/storage.ts +80 -0
  1444. package/references/web-ui/src/utils/theme.ts +192 -0
  1445. package/references/web-ui/src/utils/toPinYin.ts +34 -0
  1446. package/references/web-ui/src/utils/tool.ts +7103 -0
  1447. package/references/web-ui/src/utils/utilsFn.ts +73 -0
  1448. package/references/web-ui/src/utils/validate.ts +110 -0
  1449. package/references/web-ui/src/utils/watermark.ts +161 -0
  1450. package/references/web-ui/src/utils/watermarkcompact.ts +180 -0
  1451. package/references/web-ui/src/utils/wordRender.ts +100 -0
  1452. package/references/web-ui/src/utils/ws.ts +42 -0
  1453. package/references/web-ui/src/views/404.vue +245 -0
  1454. package/references/web-ui/src/views/CollectButton/demand.vue +39 -0
  1455. package/references/web-ui/src/views/CollectButton/dialog.vue +178 -0
  1456. package/references/web-ui/src/views/CollectButton/index.vue +306 -0
  1457. package/references/web-ui/src/views/FlowCharts/FormDemo.vue +236 -0
  1458. package/references/web-ui/src/views/FlowCharts/components/ListDetailButton/index.vue +36 -0
  1459. package/references/web-ui/src/views/FlowCharts/leaveApplication.vue +56 -0
  1460. package/references/web-ui/src/views/FlowCharts/testForm.vue +56 -0
  1461. package/references/web-ui/src/views/Password/index.vue +147 -0
  1462. package/references/web-ui/src/views/authorize/components/ForgetPassword.vue +309 -0
  1463. package/references/web-ui/src/views/authorize/components/FormLogin/components/VerificationDialog.vue +297 -0
  1464. package/references/web-ui/src/views/authorize/components/FormLogin/index.vue +649 -0
  1465. package/references/web-ui/src/views/authorize/index.vue +149 -0
  1466. package/references/web-ui/src/views/dynamic-form/index.vue +42 -0
  1467. package/references/web-ui/src/views/home-page/WorkTable.vue +116 -0
  1468. package/references/web-ui/src/views/home-page/index.vue +14 -0
  1469. package/references/web-ui/src/views/iotBaseRole/AddDrawer.vue +320 -0
  1470. package/references/web-ui/src/views/iotBaseRole/EditTable.vue +373 -0
  1471. package/references/web-ui/src/views/iotBaseRole/index.vue +313 -0
  1472. package/references/web-ui/src/views/iotBaseSystem/AddDrawer.vue +305 -0
  1473. package/references/web-ui/src/views/iotBaseSystem/index.vue +385 -0
  1474. package/references/web-ui/src/views/layout/Frame.vue +75 -0
  1475. package/references/web-ui/src/views/layout/Layout.vue +186 -0
  1476. package/references/web-ui/src/views/layout/MiddleView.vue +29 -0
  1477. package/references/web-ui/src/views/layout/components/AppMain.vue +302 -0
  1478. package/references/web-ui/src/views/layout/components/CompactTools/index.vue +59 -0
  1479. package/references/web-ui/src/views/layout/components/Navbar/components/AVue.vue +34 -0
  1480. package/references/web-ui/src/views/layout/components/Navbar/components/Gpt.vue +49 -0
  1481. package/references/web-ui/src/views/layout/components/Navbar/components/Help.vue +52 -0
  1482. package/references/web-ui/src/views/layout/components/Navbar/components/Locale.vue +99 -0
  1483. package/references/web-ui/src/views/layout/components/Navbar/components/Message.vue +495 -0
  1484. package/references/web-ui/src/views/layout/components/Navbar/components/NavbarMenu.vue +196 -0
  1485. package/references/web-ui/src/views/layout/components/Navbar/components/Personal.vue +308 -0
  1486. package/references/web-ui/src/views/layout/components/Navbar/components/Portal.vue +34 -0
  1487. package/references/web-ui/src/views/layout/components/Navbar/components/SystemChange.vue +133 -0
  1488. package/references/web-ui/src/views/layout/components/Navbar/components/Tablet.vue +206 -0
  1489. package/references/web-ui/src/views/layout/components/Navbar/components/TenantChange.vue +186 -0
  1490. package/references/web-ui/src/views/layout/components/Navbar/components/Theme.vue +367 -0
  1491. package/references/web-ui/src/views/layout/components/Navbar/index.vue +181 -0
  1492. package/references/web-ui/src/views/layout/components/Sidebar/components/CustomSliderMenu.vue +267 -0
  1493. package/references/web-ui/src/views/layout/components/Sidebar/components/FetchMenuItem.vue +45 -0
  1494. package/references/web-ui/src/views/layout/components/Sidebar/components/MenuItem.vue +135 -0
  1495. package/references/web-ui/src/views/layout/components/Sidebar/components/MenuSearch.vue +74 -0
  1496. package/references/web-ui/src/views/layout/components/Sidebar/components/SubMenu.js +190 -0
  1497. package/references/web-ui/src/views/layout/components/Sidebar/components/SubMenu.vue +125 -0
  1498. package/references/web-ui/src/views/layout/components/Sidebar/components/ToggleSidebar.vue +51 -0
  1499. package/references/web-ui/src/views/layout/components/Sidebar/index.vue +464 -0
  1500. package/references/web-ui/src/views/layout/components/TagsView.vue +683 -0
  1501. package/references/web-ui/src/views/layout/components/chatGPT/image/chatgpt.png +0 -0
  1502. package/references/web-ui/src/views/layout/components/chatGPT/image/knowledge_IT.png +0 -0
  1503. package/references/web-ui/src/views/layout/components/chatGPT/image/knowledge_gushen.png +0 -0
  1504. package/references/web-ui/src/views/layout/components/chatGPT/image/pmo_background.png +0 -0
  1505. package/references/web-ui/src/views/layout/components/chatGPT/image/smile.png +0 -0
  1506. package/references/web-ui/src/views/layout/components/chatGPT/image/stop.svg +1 -0
  1507. package/references/web-ui/src/views/layout/components/chatGPT/image/titleIcon.png +0 -0
  1508. package/references/web-ui/src/views/layout/components/chatGPT/index.js +7 -0
  1509. package/references/web-ui/src/views/layout/components/chatGPT/index.vue +517 -0
  1510. package/references/web-ui/src/views/layout/components/chatGPT/styles/index.scss +360 -0
  1511. package/references/web-ui/src/views/layout/components/chatGPT/utils/gpt.js +29 -0
  1512. package/references/web-ui/src/views/layout/components/chatGPT/utils/index.js +70 -0
  1513. package/references/web-ui/src/views/layout/components/index.js +6 -0
  1514. package/references/web-ui/src/views/layout/mixin/ResizeHandler.js +28 -0
  1515. package/references/web-ui/src/views/layout/utils/dynamicFormHelper.js +44 -0
  1516. package/references/web-ui/src/views/layout/utils/scroll.js +89 -0
  1517. package/references/web-ui/src/views/letters/config/gridConfig.js +59 -0
  1518. package/references/web-ui/src/views/letters/index.vue +401 -0
  1519. package/references/web-ui/src/views/login/ForgetPassword.vue +425 -0
  1520. package/references/web-ui/src/views/login/FormLogin.vue +1219 -0
  1521. package/references/web-ui/src/views/login/ScanLogin.vue +256 -0
  1522. package/references/web-ui/src/views/login/index.vue +432 -0
  1523. package/references/web-ui/src/views/person-info/components/information.vue +99 -0
  1524. package/references/web-ui/src/views/person-info/index.vue +28 -0
  1525. package/references/web-ui/src/views/sso/login/index.vue +128 -0
  1526. package/references/web-ui/src/views/sso/multi-login/index.vue +95 -0
  1527. package/references/web-ui/src/views/third-login/index.vue +73 -0
  1528. package/references/web-ui/src/views/third-view.vue +86 -0
  1529. package/references/web-ui/tsconfig.app.json +12 -0
  1530. package/references/web-ui/tsconfig.json +11 -0
  1531. package/references/web-ui/tsconfig.node.json +19 -0
  1532. package/references/web-ui/vite.config.ts +42 -0
  1533. package/references/yudaocloud-end-standard/04-Java/345/220/216/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +1095 -0
  1534. package/references/yudaocloud-end-standard/index.md +12 -0
  1535. package/scripts/postinstall.js +107 -0
  1536. package/scripts/sync-version.js +109 -0
  1537. package/skills/.claude/.wiki-update-queue +26 -0
  1538. package/skills/adspecs-adversarial-review/SKILL.md +486 -0
  1539. package/skills/adspecs-analyze/SKILL.md +573 -0
  1540. package/skills/adspecs-architecture-planning/SKILL.md +875 -0
  1541. package/skills/adspecs-biz-blueprint/SKILL.md +554 -0
  1542. package/skills/adspecs-clarify/SKILL.md +299 -0
  1543. package/skills/adspecs-export-word/SKILL.md +498 -0
  1544. package/skills/adspecs-export-word/references/md-to-docx.js +862 -0
  1545. package/skills/adspecs-export-word/references/package-lock.json +220 -0
  1546. package/skills/adspecs-export-word/references/package.json +10 -0
  1547. package/skills/adspecs-front-spec/SKILL.md +502 -0
  1548. package/skills/adspecs-front-tasks/SKILL.md +611 -0
  1549. package/skills/adspecs-git-commit/SKILL.md +53 -0
  1550. package/skills/adspecs-new-requirement/SKILL.md +608 -0
  1551. package/skills/adspecs-plan/SKILL.md +429 -0
  1552. package/skills/adspecs-prd/SKILL.md +404 -0
  1553. package/skills/adspecs-requirement-research/02-/351/234/200/346/261/202/346/235/245/346/272/220/344/270/216/351/207/207/351/233/206/350/256/260/345/275/225.md +85 -0
  1554. package/skills/adspecs-requirement-research/SKILL.md +184 -0
  1555. package/skills/adspecs-tasks/SKILL.md +630 -0
  1556. package/skills/adspecs-update-status/SKILL.md +382 -0
  1557. package/skills/adspecs-utest/SKILL.md +390 -0
  1558. package/skills/adspecs-write-planning-report/SKILL.md +93 -0
  1559. package/skills/adspecs-write-roadmap/SKILL.md +83 -0
  1560. package/skills/adspecs-write-sow/SKILL.md +351 -0
  1561. package/skills/project-init/SKILL.md +1289 -0
  1562. package/skills/sie-front-code-review/SKILL.md +152 -0
  1563. package/skills/wiki-update/SKILL.md +232 -0
  1564. package/src/commands/doctor.js +197 -0
  1565. package/src/commands/init.js +83 -0
  1566. package/src/commands/plugin.js +145 -0
  1567. package/src/commands/update.js +87 -0
  1568. package/src/lib/area-scanner.js +129 -0
  1569. package/src/lib/copier.js +104 -0
  1570. package/src/lib/dir-utils.js +133 -0
  1571. package/src/lib/json-merge.js +114 -0
  1572. package/src/lib/paths-defaults.js +37 -0
  1573. package/src/lib/prompts.js +345 -0
  1574. package/src/lib/readme-gen.js +143 -0
  1575. package/src/lib/report.js +327 -0
  1576. package/src/lib/scaffolder.js +518 -0
  1577. package/src/lib/short-name.js +36 -0
  1578. package/src/utils.js +80 -0
@@ -0,0 +1,1443 @@
1
+ # 前端编码规范
2
+
3
+ > **版本**: v3.3
4
+ > **创建日期**: 2026-03-17
5
+ > **更新日期**: 2026-06-05
6
+ > **适用范围**: React 19 + TypeScript 6 + Ant Design 6 + ProComponents 项目
7
+ > **文档目的**: 统一前端编码规范,提升代码质量和团队协作效率
8
+
9
+ ---
10
+
11
+ ## 📋 目录
12
+
13
+ 1. [技术栈基线](#技术栈基线)
14
+ 2. [目录结构规范](#目录结构规范)
15
+ 3. [命名规范](#命名规范)
16
+ 4. [编码风格规范](#编码风格规范)
17
+ 5. [React 组件规范](#react-组件规范)
18
+ 6. [列表页标准模式(ProTable)](#列表页标准模式protable)
19
+ 7. [Modal / Drawer 标准模式](#modal--drawer-标准模式)
20
+ 8. [TypeScript 规范](#typescript-规范)
21
+ 9. [样式规范](#样式规范)
22
+ 10. [路由规范](#路由规范)
23
+ 11. [状态管理规范](#状态管理规范)
24
+ 12. [API 接口规范](#api-接口规范)
25
+ 13. [国际化(i18n)规范](#国际化i18n规范)
26
+ 14. [字典系统规范](#字典系统规范)
27
+ 15. [权限系统规范](#权限系统规范)
28
+ 16. [Mock 规范](#mock-规范)
29
+ 17. [上传组件规范](#上传组件规范)
30
+ 18. [时间格式化规范](#时间格式化规范)
31
+ 19. [性能优化规范](#性能优化规范)
32
+ 20. [代码质量标准](#代码质量标准)
33
+ 21. [常见问题规范(必读陷阱)](#常见问题规范必读陷阱)
34
+ 22. [Vue → React 迁移映射表](#vue--react-迁移映射表)
35
+
36
+ ---
37
+
38
+ ## 一、技术栈基线
39
+
40
+ | 维度 | 选型 | 备注 |
41
+ | ------ | ----------------------------------------------- | ----------------------------------------------------------------- |
42
+ | 框架 | React 19.2 + TypeScript 6 | strict 模式 |
43
+ | UI | `antd` ^6.3 + `@ant-design/pro-components` ^3.1 | 列表统一用 `ProTable` |
44
+ | 图标 | `@ant-design/icons` | 按需引入;后端图标名通过 `<Icon icon="ep:xxx">` 走 `iconMap` 转换 |
45
+ | 路由 | `react-router` ^7 | `createBrowserRouter` + 动态路由 patch |
46
+ | 状态 | `zustand` ^5 | `useAuthStore` / `useAppStore` / `useDictStore` |
47
+ | 网络 | `axios` ^1.15 | 统一实例 `@/utils/request` |
48
+ | Mock | `msw` ^2.13 | 仅 dev,受 `VITE_MOCK_ENABLED` 控制 |
49
+ | 国际化 | `react-i18next` ^17 | 默认中文 |
50
+ | 构建 | Vite 8 | `npm run build` 必须通过 `tsc -b && vite build` |
51
+ | 风格 | Prettier 单引号 / 分号 / 100 列宽 / 2 空格 | ESLint flat config + `react-hooks` |
52
+
53
+ > **禁用**:Tailwind、CSS-in-JS 库、TanStack Query、Redux、Class 组件、`element-plus` 残留代码。
54
+
55
+ ---
56
+
57
+ ## 二、目录结构规范
58
+
59
+ ```
60
+ src/
61
+ ├── api/ # axios 接口模块(按域拆分)
62
+ │ ├── ai/ # /ai/* 接口
63
+ │ ├── infra/
64
+ │ ├── system/
65
+ │ └── auth.ts
66
+ ├── components/ # 通用组件(首字母大写文件夹 + index.tsx 默认导出)
67
+ │ ├── Access/ # 权限包裹
68
+ │ ├── DictTag/ # 字典标签
69
+ │ ├── Footer/ # 页脚
70
+ │ ├── Icon/ # iconify → AntD 图标
71
+ │ ├── Message/ # Header 铃铛 + 未读列表
72
+ │ ├── UploadFile/ # UploadFile / UploadImg / UploadImgs
73
+ │ ├── UserSelectForm/
74
+ │ └── DeptSelectForm/
75
+ ├── hooks/ # 自定义 hook,use 前缀
76
+ ├── layouts/ # 仅一个 AdminLayout
77
+ ├── pages/ # 路由对应的页面
78
+ │ ├── ai/ # 与后端菜单 path 完全对齐
79
+ │ ├── infra/
80
+ │ ├── system/
81
+ │ ├── profile/
82
+ │ └── login/
83
+ ├── mocks/ # MSW
84
+ │ ├── data/index.ts # 所有 mock 数据 + 字典 + 菜单
85
+ │ └── handlers/ # 按模块拆 ai.ts / infra.ts / notify.ts ...
86
+ ├── router/ # createBrowserRouter + dynamicRoutes
87
+ ├── stores/ # zustand store
88
+ ├── types/ # 跨模块共享类型
89
+ └── utils/ # request / formatTime / token / menuConverter ...
90
+ ```
91
+
92
+ **关键约定**:
93
+
94
+ 1. **页面路径必须等于后端菜单 `component` 字段**。例如后端返回 `ai/chat/index/index` → 文件必须落在 `src/pages/ai/chat/index/index.tsx`,否则 `dynamicRoutes` 会报 `Component not found` 警告并显示 404。
95
+ 2. 子组件统一放在该页面同级 `components/` 下:`pages/<feature>/components/XxxModal.tsx`。
96
+ 3. 通用业务组件命名遵循 `components/<PascalCase>/index.tsx`。
97
+
98
+ ---
99
+
100
+ ## 三、命名规范
101
+
102
+ | 对象 | 规则 | 示例 |
103
+ | ------------- | ------------------------------- | --------------------------------------- |
104
+ | 组件文件 | PascalCase | `DeptModal.tsx` / `index.tsx` |
105
+ | 页面目录 | kebab-case 或保留后端 path | `chat-role/`、`data-source-config/` |
106
+ | Hook | `useXxx.ts` | `useAccess.ts` |
107
+ | 工具/常量文件 | camelCase | `formatTime.ts`、`token.ts` |
108
+ | 类型 | `XxxVO`/`XxxParams`/`SystemXxx` | `ChatMessageVO` |
109
+ | 常量 | UPPER_SNAKE | `MAX_AVATAR_MB` |
110
+ | API 函数 | 动词 + 资源 | `getDeptList`、`updateDataSourceConfig` |
111
+ | 普通变量 | camelCase | `userName` |
112
+ | 布尔变量 | is/has/can/should 开头 | `isValid`, `hasPermission` |
113
+
114
+ ---
115
+
116
+ ## 四、编码风格规范
117
+
118
+ ### 4.1 代码格式化
119
+
120
+ - 使用 2 个空格缩进
121
+ - 优先使用单引号,如 `'string'`
122
+ - JSX 属性使用双引号,如 `<div className="container">`
123
+ - 模板字符串使用反引号
124
+ - 使用分号
125
+ - 函数调用和对象字面量末尾使用尾随逗号
126
+ - 每行最多 100 个字符
127
+
128
+ ### 4.2 注释规范
129
+
130
+ ```typescript
131
+ /**
132
+ * 获取用户列表
133
+ * @param params - 查询参数
134
+ * @param params.pageNum - 页码
135
+ * @param params.pageSize - 每页数量
136
+ */
137
+ async function getUserList(params: UserPageParams): Promise<User[]> {
138
+ // 关键业务逻辑必须添加注释
139
+ }
140
+ ```
141
+
142
+ - 关键业务逻辑必须添加注释
143
+ - 复杂算法必须添加说明
144
+ - 临时解决方案需要标记 `// TODO: 说明`
145
+
146
+ ---
147
+
148
+ ## 五、React 组件规范
149
+
150
+ ### 5.1 函数组件结构
151
+
152
+ ```tsx
153
+ // 1. 导入语句(按类型分组:React -> 第三方库 -> 本地模块 -> 样式)
154
+ import { useState, useEffect, useCallback, useRef } from 'react';
155
+ import { Form, Table, Button, Modal, Space } from 'antd';
156
+ import { PlusOutlined } from '@ant-design/icons';
157
+ import { ProTable, type ProColumns, type ActionType } from '@ant-design/pro-components';
158
+ import { getUserList, deleteUser } from '@/api/system/user';
159
+ import type { User } from '@/types/system/user';
160
+ import Access from '@/components/Access';
161
+
162
+ // 2. 类型定义(复杂类型建议放在 src/types/ 下)
163
+ interface UserListProps {
164
+ departmentId?: number;
165
+ }
166
+
167
+ // 3. 组件定义(使用 function 声明)
168
+ export default function UserList({ departmentId }: UserListProps) {
169
+ // 4. Hooks 调用(按顺序:ref/state -> custom hooks -> effects)
170
+ const { message, modal } = App.useApp();
171
+ const actionRef = useRef<ActionType>(undefined);
172
+ const [loading, setLoading] = useState(false);
173
+ const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
174
+
175
+ // 5. 事件处理函数
176
+ const handleDelete = useCallback(async (record: User) => {
177
+ modal.confirm({
178
+ title: '确认删除?',
179
+ okType: 'danger',
180
+ content: `确认删除「${record.name}」吗?`,
181
+ onOk: async () => {
182
+ await deleteUser(record.id!);
183
+ message.success('删除成功');
184
+ actionRef.current?.reload();
185
+ },
186
+ });
187
+ }, [message, modal]);
188
+
189
+ // 6. 列定义
190
+ const columns: ProColumns<User>[] = [
191
+ { title: '名称', dataIndex: 'name', width: 200 },
192
+ { title: '操作', key: 'action', search: false, render: (_, record) => (
193
+ <Space>
194
+ <Access code="system:user:update">
195
+ <a onClick={() => handleEdit(record)}>编辑</a>
196
+ </Access>
197
+ <Access code="system:user:delete">
198
+ <a style={{ color: '#ff4d4f' }} onClick={() => handleDelete(record)}>删除</a>
199
+ </Access>
200
+ </Space>
201
+ )},
202
+ ];
203
+
204
+ // 7. 渲染
205
+ return (
206
+ <ProTable<User>
207
+ columns={columns}
208
+ actionRef={actionRef}
209
+ rowKey="id"
210
+ request={async (params) => {
211
+ const { current, pageSize, ...rest } = params;
212
+ const { data } = await getUserList({ pageNo: current, pageSize, ...rest });
213
+ return { data: data.list, total: data.total, success: true };
214
+ }}
215
+ toolBarRender={() => [
216
+ <Access code="system:user:create" key="add">
217
+ <Button type="primary" icon={<PlusOutlined />} onClick={handleAdd}>新增</Button>
218
+ </Access>,
219
+ ]}
220
+ />
221
+ );
222
+ }
223
+ ```
224
+
225
+ ### 5.2 Props 定义
226
+
227
+ ```typescript
228
+ // 使用 interface 定义 props
229
+ interface UserCardProps {
230
+ user: User; // 必填
231
+ showActions?: boolean; // 可选
232
+ size?: 'small' | 'medium' | 'large'; // 带默认值
233
+ onDelete: (id: number) => void; // 回调
234
+ children?: React.ReactNode; // 子组件
235
+ }
236
+
237
+ // 使用 destructuring + 默认值
238
+ export default function UserCard({
239
+ user,
240
+ showActions = false,
241
+ size = 'medium',
242
+ onDelete,
243
+ children,
244
+ }: UserCardProps) {
245
+ return <div>{/* ... */}</div>;
246
+ }
247
+ ```
248
+
249
+ ### 5.3 组件拆分原则
250
+
251
+ - 单个组件不超过 300 行,超出按职责拆分
252
+ - 页面内的子组件(Modal、Drawer 等)放在 `src/pages/<feature>/components/` 目录
253
+ - 全局复用组件放在 `src/components/`
254
+ - 避免在组件内部定义类型,应放在 `src/types/` 目录
255
+
256
+ ### 5.4 自定义 Hook 规范
257
+
258
+ ```typescript
259
+ // hooks/useAccess.ts — 以 use 开头
260
+ import { useAuthStore } from '@/stores/useAuthStore';
261
+
262
+ export function useAccess(code: string): boolean {
263
+ const hasPermission = useAuthStore((s) => s.hasPermission);
264
+ return hasPermission(code);
265
+ }
266
+ ```
267
+
268
+ ---
269
+
270
+ ## 六、列表页标准模式(ProTable)
271
+
272
+ > 所有「带筛选 + 分页」的列表都**必须**使用 `ProTable`,**不要再用** `Card + Form + Table`。
273
+ > 树形列表(dept/menu)例外,用本地 `dataSource` + `pagination={false}` + `expandable`。
274
+
275
+ ### 6.1 标准模板
276
+
277
+ ```tsx
278
+ import { useRef, useState } from 'react';
279
+ import { App, Button, Space } from 'antd';
280
+ import { PlusOutlined, DeleteOutlined } from '@ant-design/icons';
281
+ import { ProTable, type ProColumns, type ActionType } from '@ant-design/pro-components';
282
+ import { getXxxPage, deleteXxx, deleteXxxList, type XxxVO } from '@/api/xxx';
283
+ import Access from '@/components/Access';
284
+ import DictTag from '@/components/DictTag';
285
+ import { dateFormatter } from '@/utils/formatTime';
286
+ import { useDictStore } from '@/stores/useDictStore';
287
+ import XxxModal from './components/XxxModal';
288
+
289
+ const XxxPage: React.FC = () => {
290
+ const { message, modal } = App.useApp();
291
+ const actionRef = useRef<ActionType>(undefined);
292
+ const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
293
+ const [modalOpen, setModalOpen] = useState(false);
294
+ const [editId, setEditId] = useState<number | null>(null);
295
+ const getDictOptions = useDictStore((s) => s.getDictOptions);
296
+
297
+ const reload = () => actionRef.current?.reload();
298
+
299
+ const handleDelete = (record: XxxVO) => {
300
+ modal.confirm({
301
+ title: '确认删除?', okType: 'danger',
302
+ content: `确认删除「${record.name}」吗?`,
303
+ onOk: async () => {
304
+ await deleteXxx(record.id!);
305
+ message.success('删除成功'); reload();
306
+ },
307
+ });
308
+ };
309
+
310
+ const handleDeleteBatch = () => {
311
+ modal.confirm({
312
+ title: '确认批量删除?', okType: 'danger',
313
+ content: `确认删除选中的 ${selectedRowKeys.length} 项?`,
314
+ onOk: async () => {
315
+ await deleteXxxList(selectedRowKeys.map(Number));
316
+ message.success('删除成功');
317
+ setSelectedRowKeys([]);
318
+ reload();
319
+ },
320
+ });
321
+ };
322
+
323
+ const columns: ProColumns<XxxVO>[] = [
324
+ { title: '名称', dataIndex: 'name', width: 200 },
325
+ {
326
+ title: '状态', dataIndex: 'status', width: 100,
327
+ valueType: 'select',
328
+ valueEnum: Object.fromEntries(
329
+ getDictOptions('common_status').map((d) => [d.value, { text: d.label }]),
330
+ ),
331
+ render: (_, r) => <DictTag type="common_status" value={r.status} />,
332
+ },
333
+ {
334
+ title: '创建时间', dataIndex: 'createTime', width: 180,
335
+ valueType: 'dateRange',
336
+ search: {
337
+ transform: (value) => {
338
+ if (!Array.isArray(value)) return {};
339
+ return { createTimeStart: value[0], createTimeEnd: value[1] };
340
+ },
341
+ },
342
+ render: (_, r) => dateFormatter(r.createTime) || '-',
343
+ },
344
+ {
345
+ title: '操作', key: 'action', width: 140, fixed: 'right', search: false,
346
+ render: (_, record) => (
347
+ <Space>
348
+ <Access code="xxx:update">
349
+ <a onClick={() => { setEditId(record.id!); setModalOpen(true); }}>编辑</a>
350
+ </Access>
351
+ <Access code="xxx:delete">
352
+ <a style={{ color: '#ff4d4f' }} onClick={() => handleDelete(record)}>删除</a>
353
+ </Access>
354
+ </Space>
355
+ ),
356
+ },
357
+ ];
358
+
359
+ return (
360
+ <>
361
+ <ProTable<XxxVO>
362
+ columns={columns}
363
+ actionRef={actionRef}
364
+ rowKey="id"
365
+ scroll={{ x: 1200 }}
366
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
367
+ request={async (params: any) => {
368
+ const { current, pageSize, ...rest } = params;
369
+ const { data } = await getXxxPage({ pageNo: current ?? 1, pageSize: pageSize ?? 10, ...rest });
370
+ return { data: data.list, total: data.total, success: true };
371
+ }}
372
+ pagination={{ defaultPageSize: 10, showSizeChanger: true }}
373
+ rowSelection={{ selectedRowKeys, onChange: setSelectedRowKeys }}
374
+ toolBarRender={() => [
375
+ <Access code="xxx:create" key="add">
376
+ <Button type="primary" icon={<PlusOutlined />}
377
+ onClick={() => { setEditId(null); setModalOpen(true); }}>新增</Button>
378
+ </Access>,
379
+ <Access code="xxx:delete" key="batch">
380
+ <Button danger icon={<DeleteOutlined />}
381
+ disabled={selectedRowKeys.length === 0}
382
+ onClick={handleDeleteBatch}>批量删除</Button>
383
+ </Access>,
384
+ ]}
385
+ />
386
+ <XxxModal open={modalOpen} id={editId}
387
+ onSuccess={() => { setModalOpen(false); reload(); }}
388
+ onCancel={() => setModalOpen(false)} />
389
+ </>
390
+ );
391
+ };
392
+
393
+ export default XxxPage;
394
+ ```
395
+
396
+ ### 6.2 ProTable 列定义关键规则
397
+
398
+ | 场景 | 写法 |
399
+ | ------------- | ------------------------------------------------------------------------------------------ |
400
+ | 隐藏搜索 | `search: false`(**不是** `hideInSearch`) |
401
+ | 下拉搜索 | `valueType: 'select'` + `valueEnum: Object.fromEntries(getDictOptions(...).map(...))` |
402
+ | 日期区间 | `valueType: 'dateRange'` + `search.transform` 拆 `xxxStart/xxxEnd` |
403
+ | 日期区间渲染 | **必须用 `render`,不要用 `renderText`** |
404
+ | 长 label 搜索 | `search={{ labelWidth: 'auto' }}`(在 ProTable 上) |
405
+ | request 参数 | 固定加 `// eslint-disable-next-line @typescript-eslint/no-explicit-any` 允许 `params: any` |
406
+ | 树形表 | 去掉 `request`,改用 `dataSource={tree}` + `pagination={false}` + `expandable` |
407
+
408
+ ---
409
+
410
+ ## 七、Modal / Drawer 使用标准规范
411
+
412
+ ### 7.1 整体布局原则
413
+
414
+ 1、表单较简单(字段 <4个),推荐使用 Modal。
415
+
416
+ 2、表单较复杂(字段 ≥ 4 个)或业务流程需要连续操作时,推荐使用右侧 Drawer 替代 Modal。
417
+
418
+ > 根据表单字段数量分级选择布局和 Drawer 宽度。
419
+
420
+ | 字段数量 | 布局 | Drawer 宽度 | Form layout | 说明 |
421
+ | ---------- | ------------------------------ | ----------- | ------------ | -------------------------- |
422
+ | 4 ~ 10 个 | **一栏**,单列 | **15%** | `vertical` | 字段少、简单,垂直单栏即可 |
423
+ | 10 ~ 20 个 | **两栏** `Row`+`Col span={12}` | **30%** | `horizontal` | 字段较多,两栏紧凑排列 |
424
+ | 21 ~ 30 个 | **三栏** `Row`+`Col span={8}` | **45%** | `horizontal` | 字段很多,三栏并排 |
425
+ | > 30 个 | **四栏** `Row`+`Col span={6}` | **60%** | `horizontal` | 大批量字段,四栏最大化空间 |
426
+
427
+ ### 7.2 Modal 标准模板
428
+
429
+ > 表单较简单(字段 <4个),推荐使用 Modal。
430
+
431
+ ```tsx
432
+ interface Props {
433
+ open: boolean;
434
+ id: number | null;
435
+ onSuccess: () => void;
436
+ onCancel: () => void;
437
+ }
438
+
439
+ const DEFAULT_FORM = { name: '', status: 0 };
440
+
441
+ const XxxModal: React.FC<Props> = ({ open, id, onSuccess, onCancel }) => {
442
+ const { message } = App.useApp();
443
+ const [form] = Form.useForm();
444
+ const [confirmLoading, setConfirmLoading] = useState(false);
445
+ // 保留服务端原始字段,避免编辑时丢掉未在表单里出现的字段
446
+ const originData = useRef<Partial<XxxVO>>({});
447
+
448
+ useEffect(() => {
449
+ if (!open) return;
450
+ form.resetFields();
451
+ originData.current = {};
452
+ if (id != null) {
453
+ getXxx(id).then(({ data }) => {
454
+ originData.current = { ...data };
455
+ form.setFieldsValue(data);
456
+ });
457
+ } else {
458
+ form.setFieldsValue(DEFAULT_FORM);
459
+ }
460
+ }, [open, id, form]);
461
+
462
+ const handleOk = async () => {
463
+ let values: XxxVO;
464
+ try { values = await form.validateFields(); } catch { return; }
465
+ setConfirmLoading(true);
466
+ try {
467
+ const payload = { ...originData.current, ...values, ...(id != null ? { id } : {}) } as XxxVO;
468
+ if (id != null) {
469
+ await updateXxx(payload); message.success('修改成功');
470
+ } else {
471
+ await createXxx(payload); message.success('新增成功');
472
+ }
473
+ onSuccess();
474
+ } catch (err) {
475
+ message.error((err as Error).message || '操作失败');
476
+ } finally {
477
+ setConfirmLoading(false);
478
+ }
479
+ };
480
+
481
+ return (
482
+ <Modal title={id != null ? '编辑' : '新增'} open={open}
483
+ confirmLoading={confirmLoading}
484
+ onOk={handleOk} onCancel={onCancel}
485
+ width={580} destroyOnHidden>
486
+ <Form form={form} initialValues={DEFAULT_FORM}>
487
+ {/* fields */}
488
+ </Form>
489
+ </Modal>
490
+ );
491
+ };
492
+ ```
493
+
494
+ ### 7.3 Drawer 标准模板
495
+
496
+ > 表单较复杂(字段 ≥ 4 个)或业务流程需要连续操作时,推荐使用右侧 Drawer 替代 Modal。
497
+
498
+ ```tsx
499
+ import { Drawer, Form, Input, Select, InputNumber, DatePicker, Button, Space, Row, Col, message } from 'antd';
500
+
501
+ interface Props {
502
+ open: boolean;
503
+ id: number | null;
504
+ onSuccess: () => void;
505
+ onClose: () => void; // ← Drawer 用 onClose,不用 onCancel
506
+ }
507
+
508
+ const XxxDrawer: React.FC<Props> = ({ open, id, onSuccess, onClose }) => {
509
+ const [form] = Form.useForm();
510
+ const isEdit = id != null;
511
+
512
+ useEffect(() => {
513
+ if (open && id) {
514
+ getXxx(id).then(({ data }) => {
515
+ form.setFieldsValue({ ...data, dateField: dayjs(data.dateField) });
516
+ });
517
+ } else {
518
+ form.resetFields();
519
+ }
520
+ }, [open, id, form]);
521
+
522
+ const handleOk = async () => {
523
+ try {
524
+ const values = await form.validateFields();
525
+ const params = { ...values, id: id || undefined };
526
+ if (isEdit) {
527
+ await updateXxx(params);
528
+ } else {
529
+ await createXxx(params);
530
+ }
531
+ message.success('操作成功');
532
+ onSuccess();
533
+ } catch (error) {
534
+ // Validation failed
535
+ }
536
+ };
537
+
538
+ return (
539
+ <Drawer
540
+ title={isEdit ? '编辑' : '新增'}
541
+ open={open}
542
+ onClose={onClose}
543
+ destroyOnHidden={true}
544
+ size={600}
545
+ closable={{ placement: 'end' }}
546
+ mask={{ closable: false }}
547
+ styles={{ body: { background: '#f5f5f5' } }}
548
+ footer={
549
+ <Space style={{ float: 'right' }}>
550
+ <Button onClick={onClose}>取消</Button>
551
+ <Button type="primary" onClick={handleOk}>确定</Button>
552
+ </Space>
553
+ }
554
+ >
555
+ <Card style={{ border: 'none' }}>
556
+ <Form form={form} layout="vertical">
557
+ {/* fields — 根据字段数量选择布局,见 7.1 整体布局原则 */}
558
+ </Form>
559
+ </Card>
560
+ </Drawer>
561
+ );
562
+ };
563
+ ```
564
+
565
+
566
+ ### 7.4 表单一栏布局
567
+
568
+ > 字段 4~10 个时使用,Drawer 宽度 256,`layout="vertical"` 垂直单列排列。
569
+
570
+ ```tsx
571
+ // 一栏布局:垂直单列,layout="vertical",无需 Row/Col
572
+ <Form form={form} layout="vertical">
573
+ <Form.Item name="fieldA" label="字段A" rules={[{ required: true }]}>
574
+ <Input />
575
+ </Form.Item>
576
+ <Form.Item name="fieldB" label="字段B" rules={[{ required: true }]}>
577
+ <Select options={[...]} />
578
+ </Form.Item>
579
+ <Form.Item name="fieldC" label="字段C" rules={[{ required: true }]}>
580
+ <InputNumber style={{ width: '100%' }} />
581
+ </Form.Item>
582
+ <Form.Item name="fieldD" label="字段D" rules={[{ required: true }]}>
583
+ <DatePicker style={{ width: '100%' }} />
584
+ </Form.Item>
585
+ {/* 继续追加字段即可,无需 Row/Col 包裹 */}
586
+ </Form>
587
+ ```
588
+
589
+ ### 7.5 表单两栏布局
590
+
591
+ > 字段 10~20 个时使用,每行两个 `Col span={12}`,`gutter={16}` 控制列间距。
592
+
593
+ ```tsx
594
+ // 两栏布局:每行两个 Col span={12},gutter={16} 控制列间距
595
+ <Form form={form} layout="vertical">
596
+ <Row gutter={16}>
597
+ <Col span={12}>
598
+ <Form.Item name="fieldA" label="字段A" rules={[{ required: true }]}>
599
+ <Input />
600
+ </Form.Item>
601
+ </Col>
602
+ <Col span={12}>
603
+ <Form.Item name="fieldB" label="字段B" rules={[{ required: true }]}>
604
+ <Select options={[...]} />
605
+ </Form.Item>
606
+ </Col>
607
+ </Row>
608
+ <Row gutter={16}>
609
+ <Col span={12}>
610
+ <Form.Item name="fieldC" label="字段C" rules={[{ required: true }]}>
611
+ <InputNumber style={{ width: '100%' }} />
612
+ </Form.Item>
613
+ </Col>
614
+ <Col span={12}>
615
+ <Form.Item name="fieldD" label="字段D" rules={[{ required: true }]}>
616
+ <DatePicker style={{ width: '100%' }} />
617
+ </Form.Item>
618
+ </Col>
619
+ </Row>
620
+ {/* 奇数个字段时,最后一行可只放一个 Col span={12} */}
621
+ <Row gutter={16}>
622
+ <Col span={12}>
623
+ <Form.Item name="fieldE" label="字段E" rules={[{ required: true }]}>
624
+ <InputNumber style={{ width: '100%' }} />
625
+ </Form.Item>
626
+ </Col>
627
+ </Row>
628
+ </Form>
629
+ ```
630
+
631
+ **关键规则**:
632
+ - 一栏:`layout="vertical"`,无需 `labelCol`/`wrapperCol`,直接排列 `Form.Item`
633
+ - 两栏及以上:Form 设置 `layout="horizontal"` + `labelCol={{ span: 8 }}`,每行 `Row gutter={16}`
634
+ - 每个 `Col span={12}` 放一个 `Form.Item`,输入组件统一 `style={{ width: '100%' }}` 撑满
635
+ - Label 较短的字段可适当调小 `labelCol` 和 `wrapperCol` 比例
636
+ - 奇数字段最后一行放剩余 `Col` 即可(不足不补)
637
+
638
+ ### 7.6 表单三栏布局
639
+
640
+ > 字段在 20~30 个之间时,使用三栏布局,每行三个 `Col span={8}`。
641
+
642
+ ```tsx
643
+ // 三栏布局:每行三个 Col span={8},gutter={16}
644
+ <Form form={form} layout="vertical" >
645
+ <Row gutter={16}>
646
+ <Col span={8}>
647
+ <Form.Item name="fieldA" label="字段A" rules={[{ required: true }]}>
648
+ <Input />
649
+ </Form.Item>
650
+ </Col>
651
+ <Col span={8}>
652
+ <Form.Item name="fieldB" label="字段B" rules={[{ required: true }]}>
653
+ <Select options={[...]} />
654
+ </Form.Item>
655
+ </Col>
656
+ <Col span={8}>
657
+ <Form.Item name="fieldC" label="字段C" rules={[{ required: true }]}>
658
+ <InputNumber style={{ width: '100%' }} />
659
+ </Form.Item>
660
+ </Col>
661
+ </Row>
662
+ <Row gutter={16}>
663
+ <Col span={8}>
664
+ <Form.Item name="fieldD" label="字段D" rules={[{ required: true }]}>
665
+ <DatePicker style={{ width: '100%' }} />
666
+ </Form.Item>
667
+ </Col>
668
+ {/* 尾部不足 3 个时按实际数量放即可,无需补空白 Col */}
669
+ </Row>
670
+ </Form>
671
+ ```
672
+
673
+ ### 7.7 表单四栏布局
674
+
675
+ > 字段超过 30 个时,使用四栏布局,每行四个 `Col span={6}`,Drawer 宽度 1024。
676
+
677
+ ```tsx
678
+ // 四栏布局:每行四个 Col span={6}
679
+ <Form form={form} layout="vertical">
680
+ <Row gutter={16}>
681
+ <Col span={6}>
682
+ <Form.Item name="fieldA" label="字段A" rules={[{ required: true }]}>
683
+ <Input />
684
+ </Form.Item>
685
+ </Col>
686
+ <Col span={6}>
687
+ <Form.Item name="fieldB" label="字段B" rules={[{ required: true }]}>
688
+ <Select options={[...]} />
689
+ </Form.Item>
690
+ </Col>
691
+ <Col span={6}>
692
+ <Form.Item name="fieldC" label="字段C" rules={[{ required: true }]}>
693
+ <InputNumber style={{ width: '100%' }} />
694
+ </Form.Item>
695
+ </Col>
696
+ <Col span={6}>
697
+ <Form.Item name="fieldD" label="字段D" rules={[{ required: true }]}>
698
+ <DatePicker style={{ width: '100%' }} />
699
+ </Form.Item>
700
+ </Col>
701
+ </Row>
702
+ </Form>
703
+ ```
704
+
705
+ ### 7.8 约定
706
+
707
+ - Props 固定四件套:`open`, `id`, `onSuccess`, `onCancel`(Modal)/ `onClose`(Drawer),**不要**再用 `defineExpose / ref.open()`
708
+ - Drawer 标题统一「新增 / 编辑」,Modal 同理
709
+ - `originData = useRef()` 保留服务端字段,提交时合并:`{ ...originData.current, ...values, id }`
710
+ - 编辑模式下隐藏字段用 `hidden={!!id}` 而非条件渲染(条件渲染会让 `validateFields` 跳过该字段)
711
+ - 用 `destroyOnHidden` 自动清理状态,**不要**手动 reset
712
+
713
+ ---
714
+
715
+ ## 八、TypeScript 规范
716
+
717
+ ### 8.1 类型定义
718
+
719
+ ```typescript
720
+ // 优先使用 interface(可扩展),联合类型 / 工具类型使用 type
721
+ interface User {
722
+ id: number;
723
+ name: string;
724
+ email: string;
725
+ active: boolean;
726
+ }
727
+
728
+ // 联合类型
729
+ type Status = 'success' | 'warning' | 'danger';
730
+
731
+ // API 响应类型(来自 @/types/api,不要重写)
732
+ interface ApiResponse<T> {
733
+ code: number;
734
+ message: string;
735
+ data: T;
736
+ }
737
+
738
+ interface PageResult<T> {
739
+ total: number;
740
+ rows: T[];
741
+ }
742
+ ```
743
+
744
+ ### 8.2 类型规则
745
+
746
+ - **禁用 `any`**;必须时单行 `// eslint-disable-next-line @typescript-eslint/no-explicit-any`
747
+ - API 入参 / 出参 / store 必须显式类型
748
+ - Hook 暴露的 ref 类型用 `forwardRef<Handle, Props>` + `useImperativeHandle`
749
+ - 不要写 `as any`;要么写正确类型,要么 `as unknown as Xxx`
750
+ - 类型文件放在 `src/types/`,按领域组织
751
+
752
+ ---
753
+
754
+ ## 九、样式规范
755
+
756
+ ### 9.1 CSS 文件
757
+
758
+ - 使用独立的 `.css` 文件,搭配功能名前缀类名(如 `.user-list`)
759
+ - 类名使用 kebab-case
760
+ - 避免使用缩写,如 `.btn` → `.button`
761
+
762
+ ### 9.2 Ant Design 样式定制
763
+
764
+ - 优先使用 Ant Design 组件的内置属性(`size`, `type`, `variant`)
765
+ - 全局主题定制通过 `ConfigProvider` 的 `theme` 属性
766
+ - 局部覆盖样式使用 CSS 类 + 选择器,避免 `!important`
767
+ - **自定义 SCSS 变量覆盖 → 改用 `ConfigProvider` + `theme.token`**
768
+
769
+ ### 9.3 响应式设计
770
+
771
+ - 使用 Ant Design 的 `Grid` 组件(`Row` / `Col`)进行响应式布局
772
+ - 断点参考 Ant Design 预设:`xs < 576 < sm < 768 < md < 992 < lg < 1200 < xl`
773
+ - **左右分栏用原生 `display: flex`**,不要用 `Row/Col`(`Row` 默认 `flex-wrap: wrap` 会被换行)
774
+
775
+ ---
776
+
777
+ ## 十、路由规范
778
+
779
+ ### 10.1 路由定义
780
+
781
+ ```typescript
782
+ import { createBrowserRouter } from 'react-router';
783
+
784
+ const router = createBrowserRouter([
785
+ { path: '/login', Component: LoginPage },
786
+ {
787
+ path: '/',
788
+ Component: AdminLayout,
789
+ children: [
790
+ { path: 'dashboard', Component: DashboardPage },
791
+ { path: 'profile', Component: ProfilePage },
792
+ { path: '*', Component: NotFoundPage },
793
+ ],
794
+ },
795
+ ]);
796
+ ```
797
+
798
+ ### 10.2 动态路由注入
799
+
800
+ - 登录成功后通过 `addDynamicRoutes(menus)` 动态注入路由
801
+ - 使用 `import.meta.glob('@/pages/**/index.{tsx,jsx}')` 实现懒加载
802
+ - 配合 `Suspense` + `Spin` 提供加载态反馈
803
+ - 退出登录时调用 `resetDynamicRoutes()` 清除动态路由
804
+ - **外部链接(http/https 路径)在路由生成时被过滤**
805
+
806
+ ### 10.3 路由导航
807
+
808
+ ```typescript
809
+ import { useNavigate, useSearchParams, useParams } from 'react-router';
810
+
811
+ const navigate = useNavigate();
812
+ const [searchParams] = useSearchParams();
813
+ const { id } = useParams();
814
+
815
+ navigate('/user/list');
816
+ navigate(`/user/detail/${id}`);
817
+ navigate(-1); // 返回上一页
818
+ ```
819
+
820
+ ### 10.4 路由守卫
821
+
822
+ - 使用 `<AuthGuard>` 组件保护受保护的路由
823
+ - AuthGuard 检查 token 和 userInfo,未登录则重定向至 `/login`
824
+ - 携带 `redirect` 参数以便登录后自动跳转回原页面
825
+ - AuthGuard 使用 `useRef` 守卫防止重复 fetch
826
+
827
+ ---
828
+
829
+ ## 十一、状态管理规范
830
+
831
+ ### 11.1 Zustand Store 结构
832
+
833
+ ```typescript
834
+ // stores/useAuthStore.ts
835
+ import { create } from 'zustand';
836
+
837
+ interface AuthState {
838
+ token: string | null;
839
+ userInfo: UserInfo | null;
840
+ roles: string[];
841
+ permissions: string[];
842
+ menus: Permission[];
843
+ setToken: (token: string) => void;
844
+ login: (username: string, password: string) => Promise<void>;
845
+ logout: () => void;
846
+ hasPermission: (code: string) => boolean;
847
+ }
848
+
849
+ export const useAuthStore = create<AuthState>((set, get) => ({
850
+ token: null,
851
+ userInfo: null,
852
+ roles: [],
853
+ permissions: [],
854
+ menus: [],
855
+ setToken: (token) => set({ token }),
856
+ login: async (username, password) => {
857
+ const res = await login({ username, password });
858
+ set({ token: res.data.accessToken });
859
+ },
860
+ logout: () => set({ token: null, userInfo: null, roles: [], permissions: [], menus: [] }),
861
+ hasPermission: (code) => {
862
+ const { permissions } = get();
863
+ return permissions.includes('*:*:*') || permissions.includes(code);
864
+ },
865
+ }));
866
+ ```
867
+
868
+ ### 11.2 Store 使用规范
869
+
870
+ ```typescript
871
+ import { useAuthStore } from '@/stores/useAuthStore';
872
+
873
+ export default function UserList() {
874
+ // 选择器模式避免不必要的重渲染
875
+ const { token, hasPermission } = useAuthStore();
876
+ const userName = useAuthStore((state) => state.userInfo?.name);
877
+ const canDelete = hasPermission('system:user:delete');
878
+
879
+ return <div>{userName}</div>;
880
+ }
881
+ ```
882
+
883
+ ### 11.3 Store 分类
884
+
885
+ | Store | 职责 | 持久化 |
886
+ | -------------- | --------------------------- | ----------------------------------- |
887
+ | `useAuthStore` | token、用户信息、权限、菜单 | 否(页面刷新清空) |
888
+ | `useAppStore` | 侧边栏折叠状态、暗色模式 | 是(localStorage: `admin-pro-app`) |
889
+ | `useDictStore` | 字典类型到数据的映射 | 否 |
890
+
891
+ ---
892
+
893
+ ## 十二、API 接口规范
894
+
895
+ ### 12.1 文件组织
896
+
897
+ ```typescript
898
+ // api/system/user.ts
899
+ import request from '@/utils/request';
900
+ import type { ApiResponse, PageResult, PageParams } from '@/types/api';
901
+
902
+ export interface UserVO {
903
+ id?: number;
904
+ name: string;
905
+ createTime?: string;
906
+ }
907
+
908
+ export const getUserPage = (params: PageParams) =>
909
+ request.get<unknown, ApiResponse<PageResult<UserVO>>>('/system/user/page', { params });
910
+
911
+ export const getUser = (id: number) =>
912
+ request.get<unknown, ApiResponse<UserVO>>(`/system/user/get?id=${id}`);
913
+
914
+ export const createUser = (data: UserVO) =>
915
+ request.post<unknown, ApiResponse<void>>('/system/user/create', data);
916
+
917
+ export const updateUser = (data: UserVO) =>
918
+ request.put<unknown, ApiResponse<void>>('/system/user/update', data);
919
+
920
+ export const deleteUser = (id: number) =>
921
+ request.delete<unknown, ApiResponse<void>>(`/system/user/delete?id=${id}`);
922
+
923
+ export const deleteUserList = (ids: number[]) =>
924
+ request.delete<unknown, ApiResponse<void>>(`/system/user/delete-list?ids=${ids.join(',')}`);
925
+ ```
926
+
927
+ ### 12.2 约定
928
+
929
+ - `ApiResponse<T>`、`PageParams`、`PageResult<T>` 来自 `@/types/api`,**不要重写**
930
+ - `code === 0` 时拦截器自动解包;`code === 401` 自动跳登录;其余 `Promise.reject` 并 `message.error`
931
+ - 文件下载用 `download(url, params)`(`@/utils/request` 导出,自动 blob + Content-Disposition 解析)
932
+ - Axios 实例超时时间 30s
933
+ - 请求拦截器自动附加 `Bearer` token 和 `tenant-id` 头
934
+ - **Token 刷新**:并发 401 请求排队,刷新 token 后重放
935
+
936
+ ### 12.3 响应码
937
+
938
+ | code | 含义 |
939
+ | ----- | --------------------------------- |
940
+ | `0` | 成功 |
941
+ | `401` | 未授权(自动刷新 token 或跳登录) |
942
+ | 其他 | 失败,`message` 为错误提示 |
943
+
944
+ ---
945
+
946
+ ## 十三、国际化(i18n)规范
947
+
948
+ 项目使用 `react-i18next` + `i18next-resources-to-backend` 实现多语言支持,通过 Vite 的 `import.meta.glob` 自动加载所有 locale 文件,**无需手动注册**。
949
+
950
+ ### 13.1 语言包目录结构
951
+
952
+ ```
953
+ src/locales/
954
+ ├── zh-CN/ # 简体中文(默认语言)
955
+ │ ├── system/
956
+ │ │ ├── post.ts
957
+ │ │ └── user.ts
958
+ │ ├── mdm/
959
+ │ │ ├── codeRule.ts
960
+ │ │ └── codeMapping.ts
961
+ │ ├── login.ts
962
+ │ ├── common.ts
963
+ │ └── ...
964
+ ├── en-US/ # 英文
965
+ │ ├── system/
966
+ │ ├── mdm/
967
+ │ └── ...
968
+ ├── ja-JP/ # 日语
969
+ ├── fr-FR/ # 法语
970
+ ├── es-ES/ # 西班牙语
971
+ ├── ar-SA/ # 阿拉伯语
972
+ ├── ru-RU/ # 俄语
973
+ └── de-DE/ # 德语
974
+ ```
975
+
976
+ ### 13.2 命名空间(Namespace)
977
+
978
+ - 每个 locale 文件的路径即为命名空间名。例如 `src/locales/zh-CN/mdm/codeRule.ts` 对应 `useTranslation('mdm/codeRule')`。
979
+ - **命名空间路径规则**:按模块目录组织,文件名与业务模块对应。
980
+ - 通用文案放在 `common.ts`(`common` 命名空间),页面/模块级文案放在对应子目录。
981
+
982
+ ### 13.3 语言包文件格式
983
+
984
+ ```typescript
985
+ // src/locales/zh-CN/mdm/codeRule.ts
986
+ export default {
987
+ table: {
988
+ id: '编号',
989
+ ruleName: '规则名称',
990
+ createTime: '创建时间',
991
+ action: '操作',
992
+ },
993
+ form: {
994
+ ruleName: '规则名称',
995
+ inputRuleName: '请输入规则名称',
996
+ editTitle: '编辑编码规则',
997
+ addTitle: '新增编码规则',
998
+ },
999
+ btn: {
1000
+ add: '新增',
1001
+ edit: '编辑',
1002
+ delete: '删除',
1003
+ },
1004
+ msg: {
1005
+ deleteSuccess: '删除成功',
1006
+ updateSuccess: '更新成功',
1007
+ createSuccess: '创建成功',
1008
+ deleteConfirm: '确认删除该编码规则?',
1009
+ },
1010
+ };
1011
+ ```
1012
+
1013
+ **结构约定**:
1014
+ - 统一使用嵌套对象,**不导出具名变量**。
1015
+ - 按 UI 区域分组:`table`(列标题)、`form`(表单标签/占位符/弹窗标题)、`btn`(按钮文案)、`msg`(提示/确认消息)。
1016
+ - key 用 camelCase,不使用中文拼音或缩写。
1017
+
1018
+ ### 13.4 组件中使用
1019
+
1020
+ ```tsx
1021
+ import { useTranslation } from 'react-i18next';
1022
+
1023
+ const { t } = useTranslation('mdm/codeRule');
1024
+
1025
+ // 表格列
1026
+ { title: t('table.ruleName'), dataIndex: 'ruleName' }
1027
+
1028
+ // 按钮文案
1029
+ <Button>{t('btn.add')}</Button>
1030
+
1031
+ // 成功提示
1032
+ message.success(t('msg.createSuccess'));
1033
+
1034
+ // 带插值
1035
+ t('msg.deleteConfirm', { name: record.ruleName })
1036
+ // 对应语言包中: "确认删除「{{name}}」吗?"
1037
+ ```
1038
+
1039
+ ### 13.5 Modal 标题动态化
1040
+
1041
+ ```tsx
1042
+ <Modal title={id ? t('form.editTitle') : t('form.addTitle')} ...>
1043
+ ```
1044
+
1045
+ ### 13.6 新增模块步骤
1046
+
1047
+ **每新增一个业务模块,必须为所有 8 种语言创建对应的 locale 文件**:
1048
+
1049
+ 1. 在 `src/locales/<lng>/<module>/` 下创建语言包文件(codeRule.ts、codeMapping.ts 等)
1050
+ 2. 确保 8 种语言包(zh-CN / en-US / ja-JP / fr-FR / es-ES / ar-SA / ru-RU / de-DE)都包含相同的 key 结构
1051
+ 3. 组件中使用 `useTranslation('<module>/<file>')` 引用
1052
+
1053
+ > **注意**:`i18next` 通过 `import.meta.glob('@/locales/**/*.ts')` 自动加载所有文件,**不需要**在 `src/i18n/index.ts` 中手动注册。
1054
+
1055
+ ### 13.7 语言切换
1056
+
1057
+ 用户通过 Header 的语言切换组件切换语言,切换后调用 `i18n.changeLanguage(lng)` 并持久化到 `localStorage('app-language')`。
1058
+
1059
+ ### 13.8 不支持的语言
1060
+
1061
+ `fallbackLng` 配置为 `'zh-CN'`,任何缺失的 key 都会回落到简体中文。
1062
+
1063
+ ---
1064
+
1065
+ ## 十四、字典系统规范
1066
+
1067
+ 字典在登录后由 `AuthGuard` 一次性 `useDictStore.fetchDictData()` 全部缓存到内存,所有页面直接读:
1068
+
1069
+ ```tsx
1070
+ const getDictOptions = useDictStore((s) => s.getDictOptions);
1071
+ const getDictLabel = useDictStore((s) => s.getDictLabel);
1072
+
1073
+ // 渲染标签
1074
+ <DictTag type="common_status" value={record.status} />
1075
+
1076
+ // ProTable 搜索下拉
1077
+ valueEnum: Object.fromEntries(
1078
+ getDictOptions('ai_platform').map((d) => [d.value, { text: d.label }])
1079
+ )
1080
+
1081
+ // Form Select 下拉
1082
+ options={getDictOptions('system_org_type').map((d) => ({
1083
+ label: d.label, value: Number(d.value), // ← 字段是 number 时记得转
1084
+ }))}
1085
+ ```
1086
+
1087
+ **新增字典必须三处都加**(`src/mocks/data/index.ts`):
1088
+
1089
+ 1. `mockDictTypes` — 字典类型表
1090
+ 2. `mockDictData` — 字典数据表(注意 value 始终是 string)
1091
+ 3. 业务代码的 `<DictTag type="...">` 与 `getDictOptions('...')`
1092
+
1093
+ > **注意**:字典 `value` 在数据库是 string;如果业务字段类型是 number(如 `status: number`),表单 Select 的 `value` 要 `Number(d.value)` 转回去。
1094
+
1095
+ ---
1096
+
1097
+ ## 十五、权限系统规范
1098
+
1099
+ ### 14.1 组件级权限
1100
+
1101
+ ```tsx
1102
+ import Access from '@/components/Access';
1103
+ import { useAccess } from '@/components/Access';
1104
+
1105
+ // 组件级权限控制
1106
+ <Access code="system:user:create">
1107
+ <Button type="primary">新增</Button>
1108
+ </Access>
1109
+
1110
+ // Hook 级权限控制
1111
+ const canUpdate = useAccess('system:menu:update');
1112
+ ```
1113
+
1114
+ ### 14.2 权限检查
1115
+
1116
+ - 权限码格式:`system:user:create`(模块:资源:操作)
1117
+ - `*:*:*` 代表超级管理员,拥有所有权限
1118
+ - `checkPermi(permissions[])` 检查是否有**任意一个**权限
1119
+ - `checkRole(roles[])` 检查是否有**任意一个**角色(`super_admin` 跳过)
1120
+
1121
+ ### 14.3 新增菜单+按钮权限三步
1122
+
1123
+ 1. `mockAdminBackendMenus`(或子菜单数组)加 type=2 菜单 + type=3 子按钮(path 为空,name 中文)
1124
+ 2. `collectPermissionsFromBackendMenus` 的 `codeMap` 注册 `中文名 → 权限码`
1125
+ 3. 业务代码用 `<Access code="xxx">` 包裹按钮
1126
+
1127
+ ---
1128
+
1129
+ ## 十六、Mock 规范
1130
+
1131
+ ### 15.1 新建模块步骤
1132
+
1133
+ 1. `src/mocks/data/index.ts` 加 mock 类型 + seed 数据 + 必要字典
1134
+ 2. `src/mocks/handlers/<module>.ts` 写 MSW handler,统一 `success(data)` helper
1135
+ 3. 在 `src/mocks/handlers/index.ts` 注册到 `handlers` 数组
1136
+ 4. 路径必须以 `/admin-api/` 开头
1137
+
1138
+ ### 15.2 Handler 模板
1139
+
1140
+ ```ts
1141
+ import { http, HttpResponse } from 'msw';
1142
+
1143
+ function success<T>(data: T) {
1144
+ return HttpResponse.json({ code: 0, message: 'ok', data });
1145
+ }
1146
+
1147
+ http.get('/admin-api/xxx/page', async ({ request }) => {
1148
+ await delay(150);
1149
+ const url = new URL(request.url);
1150
+ const pageNo = Number(url.searchParams.get('pageNo') || '1');
1151
+ const pageSize = Number(url.searchParams.get('pageSize') || '10');
1152
+ // 过滤、分页
1153
+ return success({ list, total });
1154
+ }),
1155
+ ```
1156
+
1157
+ > **注意**:MSW handler 路径**必须**带 `/admin-api/` 前缀,否则拦截不到。
1158
+
1159
+ ---
1160
+
1161
+ ## 十七、上传组件规范
1162
+
1163
+ ### 16.1 标准用法
1164
+
1165
+ ```tsx
1166
+ import { Upload } from 'antd';
1167
+ import { getAccessToken } from '@/utils/token';
1168
+ import { useAuthStore } from '@/stores/useAuthStore';
1169
+
1170
+ <Upload
1171
+ name="file"
1172
+ action="/admin-api/infra/file/upload"
1173
+ headers={{
1174
+ Authorization: `Bearer ${getAccessToken() ?? ''}`,
1175
+ 'tenant-id': String(useAuthStore.getState().tenantId ?? ''),
1176
+ }}
1177
+ beforeUpload={...}
1178
+ onChange={({ file }) => {
1179
+ if (file.status === 'done') {
1180
+ const resp = file.response as { code?: number; data?: string };
1181
+ if (resp?.code === 0 && resp.data) {
1182
+ form.setFieldsValue({ avatar: resp.data });
1183
+ }
1184
+ }
1185
+ }}
1186
+ />
1187
+ ```
1188
+
1189
+ 或直接使用项目封装:`import { UploadFile, UploadImg, UploadImgs } from '@/components/UploadFile'`。
1190
+
1191
+ ### 16.2 Upload 在 Form 中的正确使用
1192
+
1193
+ > AntD `Upload` 不识别 `value` 属性。`<Form.Item name="logo">` 默认会注入 `value` → Upload 报警告。
1194
+
1195
+ **正确做法**:外层 `Form.Item` 仅做标签(不带 `name`),里面套一个 `<Form.Item name="logo" noStyle hidden><Input /></Form.Item>` 持有值,Upload 通过 `form.setFieldsValue({ logo: url })` 写入。
1196
+
1197
+ ---
1198
+
1199
+ ## 十八、时间格式化规范
1200
+
1201
+ **统一使用 `dateFormatter`**,禁止页面内手写 `dayjs().format(...)` 或字符串拼接:
1202
+
1203
+ ```tsx
1204
+ import { dateFormatter } from '@/utils/formatTime';
1205
+
1206
+ // ProTable 列
1207
+ render: (_, record) => dateFormatter(record.createTime) || '-',
1208
+
1209
+ // Descriptions
1210
+ <Descriptions.Item label="创建时间">{dateFormatter(data.createTime) || '-'}</Descriptions.Item>
1211
+ ```
1212
+
1213
+ `dateFormatter` 接受 `string | number | Date | null`,统一返回 `YYYY-MM-DD HH:mm:ss`,空值返回空串。
1214
+
1215
+ > **注意**:如果后端 `createTime` 可能是 number/Date,统一用 `new Date(value).getTime()` 包装再比较。
1216
+
1217
+ ---
1218
+
1219
+ ## 十九、性能优化规范
1220
+
1221
+ ### 18.1 组件优化
1222
+
1223
+ ```tsx
1224
+ // 路由级代码分割
1225
+ import { lazy, Suspense } from 'react';
1226
+ import { Spin } from 'antd';
1227
+
1228
+ const UserList = lazy(() => import('@/pages/user-list'));
1229
+
1230
+ <Suspense fallback={<Spin size="large" />}>
1231
+ <UserList />
1232
+ </Suspense>;
1233
+
1234
+ // 避免不必要的重渲染
1235
+ export const UserItem = React.memo(function UserItem({ user }: { user: User }) {
1236
+ return <div>{user.name}</div>;
1237
+ });
1238
+ ```
1239
+
1240
+ ### 18.2 Hooks 优化
1241
+
1242
+ ```tsx
1243
+ // useCallback 缓存事件处理函数
1244
+ const handleDelete = useCallback(async (id: number) => {
1245
+ await deleteUser(id);
1246
+ fetchList();
1247
+ }, [fetchList]);
1248
+
1249
+ // useMemo 缓存计算结果
1250
+ const filteredUsers = useMemo(
1251
+ () => users.filter((user) => user.active),
1252
+ [users],
1253
+ );
1254
+ ```
1255
+
1256
+ ### 18.3 列表渲染
1257
+
1258
+ ```tsx
1259
+ // 必须提供稳定的 key
1260
+ {users.map((user) => <UserItem key={user.id} user={user} />)}
1261
+ ```
1262
+
1263
+ ---
1264
+
1265
+ ## 二十、代码质量标准
1266
+
1267
+ ### 19.1 代码复杂度
1268
+
1269
+ - 单个函数不超过 50 行
1270
+ - 单个文件不超过 300 行,超出按职责拆分
1271
+ - 嵌套层级不超过 3 层
1272
+ - 圈复杂度不超过 10
1273
+
1274
+ ### 19.2 错误处理
1275
+
1276
+ ```typescript
1277
+ async function handleSubmit(values: UserFormValues) {
1278
+ try {
1279
+ await createUser(values);
1280
+ message.success('新增成功');
1281
+ closeModal();
1282
+ } catch (error) {
1283
+ // request 拦截器已弹出错误提示,此处可做额外处理
1284
+ console.error('创建用户失败:', error);
1285
+ }
1286
+ }
1287
+ ```
1288
+
1289
+ ### 19.3 ESLint 规则
1290
+
1291
+ - 使用 `typescript-eslint` 进行 TypeScript 感知检查
1292
+ - 启用 `eslint-plugin-react-hooks` 检查 Hooks 使用规则
1293
+ - 启用 `eslint-plugin-react-refresh` 检查 HMR 兼容性
1294
+ - 禁止在 `useEffect` 中遗漏依赖项
1295
+ - 提交前必须本地通过:`npx tsc -b` 与 `npx eslint <changed-files>`
1296
+
1297
+ ### 19.4 构建
1298
+
1299
+ - 构建必须通过:`npm run build`(等价于 `tsc -b && vite build`)
1300
+
1301
+ ---
1302
+
1303
+ ## 二十一、常见问题规范(必读陷阱)
1304
+
1305
+ > 以下均为项目实际踩过的坑,新增代码时必须注意。
1306
+
1307
+ ### 20.1 `form.validateFields()` 只返回已挂载 Form.Item
1308
+
1309
+ - 编辑模式隐藏字段(如 `username/password`)不会被收集
1310
+ - 提交时必须 `{ ...originData.current, ...values, id }` 合并
1311
+ - 隐藏字段用 `hidden={!!id}`,**不要**用 `{!id && <Form.Item>}`
1312
+
1313
+ ### 20.2 AntD `Upload` 不识别 `value` 属性
1314
+
1315
+ - `<Form.Item name="logo">` 默认会注入 `value` → Upload 报警告
1316
+ - **正确做法**:外层 `Form.Item` 仅做标签(不带 `name`),里面套 `<Form.Item name="logo" noStyle hidden><Input /></Form.Item>` 持有值
1317
+
1318
+ ### 20.3 AntD Tree `onSelect` 点击已选节点返回空数组
1319
+
1320
+ - 不要自己做 toggle,直接判断 `keys.length === 0`
1321
+
1322
+ ### 20.4 AntD Tree 勾选要收集 `halfCheckedKeys`
1323
+
1324
+ - 菜单权限分配父节点半选也要提交,用 `onCheck` 的 `info.halfCheckedKeys`
1325
+
1326
+ ### 20.5 Tree 编辑回显只勾选叶子节点
1327
+
1328
+ - 直接 `setCheckedKeys(所有menuIds)` 会让父节点全选 → 子节点都被选
1329
+ - 用 `getLeafKeys()` 只勾叶子
1330
+
1331
+ ### 20.6 `react-hooks/set-state-in-effect`
1332
+
1333
+ - `useEffect` 内调 `setState` 或调用内部包含 setState 的函数会被 lint 标记
1334
+ - **统一处理**:在 setState 行(或 `void fetchList()` 行)上方加 `// eslint-disable-next-line react-hooks/set-state-in-effect`
1335
+
1336
+ ### 20.7 MSW 路径必须 `/admin-api/` 前缀
1337
+
1338
+ - `baseURL = http://127.0.0.1:48080/admin-api`,handler 不带 `/admin-api/` 拦截不到
1339
+
1340
+ ### 20.8 flex 代替 Row/Col 做左右分栏
1341
+
1342
+ - AntD `Row` 默认 `flex-wrap: wrap`,左侧树+右侧列表会被换行
1343
+ - 用原生 `display: flex` + `flexShrink: 0`
1344
+
1345
+ ### 20.9 Drawer 宽度直接使用 `width` 属性
1346
+
1347
+ - Ant Design 6 中 `width` 属性直接可用:`<Drawer width={600}>`
1348
+ - 默认宽度 378px,常用值:480 / 520 / 600 / 720
1349
+ - 也可用 `size="large"` 取预设(约 736px)
1350
+
1351
+ ### 20.10 Badge 显示数字而非红点
1352
+
1353
+ - `<Badge count={n} overflowCount={99} size="small">` 而非 `dot`
1354
+ - count 为 0 时 antd 自动隐藏徽标
1355
+
1356
+ ### 20.11 `localeCompare` 仅对 string 有效
1357
+
1358
+ - 如果后端 `createTime` 可能是 number/Date,统一用 `new Date(v).getTime()` 比较
1359
+
1360
+ ### 20.12 ProTable `valueType: 'dateRange'` 列必须用 `render` 而非 `renderText`
1361
+
1362
+ - `renderText` 会被 valueType 的 dateRange 处理逻辑覆盖,单元格显示空白
1363
+
1364
+ ### 20.13 页面文件路径必须等于后端菜单 `component`
1365
+
1366
+ - 例:后端给 `infra/data-source-config/index` → 文件 `src/pages/infra/data-source-config/index.tsx`
1367
+ - 错位会出现 `Component not found` 警告,并 404
1368
+
1369
+ ### 20.14 mock 菜单注册点要更新 codeMap
1370
+
1371
+ - 加新权限按钮时除了菜单数组,还要在 `collectPermissionsFromBackendMenus` 内的 `codeMap` 注册
1372
+
1373
+ ### 20.15 避免缓存数据为空导致 Select 显示原始 ID
1374
+
1375
+ - 父组件应在挂载时一次性加载下拉数据:`useEffect(() => { fetch(); }, [])`,**不要**只在「新增」按钮 onClick 中拉
1376
+
1377
+ ### 20.16 CRLF/LF 警告
1378
+
1379
+ - Windows 上 git add 会提示 `LF will be replaced by CRLF`,无需处理
1380
+
1381
+ ---
1382
+
1383
+ ## 二十二、Vue → React 迁移映射表
1384
+
1385
+ | Vue (Element Plus) | React (Ant Design 6) |
1386
+ | --------------------------------------- | -------------------------------------------------------------------- |
1387
+ | `<el-form v-model>` | `<Form form={form}>` + `Form.useForm()` |
1388
+ | `ref.validate()` | `await form.validateFields()`(**只返回已挂载字段**) |
1389
+ | `<el-dialog :visible>` | `<Modal open={open}>` |
1390
+ | `<el-drawer :visible>` | `<Drawer open={open} onClose={...}>` |
1391
+ | `defineExpose({ open })` | props: `open, id, onSuccess, onCancel`(Modal)/ `onClose`(Drawer) |
1392
+ | `<el-table><el-table-column>` | `<ProTable columns={[...]} request={...} />` |
1393
+ | `v-model` 双向绑定 | `useState` + `value/onChange` |
1394
+ | `reactive() / ref()` | `useState()` |
1395
+ | `onMounted()` | `useEffect(() => {}, [])` |
1396
+ | `watch()` | `useEffect(() => {}, [dep])` |
1397
+ | `computed()` | `useMemo()` |
1398
+ | `defineEmits(['success'])` | `props.onSuccess()` |
1399
+ | `pinia store` | `zustand store` |
1400
+ | `v-hasPermi` | `<Access code="xxx">` |
1401
+ | `v-loading` | `<Spin spinning>` 或组件自身 `loading` 属性 |
1402
+ | `message.delConfirm()` | `modal.confirm({ title: '确认删除?', okType: 'danger', onOk })` |
1403
+ | `getStrDictOptions / getIntDictOptions` | `getDictOptions(type)` 统一返回 |
1404
+ | `dateFormatter` | 复用项目同名 `dateFormatter` |
1405
+ | `el-tree show-checkbox` | `<Tree checkable selectable={false}>` + `onClick` 切换 |
1406
+ | `v-model:visible` Drawer/Modal | `open` + `onClose/onCancel` |
1407
+ | `el-input v-model` | `<Input value/onChange>` 受控 |
1408
+ | `el-switch v-model` | `<Switch checked/onChange>` |
1409
+ | 原生 Date | `dayjs(value)` 或 `new Date(value).getTime()` |
1410
+ | 自定义 SCSS 变量覆盖 | `ConfigProvider` + `theme.token` |
1411
+
1412
+ > **Vue 路径 → React 文件**:后端菜单 `component` 字段决定 React 文件位置。`ai/chat/index/index` → `src/pages/ai/chat/index/index.tsx`。
1413
+
1414
+ ---
1415
+
1416
+ ## 总结
1417
+
1418
+ 本规范文档涵盖了 React 19 + TypeScript 6 + Ant Design 6 项目的完整开发规范。团队成员必须严格遵守,以确保代码质量和协作效率。
1419
+
1420
+ **重要提醒**:
1421
+ 1. 所有新代码必须符合本规范
1422
+ 2. 代码评审时重点检查规范遵守情况
1423
+ 3. 定期更新规范以适应项目发展
1424
+ 4. 遇到规范未覆盖的情况,及时讨论并补充
1425
+
1426
+ **新模块自检清单**:
1427
+
1428
+ - [ ] 文件路径与后端菜单 path 对齐
1429
+ - [ ] API、Mock handler、Mock data、菜单、权限码 五处全部更新
1430
+ - [ ] 所有时间字段用 `dateFormatter` 渲染
1431
+ - [ ] 所有字典字段用 `<DictTag>` + `valueEnum`
1432
+ - [ ] 所有按钮用 `<Access code="...">` 包裹
1433
+ - [ ] Modal 用 `open/id/onSuccess/onCancel` 四件套 + `originData` 合并
1434
+ - [ ] ProTable 而非手撸 Card+Form+Table
1435
+ - [ ] `npm run build` 通过
1436
+ - [ ] `npx eslint <new-files>` 零错误
1437
+ - [ ] 关键逻辑加中文注释,复杂分支说明「为什么这么写」
1438
+
1439
+ ---
1440
+
1441
+ **文档结束**
1442
+
1443
+ *本文档作为前端开发的标准规范,所有开发人员必须严格遵守。*