module.mdc 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. ---
  2. description: 模块开发(module)
  3. globs:
  4. ---
  5. # 模块开发(module)
  6. 对于一个应用开发,我们应该更加有规划,`cool-admin`提供了模块开发的概念。
  7. 建议模块目录`src/modules/模块名`
  8. ```ts
  9. ├── modules
  10. │ └── base(基础的权限管理系统)
  11. │ │ └── controller(api接口, 用法参考 [controller.mdc](mdc:.cursor/rules/controller.mdc) ,必要时需要创建关联查询, 配置pageQueryOp)
  12. │ │ │ └── admin(后台管理接口)
  13. │ │ │ └── app(应用接口,如小程序APP等)
  14. │ │ └── dto(可选,参数校验)
  15. │ │ └── entity(实体类, 用法参考 [db.mdc](mdc:.cursor/rules/db.mdc) )
  16. │ │ └── middleware(可选,中间件, 参考 [middleware.code-snippets](mdc:.vscode/middleware.code-snippets) [authority.ts](mdc:src/modules/base/middleware/authority.ts) )
  17. │ │ └── schedule(可选,定时任务 参考 [task.mdc](mdc:.cursor/rules/task.mdc) )
  18. │ │ └── service(服务,写业务逻辑,参考 [service.mdc](mdc:.cursor/rules/service.mdc) )
  19. │ │ └── config.ts(必须,模块的配置)
  20. │ │ └── db.json(可选,初始化该模块的数据,参考 [db.json](mdc:src/modules/base/db.json) )
  21. │ │ └── menu.json(可选(7.x新增,配合模块市场使用),初始化该模块的菜单,参考 [menu.json](mdc:src/modules/base/menu.json) )
  22. ```
  23. 创建模块一般需要创建`controller`、`entity`、`service`,
  24. 如果entity文件夹没有子文件夹,那么引用BaseEntity是
  25. - 引用BaseEntity固定为
  26. ```ts
  27. import { BaseEntity } from '../../modules/base/entity/base';
  28. ```
  29. 错误示例
  30. ```ts
  31. import { BaseEntity } from '../../../modules/base/entity/base';
  32. ```
  33. 多了一个层级
  34. ## 模块配置
  35. #### config.ts
  36. ```ts
  37. import { ModuleConfig } from '@cool-midway/core';
  38. /**
  39. * 模块配置
  40. */
  41. export default () => {
  42. return {
  43. // 必须,模块名称
  44. name: '聊天模块',
  45. // 必须,模块描述
  46. description: '基于socket.io提供即时通讯聊天功能',
  47. // 可选,中间件,只对本模块有效
  48. middlewares: [],
  49. // 可选,全局中间件
  50. globalMiddlewares: [],
  51. // 可选,模块加载顺序,默认为0,值越大越优先加载
  52. order: 1;
  53. // 其他配置,jwt配置
  54. jwt: 'IUFHOFNIWI',
  55. } as ModuleConfig;
  56. };
  57. ```
  58. ::: warning
  59. config.ts 的配置文件是必须的,有几个必填项描述着模块的功能,当然除此之外,你还可以设置模块的一些特有配置
  60. :::
  61. #### 引入配置
  62. ```ts
  63. @Config('module.模块名,模块文件夹名称,如demo')
  64. config;
  65. ```
  66. ## 数据导入
  67. 在模块中预设要导入的数据,位于`模块/db.json`
  68. 1、向`dict_type`表导入数据
  69. ```json
  70. {
  71. "dict_type": [
  72. {
  73. "name": "升级类型",
  74. "key": "upgradeType"
  75. }
  76. ]
  77. }
  78. ```
  79. 2、导入有层级的数据,比如`dict_info`表需要先插入`dict_type`拿到`id`,再插入`dict_info`
  80. ```json
  81. {
  82. "dict_type": [
  83. {
  84. "name": "升级类型",
  85. "key": "upgradeType",
  86. "@childDatas": {
  87. "dict_info": [
  88. {
  89. "typeId": "@id",
  90. "name": "安卓",
  91. "orderNum": 1,
  92. "remark": null,
  93. "parentId": null,
  94. "value": "0"
  95. },
  96. {
  97. "typeId": "@id",
  98. "name": "IOS",
  99. "orderNum": 1,
  100. "remark": null,
  101. "parentId": null,
  102. "value": "1"
  103. }
  104. ]
  105. }
  106. }
  107. ]
  108. }
  109. ```
  110. `@childDatas`是一个特殊的字段,表示该字段下的数据需要先插入父级表,再插入子级表,`@id`表示父级表的`id`,`@id`是一个特殊的字段,表示插入父级表后,会返回`id`,然后插入子级表
  111. ## 菜单导入
  112. 在模块中预设要导入的菜单,位于`模块/menu.json`,菜单数据可以通过后台管理系统的菜单管理导出,不需要手动编写
  113. 详细参考 [menu.json](mdc:src/modules/base/menu.json)
  114. ```json
  115. [
  116. {
  117. "name": "应用管理",
  118. "router": null,
  119. "perms": null,
  120. "type": 0,
  121. "icon": "icon-app",
  122. "orderNum": 2,
  123. "viewPath": null,
  124. "keepAlive": true,
  125. "isShow": true,
  126. "childMenus": [
  127. {
  128. "name": "套餐管理",
  129. "router": "/app/goods",
  130. "perms": null,
  131. "type": 1,
  132. "icon": "icon-goods",
  133. "orderNum": 0,
  134. "viewPath": "modules/app/views/goods.vue",
  135. "keepAlive": true,
  136. "isShow": true
  137. }
  138. ]
  139. }
  140. ]
  141. ```
  142. #### 关闭自动导入
  143. 通过该配置开启自动初始化模块数据库脚本
  144. ```ts
  145. cool: {
  146. // 是否自动导入数据库
  147. initDB: false,
  148. } as CoolConfig,
  149. ```
  150. ::: warning
  151. 我们不建议在生产环境使用该功能,生产环境是数据库请通过本地导入与同步数据库结构
  152. :::
  153. #### 重新初始化
  154. 首次启动会初始化模块数据库,初始化完成会在项目根目录生成`.lock`文件,下次启动就不会重复导入,如果需要重新导入,删除该文件夹即可
  155. ```ts
  156. ├── lock
  157. │ ├── db
  158. │ └── base.db.lock(base模块)
  159. │ └── task.db.lock(task模块)
  160. │ ├── menu
  161. │ └── base.menu.lock(base模块)
  162. │ └── task.menu.lock(task模块)
  163. │──package.json
  164. ```