ai-engineering-init 1.1.0

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 (313) hide show
  1. package/.claude/agents/code-reviewer.md +139 -0
  2. package/.claude/agents/project-manager.md +159 -0
  3. package/.claude/audio/completed.wav +0 -0
  4. package/.claude/commands/add-todo.md +255 -0
  5. package/.claude/commands/check.md +210 -0
  6. package/.claude/commands/crud.md +454 -0
  7. package/.claude/commands/dev.md +503 -0
  8. package/.claude/commands/init-docs.md +681 -0
  9. package/.claude/commands/next.md +251 -0
  10. package/.claude/commands/progress.md +242 -0
  11. package/.claude/commands/start.md +199 -0
  12. package/.claude/commands/sync.md +307 -0
  13. package/.claude/commands/update-status.md +428 -0
  14. package/.claude/docs/Mixin/344/275/277/347/224/250/346/214/207/345/215/227.md +299 -0
  15. package/.claude/docs/README.md +167 -0
  16. package/.claude/docs//345/211/215/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +599 -0
  17. package/.claude/docs//345/220/216/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +726 -0
  18. package/.claude/docs//345/267/245/344/275/234/346/265/201/345/274/200/345/217/221/346/214/207/345/215/227.md +714 -0
  19. package/.claude/docs//345/267/245/345/205/267/347/261/273/344/275/277/347/224/250/346/214/207/345/215/227.md +463 -0
  20. package/.claude/docs//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/350/247/204/350/214/203.md +390 -0
  21. package/.claude/docs//346/226/260/345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213/350/247/204/350/214/203.md +688 -0
  22. package/.claude/docs//346/226/260/351/241/271/347/233/256/345/274/200/345/217/221/346/265/201/347/250/213.md +365 -0
  23. package/.claude/docs//346/241/206/346/236/266/350/257/264/346/230/216.md +393 -0
  24. package/.claude/docs//350/267/257/347/224/261/351/205/215/347/275/256/346/214/207/345/215/227.md +246 -0
  25. package/.claude/framework-config.json +73 -0
  26. package/.claude/hooks/pre-tool-use.js +117 -0
  27. package/.claude/hooks/skill-forced-eval.js +167 -0
  28. package/.claude/hooks/stop.js +58 -0
  29. package/.claude/settings.json +41 -0
  30. package/.claude/skills/add-skill/SKILL.md +352 -0
  31. package/.claude/skills/api-development/SKILL.md +560 -0
  32. package/.claude/skills/architecture-design/SKILL.md +756 -0
  33. package/.claude/skills/backend-annotations/SKILL.md +674 -0
  34. package/.claude/skills/banana-image/CHANGELOG.md +37 -0
  35. package/.claude/skills/banana-image/README.md +146 -0
  36. package/.claude/skills/banana-image/SKILL.md +164 -0
  37. package/.claude/skills/banana-image/assets/logo.png +0 -0
  38. package/.claude/skills/banana-image/references/advanced-usage.md +189 -0
  39. package/.claude/skills/banana-image/scripts/apply_template.py +125 -0
  40. package/.claude/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  41. package/.claude/skills/banana-image/scripts/batch_prep.py +82 -0
  42. package/.claude/skills/banana-image/scripts/package-lock.json +1437 -0
  43. package/.claude/skills/banana-image/scripts/package.json +18 -0
  44. package/.claude/skills/banana-image/scripts/requirements.txt +10 -0
  45. package/.claude/skills/banana-image/templates/poster.json +22 -0
  46. package/.claude/skills/banana-image/templates/product.json +17 -0
  47. package/.claude/skills/banana-image/templates/social.json +22 -0
  48. package/.claude/skills/banana-image/templates/thumbnail.json +17 -0
  49. package/.claude/skills/brainstorm/SKILL.md +648 -0
  50. package/.claude/skills/bug-detective/SKILL.md +1206 -0
  51. package/.claude/skills/code-patterns/SKILL.md +590 -0
  52. package/.claude/skills/collaborating-with-codex/SKILL.md +174 -0
  53. package/.claude/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  54. package/.claude/skills/collaborating-with-gemini/SKILL.md +194 -0
  55. package/.claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  56. package/.claude/skills/crud-development/SKILL.md +649 -0
  57. package/.claude/skills/data-permission/SKILL.md +599 -0
  58. package/.claude/skills/database-ops/SKILL.md +407 -0
  59. package/.claude/skills/error-handler/SKILL.md +371 -0
  60. package/.claude/skills/file-oss-management/SKILL.md +863 -0
  61. package/.claude/skills/git-workflow/SKILL.md +375 -0
  62. package/.claude/skills/json-serialization/SKILL.md +357 -0
  63. package/.claude/skills/leniu-api-development/SKILL.md +803 -0
  64. package/.claude/skills/leniu-architecture-design/SKILL.md +598 -0
  65. package/.claude/skills/leniu-backend-annotations/SKILL.md +664 -0
  66. package/.claude/skills/leniu-code-patterns/SKILL.md +365 -0
  67. package/.claude/skills/leniu-crud-development/SKILL.md +1110 -0
  68. package/.claude/skills/leniu-data-permission/SKILL.md +256 -0
  69. package/.claude/skills/leniu-database-ops/SKILL.md +426 -0
  70. package/.claude/skills/leniu-error-handler/SKILL.md +462 -0
  71. package/.claude/skills/leniu-java-amount-handling/SKILL.md +461 -0
  72. package/.claude/skills/leniu-java-code-style/SKILL.md +510 -0
  73. package/.claude/skills/leniu-java-concurrent/SKILL.md +400 -0
  74. package/.claude/skills/leniu-java-entity/SKILL.md +751 -0
  75. package/.claude/skills/leniu-java-export/SKILL.md +560 -0
  76. package/.claude/skills/leniu-java-logging/SKILL.md +832 -0
  77. package/.claude/skills/leniu-java-mq/SKILL.md +338 -0
  78. package/.claude/skills/leniu-java-mybatis/SKILL.md +640 -0
  79. package/.claude/skills/leniu-java-report-query-param/SKILL.md +291 -0
  80. package/.claude/skills/leniu-java-task/SKILL.md +367 -0
  81. package/.claude/skills/leniu-java-total-line/SKILL.md +195 -0
  82. package/.claude/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  83. package/.claude/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  84. package/.claude/skills/leniu-mealtime/SKILL.md +215 -0
  85. package/.claude/skills/leniu-redis-cache/SKILL.md +316 -0
  86. package/.claude/skills/leniu-security-guard/SKILL.md +520 -0
  87. package/.claude/skills/leniu-utils-toolkit/SKILL.md +380 -0
  88. package/.claude/skills/openspec-apply-change/SKILL.md +156 -0
  89. package/.claude/skills/openspec-archive-change/SKILL.md +114 -0
  90. package/.claude/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  91. package/.claude/skills/openspec-continue-change/SKILL.md +118 -0
  92. package/.claude/skills/openspec-explore/SKILL.md +290 -0
  93. package/.claude/skills/openspec-ff-change/SKILL.md +101 -0
  94. package/.claude/skills/openspec-new-change/SKILL.md +74 -0
  95. package/.claude/skills/openspec-onboard/SKILL.md +529 -0
  96. package/.claude/skills/openspec-sync-specs/SKILL.md +138 -0
  97. package/.claude/skills/openspec-verify-change/SKILL.md +168 -0
  98. package/.claude/skills/performance-doctor/SKILL.md +627 -0
  99. package/.claude/skills/project-navigator/SKILL.md +305 -0
  100. package/.claude/skills/redis-cache/SKILL.md +839 -0
  101. package/.claude/skills/scheduled-jobs/SKILL.md +633 -0
  102. package/.claude/skills/security-guard/SKILL.md +748 -0
  103. package/.claude/skills/sms-mail/SKILL.md +766 -0
  104. package/.claude/skills/social-login/SKILL.md +668 -0
  105. package/.claude/skills/store-pc/SKILL.md +366 -0
  106. package/.claude/skills/task-tracker/SKILL.md +307 -0
  107. package/.claude/skills/tech-decision/SKILL.md +393 -0
  108. package/.claude/skills/tenant-management/SKILL.md +603 -0
  109. package/.claude/skills/test-development/SKILL.md +755 -0
  110. package/.claude/skills/ui-pc/SKILL.md +438 -0
  111. package/.claude/skills/utils-toolkit/SKILL.md +615 -0
  112. package/.claude/skills/websocket-sse/SKILL.md +716 -0
  113. package/.claude/skills/workflow-engine/SKILL.md +676 -0
  114. package/.claude/templates//345/276/205/345/212/236/346/270/205/345/215/225/346/250/241/346/235/277.md +56 -0
  115. package/.claude/templates//351/234/200/346/261/202/346/226/207/346/241/243/346/250/241/346/235/277.md +85 -0
  116. package/.claude/templates//351/241/271/347/233/256/347/212/266/346/200/201/346/250/241/346/235/277.md +43 -0
  117. package/.codex/skills/add-skill/SKILL.md +352 -0
  118. package/.codex/skills/add-todo/SKILL.md +269 -0
  119. package/.codex/skills/api-development/SKILL.md +693 -0
  120. package/.codex/skills/architecture-design/SKILL.md +628 -0
  121. package/.codex/skills/backend-annotations/SKILL.md +664 -0
  122. package/.codex/skills/banana-image/CHANGELOG.md +37 -0
  123. package/.codex/skills/banana-image/README.md +146 -0
  124. package/.codex/skills/banana-image/SKILL.md +164 -0
  125. package/.codex/skills/banana-image/assets/logo.png +0 -0
  126. package/.codex/skills/banana-image/references/advanced-usage.md +189 -0
  127. package/.codex/skills/banana-image/scripts/apply_template.py +125 -0
  128. package/.codex/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  129. package/.codex/skills/banana-image/scripts/batch_prep.py +82 -0
  130. package/.codex/skills/banana-image/scripts/package-lock.json +1437 -0
  131. package/.codex/skills/banana-image/scripts/package.json +18 -0
  132. package/.codex/skills/banana-image/scripts/requirements.txt +10 -0
  133. package/.codex/skills/banana-image/templates/poster.json +22 -0
  134. package/.codex/skills/banana-image/templates/product.json +17 -0
  135. package/.codex/skills/banana-image/templates/social.json +22 -0
  136. package/.codex/skills/banana-image/templates/thumbnail.json +17 -0
  137. package/.codex/skills/brainstorm/SKILL.md +648 -0
  138. package/.codex/skills/bug-detective/SKILL.md +1206 -0
  139. package/.codex/skills/check/SKILL.md +367 -0
  140. package/.codex/skills/code-patterns/SKILL.md +442 -0
  141. package/.codex/skills/collaborating-with-codex/SKILL.md +174 -0
  142. package/.codex/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  143. package/.codex/skills/collaborating-with-gemini/SKILL.md +194 -0
  144. package/.codex/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  145. package/.codex/skills/crud/SKILL.md +265 -0
  146. package/.codex/skills/crud-development/SKILL.md +637 -0
  147. package/.codex/skills/data-permission/SKILL.md +591 -0
  148. package/.codex/skills/database-ops/SKILL.md +553 -0
  149. package/.codex/skills/dev/SKILL.md +187 -0
  150. package/.codex/skills/error-handler/SKILL.md +361 -0
  151. package/.codex/skills/file-oss-management/SKILL.md +863 -0
  152. package/.codex/skills/git-workflow/SKILL.md +375 -0
  153. package/.codex/skills/init-docs/SKILL.md +194 -0
  154. package/.codex/skills/json-serialization/SKILL.md +357 -0
  155. package/.codex/skills/leniu-api-development/SKILL.md +803 -0
  156. package/.codex/skills/leniu-architecture-design/SKILL.md +594 -0
  157. package/.codex/skills/leniu-backend-annotations/SKILL.md +662 -0
  158. package/.codex/skills/leniu-code-patterns/SKILL.md +365 -0
  159. package/.codex/skills/leniu-crud-development/SKILL.md +1110 -0
  160. package/.codex/skills/leniu-data-permission/SKILL.md +256 -0
  161. package/.codex/skills/leniu-database-ops/SKILL.md +426 -0
  162. package/.codex/skills/leniu-error-handler/SKILL.md +462 -0
  163. package/.codex/skills/leniu-java-amount-handling/SKILL.md +461 -0
  164. package/.codex/skills/leniu-java-code-style/SKILL.md +510 -0
  165. package/.codex/skills/leniu-java-concurrent/SKILL.md +400 -0
  166. package/.codex/skills/leniu-java-entity/SKILL.md +751 -0
  167. package/.codex/skills/leniu-java-export/SKILL.md +560 -0
  168. package/.codex/skills/leniu-java-logging/SKILL.md +832 -0
  169. package/.codex/skills/leniu-java-mq/SKILL.md +338 -0
  170. package/.codex/skills/leniu-java-mybatis/SKILL.md +640 -0
  171. package/.codex/skills/leniu-java-report-query-param/SKILL.md +291 -0
  172. package/.codex/skills/leniu-java-task/SKILL.md +367 -0
  173. package/.codex/skills/leniu-java-total-line/SKILL.md +195 -0
  174. package/.codex/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  175. package/.codex/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  176. package/.codex/skills/leniu-mealtime/SKILL.md +215 -0
  177. package/.codex/skills/leniu-redis-cache/SKILL.md +316 -0
  178. package/.codex/skills/leniu-security-guard/SKILL.md +520 -0
  179. package/.codex/skills/leniu-utils-toolkit/SKILL.md +378 -0
  180. package/.codex/skills/next/SKILL.md +137 -0
  181. package/.codex/skills/openspec-apply-change/SKILL.md +156 -0
  182. package/.codex/skills/openspec-archive-change/SKILL.md +114 -0
  183. package/.codex/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  184. package/.codex/skills/openspec-continue-change/SKILL.md +118 -0
  185. package/.codex/skills/openspec-explore/SKILL.md +290 -0
  186. package/.codex/skills/openspec-ff-change/SKILL.md +101 -0
  187. package/.codex/skills/openspec-new-change/SKILL.md +74 -0
  188. package/.codex/skills/openspec-onboard/SKILL.md +529 -0
  189. package/.codex/skills/openspec-sync-specs/SKILL.md +138 -0
  190. package/.codex/skills/openspec-verify-change/SKILL.md +168 -0
  191. package/.codex/skills/performance-doctor/SKILL.md +627 -0
  192. package/.codex/skills/progress/SKILL.md +193 -0
  193. package/.codex/skills/project-navigator/SKILL.md +286 -0
  194. package/.codex/skills/redis-cache/SKILL.md +829 -0
  195. package/.codex/skills/scheduled-jobs/SKILL.md +633 -0
  196. package/.codex/skills/security-guard/SKILL.md +739 -0
  197. package/.codex/skills/sms-mail/SKILL.md +766 -0
  198. package/.codex/skills/social-login/SKILL.md +668 -0
  199. package/.codex/skills/start/SKILL.md +154 -0
  200. package/.codex/skills/store-pc/SKILL.md +491 -0
  201. package/.codex/skills/sync/SKILL.md +149 -0
  202. package/.codex/skills/task-tracker/SKILL.md +307 -0
  203. package/.codex/skills/tech-decision/SKILL.md +393 -0
  204. package/.codex/skills/tenant-management/SKILL.md +603 -0
  205. package/.codex/skills/test-development/SKILL.md +755 -0
  206. package/.codex/skills/ui-pc/SKILL.md +475 -0
  207. package/.codex/skills/update-status/SKILL.md +159 -0
  208. package/.codex/skills/utils-toolkit/SKILL.md +593 -0
  209. package/.codex/skills/websocket-sse/SKILL.md +716 -0
  210. package/.codex/skills/workflow-engine/SKILL.md +676 -0
  211. package/.cursor/agents/code-reviewer.md +139 -0
  212. package/.cursor/agents/project-manager.md +159 -0
  213. package/.cursor/commands/opsx-apply.md +152 -0
  214. package/.cursor/commands/opsx-archive.md +157 -0
  215. package/.cursor/commands/opsx-bulk-archive.md +242 -0
  216. package/.cursor/commands/opsx-continue.md +114 -0
  217. package/.cursor/commands/opsx-explore.md +174 -0
  218. package/.cursor/commands/opsx-ff.md +94 -0
  219. package/.cursor/commands/opsx-new.md +69 -0
  220. package/.cursor/commands/opsx-onboard.md +525 -0
  221. package/.cursor/commands/opsx-sync.md +134 -0
  222. package/.cursor/commands/opsx-verify.md +164 -0
  223. package/.cursor/mcp.json +22 -0
  224. package/.cursor/skills/add-skill/SKILL.md +352 -0
  225. package/.cursor/skills/api-development/SKILL.md +560 -0
  226. package/.cursor/skills/architecture-design/SKILL.md +756 -0
  227. package/.cursor/skills/backend-annotations/SKILL.md +674 -0
  228. package/.cursor/skills/banana-image/CHANGELOG.md +37 -0
  229. package/.cursor/skills/banana-image/README.md +146 -0
  230. package/.cursor/skills/banana-image/SKILL.md +164 -0
  231. package/.cursor/skills/banana-image/assets/logo.png +0 -0
  232. package/.cursor/skills/banana-image/references/advanced-usage.md +189 -0
  233. package/.cursor/skills/banana-image/scripts/apply_template.py +125 -0
  234. package/.cursor/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  235. package/.cursor/skills/banana-image/scripts/batch_prep.py +82 -0
  236. package/.cursor/skills/banana-image/scripts/package-lock.json +1437 -0
  237. package/.cursor/skills/banana-image/scripts/package.json +18 -0
  238. package/.cursor/skills/banana-image/scripts/requirements.txt +10 -0
  239. package/.cursor/skills/banana-image/templates/poster.json +22 -0
  240. package/.cursor/skills/banana-image/templates/product.json +17 -0
  241. package/.cursor/skills/banana-image/templates/social.json +22 -0
  242. package/.cursor/skills/banana-image/templates/thumbnail.json +17 -0
  243. package/.cursor/skills/brainstorm/SKILL.md +648 -0
  244. package/.cursor/skills/bug-detective/SKILL.md +1206 -0
  245. package/.cursor/skills/code-patterns/SKILL.md +590 -0
  246. package/.cursor/skills/collaborating-with-codex/SKILL.md +174 -0
  247. package/.cursor/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  248. package/.cursor/skills/collaborating-with-gemini/SKILL.md +194 -0
  249. package/.cursor/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  250. package/.cursor/skills/crud-development/SKILL.md +649 -0
  251. package/.cursor/skills/data-permission/SKILL.md +599 -0
  252. package/.cursor/skills/database-ops/SKILL.md +407 -0
  253. package/.cursor/skills/error-handler/SKILL.md +371 -0
  254. package/.cursor/skills/file-oss-management/SKILL.md +863 -0
  255. package/.cursor/skills/git-workflow/SKILL.md +375 -0
  256. package/.cursor/skills/json-serialization/SKILL.md +357 -0
  257. package/.cursor/skills/leniu-api-development/SKILL.md +803 -0
  258. package/.cursor/skills/leniu-architecture-design/SKILL.md +598 -0
  259. package/.cursor/skills/leniu-backend-annotations/SKILL.md +664 -0
  260. package/.cursor/skills/leniu-code-patterns/SKILL.md +365 -0
  261. package/.cursor/skills/leniu-crud-development/SKILL.md +1110 -0
  262. package/.cursor/skills/leniu-data-permission/SKILL.md +256 -0
  263. package/.cursor/skills/leniu-database-ops/SKILL.md +426 -0
  264. package/.cursor/skills/leniu-error-handler/SKILL.md +462 -0
  265. package/.cursor/skills/leniu-java-amount-handling/SKILL.md +461 -0
  266. package/.cursor/skills/leniu-java-code-style/SKILL.md +510 -0
  267. package/.cursor/skills/leniu-java-concurrent/SKILL.md +400 -0
  268. package/.cursor/skills/leniu-java-entity/SKILL.md +751 -0
  269. package/.cursor/skills/leniu-java-export/SKILL.md +560 -0
  270. package/.cursor/skills/leniu-java-logging/SKILL.md +832 -0
  271. package/.cursor/skills/leniu-java-mq/SKILL.md +338 -0
  272. package/.cursor/skills/leniu-java-mybatis/SKILL.md +640 -0
  273. package/.cursor/skills/leniu-java-report-query-param/SKILL.md +291 -0
  274. package/.cursor/skills/leniu-java-task/SKILL.md +367 -0
  275. package/.cursor/skills/leniu-java-total-line/SKILL.md +195 -0
  276. package/.cursor/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  277. package/.cursor/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  278. package/.cursor/skills/leniu-mealtime/SKILL.md +215 -0
  279. package/.cursor/skills/leniu-redis-cache/SKILL.md +316 -0
  280. package/.cursor/skills/leniu-security-guard/SKILL.md +520 -0
  281. package/.cursor/skills/leniu-utils-toolkit/SKILL.md +380 -0
  282. package/.cursor/skills/openspec-apply-change/SKILL.md +156 -0
  283. package/.cursor/skills/openspec-archive-change/SKILL.md +114 -0
  284. package/.cursor/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  285. package/.cursor/skills/openspec-continue-change/SKILL.md +118 -0
  286. package/.cursor/skills/openspec-explore/SKILL.md +290 -0
  287. package/.cursor/skills/openspec-ff-change/SKILL.md +101 -0
  288. package/.cursor/skills/openspec-new-change/SKILL.md +74 -0
  289. package/.cursor/skills/openspec-onboard/SKILL.md +529 -0
  290. package/.cursor/skills/openspec-sync-specs/SKILL.md +138 -0
  291. package/.cursor/skills/openspec-verify-change/SKILL.md +168 -0
  292. package/.cursor/skills/performance-doctor/SKILL.md +627 -0
  293. package/.cursor/skills/project-navigator/SKILL.md +305 -0
  294. package/.cursor/skills/redis-cache/SKILL.md +839 -0
  295. package/.cursor/skills/scheduled-jobs/SKILL.md +633 -0
  296. package/.cursor/skills/security-guard/SKILL.md +748 -0
  297. package/.cursor/skills/sms-mail/SKILL.md +766 -0
  298. package/.cursor/skills/social-login/SKILL.md +668 -0
  299. package/.cursor/skills/store-pc/SKILL.md +366 -0
  300. package/.cursor/skills/task-tracker/SKILL.md +307 -0
  301. package/.cursor/skills/tech-decision/SKILL.md +393 -0
  302. package/.cursor/skills/tenant-management/SKILL.md +603 -0
  303. package/.cursor/skills/test-development/SKILL.md +755 -0
  304. package/.cursor/skills/ui-pc/SKILL.md +438 -0
  305. package/.cursor/skills/utils-toolkit/SKILL.md +615 -0
  306. package/.cursor/skills/websocket-sse/SKILL.md +716 -0
  307. package/.cursor/skills/workflow-engine/SKILL.md +676 -0
  308. package/AGENTS.md +669 -0
  309. package/CLAUDE.md +205 -0
  310. package/README.md +205 -0
  311. package/bin/index.js +179 -0
  312. package/init.sh +178 -0
  313. package/package.json +27 -0
@@ -0,0 +1,599 @@
1
+ # 前端开发指南
2
+
3
+ > **适用于**: 腾云智慧食堂管理系统前端项目
4
+
5
+ 最后更新: 2026-02-18(修正 API 接口规范、补充 auth.js 函数)
6
+
7
+ ---
8
+
9
+ ## 项目架构
10
+
11
+ ### 技术栈
12
+
13
+ | 技术 | 版本 | 说明 |
14
+ |------|------|------|
15
+ | Vue | 2.7.16 | 核心框架 |
16
+ | Element UI | 2.15.9 | UI 组件库 |
17
+ | Vuex | 3.4.0 | 状态管理 |
18
+ | Vue Router | 3.2.0 | 路由管理 |
19
+ | ECharts | 5.4.1 | 图表库 |
20
+ | VXE-Table | 3.13.18 | 高级表格 |
21
+ | axios | 0.19.2 | HTTP 请求 |
22
+ | Sass | - | CSS 预处理器 |
23
+
24
+ ### 目录结构
25
+
26
+ ```
27
+ src/
28
+ ├── api/ # API 接口定义
29
+ │ ├── marketing.js # 营销相关接口
30
+ │ ├── order.js # 订单相关接口
31
+ │ └── ...
32
+ ├── assets/ # 静态资源
33
+ ├── components/ # 公共组件
34
+ ├── directive/ # 自定义指令
35
+ ├── lang/ # 国际化
36
+ │ ├── zh/ # 中文
37
+ │ └── en/ # 英文
38
+ ├── layout/ # 布局组件
39
+ ├── leniu-components/ # 业务组件
40
+ ├── leniuview/ # 业务模块页面
41
+ ├── mixins/ # 混入
42
+ ├── router/ # 路由配置
43
+ ├── store/ # Vuex 状态管理
44
+ ├── styles/ # 全局样式
45
+ ├── utils/ # 工具函数
46
+ ├── App.vue # 根组件
47
+ ├── main.js # 入口文件
48
+ └── permission.js # 路由权限控制
49
+ ```
50
+
51
+ ---
52
+
53
+ ## 开发规范
54
+
55
+ ### 组件开发规范
56
+
57
+ #### 文件头部注释
58
+
59
+ ```vue
60
+ <!--
61
+ * @Author: 作者名
62
+ * @Date: 2026-01-01 10:00:00
63
+ * @Description: 组件功能描述
64
+ -->
65
+ ```
66
+
67
+ #### 组件结构
68
+
69
+ ```vue
70
+ <template>
71
+ <div class="component-name">
72
+ <!-- 模板内容 -->
73
+ </div>
74
+ </template>
75
+
76
+ <script>
77
+ export default {
78
+ name: 'ComponentName',
79
+ components: {},
80
+ props: {},
81
+ data() {
82
+ return {}
83
+ },
84
+ computed: {},
85
+ watch: {},
86
+ created() {},
87
+ mounted() {},
88
+ methods: {}
89
+ }
90
+ </script>
91
+
92
+ <style lang="scss" scoped>
93
+ .component-name {
94
+ // 样式
95
+ }
96
+ </style>
97
+ ```
98
+
99
+ #### 列表页模板
100
+
101
+ ```vue
102
+ <template>
103
+ <page-slot>
104
+ <!-- 搜索区域 -->
105
+ <collapse-search slot="search">
106
+ <template v-slot:outerCol>
107
+ <el-col :span="6">
108
+ <el-form-item :label="$t('名称')">
109
+ <el-input v-model="listQuery.name" clearable />
110
+ </el-form-item>
111
+ </el-col>
112
+ </template>
113
+ <el-button slot="operate" type="primary" @click="handleQuery">
114
+ {{ $t('action.query') }}
115
+ </el-button>
116
+ </collapse-search>
117
+
118
+ <!-- 操作按钮 -->
119
+ <el-button slot="tableTopLeft" type="primary" v-hasPerm="['xxx:add']">
120
+ {{ $t('新增') }}
121
+ </el-button>
122
+
123
+ <!-- 表格 -->
124
+ <el-table slot="table" :data="tableData" v-loading="loading">
125
+ <el-table-column prop="name" label="名称" />
126
+ <el-table-column label="操作">
127
+ <template slot-scope="{ row }">
128
+ <el-button type="text" @click="handleEdit(row)">编辑</el-button>
129
+ </template>
130
+ </el-table-column>
131
+ </el-table>
132
+ </page-slot>
133
+ </template>
134
+
135
+ <script>
136
+ import { getList } from '@/api/xxx'
137
+ import commonList from '../mixins/common-list'
138
+
139
+ export default {
140
+ name: 'XxxList',
141
+ mixins: [commonList],
142
+ data() {
143
+ return {
144
+ listQuery: {
145
+ name: ''
146
+ }
147
+ }
148
+ },
149
+ methods: {
150
+ async getData() {
151
+ this.loading = true
152
+ try {
153
+ const res = await getList(this.listQuery)
154
+ this.tableData = res.data || []
155
+ } finally {
156
+ this.loading = false
157
+ }
158
+ }
159
+ }
160
+ }
161
+ </script>
162
+ ```
163
+
164
+ ---
165
+
166
+ ## API 接口规范
167
+
168
+ > ⚠️ **重要**:本项目接口大量使用 POST(包括查询!),请求体统一使用 `dataObj` 包装结构。
169
+
170
+ ### dataObj 标准结构
171
+
172
+ 每个 API 文件顶部定义 `dataObj`,业务参数放在 `content` 字段中:
173
+
174
+ ```javascript
175
+ // src/api/xxx.js
176
+ import request from '@/utils/request'
177
+
178
+ // ⭐ 每个 API 文件都必须定义 dataObj
179
+ const dataObj = {
180
+ version: '1.0',
181
+ nonceStr: '1212fsadf', // 拦截器自动替换
182
+ timestamp: '2020-4-21', // 拦截器自动替换
183
+ signType: 'md5',
184
+ content: {},
185
+ sign: 'dafdsf' // 拦截器自动计算
186
+ }
187
+ ```
188
+
189
+ ### 标准接口写法(两种等价写法)
190
+
191
+ ```javascript
192
+ // ✅ 写法一(推荐,简洁):展开 dataObj,覆盖 content
193
+ export function getList(data) {
194
+ return request({
195
+ url: '/api/v2/xxx/list',
196
+ method: 'post',
197
+ data: { ...dataObj, content: data || {} }
198
+ })
199
+ }
200
+
201
+ // ✅ 写法二(兼容,深拷贝):适合需要多次修改对象的场景
202
+ export function getDetail(data) {
203
+ const obj = JSON.parse(JSON.stringify(dataObj))
204
+ if (data) obj.content = data
205
+ return request({
206
+ url: '/api/v2/xxx/detail',
207
+ method: 'post',
208
+ data: obj
209
+ })
210
+ }
211
+ ```
212
+
213
+ ### 各类操作的 URL 命名规律
214
+
215
+ ```javascript
216
+ // 分页列表查询
217
+ export function getPageList(data) {
218
+ return request({ url: '/api/v2/xxx/page', method: 'post', data: { ...dataObj, content: data || {} } })
219
+ }
220
+
221
+ // 全量列表查询(不分页)
222
+ export function getList(data) {
223
+ return request({ url: '/api/v2/xxx/list', method: 'post', data: { ...dataObj, content: data || {} } })
224
+ }
225
+
226
+ // 新增
227
+ export function add(data) {
228
+ return request({ url: '/api/v2/xxx/add', method: 'post', data: { ...dataObj, content: data || {} } })
229
+ }
230
+
231
+ // 修改
232
+ export function update(data) {
233
+ return request({ url: '/api/v2/xxx/update', method: 'post', data: { ...dataObj, content: data || {} } })
234
+ }
235
+
236
+ // 删除
237
+ export function del(data) {
238
+ return request({ url: '/api/v2/xxx/delete', method: 'post', data: { ...dataObj, content: data || {} } })
239
+ }
240
+
241
+ // 导出(responseType: 'blob')
242
+ export function exportData(data) {
243
+ return request({
244
+ url: '/api/v2/xxx/export',
245
+ method: 'post',
246
+ data: { ...dataObj, content: data || {} },
247
+ responseType: 'blob'
248
+ })
249
+ }
250
+ ```
251
+
252
+ ### noLoading 参数
253
+
254
+ 适用于轮询、静默请求等不需要显示 Loading 的场景:
255
+
256
+ ```javascript
257
+ export function getState(data) {
258
+ return request({
259
+ url: '/tcp/v1/machine/state',
260
+ method: 'post',
261
+ data: { ...dataObj, content: data || {} },
262
+ noLoading: true // 不显示全屏 Loading
263
+ })
264
+ }
265
+ ```
266
+
267
+ ### 禁止事项
268
+
269
+ ```javascript
270
+ // ❌ 禁止:查询接口使用 GET + params(本项目不用这种写法)
271
+ request({ url: '/xxx/list', method: 'get', params: query })
272
+
273
+ // ❌ 禁止:直接传业务数据,不包 content
274
+ request({ url: '/xxx', method: 'post', data: { name: '张三' } })
275
+
276
+ // ❌ 禁止:使用 PUT/DELETE 方法(本项目全用 POST)
277
+ request({ url: '/xxx/1', method: 'delete' })
278
+ request({ url: '/xxx', method: 'put', data })
279
+ ```
280
+
281
+ ---
282
+
283
+ ## Vuex Store 规范
284
+
285
+ ### Store 模块结构
286
+
287
+ ```javascript
288
+ // src/store/modules/xxx.js
289
+ const state = {
290
+ list: [],
291
+ current: null,
292
+ loading: false
293
+ }
294
+
295
+ const mutations = {
296
+ SET_LIST: (state, list) => {
297
+ state.list = list
298
+ },
299
+ SET_CURRENT: (state, current) => {
300
+ state.current = current
301
+ },
302
+ SET_LOADING: (state, loading) => {
303
+ state.loading = loading
304
+ }
305
+ }
306
+
307
+ const actions = {
308
+ // 获取列表
309
+ async fetchList({ commit }, params) {
310
+ commit('SET_LOADING', true)
311
+ try {
312
+ const res = await getList(params)
313
+ commit('SET_LIST', res.data || [])
314
+ return res
315
+ } finally {
316
+ commit('SET_LOADING', false)
317
+ }
318
+ },
319
+
320
+ // 获取详情
321
+ async fetchDetail({ commit }, id) {
322
+ const res = await getDetail(id)
323
+ commit('SET_CURRENT', res.data)
324
+ return res
325
+ }
326
+ }
327
+
328
+ const getters = {
329
+ list: state => state.list,
330
+ current: state => state.current,
331
+ loading: state => state.loading
332
+ }
333
+
334
+ export default {
335
+ namespaced: true,
336
+ state,
337
+ mutations,
338
+ actions,
339
+ getters
340
+ }
341
+ ```
342
+
343
+ ### 组件中使用 Store
344
+
345
+ ```javascript
346
+ // 使用 mapState
347
+ import { mapState, mapActions } from 'vuex'
348
+
349
+ export default {
350
+ computed: {
351
+ ...mapState('xxx', ['list', 'loading'])
352
+ },
353
+ methods: {
354
+ ...mapActions('xxx', ['fetchList'])
355
+ },
356
+ mounted() {
357
+ this.fetchList()
358
+ }
359
+ }
360
+ ```
361
+
362
+ ---
363
+
364
+ ## 权限控制
365
+
366
+ ### 权限指令
367
+
368
+ ```vue
369
+ <!-- 按钮权限 -->
370
+ <el-button v-hasPerm="['xxx:add']">新增</el-button>
371
+ <el-button v-hasPerm="['xxx:edit']">修改</el-button>
372
+ <el-button v-hasPerm="['xxx:remove']">删除</el-button>
373
+
374
+ <!-- 角色权限 -->
375
+ <el-button v-hasRole="['admin']">管理员按钮</el-button>
376
+ ```
377
+
378
+ ### 权限命名规范
379
+
380
+ ```
381
+ 模块:功能:操作
382
+
383
+ 示例:
384
+ - marketing:price:add 营销计费规则新增
385
+ - marketing:price:edit 营销计费规则修改
386
+ - marketing:price:remove 营销计费规则删除
387
+ - marketing:price:list 营销计费规则列表
388
+ ```
389
+
390
+ ---
391
+
392
+ ## 国际化
393
+
394
+ ### 使用方式
395
+
396
+ ```vue
397
+ <template>
398
+ <el-button>{{ $t('action.query') }}</el-button>
399
+ <span>{{ $t('规则名称') }}</span>
400
+ </template>
401
+ ```
402
+
403
+ ### 语言文件
404
+
405
+ ```javascript
406
+ // src/lang/zh/xxx.js
407
+ export default {
408
+ '规则名称': '规则名称',
409
+ '规则类型': '规则类型',
410
+ 'action.query': '查询'
411
+ }
412
+ ```
413
+
414
+ ---
415
+
416
+ ## 常用工具函数
417
+
418
+ ### request - HTTP 请求
419
+
420
+ ```javascript
421
+ import request from '@/utils/request'
422
+
423
+ // GET
424
+ request({ url: '/api/xxx', method: 'get', params: {} })
425
+
426
+ // POST
427
+ request({ url: '/api/xxx', method: 'post', data: {} })
428
+ ```
429
+
430
+ ### auth - Token 与租户管理
431
+
432
+ ```javascript
433
+ import {
434
+ getToken, setToken, removeToken,
435
+ getTenant, setTenant, removeTenant,
436
+ getCustEffId, setCustEffId,
437
+ checkMenu
438
+ } from '@/utils/auth'
439
+
440
+ // Token 操作(存储在 localStorage 的 'Admin-Token' 中)
441
+ const token = getToken()
442
+ setToken('new-token')
443
+ removeToken()
444
+
445
+ // 租户 ID 操作(存储在 localStorage 的 'MERCHANT-ID' 中)
446
+ const tenantId = getTenant()
447
+ setTenant('merchant-xxx')
448
+ removeTenant()
449
+
450
+ // 检查当前用户是否有某个路由权限
451
+ const hasAccess = checkMenu('/marketing/price')
452
+ ```
453
+
454
+ ### format - 格式化
455
+
456
+ ```javascript
457
+ import { formatDate, formatMoney } from '@/utils/format'
458
+
459
+ formatDate(new Date(), 'YYYY-MM-DD')
460
+ formatMoney(1234.56)
461
+ ```
462
+
463
+ ---
464
+
465
+ ## Vue 全局原型方法
466
+
467
+ > 这些方法/属性在 `main.js` 挂载到 `Vue.prototype`,所有组件内可直接通过 `this.xxx` 调用。
468
+
469
+ ### 金额与数值处理
470
+
471
+ ```javascript
472
+ // 分转元(保留2位小数,添加千分位)
473
+ this.money(1234) // '12.34'
474
+ this.money(null) // ''
475
+
476
+ // 精确乘法(避免浮点误差)
477
+ this.accMul(1.1, 100) // 110
478
+ this.accMul(price, 0.01) // 分 → 元
479
+
480
+ // 保留2位小数
481
+ // 可通过 import { toDecimal2 } from '@/utils' 导入使用
482
+ ```
483
+
484
+ ### 时间格式化
485
+
486
+ ```javascript
487
+ // parseTime(timestamp, format)
488
+ this.parseTime(Date.now()) // '2026-02-18 10:30:00'
489
+ this.parseTime(Date.now(), '{y}-{m}-{d}') // '2026-02-18'
490
+ this.parseTime(Date.now(), '{h}:{i}:{s}') // '10:30:00'
491
+ ```
492
+
493
+ ### 权限判断
494
+
495
+ ```javascript
496
+ // $hasPerm - 代码级权限判断(对应模板中 v-hasPerm 指令)
497
+ if (this.$hasPerm(['marketing:price:edit'])) {
498
+ // 有权限时执行
499
+ }
500
+ ```
501
+
502
+ ### 其他原型方法
503
+
504
+ ```javascript
505
+ // Lodash(完整版)
506
+ this._ // 等同于 import _ from 'lodash'
507
+ this._.cloneDeep(obj)
508
+ this._.debounce(fn, 300)
509
+
510
+ // ECharts 实例
511
+ this.$echarts // 等同于 import * as echarts from 'echarts'
512
+
513
+ // 环境判断
514
+ this.isDevEnv // true / false(开发环境)
515
+
516
+ // 延迟
517
+ await this.$sleep(1000) // 等待 1 秒
518
+ ```
519
+
520
+ ### 输入校验(validators / inputRules)
521
+
522
+ ```javascript
523
+ // 在 el-form 中使用
524
+ :rules="{ name: [{ validator: validators.required, trigger: 'blur' }] }"
525
+
526
+ // 输入框实时过滤(inputRules)
527
+ <el-input @input="form.phone = inputRules.phone(form.phone)" />
528
+ ```
529
+
530
+ ---
531
+
532
+ ## 业务组件
533
+
534
+ ### leniu-page - 页面容器
535
+
536
+ ```vue
537
+ <page-slot>
538
+ <collapse-search slot="search">...</collapse-search>
539
+ <el-button slot="tableTopLeft">操作按钮</el-button>
540
+ <el-table slot="table">...</el-table>
541
+ </page-slot>
542
+ ```
543
+
544
+ ### leniu-form-dialog - 弹窗表单
545
+
546
+ ```vue
547
+ <leniu-form-dialog
548
+ :visible.sync="visible"
549
+ :title="title"
550
+ @submit="handleSubmit"
551
+ >
552
+ <el-form>
553
+ <!-- 表单内容 -->
554
+ </el-form>
555
+ </leniu-form-dialog>
556
+ ```
557
+
558
+ ---
559
+
560
+ ## 开发命令
561
+
562
+ ```bash
563
+ # 安装依赖
564
+ npm install
565
+
566
+ # 开发环境
567
+ npm run dev
568
+
569
+ # 生产构建
570
+ npm run build:prod
571
+
572
+ # 代码检查
573
+ npm run lint
574
+ ```
575
+
576
+ ---
577
+
578
+ ## 后端 API 配置
579
+
580
+ 在 `src/store/index.js` 中配置后端 API 地址:
581
+
582
+ ```javascript
583
+ const store = new Vuex.Store({
584
+ state: {
585
+ baseURL: 'http://192.168.x.x:58300'
586
+ }
587
+ })
588
+ ```
589
+
590
+ ---
591
+
592
+ ## 注意事项
593
+
594
+ 1. **使用 Vue 2 语法**,非 Vue 3
595
+ 2. **使用 Vuex**,非 Pinia
596
+ 3. **使用 Element UI**,非 Element Plus
597
+ 4. **国际化使用 `$t()`** 函数
598
+ 5. **权限使用 `v-hasPerm`** 指令
599
+ 6. **样式使用 scoped** 避免污染