倚楼听风雨 3 rokov pred
rodič
commit
57415ec34c
100 zmenil súbory, kde vykonal 5121 pridanie a 0 odobranie
  1. 26 0
      .gitignore
  2. 19 0
      cool-admin-midway-master/.dockerignore
  3. 11 0
      cool-admin-midway-master/.editorconfig
  4. 24 0
      cool-admin-midway-master/.eslintrc.json
  5. 3 0
      cool-admin-midway-master/.gitattributes
  6. 21 0
      cool-admin-midway-master/.gitignore
  7. 3 0
      cool-admin-midway-master/.prettierrc.js
  8. 28 0
      cool-admin-midway-master/.vscode/config.code-snippets
  9. 21 0
      cool-admin-midway-master/.vscode/controller.code-snippets
  10. 18 0
      cool-admin-midway-master/.vscode/dto.code-snippets
  11. 21 0
      cool-admin-midway-master/.vscode/entity.code-snippets
  12. 24 0
      cool-admin-midway-master/.vscode/event.code-snippets
  13. 29 0
      cool-admin-midway-master/.vscode/middleware.code-snippets
  14. 23 0
      cool-admin-midway-master/.vscode/queue.code-snippets
  15. 27 0
      cool-admin-midway-master/.vscode/service.code-snippets
  16. 28 0
      cool-admin-midway-master/Dockerfile
  17. 21 0
      cool-admin-midway-master/LICENSE
  18. 96 0
      cool-admin-midway-master/README.md
  19. 7 0
      cool-admin-midway-master/bootstrap.js
  20. 14 0
      cool-admin-midway-master/f.yml
  21. 92 0
      cool-admin-midway-master/package.json
  22. 64 0
      cool-admin-midway-master/public/css/welcome.css
  23. BIN
      cool-admin-midway-master/public/favicon.ico
  24. 14 0
      cool-admin-midway-master/public/js/welcome.js
  25. BIN
      cool-admin-midway-master/public/swagger/favicon-16x16.png
  26. BIN
      cool-admin-midway-master/public/swagger/favicon-32x32.png
  27. 68 0
      cool-admin-midway-master/public/swagger/index.html
  28. 75 0
      cool-admin-midway-master/public/swagger/oauth2-redirect.html
  29. 3 0
      cool-admin-midway-master/public/swagger/swagger-ui-bundle.js
  30. 1 0
      cool-admin-midway-master/public/swagger/swagger-ui-bundle.js.map
  31. 3 0
      cool-admin-midway-master/public/swagger/swagger-ui-es-bundle-core.js
  32. 1 0
      cool-admin-midway-master/public/swagger/swagger-ui-es-bundle-core.js.map
  33. 3 0
      cool-admin-midway-master/public/swagger/swagger-ui-es-bundle.js
  34. 1 0
      cool-admin-midway-master/public/swagger/swagger-ui-es-bundle.js.map
  35. 3 0
      cool-admin-midway-master/public/swagger/swagger-ui-standalone-preset.js
  36. 1 0
      cool-admin-midway-master/public/swagger/swagger-ui-standalone-preset.js.map
  37. 4 0
      cool-admin-midway-master/public/swagger/swagger-ui.css
  38. 1 0
      cool-admin-midway-master/public/swagger/swagger-ui.css.map
  39. 3 0
      cool-admin-midway-master/public/swagger/swagger-ui.js
  40. 1 0
      cool-admin-midway-master/public/swagger/swagger-ui.js.map
  41. 608 0
      cool-admin-midway-master/public/swagger/swagger.json
  42. BIN
      cool-admin-midway-master/src/app/comm/ipipfree.ipdb
  43. 182 0
      cool-admin-midway-master/src/app/comm/utils.ts
  44. 8 0
      cool-admin-midway-master/src/app/modules/README.md
  45. 36 0
      cool-admin-midway-master/src/app/modules/base/config.ts
  46. 81 0
      cool-admin-midway-master/src/app/modules/base/controller/admin/comm.ts
  47. 67 0
      cool-admin-midway-master/src/app/modules/base/controller/admin/open.ts
  48. 51 0
      cool-admin-midway-master/src/app/modules/base/controller/admin/plugin/info.ts
  49. 27 0
      cool-admin-midway-master/src/app/modules/base/controller/admin/sys/department.ts
  50. 59 0
      cool-admin-midway-master/src/app/modules/base/controller/admin/sys/log.ts
  51. 18 0
      cool-admin-midway-master/src/app/modules/base/controller/admin/sys/menu.ts
  52. 32 0
      cool-admin-midway-master/src/app/modules/base/controller/admin/sys/param.ts
  53. 38 0
      cool-admin-midway-master/src/app/modules/base/controller/admin/sys/role.ts
  54. 27 0
      cool-admin-midway-master/src/app/modules/base/controller/admin/sys/user.ts
  55. 1 0
      cool-admin-midway-master/src/app/modules/base/controller/api/README.md
  56. 38 0
      cool-admin-midway-master/src/app/modules/base/dto/login.ts
  57. 18 0
      cool-admin-midway-master/src/app/modules/base/entity/app/space/info.ts
  58. 15 0
      cool-admin-midway-master/src/app/modules/base/entity/app/space/type.ts
  59. 16 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/conf.ts
  60. 20 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/department.ts
  61. 28 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/log.ts
  62. 46 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/menu.ts
  63. 29 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/param.ts
  64. 26 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/role.ts
  65. 15 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/role_department.ts
  66. 15 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/role_menu.ts
  67. 55 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/user.ts
  68. 15 0
      cool-admin-midway-master/src/app/modules/base/entity/sys/user_role.ts
  69. 717 0
      cool-admin-midway-master/src/app/modules/base/init.sql
  70. 123 0
      cool-admin-midway-master/src/app/modules/base/middleware/authority.ts
  71. 25 0
      cool-admin-midway-master/src/app/modules/base/middleware/log.ts
  72. 28 0
      cool-admin-midway-master/src/app/modules/base/schedule/log.ts
  73. 45 0
      cool-admin-midway-master/src/app/modules/base/service/plugin/info.ts
  74. 38 0
      cool-admin-midway-master/src/app/modules/base/service/sys/conf.ts
  75. 124 0
      cool-admin-midway-master/src/app/modules/base/service/sys/department.ts
  76. 76 0
      cool-admin-midway-master/src/app/modules/base/service/sys/log.ts
  77. 248 0
      cool-admin-midway-master/src/app/modules/base/service/sys/login.ts
  78. 165 0
      cool-admin-midway-master/src/app/modules/base/service/sys/menu.ts
  79. 60 0
      cool-admin-midway-master/src/app/modules/base/service/sys/param.ts
  80. 73 0
      cool-admin-midway-master/src/app/modules/base/service/sys/perms.ts
  81. 126 0
      cool-admin-midway-master/src/app/modules/base/service/sys/role.ts
  82. 219 0
      cool-admin-midway-master/src/app/modules/base/service/sys/user.ts
  83. 16 0
      cool-admin-midway-master/src/app/modules/demo/config.ts
  84. 65 0
      cool-admin-midway-master/src/app/modules/demo/controller/admin/goods.ts
  85. 24 0
      cool-admin-midway-master/src/app/modules/demo/controller/app/event.ts
  86. 53 0
      cool-admin-midway-master/src/app/modules/demo/controller/app/goods.ts
  87. 73 0
      cool-admin-midway-master/src/app/modules/demo/controller/app/pay.ts
  88. 21 0
      cool-admin-midway-master/src/app/modules/demo/entity/goods.ts
  89. 20 0
      cool-admin-midway-master/src/app/modules/demo/event/test.ts
  90. 20 0
      cool-admin-midway-master/src/app/modules/demo/middleware/test.ts
  91. 19 0
      cool-admin-midway-master/src/app/modules/demo/queue/demo.ts
  92. 41 0
      cool-admin-midway-master/src/app/modules/demo/service/goods.ts
  93. 16 0
      cool-admin-midway-master/src/app/modules/demo/service/task.ts
  94. 19 0
      cool-admin-midway-master/src/app/modules/demo/socket/handler.ts
  95. 25 0
      cool-admin-midway-master/src/app/modules/shuyou/config.ts
  96. 44 0
      cool-admin-midway-master/src/app/modules/shuyou/controller/admin/account_type.ts
  97. 69 0
      cool-admin-midway-master/src/app/modules/shuyou/controller/admin/computer_usage.ts
  98. 67 0
      cool-admin-midway-master/src/app/modules/shuyou/controller/admin/data_23.ts
  99. 89 0
      cool-admin-midway-master/src/app/modules/shuyou/controller/admin/data_abnormal_rate.ts
  100. 0 0
      cool-admin-midway-master/src/app/modules/shuyou/controller/admin/data_active.ts

+ 26 - 0
.gitignore

@@ -0,0 +1,26 @@
+cool-admin-vue-vue3-ts-vite/node_modules
+cool-admin-vue-vue3-ts-vite/.DS_Store
+cool-admin-vue-vue3-ts-vite/dist
+cool-admin-vue-vue3-ts-vite/dist-ssr
+cool-admin-vue-vue3-ts-vite/*.local
+cool-admin-midway-master/logs/
+cool-admin-midway-master/npm-debug.log
+cool-admin-midway-master/yarn-error.log
+cool-admin-midway-master/node_modules/
+cool-admin-midway-master/package-lock.json
+cool-admin-midway-master/yarn.lock
+cool-admin-midway-master/coverage/
+cool-admin-midway-master/dist/
+cool-admin-midway-master/.idea/
+cool-admin-midway-master/run/
+cool-admin-midway-master/.DS_Store
+cool-admin-midway-master/*.sw*
+cool-admin-midway-master/*.un~
+cool-admin-midway-master/.tsbuildinfo
+cool-admin-midway-master/.tsbuildinfo.*
+cool-admin-midway-master/src/app/public/uploads/
+cool-admin-midway-master/typings/
+cool-admin-midway-master/.cache
+cool-admin-midway-master/.serverless/
+cool-admin-midway-master/.vscode/launch.json
+cool-admin-midway-master//public/uploads

+ 19 - 0
cool-admin-midway-master/.dockerignore

@@ -0,0 +1,19 @@
+logs/
+npm-debug.log
+yarn-error.log
+node_modules/
+package-lock.json
+yarn.lock
+coverage/
+dist/
+.idea/
+run/
+.DS_Store
+*.sw*
+*.un~
+.tsbuildinfo
+.tsbuildinfo.*
+src/app/public/uploads/
+typings/
+.cache
+.serverless/

+ 11 - 0
cool-admin-midway-master/.editorconfig

@@ -0,0 +1,11 @@
+# 🎨 editorconfig.org
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+insert_final_newline = true

+ 24 - 0
cool-admin-midway-master/.eslintrc.json

@@ -0,0 +1,24 @@
+{
+  "extends": "./node_modules/mwts/",
+  "ignorePatterns": [
+    "node_modules",
+    "dist",
+    "test",
+    "jest.config.js",
+    "typings",
+    "src/app/public/**/**",
+    "src/app/view/**/**"
+  ],
+  "env": {
+    "jest": true
+  },
+  "rules": {
+    "@typescript-eslint/explicit-module-boundary-types": "off",
+    "@typescript-eslint/no-unused-vars": "off",
+    "@typescript-eslint/ban-ts-comment": "off",
+    "node/no-extraneous-import": "off",
+    "no-empty": "off",
+    "node/no-extraneous-require": "off",
+    "eqeqeq": "off"
+  }
+}

+ 3 - 0
cool-admin-midway-master/.gitattributes

@@ -0,0 +1,3 @@
+*.js text eol=lf
+*.json text eol=lf
+*.ts text eol=lf

+ 21 - 0
cool-admin-midway-master/.gitignore

@@ -0,0 +1,21 @@
+logs/
+npm-debug.log
+yarn-error.log
+node_modules/
+package-lock.json
+yarn.lock
+coverage/
+dist/
+.idea/
+run/
+.DS_Store
+*.sw*
+*.un~
+.tsbuildinfo
+.tsbuildinfo.*
+src/app/public/uploads/
+typings/
+.cache
+.serverless/
+.vscode/launch.json
+/public/uploads

+ 3 - 0
cool-admin-midway-master/.prettierrc.js

@@ -0,0 +1,3 @@
+module.exports = {
+  ...require('mwts/.prettierrc.json')
+}

+ 28 - 0
cool-admin-midway-master/.vscode/config.code-snippets

@@ -0,0 +1,28 @@
+{
+  "config": {
+    "prefix": "config",
+    "body": [
+      "import { Application } from 'egg';",
+      "import { ModuleConfig } from 'midwayjs-cool-core';",
+      "",
+      "/**",
+      " * 模块配置",
+      " */",
+      "export default (app: Application) => {",
+      "  return {",
+      "    // 模块名称",
+      "    name: 'xxx',",
+      "    // 模块描述",
+      "    description: 'xxx',",
+      "    // 中间件,只对本模块有效",
+      "    middlewares: [],",
+      "    // 中间件,全局有效",
+      "    globalMiddlewares: [],",
+      "    // 模块加载顺序,默认为0,值越大越优先加载",
+      "    order: 0,",
+      "  } as ModuleConfig;",
+      "};"
+    ],
+    "description": "cool-admin config代码片段"
+  }
+}

+ 21 - 0
cool-admin-midway-master/.vscode/controller.code-snippets

@@ -0,0 +1,21 @@
+{
+  "controller": {
+    "prefix": "controller",
+    "body": [
+      "import { Provide } from '@midwayjs/decorator';",
+      "import { CoolController, BaseController } from 'midwayjs-cool-core';",
+      "",
+      "/**",
+      " * 描述",
+      " */",
+      "@Provide()",
+      "@CoolController({",
+      "  api: ['add', 'delete', 'update', 'info', 'list', 'page'],",
+      "  entity: 实体,",
+      "})",
+      "export class XxxController extends BaseController {}",
+      ""
+    ],
+    "description": "cool-admin controller代码片段"
+  }
+}

+ 18 - 0
cool-admin-midway-master/.vscode/dto.code-snippets

@@ -0,0 +1,18 @@
+{
+  "dto": {
+    "prefix": "dto",
+    "body": [
+      "import { Rule, RuleType } from '@midwayjs/decorator';",
+      "/**",
+      " * 描述",
+      " */",
+      "export class xxxDTO {",
+      "  // 描述",
+      "  @Rule(RuleType.string().required())",
+      "  xxx: string;",
+      "}",
+      ""
+    ],
+    "description": "cool-admin dto代码片段"
+  }
+}

+ 21 - 0
cool-admin-midway-master/.vscode/entity.code-snippets

@@ -0,0 +1,21 @@
+{
+  "entity": {
+    "prefix": "entity",
+    "body": [
+      "import { EntityModel } from '@midwayjs/orm';",
+      "import { BaseEntity } from 'midwayjs-cool-core';",
+      "import { Column } from 'typeorm';",
+      "",
+      "/**",
+      " * 描述",
+      " */",
+      "@EntityModel('xxx_xxx_xxx')",
+      "export class XxxEntity extends BaseEntity {",
+      "  @Column({ comment: '描述' })",
+      "  xxx: string;",
+      "}",
+      ""
+    ],
+    "description": "cool-admin entity代码片段"
+  }
+}

+ 24 - 0
cool-admin-midway-master/.vscode/event.code-snippets

@@ -0,0 +1,24 @@
+{
+  "event": {
+    "prefix": "event",
+    "body": [
+      "import { Provide, Scope, ScopeEnum } from '@midwayjs/decorator';",
+      "import { CoolEvent, Event } from 'midwayjs-cool-core';",
+      "",
+      "/**",
+      " * 接收事件",
+      " */",
+      "@Provide()",
+      "@Scope(ScopeEnum.Singleton)",
+      "@CoolEvent()",
+      "export class xxxEvent {",
+      "  @Event('updateUser')",
+      "  async updateUser(msg, a) {",
+      "    console.log('ImEvent', 'updateUser', msg, a);",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "cool-admin event代码片段"
+  }
+}

+ 29 - 0
cool-admin-midway-master/.vscode/middleware.code-snippets

@@ -0,0 +1,29 @@
+{
+  "middleware": {
+    "prefix": "middleware",
+    "body": [
+      "import { Provide } from '@midwayjs/decorator';",
+      "import { IWebMiddleware, IMidwayWebNext } from '@midwayjs/web';",
+      "import { Context } from 'egg';",
+      "",
+      "/**",
+      " * 描述",
+      " */",
+      "@Provide()",
+      "export class XxxMiddleware implements IWebMiddleware {",
+      "  resolve() {",
+      "    return async (ctx: Context, next: IMidwayWebNext) => {",
+      "      // 控制器前执行的逻辑",
+      "      const startTime = Date.now();",
+      "      // 执行下一个 Web 中间件,最后执行到控制器",
+      "      await next();",
+      "      // 控制器之后执行的逻辑",
+      "      console.log(Date.now() - startTime);",
+      "    };",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "cool-admin middleware代码片段"
+  }
+}

+ 23 - 0
cool-admin-midway-master/.vscode/queue.code-snippets

@@ -0,0 +1,23 @@
+{
+  "queue": {
+    "prefix": "queue",
+    "body": [
+      "import { Provide } from '@midwayjs/decorator';",
+      "import { ICoolQueue, Queue } from 'midwayjs-cool-queue';",
+      "",
+      "/**",
+      " * 队列",
+      " */",
+      "@Queue()",
+      "@Provide()",
+      "export abstract class xxxQueue implements ICoolQueue {",
+      "  data(job: any, done: any): void {",
+      "    console.log('收到的数据', job.data);",
+      "    done();",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "cool-admin service代码片段"
+  }
+}

+ 27 - 0
cool-admin-midway-master/.vscode/service.code-snippets

@@ -0,0 +1,27 @@
+{
+  "service": {
+    "prefix": "service",
+    "body": [
+      "import { Provide } from '@midwayjs/decorator';",
+      "import { BaseService } from 'midwayjs-cool-core';",
+      "import { InjectEntityModel } from '@midwayjs/orm';",
+      "import { Repository } from 'typeorm';",
+      "",
+      "/**",
+      " * 描述",
+      " */",
+      "@Provide()",
+      "export class XxxService extends BaseService {",
+      "  @InjectEntityModel(实体)",
+      "  xxxEntity: Repository<实体>;",
+      "",
+      "  /**",
+      "   * 描述",
+      "   */",
+      "  async xxx() {}",
+      "}",
+      ""
+    ],
+    "description": "cool-admin service代码片段"
+  }
+}

+ 28 - 0
cool-admin-midway-master/Dockerfile

@@ -0,0 +1,28 @@
+FROM node:lts-alpine
+
+WORKDIR /app
+
+# 安装tzdata,默认的alpine基础镜像不包含时区组件,安装后可通过TZ环境变量配置时区
+RUN apk add --no-cache tzdata
+
+# 设置时区为中国东八区,这里的配置可以被docker-compose.yml或docker run时指定的时区覆盖
+ENV TZ="Asia/Shanghai"
+
+# 如果各公司有自己的私有源,可以替换registry地址,如使用官方源注释下一行
+RUN npm config set registry https://repo.huaweicloud.com/repository/npm/
+
+# 安装开发期依赖
+COPY package.json ./package.json
+RUN npm install
+# 构建项目
+COPY . .
+RUN npm run build
+# 删除开发期依赖
+RUN rm -rf node_modules && rm package-lock.json    
+# 安装开发环境依赖   
+RUN npm install --production                          
+
+# 如果端口更换,这边可以更新一下
+EXPOSE 7001
+
+CMD ["npm", "run", "docker"]

+ 21 - 0
cool-admin-midway-master/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 cool-team-official
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 96 - 0
cool-admin-midway-master/README.md

@@ -0,0 +1,96 @@
+<!--
+ * @Author: YKH
+ * @Date: 2021-12-08 10:23:31
+ * @LastEditTime: 2022-08-18 17:34:13
+ * @Description: 
+ * @FilePath: \cool-admin\cool-admin-midway-master\README.md
+-->
+shuyou_game_complete添加字段:remark
+
+ 
+## Node版后台基础框架基于Egg.js
+
+# 基础:egg.js
+# 数据:typeorm
+# 缓存:egg-redis
+# 鉴权:egg-jwt
+# 网络:axios
+
+#### 修改数据库配置,配置文件位于`src/config/config.local.ts`
+
+数据库为mysql(`>=5.7版本`),node版本(`>=12.x`),首次启动会自动初始化并导入数据
+
+```js
+config.orm = {
+    type: 'mysql',
+    host: '127.0.0.1',
+    port: 3306,
+    username: 'root',
+    password: '',
+    database: 'cool-admin',
+    synchronize: true,
+    logging: true,
+}
+```
+
+#### 安装依赖并运行
+
+```bash
+$ npm i
+$ npm run dev
+$ open http://localhost:8001/
+```
+
+注: `npm i`如果安装失败可以尝试使用[cnpm](https://developer.aliyun.com/mirror/NPM?from=tnpm),或者切换您的镜像源
+
+
+### 部署
+
+rm -rf node_modules
+rm package-lock.json
+npm cache clear --force
+npm install
+
+
+npm run build
+
+
+```bash
+$ npm start
+$ npm stop
+```
+
+### 内置指令
+
+- 使用 `npm run lint` 来做代码风格检查。
+- 使用 `npm test` 来执行单元测试。
+
+
+[midway]: https://midwayjs.org
+
+
+## 个人记录
+- rm -rf node_modules
+- rm package-lock.json
+- npm cache clear --force
+- npm install
+
+
+
+- npm run start
+- lsof -i:8001
+- netstat -tunlp | grep 8001
+
+- curl 'http://127.0.0.1:8001'
+
+
+- SERVER需要单独安装axios
+- cd /home/cool/server
+- npm i axios
+- // npm install qiniu
+
+- 前端
+- // yarn add spark-md5
+- // yarn add sha1-file-web
+- yarn add qiniu-js
+

+ 7 - 0
cool-admin-midway-master/bootstrap.js

@@ -0,0 +1,7 @@
+const WebFramework = require('@midwayjs/web').Framework;
+const web = new WebFramework().configure({
+  port: 8001,
+});
+
+const { Bootstrap } = require('@midwayjs/bootstrap');
+Bootstrap.load(web).run();

+ 14 - 0
cool-admin-midway-master/f.yml

@@ -0,0 +1,14 @@
+service: cool-admin  ## 应用发布到云平台的名字,一般指应用名
+
+provider:
+  name: aliyun        ## 发布的云平台,aliyun,tencent 等
+  runtime: nodejs12
+  memorySize: 512
+
+deployType: egg       ## 部署的应用类型
+
+package:
+  include:
+     - public/*
+  exclude:
+    - package-lock.json   ## 忽略 package-lock.json 文件

+ 92 - 0
cool-admin-midway-master/package.json

@@ -0,0 +1,92 @@
+{
+    "name": "cool-admin",
+    "version": "3.0.0",
+    "description": "数优管理平台",
+    "private": true,
+    "dependencies": {
+        "@cool-midway/qiniu": "^1.0.1",
+        "@midwayjs/decorator": "^2.12.3",
+        "@midwayjs/orm": "^2.12.5",
+        "@midwayjs/web": "^2.12.6",
+        "axios": "^0.24.0",
+        "egg": "^2.30.0",
+        "egg-scripts": "^2.14.0",
+        "egg-view-nunjucks": "^2.3.0",
+        "iconv-lite": "^0.6.3",
+        "ipip-ipdb": "^0.6.0",
+        "jimp": "^0.16.1",
+        "jsonwebtoken": "^8.5.1",
+        "lodash": "^4.17.21",
+        "md5": "^2.3.0",
+        "midwayjs-cool-alipay": "^1.0.8",
+        "midwayjs-cool-core": "^3.2.32",
+        "midwayjs-cool-oss": "^1.0.12",
+        "midwayjs-cool-queue": "^1.0.8",
+        "midwayjs-cool-redis": "^1.1.6",
+        "midwayjs-cool-socket": "^1.0.8",
+        "midwayjs-cool-wxpay": "^1.0.12",
+        "mini-svg-data-uri": "^1.4.3",
+        "mysql2": "^2.3.0",
+        "qiniu": "^7.4.0",
+        "qrcode-reader": "^1.0.4",
+        "svg-captcha": "^1.4.0",
+        "typeorm": "^0.2.37"
+    },
+    "devDependencies": {
+        "@midwayjs/cli": "^1.2.80",
+        "@midwayjs/cli-plugin-faas": "^1.2.81",
+        "@midwayjs/egg-ts-helper": "^1.2.0",
+        "@midwayjs/fcli-plugin-fc": "^1.2.81",
+        "@midwayjs/luckyeye": "^1.0.2",
+        "@midwayjs/mock": "^2.12.5",
+        "@types/jest": "^27.0.1",
+        "@types/jsonwebtoken": "^8.5.5",
+        "@types/node": "16",
+        "cross-env": "^7.0.3",
+        "jest": "^27.0.6",
+        "mwts": "^1.2.2",
+        "ts-jest": "^27.0.5",
+        "typescript": "^4.3.5"
+    },
+    "engines": {
+        "node": ">=12.0.0"
+    },
+    "scripts": {
+        "start": "egg-scripts start --daemon --title=cool-admin-midway --framework=@midwayjs/web --port=8001 --sticky",
+        "stop": "egg-scripts stop --title=cool-admin-midway",
+        "start_build": "npm run build && cross-env NODE_ENV=development midway-bin dev",
+        "docker": "egg-scripts start --title=cool-admin-midway --framework=@midwayjs/web  --sticky",
+        "dev": "cross-env ets && cross-env NODE_ENV=local TS_NODE_TYPE_CHECK=false TS_NODE_TRANSPILE_ONLY=true midway-bin dev --ts --port=8001 --sticky",
+        "test": "midway-bin test",
+        "cov": "midway-bin cov",
+        "lint": "mwts check",
+        "lint:fix": "mwts fix",
+        "ci": "npm run cov",
+        "build": "midway-bin build -c",
+        "check": "luckyeye",
+        "deploy": "midway-bin deploy"
+    },
+    "midway-bin-clean": [
+        ".vscode/.tsbuildinfo",
+        "dist"
+    ],
+    "midway-luckyeye": {
+        "packages": [
+            "midway_v2"
+        ]
+    },
+    "midway-integration": {
+        "lifecycle": {
+            "before:package:cleanup": "npm run build"
+        }
+    },
+    "egg": {
+        "framework": "@midwayjs/web"
+    },
+    "repository": {
+        "type": "git",
+        "url": ""
+    },
+    "author": "cool-js.com",
+    "license": "MIT"
+}

+ 64 - 0
cool-admin-midway-master/public/css/welcome.css

@@ -0,0 +1,64 @@
+body {
+    display: flex;
+    height: 100vh;
+    justify-content: center;
+    align-items: center;
+    text-align: center;
+    background: #2f3447;
+}
+
+.reveal {
+    position: relative;
+    display: flex;
+    color: #6ee1f5;
+    font-size: 2em;
+    font-family: Raleway, sans-serif;
+    letter-spacing: 3px;
+    text-transform: uppercase;
+    white-space: pre;
+}
+.reveal span {
+    opacity: 0;
+    transform: scale(0);
+    animation: fadeIn 2.4s forwards;
+}
+.reveal::before, .reveal::after {
+    position: absolute;
+    content: "";
+    top: 0;
+    bottom: 0;
+    width: 2px;
+    height: 100%;
+    background: white;
+    opacity: 0;
+    transform: scale(0);
+}
+.reveal::before {
+    left: 50%;
+    animation: slideLeft 1.5s cubic-bezier(0.7, -0.6, 0.3, 1.5) forwards;
+}
+.reveal::after {
+    right: 50%;
+    animation: slideRight 1.5s cubic-bezier(0.7, -0.6, 0.3, 1.5) forwards;
+}
+
+@keyframes fadeIn {
+    to {
+        opacity: 1;
+        transform: scale(1);
+    }
+}
+@keyframes slideLeft {
+    to {
+        left: -6%;
+        opacity: 1;
+        transform: scale(0.9);
+    }
+}
+@keyframes slideRight {
+    to {
+        right: -6%;
+        opacity: 1;
+        transform: scale(0.9);
+    }
+}

BIN
cool-admin-midway-master/public/favicon.ico


+ 14 - 0
cool-admin-midway-master/public/js/welcome.js

@@ -0,0 +1,14 @@
+const duration = 0.8;
+const delay = 0.3;
+// eslint-disable-next-line no-undef
+const revealText = document.querySelector('.reveal');
+const letters = revealText.textContent.split('');
+revealText.textContent = '';
+const middle = letters.filter(e => e !== ' ').length / 2;
+letters.forEach((letter, i) => {
+  // eslint-disable-next-line no-undef
+  const span = document.createElement('span');
+  span.textContent = letter;
+  span.style.animationDelay = `${delay + Math.abs(i - middle) * 0.1}s`;
+  revealText.append(span);
+});

BIN
cool-admin-midway-master/public/swagger/favicon-16x16.png


BIN
cool-admin-midway-master/public/swagger/favicon-32x32.png


+ 68 - 0
cool-admin-midway-master/public/swagger/index.html

@@ -0,0 +1,68 @@
+<!--
+ * @Author: YKH
+ * @Date: 2021-12-28 14:25:14
+ * @LastEditTime: 2021-12-28 15:46:09
+ * @Description: 
+ * @FilePath: \cool-admin\cool-admin-midway-master\public\swagger\index.html
+-->
+<!-- HTML for static distribution bundle build -->
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <title>接口文档</title>
+    <link rel="stylesheet" type="text/css" href="./swagger-ui.css" />
+    <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
+    <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
+    <style>
+        html {
+            box-sizing: border-box;
+            overflow: -moz-scrollbars-vertical;
+            overflow-y: scroll;
+        }
+        
+        *,
+        *:before,
+        *:after {
+            box-sizing: inherit;
+        }
+        
+        body {
+            margin: 0;
+            background: #fafafa;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="swagger-ui"></div>
+
+    <script src="./swagger-ui-bundle.js" charset="UTF-8">
+    </script>
+    <script src="./swagger-ui-standalone-preset.js" charset="UTF-8">
+    </script>
+    <script>
+        window.onload = function() {
+            // Begin Swagger UI call region
+            const ui = SwaggerUIBundle({
+                url: "./swagger.json",
+                dom_id: '#swagger-ui',
+                deepLinking: true,
+                presets: [
+                    SwaggerUIBundle.presets.apis,
+                    SwaggerUIStandalonePreset
+                ],
+                plugins: [
+                    SwaggerUIBundle.plugins.DownloadUrl
+                ],
+                layout: "StandaloneLayout"
+            });
+            // End Swagger UI call region
+
+            window.ui = ui;
+        };
+    </script>
+</body>
+
+</html>

+ 75 - 0
cool-admin-midway-master/public/swagger/oauth2-redirect.html

@@ -0,0 +1,75 @@
+<!doctype html>
+<html lang="en-US">
+<head>
+    <title>Swagger UI: OAuth2 Redirect</title>
+</head>
+<body>
+<script>
+    'use strict';
+    function run () {
+        var oauth2 = window.opener.swaggerUIRedirectOauth2;
+        var sentState = oauth2.state;
+        var redirectUrl = oauth2.redirectUrl;
+        var isValid, qp, arr;
+
+        if (/code|token|error/.test(window.location.hash)) {
+            qp = window.location.hash.substring(1);
+        } else {
+            qp = location.search.substring(1);
+        }
+
+        arr = qp.split("&");
+        arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';});
+        qp = qp ? JSON.parse('{' + arr.join() + '}',
+                function (key, value) {
+                    return key === "" ? value : decodeURIComponent(value);
+                }
+        ) : {};
+
+        isValid = qp.state === sentState;
+
+        if ((
+          oauth2.auth.schema.get("flow") === "accessCode" ||
+          oauth2.auth.schema.get("flow") === "authorizationCode" ||
+          oauth2.auth.schema.get("flow") === "authorization_code"
+        ) && !oauth2.auth.code) {
+            if (!isValid) {
+                oauth2.errCb({
+                    authId: oauth2.auth.name,
+                    source: "auth",
+                    level: "warning",
+                    message: "Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"
+                });
+            }
+
+            if (qp.code) {
+                delete oauth2.state;
+                oauth2.auth.code = qp.code;
+                oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
+            } else {
+                let oauthErrorMsg;
+                if (qp.error) {
+                    oauthErrorMsg = "["+qp.error+"]: " +
+                        (qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
+                        (qp.error_uri ? "More info: "+qp.error_uri : "");
+                }
+
+                oauth2.errCb({
+                    authId: oauth2.auth.name,
+                    source: "auth",
+                    level: "error",
+                    message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server"
+                });
+            }
+        } else {
+            oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
+        }
+        window.close();
+    }
+
+    window.addEventListener('DOMContentLoaded', function () {
+      run();
+    });
+</script>
+</body>
+</html>

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 3 - 0
cool-admin-midway-master/public/swagger/swagger-ui-bundle.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 0
cool-admin-midway-master/public/swagger/swagger-ui-bundle.js.map


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 3 - 0
cool-admin-midway-master/public/swagger/swagger-ui-es-bundle-core.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 0
cool-admin-midway-master/public/swagger/swagger-ui-es-bundle-core.js.map


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 3 - 0
cool-admin-midway-master/public/swagger/swagger-ui-es-bundle.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 0
cool-admin-midway-master/public/swagger/swagger-ui-es-bundle.js.map


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 3 - 0
cool-admin-midway-master/public/swagger/swagger-ui-standalone-preset.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 0
cool-admin-midway-master/public/swagger/swagger-ui-standalone-preset.js.map


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 4 - 0
cool-admin-midway-master/public/swagger/swagger-ui.css


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 0
cool-admin-midway-master/public/swagger/swagger-ui.css.map


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 3 - 0
cool-admin-midway-master/public/swagger/swagger-ui.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 0
cool-admin-midway-master/public/swagger/swagger-ui.js.map


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 608 - 0
cool-admin-midway-master/public/swagger/swagger.json


BIN
cool-admin-midway-master/src/app/comm/ipipfree.ipdb


+ 182 - 0
cool-admin-midway-master/src/app/comm/utils.ts

@@ -0,0 +1,182 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import * as ipdb from 'ipip-ipdb';
+import * as _ from 'lodash';
+import { Context } from 'egg';
+
+/**
+ * 帮助类
+ */
+@Provide()
+export class Utils {
+  @Inject()
+  baseDir;
+
+  /**
+   * 获得请求IP
+   */
+  async getReqIP(ctx: Context) {
+    const req = ctx.req;
+    return (
+      req.headers['x-forwarded-for'] ||
+      req.socket.remoteAddress.replace('::ffff:', '')
+    );
+  }
+
+  /**
+   * 根据IP获得请求地址
+   * @param ip 为空时则为当前请求的IP地址
+   */
+  async getIpAddr(ctx: Context, ip?: string | string[]) {
+    try {
+      if (!ip) {
+        ip = await this.getReqIP(ctx);
+      }
+      const bst = new ipdb.BaseStation(
+        `${this.baseDir}/app/comm/ipipfree.ipdb`
+      );
+      const result = bst.findInfo(ip, 'CN');
+      const addArr: any = [];
+      if (result) {
+        addArr.push(result.countryName);
+        addArr.push(result.regionName);
+        addArr.push(result.cityName);
+        return _.uniq(addArr).join('');
+      }
+    } catch (err) {
+      return '无法获取地址信息';
+    }
+  }
+
+  /**
+   * 去除对象的空值属性
+   * @param obj
+   */
+  async removeEmptyP(obj) {
+    Object.keys(obj).forEach(key => {
+      if (obj[key] === null || obj[key] === '' || obj[key] === 'undefined') {
+        delete obj[key];
+      }
+    });
+  }
+
+  /**
+   * 线程阻塞毫秒数
+   * @param ms
+   */
+  sleep(ms) {
+    return new Promise(resolve => setTimeout(resolve, ms));
+  }
+
+  /**
+   * 获取指定格式日期YYYY-MM-DD
+   * @param {*} date
+   * @return {*} 
+   * @memberof Utils
+   */
+  formatDate(date) {
+    //三目运算符
+    const Dates = new Date(date);
+
+    //年份
+    const Year: number = Dates.getFullYear();
+
+    //月份下标是0-11
+    const Months: any = (Dates.getMonth() + 1) < 10 ? '0' + (Dates.getMonth() + 1) : (Dates.getMonth() + 1);
+
+    //具体的天数
+    const Day: any = Dates.getDate() < 10 ? '0' + Dates.getDate() : Dates.getDate();
+
+    //小时
+    //  const Hours = Dates.getHours() < 10 ? '0' + Dates.getHours() : Dates.getHours();
+
+    //  //分钟
+    //  const Minutes = Dates.getMinutes() < 10 ? '0' + Dates.getMinutes() : Dates.getMinutes();
+
+    //  //秒
+    //  const Seconds = Dates.getSeconds() < 10 ? '0' + Dates.getSeconds() : Dates.getSeconds();
+
+    //返回数据格式
+    //  return Year + '-' + Months + '-' + Day + '-' + Hours + ':' + Minutes + ':' + Seconds; 
+    return Year + '-' + Months + '-' + Day;
+  }
+  /**
+   * 获取指定格式日期YYYY-MM-DD
+   * @param {*} date
+   * @return {*} 
+   * @memberof Utils
+   */
+  formatDateTime(date) {
+    //三目运算符
+    const Dates = new Date(date);
+
+    //年份
+    const Year: number = Dates.getFullYear();
+
+    //月份下标是0-11
+    const Months: any = (Dates.getMonth() + 1) < 10 ? '0' + (Dates.getMonth() + 1) : (Dates.getMonth() + 1);
+
+    //具体的天数
+    const Day: any = Dates.getDate() < 10 ? '0' + Dates.getDate() : Dates.getDate();
+
+    //小时
+    const Hours = Dates.getHours() < 10 ? '0' + Dates.getHours() : Dates.getHours();
+
+    //  //分钟
+    const Minutes = Dates.getMinutes() < 10 ? '0' + Dates.getMinutes() : Dates.getMinutes();
+
+    //  //秒
+    const Seconds = Dates.getSeconds() < 10 ? '0' + Dates.getSeconds() : Dates.getSeconds();
+
+    //返回数据格式
+    //  return Year + '-' + Months + '-' + Day + '-' + Hours + ':' + Minutes + ':' + Seconds; 
+    return Year + '-' + Months + '-' + Day + ' ' + Hours + ':' + Minutes + ':' + Seconds;
+  }
+  /**
+   * 两个时间相差天数 
+   * sDate1和sDate2是2006-12-18格式 
+   * @param {*} sDate1
+   * @param {*} sDate2
+   * @return {*} 
+   * @memberof Utils
+   */
+  dateDiff(sDate1, sDate2) {
+    var dateSpan, iDays;
+    sDate1 = Date.parse(sDate1);
+    sDate2 = Date.parse(sDate2);
+    dateSpan = sDate2 - sDate1;
+    dateSpan = Math.abs(dateSpan);
+    iDays = Math.floor(dateSpan / (24 * 3600 * 1000));
+    return parseInt(iDays)
+  }
+
+  /**
+   * 计算时间差(秒)
+   * @param {Date} time1
+   * @param {Date} time2
+   * @return {*} 
+   * @memberof Utils
+   */
+  timeDiff(time1: Date, time2: Date) {
+    var seconds = 0
+    time1 = new Date(time1)
+    seconds = (time1.getTime() - time2.getTime()) / 1000
+    return seconds
+  }
+  /**
+   *
+   * 获取几天前几天后的日期
+   * @param {*} date
+   * @param {*} day
+   * @memberof Utils
+   */
+  getNextDate(date, day) {
+    var dd = new Date(date);
+    dd.setDate(dd.getDate() + day);
+    var y = dd.getFullYear();
+    var m = dd.getMonth() + 1 < 10 ? "0" + (dd.getMonth() + 1) : dd.getMonth() + 1;
+    var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();
+    return y + "-" + m + "-" + d;
+  };
+
+
+}

+ 8 - 0
cool-admin-midway-master/src/app/modules/README.md

@@ -0,0 +1,8 @@
+<!--
+ * @Author: YKH
+ * @Date: 2021-12-08 10:26:27
+ * @LastEditTime: 2022-08-03 11:20:09
+ * @Description: 
+ * @FilePath: \cool-admin\cool-admin-midway-master\src\app\modules\README.md
+-->
+# 这里编写模块代码, 如系统模块、电商的商品模块等

+ 36 - 0
cool-admin-midway-master/src/app/modules/base/config.ts

@@ -0,0 +1,36 @@
+/*
+ * @Author: YKH
+ * @Date: 2021-12-08 10:26:27
+ * @LastEditTime: 2021-12-23 18:09:47
+ * @Description: 
+ * @FilePath: \cool-admin\cool-admin-midway-master\src\app\modules\base\config.ts
+ */
+import { Application } from 'egg';
+import { ModuleConfig } from 'midwayjs-cool-core';
+
+/**
+ * 模块的配置
+ */
+export default (app: Application) => {
+  return {
+    // 模块名称
+    name: '权限管理',
+    // 模块描述
+    description: '基础的权限管理功能,包括登录,权限校验',
+    // 中间件
+    globalMiddlewares: ['baseAuthorityMiddleware', 'baseLogMiddleware'],
+    // jwt 生成解密token的
+    jwt: {
+      // 注意: 最好重新修改,防止破解
+      // secret: 'FOAPOFALOEQIPNNLQ',
+      secret: 'WOSHIYKHHAHA',
+      // token
+      token: {
+        // 2小时过期,需要用刷新token
+        expire: 2 * 3600,
+        // 7天内,如果没操作过就需要重新登录
+        refreshExpire: 24 * 3600 * 30,
+      },
+    },
+  } as ModuleConfig;
+};

+ 81 - 0
cool-admin-midway-master/src/app/modules/base/controller/admin/comm.ts

@@ -0,0 +1,81 @@
+import { Provide, Inject, Get, Post, Body, ALL } from '@midwayjs/decorator';
+import { Context } from 'egg';
+import { CoolController, BaseController, ICoolFile } from 'midwayjs-cool-core';
+import { BaseSysUserEntity } from '../../entity/sys/user';
+import { BaseSysLoginService } from '../../service/sys/login';
+import { BaseSysPermsService } from '../../service/sys/perms';
+import { BaseSysUserService } from '../../service/sys/user';
+
+/**
+ * Base 通用接口 一般写不需要权限过滤的接口
+ */
+@Provide()
+@CoolController()
+export class BaseCommController extends BaseController {
+  @Inject()
+  baseSysUserService: BaseSysUserService;
+
+  @Inject()
+  baseSysPermsService: BaseSysPermsService;
+
+  @Inject()
+  baseSysLoginService: BaseSysLoginService;
+
+  @Inject()
+  ctx: Context;
+
+  @Inject('cool:file')
+  coolFile: ICoolFile;
+
+  /**
+   * 获得个人信息
+   */
+  @Get('/person')
+  async person() {
+    return this.ok(await this.baseSysUserService.person());
+  }
+
+  /**
+   * 修改个人信息
+   */
+  @Post('/personUpdate')
+  async personUpdate(@Body(ALL) user: BaseSysUserEntity) {
+    await this.baseSysUserService.personUpdate(user);
+    return this.ok();
+  }
+
+  /**
+   * 权限菜单
+   */
+  @Get('/permmenu')
+  async permmenu() {
+    return this.ok(
+      await this.baseSysPermsService.permmenu(this.ctx.admin.roleIds)
+    );
+  }
+
+  /**
+   * 文件上传
+   */
+  @Post('/upload')
+  async upload() {
+    return this.ok(await this.coolFile.upload(this.ctx));
+  }
+
+  /**
+   * 文件上传模式,本地或者云存储
+   */
+  @Get('/uploadMode')
+  async uploadMode() {
+    return this.ok(this.coolFile.getMode());
+  }
+
+  /**
+   * 退出
+   */
+  @Post('/logout')
+  async logout() {
+    await this.baseSysLoginService.logout();
+    return this.ok();
+  }
+}

+ 67 - 0
cool-admin-midway-master/src/app/modules/base/controller/admin/open.ts

@@ -0,0 +1,67 @@
+import {
+  Provide,
+  Body,
+  ALL,
+  Inject,
+  Post,
+  Get,
+  Query,
+} from '@midwayjs/decorator';
+import { Context } from 'egg';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { LoginDTO } from '../../dto/login';
+import { BaseSysLoginService } from '../../service/sys/login';
+import { BaseSysParamService } from '../../service/sys/param';
+
+/**
+ * 不需要登录的后台接口
+ */
+@Provide()
+@CoolController()
+export class BaseOpenController extends BaseController {
+  @Inject()
+  baseSysLoginService: BaseSysLoginService;
+
+  @Inject()
+  baseSysParamService: BaseSysParamService;
+
+  @Inject()
+  ctx: Context;
+
+  /**
+   * 根据配置参数key获得网页内容(富文本)
+   */
+  @Get('/html')
+  async htmlByKey(@Query() key: string) {
+    this.ctx.body = await this.baseSysParamService.htmlByKey(key);
+  }
+
+  /**
+   * 登录
+   * @param login
+   */
+  @Post('/login')
+  async login(@Body(ALL) login: LoginDTO) {
+    return this.ok(await this.baseSysLoginService.login(login));
+  }
+
+  /**
+   * 获得验证码
+   */
+  @Get('/captcha')
+  async captcha(
+    @Query() type: string,
+    @Query() width: number,
+    @Query() height: number
+  ) {
+    return this.ok(await this.baseSysLoginService.captcha(type, width, height));
+  }
+
+  /**
+   * 刷新token
+   */
+  @Get('/refreshToken')
+  async refreshToken(@Query() refreshToken: string) {
+    return this.ok(await this.baseSysLoginService.refreshToken(refreshToken));
+  }
+}

+ 51 - 0
cool-admin-midway-master/src/app/modules/base/controller/admin/plugin/info.ts

@@ -0,0 +1,51 @@
+import { Body, Get, Inject, Post, Provide, Query } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { BasePluginInfoService } from '../../../service/plugin/info';
+
+/**
+ * 插件
+ */
+@Provide()
+@CoolController()
+export class BasePluginInfoController extends BaseController {
+  @Inject()
+  basePluginInfoService: BasePluginInfoService;
+  /**
+   * 插件列表
+   */
+  @Post('/list')
+  async list(@Body() keyWord: string) {
+    return this.ok(await this.basePluginInfoService.list(keyWord));
+  }
+
+  /**
+   * 配置
+   * @param namespace
+   * @param config
+   */
+  @Post('/config')
+  async config(@Body() namespace: string, @Body() config: any) {
+    await this.basePluginInfoService.config(namespace, config);
+    return this.ok();
+  }
+
+  /**
+   * 配置
+   * @param namespace
+   * @param config
+   */
+  @Get('/getConfig')
+  async getConfig(@Query() namespace: string) {
+    return this.ok(await this.basePluginInfoService.getConfig(namespace));
+  }
+
+  /**
+   * 启用插件
+   * @param enable
+   */
+  @Post('/enable')
+  async enable(@Body() namespace: string, @Body() enable: number) {
+    await this.basePluginInfoService.enable(namespace, enable);
+    return this.ok();
+  }
+}

+ 27 - 0
cool-admin-midway-master/src/app/modules/base/controller/admin/sys/department.ts

@@ -0,0 +1,27 @@
+import { ALL, Body, Inject, Post, Provide } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { BaseSysDepartmentEntity } from '../../../entity/sys/department';
+import { BaseSysDepartmentService } from '../../../service/sys/department';
+
+/**
+ * 部门
+ */
+@Provide()
+@CoolController({
+  api: ['add', 'delete', 'update', 'list'],
+  entity: BaseSysDepartmentEntity,
+  service: BaseSysDepartmentService,
+})
+export class BaseDepartmentController extends BaseController {
+  @Inject()
+  baseDepartmentService: BaseSysDepartmentService;
+
+  /**
+   * 部门排序
+   */
+  @Post('/order')
+  async order(@Body(ALL) params: any) {
+    await this.baseDepartmentService.order(params);
+    return this.ok();
+  }
+}

+ 59 - 0
cool-admin-midway-master/src/app/modules/base/controller/admin/sys/log.ts

@@ -0,0 +1,59 @@
+import { Provide, Post, Inject, Body, Get } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { BaseSysLogEntity } from '../../../entity/sys/log';
+import { BaseSysUserEntity } from '../../../entity/sys/user';
+import { BaseSysConfService } from '../../../service/sys/conf';
+import { BaseSysLogService } from '../../../service/sys/log';
+
+/**
+ * 系统日志
+ */
+@Provide()
+@CoolController({
+  api: ['page'],
+  entity: BaseSysLogEntity,
+  pageQueryOp: {
+    keyWordLikeFields: ['b.name', 'a.params', 'a.ipAddr'],
+    select: ['a.*, b.name'],
+    leftJoin: [
+      {
+        entity: BaseSysUserEntity,
+        alias: 'b',
+        condition: 'a.userId = b.id',
+      },
+    ],
+  },
+})
+export class BaseSysLogController extends BaseController {
+  @Inject()
+  baseSysLogService: BaseSysLogService;
+
+  @Inject()
+  baseSysConfService: BaseSysConfService;
+
+  /**
+   * 清空日志
+   */
+  @Post('/clear')
+  public async clear() {
+    await this.baseSysLogService.clear(true);
+    return this.ok();
+  }
+
+  /**
+   * 设置日志保存时间
+   */
+  @Post('/setKeep')
+  public async setKeep(@Body() value: number) {
+    await this.baseSysConfService.updateVaule('logKeep', value);
+    return this.ok();
+  }
+
+  /**
+   * 获得日志保存时间
+   */
+  @Get('/getKeep')
+  public async getKeep() {
+    return this.ok(await this.baseSysConfService.getValue('logKeep'));
+  }
+}

+ 18 - 0
cool-admin-midway-master/src/app/modules/base/controller/admin/sys/menu.ts

@@ -0,0 +1,18 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { BaseSysMenuEntity } from '../../../entity/sys/menu';
+import { BaseSysMenuService } from '../../../service/sys/menu';
+
+/**
+ * 菜单
+ */
+@Provide()
+@CoolController({
+  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
+  entity: BaseSysMenuEntity,
+  service: BaseSysMenuService,
+})
+export class BaseSysMenuController extends BaseController {
+  @Inject()
+  baseSysMenuService: BaseSysMenuService;
+}

+ 32 - 0
cool-admin-midway-master/src/app/modules/base/controller/admin/sys/param.ts

@@ -0,0 +1,32 @@
+import { Get, Inject, Provide, Query } from '@midwayjs/decorator';
+import { Context } from 'egg';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { BaseSysParamEntity } from '../../../entity/sys/param';
+import { BaseSysParamService } from '../../../service/sys/param';
+
+/**
+ * 参数配置
+ */
+@Provide()
+@CoolController({
+  api: ['add', 'delete', 'update', 'info', 'page'],
+  entity: BaseSysParamEntity,
+  pageQueryOp: {
+    keyWordLikeFields: ['name', 'keyName'],
+  },
+})
+export class BaseSysParamController extends BaseController {
+  @Inject()
+  baseSysParamService: BaseSysParamService;
+
+  @Inject()
+  ctx: Context;
+
+  /**
+   * 根据配置参数key获得网页内容(富文本)
+   */
+  @Get('/html')
+  async htmlByKey(@Query() key: string) {
+    this.ctx.body = await this.baseSysParamService.htmlByKey(key);
+  }
+}

+ 38 - 0
cool-admin-midway-master/src/app/modules/base/controller/admin/sys/role.ts

@@ -0,0 +1,38 @@
+import { Provide } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { Context } from 'vm';
+import { BaseSysRoleEntity } from '../../../entity/sys/role';
+import { BaseSysRoleService } from '../../../service/sys/role';
+
+/**
+ * 系统角色
+ */
+@Provide()
+@CoolController({
+  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
+  entity: BaseSysRoleEntity,
+  service: BaseSysRoleService,
+  // 新增的时候插入当前用户ID
+  insertParam: async (ctx: Context) => {
+    return {
+      userId: ctx.admin.userId,
+    };
+  },
+  pageQueryOp: {
+    keyWordLikeFields: ['name', 'label'],
+    where: async (ctx: Context) => {
+      const { userId, roleIds, role } = ctx.admin;
+      return [
+        // 超级管理员的角色不展示
+        ['label != :label', { label: 'admin' }],
+        // 如果不是超管,只能看到自己新建的或者自己有的角色
+        [
+          '(userId=:userId or id in (:roleIds))',
+          { userId, roleIds },
+          role !== 'admin',
+        ],
+      ];
+    },
+  },
+})
+export class BaseSysRoleController extends BaseController {}

+ 27 - 0
cool-admin-midway-master/src/app/modules/base/controller/admin/sys/user.ts

@@ -0,0 +1,27 @@
+import { Body, Inject, Post, Provide } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { BaseSysUserEntity } from '../../../entity/sys/user';
+import { BaseSysUserService } from '../../../service/sys/user';
+
+/**
+ * 系统用户
+ */
+@Provide()
+@CoolController({
+  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
+  entity: BaseSysUserEntity,
+  service: BaseSysUserService,
+})
+export class BaseSysUserController extends BaseController {
+  @Inject()
+  baseSysUserService: BaseSysUserService;
+
+  /**
+   * 移动部门
+   */
+  @Post('/move')
+  async move(@Body() departmentId: number, @Body() userIds: []) {
+    await this.baseSysUserService.move(departmentId, userIds);
+    return this.ok();
+  }
+}

+ 1 - 0
cool-admin-midway-master/src/app/modules/base/controller/api/README.md

@@ -0,0 +1 @@
+这里写对外的api接口

+ 38 - 0
cool-admin-midway-master/src/app/modules/base/dto/login.ts

@@ -0,0 +1,38 @@
+import { Rule, RuleType } from '@midwayjs/decorator';
+/**
+ * 登录参数校验
+ */
+export class LoginDTO {
+  // 用户名
+  @Rule(RuleType.string().required())
+  username: string;
+
+  // 密码
+  @Rule(RuleType.string().required())
+  password: string;
+
+  // 验证码ID
+  @Rule(RuleType.string().required())
+  captchaId: string;
+
+  // 验证码
+  @Rule(RuleType.string().required())
+  verifyCode: number;
+}
+
+
+// RuleType.number().required();               // 数字,必填
+// RuleType.number().max(10).min(1);           // 数字,最大值和最小值
+// RuleType.number().greater(10).less(50);     // 数字,大于 10,小于 50
+
+// RuleType.string().max(10).min(5);           // 字符串,长度最大 10,最小 5
+// RuleType.string().length(20);               // 字符串,长度 20
+// RuleType.string().pattern(/^[abc]+$/);      // 字符串,匹配正则格式
+
+// RuleType.object().length(5);                // 对象,key 数量等于 5
+
+
+// RuleType.array().items(RuleType.string());    // 数组,每个元素是字符串
+// RuleType.array().max(10);                   // 数组,最大长度为 10
+// RuleType.array().min(10);                   // 数组,最小长度为 10
+// RuleType.array().length(10);                // 数组,长度为 10

+ 18 - 0
cool-admin-midway-master/src/app/modules/base/entity/app/space/info.ts

@@ -0,0 +1,18 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column } from 'typeorm';
+
+/**
+ * 文件空间信息
+ */
+@EntityModel('base_app_space_info')
+export class BaseAppSpaceInfoEntity extends BaseEntity {
+  @Column({ comment: '地址' })
+  url: string;
+
+  @Column({ comment: '类型' })
+  type: string;
+
+  @Column({ comment: '分类ID', type: 'bigint', nullable: true })
+  classifyId: number;
+}

+ 15 - 0
cool-admin-midway-master/src/app/modules/base/entity/app/space/type.ts

@@ -0,0 +1,15 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column } from 'typeorm';
+
+/**
+ * 图片空间信息分类
+ */
+@EntityModel('base_app_space_type')
+export class BaseAppSpaceTypeEntity extends BaseEntity {
+  @Column({ comment: '类别名称' })
+  name: string;
+
+  @Column({ comment: '父分类ID', type: 'tinyint', nullable: true })
+  parentId: number;
+}

+ 16 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/conf.ts

@@ -0,0 +1,16 @@
+import { Column, Index } from 'typeorm';
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+
+/**
+ * 系统配置
+ */
+@EntityModel('base_sys_conf')
+export class BaseSysConfEntity extends BaseEntity {
+  @Index({ unique: true })
+  @Column({ comment: '配置键' })
+  cKey: string;
+
+  @Column({ comment: '配置值' })
+  cValue: string;
+}

+ 20 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/department.ts

@@ -0,0 +1,20 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column } from 'typeorm';
+
+/**
+ * 部门
+ */
+@EntityModel('base_sys_department')
+export class BaseSysDepartmentEntity extends BaseEntity {
+  @Column({ comment: '部门名称' })
+  name: string;
+
+  @Column({ comment: '上级部门ID', type: 'bigint', nullable: true })
+  parentId: number;
+
+  @Column({ comment: '排序', default: 0 })
+  orderNum: number;
+  // 父菜单名称
+  parentName: string;
+}

+ 28 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/log.ts

@@ -0,0 +1,28 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column, Index } from 'typeorm';
+
+/**
+ * 系统日志
+ */
+@EntityModel('base_sys_log')
+export class BaseSysLogEntity extends BaseEntity {
+  @Index()
+  @Column({ comment: '用户ID', nullable: true, type: 'bigint' })
+  userId: number;
+
+  @Index()
+  @Column({ comment: '行为', length: 100 })
+  action: string;
+
+  @Index()
+  @Column({ comment: 'ip', nullable: true, length: 50 })
+  ip: string;
+
+  @Index()
+  @Column({ comment: 'ip地址', nullable: true, length: 50 })
+  ipAddr: string;
+
+  @Column({ comment: '参数', nullable: true, type: 'text' })
+  params: string;
+}

+ 46 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/menu.ts

@@ -0,0 +1,46 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column } from 'typeorm';
+
+/**
+ * 菜单
+ */
+@EntityModel('base_sys_menu')
+export class BaseSysMenuEntity extends BaseEntity {
+  @Column({ comment: '父菜单ID', type: 'bigint', nullable: true })
+  parentId: number;
+
+  @Column({ comment: '菜单名称' })
+  name: string;
+
+  @Column({ comment: '菜单地址', nullable: true })
+  router: string;
+
+  @Column({ comment: '权限标识', nullable: true })
+  perms: string;
+
+  @Column({
+    comment: '类型 0:目录 1:菜单 2:按钮',
+    default: 0,
+    type: 'tinyint',
+  })
+  type: number;
+
+  @Column({ comment: '图标', nullable: true })
+  icon: string;
+
+  @Column({ comment: '排序', default: 0 })
+  orderNum: number;
+
+  @Column({ comment: '视图地址', nullable: true })
+  viewPath: string;
+
+  @Column({ comment: '路由缓存', default: true })
+  keepAlive: boolean;
+
+  // 父菜单名称
+  parentName: string;
+
+  @Column({ comment: '父菜单名称', default: true })
+  isShow: boolean;
+}

+ 29 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/param.ts

@@ -0,0 +1,29 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column, Index } from 'typeorm';
+
+/**
+ * 参数配置
+ */
+@EntityModel('base_sys_param')
+export class BaseSysParamEntity extends BaseEntity {
+  @Index()
+  @Column({ comment: '键位' })
+  keyName: string;
+
+  @Column({ comment: '名称' })
+  name: string;
+
+  @Column({ comment: '数据', type: 'text' })
+  data: string;
+
+  @Column({
+    comment: '数据类型 0:字符串 1:数组 2:键值对',
+    default: 0,
+    type: 'tinyint',
+  })
+  dataType: number;
+
+  @Column({ comment: '备注', nullable: true })
+  remark: string;
+}

+ 26 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/role.ts

@@ -0,0 +1,26 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column, Index } from 'typeorm';
+
+/**
+ * 角色
+ */
+@EntityModel('base_sys_role')
+export class BaseSysRoleEntity extends BaseEntity {
+  @Column({ comment: '用户ID' })
+  userId: string;
+
+  @Index({ unique: true })
+  @Column({ comment: '名称' })
+  name: string;
+
+  @Index({ unique: true })
+  @Column({ comment: '角色标签', nullable: true, length: 50 })
+  label: string;
+
+  @Column({ comment: '备注', nullable: true })
+  remark: string;
+
+  @Column({ comment: '数据权限是否关联上下级', default: 1 })
+  relevance: number;
+}

+ 15 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/role_department.ts

@@ -0,0 +1,15 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column } from 'typeorm';
+
+/**
+ * 角色部门
+ */
+@EntityModel('base_sys_role_department')
+export class BaseSysRoleDepartmentEntity extends BaseEntity {
+  @Column({ comment: '角色ID', type: 'bigint' })
+  roleId: number;
+
+  @Column({ comment: '部门ID', type: 'bigint' })
+  departmentId: number;
+}

+ 15 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/role_menu.ts

@@ -0,0 +1,15 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column } from 'typeorm';
+
+/**
+ * 角色菜单
+ */
+@EntityModel('base_sys_role_menu')
+export class BaseSysRoleMenuEntity extends BaseEntity {
+  @Column({ comment: '角色ID', type: 'bigint' })
+  roleId: number;
+
+  @Column({ comment: '菜单ID', type: 'bigint' })
+  menuId: number;
+}

+ 55 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/user.ts

@@ -0,0 +1,55 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column, Index } from 'typeorm';
+
+/**
+ * 系统用户
+ */
+@EntityModel('base_sys_user')
+export class BaseSysUserEntity extends BaseEntity {
+  @Index()
+  @Column({ comment: '部门ID', type: 'bigint', nullable: true })
+  departmentId: number;
+
+  @Column({ comment: '姓名', nullable: true })
+  name: string;
+
+  @Index({ unique: true })
+  @Column({ comment: '用户名', length: 100 })
+  username: string;
+
+  @Column({ comment: '密码' })
+  password: string;
+
+  @Column({
+    comment: '密码版本, 作用是改完密码,让原来的token失效',
+    default: 1,
+  })
+  passwordV: number;
+
+  @Column({ comment: '昵称', nullable: true })
+  nickName: string;
+
+  @Column({ comment: '头像', nullable: true })
+  headImg: string;
+
+  @Index()
+  @Column({ comment: '手机', nullable: true, length: 20 })
+  phone: string;
+
+  @Column({ comment: '邮箱', nullable: true })
+  email: string;
+
+  @Column({ comment: '备注', nullable: true })
+  remark: string;
+
+  @Column({ comment: '状态 0:禁用 1:启用', default: 1, type: 'tinyint' })
+  status: number;
+  // 部门名称
+  departmentName: string;
+  // 角色ID列表
+  roleIdList: number[];
+
+  @Column({ comment: 'socketId', nullable: true })
+  socketId: string;
+}

+ 15 - 0
cool-admin-midway-master/src/app/modules/base/entity/sys/user_role.ts

@@ -0,0 +1,15 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column } from 'typeorm';
+
+/**
+ * 用户角色
+ */
+@EntityModel('base_sys_user_role')
+export class BaseSysUserRoleEntity extends BaseEntity {
+  @Column({ comment: '用户ID', type: 'bigint' })
+  userId: number;
+
+  @Column({ comment: '角色ID', type: 'bigint' })
+  roleId: number;
+}

+ 717 - 0
cool-admin-midway-master/src/app/modules/base/init.sql

@@ -0,0 +1,717 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : cool-admin-next
+ Source Server Type    : MySQL
+ Source Server Version : 50727
+ Source Host           : 139.196.196.203:3306
+ Source Schema         : cooladmin
+
+ Target Server Type    : MySQL
+ Target Server Version : 50727
+ File Encoding         : 65001
+
+ Date: 10/03/2021 14:04:34
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for base_app_space_info
+-- ----------------------------
+DROP TABLE IF EXISTS `base_app_space_info`;
+CREATE TABLE `base_app_space_info` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `url` varchar(255) NOT NULL COMMENT '地址',
+  `type` varchar(255) NOT NULL COMMENT '类型',
+  `classifyId` bigint(20) DEFAULT NULL COMMENT '分类ID',
+  PRIMARY KEY (`id`),
+  KEY `IDX_4aed04cbfa2ecdc01485b86e51` (`createTime`),
+  KEY `IDX_abd5de4a4895eb253a5cabb20f` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for base_app_space_type
+-- ----------------------------
+DROP TABLE IF EXISTS `base_app_space_type`;
+CREATE TABLE `base_app_space_type` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `name` varchar(255) NOT NULL COMMENT '类别名称',
+  `parentId` tinyint(4) DEFAULT NULL COMMENT '父分类ID',
+  PRIMARY KEY (`id`),
+  KEY `IDX_5e8376603f89fdf3e7bb05103a` (`createTime`),
+  KEY `IDX_500ea9e8b2c5c08c9b86a0667e` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_app_space_type
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_app_space_type` VALUES (1, '2021-02-26 14:07:48.867045', '2021-02-26 14:07:48.867045', 'a', NULL);
+INSERT INTO `base_app_space_type` VALUES (2, '2021-02-26 14:07:52.285531', '2021-02-26 14:07:52.285531', 'b', NULL);
+COMMIT;
+
+-- ----------------------------
+-- Table structure for base_sys_conf
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_conf`;
+CREATE TABLE `base_sys_conf` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `cKey` varchar(255) NOT NULL COMMENT '配置键',
+  `cValue` varchar(255) NOT NULL COMMENT '配置值',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_9be195d27767b4485417869c3a` (`cKey`),
+  KEY `IDX_905208f206a3ff9fd513421971` (`createTime`),
+  KEY `IDX_4c6f27f6ecefe51a5a196a047a` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_sys_conf
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_sys_conf` VALUES (1, '2021-02-25 14:23:26.810981', '2021-02-25 14:23:26.810981', 'logKeep', '31');
+COMMIT;
+
+-- ----------------------------
+-- Table structure for base_sys_department
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_department`;
+CREATE TABLE `base_sys_department` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `name` varchar(255) NOT NULL COMMENT '部门名称',
+  `parentId` bigint(20) DEFAULT NULL COMMENT '上级部门ID',
+  `orderNum` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
+  PRIMARY KEY (`id`),
+  KEY `IDX_be4c53cd671384fa588ca9470a` (`createTime`),
+  KEY `IDX_ca1473a793961ec55bc0c8d268` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_sys_department
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_sys_department` VALUES (1, '2021-02-24 21:17:11.971397', '2021-02-24 21:17:15.697917', 'COOL', NULL, 0);
+INSERT INTO `base_sys_department` VALUES (11, '2021-02-26 14:17:06.690613', '2021-02-26 14:17:06.690613', '开发', 1, 0);
+INSERT INTO `base_sys_department` VALUES (12, '2021-02-26 14:17:11.576369', '2021-02-26 14:17:11.576369', '测试', 1, 0);
+INSERT INTO `base_sys_department` VALUES (13, '2021-02-26 14:28:59.685177', '2021-02-26 14:28:59.685177', '游客', 1, 0);
+COMMIT;
+
+-- ----------------------------
+-- Table structure for base_sys_log
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_log`;
+CREATE TABLE `base_sys_log` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `userId` bigint(20) DEFAULT NULL COMMENT '用户ID',
+  `action` varchar(100) NOT NULL COMMENT '行为',
+  `ip` varchar(50) DEFAULT NULL COMMENT 'ip',
+  `ipAddr` varchar(50) DEFAULT NULL COMMENT 'ip地址',
+  `params` text COMMENT '参数',
+  PRIMARY KEY (`id`),
+  KEY `IDX_51a2caeb5713efdfcb343a8772` (`userId`),
+  KEY `IDX_938f886fb40e163db174b7f6c3` (`action`),
+  KEY `IDX_24e18767659f8c7142580893f2` (`ip`),
+  KEY `IDX_a03a27f75cf8d502b3060823e1` (`ipAddr`),
+  KEY `IDX_c9382b76219a1011f7b8e7bcd1` (`createTime`),
+  KEY `IDX_bfd44e885b470da43bcc39aaa7` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=4844 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for base_sys_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_menu`;
+CREATE TABLE `base_sys_menu` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `parentId` bigint(20) DEFAULT NULL COMMENT '父菜单ID',
+  `name` varchar(255) NOT NULL COMMENT '菜单名称',
+  `router` varchar(255) DEFAULT NULL COMMENT '菜单地址',
+  `perms` varchar(255) DEFAULT NULL COMMENT '权限标识',
+  `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '类型 0:目录 1:菜单 2:按钮',
+  `icon` varchar(255) DEFAULT NULL COMMENT '图标',
+  `orderNum` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
+  `viewPath` varchar(255) DEFAULT NULL COMMENT '视图地址',
+  `keepAlive` tinyint(4) NOT NULL DEFAULT '1' COMMENT '路由缓存',
+  `isShow` tinyint(4) NOT NULL DEFAULT '1' COMMENT '父菜单名称',
+  PRIMARY KEY (`id`),
+  KEY `IDX_05e3d6a56604771a6da47ebf8e` (`createTime`),
+  KEY `IDX_d5203f18daaf7c3fe0ab34497f` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_sys_menu
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_sys_menu` VALUES (1, '2019-09-11 11:14:44.000000', '2019-11-18 15:56:36.000000', NULL, '工作台', '/', NULL, 0, 'icon-workbench', 1, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (2, '2019-09-11 11:14:47.000000', '2021-02-27 17:16:05.000000', NULL, '系统管理', '/sys', NULL, 0, 'icon-system', 2, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (8, '1900-01-20 23:19:57.000000', '2021-03-08 22:59:12.000000', 27, '菜单列表', '/sys/menu', NULL, 1, 'icon-menu', 2, 'cool/modules/base/views/menu.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (10, '1900-01-20 00:19:27.325000', '1900-01-20 00:19:27.325000', 8, '新增', NULL, 'base:sys:menu:add', 2, NULL, 1, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (11, '1900-01-20 00:19:51.101000', '1900-01-20 00:19:51.101000', 8, '删除', NULL, 'base:sys:menu:delete', 2, NULL, 2, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (12, '1900-01-20 00:20:05.150000', '1900-01-20 00:20:05.150000', 8, '修改', NULL, 'base:sys:menu:update', 2, NULL, 3, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (13, '1900-01-20 00:20:19.341000', '1900-01-20 00:20:19.341000', 8, '查询', NULL, 'base:sys:menu:page,base:sys:menu:list,base:sys:menu:info', 2, NULL, 4, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (22, '2019-09-12 00:34:01.000000', '2021-03-08 22:59:23.000000', 27, '角色列表', '/sys/role', NULL, 1, 'icon-common', 3, 'cool/modules/base/views/role.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (23, '1900-01-20 00:34:23.459000', '1900-01-20 00:34:23.459000', 22, '新增', NULL, 'base:sys:role:add', 2, NULL, 1, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (24, '1900-01-20 00:34:40.523000', '1900-01-20 00:34:40.523000', 22, '删除', NULL, 'base:sys:role:delete', 2, NULL, 2, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (25, '1900-01-20 00:34:53.306000', '1900-01-20 00:34:53.306000', 22, '修改', NULL, 'base:sys:role:update', 2, NULL, 3, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (26, '1900-01-20 00:35:05.024000', '1900-01-20 00:35:05.024000', 22, '查询', NULL, 'base:sys:role:page,base:sys:role:list,base:sys:role:info', 2, NULL, 4, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (27, '2019-09-12 15:52:44.000000', '2019-09-15 22:11:56.000000', 2, '权限管理', NULL, NULL, 0, 'icon-auth', 1, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (29, '2019-09-12 17:35:51.000000', '2021-03-08 23:01:39.000000', 105, '请求日志', '/sys/log', NULL, 1, 'icon-log', 1, 'cool/modules/base/views/log.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (30, '2019-09-12 17:37:03.000000', '2021-03-03 10:16:26.000000', 29, '权限', NULL, 'base:sys:log:page,base:sys:log:clear,base:sys:log:getKeep,base:sys:log:setKeep', 2, NULL, 1, NULL, 0, 1);
+INSERT INTO `base_sys_menu` VALUES (43, '2019-11-07 14:22:34.000000', '2021-03-08 23:02:51.000000', 45, 'crud 示例', '/crud', NULL, 1, 'icon-favor', 1, 'cool/modules/demo/views/crud.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (45, '2019-11-07 22:36:57.000000', '2019-11-11 15:21:10.000000', 1, '组件库', '/ui-lib', NULL, 0, 'icon-common', 2, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (47, '2019-11-08 09:35:08.000000', '2021-02-27 17:16:35.000000', NULL, '框架教程', '/tutorial', NULL, 0, 'icon-task', 4, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (48, '2019-11-08 09:35:53.000000', '2021-03-03 11:03:21.000000', 47, '文档', '/tutorial/doc', NULL, 1, 'icon-log', 0, 'https://admin.cool-js.com', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (49, '2019-11-09 22:11:13.000000', '2021-03-09 09:50:46.000000', 45, 'quill 富文本编辑器', '/editor-quill', NULL, 1, 'icon-favor', 2, 'cool/modules/demo/views/editor-quill.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (59, '2019-11-18 16:50:27.000000', '2019-11-18 16:50:27.000000', 97, '部门列表', NULL, 'base:sys:department:list', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (60, '2019-11-18 16:50:45.000000', '2019-11-18 16:50:45.000000', 97, '新增部门', NULL, 'base:sys:department:add', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (61, '2019-11-18 16:50:59.000000', '2019-11-18 16:50:59.000000', 97, '更新部门', NULL, 'base:sys:department:update', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (62, '2019-11-18 16:51:13.000000', '2019-11-18 16:51:13.000000', 97, '删除部门', NULL, 'base:sys:department:delete', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (63, '2019-11-18 17:49:35.000000', '2019-11-18 17:49:35.000000', 97, '部门排序', NULL, 'base:sys:department:order', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (65, '2019-11-18 23:59:21.000000', '2019-11-18 23:59:21.000000', 97, '用户转移', NULL, 'base:sys:user:move', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (78, '2019-12-10 13:27:56.000000', '2021-02-27 17:08:53.000000', 2, '参数配置', NULL, NULL, 0, 'icon-common', 4, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (79, '1900-01-20 13:29:33.000000', '2021-03-08 23:01:48.000000', 78, '参数列表', '/sys/param', NULL, 1, 'icon-menu', 0, 'cool/modules/base/views/param.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (80, '1900-01-20 13:29:50.146000', '1900-01-20 13:29:50.146000', 79, '新增', NULL, 'base:sys:param:add', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (81, '1900-01-20 13:30:10.030000', '1900-01-20 13:30:10.030000', 79, '修改', NULL, 'base:sys:param:info,base:sys:param:update', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (82, '1900-01-20 13:30:25.791000', '1900-01-20 13:30:25.791000', 79, '删除', NULL, 'base:sys:param:delete', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (83, '1900-01-20 13:30:40.469000', '1900-01-20 13:30:40.469000', 79, '查看', NULL, 'base:sys:param:page,base:sys:param:list,base:sys:param:info', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (84, '2020-07-25 16:21:30.000000', '2020-07-25 16:21:30.000000', NULL, '通用', NULL, NULL, 0, 'icon-radioboxfill', 99, NULL, 1, 0);
+INSERT INTO `base_sys_menu` VALUES (85, '2020-07-25 16:22:14.000000', '2021-03-03 10:36:00.000000', 84, '图片上传', NULL, 'space:info:page,space:info:list,space:info:info,space:info:add,space:info:delete,space:info:update,space:type:page,space:type:list,space:type:info,space:type:add,space:type:delete,space:type:update', 2, NULL, 1, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (86, '2020-08-12 09:56:27.000000', '2021-03-08 23:03:03.000000', 45, '文件上传', '/upload', NULL, 1, 'icon-favor', 3, 'cool/modules/demo/views/upload.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (90, '1900-01-20 10:26:58.615000', '1900-01-20 10:26:58.615000', 84, '客服聊天', NULL, 'base:app:im:message:read,base:app:im:message:page,base:app:im:session:page,base:app:im:session:list,base:app:im:session:unreadCount,base:app:im:session:delete', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (96, '2021-01-12 14:12:20.000000', '2021-03-08 23:02:40.000000', 1, '组件预览', '/demo', NULL, 1, 'icon-favor', 0, 'cool/modules/demo/views/demo.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (97, '1900-01-20 14:14:02.000000', '2021-03-09 11:03:09.000000', 27, '用户列表', '/sys/user', NULL, 1, 'icon-user', 0, 'cool/modules/base/views/user.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (98, '1900-01-20 14:14:13.528000', '1900-01-20 14:14:13.528000', 97, '新增', NULL, 'base:sys:user:add', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (99, '1900-01-20 14:14:22.823000', '1900-01-20 14:14:22.823000', 97, '删除', NULL, 'base:sys:user:delete', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (100, '1900-01-20 14:14:33.973000', '1900-01-20 14:14:33.973000', 97, '修改', NULL, 'base:sys:user:delete,base:sys:user:update', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (101, '2021-01-12 14:14:51.000000', '2021-01-12 14:14:51.000000', 97, '查询', NULL, 'base:sys:user:page,base:sys:user:list,base:sys:user:info', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (105, '2021-01-21 10:42:55.000000', '2021-01-21 10:42:55.000000', 2, '监控管理', NULL, NULL, 0, 'icon-rank', 6, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (109, '2021-02-27 14:13:56.000000', '2021-02-27 17:09:19.000000', NULL, '插件管理', NULL, NULL, 0, 'icon-menu', 3, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (110, '2021-02-27 14:14:13.000000', '2021-03-08 23:01:30.000000', 109, '插件列表', '/plugin', NULL, 1, 'icon-menu', 0, 'cool/modules/base/views/plugin.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (111, '2021-02-27 14:24:41.877000', '2021-02-27 14:24:41.877000', 110, '编辑', NULL, 'base:plugin:info:info,base:plugin:info:update', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (112, '2021-02-27 14:24:52.159000', '2021-02-27 14:24:52.159000', 110, '列表', NULL, 'base:plugin:info:list', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (113, '2021-02-27 14:25:02.066000', '2021-02-27 14:25:02.066000', 110, '删除', NULL, 'base:plugin:info:delete', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (114, '2021-02-27 16:36:59.322000', '2021-02-27 16:36:59.322000', 110, '保存配置', NULL, 'base:plugin:info:config', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (115, '2021-02-27 16:38:21.000000', '2021-02-27 18:18:22.000000', 110, '获取配置', NULL, 'base:plugin:info:getConfig', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (116, '2021-02-27 17:57:42.000000', '2021-02-27 18:19:35.000000', 110, '开启、关闭', NULL, 'base:plugin:info:enable', 2, NULL, 0, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (117, '2021-03-05 10:58:25.000000', '2021-03-05 10:58:25.000000', NULL, '任务管理', NULL, NULL, 0, 'icon-activity', 5, NULL, 1, 1);
+INSERT INTO `base_sys_menu` VALUES (118, '2021-03-05 10:59:42.000000', '2021-03-05 10:59:42.000000', 117, '任务列表', '/task', NULL, 1, 'icon-menu', 0, 'cool/modules/task/views/task.vue', 1, 1);
+INSERT INTO `base_sys_menu` VALUES (119, '2021-03-05 11:00:00.000000', '2021-03-05 11:00:00.000000', 118, '权限', NULL, 'task:info:page,task:info:list,task:info:info,task:info:add,task:info:delete,task:info:update,task:info:stop,task:info:start,task:info:once,task:info:log', 2, NULL, 0, NULL, 1, 1);
+COMMIT;
+
+-- ----------------------------
+-- Table structure for base_sys_param
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_param`;
+CREATE TABLE `base_sys_param` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `keyName` varchar(255) NOT NULL COMMENT '键位',
+  `name` varchar(255) NOT NULL COMMENT '名称',
+  `data` text NOT NULL COMMENT '数据',
+  `dataType` tinyint(4) NOT NULL DEFAULT '0' COMMENT '数据类型 0:字符串 1:数组 2:键值对',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `IDX_cf19b5e52d8c71caa9c4534454` (`keyName`),
+  KEY `IDX_7bcb57371b481d8e2d66ddeaea` (`createTime`),
+  KEY `IDX_479122e3bf464112f7a7253dac` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_sys_param
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_sys_param` VALUES (1, '2021-02-26 13:53:05.000000', '2021-03-03 17:50:04.000000', 'text', '富文本参数', '<p><strong class=\"ql-size-huge\">111xxxxx2222<span class=\"ql-cursor\"></span></strong></p>', 0, NULL);
+INSERT INTO `base_sys_param` VALUES (2, '2021-02-26 13:53:18.000000', '2021-02-26 13:53:18.000000', 'json', 'JSON参数', '{\n    code: 111\n}', 0, NULL);
+COMMIT;
+
+-- ----------------------------
+-- Table structure for base_sys_role
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_role`;
+CREATE TABLE `base_sys_role` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `userId` varchar(255) NOT NULL COMMENT '用户ID',
+  `name` varchar(255) NOT NULL COMMENT '名称',
+  `label` varchar(50) DEFAULT NULL COMMENT '角色标签',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  `relevance` int(11) NOT NULL DEFAULT '1' COMMENT '数据权限是否关联上下级',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_469d49a5998170e9550cf113da` (`name`),
+  UNIQUE KEY `IDX_f3f24fbbccf00192b076e549a7` (`label`),
+  KEY `IDX_6f01184441dec49207b41bfd92` (`createTime`),
+  KEY `IDX_d64ca209f3fc52128d9b20e97b` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_sys_role
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_sys_role` VALUES (1, '2021-02-24 21:18:39.682358', '2021-02-24 21:18:39.682358', '1', '超管', 'admin', '最高权限的角色', 1);
+INSERT INTO `base_sys_role` VALUES (10, '2021-02-26 14:15:38.000000', '2021-02-26 14:15:38.000000', '1', '系统管理员', 'admin-sys', NULL, 1);
+INSERT INTO `base_sys_role` VALUES (11, '2021-02-26 14:16:49.044744', '2021-02-26 14:16:49.044744', '1', '游客', 'visitor', NULL, 0);
+INSERT INTO `base_sys_role` VALUES (12, '2021-02-26 14:26:51.000000', '2021-02-26 14:32:35.000000', '1', '开发', 'dev', NULL, 0);
+INSERT INTO `base_sys_role` VALUES (13, '2021-02-26 14:27:58.000000', '2021-02-26 14:33:49.000000', '1', '测试', 'test', NULL, 0);
+COMMIT;
+
+-- ----------------------------
+-- Table structure for base_sys_role_department
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_role_department`;
+CREATE TABLE `base_sys_role_department` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `roleId` bigint(20) NOT NULL COMMENT '角色ID',
+  `departmentId` bigint(20) NOT NULL COMMENT '部门ID',
+  PRIMARY KEY (`id`),
+  KEY `IDX_e881a66f7cce83ba431cf20194` (`createTime`),
+  KEY `IDX_cbf48031efee5d0de262965e53` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_sys_role_department
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_sys_role_department` VALUES (1, '2021-02-26 12:00:23.787939', '2021-02-26 12:00:23.787939', 8, 4);
+INSERT INTO `base_sys_role_department` VALUES (2, '2021-02-26 12:01:11.525205', '2021-02-26 12:01:11.525205', 9, 1);
+INSERT INTO `base_sys_role_department` VALUES (3, '2021-02-26 12:01:11.624266', '2021-02-26 12:01:11.624266', 9, 4);
+INSERT INTO `base_sys_role_department` VALUES (4, '2021-02-26 12:01:11.721894', '2021-02-26 12:01:11.721894', 9, 5);
+INSERT INTO `base_sys_role_department` VALUES (5, '2021-02-26 12:01:11.823342', '2021-02-26 12:01:11.823342', 9, 8);
+INSERT INTO `base_sys_role_department` VALUES (6, '2021-02-26 12:01:11.922873', '2021-02-26 12:01:11.922873', 9, 9);
+INSERT INTO `base_sys_role_department` VALUES (23, '2021-02-26 14:32:40.354669', '2021-02-26 14:32:40.354669', 12, 11);
+INSERT INTO `base_sys_role_department` VALUES (25, '2021-02-26 14:32:59.726608', '2021-02-26 14:32:59.726608', 10, 1);
+INSERT INTO `base_sys_role_department` VALUES (27, '2021-02-26 14:33:54.579947', '2021-02-26 14:33:54.579947', 13, 12);
+COMMIT;
+
+-- ----------------------------
+-- Table structure for base_sys_role_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_role_menu`;
+CREATE TABLE `base_sys_role_menu` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `roleId` bigint(20) NOT NULL COMMENT '角色ID',
+  `menuId` bigint(20) NOT NULL COMMENT '菜单ID',
+  PRIMARY KEY (`id`),
+  KEY `IDX_3641f81d4201c524a57ce2aa54` (`createTime`),
+  KEY `IDX_f860298298b26e7a697be36e5b` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=517 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_sys_role_menu
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_sys_role_menu` VALUES (1, '2021-02-26 12:00:18.240154', '2021-02-26 12:00:18.240154', 8, 1);
+INSERT INTO `base_sys_role_menu` VALUES (2, '2021-02-26 12:00:18.342131', '2021-02-26 12:00:18.342131', 8, 96);
+INSERT INTO `base_sys_role_menu` VALUES (3, '2021-02-26 12:00:18.444143', '2021-02-26 12:00:18.444143', 8, 45);
+INSERT INTO `base_sys_role_menu` VALUES (4, '2021-02-26 12:00:18.545490', '2021-02-26 12:00:18.545490', 8, 43);
+INSERT INTO `base_sys_role_menu` VALUES (5, '2021-02-26 12:00:18.649626', '2021-02-26 12:00:18.649626', 8, 49);
+INSERT INTO `base_sys_role_menu` VALUES (6, '2021-02-26 12:00:18.752369', '2021-02-26 12:00:18.752369', 8, 86);
+INSERT INTO `base_sys_role_menu` VALUES (7, '2021-02-26 12:00:18.856023', '2021-02-26 12:00:18.856023', 8, 2);
+INSERT INTO `base_sys_role_menu` VALUES (8, '2021-02-26 12:00:18.956131', '2021-02-26 12:00:18.956131', 8, 27);
+INSERT INTO `base_sys_role_menu` VALUES (9, '2021-02-26 12:00:19.071490', '2021-02-26 12:00:19.071490', 8, 97);
+INSERT INTO `base_sys_role_menu` VALUES (10, '2021-02-26 12:00:19.171745', '2021-02-26 12:00:19.171745', 8, 59);
+INSERT INTO `base_sys_role_menu` VALUES (11, '2021-02-26 12:00:19.274495', '2021-02-26 12:00:19.274495', 8, 60);
+INSERT INTO `base_sys_role_menu` VALUES (12, '2021-02-26 12:00:19.374610', '2021-02-26 12:00:19.374610', 8, 61);
+INSERT INTO `base_sys_role_menu` VALUES (13, '2021-02-26 12:00:19.474750', '2021-02-26 12:00:19.474750', 8, 62);
+INSERT INTO `base_sys_role_menu` VALUES (14, '2021-02-26 12:00:19.573369', '2021-02-26 12:00:19.573369', 8, 63);
+INSERT INTO `base_sys_role_menu` VALUES (15, '2021-02-26 12:00:19.674242', '2021-02-26 12:00:19.674242', 8, 65);
+INSERT INTO `base_sys_role_menu` VALUES (16, '2021-02-26 12:00:19.772886', '2021-02-26 12:00:19.772886', 8, 98);
+INSERT INTO `base_sys_role_menu` VALUES (17, '2021-02-26 12:00:19.874134', '2021-02-26 12:00:19.874134', 8, 99);
+INSERT INTO `base_sys_role_menu` VALUES (18, '2021-02-26 12:00:19.972728', '2021-02-26 12:00:19.972728', 8, 100);
+INSERT INTO `base_sys_role_menu` VALUES (19, '2021-02-26 12:00:20.085877', '2021-02-26 12:00:20.085877', 8, 101);
+INSERT INTO `base_sys_role_menu` VALUES (20, '2021-02-26 12:00:20.192887', '2021-02-26 12:00:20.192887', 8, 8);
+INSERT INTO `base_sys_role_menu` VALUES (21, '2021-02-26 12:00:20.293747', '2021-02-26 12:00:20.293747', 8, 10);
+INSERT INTO `base_sys_role_menu` VALUES (22, '2021-02-26 12:00:20.393491', '2021-02-26 12:00:20.393491', 8, 11);
+INSERT INTO `base_sys_role_menu` VALUES (23, '2021-02-26 12:00:20.495110', '2021-02-26 12:00:20.495110', 8, 12);
+INSERT INTO `base_sys_role_menu` VALUES (24, '2021-02-26 12:00:20.594083', '2021-02-26 12:00:20.594083', 8, 13);
+INSERT INTO `base_sys_role_menu` VALUES (25, '2021-02-26 12:00:20.695727', '2021-02-26 12:00:20.695727', 8, 22);
+INSERT INTO `base_sys_role_menu` VALUES (26, '2021-02-26 12:00:20.794729', '2021-02-26 12:00:20.794729', 8, 23);
+INSERT INTO `base_sys_role_menu` VALUES (27, '2021-02-26 12:00:20.895601', '2021-02-26 12:00:20.895601', 8, 24);
+INSERT INTO `base_sys_role_menu` VALUES (28, '2021-02-26 12:00:20.994972', '2021-02-26 12:00:20.994972', 8, 25);
+INSERT INTO `base_sys_role_menu` VALUES (29, '2021-02-26 12:00:21.110384', '2021-02-26 12:00:21.110384', 8, 26);
+INSERT INTO `base_sys_role_menu` VALUES (30, '2021-02-26 12:00:21.210970', '2021-02-26 12:00:21.210970', 8, 69);
+INSERT INTO `base_sys_role_menu` VALUES (31, '2021-02-26 12:00:21.311852', '2021-02-26 12:00:21.311852', 8, 70);
+INSERT INTO `base_sys_role_menu` VALUES (32, '2021-02-26 12:00:21.411591', '2021-02-26 12:00:21.411591', 8, 71);
+INSERT INTO `base_sys_role_menu` VALUES (33, '2021-02-26 12:00:21.513584', '2021-02-26 12:00:21.513584', 8, 72);
+INSERT INTO `base_sys_role_menu` VALUES (34, '2021-02-26 12:00:21.612212', '2021-02-26 12:00:21.612212', 8, 73);
+INSERT INTO `base_sys_role_menu` VALUES (35, '2021-02-26 12:00:21.712720', '2021-02-26 12:00:21.712720', 8, 74);
+INSERT INTO `base_sys_role_menu` VALUES (36, '2021-02-26 12:00:21.812839', '2021-02-26 12:00:21.812839', 8, 75);
+INSERT INTO `base_sys_role_menu` VALUES (37, '2021-02-26 12:00:21.913321', '2021-02-26 12:00:21.913321', 8, 76);
+INSERT INTO `base_sys_role_menu` VALUES (38, '2021-02-26 12:00:22.013970', '2021-02-26 12:00:22.013970', 8, 77);
+INSERT INTO `base_sys_role_menu` VALUES (39, '2021-02-26 12:00:22.144879', '2021-02-26 12:00:22.144879', 8, 78);
+INSERT INTO `base_sys_role_menu` VALUES (40, '2021-02-26 12:00:22.246707', '2021-02-26 12:00:22.246707', 8, 79);
+INSERT INTO `base_sys_role_menu` VALUES (41, '2021-02-26 12:00:22.347579', '2021-02-26 12:00:22.347579', 8, 80);
+INSERT INTO `base_sys_role_menu` VALUES (42, '2021-02-26 12:00:22.446947', '2021-02-26 12:00:22.446947', 8, 81);
+INSERT INTO `base_sys_role_menu` VALUES (43, '2021-02-26 12:00:22.547082', '2021-02-26 12:00:22.547082', 8, 82);
+INSERT INTO `base_sys_role_menu` VALUES (44, '2021-02-26 12:00:22.647197', '2021-02-26 12:00:22.647197', 8, 83);
+INSERT INTO `base_sys_role_menu` VALUES (45, '2021-02-26 12:00:22.748089', '2021-02-26 12:00:22.748089', 8, 105);
+INSERT INTO `base_sys_role_menu` VALUES (46, '2021-02-26 12:00:22.847814', '2021-02-26 12:00:22.847814', 8, 102);
+INSERT INTO `base_sys_role_menu` VALUES (47, '2021-02-26 12:00:22.949071', '2021-02-26 12:00:22.949071', 8, 103);
+INSERT INTO `base_sys_role_menu` VALUES (48, '2021-02-26 12:00:23.047353', '2021-02-26 12:00:23.047353', 8, 29);
+INSERT INTO `base_sys_role_menu` VALUES (49, '2021-02-26 12:00:23.147826', '2021-02-26 12:00:23.147826', 8, 30);
+INSERT INTO `base_sys_role_menu` VALUES (50, '2021-02-26 12:00:23.246800', '2021-02-26 12:00:23.246800', 8, 47);
+INSERT INTO `base_sys_role_menu` VALUES (51, '2021-02-26 12:00:23.349541', '2021-02-26 12:00:23.349541', 8, 48);
+INSERT INTO `base_sys_role_menu` VALUES (52, '2021-02-26 12:00:23.463177', '2021-02-26 12:00:23.463177', 8, 84);
+INSERT INTO `base_sys_role_menu` VALUES (53, '2021-02-26 12:00:23.564096', '2021-02-26 12:00:23.564096', 8, 90);
+INSERT INTO `base_sys_role_menu` VALUES (54, '2021-02-26 12:00:23.663815', '2021-02-26 12:00:23.663815', 8, 85);
+INSERT INTO `base_sys_role_menu` VALUES (55, '2021-02-26 12:01:05.971978', '2021-02-26 12:01:05.971978', 9, 1);
+INSERT INTO `base_sys_role_menu` VALUES (56, '2021-02-26 12:01:06.085568', '2021-02-26 12:01:06.085568', 9, 96);
+INSERT INTO `base_sys_role_menu` VALUES (57, '2021-02-26 12:01:06.198271', '2021-02-26 12:01:06.198271', 9, 45);
+INSERT INTO `base_sys_role_menu` VALUES (58, '2021-02-26 12:01:06.309736', '2021-02-26 12:01:06.309736', 9, 43);
+INSERT INTO `base_sys_role_menu` VALUES (59, '2021-02-26 12:01:06.410785', '2021-02-26 12:01:06.410785', 9, 49);
+INSERT INTO `base_sys_role_menu` VALUES (60, '2021-02-26 12:01:06.510712', '2021-02-26 12:01:06.510712', 9, 86);
+INSERT INTO `base_sys_role_menu` VALUES (61, '2021-02-26 12:01:06.612457', '2021-02-26 12:01:06.612457', 9, 2);
+INSERT INTO `base_sys_role_menu` VALUES (62, '2021-02-26 12:01:06.710397', '2021-02-26 12:01:06.710397', 9, 27);
+INSERT INTO `base_sys_role_menu` VALUES (63, '2021-02-26 12:01:06.809104', '2021-02-26 12:01:06.809104', 9, 97);
+INSERT INTO `base_sys_role_menu` VALUES (64, '2021-02-26 12:01:06.907088', '2021-02-26 12:01:06.907088', 9, 59);
+INSERT INTO `base_sys_role_menu` VALUES (65, '2021-02-26 12:01:07.009988', '2021-02-26 12:01:07.009988', 9, 60);
+INSERT INTO `base_sys_role_menu` VALUES (66, '2021-02-26 12:01:07.122372', '2021-02-26 12:01:07.122372', 9, 61);
+INSERT INTO `base_sys_role_menu` VALUES (67, '2021-02-26 12:01:07.223694', '2021-02-26 12:01:07.223694', 9, 62);
+INSERT INTO `base_sys_role_menu` VALUES (68, '2021-02-26 12:01:07.325022', '2021-02-26 12:01:07.325022', 9, 63);
+INSERT INTO `base_sys_role_menu` VALUES (69, '2021-02-26 12:01:07.425209', '2021-02-26 12:01:07.425209', 9, 65);
+INSERT INTO `base_sys_role_menu` VALUES (70, '2021-02-26 12:01:07.522081', '2021-02-26 12:01:07.522081', 9, 98);
+INSERT INTO `base_sys_role_menu` VALUES (71, '2021-02-26 12:01:07.622775', '2021-02-26 12:01:07.622775', 9, 99);
+INSERT INTO `base_sys_role_menu` VALUES (72, '2021-02-26 12:01:07.721181', '2021-02-26 12:01:07.721181', 9, 100);
+INSERT INTO `base_sys_role_menu` VALUES (73, '2021-02-26 12:01:07.819589', '2021-02-26 12:01:07.819589', 9, 101);
+INSERT INTO `base_sys_role_menu` VALUES (74, '2021-02-26 12:01:07.920497', '2021-02-26 12:01:07.920497', 9, 8);
+INSERT INTO `base_sys_role_menu` VALUES (75, '2021-02-26 12:01:08.018875', '2021-02-26 12:01:08.018875', 9, 10);
+INSERT INTO `base_sys_role_menu` VALUES (76, '2021-02-26 12:01:08.135192', '2021-02-26 12:01:08.135192', 9, 11);
+INSERT INTO `base_sys_role_menu` VALUES (77, '2021-02-26 12:01:08.246405', '2021-02-26 12:01:08.246405', 9, 12);
+INSERT INTO `base_sys_role_menu` VALUES (78, '2021-02-26 12:01:08.346661', '2021-02-26 12:01:08.346661', 9, 13);
+INSERT INTO `base_sys_role_menu` VALUES (79, '2021-02-26 12:01:08.448436', '2021-02-26 12:01:08.448436', 9, 22);
+INSERT INTO `base_sys_role_menu` VALUES (80, '2021-02-26 12:01:08.547496', '2021-02-26 12:01:08.547496', 9, 23);
+INSERT INTO `base_sys_role_menu` VALUES (81, '2021-02-26 12:01:08.648457', '2021-02-26 12:01:08.648457', 9, 24);
+INSERT INTO `base_sys_role_menu` VALUES (82, '2021-02-26 12:01:08.750564', '2021-02-26 12:01:08.750564', 9, 25);
+INSERT INTO `base_sys_role_menu` VALUES (83, '2021-02-26 12:01:08.851783', '2021-02-26 12:01:08.851783', 9, 26);
+INSERT INTO `base_sys_role_menu` VALUES (84, '2021-02-26 12:01:08.950898', '2021-02-26 12:01:08.950898', 9, 69);
+INSERT INTO `base_sys_role_menu` VALUES (85, '2021-02-26 12:01:09.061982', '2021-02-26 12:01:09.061982', 9, 70);
+INSERT INTO `base_sys_role_menu` VALUES (86, '2021-02-26 12:01:09.165258', '2021-02-26 12:01:09.165258', 9, 71);
+INSERT INTO `base_sys_role_menu` VALUES (87, '2021-02-26 12:01:09.266177', '2021-02-26 12:01:09.266177', 9, 72);
+INSERT INTO `base_sys_role_menu` VALUES (88, '2021-02-26 12:01:09.366427', '2021-02-26 12:01:09.366427', 9, 73);
+INSERT INTO `base_sys_role_menu` VALUES (89, '2021-02-26 12:01:09.467877', '2021-02-26 12:01:09.467877', 9, 74);
+INSERT INTO `base_sys_role_menu` VALUES (90, '2021-02-26 12:01:09.568526', '2021-02-26 12:01:09.568526', 9, 75);
+INSERT INTO `base_sys_role_menu` VALUES (91, '2021-02-26 12:01:09.668052', '2021-02-26 12:01:09.668052', 9, 76);
+INSERT INTO `base_sys_role_menu` VALUES (92, '2021-02-26 12:01:09.766367', '2021-02-26 12:01:09.766367', 9, 77);
+INSERT INTO `base_sys_role_menu` VALUES (93, '2021-02-26 12:01:09.866170', '2021-02-26 12:01:09.866170', 9, 78);
+INSERT INTO `base_sys_role_menu` VALUES (94, '2021-02-26 12:01:09.963037', '2021-02-26 12:01:09.963037', 9, 79);
+INSERT INTO `base_sys_role_menu` VALUES (95, '2021-02-26 12:01:10.082046', '2021-02-26 12:01:10.082046', 9, 80);
+INSERT INTO `base_sys_role_menu` VALUES (96, '2021-02-26 12:01:10.185024', '2021-02-26 12:01:10.185024', 9, 81);
+INSERT INTO `base_sys_role_menu` VALUES (97, '2021-02-26 12:01:10.283787', '2021-02-26 12:01:10.283787', 9, 82);
+INSERT INTO `base_sys_role_menu` VALUES (98, '2021-02-26 12:01:10.382883', '2021-02-26 12:01:10.382883', 9, 83);
+INSERT INTO `base_sys_role_menu` VALUES (99, '2021-02-26 12:01:10.481150', '2021-02-26 12:01:10.481150', 9, 105);
+INSERT INTO `base_sys_role_menu` VALUES (100, '2021-02-26 12:01:10.579579', '2021-02-26 12:01:10.579579', 9, 102);
+INSERT INTO `base_sys_role_menu` VALUES (101, '2021-02-26 12:01:10.679489', '2021-02-26 12:01:10.679489', 9, 103);
+INSERT INTO `base_sys_role_menu` VALUES (102, '2021-02-26 12:01:10.777496', '2021-02-26 12:01:10.777496', 9, 29);
+INSERT INTO `base_sys_role_menu` VALUES (103, '2021-02-26 12:01:10.878292', '2021-02-26 12:01:10.878292', 9, 30);
+INSERT INTO `base_sys_role_menu` VALUES (104, '2021-02-26 12:01:10.977354', '2021-02-26 12:01:10.977354', 9, 47);
+INSERT INTO `base_sys_role_menu` VALUES (105, '2021-02-26 12:01:11.097786', '2021-02-26 12:01:11.097786', 9, 48);
+INSERT INTO `base_sys_role_menu` VALUES (106, '2021-02-26 12:01:11.201390', '2021-02-26 12:01:11.201390', 9, 84);
+INSERT INTO `base_sys_role_menu` VALUES (107, '2021-02-26 12:01:11.302120', '2021-02-26 12:01:11.302120', 9, 90);
+INSERT INTO `base_sys_role_menu` VALUES (108, '2021-02-26 12:01:11.402751', '2021-02-26 12:01:11.402751', 9, 85);
+INSERT INTO `base_sys_role_menu` VALUES (161, '2021-02-26 14:16:49.162546', '2021-02-26 14:16:49.162546', 11, 1);
+INSERT INTO `base_sys_role_menu` VALUES (162, '2021-02-26 14:16:49.257677', '2021-02-26 14:16:49.257677', 11, 96);
+INSERT INTO `base_sys_role_menu` VALUES (163, '2021-02-26 14:16:49.356225', '2021-02-26 14:16:49.356225', 11, 45);
+INSERT INTO `base_sys_role_menu` VALUES (164, '2021-02-26 14:16:49.450708', '2021-02-26 14:16:49.450708', 11, 43);
+INSERT INTO `base_sys_role_menu` VALUES (165, '2021-02-26 14:16:49.543794', '2021-02-26 14:16:49.543794', 11, 49);
+INSERT INTO `base_sys_role_menu` VALUES (166, '2021-02-26 14:16:49.636496', '2021-02-26 14:16:49.636496', 11, 86);
+INSERT INTO `base_sys_role_menu` VALUES (167, '2021-02-26 14:16:49.728634', '2021-02-26 14:16:49.728634', 11, 47);
+INSERT INTO `base_sys_role_menu` VALUES (168, '2021-02-26 14:16:49.824754', '2021-02-26 14:16:49.824754', 11, 48);
+INSERT INTO `base_sys_role_menu` VALUES (169, '2021-02-26 14:16:49.919329', '2021-02-26 14:16:49.919329', 11, 85);
+INSERT INTO `base_sys_role_menu` VALUES (170, '2021-02-26 14:16:50.015239', '2021-02-26 14:16:50.015239', 11, 84);
+INSERT INTO `base_sys_role_menu` VALUES (290, '2021-02-26 14:32:35.143867', '2021-02-26 14:32:35.143867', 12, 1);
+INSERT INTO `base_sys_role_menu` VALUES (291, '2021-02-26 14:32:35.239965', '2021-02-26 14:32:35.239965', 12, 96);
+INSERT INTO `base_sys_role_menu` VALUES (292, '2021-02-26 14:32:35.336398', '2021-02-26 14:32:35.336398', 12, 45);
+INSERT INTO `base_sys_role_menu` VALUES (293, '2021-02-26 14:32:35.435180', '2021-02-26 14:32:35.435180', 12, 43);
+INSERT INTO `base_sys_role_menu` VALUES (294, '2021-02-26 14:32:35.528631', '2021-02-26 14:32:35.528631', 12, 49);
+INSERT INTO `base_sys_role_menu` VALUES (295, '2021-02-26 14:32:35.623123', '2021-02-26 14:32:35.623123', 12, 86);
+INSERT INTO `base_sys_role_menu` VALUES (296, '2021-02-26 14:32:35.718831', '2021-02-26 14:32:35.718831', 12, 2);
+INSERT INTO `base_sys_role_menu` VALUES (297, '2021-02-26 14:32:35.812975', '2021-02-26 14:32:35.812975', 12, 27);
+INSERT INTO `base_sys_role_menu` VALUES (298, '2021-02-26 14:32:35.904487', '2021-02-26 14:32:35.904487', 12, 97);
+INSERT INTO `base_sys_role_menu` VALUES (299, '2021-02-26 14:32:35.998773', '2021-02-26 14:32:35.998773', 12, 59);
+INSERT INTO `base_sys_role_menu` VALUES (300, '2021-02-26 14:32:36.107749', '2021-02-26 14:32:36.107749', 12, 60);
+INSERT INTO `base_sys_role_menu` VALUES (301, '2021-02-26 14:32:36.213069', '2021-02-26 14:32:36.213069', 12, 61);
+INSERT INTO `base_sys_role_menu` VALUES (302, '2021-02-26 14:32:36.308985', '2021-02-26 14:32:36.308985', 12, 62);
+INSERT INTO `base_sys_role_menu` VALUES (303, '2021-02-26 14:32:36.404237', '2021-02-26 14:32:36.404237', 12, 63);
+INSERT INTO `base_sys_role_menu` VALUES (304, '2021-02-26 14:32:36.499569', '2021-02-26 14:32:36.499569', 12, 65);
+INSERT INTO `base_sys_role_menu` VALUES (305, '2021-02-26 14:32:36.593710', '2021-02-26 14:32:36.593710', 12, 98);
+INSERT INTO `base_sys_role_menu` VALUES (306, '2021-02-26 14:32:36.685988', '2021-02-26 14:32:36.685988', 12, 99);
+INSERT INTO `base_sys_role_menu` VALUES (307, '2021-02-26 14:32:36.778733', '2021-02-26 14:32:36.778733', 12, 100);
+INSERT INTO `base_sys_role_menu` VALUES (308, '2021-02-26 14:32:36.874715', '2021-02-26 14:32:36.874715', 12, 101);
+INSERT INTO `base_sys_role_menu` VALUES (309, '2021-02-26 14:32:36.973153', '2021-02-26 14:32:36.973153', 12, 8);
+INSERT INTO `base_sys_role_menu` VALUES (310, '2021-02-26 14:32:37.082734', '2021-02-26 14:32:37.082734', 12, 10);
+INSERT INTO `base_sys_role_menu` VALUES (311, '2021-02-26 14:32:37.176859', '2021-02-26 14:32:37.176859', 12, 11);
+INSERT INTO `base_sys_role_menu` VALUES (312, '2021-02-26 14:32:37.271440', '2021-02-26 14:32:37.271440', 12, 12);
+INSERT INTO `base_sys_role_menu` VALUES (313, '2021-02-26 14:32:37.365206', '2021-02-26 14:32:37.365206', 12, 13);
+INSERT INTO `base_sys_role_menu` VALUES (314, '2021-02-26 14:32:37.457092', '2021-02-26 14:32:37.457092', 12, 22);
+INSERT INTO `base_sys_role_menu` VALUES (315, '2021-02-26 14:32:37.549860', '2021-02-26 14:32:37.549860', 12, 23);
+INSERT INTO `base_sys_role_menu` VALUES (316, '2021-02-26 14:32:37.645684', '2021-02-26 14:32:37.645684', 12, 24);
+INSERT INTO `base_sys_role_menu` VALUES (317, '2021-02-26 14:32:37.743370', '2021-02-26 14:32:37.743370', 12, 25);
+INSERT INTO `base_sys_role_menu` VALUES (318, '2021-02-26 14:32:37.837218', '2021-02-26 14:32:37.837218', 12, 26);
+INSERT INTO `base_sys_role_menu` VALUES (319, '2021-02-26 14:32:37.930953', '2021-02-26 14:32:37.930953', 12, 69);
+INSERT INTO `base_sys_role_menu` VALUES (320, '2021-02-26 14:32:38.031191', '2021-02-26 14:32:38.031191', 12, 70);
+INSERT INTO `base_sys_role_menu` VALUES (321, '2021-02-26 14:32:38.130839', '2021-02-26 14:32:38.130839', 12, 71);
+INSERT INTO `base_sys_role_menu` VALUES (322, '2021-02-26 14:32:38.229359', '2021-02-26 14:32:38.229359', 12, 72);
+INSERT INTO `base_sys_role_menu` VALUES (323, '2021-02-26 14:32:38.323868', '2021-02-26 14:32:38.323868', 12, 73);
+INSERT INTO `base_sys_role_menu` VALUES (324, '2021-02-26 14:32:38.415194', '2021-02-26 14:32:38.415194', 12, 74);
+INSERT INTO `base_sys_role_menu` VALUES (325, '2021-02-26 14:32:38.505597', '2021-02-26 14:32:38.505597', 12, 75);
+INSERT INTO `base_sys_role_menu` VALUES (326, '2021-02-26 14:32:38.600426', '2021-02-26 14:32:38.600426', 12, 76);
+INSERT INTO `base_sys_role_menu` VALUES (327, '2021-02-26 14:32:38.698676', '2021-02-26 14:32:38.698676', 12, 77);
+INSERT INTO `base_sys_role_menu` VALUES (328, '2021-02-26 14:32:38.793832', '2021-02-26 14:32:38.793832', 12, 78);
+INSERT INTO `base_sys_role_menu` VALUES (329, '2021-02-26 14:32:38.889203', '2021-02-26 14:32:38.889203', 12, 79);
+INSERT INTO `base_sys_role_menu` VALUES (330, '2021-02-26 14:32:38.985851', '2021-02-26 14:32:38.985851', 12, 80);
+INSERT INTO `base_sys_role_menu` VALUES (331, '2021-02-26 14:32:39.092110', '2021-02-26 14:32:39.092110', 12, 81);
+INSERT INTO `base_sys_role_menu` VALUES (332, '2021-02-26 14:32:39.188945', '2021-02-26 14:32:39.188945', 12, 82);
+INSERT INTO `base_sys_role_menu` VALUES (333, '2021-02-26 14:32:39.280043', '2021-02-26 14:32:39.280043', 12, 83);
+INSERT INTO `base_sys_role_menu` VALUES (334, '2021-02-26 14:32:39.374899', '2021-02-26 14:32:39.374899', 12, 105);
+INSERT INTO `base_sys_role_menu` VALUES (335, '2021-02-26 14:32:39.473563', '2021-02-26 14:32:39.473563', 12, 102);
+INSERT INTO `base_sys_role_menu` VALUES (336, '2021-02-26 14:32:39.570921', '2021-02-26 14:32:39.570921', 12, 103);
+INSERT INTO `base_sys_role_menu` VALUES (337, '2021-02-26 14:32:39.665052', '2021-02-26 14:32:39.665052', 12, 29);
+INSERT INTO `base_sys_role_menu` VALUES (338, '2021-02-26 14:32:39.760189', '2021-02-26 14:32:39.760189', 12, 30);
+INSERT INTO `base_sys_role_menu` VALUES (339, '2021-02-26 14:32:39.852856', '2021-02-26 14:32:39.852856', 12, 47);
+INSERT INTO `base_sys_role_menu` VALUES (340, '2021-02-26 14:32:39.944180', '2021-02-26 14:32:39.944180', 12, 48);
+INSERT INTO `base_sys_role_menu` VALUES (341, '2021-02-26 14:32:40.038086', '2021-02-26 14:32:40.038086', 12, 84);
+INSERT INTO `base_sys_role_menu` VALUES (342, '2021-02-26 14:32:40.135874', '2021-02-26 14:32:40.135874', 12, 90);
+INSERT INTO `base_sys_role_menu` VALUES (343, '2021-02-26 14:32:40.234015', '2021-02-26 14:32:40.234015', 12, 85);
+INSERT INTO `base_sys_role_menu` VALUES (355, '2021-02-26 14:32:54.538822', '2021-02-26 14:32:54.538822', 10, 1);
+INSERT INTO `base_sys_role_menu` VALUES (356, '2021-02-26 14:32:54.634784', '2021-02-26 14:32:54.634784', 10, 96);
+INSERT INTO `base_sys_role_menu` VALUES (357, '2021-02-26 14:32:54.732878', '2021-02-26 14:32:54.732878', 10, 45);
+INSERT INTO `base_sys_role_menu` VALUES (358, '2021-02-26 14:32:54.826023', '2021-02-26 14:32:54.826023', 10, 43);
+INSERT INTO `base_sys_role_menu` VALUES (359, '2021-02-26 14:32:54.920173', '2021-02-26 14:32:54.920173', 10, 49);
+INSERT INTO `base_sys_role_menu` VALUES (360, '2021-02-26 14:32:55.019141', '2021-02-26 14:32:55.019141', 10, 86);
+INSERT INTO `base_sys_role_menu` VALUES (361, '2021-02-26 14:32:55.119438', '2021-02-26 14:32:55.119438', 10, 2);
+INSERT INTO `base_sys_role_menu` VALUES (362, '2021-02-26 14:32:55.211471', '2021-02-26 14:32:55.211471', 10, 27);
+INSERT INTO `base_sys_role_menu` VALUES (363, '2021-02-26 14:32:55.304855', '2021-02-26 14:32:55.304855', 10, 97);
+INSERT INTO `base_sys_role_menu` VALUES (364, '2021-02-26 14:32:55.397939', '2021-02-26 14:32:55.397939', 10, 59);
+INSERT INTO `base_sys_role_menu` VALUES (365, '2021-02-26 14:32:55.491674', '2021-02-26 14:32:55.491674', 10, 60);
+INSERT INTO `base_sys_role_menu` VALUES (366, '2021-02-26 14:32:55.584051', '2021-02-26 14:32:55.584051', 10, 61);
+INSERT INTO `base_sys_role_menu` VALUES (367, '2021-02-26 14:32:55.676449', '2021-02-26 14:32:55.676449', 10, 62);
+INSERT INTO `base_sys_role_menu` VALUES (368, '2021-02-26 14:32:55.774524', '2021-02-26 14:32:55.774524', 10, 63);
+INSERT INTO `base_sys_role_menu` VALUES (369, '2021-02-26 14:32:55.871634', '2021-02-26 14:32:55.871634', 10, 65);
+INSERT INTO `base_sys_role_menu` VALUES (370, '2021-02-26 14:32:55.964611', '2021-02-26 14:32:55.964611', 10, 98);
+INSERT INTO `base_sys_role_menu` VALUES (371, '2021-02-26 14:32:56.074043', '2021-02-26 14:32:56.074043', 10, 99);
+INSERT INTO `base_sys_role_menu` VALUES (372, '2021-02-26 14:32:56.169316', '2021-02-26 14:32:56.169316', 10, 100);
+INSERT INTO `base_sys_role_menu` VALUES (373, '2021-02-26 14:32:56.263408', '2021-02-26 14:32:56.263408', 10, 101);
+INSERT INTO `base_sys_role_menu` VALUES (374, '2021-02-26 14:32:56.356537', '2021-02-26 14:32:56.356537', 10, 8);
+INSERT INTO `base_sys_role_menu` VALUES (375, '2021-02-26 14:32:56.448195', '2021-02-26 14:32:56.448195', 10, 10);
+INSERT INTO `base_sys_role_menu` VALUES (376, '2021-02-26 14:32:56.544394', '2021-02-26 14:32:56.544394', 10, 11);
+INSERT INTO `base_sys_role_menu` VALUES (377, '2021-02-26 14:32:56.641515', '2021-02-26 14:32:56.641515', 10, 12);
+INSERT INTO `base_sys_role_menu` VALUES (378, '2021-02-26 14:32:56.735242', '2021-02-26 14:32:56.735242', 10, 13);
+INSERT INTO `base_sys_role_menu` VALUES (379, '2021-02-26 14:32:56.828811', '2021-02-26 14:32:56.828811', 10, 22);
+INSERT INTO `base_sys_role_menu` VALUES (380, '2021-02-26 14:32:56.922664', '2021-02-26 14:32:56.922664', 10, 23);
+INSERT INTO `base_sys_role_menu` VALUES (381, '2021-02-26 14:32:57.016873', '2021-02-26 14:32:57.016873', 10, 24);
+INSERT INTO `base_sys_role_menu` VALUES (382, '2021-02-26 14:32:57.123800', '2021-02-26 14:32:57.123800', 10, 25);
+INSERT INTO `base_sys_role_menu` VALUES (383, '2021-02-26 14:32:57.223306', '2021-02-26 14:32:57.223306', 10, 26);
+INSERT INTO `base_sys_role_menu` VALUES (384, '2021-02-26 14:32:57.328482', '2021-02-26 14:32:57.328482', 10, 69);
+INSERT INTO `base_sys_role_menu` VALUES (385, '2021-02-26 14:32:57.430006', '2021-02-26 14:32:57.430006', 10, 70);
+INSERT INTO `base_sys_role_menu` VALUES (386, '2021-02-26 14:32:57.521664', '2021-02-26 14:32:57.521664', 10, 71);
+INSERT INTO `base_sys_role_menu` VALUES (387, '2021-02-26 14:32:57.612399', '2021-02-26 14:32:57.612399', 10, 72);
+INSERT INTO `base_sys_role_menu` VALUES (388, '2021-02-26 14:32:57.705553', '2021-02-26 14:32:57.705553', 10, 73);
+INSERT INTO `base_sys_role_menu` VALUES (389, '2021-02-26 14:32:57.799288', '2021-02-26 14:32:57.799288', 10, 74);
+INSERT INTO `base_sys_role_menu` VALUES (390, '2021-02-26 14:32:57.893894', '2021-02-26 14:32:57.893894', 10, 75);
+INSERT INTO `base_sys_role_menu` VALUES (391, '2021-02-26 14:32:57.988856', '2021-02-26 14:32:57.988856', 10, 76);
+INSERT INTO `base_sys_role_menu` VALUES (392, '2021-02-26 14:32:58.090250', '2021-02-26 14:32:58.090250', 10, 77);
+INSERT INTO `base_sys_role_menu` VALUES (393, '2021-02-26 14:32:58.196616', '2021-02-26 14:32:58.196616', 10, 78);
+INSERT INTO `base_sys_role_menu` VALUES (394, '2021-02-26 14:32:58.288151', '2021-02-26 14:32:58.288151', 10, 79);
+INSERT INTO `base_sys_role_menu` VALUES (395, '2021-02-26 14:32:58.378493', '2021-02-26 14:32:58.378493', 10, 80);
+INSERT INTO `base_sys_role_menu` VALUES (396, '2021-02-26 14:32:58.471283', '2021-02-26 14:32:58.471283', 10, 81);
+INSERT INTO `base_sys_role_menu` VALUES (397, '2021-02-26 14:32:58.564666', '2021-02-26 14:32:58.564666', 10, 82);
+INSERT INTO `base_sys_role_menu` VALUES (398, '2021-02-26 14:32:58.658511', '2021-02-26 14:32:58.658511', 10, 83);
+INSERT INTO `base_sys_role_menu` VALUES (399, '2021-02-26 14:32:58.752713', '2021-02-26 14:32:58.752713', 10, 105);
+INSERT INTO `base_sys_role_menu` VALUES (400, '2021-02-26 14:32:58.849472', '2021-02-26 14:32:58.849472', 10, 102);
+INSERT INTO `base_sys_role_menu` VALUES (401, '2021-02-26 14:32:58.948387', '2021-02-26 14:32:58.948387', 10, 103);
+INSERT INTO `base_sys_role_menu` VALUES (402, '2021-02-26 14:32:59.042410', '2021-02-26 14:32:59.042410', 10, 29);
+INSERT INTO `base_sys_role_menu` VALUES (403, '2021-02-26 14:32:59.132594', '2021-02-26 14:32:59.132594', 10, 30);
+INSERT INTO `base_sys_role_menu` VALUES (404, '2021-02-26 14:32:59.226150', '2021-02-26 14:32:59.226150', 10, 47);
+INSERT INTO `base_sys_role_menu` VALUES (405, '2021-02-26 14:32:59.319494', '2021-02-26 14:32:59.319494', 10, 48);
+INSERT INTO `base_sys_role_menu` VALUES (406, '2021-02-26 14:32:59.413370', '2021-02-26 14:32:59.413370', 10, 84);
+INSERT INTO `base_sys_role_menu` VALUES (407, '2021-02-26 14:32:59.507584', '2021-02-26 14:32:59.507584', 10, 90);
+INSERT INTO `base_sys_role_menu` VALUES (408, '2021-02-26 14:32:59.604332', '2021-02-26 14:32:59.604332', 10, 85);
+INSERT INTO `base_sys_role_menu` VALUES (463, '2021-02-26 14:33:49.310315', '2021-02-26 14:33:49.310315', 13, 1);
+INSERT INTO `base_sys_role_menu` VALUES (464, '2021-02-26 14:33:49.403445', '2021-02-26 14:33:49.403445', 13, 96);
+INSERT INTO `base_sys_role_menu` VALUES (465, '2021-02-26 14:33:49.496802', '2021-02-26 14:33:49.496802', 13, 45);
+INSERT INTO `base_sys_role_menu` VALUES (466, '2021-02-26 14:33:49.595210', '2021-02-26 14:33:49.595210', 13, 43);
+INSERT INTO `base_sys_role_menu` VALUES (467, '2021-02-26 14:33:49.688024', '2021-02-26 14:33:49.688024', 13, 49);
+INSERT INTO `base_sys_role_menu` VALUES (468, '2021-02-26 14:33:49.781292', '2021-02-26 14:33:49.781292', 13, 86);
+INSERT INTO `base_sys_role_menu` VALUES (469, '2021-02-26 14:33:49.874061', '2021-02-26 14:33:49.874061', 13, 2);
+INSERT INTO `base_sys_role_menu` VALUES (470, '2021-02-26 14:33:49.965534', '2021-02-26 14:33:49.965534', 13, 27);
+INSERT INTO `base_sys_role_menu` VALUES (471, '2021-02-26 14:33:50.072373', '2021-02-26 14:33:50.072373', 13, 97);
+INSERT INTO `base_sys_role_menu` VALUES (472, '2021-02-26 14:33:50.176473', '2021-02-26 14:33:50.176473', 13, 59);
+INSERT INTO `base_sys_role_menu` VALUES (473, '2021-02-26 14:33:50.272264', '2021-02-26 14:33:50.272264', 13, 60);
+INSERT INTO `base_sys_role_menu` VALUES (474, '2021-02-26 14:33:50.370328', '2021-02-26 14:33:50.370328', 13, 61);
+INSERT INTO `base_sys_role_menu` VALUES (475, '2021-02-26 14:33:50.463159', '2021-02-26 14:33:50.463159', 13, 62);
+INSERT INTO `base_sys_role_menu` VALUES (476, '2021-02-26 14:33:50.557911', '2021-02-26 14:33:50.557911', 13, 63);
+INSERT INTO `base_sys_role_menu` VALUES (477, '2021-02-26 14:33:50.650669', '2021-02-26 14:33:50.650669', 13, 65);
+INSERT INTO `base_sys_role_menu` VALUES (478, '2021-02-26 14:33:50.742871', '2021-02-26 14:33:50.742871', 13, 98);
+INSERT INTO `base_sys_role_menu` VALUES (479, '2021-02-26 14:33:50.838052', '2021-02-26 14:33:50.838052', 13, 99);
+INSERT INTO `base_sys_role_menu` VALUES (480, '2021-02-26 14:33:50.932201', '2021-02-26 14:33:50.932201', 13, 100);
+INSERT INTO `base_sys_role_menu` VALUES (481, '2021-02-26 14:33:51.030973', '2021-02-26 14:33:51.030973', 13, 101);
+INSERT INTO `base_sys_role_menu` VALUES (482, '2021-02-26 14:33:51.168873', '2021-02-26 14:33:51.168873', 13, 8);
+INSERT INTO `base_sys_role_menu` VALUES (483, '2021-02-26 14:33:51.265779', '2021-02-26 14:33:51.265779', 13, 10);
+INSERT INTO `base_sys_role_menu` VALUES (484, '2021-02-26 14:33:51.379934', '2021-02-26 14:33:51.379934', 13, 11);
+INSERT INTO `base_sys_role_menu` VALUES (485, '2021-02-26 14:33:51.473016', '2021-02-26 14:33:51.473016', 13, 12);
+INSERT INTO `base_sys_role_menu` VALUES (486, '2021-02-26 14:33:51.568753', '2021-02-26 14:33:51.568753', 13, 13);
+INSERT INTO `base_sys_role_menu` VALUES (487, '2021-02-26 14:33:51.667262', '2021-02-26 14:33:51.667262', 13, 22);
+INSERT INTO `base_sys_role_menu` VALUES (488, '2021-02-26 14:33:51.761865', '2021-02-26 14:33:51.761865', 13, 23);
+INSERT INTO `base_sys_role_menu` VALUES (489, '2021-02-26 14:33:51.857295', '2021-02-26 14:33:51.857295', 13, 24);
+INSERT INTO `base_sys_role_menu` VALUES (490, '2021-02-26 14:33:51.951231', '2021-02-26 14:33:51.951231', 13, 25);
+INSERT INTO `base_sys_role_menu` VALUES (491, '2021-02-26 14:33:52.047431', '2021-02-26 14:33:52.047431', 13, 26);
+INSERT INTO `base_sys_role_menu` VALUES (492, '2021-02-26 14:33:52.141210', '2021-02-26 14:33:52.141210', 13, 69);
+INSERT INTO `base_sys_role_menu` VALUES (493, '2021-02-26 14:33:52.236892', '2021-02-26 14:33:52.236892', 13, 70);
+INSERT INTO `base_sys_role_menu` VALUES (494, '2021-02-26 14:33:52.332986', '2021-02-26 14:33:52.332986', 13, 71);
+INSERT INTO `base_sys_role_menu` VALUES (495, '2021-02-26 14:33:52.432629', '2021-02-26 14:33:52.432629', 13, 72);
+INSERT INTO `base_sys_role_menu` VALUES (496, '2021-02-26 14:33:52.529105', '2021-02-26 14:33:52.529105', 13, 73);
+INSERT INTO `base_sys_role_menu` VALUES (497, '2021-02-26 14:33:52.625291', '2021-02-26 14:33:52.625291', 13, 74);
+INSERT INTO `base_sys_role_menu` VALUES (498, '2021-02-26 14:33:52.721109', '2021-02-26 14:33:52.721109', 13, 75);
+INSERT INTO `base_sys_role_menu` VALUES (499, '2021-02-26 14:33:52.813753', '2021-02-26 14:33:52.813753', 13, 76);
+INSERT INTO `base_sys_role_menu` VALUES (500, '2021-02-26 14:33:52.905436', '2021-02-26 14:33:52.905436', 13, 77);
+INSERT INTO `base_sys_role_menu` VALUES (501, '2021-02-26 14:33:52.998499', '2021-02-26 14:33:52.998499', 13, 78);
+INSERT INTO `base_sys_role_menu` VALUES (502, '2021-02-26 14:33:53.100975', '2021-02-26 14:33:53.100975', 13, 79);
+INSERT INTO `base_sys_role_menu` VALUES (503, '2021-02-26 14:33:53.199493', '2021-02-26 14:33:53.199493', 13, 80);
+INSERT INTO `base_sys_role_menu` VALUES (504, '2021-02-26 14:33:53.294088', '2021-02-26 14:33:53.294088', 13, 81);
+INSERT INTO `base_sys_role_menu` VALUES (505, '2021-02-26 14:33:53.391390', '2021-02-26 14:33:53.391390', 13, 82);
+INSERT INTO `base_sys_role_menu` VALUES (506, '2021-02-26 14:33:53.486104', '2021-02-26 14:33:53.486104', 13, 83);
+INSERT INTO `base_sys_role_menu` VALUES (507, '2021-02-26 14:33:53.578385', '2021-02-26 14:33:53.578385', 13, 105);
+INSERT INTO `base_sys_role_menu` VALUES (508, '2021-02-26 14:33:53.670073', '2021-02-26 14:33:53.670073', 13, 102);
+INSERT INTO `base_sys_role_menu` VALUES (509, '2021-02-26 14:33:53.763868', '2021-02-26 14:33:53.763868', 13, 103);
+INSERT INTO `base_sys_role_menu` VALUES (510, '2021-02-26 14:33:53.860706', '2021-02-26 14:33:53.860706', 13, 29);
+INSERT INTO `base_sys_role_menu` VALUES (511, '2021-02-26 14:33:53.959262', '2021-02-26 14:33:53.959262', 13, 30);
+INSERT INTO `base_sys_role_menu` VALUES (512, '2021-02-26 14:33:54.064932', '2021-02-26 14:33:54.064932', 13, 47);
+INSERT INTO `base_sys_role_menu` VALUES (513, '2021-02-26 14:33:54.168918', '2021-02-26 14:33:54.168918', 13, 48);
+INSERT INTO `base_sys_role_menu` VALUES (514, '2021-02-26 14:33:54.273982', '2021-02-26 14:33:54.273982', 13, 84);
+INSERT INTO `base_sys_role_menu` VALUES (515, '2021-02-26 14:33:54.366992', '2021-02-26 14:33:54.366992', 13, 90);
+INSERT INTO `base_sys_role_menu` VALUES (516, '2021-02-26 14:33:54.458682', '2021-02-26 14:33:54.458682', 13, 85);
+COMMIT;
+
+-- ----------------------------
+-- Table structure for base_sys_user
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_user`;
+CREATE TABLE `base_sys_user` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `departmentId` bigint DEFAULT NULL COMMENT '部门ID',
+  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
+  `username` varchar(100) NOT NULL COMMENT '用户名',
+  `password` varchar(255) NOT NULL COMMENT '密码',
+  `passwordV` int NOT NULL DEFAULT '1' COMMENT '密码版本, 作用是改完密码,让原来的token失效',
+  `nickName` varchar(255) DEFAULT NULL COMMENT '昵称',
+  `headImg` varchar(255) DEFAULT NULL COMMENT '头像',
+  `phone` varchar(20) DEFAULT NULL COMMENT '手机',
+  `email` varchar(255) DEFAULT NULL COMMENT '邮箱',
+  `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态 0:禁用 1:启用',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  `socketId` varchar(255) DEFAULT NULL COMMENT 'socketId',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `IDX_469ad55973f5b98930f6ad627b` (`username`),
+  KEY `IDX_0cf944da378d70a94f5fefd803` (`departmentId`),
+  KEY `IDX_9ec6d7ac6337eafb070e4881a8` (`phone`),
+  KEY `IDX_ca8611d15a63d52aa4e292e46a` (`createTime`),
+  KEY `IDX_a0f2f19cee18445998ece93ddd` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_sys_user
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_sys_user` VALUES (1, '2021-02-24 21:16:41.525157', '2021-02-27 18:21:16.000000', 1, '超级管理员', 'admin', 'e10adc3949ba59abbe56e057f20f883e', 3, '管理员', 'https://cool-admin-pro.oss-cn-shanghai.aliyuncs.com/app/c8128c24-d0e9-4e07-9c0d-6f65446e105b.png', '18000000000', 'team@cool-js.com', 1, '拥有最高权限的用户', NULL);
+INSERT INTO `base_sys_user` VALUES (24, '2021-02-26 14:17:38.000000', '2021-02-26 14:17:38.000000', 11, '小白', 'xiaobai', 'e10adc3949ba59abbe56e057f20f883e', 1, '小白', NULL, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `base_sys_user` VALUES (25, '2021-02-26 14:28:25.000000', '2021-02-26 14:28:25.000000', 12, '小黑', 'xiaohei', 'e10adc3949ba59abbe56e057f20f883e', 1, '小黑', NULL, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `base_sys_user` VALUES (26, '2021-02-26 14:28:49.000000', '2021-02-26 14:28:49.000000', 12, '小绿', 'xiaolv', 'e10adc3949ba59abbe56e057f20f883e', 1, '小绿', NULL, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `base_sys_user` VALUES (27, '2021-02-26 14:29:23.000000', '2021-02-26 14:29:23.000000', 13, '小青', 'xiaoqin', 'e10adc3949ba59abbe56e057f20f883e', 1, '小青', NULL, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `base_sys_user` VALUES (28, '2021-02-26 14:29:52.000000', '2021-02-26 14:29:52.000000', 11, '神仙都没用', 'icssoa', 'e10adc3949ba59abbe56e057f20f883e', 1, '神仙都没用', 'https://cool-admin.cn.utools.club/uploads//20210226/0eeab9a0-77fc-11eb-b64f-674cd46b6601.jpg', NULL, NULL, 1, NULL, NULL);
+COMMIT;
+
+-- ----------------------------
+-- Table structure for base_sys_user_role
+-- ----------------------------
+DROP TABLE IF EXISTS `base_sys_user_role`;
+CREATE TABLE `base_sys_user_role` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `userId` bigint(20) NOT NULL COMMENT '用户ID',
+  `roleId` bigint(20) NOT NULL COMMENT '角色ID',
+  PRIMARY KEY (`id`),
+  KEY `IDX_fa9555e03e42fce748c9046b1c` (`createTime`),
+  KEY `IDX_3e36c0d2b1a4c659c6b4fc64b3` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of base_sys_user_role
+-- ----------------------------
+BEGIN;
+INSERT INTO `base_sys_user_role` VALUES (1, '2021-02-24 22:03:11.665805', '2021-02-24 22:03:11.665805', 1, 1);
+INSERT INTO `base_sys_user_role` VALUES (2, '2021-02-25 11:03:55.325988', '2021-02-25 11:03:55.325988', 2, 1);
+INSERT INTO `base_sys_user_role` VALUES (3, '2021-02-25 14:30:57.295150', '2021-02-25 14:30:57.295150', 3, 1);
+INSERT INTO `base_sys_user_role` VALUES (4, '2021-02-25 14:39:32.975014', '2021-02-25 14:39:32.975014', 4, 1);
+INSERT INTO `base_sys_user_role` VALUES (5, '2021-02-25 14:40:56.812948', '2021-02-25 14:40:56.812948', 5, 1);
+INSERT INTO `base_sys_user_role` VALUES (6, '2021-02-25 14:44:08.436555', '2021-02-25 14:44:08.436555', 6, 1);
+INSERT INTO `base_sys_user_role` VALUES (7, '2021-02-25 14:46:17.409232', '2021-02-25 14:46:17.409232', 7, 1);
+INSERT INTO `base_sys_user_role` VALUES (8, '2021-02-25 14:47:47.211749', '2021-02-25 14:47:47.211749', 8, 1);
+INSERT INTO `base_sys_user_role` VALUES (9, '2021-02-25 14:48:11.734024', '2021-02-25 14:48:11.734024', 9, 1);
+INSERT INTO `base_sys_user_role` VALUES (10, '2021-02-25 14:50:48.288616', '2021-02-25 14:50:48.288616', 10, 1);
+INSERT INTO `base_sys_user_role` VALUES (11, '2021-02-25 14:51:32.123884', '2021-02-25 14:51:32.123884', 11, 1);
+INSERT INTO `base_sys_user_role` VALUES (12, '2021-02-25 15:46:26.356943', '2021-02-25 15:46:26.356943', 12, 1);
+INSERT INTO `base_sys_user_role` VALUES (13, '2021-02-25 15:56:43.475155', '2021-02-25 15:56:43.475155', 13, 1);
+INSERT INTO `base_sys_user_role` VALUES (14, '2021-02-25 16:03:14.417784', '2021-02-25 16:03:14.417784', 14, 1);
+INSERT INTO `base_sys_user_role` VALUES (16, '2021-02-25 16:22:11.200152', '2021-02-25 16:22:11.200152', 16, 1);
+INSERT INTO `base_sys_user_role` VALUES (17, '2021-02-25 17:44:37.635550', '2021-02-25 17:44:37.635550', 15, 1);
+INSERT INTO `base_sys_user_role` VALUES (19, '2021-02-25 17:51:00.554812', '2021-02-25 17:51:00.554812', 18, 1);
+INSERT INTO `base_sys_user_role` VALUES (21, '2021-02-25 17:54:41.375113', '2021-02-25 17:54:41.375113', 17, 1);
+INSERT INTO `base_sys_user_role` VALUES (22, '2021-02-25 17:55:49.385301', '2021-02-25 17:55:49.385301', 20, 1);
+INSERT INTO `base_sys_user_role` VALUES (24, '2021-02-25 17:58:35.452363', '2021-02-25 17:58:35.452363', 22, 1);
+INSERT INTO `base_sys_user_role` VALUES (27, '2021-02-25 21:25:55.005236', '2021-02-25 21:25:55.005236', 19, 1);
+INSERT INTO `base_sys_user_role` VALUES (28, '2021-02-26 13:50:05.633242', '2021-02-26 13:50:05.633242', 21, 8);
+INSERT INTO `base_sys_user_role` VALUES (29, '2021-02-26 13:50:17.836990', '2021-02-26 13:50:17.836990', 23, 8);
+INSERT INTO `base_sys_user_role` VALUES (38, '2021-02-26 14:36:08.899046', '2021-02-26 14:36:08.899046', 26, 13);
+INSERT INTO `base_sys_user_role` VALUES (39, '2021-02-26 14:36:13.149510', '2021-02-26 14:36:13.149510', 25, 13);
+INSERT INTO `base_sys_user_role` VALUES (40, '2021-02-26 14:36:20.737073', '2021-02-26 14:36:20.737073', 27, 11);
+INSERT INTO `base_sys_user_role` VALUES (42, '2021-02-26 14:36:53.481478', '2021-02-26 14:36:53.481478', 24, 12);
+INSERT INTO `base_sys_user_role` VALUES (43, '2021-02-26 14:36:58.477817', '2021-02-26 14:36:58.477817', 28, 12);
+INSERT INTO `base_sys_user_role` VALUES (44, '2021-02-26 14:36:58.577114', '2021-02-26 14:36:58.577114', 28, 10);
+COMMIT;
+
+-- ----------------------------
+-- Table structure for demo_app_goods
+-- ----------------------------
+DROP TABLE IF EXISTS `demo_app_goods`;
+CREATE TABLE `demo_app_goods` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `createTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
+  `updateTime` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
+  `title` varchar(255) NOT NULL COMMENT '标题',
+  `pic` varchar(255) NOT NULL COMMENT '图片',
+  `price` decimal(5,2) NOT NULL COMMENT '价格',
+  PRIMARY KEY (`id`),
+  KEY `IDX_de2b99b64158bb4030487d7475` (`createTime`),
+  KEY `IDX_f84cff6dc28b1a5dcc53856e66` (`updateTime`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of demo_app_goods
+-- ----------------------------
+BEGIN;
+INSERT INTO `demo_app_goods` VALUES (1, '2021-03-02 17:22:10.687462', '2021-03-02 17:22:10.687462', 'cool-mall商城', 'https://docs.cool-js.com/mall/show05.jpeg', 20.00);
+COMMIT;
+
+
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 123 - 0
cool-admin-midway-master/src/app/modules/base/middleware/authority.ts

@@ -0,0 +1,123 @@
+import { App, Config, Provide } from '@midwayjs/decorator';
+import {
+  IWebMiddleware,
+  IMidwayWebNext,
+  IMidwayWebApplication,
+} from '@midwayjs/web';
+import * as _ from 'lodash';
+import { CoolConfig, RESCODE } from 'midwayjs-cool-core';
+import * as jwt from 'jsonwebtoken';
+import { Context } from 'egg';
+
+/**
+ * 权限校验
+ */
+@Provide()
+export class BaseAuthorityMiddleware implements IWebMiddleware {
+  @Config('cool')
+  coolConfig: CoolConfig;
+
+  @Config('module.base')
+  jwtConfig: CoolConfig;
+
+  coolCache;
+
+  @App()
+  app: IMidwayWebApplication;
+
+  resolve() {
+    return async (ctx: Context, next: IMidwayWebNext) => {
+      let statusCode = 200;
+      let { url } = ctx;
+      const { prefix } = this.coolConfig.router;
+      url = url.replace(prefix, '');
+      const token = ctx.get('Authorization');
+      const adminUrl = '/admin/';
+      // 路由地址为 admin前缀的 需要权限校验
+      if (_.startsWith(url, adminUrl)) {
+        try {
+          ctx.admin = jwt.verify(token, this.jwtConfig.jwt.secret);
+        } catch (err) {}
+        // 不需要登录 无需权限校验
+        if (new RegExp(`^${adminUrl}?.*/open/`).test(url)) {
+          await next();
+          return;
+        }
+        if (ctx.admin) {
+          // 超管拥有所有权限
+          if (ctx.admin.username == 'admin' && !ctx.admin.isRefresh) {
+            await next();
+            return;
+          }
+          // 要登录每个人都有权限的接口
+          if (new RegExp(`^${adminUrl}?.*/comm/`).test(url)) {
+            await next();
+            return;
+          }
+          // 如果传的token是refreshToken则校验失败
+          if (ctx.admin.isRefresh) {
+            ctx.status = 401;
+            ctx.body = {
+              code: RESCODE.COMMFAIL,
+              message: '登录失效~',
+            };
+            return;
+          }
+          // 需要动态获得缓存
+          this.coolCache = await ctx.requestContext.getAsync('cool:cache');
+          // 判断密码版本是否正确
+          const passwordV = await this.coolCache.get(
+            `admin:passwordVersion:${ctx.admin.userId}`
+          );
+          if (passwordV != ctx.admin.passwordVersion) {
+            ctx.status = 401;
+            ctx.body = {
+              code: RESCODE.COMMFAIL,
+              message: '登录失效~',
+            };
+            return;
+          }
+          const rToken = await this.coolCache.get(
+            `admin:token:${ctx.admin.userId}`
+          );
+          if (!rToken) {
+            ctx.status = 401;
+            ctx.body = {
+              code: RESCODE.COMMFAIL,
+              message: '登录失效或无权限访问~',
+            };
+            return;
+          }
+          if (rToken !== token && this.coolConfig.sso) {
+            statusCode = 401;
+          } else {
+            let perms = await this.coolCache.get(
+              `admin:perms:${ctx.admin.userId}`
+            );
+            if (!_.isEmpty(perms)) {
+              perms = JSON.parse(perms).map(e => {
+                return e.replace(/:/g, '/');
+              });
+              if (!perms.includes(url.split('?')[0].replace('/admin/', ''))) {
+                statusCode = 403;
+              }
+            } else {
+              statusCode = 403;
+            }
+          }
+        } else {
+          statusCode = 401;
+        }
+        if (statusCode > 200) {
+          ctx.status = statusCode;
+          ctx.body = {
+            code: RESCODE.COMMFAIL,
+            message: '登录失效或无权限访问~',
+          };
+          return;
+        }
+      }
+      await next();
+    };
+  }
+}

+ 25 - 0
cool-admin-midway-master/src/app/modules/base/middleware/log.ts

@@ -0,0 +1,25 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { IWebMiddleware, IMidwayWebNext } from '@midwayjs/web';
+import { BaseSysLogService } from '../service/sys/log';
+import { Context } from 'egg';
+
+/**
+ * 日志中间件
+ */
+@Provide()
+export class BaseLogMiddleware implements IWebMiddleware {
+  @Inject()
+  baseSysLogService: BaseSysLogService;
+
+  resolve() {
+    return async (ctx: Context, next: IMidwayWebNext) => {
+      this.baseSysLogService.record(
+        ctx,
+        ctx.url.split('?')[0],
+        ctx.req.method === 'GET' ? ctx.request.query : ctx.request.body,
+        ctx.admin ? ctx.admin.userId : null
+      );
+      await next();
+    };
+  }
+}

+ 28 - 0
cool-admin-midway-master/src/app/modules/base/schedule/log.ts

@@ -0,0 +1,28 @@
+// src/schedule/hello.ts
+import { Provide, Inject, Schedule, CommonSchedule } from '@midwayjs/decorator';
+import { BaseSysLogService } from '../service/sys/log';
+import { ILogger } from '@midwayjs/logger';
+
+/**
+ * 日志定时任务
+ */
+@Provide()
+@Schedule({
+  cron: '0 0 0 * * *', // 每天0点执行
+  type: 'worker', // 指定某一个 worker 执行
+})
+export class BaseLogSchedule implements CommonSchedule {
+  @Inject()
+  baseSysLogService: BaseSysLogService;
+
+  @Inject()
+  logger: ILogger;
+
+  // 定时执行的具体任务
+  async exec() {
+    this.logger.info('清除日志定时任务开始执行');
+    const startTime = Date.now();
+    await this.baseSysLogService.clear();
+    this.logger.info(`清除日志定时任务结束,耗时:${Date.now() - startTime}ms`);
+  }
+}

+ 45 - 0
cool-admin-midway-master/src/app/modules/base/service/plugin/info.ts

@@ -0,0 +1,45 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { BaseService, ICoolCache, CoolPlugin } from 'midwayjs-cool-core';
+
+/**
+ * 插件
+ */
+@Provide()
+export class BasePluginInfoService extends BaseService {
+  @Inject('cool:coolPlugin')
+  coolPlugin: CoolPlugin;
+
+  @Inject('cool:cache')
+  coolCache: ICoolCache;
+
+  /**
+   * 列表
+   */
+  async list(keyWord) {
+    return this.coolPlugin.list(keyWord);
+  }
+
+  /**
+   * 配置
+   */
+  async config(namespace: string, config) {
+    await this.coolPlugin.setConfig(namespace, config);
+  }
+
+  /**
+   * 获得配置信息
+   * @param namespace
+   */
+  async getConfig(namespace: string) {
+    return await this.coolPlugin.getConfig(namespace);
+  }
+
+  /**
+   * 是否启用插件
+   * @param namespace
+   * @param enable
+   */
+  async enable(namespace: string, enable: number) {
+    await this.coolPlugin.enable(namespace, enable);
+  }
+}

+ 38 - 0
cool-admin-midway-master/src/app/modules/base/service/sys/conf.ts

@@ -0,0 +1,38 @@
+import { Provide } from '@midwayjs/decorator';
+import { BaseService } from 'midwayjs-cool-core';
+import { InjectEntityModel } from '@midwayjs/orm';
+import { Repository } from 'typeorm';
+import { BaseSysConfEntity } from '../../entity/sys/conf';
+
+/**
+ * 系统配置
+ */
+@Provide()
+export class BaseSysConfService extends BaseService {
+  @InjectEntityModel(BaseSysConfEntity)
+  baseSysConfEntity: Repository<BaseSysConfEntity>;
+
+  /**
+   * 获得配置参数值
+   * @param key
+   */
+  async getValue(key) {
+    const conf = await this.baseSysConfEntity.findOne({ cKey: key });
+    if (conf) {
+      return conf.cValue;
+    }
+  }
+
+  /**
+   * 更新配置参数
+   * @param cKey
+   * @param cValue
+   */
+  async updateVaule(cKey, cValue) {
+    await this.baseSysConfEntity
+      .createQueryBuilder()
+      .update()
+      .set({ cKey, cValue })
+      .execute();
+  }
+}

+ 124 - 0
cool-admin-midway-master/src/app/modules/base/service/sys/department.ts

@@ -0,0 +1,124 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { BaseService } from 'midwayjs-cool-core';
+import { InjectEntityModel } from '@midwayjs/orm';
+import { Repository } from 'typeorm';
+import { BaseSysDepartmentEntity } from '../../entity/sys/department';
+import * as _ from 'lodash';
+import { BaseSysRoleDepartmentEntity } from '../../entity/sys/role_department';
+import { Context } from 'egg';
+import { BaseSysPermsService } from './perms';
+
+/**
+ * 描述
+ */
+@Provide()
+export class BaseSysDepartmentService extends BaseService {
+  @InjectEntityModel(BaseSysDepartmentEntity)
+  baseSysDepartmentEntity: Repository<BaseSysDepartmentEntity>;
+
+  @InjectEntityModel(BaseSysRoleDepartmentEntity)
+  baseSysRoleDepartmentEntity: Repository<BaseSysRoleDepartmentEntity>;
+
+  @Inject()
+  baseSysPermsService: BaseSysPermsService;
+
+  @Inject()
+  ctx: Context;
+
+  /**
+   * 获得部门菜单
+   */
+  async list() {
+    // 部门权限
+    const permsDepartmentArr = await this.baseSysPermsService.departmentIds(
+      this.ctx.admin.userId
+    );
+
+    // 过滤部门权限
+    const find = this.baseSysDepartmentEntity.createQueryBuilder();
+    if (this.ctx.admin.username !== 'admin')
+      find.andWhere('id in (:ids)', {
+        ids: !_.isEmpty(permsDepartmentArr) ? permsDepartmentArr : [null],
+      });
+    find.addOrderBy('orderNum', 'ASC');
+    const departments: BaseSysDepartmentEntity[] = await find.getMany();
+
+    if (!_.isEmpty(departments)) {
+      departments.forEach(e => {
+        const parentMenu = departments.filter(m => {
+          e.parentId = parseInt(e.parentId + '');
+          if (e.parentId == m.id) {
+            return m.name;
+          }
+        });
+        if (!_.isEmpty(parentMenu)) {
+          e.parentName = parentMenu[0].name;
+        }
+      });
+    }
+    return departments;
+  }
+
+  /**
+   * 根据多个ID获得部门权限信息
+   * @param {[]} roleIds 数组
+   * @param isAdmin 是否超管
+   */
+  async getByRoleIds(roleIds: number[], isAdmin) {
+    if (!_.isEmpty(roleIds)) {
+      if (isAdmin) {
+        const result = await this.baseSysDepartmentEntity.find();
+        return result.map(e => {
+          return e.id;
+        });
+      }
+      const result = await this.baseSysRoleDepartmentEntity
+        .createQueryBuilder()
+        .where('roleId in (:roleIds)', { roleIds })
+        .getMany();
+      if (!_.isEmpty(result)) {
+        return _.uniq(
+          result.map(e => {
+            return e.departmentId;
+          })
+        );
+      }
+    }
+    return [];
+  }
+
+  /**
+   * 部门排序
+   * @param params
+   */
+  async order(params) {
+    for (const e of params) {
+      await this.baseSysDepartmentEntity.update(e.id, e);
+    }
+  }
+
+  /**
+   * 删除
+   */
+  async delete(ids: number[]) {
+    const { deleteUser } = this.ctx.request.body;
+    await this.baseSysDepartmentEntity.delete(ids);
+    if (deleteUser) {
+      await this.nativeQuery(
+        'delete from base_sys_user where departmentId in (?)',
+        [ids]
+      );
+    } else {
+      const topDepartment = await this.baseSysDepartmentEntity
+        .createQueryBuilder()
+        .where('parentId is null')
+        .getOne();
+      if (topDepartment) {
+        await this.nativeQuery(
+          'update base_sys_user a set a.departmentId = ? where a.departmentId in (?)',
+          [topDepartment.id, ids]
+        );
+      }
+    }
+  }
+}

+ 76 - 0
cool-admin-midway-master/src/app/modules/base/service/sys/log.ts

@@ -0,0 +1,76 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { BaseService } from 'midwayjs-cool-core';
+import { InjectEntityModel } from '@midwayjs/orm';
+import { Repository } from 'typeorm';
+import { Context } from 'egg';
+import * as _ from 'lodash';
+import { BaseSysLogEntity } from '../../entity/sys/log';
+import * as moment from 'moment';
+import { Utils } from '../../../../comm/utils';
+import { BaseSysConfService } from './conf';
+
+/**
+ * 描述
+ */
+@Provide()
+export class BaseSysLogService extends BaseService {
+  @Inject()
+  ctx: Context;
+
+  @Inject()
+  utils: Utils;
+
+  @InjectEntityModel(BaseSysLogEntity)
+  baseSysLogEntity: Repository<BaseSysLogEntity>;
+
+  @Inject()
+  baseSysConfService: BaseSysConfService;
+
+  /**
+   * 记录
+   * @param url URL地址
+   * @param params 参数
+   * @param userId 用户ID
+   */
+  async record(context: Context, url, params, userId) {
+    const ip = await this.utils.getReqIP(context);
+    const sysLog = new BaseSysLogEntity();
+    sysLog.userId = userId;
+    sysLog.ip = typeof ip === 'string' ? ip : ip.join(',');
+    const ipAddrArr = [];
+    for (const e of sysLog.ip.split(','))
+      ipAddrArr.push(await await this.utils.getIpAddr(context, e));
+    sysLog.ipAddr = ipAddrArr.join(',');
+    sysLog.action = url;
+    if (!_.isEmpty(params)) {
+      sysLog.params = JSON.stringify(params);
+    }
+    await this.baseSysLogEntity.insert(sysLog);
+  }
+
+  /**
+   * 日志
+   * @param isAll 是否清除全部
+   */
+  async clear(isAll?) {
+    if (isAll) {
+      await this.baseSysLogEntity.clear();
+      return;
+    }
+    const keepDay = await this.baseSysConfService.getValue('logKeep');
+    if (keepDay) {
+      const beforeDate = `${moment()
+        .add(-keepDay, 'days')
+        .format('YYYY-MM-DD')} 00:00:00`;
+      await this.baseSysLogEntity
+        .createQueryBuilder()
+        .where('createTime < :createTime', { createTime: beforeDate });
+      await this.nativeQuery(
+        ' delete from base_sys_log where createTime < ? ',
+        [beforeDate]
+      );
+    } else {
+      await this.baseSysLogEntity.clear();
+    }
+  }
+}

+ 248 - 0
cool-admin-midway-master/src/app/modules/base/service/sys/login.ts

@@ -0,0 +1,248 @@
+import { Inject, Provide, Config } from '@midwayjs/decorator';
+import {
+  BaseService,
+  ICoolCache,
+  CoolCommException,
+  CoolConfig,
+  RESCODE,
+} from 'midwayjs-cool-core';
+import { LoginDTO } from '../../dto/login';
+import * as svgCaptcha from 'svg-captcha';
+// import * as svgToDataURL from 'svg-to-dataurl';
+import * as  svgToDataURL from 'mini-svg-data-uri';
+import { v1 as uuid } from 'uuid';
+import { BaseSysUserEntity } from '../../entity/sys/user';
+import { Repository } from 'typeorm';
+import { InjectEntityModel } from '@midwayjs/orm';
+import * as md5 from 'md5';
+import { BaseSysRoleService } from './role';
+import * as _ from 'lodash';
+import { BaseSysMenuService } from './menu';
+import { BaseSysDepartmentService } from './department';
+import * as jwt from 'jsonwebtoken';
+import { Context } from 'egg';
+
+/**
+ * 登录
+ */
+@Provide()
+export class BaseSysLoginService extends BaseService {
+  @Inject('cool:cache')
+  coolCache: ICoolCache;
+
+  @InjectEntityModel(BaseSysUserEntity)
+  baseSysUserEntity: Repository<BaseSysUserEntity>;
+
+  @Inject()
+  baseSysRoleService: BaseSysRoleService;
+
+  @Inject()
+  baseSysMenuService: BaseSysMenuService;
+
+  @Inject()
+  baseSysDepartmentService: BaseSysDepartmentService;
+
+  @Inject()
+  ctx: Context;
+
+  @Config('module.base')
+  coolConfig: CoolConfig;
+
+  /**
+   * 登录
+   * @param login
+   */
+  async login(login: LoginDTO) {
+    const { username, captchaId, verifyCode, password } = login;
+    // 校验验证码
+    const checkV = await this.captchaCheck(captchaId, verifyCode);
+    if (checkV) {
+      const user = await this.baseSysUserEntity.findOne({ username });
+      // 校验用户
+      if (user) {
+        // 校验用户状态及密码
+        if (user.status === 0 || user.password !== md5(password)) {
+          throw new CoolCommException('账户或密码不正确~');
+        }
+      } else {
+        throw new CoolCommException('账户或密码不正确~');
+      }
+      // 校验角色
+      const roleIds = await this.baseSysRoleService.getByUser(user.id);
+      if (_.isEmpty(roleIds)) {
+        throw new CoolCommException('该用户未设置任何角色,无法登录~');
+      }
+
+      // 生成token
+      const { expire, refreshExpire } = this.coolConfig.jwt.token;
+      const result = {
+        expire,
+        token: await this.generateToken(user, roleIds, expire),
+        refreshExpire,
+        refreshToken: await this.generateToken(
+          user,
+          roleIds,
+          refreshExpire,
+          true
+        ),
+      };
+
+      // 将用户相关信息保存到缓存
+      const perms = await this.baseSysMenuService.getPerms(roleIds);
+      const departments = await this.baseSysDepartmentService.getByRoleIds(
+        roleIds,
+        user.username === 'admin'
+      );
+      await this.coolCache.set(
+        `admin:department:${user.id}`,
+        JSON.stringify(departments)
+      );
+      await this.coolCache.set(`admin:perms:${user.id}`, JSON.stringify(perms));
+      await this.coolCache.set(`admin:token:${user.id}`, result.token);
+      await this.coolCache.set(`admin:token:refresh:${user.id}`, result.token);
+
+      return result;
+    } else {
+      throw new CoolCommException('验证码不正确');
+    }
+  }
+
+  /**
+   * 验证码
+   * @param type 图片验证码类型 svg
+   * @param width 宽
+   * @param height 高
+   */
+  async captcha(type: string, width = 150, height = 50) {
+    const svg = svgCaptcha.create({
+      // ignoreChars: 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM',
+      ignoreChars: 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM',
+      width,
+      height,
+    });
+    const result = {
+      captchaId: uuid(),
+      data: svg.data.replace(/"/g, "'"),
+    };
+    // 文字变白
+    const rpList = [
+      '#111',
+      '#222',
+      '#333',
+      '#444',
+      '#555',
+      '#666',
+      '#777',
+      '#888',
+      '#999',
+    ];
+    rpList.forEach(rp => {
+      result.data = result.data['replaceAll'](rp, '#fff');
+    });
+    if (type === 'base64') {
+      result.data = svgToDataURL(result.data);
+    }
+    // 半小时过期
+    await this.coolCache.set(
+      `verify:img:${result.captchaId}`,
+      svg.text.toLowerCase(),
+      1800
+    );
+    return result;
+  }
+
+  /**
+   * 退出登录
+   */
+  async logout() {
+    const { userId } = this.ctx.admin;
+    await this.coolCache.del(`admin:department:${userId}`);
+    await this.coolCache.del(`admin:perms:${userId}`);
+    await this.coolCache.del(`admin:token:${userId}`);
+    await this.coolCache.del(`admin:token:refresh:${userId}`);
+  }
+
+  /**
+   * 检验图片验证码
+   * @param captchaId 验证码ID
+   * @param value 验证码
+   */
+  async captchaCheck(captchaId, value) {
+    const rv = await this.coolCache.get(`verify:img:${captchaId}`);
+    if (!rv || !value || value.toLowerCase() !== rv) {
+      return false;
+    } else {
+      this.coolCache.del(`verify:img:${captchaId}`);
+      return true;
+    }
+  }
+
+  /**
+   * 生成token
+   * @param user 用户对象
+   * @param roleIds 角色集合
+   * @param expire 过期
+   * @param isRefresh 是否是刷新
+   */
+  async generateToken(user, roleIds, expire, isRefresh?) {
+    await this.coolCache.set(
+      `admin:passwordVersion:${user.id}`,
+      user.passwordV
+    );
+    const tokenInfo = {
+      isRefresh: false,
+      roleIds,
+      username: user.username,
+      userId: user.id,
+      passwordVersion: user.passwordV,
+    };
+    if (isRefresh) {
+      tokenInfo.isRefresh = true;
+    }
+    return jwt.sign(tokenInfo, this.coolConfig.jwt.secret, {
+      expiresIn: expire,
+    });
+  }
+
+  /**
+   * 刷新token
+   * @param token
+   */
+  async refreshToken(token: string) {
+    try {
+      const decoded = jwt.verify(token, this.coolConfig.jwt.secret);
+      if (decoded && decoded['isRefresh']) {
+        delete decoded['exp'];
+        delete decoded['iat'];
+
+        const { expire, refreshExpire } = this.coolConfig.jwt.token;
+        decoded['isRefresh'] = false;
+        const result = {
+          expire,
+          token: jwt.sign(decoded, this.coolConfig.jwt.secret, {
+            expiresIn: expire,
+          }),
+          refreshExpire,
+          refreshToken: '',
+        };
+        decoded['isRefresh'] = true;
+        result.refreshToken = jwt.sign(decoded, this.coolConfig.jwt.secret, {
+          expiresIn: refreshExpire,
+        });
+        await this.coolCache.set(
+          `admin:passwordVersion:${decoded['userId']}`,
+          decoded['passwordVersion']
+        );
+        return result;
+      }
+    } catch (err) {
+      console.log(err);
+      this.ctx.status = 401;
+      this.ctx.body = {
+        code: RESCODE.COMMFAIL,
+        message: '登录失效~',
+      };
+      return;
+    }
+  }
+}

+ 165 - 0
cool-admin-midway-master/src/app/modules/base/service/sys/menu.ts

@@ -0,0 +1,165 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { BaseService } from 'midwayjs-cool-core';
+import { InjectEntityModel } from '@midwayjs/orm';
+import { Repository } from 'typeorm';
+import { BaseSysMenuEntity } from '../../entity/sys/menu';
+import * as _ from 'lodash';
+import { Context } from 'egg';
+import { BaseSysPermsService } from './perms';
+
+/**
+ * 菜单
+ */
+@Provide()
+export class BaseSysMenuService extends BaseService {
+  @Inject()
+  ctx: Context;
+
+  @InjectEntityModel(BaseSysMenuEntity)
+  baseSysMenuEntity: Repository<BaseSysMenuEntity>;
+
+  @Inject()
+  baseSysPermsService: BaseSysPermsService;
+
+  /**
+   * 获得所有菜单
+   */
+  async list() {
+    const menus = await this.getMenus(
+      this.ctx.admin.roleIds,
+      this.ctx.admin.username === 'admin'
+    );
+    if (!_.isEmpty(menus)) {
+      menus.forEach(e => {
+        const parentMenu = menus.filter(m => {
+          e.parentId = parseInt(e.parentId);
+          if (e.parentId == m.id) {
+            return m.name;
+          }
+        });
+        if (!_.isEmpty(parentMenu)) {
+          e.parentName = parentMenu[0].name;
+        }
+      });
+    }
+    return menus;
+  }
+
+  /**
+   * 修改之后
+   * @param param
+   */
+  async modifyAfter(param) {
+    if (param.id) {
+      await this.refreshPerms(param.id);
+    }
+  }
+
+  /**
+   * 根据角色获得权限信息
+   * @param {[]} roleIds 数组
+   */
+  async getPerms(roleIds) {
+    let perms = [];
+    if (!_.isEmpty(roleIds)) {
+      const result = await this.nativeQuery(
+        `SELECT a.perms FROM base_sys_menu a ${this.setSql(
+          !roleIds.includes('1'),
+          'JOIN base_sys_role_menu b on a.id = b.menuId AND b.roleId in (?)',
+          [roleIds]
+        )}
+            where 1=1 and a.perms is not NULL
+            `,
+        [roleIds]
+      );
+      if (result) {
+        result.forEach(d => {
+          if (d.perms) {
+            perms = perms.concat(d.perms.split(','));
+          }
+        });
+      }
+      perms = _.uniq(perms);
+      perms = _.remove(perms, n => {
+        return !_.isEmpty(n);
+      });
+    }
+    return _.uniq(perms);
+  }
+
+  /**
+   * 获得用户菜单信息
+   * @param roleIds
+   * @param isAdmin 是否是超管
+   */
+  async getMenus(roleIds, isAdmin) {
+    return await this.nativeQuery(`
+        SELECT
+            a.*
+        FROM
+            base_sys_menu a
+        ${this.setSql(
+          !isAdmin,
+          'JOIN base_sys_role_menu b on a.id = b.menuId AND b.roleId in (?)',
+          [roleIds]
+        )}
+        GROUP BY a.id
+        ORDER BY
+            orderNum ASC`);
+  }
+
+  /**
+   * 删除
+   * @param ids
+   */
+  async delete(ids) {
+    let idArr;
+    if (ids instanceof Array) {
+      idArr = ids;
+    } else {
+      idArr = ids.split(',');
+    }
+    for (const id of idArr) {
+      await this.baseSysMenuEntity.delete({ id });
+      await this.delChildMenu(id);
+    }
+  }
+
+  /**
+   * 删除子菜单
+   * @param id
+   */
+  private async delChildMenu(id) {
+    await this.refreshPerms(id);
+    const delMenu = await this.baseSysMenuEntity.find({ parentId: id });
+    if (_.isEmpty(delMenu)) {
+      return;
+    }
+    const delMenuIds = delMenu.map(e => {
+      return e.id;
+    });
+    await this.baseSysMenuEntity.delete(delMenuIds);
+    for (const menuId of delMenuIds) {
+      await this.delChildMenu(menuId);
+    }
+  }
+
+  /**
+   * 更新权限
+   * @param menuId
+   */
+  async refreshPerms(menuId) {
+    const users = await this.nativeQuery(
+      'select b.userId from base_sys_role_menu a left join base_sys_user_role b on a.roleId = b.roleId where a.menuId = ? group by b.userId',
+      [menuId]
+    );
+    // 刷新admin权限
+    await this.baseSysPermsService.refreshPerms(1);
+    if (!_.isEmpty(users)) {
+      // 刷新其他权限
+      for (const user of users) {
+        await this.baseSysPermsService.refreshPerms(user.userId);
+      }
+    }
+  }
+}

+ 60 - 0
cool-admin-midway-master/src/app/modules/base/service/sys/param.ts

@@ -0,0 +1,60 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { BaseService, ICoolCache } from 'midwayjs-cool-core';
+import { InjectEntityModel } from '@midwayjs/orm';
+import { Repository } from 'typeorm';
+import { BaseSysParamEntity } from '../../entity/sys/param';
+
+/**
+ * 参数配置
+ */
+@Provide()
+export class BaseSysParamService extends BaseService {
+  @InjectEntityModel(BaseSysParamEntity)
+  baseSysParamEntity: Repository<BaseSysParamEntity>;
+
+  @Inject('cool:cache')
+  coolCache: ICoolCache;
+
+  /**
+   * 根据key获得对应的参数
+   * @param key
+   */
+  async dataByKey(key) {
+    let result = await this.coolCache.get(`param:${key}`);
+    if (result) {
+      result = JSON.parse(result);
+      if (result.dataType !== 0) {
+        return JSON.parse(result.data);
+      } else {
+        return result.data;
+      }
+    }
+    return;
+  }
+
+  /**
+   * 根据key获得对应的网页数据
+   * @param key
+   */
+  async htmlByKey(key) {
+    let html = '<html><body>@content</body></html>';
+    let result = await this.coolCache.get(`param:${key}`);
+    if (result) {
+      result = JSON.parse(result);
+      html = html.replace('@content', result.data);
+    } else {
+      html = html.replace('@content', 'key notfound');
+    }
+    return html;
+  }
+
+  /**
+   * 重新初始化缓存
+   */
+  async modifyAfter() {
+    const params = await this.baseSysParamEntity.find();
+    for (const param of params) {
+      await this.coolCache.set(`param:${param.keyName}`, JSON.stringify(param));
+    }
+  }
+}

+ 73 - 0
cool-admin-midway-master/src/app/modules/base/service/sys/perms.ts

@@ -0,0 +1,73 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { BaseService, ICoolCache } from 'midwayjs-cool-core';
+import { BaseSysMenuService } from './menu';
+import { BaseSysRoleService } from './role';
+import { BaseSysDepartmentService } from './department';
+import { Context } from 'egg';
+
+/**
+ * 权限
+ */
+@Provide()
+export class BaseSysPermsService extends BaseService {
+  @Inject('cool:cache')
+  coolCache: ICoolCache;
+
+  @Inject()
+  baseSysMenuService: BaseSysMenuService;
+
+  @Inject()
+  baseSysRoleService: BaseSysRoleService;
+
+  @Inject()
+  baseSysDepartmentService: BaseSysDepartmentService;
+
+  @Inject()
+  ctx: Context;
+
+  /**
+   * 刷新权限
+   * @param userId 用户ID
+   */
+  async refreshPerms(userId) {
+    const roleIds = await this.baseSysRoleService.getByUser(userId);
+    const perms = await this.baseSysMenuService.getPerms(roleIds);
+    await this.coolCache.set(`admin:perms:${userId}`, JSON.stringify(perms));
+    // 更新部门权限
+    const departments = await this.baseSysDepartmentService.getByRoleIds(
+      roleIds,
+      this.ctx.admin.username === 'admin'
+    );
+    await this.coolCache.set(
+      `admin:department:${userId}`,
+      JSON.stringify(departments)
+    );
+  }
+
+  /**
+   * 获得权限菜单
+   * @param roleIds
+   */
+  async permmenu(roleIds: number[]) {
+    const perms = await this.baseSysMenuService.getPerms(roleIds);
+    const menus = await this.baseSysMenuService.getMenus(
+      roleIds,
+      this.ctx.admin.username === 'admin'
+    );
+    return { perms, menus };
+  }
+
+  /**
+   * 根据用户ID获得部门权限
+   * @param userId
+   * @return 部门ID数组
+   */
+  async departmentIds(userId: number) {
+    const department = await this.coolCache.get(`admin:department:${userId}`);
+    if (department) {
+      return JSON.parse(department);
+    } else {
+      return [];
+    }
+  }
+}

+ 126 - 0
cool-admin-midway-master/src/app/modules/base/service/sys/role.ts

@@ -0,0 +1,126 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { BaseService } from 'midwayjs-cool-core';
+import { InjectEntityModel } from '@midwayjs/orm';
+import { Repository } from 'typeorm';
+import { BaseSysRoleEntity } from '../../entity/sys/role';
+import { BaseSysUserRoleEntity } from '../../entity/sys/user_role';
+import * as _ from 'lodash';
+import { BaseSysRoleMenuEntity } from '../../entity/sys/role_menu';
+import { BaseSysRoleDepartmentEntity } from '../../entity/sys/role_department';
+import { BaseSysPermsService } from './perms';
+import { Brackets } from 'typeorm';
+
+/**
+ * 角色
+ */
+@Provide()
+export class BaseSysRoleService extends BaseService {
+  @InjectEntityModel(BaseSysRoleEntity)
+  baseSysRoleEntity: Repository<BaseSysRoleEntity>;
+
+  @InjectEntityModel(BaseSysUserRoleEntity)
+  baseSysUserRoleEntity: Repository<BaseSysUserRoleEntity>;
+
+  @InjectEntityModel(BaseSysRoleMenuEntity)
+  baseSysRoleMenuEntity: Repository<BaseSysRoleMenuEntity>;
+
+  @InjectEntityModel(BaseSysRoleDepartmentEntity)
+  baseSysRoleDepartmentEntity: Repository<BaseSysRoleDepartmentEntity>;
+
+  @Inject()
+  baseSysPermsService: BaseSysPermsService;
+
+  /**
+   * 根据用户ID获得所有用户角色
+   * @param userId
+   */
+  async getByUser(userId: number): Promise<number[]> {
+    const userRole = await this.baseSysUserRoleEntity.find({ userId });
+    if (!_.isEmpty(userRole)) {
+      return userRole.map(e => {
+        return e.roleId;
+      });
+    }
+    return [];
+  }
+
+  /**
+   *
+   * @param param
+   */
+  async modifyAfter(param) {
+    if (param.id) {
+      this.updatePerms(param.id, param.menuIdList, param.departmentIdList);
+    }
+  }
+
+  /**
+   * 更新权限
+   * @param roleId
+   * @param menuIdList
+   * @param departmentIds
+   */
+  async updatePerms(roleId, menuIdList?, departmentIds = []) {
+    // 更新菜单权限
+    await this.baseSysRoleMenuEntity.delete({ roleId });
+    for (const e of menuIdList) {
+      await this.baseSysRoleMenuEntity.save({ roleId, menuId: e });
+    }
+    // 更新部门权限
+    await this.baseSysRoleDepartmentEntity.delete({ roleId });
+    for (const departmentId of departmentIds) {
+      await this.baseSysRoleDepartmentEntity.save({ roleId, departmentId });
+    }
+    // 刷新权限
+    const userRoles = await this.baseSysUserRoleEntity.find({ roleId });
+    for (const userRole of userRoles) {
+      await this.baseSysPermsService.refreshPerms(userRole.userId);
+    }
+  }
+
+  /**
+   * 角色信息
+   * @param id
+   */
+  async info(id) {
+    const info = await this.baseSysRoleEntity.findOne({ id });
+    if (info) {
+      const menus = await this.baseSysRoleMenuEntity.find(
+        id !== 1 ? { roleId: id } : {}
+      );
+      const menuIdList = menus.map(e => {
+        return parseInt(e.menuId + '');
+      });
+      const departments = await this.baseSysRoleDepartmentEntity.find(
+        id !== 1 ? { roleId: id } : {}
+      );
+      const departmentIdList = departments.map(e => {
+        return parseInt(e.departmentId + '');
+      });
+      return {
+        ...info,
+        menuIdList,
+        departmentIdList,
+      };
+    }
+    return {};
+  }
+
+  async list() {
+    return this.baseSysRoleEntity
+      .createQueryBuilder()
+      .where(
+        new Brackets(qb => {
+          qb.where('id !=:id', { id: 1 }); // 超级管理员的角色不展示
+          // 如果不是超管,只能看到自己新建的或者自己有的角色
+          if (this.ctx.admin.username !== 'admin') {
+            qb.andWhere('(userId=:userId or id in (:roleId))', {
+              userId: this.ctx.admin.userId,
+              roleId: this.ctx.admin.roleIds,
+            });
+          }
+        })
+      )
+      .getMany();
+  }
+}

+ 219 - 0
cool-admin-midway-master/src/app/modules/base/service/sys/user.ts

@@ -0,0 +1,219 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { BaseService, ICoolCache, CoolCommException } from 'midwayjs-cool-core';
+import { InjectEntityModel } from '@midwayjs/orm';
+import { Repository } from 'typeorm';
+import { BaseSysUserEntity } from '../../entity/sys/user';
+import { BaseSysPermsService } from './perms';
+import * as _ from 'lodash';
+import { BaseSysUserRoleEntity } from '../../entity/sys/user_role';
+import * as md5 from 'md5';
+import { BaseSysDepartmentEntity } from '../../entity/sys/department';
+
+/**
+ * 系统用户
+ */
+@Provide()
+export class BaseSysUserService extends BaseService {
+  @InjectEntityModel(BaseSysUserEntity)
+  baseSysUserEntity: Repository<BaseSysUserEntity>;
+
+  @InjectEntityModel(BaseSysUserRoleEntity)
+  baseSysUserRoleEntity: Repository<BaseSysUserRoleEntity>;
+
+  @InjectEntityModel(BaseSysDepartmentEntity)
+  baseSysDepartmentEntity: Repository<BaseSysDepartmentEntity>;
+
+  @Inject('cool:cache')
+  coolCache: ICoolCache;
+
+  @Inject()
+  baseSysPermsService: BaseSysPermsService;
+
+  /**
+   * 分页查询
+   * @param query
+   */
+  async page(query) {
+    const { keyWord, status, departmentIds = [] } = query;
+    const permsDepartmentArr = await this.baseSysPermsService.departmentIds(
+      this.ctx.admin.userId
+    ); // 部门权限
+    const sql = `
+        SELECT
+            a.id,a.name,a.nickName,a.headImg,a.email,a.remark,a.status,a.createTime,a.updateTime,a.username,a.phone,a.departmentId,
+            GROUP_CONCAT(c.name) AS roleName,
+            d.name as departmentName
+        FROM
+            base_sys_user a
+            LEFT JOIN base_sys_user_role b ON a.id = b.userId
+            LEFT JOIN base_sys_role c ON b.roleId = c.id
+            LEFT JOIN base_sys_department d on a.departmentId = d.id
+        WHERE 1 = 1
+            ${this.setSql(
+              !_.isEmpty(departmentIds),
+              'and a.departmentId in (?)',
+              [departmentIds]
+            )}
+            ${this.setSql(status, 'and a.status = ?', [status])}
+            ${this.setSql(keyWord, 'and (a.name LIKE ? or a.username LIKE ?)', [
+              `%${keyWord}%`,
+              `%${keyWord}%`,
+            ])}
+            ${this.setSql(true, 'and a.username != ?', ['admin'])}
+            ${this.setSql(
+              this.ctx.admin.username !== 'admin',
+              'and a.departmentId in (?)',
+              [!_.isEmpty(permsDepartmentArr) ? permsDepartmentArr : [null]]
+            )}
+        GROUP BY a.id
+        `;
+    return this.sqlRenderPage(sql, query);
+  }
+
+  /**
+   * 移动部门
+   * @param departmentId
+   * @param userIds
+   */
+  async move(departmentId, userIds) {
+    await this.baseSysUserEntity
+      .createQueryBuilder()
+      .update()
+      .set({ departmentId })
+      .where('id in (:userIds)', { userIds })
+      .execute();
+  }
+
+  /**
+   * 获得个人信息
+   */
+  async person() {
+    const info = await this.baseSysUserEntity.findOne({
+      id: this.ctx.admin.userId,
+    });
+    delete info.password;
+    return info;
+  }
+
+  /**
+   * 更新用户角色关系
+   * @param user
+   */
+  async updateUserRole(user) {
+    if (user.username === 'admin') {
+      throw new CoolCommException('非法操作~');
+    }
+    await this.baseSysUserRoleEntity.delete({ userId: user.id });
+    if (user.roleIdList) {
+      for (const roleId of user.roleIdList) {
+        await this.baseSysUserRoleEntity.save({ userId: user.id, roleId });
+      }
+    }
+    await this.baseSysPermsService.refreshPerms(user.id);
+  }
+
+  /**
+   * 新增
+   * @param param
+   */
+  async add(param) {
+    const exists = await this.baseSysUserEntity.findOne({
+      username: param.username,
+    });
+    if (!_.isEmpty(exists)) {
+      throw new CoolCommException('用户名已经存在~');
+    }
+    param.password = md5(param.password);
+    await this.baseSysUserEntity.save(param);
+    await this.updateUserRole(param);
+    return param.id;
+  }
+
+  /**
+   * 根据ID获得信息
+   * @param id
+   */
+  public async info(id) {
+    const info = await this.baseSysUserEntity.findOne({ id });
+    const userRoles = await this.nativeQuery(
+      'select a.roleId from base_sys_user_role a where a.userId = ?',
+      [id]
+    );
+    const department = await this.baseSysDepartmentEntity.findOne({
+      id: info.departmentId,
+    });
+    if (info) {
+      delete info.password;
+      if (userRoles) {
+        info.roleIdList = userRoles.map(e => {
+          return parseInt(e.roleId);
+        });
+      }
+    }
+    delete info.password;
+    if (department) {
+      info.departmentName = department.name;
+    }
+    return info;
+  }
+
+  /**
+   * 修改个人信息
+   * @param param
+   */
+  public async personUpdate(param) {
+    param.id = this.ctx.admin.userId;
+    if (!_.isEmpty(param.password)) {
+      param.password = md5(param.password);
+      const userInfo = await this.baseSysUserEntity.findOne({ id: param.id });
+      if (!userInfo) {
+        throw new CoolCommException('用户不存在');
+      }
+      param.passwordV = userInfo.passwordV + 1;
+      await this.coolCache.set(
+        `admin:passwordVersion:${param.id}`,
+        param.passwordV
+      );
+    } else {
+      delete param.password;
+    }
+    await this.baseSysUserEntity.save(param);
+  }
+
+  /**
+   * 修改
+   * @param param 数据
+   */
+  async update(param) {
+    if (param.id && param.username === 'admin') {
+      throw new CoolCommException('非法操作~');
+    }
+    if (!_.isEmpty(param.password)) {
+      param.password = md5(param.password);
+      const userInfo = await this.baseSysUserEntity.findOne({ id: param.id });
+      if (!userInfo) {
+        throw new CoolCommException('用户不存在');
+      }
+      param.passwordV = userInfo.passwordV + 1;
+      await this.coolCache.set(
+        `admin:passwordVersion:${param.id}`,
+        param.passwordV
+      );
+    } else {
+      delete param.password;
+    }
+    if (param.status === 0) {
+      await this.forbidden(param.id);
+    }
+    await this.baseSysUserEntity.save(param);
+    await this.updateUserRole(param);
+  }
+
+  /**
+   * 禁用用户
+   * @param userId
+   */
+  async forbidden(userId) {
+    await this.coolCache.del(`admin:token:${userId}`);
+  }
+}

+ 16 - 0
cool-admin-midway-master/src/app/modules/demo/config.ts

@@ -0,0 +1,16 @@
+import { Application } from 'egg';
+import { ModuleConfig } from 'midwayjs-cool-core';
+
+/**
+ * 示例
+ */
+export default (app: Application) => {
+  return {
+    // 模块名称
+    name: '测试模块',
+    // 模块描述
+    description: '演示示例',
+    // 中间件
+    middlewares: ['testMiddleware'],
+  } as ModuleConfig;
+};

+ 65 - 0
cool-admin-midway-master/src/app/modules/demo/controller/admin/goods.ts

@@ -0,0 +1,65 @@
+import { Get, Provide } from '@midwayjs/decorator';
+import { Context } from 'egg';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { BaseSysUserEntity } from '../../../base/entity/sys/user';
+import { DemoAppGoodsEntity } from '../../entity/goods';
+
+/**
+ * 商品
+ */
+@Provide()
+@CoolController({
+  // 添加通用CRUD接口
+  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
+  // 设置表实体
+  entity: DemoAppGoodsEntity,
+  // 向表插入当前登录用户ID
+  insertParam: async (ctx: Context) => {
+    return {
+      userId: ctx.admin.userId,
+    };
+  },
+  // info接口忽略价格字段
+  infoIgnoreProperty: ['price'],
+  // 分页查询配置
+  pageQueryOp: {
+    // 让title字段支持模糊查询
+    keyWordLikeFields: ['title'],
+    // 让type字段支持筛选
+    fieldEq: ['type'],
+    // 指定返回字段
+    select: ['a.*', 'b.name'],
+    // 关联表用户表
+    leftJoin: [
+      {
+        // 管理的表
+        entity: BaseSysUserEntity,
+        // 别名
+        alias: 'b',
+        // 关联条件
+        condition: 'a.userId = b.id',
+      },
+    ],
+    // 增加其他条件
+    where: async (ctx: Context) => {
+      return [
+        // 价格大于90
+        ['a.price > :price', { price: 90.0 }],
+      ];
+    },
+    // 添加排序
+    addOrderBy: {
+      // 排序字段及排序方式
+      price: 'desc',
+    },
+  },
+})
+export class DemoAdminGoodsController extends BaseController {
+  /**
+   * 其他接口
+   */
+  @Get('/other')
+  async other() {
+    return this.ok('hello, cool-admin!!!');
+  }
+}

+ 24 - 0
cool-admin-midway-master/src/app/modules/demo/controller/app/event.ts

@@ -0,0 +1,24 @@
+import { Get, Inject, Provide } from '@midwayjs/decorator';
+import {
+  CoolController,
+  BaseController,
+  CoolEventManager,
+} from 'midwayjs-cool-core';
+
+/**
+ * 事件
+ */
+@Provide()
+@CoolController()
+export class DemoEventController extends BaseController {
+  @Inject('cool:coolEventManager')
+  coolEventManager: CoolEventManager;
+
+  /**
+   * 发送事件
+   */
+  @Get('/send')
+  public async send() {
+    this.coolEventManager.emit('updateUser', { a: 1 }, 12);
+  }
+}

+ 53 - 0
cool-admin-midway-master/src/app/modules/demo/controller/app/goods.ts

@@ -0,0 +1,53 @@
+import { Get, Inject, Post, Provide } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { IQueue } from 'midwayjs-cool-queue';
+import { DemoAppGoodsEntity } from '../../entity/goods';
+import { DemoGoodsService } from '../../service/goods';
+
+/**
+ * 商品
+ */
+@Provide()
+@CoolController(
+  {
+    api: ['add', 'delete', 'update', 'info', 'list', 'page'],
+    entity: DemoAppGoodsEntity,
+    listQueryOp: {
+      keyWordLikeFields: ['title'],
+    },
+  },
+  {
+    middleware: [],
+  }
+)
+export class DemoAppGoodsController extends BaseController {
+  @Inject()
+  demoGoodsService: DemoGoodsService;
+
+  // 队列
+  @Inject()
+  demoQueue: IQueue;
+
+  /**
+   * 请求所有数据
+   * @returns
+   */
+  @Get('/all')
+  async all() {
+    return this.ok(await this.demoGoodsService.all());
+  }
+
+  /**
+   * 发送数据到队列
+   */
+  @Post('/queue')
+  async queue() {
+    this.demoQueue.queue.add(
+      { a: 1 },
+      {
+        removeOnComplete: true,
+        removeOnFail: true,
+      }
+    );
+  }
+}

+ 73 - 0
cool-admin-midway-master/src/app/modules/demo/controller/app/pay.ts

@@ -0,0 +1,73 @@
+import { App, Inject, Post, Provide } from '@midwayjs/decorator';
+import { IMidwayWebApplication } from '@midwayjs/web';
+import { Context } from 'egg';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { ICoolWxPay } from 'midwayjs-cool-wxpay';
+import { parseString } from 'xml2js';
+
+/**
+ * 支付示例
+ */
+@Provide()
+@CoolController()
+export class DemoPayController extends BaseController {
+  // 微信支付
+  @Inject('wxpay:sdk')
+  wxPay: ICoolWxPay;
+
+  @Inject()
+  ctx: Context;
+
+  @App()
+  app: IMidwayWebApplication;
+
+  /**
+   * 扫码支付
+   */
+  @Post('/wx')
+  async wx() {
+    // const a = this.app.getApplicationContext().registry.keys();
+    // console.log(a);
+    const orderNum = await this.wxPay.createOrderNum();
+    const data = await this.wxPay.getInstance().unifiedOrder({
+      out_trade_no: orderNum,
+      body: '测试微信支付',
+      total_fee: 1,
+      trade_type: 'NATIVE',
+      product_id: 'test001',
+    });
+    return this.ok(data);
+  }
+
+  /**
+   * 微信支付通知回调
+   */
+  @Post('/wxNotify')
+  async wxNotify() {
+    let data = '';
+    this.ctx.req.setEncoding('utf8');
+    this.ctx.req.on('data', chunk => {
+      data += chunk;
+    });
+    const results = await new Promise((resolve, reject) => {
+      this.ctx.req.on('end', () => {
+        parseString(data, { explicitArray: false }, async (err, json) => {
+          if (err) {
+            return reject('success');
+          }
+          const checkSign = await this.wxPay.signVerify(json.xml);
+          if (checkSign && json.xml.result_code === 'SUCCESS') {
+            // 处理业务逻辑
+            console.log('微信支付成功', json.xml);
+            return resolve(true);
+          }
+          return resolve(false);
+        });
+      });
+    });
+    if (results) {
+      this.ctx.body =
+        '<xml><return_msg>OK</return_msg><return_code>SUCCESS</return_code></xml>';
+    }
+  }
+}

+ 21 - 0
cool-admin-midway-master/src/app/modules/demo/entity/goods.ts

@@ -0,0 +1,21 @@
+import { EntityModel } from '@midwayjs/orm';
+import { BaseEntity } from 'midwayjs-cool-core';
+import { Column } from 'typeorm';
+
+/**
+ * 商品
+ */
+@EntityModel('demo_app_goods')
+export class DemoAppGoodsEntity extends BaseEntity {
+  @Column({ comment: '标题' })
+  title: string;
+
+  @Column({ comment: '图片' })
+  pic: string;
+
+  @Column({ comment: '价格', type: 'decimal', precision: 5, scale: 2 })
+  price: number;
+
+  @Column({ comment: '分类', type: 'tinyint' })
+  type: number;
+}

+ 20 - 0
cool-admin-midway-master/src/app/modules/demo/event/test.ts

@@ -0,0 +1,20 @@
+import { Provide, Scope, ScopeEnum } from '@midwayjs/decorator';
+import { CoolEvent, Event } from 'midwayjs-cool-core';
+
+/**
+ * 接收事件
+ */
+@Provide()
+@Scope(ScopeEnum.Singleton)
+@CoolEvent()
+export class DemoEvent {
+  /**
+   * 根据事件名接收事件
+   * @param msg
+   * @param a
+   */
+  @Event('updateUser')
+  async updateUser(msg, a) {
+    console.log('ImEvent', 'updateUser', msg, a);
+  }
+}

+ 20 - 0
cool-admin-midway-master/src/app/modules/demo/middleware/test.ts

@@ -0,0 +1,20 @@
+import { Provide } from '@midwayjs/decorator';
+import { IWebMiddleware, IMidwayWebNext } from '@midwayjs/web';
+import { Context } from 'egg';
+
+/**
+ * 描述
+ */
+@Provide()
+export class TestMiddleware implements IWebMiddleware {
+  resolve() {
+    return async (ctx: Context, next: IMidwayWebNext) => {
+      // 控制器前执行的逻辑
+      const startTime = Date.now();
+      // 执行下一个 Web 中间件,最后执行到控制器
+      await next();
+      // 控制器之后执行的逻辑
+      console.log(Date.now() - startTime);
+    };
+  }
+}

+ 19 - 0
cool-admin-midway-master/src/app/modules/demo/queue/demo.ts

@@ -0,0 +1,19 @@
+import { App, Provide } from '@midwayjs/decorator';
+import { IMidwayWebApplication } from '@midwayjs/web';
+import { ICoolQueue, Queue } from 'midwayjs-cool-queue';
+
+/**
+ * 任务
+ */
+@Queue()
+@Provide()
+export abstract class DemoQueue implements ICoolQueue {
+  @App()
+  app: IMidwayWebApplication;
+
+  async data(job: any, done: any): Promise<void> {
+    // 这边可以执行定时任务具体的业务或队列的业务
+    console.log('数据', job.data);
+    done();
+  }
+}

+ 41 - 0
cool-admin-midway-master/src/app/modules/demo/service/goods.ts

@@ -0,0 +1,41 @@
+import { Inject, Provide } from '@midwayjs/decorator';
+import { BaseService, Cache, CoolTransaction } from 'midwayjs-cool-core';
+import { InjectEntityModel } from '@midwayjs/orm';
+import { Repository, QueryRunner } from 'typeorm';
+import { DemoAppGoodsEntity } from '../entity/goods';
+import { ICoolCache } from 'midwayjs-cool-core';
+
+/**
+ * 商品
+ */
+@Provide()
+export class DemoGoodsService extends BaseService {
+  @InjectEntityModel(DemoAppGoodsEntity)
+  demoAppGoodsEntity: Repository<DemoAppGoodsEntity>;
+
+  @Inject('cool:cache')
+  coolCache: ICoolCache;
+
+  /**
+   * 返回所有数据
+   */
+  @Cache(5)
+  async all() {
+    return this.demoAppGoodsEntity.find();
+  }
+
+  /**
+   * 事务
+   * @param params
+   * @param queryRunner
+   */
+  @CoolTransaction({ isolation: 'SERIALIZABLE' })
+  async testTransaction(params: any, queryRunner?: QueryRunner) {
+    await queryRunner.manager.insert<DemoAppGoodsEntity>(DemoAppGoodsEntity, {
+      title: '这是个商品',
+      pic: '商品图',
+      price: 99.0,
+      type: 1,
+    });
+  }
+}

+ 16 - 0
cool-admin-midway-master/src/app/modules/demo/service/task.ts

@@ -0,0 +1,16 @@
+import { Provide } from '@midwayjs/decorator';
+import { BaseService } from 'midwayjs-cool-core';
+/**
+ * 任务执行的demo示例
+ */
+@Provide()
+export class DemoTaskService extends BaseService {
+  /**
+   * 测试任务执行
+   * @param params 接收的参数 数组 [] 可不传
+   */
+  async test(params?: []) {
+    // 需要登录后台任务管理配置任务
+    console.log('任务执行了', params);
+  }
+}

+ 19 - 0
cool-admin-midway-master/src/app/modules/demo/socket/handler.ts

@@ -0,0 +1,19 @@
+import { Provide } from '@midwayjs/decorator';
+import { CoolSocket, SocketEnvent } from 'midwayjs-cool-socket';
+import { Socket } from 'socket.io';
+
+/**
+ * socket的事件
+ */
+@Provide()
+@CoolSocket('/')
+export class SocketHandler {
+  /**
+   * 连接成功
+   * @param data
+   */
+  @SocketEnvent()
+  async connection(socket: Socket) {
+    console.log('socket事件', socket.id, socket.handshake.query);
+  }
+}

+ 25 - 0
cool-admin-midway-master/src/app/modules/shuyou/config.ts

@@ -0,0 +1,25 @@
+/*
+ * @Author: YKH
+ * @Date: 2021-12-08 10:26:27
+ * @LastEditTime: 2022-04-21 17:16:01
+ * @Description: 
+ * @FilePath: \cool-admin\cool-admin-midway-master\src\app\modules\shuyou\config.ts
+ */
+import { Application } from 'egg';
+import { ModuleConfig } from 'midwayjs-cool-core';
+
+/**
+ * 示例
+ */
+export default (app: Application) => {
+  return {
+    // 模块名称
+    name: 'shuyou',
+    // 模块描述
+    description: '数优模块',
+    // 可选,模块加载顺序,默认为0,值越大越优先加载
+    order: 99,
+    // 中间件
+    middlewares: ['testMiddleware'],
+  } as ModuleConfig;
+};

+ 44 - 0
cool-admin-midway-master/src/app/modules/shuyou/controller/admin/account_type.ts

@@ -0,0 +1,44 @@
+import {  Provide } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { ShuyouAccountTypeEntity } from '../../entity/account_type';
+
+/**
+ * 游戏负责人
+ */
+@Provide()
+@CoolController({
+  // 添加通用CRUD接口
+  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
+  // 设置表实体
+  entity: ShuyouAccountTypeEntity,
+  
+  before: ctx => {
+    //前段数据转JSON格式
+    const data = ctx.request.body;
+    if(data.name == ""){
+      data.name = null
+    }
+    ctx.request.body.data = JSON.stringify(data);
+  },
+  // 分页查询配置
+  pageQueryOp: {
+    // 让字段支持模糊查询
+    keyWordLikeFields: ['name'],
+    // 让字段支持筛选
+    fieldEq: ['name'],
+    // 添加排序
+    addOrderBy: {
+      // 排序字段及排序方式
+      name: 'desc',
+    },
+  },
+})
+export class ShuyouAccountTypeController extends BaseController {
+  /**
+   * 其他接口
+   */
+  // @Get('/other')
+  // async other() {
+  //   return this.ok('hello, cool-admin!!!');
+  // }
+}

+ 69 - 0
cool-admin-midway-master/src/app/modules/shuyou/controller/admin/computer_usage.ts

@@ -0,0 +1,69 @@
+/*
+ * @Author: YKH
+ * @Date: 2021-12-08 10:26:27
+ * @LastEditTime: 2022-04-02 09:22:39
+ * @Description: 
+ * @FilePath: \cool-admin\cool-admin-midway-master\src\app\modules\shuyou\controller\admin\computer_usage.ts
+ */
+import { Provide } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { ShuyouComputerUsageEntity } from '../../entity/computer_usage';
+import { ShuyouComputerUsageService } from '../../service/computer_usage';
+
+/**
+ * 游戏目标
+ */
+@Provide()
+@CoolController({
+  // 添加通用CRUD接口
+  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
+  // 设置表实体
+  entity: ShuyouComputerUsageEntity,
+  service: ShuyouComputerUsageService,
+  // // 向表插入当前登录用户ID
+  // insertParam: async (ctx: Context) => {
+  //   return {
+  //     userId: ctx.admin.userId,
+  //   };
+  // },
+  // // info接口忽略价格字段
+  // infoIgnoreProperty: ['price'],
+
+  before: ctx => {
+    //前段数据转JSON格式
+    const data = ctx.request.body;
+    // console.log(ctx.request.header.referer)
+    if (data.task_id == "") {
+      data.task_id = null
+    }
+    if (data.pc_num == "") {
+      data.pc_num == null
+    }
+    ctx.request.body.data = JSON.stringify(data);
+  },
+  // 分页查询配置
+  pageQueryOp: {
+    // 让字段支持模糊查询
+    keyWordLikeFields: ['task_id', 'pc_num'],
+    // 让字段支持筛选
+    fieldEq: ['task_id', 'pc_num'],
+    // 添加排序
+    addOrderBy: {
+      // 排序字段及排序方式
+      task_id: 'asc',
+    },
+  },
+})
+export class ShuyouComputerUsageController extends BaseController {
+
+  // @Inject()
+  // ShuyouGameTaskService: ShuyouGameTaskService;
+
+  /**
+   * 其他接口
+   */
+  // @Get('/other')
+  // async other() {
+  //   return this.ok('hello, cool-admin!!!');
+  // }
+}

+ 67 - 0
cool-admin-midway-master/src/app/modules/shuyou/controller/admin/data_23.ts

@@ -0,0 +1,67 @@
+/*
+ * @Author: YKH
+ * @Date: 2021-12-23 15:45:46
+ * @LastEditTime: 2022-06-28 10:26:20
+ * @Description: 
+ * @FilePath: \cool-admin\cool-admin-midway-master\src\app\modules\shuyou\controller\admin\data_23.ts
+ */
+import { Provide } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { ShuyouData23Entity } from '../../entity/data_23';
+import { ShuyouData23Service } from '../../service/data_23';
+
+/**
+ * 商品
+ */
+@Provide()
+@CoolController({
+  // 添加通用CRUD接口
+  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
+  // 设置表实体
+  entity: ShuyouData23Entity,
+  service: ShuyouData23Service,
+
+  // before: ctx => {
+  //   //前段数据转JSON格式
+  //   const data = ctx.request.body;
+  //   if (data.account_text == "") {
+  //     data.account_text = null
+  //   }
+  //   ctx.request.body.data = JSON.stringify(data);
+  // },
+  // 分页查询配置
+  // pageQueryOp: {
+  //   // 让字段支持模糊查询
+  //   keyWordLikeFields: ['account_text', 'game_name'],
+  //   // 让字段支持筛选
+  //   fieldEq: ['account_text', 'game_name']
+  //   // 指定返回字段
+  //   select: ['a.*', 'b.name'],
+  //   // 关联表用户表
+  //   leftJoin: [
+  //     {
+  //       // 管理的表
+  //       entity: BaseSysUserEntity,
+  //       // 别名
+  //       alias: 'b',
+  //       // 关联条件
+  //       condition: 'a.userId = b.id',
+  //     },
+  //   ],
+  //   // 增加其他条件
+  //   where: async (ctx: Context) => {
+  //     return [
+  //       // 价格大于90
+  //       ['a.price > :price', { price: 90.0 }],
+  //     ];
+  //   },
+  //   // 添加排序
+  //   addOrderBy: {
+  //     // 排序字段及排序方式
+  //     price: 'desc',
+  //   },
+  // },
+})
+export class ShuyouData23Controller extends BaseController {
+
+}

+ 89 - 0
cool-admin-midway-master/src/app/modules/shuyou/controller/admin/data_abnormal_rate.ts

@@ -0,0 +1,89 @@
+/*
+ * @Author: YKH
+ * @Date: 2021-12-10 09:04:02
+ * @LastEditTime: 2022-06-14 11:56:58
+ * @Description: 
+ * @FilePath: \cool-admin\cool-admin-midway-master\src\app\modules\shuyou\controller\admin\data_abnormal_rate.ts
+ */
+import { Provide, Inject, Post, Body, ALL } from '@midwayjs/decorator';
+import { CoolController, BaseController } from 'midwayjs-cool-core';
+import { ShuyouAbnormalRateEntity } from '../../entity/data_abnormal_rate';
+import { ShuyouAbnormalRateService } from '../../service/data_abnormal_rate';
+
+/**
+ * 游戏负责人
+ */
+@Provide()
+@CoolController({
+  // 添加通用CRUD接口
+  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
+  // 设置表实体
+  entity: ShuyouAbnormalRateEntity,
+  service: ShuyouAbnormalRateService,
+
+  before: ctx => {
+    //前段数据转JSON格式
+    const data = ctx.request.body;
+    // console.log(data.agentOrDirector)
+    if (typeof (data.new_date) == "undefined") {
+      data.new_date = [new Date(), new Date()]
+    }
+    ctx.request.body.data = JSON.stringify(data);
+  },
+  // 分页查询配置
+  // pageQueryOp: {
+  //   // 让字段支持模糊查询
+  //   keyWordLikeFields: ['directorName'],
+  //   // 让字段支持筛选
+  //   fieldEq: ['directorName'],
+  //   // 添加排序
+  //   addOrderBy: {
+  //     // 排序字段及排序方式
+  //     id: 'desc',
+  //   },
+  // },
+})
+export class ShuyouAbnormalRateController extends BaseController {
+
+  @Inject()
+  ShuyouAbnormalRateService: ShuyouAbnormalRateService;
+
+  @Post('/queryAbnormalRate')
+  async queryAbnormalRate(@Body(ALL) queryObject: any) {
+    let { date } = queryObject
+    if (typeof (date) == "undefined") {
+      date = [new Date(), new Date()]
+    }
+    let queryAbnormalRate = await this.ShuyouAbnormalRateService.queryAbnormalRate(date);
+    // console.log(queryAbnormalRate)
+    if (!queryAbnormalRate) {
+      return { code: -1, message: '未查询到数据' };
+    }
+    return await this.ok({ code: 1, data: queryAbnormalRate });
+  }
+
+  @Post('/querySeven')
+  async querySeven(@Body(ALL) queryObject: any) {
+    let { task_id, new_date } = queryObject
+    let queryAbnormalRate = await this.ShuyouAbnormalRateService.querySeven(task_id, new_date);
+    // console.log(queryAbnormalRate)
+    if (!queryAbnormalRate) {
+      return { code: -1, message: '未查询到数据' };
+    }
+    return await this.ok({ code: 1, data: queryAbnormalRate });
+  }
+
+  @Post('/querySomeTime')
+  async querySomeTime(@Body(ALL) queryObject: any) {
+    let { task_id, new_date } = queryObject
+    if (typeof (new_date) == "undefined") {
+      new_date = [new Date().getTime() - 3600 * 1000 * 24 * 1, new Date().getTime() - 3600 * 1000 * 24 * 1]
+    }
+    let queryAbnormalRate = await this.ShuyouAbnormalRateService.querySomeTime(task_id, new_date);
+    // console.log(queryAbnormalRate)
+    if (!queryAbnormalRate) {
+      return { code: -1, message: '未查询到数据' };
+    }
+    return await this.ok({ code: 1, data: queryAbnormalRate });
+  }
+}

+ 0 - 0
cool-admin-midway-master/src/app/modules/shuyou/controller/admin/data_active.ts


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov