mirror of
https://github.com/cool-team-official/cool-admin-midway.git
synced 2025-12-10 16:12:50 +00:00
203 lines
5.1 KiB
Plaintext
203 lines
5.1 KiB
Plaintext
---
|
||
description: 模块开发(module)
|
||
globs:
|
||
---
|
||
# 模块开发(module)
|
||
|
||
对于一个应用开发,我们应该更加有规划,`cool-admin`提供了模块开发的概念。
|
||
|
||
建议模块目录`src/modules/模块名`
|
||
|
||
```ts
|
||
├── modules
|
||
│ └── base(基础的权限管理系统)
|
||
│ │ └── controller(api接口, 用法参考 [controller.mdc](mdc:.cursor/rules/controller.mdc) ,必要时需要创建关联查询, 配置pageQueryOp)
|
||
│ │ │ └── admin(后台管理接口)
|
||
│ │ │ └── app(应用接口,如小程序APP等)
|
||
│ │ └── dto(可选,参数校验)
|
||
│ │ └── entity(实体类, 用法参考 [db.mdc](mdc:.cursor/rules/db.mdc) )
|
||
│ │ └── middleware(可选,中间件, 参考 [middleware.code-snippets](mdc:.vscode/middleware.code-snippets) [authority.ts](mdc:src/modules/base/middleware/authority.ts) )
|
||
│ │ └── schedule(可选,定时任务 参考 [task.mdc](mdc:.cursor/rules/task.mdc) )
|
||
│ │ └── service(服务,写业务逻辑,参考 [service.mdc](mdc:.cursor/rules/service.mdc) )
|
||
│ │ └── config.ts(必须,模块的配置)
|
||
│ │ └── db.json(可选,初始化该模块的数据,参考 [db.json](mdc:src/modules/base/db.json) )
|
||
│ │ └── menu.json(可选(7.x新增,配合模块市场使用),初始化该模块的菜单,参考 [menu.json](mdc:src/modules/base/menu.json) )
|
||
|
||
```
|
||
|
||
创建模块一般需要创建`controller`、`entity`、`service`,
|
||
如果entity文件夹没有子文件夹,那么引用BaseEntity是
|
||
|
||
- 引用BaseEntity固定为
|
||
|
||
```ts
|
||
import { BaseEntity } from '../../modules/base/entity/base';
|
||
```
|
||
|
||
错误示例
|
||
|
||
```ts
|
||
import { BaseEntity } from '../../../modules/base/entity/base';
|
||
```
|
||
|
||
多了一个层级
|
||
|
||
## 模块配置
|
||
|
||
#### config.ts
|
||
|
||
```ts
|
||
import { ModuleConfig } from '@cool-midway/core';
|
||
|
||
/**
|
||
* 模块配置
|
||
*/
|
||
export default () => {
|
||
return {
|
||
// 必须,模块名称
|
||
name: '聊天模块',
|
||
// 必须,模块描述
|
||
description: '基于socket.io提供即时通讯聊天功能',
|
||
// 可选,中间件,只对本模块有效
|
||
middlewares: [],
|
||
// 可选,全局中间件
|
||
globalMiddlewares: [],
|
||
// 可选,模块加载顺序,默认为0,值越大越优先加载
|
||
order: 1;
|
||
// 其他配置,jwt配置
|
||
jwt: 'IUFHOFNIWI',
|
||
} as ModuleConfig;
|
||
};
|
||
|
||
```
|
||
|
||
::: warning
|
||
config.ts 的配置文件是必须的,有几个必填项描述着模块的功能,当然除此之外,你还可以设置模块的一些特有配置
|
||
:::
|
||
|
||
#### 引入配置
|
||
|
||
```ts
|
||
|
||
@Config('module.模块名,模块文件夹名称,如demo')
|
||
config;
|
||
|
||
```
|
||
|
||
## 数据导入
|
||
|
||
在模块中预设要导入的数据,位于`模块/db.json`
|
||
|
||
1、向`dict_type`表导入数据
|
||
|
||
```json
|
||
{
|
||
"dict_type": [
|
||
{
|
||
"name": "升级类型",
|
||
"key": "upgradeType"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
2、导入有层级的数据,比如`dict_info`表需要先插入`dict_type`拿到`id`,再插入`dict_info`
|
||
|
||
```json
|
||
{
|
||
"dict_type": [
|
||
{
|
||
"name": "升级类型",
|
||
"key": "upgradeType",
|
||
"@childDatas": {
|
||
"dict_info": [
|
||
{
|
||
"typeId": "@id",
|
||
"name": "安卓",
|
||
"orderNum": 1,
|
||
"remark": null,
|
||
"parentId": null,
|
||
"value": "0"
|
||
},
|
||
{
|
||
"typeId": "@id",
|
||
"name": "IOS",
|
||
"orderNum": 1,
|
||
"remark": null,
|
||
"parentId": null,
|
||
"value": "1"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
`@childDatas`是一个特殊的字段,表示该字段下的数据需要先插入父级表,再插入子级表,`@id`表示父级表的`id`,`@id`是一个特殊的字段,表示插入父级表后,会返回`id`,然后插入子级表
|
||
|
||
## 菜单导入
|
||
|
||
在模块中预设要导入的菜单,位于`模块/menu.json`,菜单数据可以通过后台管理系统的菜单管理导出,不需要手动编写
|
||
|
||
详细参考 [menu.json](mdc:src/modules/base/menu.json)
|
||
|
||
```json
|
||
[
|
||
{
|
||
"name": "应用管理",
|
||
"router": null,
|
||
"perms": null,
|
||
"type": 0,
|
||
"icon": "icon-app",
|
||
"orderNum": 2,
|
||
"viewPath": null,
|
||
"keepAlive": true,
|
||
"isShow": true,
|
||
"childMenus": [
|
||
{
|
||
"name": "套餐管理",
|
||
"router": "/app/goods",
|
||
"perms": null,
|
||
"type": 1,
|
||
"icon": "icon-goods",
|
||
"orderNum": 0,
|
||
"viewPath": "modules/app/views/goods.vue",
|
||
"keepAlive": true,
|
||
"isShow": true
|
||
}
|
||
]
|
||
}
|
||
]
|
||
```
|
||
|
||
#### 关闭自动导入
|
||
|
||
通过该配置开启自动初始化模块数据库脚本
|
||
|
||
```ts
|
||
cool: {
|
||
// 是否自动导入数据库
|
||
initDB: false,
|
||
} as CoolConfig,
|
||
```
|
||
|
||
::: warning
|
||
我们不建议在生产环境使用该功能,生产环境是数据库请通过本地导入与同步数据库结构
|
||
:::
|
||
|
||
#### 重新初始化
|
||
|
||
首次启动会初始化模块数据库,初始化完成会在项目根目录生成`.lock`文件,下次启动就不会重复导入,如果需要重新导入,删除该文件夹即可
|
||
|
||
```ts
|
||
├── lock
|
||
│ ├── db
|
||
│ └── base.db.lock(base模块)
|
||
│ └── task.db.lock(task模块)
|
||
│ ├── menu
|
||
│ └── base.menu.lock(base模块)
|
||
│ └── task.menu.lock(task模块)
|
||
│──package.json
|
||
```
|