Browse Source

init commit, release guns-separation v1.0

fengshuonan 4 years ago
commit
c7fc02fd3d
100 changed files with 5676 additions and 0 deletions
  1. 4 0
      .gitattributes
  2. 44 0
      .gitignore
  3. 53 0
      LICENSE
  4. 114 0
      README.md
  5. 924 0
      _sql/guns-separation.sql
  6. 3 0
      _web/.browserslistrc
  7. 39 0
      _web/.editorconfig
  8. 3 0
      _web/.env
  9. 3 0
      _web/.env.development
  10. 3 0
      _web/.env.preview
  11. 37 0
      _web/.eslintrc.js
  12. 3 0
      _web/.gitignore
  13. 5 0
      _web/.prettierrc
  14. 7 0
      _web/.travis.yml
  15. 21 0
      _web/LICENSE
  16. 28 0
      _web/babel.config.js
  17. 46 0
      _web/config/plugin.config.js
  18. 23 0
      _web/jest.config.js
  19. 11 0
      _web/jsconfig.json
  20. 65 0
      _web/package.json
  21. 5 0
      _web/postcss.config.js
  22. BIN
      _web/public/avatar2.jpg
  23. 34 0
      _web/public/index.html
  24. 1 0
      _web/public/loading/loading.css
  25. 1 0
      _web/public/loading/loading.html
  26. 5 0
      _web/public/loading/option2/html_code_segment.html
  27. 1 0
      _web/public/loading/option2/loading.css
  28. 1 0
      _web/public/loading/option2/loading.svg
  29. BIN
      _web/public/logo.png
  30. 24 0
      _web/src/App.vue
  31. 56 0
      _web/src/api/manage.js
  32. 1 0
      _web/src/api/modular/main/README.md
  33. 1 0
      _web/src/api/modular/system/README.md
  34. 93 0
      _web/src/api/modular/system/appManage.js
  35. 86 0
      _web/src/api/modular/system/configManage.js
  36. 60 0
      _web/src/api/modular/system/dictDataManage.js
  37. 73 0
      _web/src/api/modular/system/dictManage.js
  38. 29 0
      _web/src/api/modular/system/emailManage.js
  39. 103 0
      _web/src/api/modular/system/fileManage.js
  40. 59 0
      _web/src/api/modular/system/logManage.js
  41. 93 0
      _web/src/api/modular/system/loginManage.js
  42. 16 0
      _web/src/api/modular/system/machineManage.js
  43. 115 0
      _web/src/api/modular/system/menuManage.js
  44. 86 0
      _web/src/api/modular/system/noticeManage.js
  45. 16 0
      _web/src/api/modular/system/noticeReceivedManage.js
  46. 33 0
      _web/src/api/modular/system/onlineUserManage.js
  47. 86 0
      _web/src/api/modular/system/orgManage.js
  48. 72 0
      _web/src/api/modular/system/posManage.js
  49. 142 0
      _web/src/api/modular/system/roleManage.js
  50. 43 0
      _web/src/api/modular/system/smsManage.js
  51. 128 0
      _web/src/api/modular/system/timersManage.js
  52. 183 0
      _web/src/api/modular/system/userManage.js
  53. 69 0
      _web/src/assets/background.svg
  54. 1 0
      _web/src/assets/icons/bx-analyse.svg
  55. BIN
      _web/src/assets/logo.png
  56. 105 0
      _web/src/assets/logo.svg
  57. BIN
      _web/src/assets/welcome.png
  58. 89 0
      _web/src/components/ArticleListContent/ArticleListContent.vue
  59. 3 0
      _web/src/components/ArticleListContent/index.js
  60. 46 0
      _web/src/components/AvatarList/Item.vue
  61. 99 0
      _web/src/components/AvatarList/List.vue
  62. 4 0
      _web/src/components/AvatarList/index.js
  63. 60 0
      _web/src/components/AvatarList/index.less
  64. 64 0
      _web/src/components/AvatarList/index.md
  65. 62 0
      _web/src/components/Charts/Bar.vue
  66. 120 0
      _web/src/components/Charts/ChartCard.vue
  67. 67 0
      _web/src/components/Charts/Liquid.vue
  68. 56 0
      _web/src/components/Charts/MiniArea.vue
  69. 57 0
      _web/src/components/Charts/MiniBar.vue
  70. 75 0
      _web/src/components/Charts/MiniProgress.vue
  71. 40 0
      _web/src/components/Charts/MiniSmoothArea.vue
  72. 68 0
      _web/src/components/Charts/Radar.vue
  73. 77 0
      _web/src/components/Charts/RankList.vue
  74. 113 0
      _web/src/components/Charts/TagCloud.vue
  75. 64 0
      _web/src/components/Charts/TransferBar.vue
  76. 82 0
      _web/src/components/Charts/Trend.vue
  77. 13 0
      _web/src/components/Charts/chart.less
  78. 14 0
      _web/src/components/Charts/smooth.area.less
  79. 102 0
      _web/src/components/CountDown/CountDown.vue
  80. 3 0
      _web/src/components/CountDown/index.js
  81. 34 0
      _web/src/components/CountDown/index.md
  82. 153 0
      _web/src/components/DescriptionList/DescriptionList.vue
  83. 2 0
      _web/src/components/DescriptionList/index.js
  84. 113 0
      _web/src/components/Dialog.js
  85. 82 0
      _web/src/components/Editor/QuillEditor.vue
  86. 123 0
      _web/src/components/Editor/WangEditor.vue
  87. 64 0
      _web/src/components/Ellipsis/Ellipsis.vue
  88. 3 0
      _web/src/components/Ellipsis/index.js
  89. 38 0
      _web/src/components/Ellipsis/index.md
  90. 130 0
      _web/src/components/Exception/ExceptionPage.vue
  91. 2 0
      _web/src/components/Exception/index.js
  92. 19 0
      _web/src/components/Exception/type.js
  93. 30 0
      _web/src/components/FooterToolbar/FooterToolBar.vue
  94. 4 0
      _web/src/components/FooterToolbar/index.js
  95. 23 0
      _web/src/components/FooterToolbar/index.less
  96. 48 0
      _web/src/components/FooterToolbar/index.md
  97. 46 0
      _web/src/components/GlobalFooter/GlobalFooter.vue
  98. 2 0
      _web/src/components/GlobalFooter/index.js
  99. 125 0
      _web/src/components/GlobalHeader/GlobalHeader.vue
  100. 0 0
      _web/src/components/GlobalHeader/index.js

+ 4 - 0
.gitattributes

@ -0,0 +1,4 @@
*.js linguist-language=java
*.css linguist-language=java
*.html linguist-language=java
*.btl linguist-language=java

+ 44 - 0
.gitignore

@ -0,0 +1,44 @@
# Compiled class file
*.class
*.iml
*.idea
target/
logs/
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
*velocity.log*
# Eclipse #
.classpath
.project
.settings/
.DS_Store
_dockerCerts/
.factorypath
node_modules/
dist/
package-lock.json
yarn.lock

File diff suppressed because it is too large
+ 53 - 0
LICENSE


+ 114 - 0
README.md

@ -0,0 +1,114 @@
<p align="center">
    <img src="https://images.gitee.com/uploads/images/2019/0109/214218_d2aa949b_551203.png" width="300">
    <br>      
    <br>      
    <p align="center">
        Guns-Separation |sepəˈreɪʃn| 蕴意为分离版本。<br/>
        项目采用前后端分离架构,代码简洁,功能丰富,开箱即用,开创快速开发平台新趋势<br/>
        <br>
        <a href="https://www.antdv.com/docs/vue/introduce-cn/">
            <img src="https://img.shields.io/badge/vue--ant--design-2.1.0-blue.svg" alt="bootstrap">
        </a> 
        +
        <a href="http://spring.io/projects/spring-boot">
            <img src="https://img.shields.io/badge/spring--boot-2.3.1-green.svg" alt="spring-boot">
        </a>
        <a href="http://mp.baomidou.com">
            <img src="https://img.shields.io/badge/mybatis--plus-3.3.2-blue.svg" alt="mybatis-plus">
        </a>  
    </p>
</p>
-----------------------------------------------------------------------------------------------
### 在线演示
* 账号密码:superAdmin/123456,地址:https://sep.stylefeng.cn
### 官方公众号和微信群
<table>
    <tr>
        <td>官方公众号</td>
        <td><img src="https://images.gitee.com/uploads/images/2019/0415/104911_9bc924a5_551203.png" width="120"/></td>
        <td>扫码邀请入群</td>
        <td><img src="https://images.gitee.com/uploads/images/2019/0419/103622_d6e9fa5d_551203.png" width="120"/></td>
    </tr>
</table>
### 快速开始
准备以下环境:
1. npm,jdk1.8,maven 3.6或以上版本。
2. 您的IDE需要安装lombok插件。
前端运行:
1. cd _web/
2. npm install
3. npm run serve
后端运行:
1. 将数据库文件_sql/guns-separation.sql导入到数据库,注意修改sys_config表中参数
2. 修改guns-main/src/main/resources/application-local.yml文件,修改为您的数据库ip,账号和密码
3. 运行guns-main/src/main/java/cn/stylefeng/guns/GunsApplication类,即可启动后端程序
### 框架优势
1. 模块化架构设计,层次清晰,业务层推荐写到单独模块,方便升级。
2. 前后端分离架构,分离开发,分离部署,前后端互不影响。
3. 前端技术采用vue + antdv + axios。
3. 后端采用spring boot + mybatis-plus + hutool等,开源可靠。
4. 基于spring security(jwt) + 用户UUID双重认证。
5. 基于AOP实现的接口粒度的鉴权,最细粒度过滤权限资源。
6. 基于hibernate validator实现的校验框架,支持自定义校验注解。
7. 提供Request-No的响应header快速定位线上异常问题。
8. 在线用户可查,可在线踢人,同账号登录可同时在线,可单独在线(通过系统参数配置)。
9. 支持前端 + 后端在线代码生成(后续开放)。
10. 支持jenkins一键部署,另自带docker maven插件,支持docker部署。
11. 文件,短信,缓存,邮件等,利用接口封装,方便拓展。
12. 文件默认使用本地文件,短信默认使用阿里云sms,缓存默认使用内存缓存。
13. 文档齐全,持续更新,视频教程将发布到Bilibili(后续开放)。
### 功能介绍
1. 主控面板。控制台页面,可进行工作台,分析页,统计等功能的展示。
2. 用户管理。对企业用户和系统管理员用户的维护,可绑定用户职务,机构,角色,数据权限等。
3. 应用管理。通过应用来控制不同维度的菜单展示。
4. 机构管理。公司组织架构维护,支持多层级结构的树形结构。
5. 职位管理。用户职务管理,职务可作为用户的一个标签,职务目前没有和权限等其他功能挂钩。
6. 菜单管理。菜单目录,菜单,和按钮的维护是权限控制的基本单位。
7. 角色管理。角色绑定菜单后,可限制相关角色的人员登录系统的功能范围。角色也可以绑定数据授权范围。
8. 字典管理。系统内各种枚举类型的维护。
9. 访问日志。用户的登录和退出日志的查看和管理。
10. 操作日志。用户的操作业务的日志的查看和管理。
11. 服务监控。服务器的运行状态,Java虚拟机信息,jvm等数据的查看。
12. 在线用户。当前系统在线用户的查看。
13. 数据监控。druid控制台功能,可查看sql的运行信息。
14. 公告管理。系统的公告的管理。
15. 文件管理。文件的上传下载查看等操作,文件可使用本地存储,阿里云oss,腾讯cos接入,支持拓展。
16. 定时任务。定时任务的维护,通过cron表达式控制任务的执行频率。
17. 系统配置。系统运行的参数的维护,参数的配置与系统运行机制息息相关。
18. 邮件发送。发送邮件功能。
19. 短信发送。短信发送功能,可使用阿里云sms,腾讯云sms,支持拓展。
### 版权声明
本项目完全开源,无任何私有封装的jar,但请您务必遵守开源协议,若有违规者将追究法律责任。
Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
1. 请不要删除和修改根目录下的LICENSE文件。
2. 请不要删除和修改Guns源码头部的版权声明。
3. 请保留源码和相关描述文件的项目出处,作者声明等。
4. 分发源码时候,请注明软件出处https://gitee.com/stylefeng/guns-separation
5. 在修改包名,模块名称,项目代码等时,请注明软件出处https://gitee.com/stylefeng/guns-separation
若您的项目无法满足以上几点,可申请商业授权,获取Guns商业授权许可,联系qq:`332464581`,备注购买授权。
### stylefeng技术团队荣誉作品
| 成员组成 | 负责内容 |
| :---: | :---: |
| 冯硕楠 | 后端 |
| 徐玉祥 | 后端 | 
| 俞宝山 | 前端 |
官网:https://www.stylefeng.cn/

+ 924 - 0
_sql/guns-separation.sql

@ -0,0 +1,924 @@
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_app
-- ----------------------------
DROP TABLE IF EXISTS `sys_app`;
CREATE TABLE `sys_app`  (
  `id` bigint(20) NOT NULL COMMENT '主键id',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '应用名称',
  `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码',
  `active` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否默认激活(Y-是,N-否)',
  `status` tinyint(4) NOT NULL COMMENT '状态(字典 0正常 1停用 2删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '修改人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统应用表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_app
-- ----------------------------
INSERT INTO `sys_app` VALUES (1265476890672672821, '系统应用', 'system', 'Y', 0, '2020-03-25 19:07:00', 1265476890672672808, '2020-07-12 00:17:28', 1265476890672672808);
INSERT INTO `sys_app` VALUES (1265476890672672822, '开发管理', 'devtools', 'N', 0, '2020-03-26 08:40:33', 1265476890672672808, '2020-07-08 12:01:48', 1265476890672672808);
-- ----------------------------
-- Table structure for sys_config
-- ----------------------------
DROP TABLE IF EXISTS `sys_config`;
CREATE TABLE `sys_config`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
  `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码',
  `value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '值',
  `sys_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '是否是系统参数(Y-是,N-否)',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(4) NOT NULL COMMENT '状态(字典 0正常 1停用 2删除)',
  `group_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'DEFAULT' COMMENT '常量所属分类的编码,来自于“常量的分类”字典',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统参数配置表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_config
-- ----------------------------
INSERT INTO `sys_config` VALUES (1265117443880853504, '验证码开关', 'GUNS_KAPTCHA_OPEN', 'N', 'Y', '登录验证码开关 N关闭 Y打开', 0, 'DEFAULT', '2020-04-14 23:30:14', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1265117443880853506, 'jwt密钥', 'GUNS_JWT_SECRET', '', 'Y', '(重要)jwt密钥,默认为空,自行设置', 0, 'DEFAULT', '2020-05-26 06:35:19', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1265117443880853507, '默认密码', 'GUNS_DEFAULT_PASSWORD', '123456', 'Y', '默认密码', 0, 'DEFAULT', '2020-05-26 06:37:56', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1265117443880853508, 'token过期时间', 'GUNS_TOKEN_EXPIRE', '86400', 'Y', 'token过期时间(单位:秒)', 0, 'DEFAULT', '2020-05-27 11:54:49', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1265117443880853509, 'session会话过期时间', 'GUNS_SESSION_EXPIRE', '7200', 'Y', 'session会话过期时间(单位:秒)', 0, 'DEFAULT', '2020-05-27 11:54:49', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1265117443880853519, '阿里云短信keyId', 'GUNS_ALIYUN_SMS_ACCESSKEY_ID', '你的keyId', 'Y', '阿里云短信keyId', 0, 'ALIYUN_SMS', '2020-06-07 16:27:11', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1269547042242371585, '阿里云短信secret', 'GUNS_ALIYUN_SMS_ACCESSKEY_SECRET', '你的secret', 'Y', '阿里云短信secret', 0, 'ALIYUN_SMS', '2020-06-07 16:29:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1269547130041737217, '阿里云短信签名', 'GUNS_ALIYUN_SMS_SIGN_NAME', 'Guns快速开发平台', 'Y', '阿里云短信签名', 0, 'ALIYUN_SMS', '2020-06-07 16:29:58', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1269547279530926081, '阿里云短信-登录模板号', 'GUNS_ALIYUN_SMS_LOGIN_TEMPLATE_CODE', 'SMS_1877123456', 'Y', '阿里云短信-登录模板号', 0, 'ALIYUN_SMS', '2020-06-07 16:30:33', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1269547410879750145, '阿里云短信默认失效时间', 'GUNS_ALIYUN_SMS_INVALIDATE_MINUTES', '5', 'Y', '阿里云短信默认失效时间(单位:分钟)', 0, 'ALIYUN_SMS', '2020-06-07 16:31:04', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1269575927357071361, '腾讯云短信secretId', 'GUNS_TENCENT_SMS_SECRET_ID', '你的secretId', 'Y', '腾讯云短信secretId', 0, 'TENCENT_SMS', '2020-06-07 18:24:23', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1269575991693500418, '腾讯云短信secretKey', 'GUNS_TENCENT_SMS_SECRET_KEY', '你的secretkey', 'Y', '腾讯云短信secretKey', 0, 'TENCENT_SMS', '2020-06-07 18:24:39', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1269576044084551682, '腾讯云短信sdkAppId', 'GUNS_TENCENT_SMS_SDK_APP_ID', '1400375123', 'Y', '腾讯云短信sdkAppId', 0, 'TENCENT_SMS', '2020-06-07 18:24:51', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1269576089294954497, '腾讯云短信签名', 'GUNS_TENCENT_SMS_SIGN', 'Guns快速开发平台', 'Y', '腾讯云短信签名', 0, 'TENCENT_SMS', '2020-06-07 18:25:02', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270378172860403713, '邮箱host', 'GUNS_EMAIL_HOST', 'smtp.126.com', 'Y', '邮箱host', 0, 'EMAIL', '2020-06-09 23:32:14', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270378295543795714, '邮箱用户名', 'GUNS_EMAIL_USERNAME', 'test@126.com', 'Y', '邮箱用户名', 0, 'EMAIL', '2020-06-09 23:32:43', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270378340510928897, '邮箱密码', 'GUNS_EMAIL_PASSWORD', '你的邮箱密码', 'Y', '邮箱密码', 0, 'EMAIL', '2020-06-09 23:32:54', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270378527358783489, '邮箱端口', 'GUNS_EMAIL_PORT', '465', 'Y', '邮箱端口', 0, 'EMAIL', '2020-06-09 23:33:38', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270378790035460097, '邮箱是否开启ssl', 'GUNS_EMAIL_SSL', 'true', 'Y', '邮箱是否开启ssl', 0, 'EMAIL', '2020-06-09 23:34:41', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270380786649972737, '邮箱发件人', 'GUNS_EMAIL_FROM', 'test@126.com', 'Y', '邮箱发件人', 0, 'EMAIL', '2020-06-09 23:42:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270380786649972738, 'win本地上传文件路径', 'GUNS_FILE_UPLOAD_PATH_FOR_WINDOWS', 'd:/tmp', 'Y', 'win本地上传文件路径', 0, 'FILE_PATH', '2020-06-09 23:42:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270380786649972739, 'linux本地上传文件路径', 'GUNS_FILE_UPLOAD_PATH_FOR_LINUX', '/tmp', 'Y', 'linux本地上传文件路径', 0, 'FILE_PATH', '2020-06-09 23:42:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270380786649982740, 'Guns演示环境', 'GUNS_DEMO_ENV_FLAG', 'false', 'Y', 'Guns演示环境的开关,true-打开,false-关闭,如果演示环境开启,则只能读数据不能写数据', 0, 'DEFAULT', '2020-06-09 23:42:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270380786649982741, 'Guns放开XSS过滤的接口', 'GUNS_UN_XSS_FILTER_URL', '/demo/xssfilter,/demo/unxss', 'Y', '多个url可以用英文逗号隔开', 0, 'DEFAULT', '2020-06-09 23:42:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1270380786649982742, '单用户登陆的开关', 'GUNS_ENABLE_SINGLE_LOGIN', 'false', 'Y', '单用户登陆的开关,true-打开,false-关闭,如果一个人登录两次,就会将上一次登陆挤下去', 0, 'DEFAULT', '2020-06-09 23:42:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1280694183769792514, 'druid监控登录账号', 'GUNS_DRUID_USERNAME', '', 'Y', 'druid监控登录账号', 0, 'DEFAULT', '2020-07-08 10:44:22', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_config` VALUES (1280694281648070658, 'druid监控界面登录密码', 'GUNS_DRUID_PASSWORD', '', 'Y', 'druid监控登录密码', 0, 'DEFAULT', '2020-07-08 10:44:46', 1265476890672672808, NULL, NULL);
-- ----------------------------
-- Table structure for sys_dict_data
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_data`;
CREATE TABLE `sys_dict_data`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `type_id` bigint(20) NOT NULL COMMENT '字典类型id',
  `value` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '值',
  `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码',
  `sort` int(11) NOT NULL COMMENT '排序',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(4) NOT NULL COMMENT '状态(字典 0正常 1停用 2删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统字典值表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_dict_data
-- ----------------------------
INSERT INTO `sys_dict_data` VALUES (1265216536659087357, 1265216211667636234, '男', '1', 100, '男性', 0, '2020-04-01 10:23:29', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216536659087358, 1265216211667636234, '女', '2', 100, '女性', 0, '2020-04-01 10:23:49', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216536659087359, 1265216211667636234, '未知', '3', 100, '未知性别', 0, '2020-04-01 10:24:01', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216536659087361, 1265216211667636235, '默认常量', 'DEFAULT', 100, '默认常量,都以GUNS_开头的', 0, '2020-04-14 23:25:45', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216536659087363, 1265216211667636235, '阿里云短信', 'ALIYUN_SMS', 100, '阿里云短信配置', 0, '2020-04-14 23:25:45', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216536659087364, 1265216211667636235, '腾讯云短信', 'TENCENT_SMS', 100, '腾讯云短信', 0, '2020-04-14 23:25:45', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216536659087365, 1265216211667636235, '邮件配置', 'EMAIL', 100, '邮箱配置', 0, '2020-04-14 23:25:45', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216536659087366, 1265216211667636235, '文件上传路径', 'FILE_PATH', 100, '文件上传路径', 0, '2020-04-14 23:25:45', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216617500102656, 1265216211667636226, '正常', '0', 100, '正常', 0, '2020-05-26 17:41:44', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216617500102657, 1265216211667636226, '停用', '1', 100, '停用', 0, '2020-05-26 17:42:03', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265216938389524482, 1265216211667636226, '删除', '2', 100, '删除', 0, '2020-05-26 17:43:19', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265217669028892673, 1265217074079453185, '否', 'N', 100, '否', 0, '2020-05-26 17:46:14', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265217706584690689, 1265217074079453185, '是', 'Y', 100, '是', 0, '2020-05-26 17:46:23', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265220776437731330, 1265217846770913282, '登录', '1', 100, '登录', 0, '2020-05-26 17:58:34', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265220806070489090, 1265217846770913282, '登出', '2', 100, '登出', 0, '2020-05-26 17:58:41', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265221129564573697, 1265221049302372354, '目录', '0', 100, '目录', 0, '2020-05-26 17:59:59', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265221163119005697, 1265221049302372354, '菜单', '1', 100, '菜单', 0, '2020-05-26 18:00:07', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265221188091891713, 1265221049302372354, '按钮', '2', 100, '按钮', 0, '2020-05-26 18:00:13', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265466389204967426, 1265466149622128641, '未发送', '0', 100, '未发送', 0, '2020-05-27 10:14:33', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265466432670539778, 1265466149622128641, '发送成功', '1', 100, '发送成功', 0, '2020-05-27 10:14:43', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265466486097584130, 1265466149622128641, '发送失败', '2', 100, '发送失败', 0, '2020-05-27 10:14:56', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265466530477514754, 1265466149622128641, '失效', '3', 100, '失效', 0, '2020-05-27 10:15:07', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265466835009150978, 1265466752209395713, '无', '0', 100, '无', 0, '2020-05-27 10:16:19', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265466874758569986, 1265466752209395713, '组件', '1', 100, '组件', 0, '2020-05-27 10:16:29', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265466925476093953, 1265466752209395713, '内链', '2', 100, '内链', 0, '2020-05-27 10:16:41', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265466962209808385, 1265466752209395713, '外链', '3', 100, '外链', 0, '2020-05-27 10:16:50', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265467428423475202, 1265467337566461954, '系统权重', '1', 100, '系统权重', 0, '2020-05-27 10:18:41', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265467503090475009, 1265467337566461954, '业务权重', '2', 100, '业务权重', 0, '2020-05-27 10:18:59', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265468138431062018, 1265468028632571905, '全部数据', '1', 100, '全部数据', 0, '2020-05-27 10:21:30', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265468194928336897, 1265468028632571905, '本部门及以下数据', '2', 100, '本部门及以下数据', 0, '2020-05-27 10:21:44', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265468241992622082, 1265468028632571905, '本部门数据', '3', 100, '本部门数据', 0, '2020-05-27 10:21:55', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265468273634451457, 1265468028632571905, '仅本人数据', '4', 100, '仅本人数据', 0, '2020-05-27 10:22:02', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265468302046666753, 1265468028632571905, '自定义数据', '5', 100, '自定义数据', 0, '2020-05-27 10:22:09', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265468508100239362, 1265468437904367618, 'app', '1', 100, 'app', 0, '2020-05-27 10:22:58', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265468543433056258, 1265468437904367618, 'pc', '2', 100, 'pc', 0, '2020-05-27 10:23:07', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1265468576874242050, 1265468437904367618, '其他', '3', 100, '其他', 0, '2020-05-27 10:23:15', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617233011335170, 1275617093517172738, '其它', '0', 100, '其它', 0, '2020-06-24 10:30:23', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617295355469826, 1275617093517172738, '增加', '1', 100, '增加', 0, '2020-06-24 10:30:38', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617348610547714, 1275617093517172738, '删除', '2', 100, '删除', 0, '2020-06-24 10:30:50', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617395515449346, 1275617093517172738, '编辑', '3', 100, '编辑', 0, '2020-06-24 10:31:02', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617433612312577, 1275617093517172738, '更新', '4', 100, '更新', 0, '2020-06-24 10:31:11', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617472707420161, 1275617093517172738, '查询', '5', 100, '查询', 0, '2020-06-24 10:31:20', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617502973517826, 1275617093517172738, '详情', '6', 100, '详情', 0, '2020-06-24 10:31:27', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617536959963137, 1275617093517172738, '树', '7', 100, '树', 0, '2020-06-24 10:31:35', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617619524837377, 1275617093517172738, '导入', '8', 100, '导入', 0, '2020-06-24 10:31:55', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617651816783873, 1275617093517172738, '导出', '9', 100, '导出', 0, '2020-06-24 10:32:03', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617683475390465, 1275617093517172738, '授权', '10', 100, '授权', 0, '2020-06-24 10:32:10', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617709928865793, 1275617093517172738, '强退', '11', 100, '强退', 0, '2020-06-24 10:32:17', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617739091861505, 1275617093517172738, '清空', '12', 100, '清空', 0, '2020-06-24 10:32:23', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1275617788601425921, 1275617093517172738, '修改状态', '13', 100, '修改状态', 0, '2020-06-24 10:32:35', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1277774590944317441, 1277774529430654977, '阿里云', '1', 100, '阿里云', 0, '2020-06-30 09:22:57', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1277774666055913474, 1277774529430654977, '腾讯云', '2', 100, '腾讯云', 0, '2020-06-30 09:23:15', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1277774695168577538, 1277774529430654977, 'minio', '3', 100, 'minio', 0, '2020-06-30 09:23:22', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1277774726835572737, 1277774529430654977, '本地', '4', 100, '本地', 0, '2020-06-30 09:23:29', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1278607123583868929, 1278606951432855553, '运行', '1', 100, '运行', 0, '2020-07-02 16:31:08', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1278607162943217666, 1278606951432855553, '停止', '2', 100, '停止', 0, '2020-07-02 16:31:18', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1278939265862004738, 1278911800547147777, '通知', '1', 100, '通知', 0, '2020-07-03 14:30:57', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1278939319922388994, 1278911800547147777, '公告', '2', 100, '公告', 0, '2020-07-03 14:31:10', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1278939399001796609, 1278911952657776642, '草稿', '0', 100, '草稿', 0, '2020-07-03 14:31:29', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1278939432686252034, 1278911952657776642, '发布', '1', 100, '发布', 0, '2020-07-03 14:31:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1278939458804183041, 1278911952657776642, '撤回', '2', 100, '撤回', 0, '2020-07-03 14:31:43', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_data` VALUES (1278939485878415362, 1278911952657776642, '删除', '3', 100, '删除', 0, '2020-07-03 14:31:50', 1265476890672672808, NULL, NULL);
-- ----------------------------
-- Table structure for sys_dict_type
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_type`;
CREATE TABLE `sys_dict_type`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
  `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码',
  `sort` int(11) NOT NULL COMMENT '排序',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(4) NOT NULL COMMENT '状态(字典 0正常 1停用 2删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统字典类型表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_dict_type
-- ----------------------------
INSERT INTO `sys_dict_type` VALUES (1265216211667636226, '通用状态', 'common_status', 100, '通用状态', 0, '2020-05-26 17:40:26', 1265476890672672808, '2020-06-08 11:31:47', 1265476890672672808);
INSERT INTO `sys_dict_type` VALUES (1265216211667636234, '性别', 'sex', 100, '性别字典', 0, '2020-04-01 10:12:30', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1265216211667636235, '常量的分类', 'consts_type', 100, '常量的分类,用于区别一组配置', 0, '2020-04-14 23:24:13', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1265217074079453185, '是否', 'yes_or_no', 100, '是否', 0, '2020-05-26 17:43:52', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1265217846770913282, '访问类型', 'vis_type', 100, '访问类型', 0, '2020-05-26 17:46:56', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1265221049302372354, '菜单类型', 'menu_type', 100, '菜单类型', 0, '2020-05-26 17:59:39', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1265466149622128641, '发送类型', 'send_type', 100, '发送类型', 0, '2020-05-27 10:13:36', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1265466752209395713, '打开方式', 'open_type', 100, '打开方式', 0, '2020-05-27 10:16:00', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1265467337566461954, '菜单权重', 'menu_weight', 100, '菜单权重', 0, '2020-05-27 10:18:19', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1265468028632571905, '数据范围类型', 'data_scope_type', 100, '数据范围类型', 0, '2020-05-27 10:21:04', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1265468437904367618, '短信发送来源', 'sms_send_source', 100, '短信发送来源', 0, '2020-05-27 10:22:42', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1275617093517172738, '操作类型', 'op_type', 100, '操作类型', 0, '2020-06-24 10:29:50', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1277774529430654977, '文件存储位置', 'file_storage_location', 100, '文件存储位置', 0, '2020-06-30 09:22:42', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1278606951432855553, '运行状态', 'run_status', 100, '定时任务允许状态', 0, '2020-07-02 16:30:27', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1278911800547147777, '通知公告类型', 'notice_type', 100, '通知公告类型', 0, '2020-07-03 12:41:49', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_dict_type` VALUES (1278911952657776642, '通知公告状态', 'notice_status', 100, '通知公告状态', 0, '2020-07-03 12:42:25', 1265476890672672808, NULL, NULL);
-- ----------------------------
-- Table structure for sys_emp
-- ----------------------------
DROP TABLE IF EXISTS `sys_emp`;
CREATE TABLE `sys_emp`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `job_num` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '工号',
  `org_id` bigint(20) NOT NULL COMMENT '所属机构id',
  `org_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '所属机构名称',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '员工表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_emp
-- ----------------------------
INSERT INTO `sys_emp` VALUES (1275735541155614721, '102', 1265476890672672769, '华夏集团北京分公司');
INSERT INTO `sys_emp` VALUES (1280700700074041345, '110', 1265476890672672771, '研发部');
INSERT INTO `sys_emp` VALUES (1280709549107552257, '100', 1265476890672672770, '华夏集团成都分公司');
-- ----------------------------
-- Table structure for sys_emp_ext_org_pos
-- ----------------------------
DROP TABLE IF EXISTS `sys_emp_ext_org_pos`;
CREATE TABLE `sys_emp_ext_org_pos`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `emp_id` bigint(20) NOT NULL COMMENT '员工id',
  `org_id` bigint(20) NOT NULL COMMENT '机构id',
  `pos_id` bigint(20) NOT NULL COMMENT '岗位id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '员工附属机构岗位表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_emp_ext_org_pos
-- ----------------------------
-- ----------------------------
-- Table structure for sys_emp_pos
-- ----------------------------
DROP TABLE IF EXISTS `sys_emp_pos`;
CREATE TABLE `sys_emp_pos`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `emp_id` bigint(20) NOT NULL COMMENT '员工id',
  `pos_id` bigint(20) NOT NULL COMMENT '职位id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '员工职位关联表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_emp_pos
-- ----------------------------
INSERT INTO `sys_emp_pos` VALUES (1280710811995709441, 1275735541155614721, 1265476890672672787);
INSERT INTO `sys_emp_pos` VALUES (1280710828479324161, 1280700700074041345, 1265476890672672790);
INSERT INTO `sys_emp_pos` VALUES (1281042262003867649, 1280709549107552257, 1265476890672672787);
-- ----------------------------
-- Table structure for sys_file_info
-- ----------------------------
DROP TABLE IF EXISTS `sys_file_info`;
CREATE TABLE `sys_file_info`  (
  `id` bigint(20) NOT NULL COMMENT '主键id',
  `file_location` tinyint(4) NOT NULL COMMENT '文件存储位置(1:阿里云,2:腾讯云,3:minio,4:本地)',
  `file_bucket` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件仓库',
  `file_origin_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文件名称(上传时候的文件名)',
  `file_suffix` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件后缀',
  `file_size_kb` bigint(20) NULL DEFAULT NULL COMMENT '文件大小kb',
  `file_size_info` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件大小信息,计算后的',
  `file_object_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '存储到bucket的名称(文件唯一标识id)',
  `file_path` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '存储路径',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建用户',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '修改用户',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '文件信息表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_file_info
-- ----------------------------
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `pid` bigint(20) NOT NULL COMMENT '父id',
  `pids` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '父ids',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
  `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码',
  `type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '菜单类型(字典 0目录 1菜单 2按钮)',
  `icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标',
  `router` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '路由地址',
  `component` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组件地址',
  `permission` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限标识',
  `application` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '应用分类(应用编码)',
  `open_type` tinyint(4) NOT NULL COMMENT '打开方式(字典 0无 1组件 2内链 3外链)',
  `visible` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '是否可见(Y-是,N-否)',
  `link` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '链接地址',
  `redirect` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '重定向地址',
  `weight` tinyint(4) NULL DEFAULT NULL COMMENT '权重(字典 1系统权重 2业务权重)',
  `sort` int(11) NOT NULL COMMENT '排序',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '状态(字典 0正常 1停用 2删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '修改人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统菜单表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_menu
-- ----------------------------
INSERT INTO `sys_menu` VALUES (1143468867767607297, 1265474261896806408, '[0],[1265474261896806402],[1265474261896806408],', '设为默认应用', 'sys_app_mgr_set_as_default', 2, '', '', '', 'sysApp:setAsDefault', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 17:14:56', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1264619904766685186, 0, '[0],', '开发管理', 'system_tools', 0, 'euro', '/tools', 'PageView', '', 'devtools', 1, 'Y', NULL, '', 1, 3, '', 0, '2020-05-25 02:10:55', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1264620409496645634, 1264619904766685186, '[0],[1264619904766685186],', '系统配置', 'system_tools_config', 1, '', '/config', 'system/config/index', '', 'devtools', 1, 'Y', NULL, '', 1, 1, '', 0, '2020-05-25 02:12:56', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1264622039642255361, 0, '[0],', '主控面板', 'system_index', 0, 'home', '/', 'RouteView', '', 'system', 0, 'Y', NULL, '/analysis', 1, 1, '', 0, '2020-05-25 02:19:24', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1264622671778394114, 1264622039642255361, '[0],[1264622039642255361],', '分析页', 'system_index_dashboard', 1, '', 'analysis', 'system/dashboard/Analysis', '', 'system', 0, 'Y', NULL, '', 1, 1, '', 0, '2020-05-25 02:21:55', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1264623145550196737, 1264622039642255361, '[0],[1264622039642255361],', '工作台', 'system_index_workplace', 1, '', 'workplace', 'system/dashboard/Workplace', '', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-25 02:23:48', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806402, 0, '[0],', '系统管理', 'sys_mgr', 0, 'setting', '/sys', 'PageView', '', 'system', 0, 'Y', NULL, '', 1, 2, '', 0, '2020-03-27 15:58:16', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806403, 1265474261896806402, '[0],[1265474261896806402],', '用户管理', 'sys_user_mgr', 1, '', '/user', 'system/user/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 16:10:21', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806404, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户查询', 'sys_user_mgr_page', 2, '', '', '', 'sysUser:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 16:36:49', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806405, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户增加', 'sys_user_mgr_add', 2, '', '', '', 'sysUser:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 16:37:35', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806406, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户删除', 'sys_user_mgr_delete', 2, '', '', '', 'sysUser:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 16:37:58', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806407, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户详情', 'sys_user_mgr_detail', 2, '', '', '', 'sysUser:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 16:38:25', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806408, 1265474261896806402, '[0],[1265474261896806402],', '应用管理', 'sys_app_mgr', 1, '', '/app', 'system/app/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 16:40:21', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806409, 1265474261896806408, '[0],[1265474261896806402],[1265474261896806408],', '应用查询', 'sys_app_mgr_page', 2, '', '', '', 'sysApp:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 16:41:58', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806410, 1265474261896806408, '[0],[1265474261896806402],[1265474261896806408],', '应用增加', 'sys_app_mgr_add', 2, '', '', '', 'sysApp:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 16:44:10', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806411, 1265474261896806408, '[0],[1265474261896806402],[1265474261896806408],', '应用删除', 'sys_app_mgr_delete', 2, '', '', '', 'sysApp:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 17:14:29', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806412, 1265474261896806408, '[0],[1265474261896806402],[1265474261896806408],', '应用详情', 'sys_app_mgr_detail', 2, '', '', '', 'sysApp:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 17:14:56', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806413, 1265474261896806402, '[0],[1265474261896806402],', '机构管理', 'sys_org_mgr', 1, '', '/org', 'system/org/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 17:15:39', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806414, 1265474261896806413, '[0],[1265474261896806402],[1265474261896806413]', '机构查询', 'sys_org_mgr_page', 2, '', '', '', 'sysOrg:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 17:17:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806415, 1265474261896806413, '[0],[1265474261896806402],[1265474261896806413]', '机构增加', 'sys_org_mgr_add', 2, '', '', '', 'sysOrg:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 17:19:53', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806416, 1265474261896806413, '[0],[1265474261896806402],[1265474261896806413]', '机构删除', 'sys_org_mgr_delete', 2, '', '', '', 'sysOrg:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 17:20:48', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806417, 1265474261896806413, '[0],[1265474261896806402],[1265474261896806413]', '机构详情', 'sys_org_mgr_detail', 2, '', '', '', 'sysOrg:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 17:21:15', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806418, 1265474261896806413, '[0],[1265474261896806402],[1265474261896806413]', '机构树', 'sys_org_mgr_tree', 2, '', '', '', 'sysOrg:tree', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 17:21:58', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806419, 1265474261896806402, '[0],[1265474261896806402],', '职位管理', 'sys_pos_mgr', 1, '', '/pos', 'system/pos/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:38:31', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806420, 1265474261896806419, '[0],[1265474261896806402],[1265474261896806419],', '职位查询', 'sys_pos_mgr_page', 2, '', '', '', 'sysPos:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:41:48', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806421, 1265474261896806419, '[0],[1265474261896806402],[1265474261896806419],', '职位增加', 'sys_pos_mgr_add', 2, '', '', '', 'sysPos:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:42:20', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806422, 1265474261896806419, '[0],[1265474261896806402],[1265474261896806419],', '职位删除', 'sys_pos_mgr_delete', 2, '', '', '', 'sysPos:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:42:39', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806423, 1265474261896806419, '[0],[1265474261896806402],[1265474261896806419],', '职位详情', 'sys_pos_mgr_detail', 2, '', '', '', 'sysPos:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:43:00', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806424, 1265474261896806402, '[0],[1265474261896806402],', '菜单管理', 'sys_menu_mgr', 1, '', '/menu', 'system/menu/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:44:35', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806425, 1265474261896806424, '[0],[1265474261896806402],[1265474261896806424],', '菜单列表', 'sys_menu_mgr_list', 2, '', '', '', 'sysMenu:list', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:45:20', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806426, 1265474261896806424, '[0],[1265474261896806402],[1265474261896806424],', '菜单增加', 'sys_menu_mgr_add', 2, '', '', '', 'sysMenu:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:45:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806427, 1265474261896806424, '[0],[1265474261896806402],[1265474261896806424],', '菜单删除', 'sys_menu_mgr_delete', 2, '', '', '', 'sysMenu:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:46:01', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806428, 1265474261896806424, '[0],[1265474261896806402],[1265474261896806424],', '菜单详情', 'sys_menu_mgr_detail', 2, '', '', '', 'sysMenu:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:46:22', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806429, 1265474261896806424, '[0],[1265474261896806402],[1265474261896806424],', '菜单树', 'sys_menu_mgr_tree', 2, '', '', '', 'sysMenu:tree', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-27 18:47:50', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806430, 1265474261896806402, '[0],[1265474261896806402],', '角色管理', 'sys_role_mgr', 1, '', '/role', 'system/role/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-03-28 16:01:09', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806431, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色查询', 'sys_role_mgr_page', 2, '', '', '', 'sysRole:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-28 16:02:09', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806432, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色增加', 'sys_role_mgr_add', 2, '', '', '', 'sysRole:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-28 16:02:27', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806433, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色删除', 'sys_role_mgr_delete', 2, '', '', '', 'sysRole:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-28 16:02:46', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806434, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色详情', 'sys_role_mgr_detail', 2, '', '', '', 'sysRole:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-03-28 16:03:01', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806435, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色授权菜单', 'sys_role_mgr_grant_menu', 2, '', '', '', 'sysRole:grantMenu', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 09:16:27', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806436, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色授权数据', 'sys_role_mgr_grant_data', 2, '', '', '', 'sysRole:grantData', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 09:16:56', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806437, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户授权角色', 'sys_user_mgr_grant_role', 2, '', '', '', 'sysUser:grantRole', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 09:22:01', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806438, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户授权数据', 'sys_user_mgr_grant_data', 2, '', '', '', 'sysUser:grantData', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 09:22:13', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806439, 0, '[0],', '日志管理', 'sys_log_mgr', 0, 'read', '/log', 'PageView', '', 'system', 1, 'Y', NULL, '', 1, 4, '', 0, '2020-04-01 09:25:01', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806440, 1265474261896806439, '[0],[1265474261896806439],', '访问日志', 'sys_log_mgr_vis_log', 1, '', '/vislog', 'system/log/vislog/index', '', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 09:26:40', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806441, 1265474261896806439, '[0],[1265474261896806439],', '操作日志', 'sys_log_mgr_op_log', 1, '', '/oplog', 'system/log/oplog/index', '', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 09:26:59', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806442, 1265474261896806402, '[0],[1265474261896806402],', '字典管理', 'sys_dict_mgr', 1, '', '/dict', 'system/dict/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:17:26', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806443, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典类型增加', 'sys_dict_mgr_dict_type_add', 2, '', '', '', 'sysDictType:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:19:58', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806444, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典类型查询', 'sys_dict_mgr_dict_type_page', 2, '', '', '', 'sysDictType:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:20:22', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806445, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典类型删除', 'sys_dict_mgr_dict_type_delete', 2, '', '', '', 'sysDictType:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:21:30', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806446, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典类型编辑', 'sys_dict_mgr_dict_type_edit', 2, '', '', '', 'sysDictType:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:21:42', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806447, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典类型详情', 'sys_dict_mgr_dict_type_detail', 2, '', '', '', 'sysDictType:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:22:06', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806448, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典类型下拉', 'sys_dict_mgr_dict_type_drop_down', 2, '', '', '', 'sysDictType:dropDown', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:22:23', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806449, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典值增加', 'sys_dict_mgr_dict_add', 2, '', '', '', 'sysDictData:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:22:51', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806450, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典值查询', 'sys_dict_mgr_dict_page', 2, '', '', '', 'sysDictData:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:23:11', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806451, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典值删除', 'sys_dict_mgr_dict_delete', 2, '', '', '', 'sysDictData:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:23:26', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806452, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典值编辑', 'sys_dict_mgr_dict_edit', 2, '', '', '', 'sysDictData:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:24:21', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806453, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典值详情', 'sys_dict_mgr_dict_detail', 2, '', '', '', 'sysDictData:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:24:42', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806454, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典值列表', 'sys_dict_mgr_dict_list', 2, '', '', '', 'sysDictData:list', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 11:24:58', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806455, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户更新信息', 'sys_user_mgr_update_info', 2, '', '', '', 'sysUser:updateInfo', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 16:19:32', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265474261896806456, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户修改密码', 'sys_user_mgr_update_pwd', 2, '', '', '', 'sysUser:updatePwd', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-04-01 16:20:25', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265569017708572674, 1264620409496645634, '[0],[1264619904766685186],[1264620409496645634],', '配置查询', 'system_tools_config_page', 2, '', '', '', 'sysConfig:page', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-27 17:02:22', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265569101544321025, 1264620409496645634, '[0],[1264619904766685186],[1264620409496645634],', '配置列表', 'system_tools_config_list', 2, '', '', '', 'sysConfig:list', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-27 17:02:42', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265569176311984129, 1264620409496645634, '[0],[1264619904766685186],[1264620409496645634],', '配置详情', 'system_tools_config_detail', 2, '', '', '', 'sysConfig:detail', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-27 17:02:59', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265569306834530306, 1264620409496645634, '[0],[1264619904766685186],[1264620409496645634],', '配置增加', 'system_tools_config_add', 2, '', '', '', 'sysConfig:add', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-27 17:03:31', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265569365085024257, 1264620409496645634, '[0],[1264619904766685186],[1264620409496645634],', '配置删除', 'system_tools_config_delete', 2, '', '', '', 'sysConfig:delete', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-27 17:03:44', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1265569410756800513, 1264620409496645634, '[0],[1264619904766685186],[1264620409496645634],', '配置编辑', 'system_tools_config_edit', 2, '', '', '', 'sysConfig:edit', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-27 17:03:55', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1266253410563497986, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色拥有菜单', 'sys_role_mgr_own_menu', 2, '', '', '', 'sysRole:ownMenu', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-29 14:21:54', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1266253721189457921, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色拥有数据', 'sys_role_mgr_own_data', 2, '', '', '', 'sysRole:ownData', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-29 14:23:08', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1266254786341347330, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户拥有角色', 'sys_user_mgr_own_role', 2, '', '', '', 'sysUser:ownRole', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-29 14:27:22', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1266254867962503169, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户拥有数据', 'sys_user_mgr_own_data', 2, '', '', '', 'sysUser:ownData', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-29 14:27:41', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1266263464951910401, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户重置密码', 'sys_user_mgr_reset_pwd', 2, '', '', '', 'sysUser:resetPwd', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-29 15:01:51', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1266266165173522433, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典类型列表', 'sys_dict_mgr_dict_type_list', 2, '', '', '', 'sysDictType:list', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-29 15:12:35', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1266274489566629889, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色下拉', 'sys_role_mgr_drop_down', 2, '', '', '', 'sysRole:dropDown', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-05-29 15:45:39', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1267997057113899009, 1265474261896806424, '[0],[1265474261896806402],[1265474261896806424],', '菜单授权树', 'sys_menu_mgr_grant_tree', 2, '', '', '', 'sysMenu:treeForGrant', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-03 09:50:31', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1267997358927626241, 1265474261896806424, '[0],[1265474261896806402],[1265474261896806424],', '菜单切换', 'sys_menu_mgr_change', 2, '', '', '', 'sysMenu:change', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-03 09:51:43', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1268815024873418753, 0, '[0],', '系统监控', 'sys_monitor_mgr', 0, 'deployment-unit', '/monitor', 'PageView', '', 'system', 1, 'Y', NULL, '', 1, 5, '', 0, '2020-06-05 16:00:50', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1268815296198750210, 1268815024873418753, '[0],[1268815024873418753],', '在线用户', 'sys_monitor_mgr_online_user', 1, '', '/onlineUser', 'system/onlineUser/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-06-05 16:01:55', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1268815479720521730, 1268815024873418753, '[0],[1268815024873418753],', '服务监控', 'sys_monitor_mgr_machine_monitor', 1, '', '/machine', 'system/machine/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-06-05 16:02:38', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1268815761716162561, 1268815296198750210, '[0],[1268815024873418753],[1268815296198750210],', '在线用户列表', 'sys_monitor_mgr_online_user_list', 2, '', '', '', 'sysOnlineUser:list', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-05 16:03:46', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1268815887520116737, 1268815296198750210, '[0],[1268815024873418753],[1268815296198750210],', '在线用户强退', 'sys_monitor_mgr_online_user_force_exist', 2, '', '', '', 'sysOnlineUser:forceExist', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-05 16:04:16', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1268816212092137474, 1268815479720521730, '[0],[1268815024873418753],[1268815479720521730],', '服务监控查询', 'sys_monitor_mgr_machine_monitor_query', 2, '', '', '', 'sysMachine:query', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-05 16:05:33', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275265630030802946, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户修改状态', 'sys_user_mgr_change_status', 2, '', '', '', 'sysUser:changeStatus', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-23 11:13:14', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275266284937818114, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典类型修改状态', 'sys_dict_mgr_dict_type_change_status', 2, '', '', '', 'sysDictType:changeStatus', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-23 11:15:50', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275266798761029633, 1265474261896806442, '[0],[1265474261896806402],[1265474261896806442],', '字典值修改状态', 'sys_dict_mgr_dict_change_status', 2, '', '', '', 'sysDictData:changeStatus', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-23 11:17:53', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275723127652982786, 0, '[0],', '文件管理', 'sys_file_mgr', 0, 'file', '/file', 'PageView', '', 'system', 1, 'Y', NULL, '', 1, 7, '', 0, '2020-06-24 17:31:10', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275723575222968321, 1275723127652982786, '[0],[1275723127652982786],', '系统文件', 'sys_file_mgr_sys_file', 1, '', '/file', 'system/file/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-06-24 17:32:57', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275723960612397057, 1275723575222968321, '[0],[1275723127652982786],[1275723575222968321],', '文件上传', 'sys_file_mgr_sys_file_upload', 2, '', '', '', 'sysFileInfo:upload', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-24 17:34:29', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275724070897426433, 1275723575222968321, '[0],[1275723127652982786],[1275723575222968321],', '文件下载', 'sys_file_mgr_sys_file_download', 2, '', '', '', 'sysFileInfo:download', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-24 17:34:55', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275724173720788993, 1275723575222968321, '[0],[1275723127652982786],[1275723575222968321],', '图片预览', 'sys_file_mgr_sys_file_preview', 2, '', '', '', 'sysFileInfo:preview', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-24 17:35:19', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275724250875011074, 1275723575222968321, '[0],[1275723127652982786],[1275723575222968321],', '文件查询', 'sys_file_mgr_sys_file_page', 2, '', '', '', 'sysFileInfo:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-24 17:35:38', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275724298933346306, 1275723575222968321, '[0],[1275723127652982786],[1275723575222968321],', '文件列表', 'sys_file_mgr_sys_file_list', 2, '', '', '', 'sysFileInfo:list', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-24 17:35:49', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275724346723246081, 1275723575222968321, '[0],[1275723127652982786],[1275723575222968321],', '文件详情', 'sys_file_mgr_sys_file_detail', 2, '', '', '', 'sysFileInfo:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-24 17:36:01', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1275724389635170305, 1275723575222968321, '[0],[1275723127652982786],[1275723575222968321],', '文件删除', 'sys_file_mgr_sys_file_delete', 2, '', '', '', 'sysFileInfo:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-24 17:36:11', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277153538518061058, 1268815024873418753, '[0],[1268815024873418753],', '数据监控', 'sys_monitor_mgr_druid', 1, '', '/druid', 'Iframe', '', 'system', 2, 'Y', 'http://localhost:82/druid', '', 1, 100, NULL, 0, '2020-06-28 16:15:07', 1265476890672672808, '2020-07-12 15:15:07', 1265476890672672808);
INSERT INTO `sys_menu` VALUES (1277507562966740993, 0, '[0],', '通知公告', 'sys_notice', 0, 'sound', '/notice', 'PageView', '', 'system', 1, 'Y', NULL, '', 1, 6, '', 0, '2020-06-29 15:41:53', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277508198718369793, 1277507562966740993, '[0],[1277507562966740993],', '公告管理', 'sys_notice_mgr', 1, '', '/notice', 'system/notice/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-06-29 15:44:24', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277508476016390146, 1277508198718369793, '[0],[1277507562966740993],[1277508198718369793],', '公告查询', 'sys_notice_mgr_page', 2, '', '', '', 'sysNotice:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-29 15:45:30', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277508587207389185, 1277508198718369793, '[0],[1277507562966740993],[1277508198718369793],', '公告增加', 'sys_notice_mgr_add', 2, '', '', '', 'sysNotice:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-29 15:45:57', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277508645722124290, 1277508198718369793, '[0],[1277507562966740993],[1277508198718369793],', '公告删除', 'sys_notice_mgr_delete', 2, '', '', '', 'sysNotice:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-29 15:46:11', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277508692291481601, 1277508198718369793, '[0],[1277507562966740993],[1277508198718369793],', '公告编辑', 'sys_notice_mgr_edit', 2, '', '', '', 'sysNotice:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-29 15:46:22', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277508737703211009, 1277508198718369793, '[0],[1277507562966740993],[1277508198718369793],', '公告查看', 'sys_notice_mgr_detail', 2, '', '', '', 'sysNotice:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-29 15:46:33', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277508811346800641, 1277508198718369793, '[0],[1277507562966740993],[1277508198718369793],', '公告修改状态', 'sys_notice_mgr_changeStatus', 2, '', '', '', 'sysNotice:changeStatus', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-29 15:46:50', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277520397092302850, 1277507562966740993, '[0],[1277507562966740993],', '已收公告', 'sys_notice_mgr_received', 1, '', '/noticeReceived', 'system/noticeReceived/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-06-29 16:32:53', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1277520608506195969, 1277520397092302850, '[0],[1277507562966740993],[1277520397092302850],', '已收公告查询', 'sys_notice_mgr_received_page', 2, '', '', '', 'sysNotice:received', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-06-29 16:33:43', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278256363012624386, 0, '[0],', '定时任务', 'sys_timers', 0, 'dashboard', '/timers', 'PageView', '', 'system', 1, 'Y', NULL, '', 1, 8, '', 0, '2020-07-01 17:17:20', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278256750994132994, 1278256363012624386, '[0],[1278256363012624386],', '任务管理', 'sys_timers_mgr', 1, '', '/timers', 'system/timers/index', '', 'system', 1, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:18:53', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278256962458357762, 1278256750994132994, '[0],[1278256363012624386],[1278256750994132994],', '定时任务查询', 'sys_timers_mgr_page', 2, '', '', '', 'sysTimers:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:19:43', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278257016556490753, 1278256750994132994, '[0],[1278256363012624386],[1278256750994132994],', '定时任务列表', 'sys_timers_mgr_list', 2, '', '', '', 'sysTimers:list', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:19:56', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278257074278502402, 1278256750994132994, '[0],[1278256363012624386],[1278256750994132994],', '定时任务详情', 'sys_timers_mgr_detail', 2, '', '', '', 'sysTimers:detail', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:20:10', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278257129441988610, 1278256750994132994, '[0],[1278256363012624386],[1278256750994132994],', '定时任务增加', 'sys_timers_mgr_add', 2, '', '', '', 'sysTimers:add', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:20:23', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278257168813920257, 1278256750994132994, '[0],[1278256363012624386],[1278256750994132994],', '定时任务删除', 'sys_timers_mgr_delete', 2, '', '', '', 'sysTimers:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:20:33', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278257213294514178, 1278256750994132994, '[0],[1278256363012624386],[1278256750994132994],', '定时任务编辑', 'sys_timers_mgr_edit', 2, '', '', '', 'sysTimers:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:20:43', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278257602249129986, 1278256750994132994, '[0],[1278256363012624386],[1278256750994132994],', '定时任务可执行列表', 'sys_timers_mgr_get_action_classes', 2, '', '', '', 'sysTimers:getActionClasses', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:22:16', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278257668988895234, 1278256750994132994, '[0],[1278256363012624386],[1278256750994132994],', '定时任务启动', 'sys_timers_mgr_start', 2, '', '', '', 'sysTimers:start', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:22:32', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278257714450956290, 1278256750994132994, '[0],[1278256363012624386],[1278256750994132994],', '定时任务关闭', 'sys_timers_mgr_stop', 2, '', '', '', 'sysTimers:stop', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-01 17:22:43', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278507646755840002, 1265474261896806440, '[0],[1265474261896806439],[1265474261896806440],', '访问日志查询', 'sys_log_mgr_vis_log_page', 2, '', '', '', 'sysVisLog:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 09:55:51', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278507920815857665, 1265474261896806440, '[0],[1265474261896806439],[1265474261896806440],', '访问日志清空', 'sys_log_mgr_vis_log_delete', 2, '', '', '', 'sysVisLog:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 09:56:57', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278508097945509889, 1265474261896806441, '[0],[1265474261896806439],[1265474261896806441],', '操作日志查询', 'sys_log_mgr_op_log_page', 2, '', '', '', 'sysOpLog:page', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 09:57:39', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278508241906606081, 1265474261896806441, '[0],[1265474261896806439],[1265474261896806441],', '操作日志清空', 'sys_log_mgr_op_log_delete', 2, '', '', '', 'sysOpLog:delete', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 09:58:13', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278509840213254146, 1265474261896806408, '[0],[1265474261896806402],[1265474261896806408],', '应用编辑', 'sys_app_mgr_edit', 2, '', '', '', 'sysApp:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 10:04:34', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278509945922297857, 1265474261896806408, '[0],[1265474261896806402],[1265474261896806408],', '应用列表', 'sys_app_mgr_list', 2, '', '', '', 'sysApp:list', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 10:04:59', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278534949191852033, 1264619904766685186, '[0],[1264619904766685186],', '邮件发送', 'sys_email_mgr', 1, '', '/email', 'system/email/index', '', 'devtools', 1, 'Y', NULL, '', 1, 100, NULL, 0, '2020-07-02 11:44:21', 1265476890672672808, '2020-07-04 00:16:26', 1265476890672672808);
INSERT INTO `sys_menu` VALUES (1278535276146237442, 1278534949191852033, '[0],[1264619904766685186],[1278534949191852033],', '发送文本邮件', 'sys_email_mgr_send_email', 2, '', '', '', 'email:sendEmail', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 11:45:39', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278535352889417730, 1278534949191852033, '[0],[1264619904766685186],[1278534949191852033],', '发送html邮件', 'sys_email_mgr_send_email_html', 2, '', '', '', 'email:sendEmailHtml', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 11:45:57', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278536878072569857, 1265474261896806424, '[0],[1265474261896806402],[1265474261896806424],', '菜单编辑', 'sys_menu_mgr_edit', 2, '', '', '', 'sysMenu:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 11:52:00', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278537486905155586, 1265474261896806413, '[0],[1265474261896806402],[1265474261896806413],', '机构列表', 'sys_org_mgr_list', 2, '', '', '', 'sysOrg:list', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 11:54:26', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278537535882043393, 1265474261896806413, '[0],[1265474261896806402],[1265474261896806413],', '机构编辑', 'sys_org_mgr_edit', 2, '', '', '', 'sysOrg:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 11:54:37', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278537871925485570, 1265474261896806419, '[0],[1265474261896806402],[1265474261896806419],', '职位列表', 'sys_pos_mgr_list', 2, '', '', '', 'sysPos:list', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 11:55:57', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278537914929684481, 1265474261896806419, '[0],[1265474261896806402],[1265474261896806419],', '职位编辑', 'sys_pos_mgr_edit', 2, '', '', '', 'sysPos:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 11:56:08', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278538248938889218, 1265474261896806430, '[0],[1265474261896806402],[1265474261896806430],', '角色编辑', 'sys_role_mgr_edit', 2, '', '', '', 'sysRole:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 11:57:27', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278538938717347842, 1264619904766685186, '[0],[1264619904766685186],', '短信管理', 'sys_sms_mgr', 1, '', '/sms', 'system/sms/index', '', 'devtools', 1, 'Y', NULL, '', 1, 100, NULL, 0, '2020-07-02 12:00:12', 1265476890672672808, '2020-07-04 00:16:38', 1265476890672672808);
INSERT INTO `sys_menu` VALUES (1278539520958025730, 1278538938717347842, '[0],[1264619904766685186],[1278538938717347842],', '发送验证码短信', 'sys_sms_mgr_send_login_message', 2, '', '', '', 'sms:sendLoginMessage', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 12:02:31', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278539601320890370, 1278538938717347842, '[0],[1264619904766685186],[1278538938717347842],', '验证短信验证码', 'sys_sms_mgr_validate_message', 2, '', '', '', 'sms:validateMessage', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 12:02:50', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278543148905136129, 1278538938717347842, '[0],[1264619904766685186],[1278538938717347842],', '短信发送记录查询', 'sys_sms_mgr_page', 2, '', '', '', 'sms:page', 'devtools', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 12:16:56', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278544017260281858, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户编辑', 'sys_user_mgr_edit', 2, '', '', '', 'sysUser:edit', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 12:20:23', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278544348966813698, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户修改头像', 'sys_user_mgr_update_avatar', 2, '', '', '', 'sysUser:updateAvatar', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 12:21:42', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278544420391616514, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户导出', 'sys_user_mgr_export', 2, '', '', '', 'sysUser:export', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-02 12:21:59', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_menu` VALUES (1278923983416270850, 1265474261896806403, '[0],[1265474261896806402],[1265474261896806403],', '用户选择器', 'sys_user_mgr_selector', 2, '', '', '', 'sysUser:selector', 'system', 0, 'Y', NULL, '', 1, 100, '', 0, '2020-07-03 13:30:14', 1265476890672672808, NULL, NULL);
-- ----------------------------
-- Table structure for sys_notice
-- ----------------------------
DROP TABLE IF EXISTS `sys_notice`;
CREATE TABLE `sys_notice`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `title` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标题',
  `content` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT '内容',
  `type` tinyint(4) NOT NULL COMMENT '类型(字典 1通知 2公告)',
  `public_user_id` bigint(20) NOT NULL COMMENT '发布人id',
  `public_user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '发布人姓名',
  `public_org_id` bigint(20) NULL DEFAULT NULL COMMENT '发布机构id',
  `public_org_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发布机构名称',
  `public_time` datetime(0) NULL DEFAULT NULL COMMENT '发布时间',
  `cancel_time` datetime(0) NULL DEFAULT NULL COMMENT '撤回时间',
  `status` tinyint(4) NOT NULL COMMENT '状态(字典 0草稿 1发布 2撤回 3删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '修改人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '通知表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_notice
-- ----------------------------
-- ----------------------------
-- Table structure for sys_notice_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_notice_user`;
CREATE TABLE `sys_notice_user`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `notice_id` bigint(20) NOT NULL COMMENT '通知公告id',
  `user_id` bigint(20) NOT NULL COMMENT '用户id',
  `status` tinyint(4) NOT NULL COMMENT '状态(字典 0未读 1已读)',
  `read_time` datetime(0) NULL DEFAULT NULL COMMENT '阅读时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统用户数据范围表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_notice_user
-- ----------------------------
-- ----------------------------
-- Table structure for sys_op_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_op_log`;
CREATE TABLE `sys_op_log`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
  `op_type` tinyint(4) NULL DEFAULT NULL COMMENT '操作类型',
  `success` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否执行成功(Y-是,N-否)',
  `message` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT '具体消息',
  `ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'ip',
  `location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  `browser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '浏览器',
  `os` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作系统',
  `url` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求地址',
  `class_name` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类名称',
  `method_name` varchar(500) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '方法名称',
  `req_method` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求方式(GET POST PUT DELETE)',
  `param` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '请求参数',
  `result` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '返回结果',
  `op_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间',
  `account` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作账号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统操作日志表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_op_log
-- ----------------------------
-- ----------------------------
-- Table structure for sys_org
-- ----------------------------
DROP TABLE IF EXISTS `sys_org`;
CREATE TABLE `sys_org`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `pid` bigint(20) NOT NULL COMMENT '父id',
  `pids` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '父ids',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
  `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码',
  `sort` int(11) NOT NULL COMMENT '排序',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',
  `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '状态(字典 0正常 1停用 2删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统组织机构表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_org
-- ----------------------------
INSERT INTO `sys_org` VALUES (1265476890651701250, 0, '[0],', '华夏集团', 'hxjt', 100, '华夏集团总公司', 0, '2020-03-26 16:50:53', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_org` VALUES (1265476890672672769, 1265476890651701250, '[0],[1265476890651701250],', '华夏集团北京分公司', 'hxjt_bj', 100, '华夏集团北京分公司', 0, '2020-03-26 16:55:42', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_org` VALUES (1265476890672672770, 1265476890651701250, '[0],[1265476890651701250],', '华夏集团成都分公司', 'hxjt_cd', 100, '华夏集团成都分公司', 0, '2020-03-26 16:56:02', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_org` VALUES (1265476890672672771, 1265476890672672769, '[0],[1265476890651701250],[1265476890672672769],', '研发部', 'hxjt_bj_yfb', 100, '华夏集团北京分公司研发部', 0, '2020-03-26 16:56:36', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_org` VALUES (1265476890672672772, 1265476890672672769, '[0],[1265476890651701250],[1265476890672672769],', '企划部', 'hxjt_bj_qhb', 100, '华夏集团北京分公司企划部', 0, '2020-03-26 16:57:06', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_org` VALUES (1265476890672672773, 1265476890672672770, '[0],[1265476890651701250],[1265476890672672770],', '市场部', 'hxjt_cd_scb', 100, '华夏集团成都分公司市场部', 0, '2020-03-26 16:57:35', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_org` VALUES (1265476890672672774, 1265476890672672770, '[0],[1265476890651701250],[1265476890672672770],', '财务部', 'hxjt_cd_cwb', 100, '华夏集团成都分公司财务部', 0, '2020-03-26 16:58:01', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_org` VALUES (1265476890672672775, 1265476890672672773, '[0],[1265476890651701250],[1265476890672672770],[1265476890672672773],', '市场部二部', 'hxjt_cd_scb_2b', 100, '华夏集团成都分公司市场部二部', 0, '2020-04-06 15:36:50', 1265476890672672808, NULL, NULL);
-- ----------------------------
-- Table structure for sys_pos
-- ----------------------------
DROP TABLE IF EXISTS `sys_pos`;
CREATE TABLE `sys_pos`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
  `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码',
  `sort` int(11) NOT NULL COMMENT '排序',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '状态(字典 0正常 1停用 2删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `CODE_UNI`(`code`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统职位表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_pos
-- ----------------------------
INSERT INTO `sys_pos` VALUES (1265476890672672787, '总经理', 'zjl', 100, '总经理职位', 0, '2020-03-26 19:28:54', 1265476890672672808, '2020-06-02 21:01:04', 1265476890672672808);
INSERT INTO `sys_pos` VALUES (1265476890672672788, '副总经理', 'fzjl', 100, '副总经理职位', 0, '2020-03-26 19:29:57', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_pos` VALUES (1265476890672672789, '部门经理', 'bmjl', 100, '部门经理职位', 0, '2020-03-26 19:31:49', 1265476890672672808, NULL, NULL);
INSERT INTO `sys_pos` VALUES (1265476890672672790, '工作人员', 'gzry', 100, '工作人员职位', 0, '2020-05-27 11:32:00', 1265476890672672808, '2020-06-01 10:51:35', 1265476890672672808);
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role`  (
  `id` bigint(20) NOT NULL COMMENT '主键id',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
  `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码',
  `sort` int(11) NOT NULL COMMENT '序号',
  `data_scope_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '数据范围类型(字典 1全部数据 2本部门及以下数据 3本部门数据 4仅本人数据 5自定义数据)',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '状态(字典 0正常 1停用 2删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统角色表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES (1265476890672672817, '总经理', 'zjl', 100, 1, '总经理角色', 0, '2020-04-02 19:27:26', 1265476890672672808, '2020-07-09 10:58:45', 1265476890672672808);
INSERT INTO `sys_role` VALUES (1265476890672672818, '工作人员', 'gzry', 100, 5, '工作人员角色', 0, '2020-04-02 19:28:40', 1265476890672672808, '2020-06-29 10:57:09', 1265476890672672808);
INSERT INTO `sys_role` VALUES (1265476890672672819, '部门经理', 'bmjl', 100, 2, '部门经理角色', 0, '2020-05-29 15:48:11', 1265476890672672808, '2020-06-23 14:11:35', 1265476890672672808);
-- ----------------------------
-- Table structure for sys_role_data_scope
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_data_scope`;
CREATE TABLE `sys_role_data_scope`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `role_id` bigint(20) NOT NULL COMMENT '角色id',
  `org_id` bigint(20) NOT NULL COMMENT '机构id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统角色数据范围表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_role_data_scope
-- ----------------------------
INSERT INTO `sys_role_data_scope` VALUES (1277435908822102018, 1265476890672672818, 1265476890651701250);
INSERT INTO `sys_role_data_scope` VALUES (1277435909635796993, 1265476890672672818, 1265476890672672769);
INSERT INTO `sys_role_data_scope` VALUES (1277435910432714754, 1265476890672672818, 1265476890672672771);
INSERT INTO `sys_role_data_scope` VALUES (1277435911233826818, 1265476890672672818, 1265476890672672772);
INSERT INTO `sys_role_data_scope` VALUES (1277435912018161666, 1265476890672672818, 1265476890672672770);
INSERT INTO `sys_role_data_scope` VALUES (1277435912810885122, 1265476890672672818, 1265476890672672773);
INSERT INTO `sys_role_data_scope` VALUES (1277435913595219970, 1265476890672672818, 1265476890672672775);
INSERT INTO `sys_role_data_scope` VALUES (1277435914392137730, 1265476890672672818, 1265476890672672774);
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `role_id` bigint(20) NOT NULL COMMENT '角色id',
  `menu_id` bigint(20) NOT NULL COMMENT '菜单id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统角色菜单表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_role_menu
-- ----------------------------
INSERT INTO `sys_role_menu` VALUES (1280776796320686081, 1265476890672672818, 1265474261896806439);
INSERT INTO `sys_role_menu` VALUES (1280776796387794945, 1265476890672672818, 1265474261896806440);
INSERT INTO `sys_role_menu` VALUES (1280776796454903810, 1265476890672672818, 1265474261896806441);
INSERT INTO `sys_role_menu` VALUES (1280776796530401282, 1265476890672672818, 1278507646755840002);
INSERT INTO `sys_role_menu` VALUES (1280776796597510146, 1265476890672672818, 1278507920815857665);
INSERT INTO `sys_role_menu` VALUES (1280776796660424706, 1265476890672672818, 1278508097945509889);
INSERT INTO `sys_role_menu` VALUES (1280776796735922178, 1265476890672672818, 1278508241906606081);
INSERT INTO `sys_role_menu` VALUES (1280776796803031041, 1265476890672672818, 1277507562966740993);
INSERT INTO `sys_role_menu` VALUES (1280776796874334209, 1265476890672672818, 1277520397092302850);
INSERT INTO `sys_role_menu` VALUES (1280776796933054465, 1265476890672672818, 1277520608506195969);
INSERT INTO `sys_role_menu` VALUES (1280850629654396930, 1265476890672672817, 1265474261896806402);
INSERT INTO `sys_role_menu` VALUES (1280850630510034945, 1265476890672672817, 1265474261896806403);
INSERT INTO `sys_role_menu` VALUES (1280850631365672961, 1265476890672672817, 1265474261896806404);
INSERT INTO `sys_role_menu` VALUES (1280850632108064770, 1265476890672672817, 1265474261896806407);
INSERT INTO `sys_role_menu` VALUES (1280850632456192001, 1265476890672672817, 1277520397092302850);
INSERT INTO `sys_role_menu` VALUES (1280850632808513538, 1265476890672672817, 1277507562966740993);
INSERT INTO `sys_role_menu` VALUES (1280850633156640770, 1265476890672672817, 1277520608506195969);
INSERT INTO `sys_role_menu` VALUES (1280850633500573698, 1265476890672672817, 1266263464951910401);
INSERT INTO `sys_role_menu` VALUES (1280850633857089537, 1265476890672672817, 1278544348966813698);
INSERT INTO `sys_role_menu` VALUES (1280850634196828162, 1265476890672672817, 1278544420391616514);
INSERT INTO `sys_role_menu` VALUES (1280850634544955394, 1265476890672672817, 1278923983416270850);
INSERT INTO `sys_role_menu` VALUES (1280850634901471233, 1265476890672672817, 1265474261896806413);
INSERT INTO `sys_role_menu` VALUES (1280850635249598466, 1265476890672672817, 1265474261896806414);
INSERT INTO `sys_role_menu` VALUES (1280850635601920001, 1265476890672672817, 1265474261896806418);
INSERT INTO `sys_role_menu` VALUES (1280850636096847874, 1265476890672672817, 1278537486905155586);
INSERT INTO `sys_role_menu` VALUES (1280850636948291586, 1265476890672672817, 1265474261896806417);
INSERT INTO `sys_role_menu` VALUES (1280850637401276417, 1265476890672672817, 1265474261896806448);
INSERT INTO `sys_role_menu` VALUES (1280850638244331522, 1265476890672672817, 1265474261896806405);
INSERT INTO `sys_role_menu` VALUES (1280850639095775233, 1265476890672672817, 1265474261896806406);
INSERT INTO `sys_role_menu` VALUES (1280850639951413250, 1265476890672672817, 1265474261896806437);
INSERT INTO `sys_role_menu` VALUES (1280850640819634178, 1265476890672672817, 1265474261896806438);
INSERT INTO `sys_role_menu` VALUES (1280850641675272193, 1265476890672672817, 1265474261896806455);
INSERT INTO `sys_role_menu` VALUES (1280850642530910209, 1265476890672672817, 1265474261896806456);
INSERT INTO `sys_role_menu` VALUES (1280850643390742529, 1265476890672672817, 1266254786341347330);
INSERT INTO `sys_role_menu` VALUES (1280850644254769154, 1265476890672672817, 1266254867962503169);
INSERT INTO `sys_role_menu` VALUES (1280850645110407169, 1265476890672672817, 1275265630030802946);
INSERT INTO `sys_role_menu` VALUES (1280850645542420481, 1265476890672672817, 1278544017260281858);
INSERT INTO `sys_role_menu` VALUES (1280850646402252802, 1265476890672672817, 1265474261896806408);
INSERT INTO `sys_role_menu` VALUES (1280850647253696514, 1265476890672672817, 1143468867767607297);
INSERT INTO `sys_role_menu` VALUES (1280850648117723137, 1265476890672672817, 1265474261896806409);
INSERT INTO `sys_role_menu` VALUES (1280850648977555457, 1265476890672672817, 1265474261896806410);
INSERT INTO `sys_role_menu` VALUES (1280850649833193474, 1265476890672672817, 1265474261896806411);
INSERT INTO `sys_role_menu` VALUES (1280850650697220097, 1265476890672672817, 1265474261896806412);
INSERT INTO `sys_role_menu` VALUES (1280850651552858114, 1265476890672672817, 1278509840213254146);
INSERT INTO `sys_role_menu` VALUES (1280850652412690433, 1265476890672672817, 1278509945922297857);
INSERT INTO `sys_role_menu` VALUES (1280850653272522754, 1265476890672672817, 1265474261896806415);
INSERT INTO `sys_role_menu` VALUES (1280850654056857601, 1265476890672672817, 1265474261896806416);
INSERT INTO `sys_role_menu` VALUES (1280850654987993089, 1265476890672672817, 1278537535882043393);
INSERT INTO `sys_role_menu` VALUES (1280850655659081730, 1265476890672672817, 1265474261896806419);
INSERT INTO `sys_role_menu` VALUES (1280850656707657730, 1265476890672672817, 1265474261896806420);
INSERT INTO `sys_role_menu` VALUES (1280850657563295745, 1265476890672672817, 1265474261896806421);
INSERT INTO `sys_role_menu` VALUES (1280850658431516674, 1265476890672672817, 1265474261896806422);
INSERT INTO `sys_role_menu` VALUES (1280850659291348994, 1265476890672672817, 1265474261896806423);
INSERT INTO `sys_role_menu` VALUES (1280850660138598401, 1265476890672672817, 1278537871925485570);
INSERT INTO `sys_role_menu` VALUES (1280850661002625026, 1265476890672672817, 1278537914929684481);
INSERT INTO `sys_role_menu` VALUES (1280850661862457345, 1265476890672672817, 1265474261896806425);
INSERT INTO `sys_role_menu` VALUES (1280850662722289666, 1265476890672672817, 1265474261896806424);
INSERT INTO `sys_role_menu` VALUES (1280850663154302977, 1265476890672672817, 1265474261896806426);
INSERT INTO `sys_role_menu` VALUES (1280850664009940994, 1265476890672672817, 1265474261896806427);
INSERT INTO `sys_role_menu` VALUES (1280850664647475202, 1265476890672672817, 1265474261896806428);
INSERT INTO `sys_role_menu` VALUES (1280850665301786626, 1265476890672672817, 1265474261896806429);
INSERT INTO `sys_role_menu` VALUES (1280850666161618946, 1265476890672672817, 1267997057113899009);
INSERT INTO `sys_role_menu` VALUES (1280850667021451265, 1265476890672672817, 1267997358927626241);
INSERT INTO `sys_role_menu` VALUES (1280850667877089281, 1265476890672672817, 1278536878072569857);
INSERT INTO `sys_role_menu` VALUES (1280850668741115905, 1265476890672672817, 1265474261896806430);
INSERT INTO `sys_role_menu` VALUES (1280850669592559617, 1265476890672672817, 1265474261896806431);
INSERT INTO `sys_role_menu` VALUES (1280850670024572929, 1265476890672672817, 1265474261896806432);
INSERT INTO `sys_role_menu` VALUES (1280850670884405250, 1265476890672672817, 1265474261896806433);
INSERT INTO `sys_role_menu` VALUES (1280850671735848962, 1265476890672672817, 1265474261896806434);
INSERT INTO `sys_role_menu` VALUES (1280850672599875585, 1265476890672672817, 1265474261896806435);
INSERT INTO `sys_role_menu` VALUES (1280850673459707905, 1265476890672672817, 1265474261896806436);
INSERT INTO `sys_role_menu` VALUES (1280850674315345921, 1265476890672672817, 1266253410563497986);
INSERT INTO `sys_role_menu` VALUES (1280850675179372546, 1265476890672672817, 1266253721189457921);
INSERT INTO `sys_role_menu` VALUES (1280850676035010561, 1265476890672672817, 1266274489566629889);
INSERT INTO `sys_role_menu` VALUES (1280850676659961858, 1265476890672672817, 1278538248938889218);
INSERT INTO `sys_role_menu` VALUES (1280850677326856193, 1265476890672672817, 1265474261896806442);
INSERT INTO `sys_role_menu` VALUES (1280850677863727106, 1265476890672672817, 1265474261896806443);
INSERT INTO `sys_role_menu` VALUES (1280850678618701825, 1265476890672672817, 1265474261896806444);
INSERT INTO `sys_role_menu` VALUES (1280850679474339842, 1265476890672672817, 1265474261896806445);
INSERT INTO `sys_role_menu` VALUES (1280850680334172162, 1265476890672672817, 1265474261896806446);
INSERT INTO `sys_role_menu` VALUES (1280850681189810178, 1265476890672672817, 1265474261896806447);
INSERT INTO `sys_role_menu` VALUES (1280850682049642498, 1265476890672672817, 1265474261896806449);
INSERT INTO `sys_role_menu` VALUES (1280850682544570370, 1265476890672672817, 1265474261896806450);
INSERT INTO `sys_role_menu` VALUES (1280850682888503298, 1265476890672672817, 1265474261896806451);
INSERT INTO `sys_role_menu` VALUES (1280850683240824834, 1265476890672672817, 1265474261896806452);
INSERT INTO `sys_role_menu` VALUES (1280850683576369153, 1265476890672672817, 1265474261896806453);
INSERT INTO `sys_role_menu` VALUES (1280850683932884994, 1265476890672672817, 1265474261896806454);
INSERT INTO `sys_role_menu` VALUES (1280850684276817922, 1265476890672672817, 1266266165173522433);
INSERT INTO `sys_role_menu` VALUES (1280850684616556546, 1265476890672672817, 1275266284937818114);
INSERT INTO `sys_role_menu` VALUES (1280850684964683778, 1265476890672672817, 1275266798761029633);
INSERT INTO `sys_role_menu` VALUES (1280850685300228097, 1265476890672672817, 1277508198718369793);
INSERT INTO `sys_role_menu` VALUES (1280850685648355329, 1265476890672672817, 1277508476016390146);
INSERT INTO `sys_role_menu` VALUES (1280850686000676865, 1265476890672672817, 1277508587207389185);
INSERT INTO `sys_role_menu` VALUES (1280850686583685121, 1265476890672672817, 1277508645722124290);
INSERT INTO `sys_role_menu` VALUES (1280850687388991490, 1265476890672672817, 1277508692291481601);
INSERT INTO `sys_role_menu` VALUES (1280850688060080130, 1265476890672672817, 1277508737703211009);
INSERT INTO `sys_role_menu` VALUES (1280850688924106753, 1265476890672672817, 1277508811346800641);
INSERT INTO `sys_role_menu` VALUES (1280850689783939073, 1265476890672672817, 1264622039642255361);
INSERT INTO `sys_role_menu` VALUES (1280850690639577089, 1265476890672672817, 1264622671778394114);
INSERT INTO `sys_role_menu` VALUES (1280850691432300545, 1265476890672672817, 1264623145550196737);
INSERT INTO `sys_role_menu` VALUES (1282207946657169410, 1265476890672672819, 1268815024873418753);
INSERT INTO `sys_role_menu` VALUES (1282207946665558018, 1265476890672672819, 1268815296198750210);
INSERT INTO `sys_role_menu` VALUES (1282207946678140930, 1265476890672672819, 1268815761716162561);
INSERT INTO `sys_role_menu` VALUES (1282207946682335234, 1265476890672672819, 1268815887520116737);
INSERT INTO `sys_role_menu` VALUES (1282207946686529538, 1265476890672672819, 1268815479720521730);
INSERT INTO `sys_role_menu` VALUES (1282207946690723841, 1265476890672672819, 1277153538518061058);
INSERT INTO `sys_role_menu` VALUES (1282207946736861185, 1265476890672672819, 1275723127652982786);
INSERT INTO `sys_role_menu` VALUES (1282207946741055489, 1265476890672672819, 1275723575222968321);
INSERT INTO `sys_role_menu` VALUES (1282207946745249794, 1265476890672672819, 1275724070897426433);
INSERT INTO `sys_role_menu` VALUES (1282207946749444097, 1265476890672672819, 1275724173720788993);
INSERT INTO `sys_role_menu` VALUES (1282207946757832706, 1265476890672672819, 1275724250875011074);
INSERT INTO `sys_role_menu` VALUES (1282207946757832707, 1265476890672672819, 1275724298933346306);
INSERT INTO `sys_role_menu` VALUES (1282207946757832708, 1265476890672672819, 1275724389635170305);
INSERT INTO `sys_role_menu` VALUES (1282207946770415618, 1265476890672672819, 1277507562966740993);
INSERT INTO `sys_role_menu` VALUES (1282207946774609922, 1265476890672672819, 1277520397092302850);
INSERT INTO `sys_role_menu` VALUES (1282207946778804225, 1265476890672672819, 1277520608506195969);
INSERT INTO `sys_role_menu` VALUES (1282207946778804226, 1265476890672672819, 1268816212092137474);
INSERT INTO `sys_role_menu` VALUES (1282207946787192833, 1265476890672672819, 1277508737703211009);
INSERT INTO `sys_role_menu` VALUES (1282207946787192834, 1265476890672672819, 1275723960612397057);
INSERT INTO `sys_role_menu` VALUES (1282207946799775745, 1265476890672672819, 1275724346723246081);
-- ----------------------------
-- Table structure for sys_sms
-- ----------------------------
DROP TABLE IF EXISTS `sys_sms`;
CREATE TABLE `sys_sms`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `phone_numbers` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '手机号',
  `validate_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '短信验证码',
  `template_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '短信模板ID',
  `biz_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '回执id,可根据该id查询具体的发送状态',
  `status` tinyint(4) NOT NULL COMMENT '发送状态(字典 0 未发送,1 发送成功,2 发送失败,3 失效)',
  `source` tinyint(4) NOT NULL COMMENT '来源(字典 1 app, 2 pc, 3 其他)',
  `invalid_time` datetime(0) NULL DEFAULT NULL COMMENT '失效时间',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '短信信息发送表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_sms
-- ----------------------------
-- ----------------------------
-- Table structure for sys_timers
-- ----------------------------
DROP TABLE IF EXISTS `sys_timers`;
CREATE TABLE `sys_timers`  (
  `id` bigint(20) NOT NULL COMMENT '定时器id',
  `timer_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '任务名称',
  `action_class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '执行任务的class的类名(实现了TimerTaskRunner接口的类的全称)',
  `cron` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '定时任务表达式',
  `job_status` tinyint(4) NULL DEFAULT 0 COMMENT '状态(字典 1运行  2停止)',
  `remark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '备注信息',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '定时任务' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_timers
-- ----------------------------
INSERT INTO `sys_timers` VALUES (1277952546828189698, '定时删除缓存', 'cn.stylefeng.guns.sys.modular.timer.tasks.SystemOutTaskRunner', '*/2 * * * * *', 2, '删除的是redis没用的东西', '2020-06-30 21:10:05', 1265476890672672808, '2020-07-07 16:01:57', 1265476890672672808);
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `account` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '账号',
  `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
  `nick_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '员工姓名',
  `avatar` bigint(20) NULL DEFAULT NULL COMMENT '头像',
  `salt` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'md5密码盐',
  `birthday` date NULL DEFAULT NULL COMMENT '生日',
  `sex` tinyint(4) NOT NULL COMMENT '性别(字典 1男 2女 3未知)',
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  `phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机',
  `tel` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话',
  `last_login_ip` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最后登陆IP',
  `last_login_time` datetime(0) NULL DEFAULT NULL COMMENT '最后登陆时间',
  `admin_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '管理员类型(0超级管理员 1非管理员)',
  `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '状态(字典 0正常 1冻结 2删除)',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_user` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_user` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统用户表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1265476890672672808, 'superAdmin', '0c45ea6e80876cf93e49677873c6af22', '超级管理员', '超级管理员', NULL, 'r10kd', '2020-03-18', 1, 'superAdmin@qq.com', '15228937093', '12345678', '127.0.0.1', '2020-07-12 15:24:01', 1, 0, '2020-05-29 16:39:28', -1, '2020-07-12 15:24:01', -1);
INSERT INTO `sys_user` VALUES (1275735541155614721, 'yubaoshan', 'bf93b090ac9289229e851ef5ca6cf20d', 'Await', '俞宝山', NULL, 'wbd7u', '1992-10-03', 1, 'await183@qq.com', '18200001102', '', '127.0.0.1', '2020-07-08 15:38:59', 2, 0, '2020-06-24 18:20:30', 1265476890672672808, '2020-07-08 15:48:39', 1265476890672672808);
INSERT INTO `sys_user` VALUES (1280700700074041345, 'fengshuonan', 'fc7b5930be8bf14c64e9cb2f88f4b7f3', 'stylefeng', '冯硕楠', NULL, 'syh39', '2020-07-01', 1, NULL, '18200001103', NULL, '39.106.98.24', '2020-07-12 14:59:41', 2, 0, '2020-07-08 11:10:16', 1265476890672672808, '2020-07-12 14:59:41', -1);
INSERT INTO `sys_user` VALUES (1280709549107552257, 'xuyuxiang', '2a4ff388bf923a7b3382fc904b015d2e', '就是那个锅', '徐玉祥', NULL, 'j4di1', '2020-07-01', 1, NULL, '18200001100', NULL, '127.0.0.1', '2020-07-09 10:58:59', 2, 0, '2020-07-08 11:45:26', 1265476890672672808, '2020-07-09 10:58:59', -1);
-- ----------------------------
-- Table structure for sys_user_data_scope
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_data_scope`;
CREATE TABLE `sys_user_data_scope`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `user_id` bigint(20) NOT NULL COMMENT '用户id',
  `org_id` bigint(20) NOT NULL COMMENT '机构id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统用户数据范围表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_user_data_scope
-- ----------------------------
INSERT INTO `sys_user_data_scope` VALUES (1277459951742840834, 1266277099455635457, 1265476890672672770);
INSERT INTO `sys_user_data_scope` VALUES (1277459952577507330, 1266277099455635457, 1265476890672672773);
INSERT INTO `sys_user_data_scope` VALUES (1277459953424756737, 1266277099455635457, 1265476890672672775);
INSERT INTO `sys_user_data_scope` VALUES (1277459954267811841, 1266277099455635457, 1265476890672672774);
INSERT INTO `sys_user_data_scope` VALUES (1280712043527249922, 1265476890672672809, 1265476890651701250);
INSERT INTO `sys_user_data_scope` VALUES (1280712043535638529, 1265476890672672809, 1265476890672672769);
INSERT INTO `sys_user_data_scope` VALUES (1280712043535638530, 1265476890672672809, 1265476890672672771);
INSERT INTO `sys_user_data_scope` VALUES (1280712043535638531, 1265476890672672809, 1265476890672672772);
INSERT INTO `sys_user_data_scope` VALUES (1280712043544027137, 1265476890672672809, 1265476890672672770);
INSERT INTO `sys_user_data_scope` VALUES (1280712043544027138, 1265476890672672809, 1265476890672672773);
INSERT INTO `sys_user_data_scope` VALUES (1280712043552415746, 1265476890672672809, 1265476890672672775);
INSERT INTO `sys_user_data_scope` VALUES (1280712043552415747, 1265476890672672809, 1265476890672672774);
INSERT INTO `sys_user_data_scope` VALUES (1280712071570366466, 1275735541155614721, 1265476890672672769);
INSERT INTO `sys_user_data_scope` VALUES (1280712071570366467, 1275735541155614721, 1265476890672672771);
INSERT INTO `sys_user_data_scope` VALUES (1280712071578755074, 1275735541155614721, 1265476890672672772);
INSERT INTO `sys_user_data_scope` VALUES (1280770936764751873, 1280700700074041345, 1265476890672672771);
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `user_id` bigint(20) NOT NULL COMMENT '用户id',
  `role_id` bigint(20) NOT NULL COMMENT '角色id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统用户角色表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
INSERT INTO `sys_user_role` VALUES (1281234551670063105, 1280709549107552257, 1265476890672672817);
INSERT INTO `sys_user_role` VALUES (1281234581151825921, 1280700700074041345, 1265476890672672819);
INSERT INTO `sys_user_role` VALUES (1281234594586181633, 1275735541155614721, 1265476890672672817);
-- ----------------------------
-- Table structure for sys_vis_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_vis_log`;
CREATE TABLE `sys_vis_log`  (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
  `success` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否执行成功(Y-是,N-否)',
  `message` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '具体消息',
  `ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'ip',
  `location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  `browser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '浏览器',
  `os` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作系统',
  `vis_type` tinyint(4) NOT NULL COMMENT '操作类型(字典 1登入 2登出)',
  `vis_time` datetime(0) NULL DEFAULT NULL COMMENT '访问时间',
  `account` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '访问账号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统访问日志表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_vis_log
-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;

+ 3 - 0
_web/.browserslistrc

@ -0,0 +1,3 @@
> 1%
last 2 versions
not ie <= 10

+ 39 - 0
_web/.editorconfig

@ -0,0 +1,39 @@
[*]
charset=utf-8
end_of_line=lf
insert_final_newline=false
indent_style=space
indent_size=2
[{*.ng,*.sht,*.html,*.shtm,*.shtml,*.htm}]
indent_style=space
indent_size=2
[{*.jhm,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.tld,*.fxml,*.jrxml,*.xml,*.jnlp,*.wsdl}]
indent_style=space
indent_size=2
[{.babelrc,.stylelintrc,jest.config,.eslintrc,.prettierrc,*.json,*.jsb3,*.jsb2,*.bowerrc}]
indent_style=space
indent_size=2
[*.svg]
indent_style=space
indent_size=2
[*.js.map]
indent_style=space
indent_size=2
[*.less]
indent_style=space
indent_size=2
[*.vue]
indent_style=space
indent_size=2
[{.analysis_options,*.yml,*.yaml}]
indent_style=space
indent_size=2

+ 3 - 0
_web/.env

@ -0,0 +1,3 @@
NODE_ENV=production
VUE_APP_PREVIEW=false
VUE_APP_API_BASE_URL=/api

+ 3 - 0
_web/.env.development

@ -0,0 +1,3 @@
NODE_ENV=development
VUE_APP_PREVIEW=true
VUE_APP_API_BASE_URL=/api

+ 3 - 0
_web/.env.preview

@ -0,0 +1,3 @@
NODE_ENV=production
VUE_APP_PREVIEW=true
VUE_APP_API_BASE_URL=/api

+ 37 - 0
_web/.eslintrc.js

@ -0,0 +1,37 @@
module.exports = {
  root: true,
  env: {
    node: true
  },
  'extends': [
    'plugin:vue/strongly-recommended'
  ],
  rules: {
    'import/newline-after-import': 'off',
    'no-param-reassign': 'off',
    'space-before-function-paren': 'off',
    'object-curly-spacing': 'off',
    'block-spacing': 'off',
    'dot-notation': 'off',
    'arrow-parens': 'off',
    'space-before-blocks': 'off',
    'no-confusing-arrow': 'off',
    'arrow-body-style': 'off',
    "vue/no-unused-components": "off",
    semi: 'off'
  },
  parserOptions: {
    parser: 'babel-eslint'
  },
  overrides: [
    {
      files: [
        '**/__tests__/*.{j,t}s?(x)',
        '**/tests/unit/**/*.spec.{j,t}s?(x)'
      ],
      env: {
        jest: true
      }
    }
  ]
}

+ 3 - 0
_web/.gitignore

@ -0,0 +1,3 @@
node_modules/
dist/
.idea/

+ 5 - 0
_web/.prettierrc

@ -0,0 +1,5 @@
{
  "printWidth": 120,
  "semi": false,
  "singleQuote": true
}

+ 7 - 0
_web/.travis.yml

@ -0,0 +1,7 @@
language: node_js
node_js:
  - 10.15.0
cache: yarn
script:
  - yarn
  - yarn run lint --no-fix && yarn run build

+ 21 - 0
_web/LICENSE

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 Anan Yang
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.

+ 28 - 0
_web/babel.config.js

@ -0,0 +1,28 @@
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
const plugins = []
if (IS_PROD) {
  plugins.push('transform-remove-console')
}
// lazy load ant-design-vue
// if your use import on Demand, Use this code
plugins.push(['import', {
  'libraryName': 'ant-design-vue',
  'libraryDirectory': 'es',
  'style': true // `style: true` 会加载 less 文件
}])
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset',
    [
      '@babel/preset-env',
      {
        'useBuiltIns': 'entry',
        'corejs': 3
      }
    ]
  ],
  plugins
}

+ 46 - 0
_web/config/plugin.config.js

@ -0,0 +1,46 @@
const ThemeColorReplacer = require('webpack-theme-color-replacer')
const generate = require('@ant-design/colors/lib/generate').default
const getAntdSerials = (color) => {
  // 淡化(即less的tint)
  const lightens = new Array(9).fill().map((t, i) => {
    return ThemeColorReplacer.varyColor.lighten(color, i / 10)
  })
  const colorPalettes = generate(color)
  const rgb = ThemeColorReplacer.varyColor.toNum3(color.replace('#', '')).join(',')
  return lightens.concat(colorPalettes).concat(rgb)
}
const themePluginOption = {
  fileName: 'css/theme-colors-[contenthash:8].css',
  matchColors: getAntdSerials('#1890ff'), // 主色系列
  // 改变样式选择器,解决样式覆盖问题
  changeSelector (selector) {
    switch (selector) {
      case '.ant-calendar-today .ant-calendar-date':
        return ':not(.ant-calendar-selected-date):not(.ant-calendar-selected-day)' + selector
      case '.ant-btn:focus,.ant-btn:hover':
        return '.ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger),.ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger)'
      case '.ant-btn.active,.ant-btn:active':
        return '.ant-btn.active:not(.ant-btn-primary):not(.ant-btn-danger),.ant-btn:active:not(.ant-btn-primary):not(.ant-btn-danger)'
      case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon':
      case '.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon':
        return ':not(.ant-steps-item-process)' + selector
      case '.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item-open,.ant-menu-horizontal>.ant-menu-item-selected,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu-active,.ant-menu-horizontal>.ant-menu-submenu-open,.ant-menu-horizontal>.ant-menu-submenu-selected,.ant-menu-horizontal>.ant-menu-submenu:hover':
      case '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal > .ant-menu-submenu-selected,.ant-menu-horizontal > .ant-menu-submenu:hover':
        return '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover'
      case '.ant-menu-horizontal > .ant-menu-item-selected > a':
      case '.ant-menu-horizontal>.ant-menu-item-selected>a':
        return '.ant-menu-horizontal:not(ant-menu-light):not(.ant-menu-dark) > .ant-menu-item-selected > a'
      case '.ant-menu-horizontal > .ant-menu-item > a:hover':
      case '.ant-menu-horizontal>.ant-menu-item>a:hover':
        return '.ant-menu-horizontal:not(ant-menu-light):not(.ant-menu-dark) > .ant-menu-item > a:hover'
      default :
        return selector
    }
  }
}
const createThemeColorReplacerPlugin = () => new ThemeColorReplacer(themePluginOption)
module.exports = createThemeColorReplacerPlugin

+ 23 - 0
_web/jest.config.js

@ -0,0 +1,23 @@
module.exports = {
  moduleFileExtensions: [
    'js',
    'jsx',
    'json',
    'vue'
  ],
  transform: {
    '^.+\\.vue$': 'vue-jest',
    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
    '^.+\\.jsx?$': 'babel-jest'
  },
  moduleNameMapper: {
    '^@/(.*)$': '<rootDir>/src/$1'
  },
  snapshotSerializers: [
    'jest-serializer-vue'
  ],
  testMatch: [
    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
  ],
  testURL: 'http://localhost/'
}

+ 11 - 0
_web/jsconfig.json

@ -0,0 +1,11 @@
{
  "compilerOptions": {
    "target": "es6",
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  },
  "exclude": ["node_modules", "dist"],
  "include": ["src/**/*"]
}

+ 65 - 0
_web/package.json

@ -0,0 +1,65 @@
{
  "name": "vue-antd-pro",
  "version": "2.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
    "build:preview": "vue-cli-service build --mode preview",
    "postinstall": "opencollective-postinstall"
  },
  "dependencies": {
    "@antv/data-set": "^0.10.2",
    "ant-design-vue": "1.5.0-rc.6",
    "axios": "^0.19.0",
    "core-js": "^3.1.2",
    "enquire.js": "^2.1.6",
    "lodash.clonedeep": "^4.5.0",
    "lodash.get": "^4.4.2",
    "lodash.pick": "^4.4.0",
    "md5": "^2.2.1",
    "mockjs2": "1.0.8",
    "moment": "^2.24.0",
    "nprogress": "^0.2.0",
    "viser-vue": "^2.4.6",
    "vue": "^2.6.10",
    "vue-clipboard2": "^0.2.1",
    "vue-cropper": "0.4.9",
    "vue-ls": "^3.2.1",
    "vue-quill-editor": "^3.0.6",
    "vue-router": "^3.1.2",
    "vue-svg-component-runtime": "^1.0.1",
    "vuex": "^3.1.1",
    "wangeditor": "^3.1.1",
    "wangeditor-antd": "^1.0.5"
  },
  "devDependencies": {
    "@ant-design/colors": "^3.2.1",
    "@vue/cli-plugin-babel": "^4.0.4",
    "@vue/cli-plugin-eslint": "^4.0.4",
    "@vue/cli-plugin-router": "^4.0.4",
    "@vue/cli-plugin-unit-jest": "^4.0.4",
    "@vue/cli-plugin-vuex": "^4.0.4",
    "@vue/cli-service": "^4.0.4",
    "@vue/eslint-config-standard": "^4.0.0",
    "@vue/test-utils": "^1.0.0-beta.29",
    "babel-eslint": "^10.0.1",
    "babel-plugin-import": "^1.12.2",
    "babel-plugin-transform-remove-console": "^6.9.4",
    "eslint": "^5.16.0",
    "eslint-plugin-html": "^5.0.0",
    "eslint-plugin-vue": "^5.2.3",
    "less": "^3.0.4",
    "less-loader": "^5.0.0",
    "opencollective": "^1.0.3",
    "opencollective-postinstall": "^2.0.2",
    "vue-svg-icon-loader": "^2.1.1",
    "vue-template-compiler": "^2.6.10",
    "webpack-theme-color-replacer": "^1.2.17"
  },
  "collective": {
    "type": "opencollective",
    "url": "https://opencollective.com/ant-design-pro-vue"
  }
}

+ 5 - 0
_web/postcss.config.js

@ -0,0 +1,5 @@
module.exports = {
  plugins: {
    autoprefixer: {}
  }
}

BIN
_web/public/avatar2.jpg


File diff suppressed because it is too large
+ 34 - 0
_web/public/index.html


File diff suppressed because it is too large
+ 1 - 0
_web/public/loading/loading.css


+ 1 - 0
_web/public/loading/loading.html

@ -0,0 +1 @@
<div id="preloadingAnimation"><div class=lds-roller><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div><div class=load-tips>Loading</div></div>

File diff suppressed because it is too large
+ 5 - 0
_web/public/loading/option2/html_code_segment.html


+ 1 - 0
_web/public/loading/option2/loading.css

@ -0,0 +1 @@
.preloading-animate{background:#ffffff;width:100%;height:100%;position:fixed;left:0;top:0;z-index:299;}.preloading-animate .preloading-wrapper{position:absolute;width:5rem;height:5rem;left:50%;top:50%;transform:translate(-50%,-50%);}.preloading-animate .preloading-wrapper .preloading-balls{font-size:5rem;}

File diff suppressed because it is too large
+ 1 - 0
_web/public/loading/option2/loading.svg


BIN
_web/public/logo.png


+ 24 - 0
_web/src/App.vue

@ -0,0 +1,24 @@
<template>
  <a-config-provider :locale="locale">
    <div id="app">
      <router-view/>
    </div>
  </a-config-provider>
</template>
<script>
import zhCN from 'ant-design-vue/lib/locale-provider/zh_CN'
import { AppDeviceEnquire } from '@/utils/mixin'
export default {
  mixins: [AppDeviceEnquire],
  data () {
    return {
      locale: zhCN
    }
  },
  mounted () {
  }
}
</script>

+ 56 - 0
_web/src/api/manage.js

@ -0,0 +1,56 @@
/**
 * 此文件已与正式环境无关,上线前需删除,及相关vue
 */
import { axios } from '@/utils/request'
const api = {
  user: '/user',
  role: '/role',
  service:'/service'
}
export default api
export function getRoleList (parameter) {
  return axios({
    url: api.role,
    method: 'get',
    params: parameter
  })
}
export function getServiceList (parameter) {
  return axios({
    url: api.service,
    method: 'get',
    params: parameter
  })
}
export function getPermissions (parameter) {
  return axios({
    url: api.permissionNoPager,
    method: 'get',
    data: parameter
  })
}
export function getOrgTree (parameter) {
  return axios({
    url: api.orgTree,
    method: 'get',
    params: parameter
  })
}
// id == 0 add     post
// id != 0 update  put
export function saveService (parameter) {
  return axios({
    url: api.service,
    method: parameter.id === 0 ? 'post' : 'put',
    data: parameter
  })
}

+ 1 - 0
_web/src/api/modular/main/README.md

@ -0,0 +1 @@
/** 您的业务接口文件全写在此文件夹下面,升级底座直接迁移代码即可 **/

+ 1 - 0
_web/src/api/modular/system/README.md

@ -0,0 +1 @@
/** 此文件夹下代码尽量不要动,底座升级直接覆盖替换 **/

+ 93 - 0
_web/src/api/modular/system/appManage.js

@ -0,0 +1,93 @@
/**
 * 系统应用
 *
 * @author yubaoshan
 * @date 2020年4月23日12:10:57
 */
import { axios } from '@/utils/request'
/**
 * 系统应用列表
 *
 * @author yubaoshan
 * @date 2020年7月9日15:05:01
 */
export function getAppPage (parameter) {
  return axios({
    url: '/sysApp/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 系统应用列表
 *
 * @author yubaoshan
 * @date 2020年7月9日15:05:01
 */
export function getAppList (parameter) {
  return axios({
    url: '/sysApp/list',
    method: 'get',
    params: parameter
  })
}
/**
 * 新增系统应用
 *
 * @author yubaoshan
 * @date 2020年7月9日15:05:01
 */
export function sysAppAdd (parameter) {
  return axios({
    url: '/sysApp/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑系统应用
 *
 * @author yubaoshan
 * @param parameter
 * @returns {*}
 */
export function sysAppEdit (parameter) {
  return axios({
    url: '/sysApp/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除系统应用
 *
 * @author yubaoshan
 * @date 2020年7月9日15:05:01
 */
export function sysAppDelete (parameter) {
  return axios({
    url: '/sysApp/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * 设为默认应用
 *
 * @author yubaoshan
 * @date 2020年7月9日15:05:01
 */
export function sysAppSetAsDefault (parameter) {
  return axios({
    url: '/sysApp/setAsDefault',
    method: 'post',
    data: parameter
  })
}

+ 86 - 0
_web/src/api/modular/system/configManage.js

@ -0,0 +1,86 @@
import { axios } from '@/utils/request'
/**
 * 分页查询配置列表
 *
 * @author yubaoshan
 * @date 2020/5/25 01:57
 */
export function sysConfigPage (parameter) {
  return axios({
    url: '/sysConfig/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 添加系统参数配置
 *
 * @author yubaoshan
 * @date 2020/5/25 01:57
 */
export function sysConfigAdd (parameter) {
  return axios({
    url: '/sysConfig/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑系统参数配置
 *
 * @author yubaoshan
 * @date 2020/5/25 01:57
 */
export function sysConfigEdit (parameter) {
  return axios({
    url: '/sysConfig/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除系统参数配置
 *
 * @author yubaoshan
 * @date 2020/5/25 01:57
 */
export function sysConfigDelete (parameter) {
  return axios({
    url: '/sysConfig/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * 获取字典类型下所有字典,举例,返回格式为:[{code:"M",value:"男"},{code:"F",value:"女"}]
 *
 * @author yubaoshan
 * @date 2020/5/25 02:06
 */
export function sysDictTypeDropDown (parameter) {
  return axios({
    url: '/sysDictType/dropDown',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取系统的所有任务列表
 *
 * @author yubaoshan
 * @Date 2020/7/8 20:46
 */
export function sysTimersGetActionClasses (parameter) {
  return axios({
    url: '/sysTimers/getActionClasses',
    method: 'get',
    params: parameter
  })
}

+ 60 - 0
_web/src/api/modular/system/dictDataManage.js

@ -0,0 +1,60 @@
import { axios } from '@/utils/request'
/**
 * 查询系统字典值
 *
 * @author yubaoshan
 * @date 2020/5/17 02:24
 */
export function sysDictDataPage (parameter) {
  return axios({
    url: '/sysDictData/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 添加系统字典值
 *
 * @author yubaoshan
 * @date 2020/5/17 02:24
 */
export function sysDictDataAdd (parameter) {
  return axios({
    url: '/sysDictData/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑系统字典值
 *
 * @author yubaoshan
 * @date 2020/5/17 02:25
 */
export function sysDictDataEdit (parameter) {
  return axios({
    url: '/sysDictData/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除系统字典值
 *
 * @author yubaoshan
 * @date 2020/5/17 02:25
 */
export function sysDictDataDelete (parameter) {
  return axios({
    url: '/sysDictData/delete',
    method: 'post',
    data: parameter
  })
}

+ 73 - 0
_web/src/api/modular/system/dictManage.js

@ -0,0 +1,73 @@
import { axios } from '@/utils/request'
/**
 * 分页查询系统字典类型
 *
 * @author yubaoshan
 * @date 2020/5/17 01:46
 */
export function sysDictTypePage (parameter) {
  return axios({
    url: '/sysDictType/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 添加系统字典类型
 *
 * @author yubaoshan
 * @date 2020/5/17 01:46
 */
export function sysDictTypeAdd (parameter) {
  return axios({
    url: '/sysDictType/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑系统字典类型
 *
 * @author yubaoshan
 * @date 2020/5/17 01:50
 */
export function sysDictTypeEdit (parameter) {
  return axios({
    url: '/sysDictType/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除系统字典类型
 *
 * @author yubaoshan
 * @date 2020/5/17 01:50
 */
export function sysDictTypeDelete (parameter) {
  return axios({
    url: '/sysDictType/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * 获取字典类型下所有字典,举例,返回格式为:[{code:"M",value:"男"},{code:"F",value:"女"}]
 *
 * @author yubaoshan
 * @date 2020/6/10 00:10
 */
export function sysDictTypeDropDown (parameter) {
  return axios({
    url: '/sysDictType/dropDown',
    method: 'get',
    params: parameter
  })
}

+ 29 - 0
_web/src/api/modular/system/emailManage.js

@ -0,0 +1,29 @@
import { axios } from '@/utils/request'
/**
 * 发送邮件
 *
 * @author yubaoshan
 * @date 2020/7/3 23:22
 */
export function emailSendEmail (parameter) {
  return axios({
    url: '/email/sendEmail',
    method: 'post',
    data: parameter
  })
}
/**
 * 发送html邮件
 *
 * @author yubaoshan
 * @date 2020/7/3 23:23
 */
export function emailSendEmailHtml (parameter) {
  return axios({
    url: '/email/sendEmailHtml',
    method: 'post',
    data: parameter
  })
}

+ 103 - 0
_web/src/api/modular/system/fileManage.js

@ -0,0 +1,103 @@
import { axios } from '@/utils/request'
/**
 * 分页查询文件信息表
 *
 * @author yubaoshan
 * @date 2020/6/30 00:20
 */
export function sysFileInfoPage (parameter) {
  return axios({
    url: '/sysFileInfo/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取全部文件信息表
 *
 * @author yubaoshan
 * @date 2020/6/30 00:20
 */
export function sysFileInfoList (parameter) {
  return axios({
    url: '/sysFileInfo/list',
    method: 'get',
    params: parameter
  })
}
/**
 * 上传文件
 *
 * @author yubaoshan
 * @date 2020/6/30 00:20
 */
export function sysFileInfoUpload (parameter) {
  return axios({
    url: '/sysFileInfo/upload',
    method: 'post',
    data: parameter
  })
}
/**
 * 下载文件
 *
 * @author yubaoshan
 * @date 2020/6/30 00:20
 */
export function sysFileInfoDownload (parameter) {
  return axios({
    url: '/sysFileInfo/download',
    method: 'get',
    params: parameter,
    responseType: "blob",
  })
}
/**
 * 查看图片
 *
 * @author yubaoshan
 * @date 2020/6/30 00:20
 */
export function sysFileInfoPreview (parameter) {
  return axios({
    url: '/sysFileInfo/preview',
    method: 'get',
    params: parameter,
    responseType: "arraybuffer",
  })
}
/**
 * 查看详情文件信息表
 *
 * @author yubaoshan
 * @date 2020/6/30 00:20
 */
export function sysFileInfoDetail (parameter) {
  return axios({
    url: '/sysFileInfo/detail',
    method: 'get',
    params: parameter
  })
}
/**
 * 删除文件信息表
 *
 * @author yubaoshan
 * @date 2020/6/30 00:20
 */
export function sysFileInfoDelete (parameter) {
  return axios({
    url: '/sysFileInfo/delete',
    method: 'post',
    data: parameter
  })
}

+ 59 - 0
_web/src/api/modular/system/logManage.js

@ -0,0 +1,59 @@
import { axios } from '@/utils/request'
/**
 * 查询访问日志
 *
 * @author yubaoshan
 * @date 2020/5/19 11:57
 */
export function sysVisLogPage (parameter) {
  return axios({
    url: '/sysVisLog/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 查询操作日志
 *
 * @author yubaoshan
 * @date 2020/5/19 11:57
 */
export function sysOpLogPage (parameter) {
  return axios({
    url: '/sysOpLog/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 清空访问日志
 *
 * @author yubaoshan
 * @date 2020/6/23 23:09
 */
export function sysVisLogDelete (parameter) {
  return axios({
    url: '/sysVisLog/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * 清空登录日志
 *
 * @author yubaoshan
 * @date 2020/6/23 23:09
 */
export function sysOpLogDelete (parameter) {
  return axios({
    url: '/sysOpLog/delete',
    method: 'post',
    data: parameter
  })
}

+ 93 - 0
_web/src/api/modular/system/loginManage.js

@ -0,0 +1,93 @@
/**
 * 系统应用
 *
 * @author yubaoshan
 * @date 2020/5/26 19:06
 */
import { axios } from '@/utils/request'
/**
 * 登录
 *
 * @author yubaoshan
 * @date 2020/5/26 19:06
 */
export function login (parameter) {
  return axios({
    url: '/login',
    method: 'post',
    data: parameter
  })
}
/**
 * 登出
 *
 * @author yubaoshan
 * @date 2020/5/26 19:07
 */
export function logout (parameter) {
  return axios({
    url: '/logout',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取登录用户信息
 *
 * @author yubaoshan
 * @date 2020/5/26 19:08
 */
export function getLoginUser (parameter) {
  return axios({
    url: '/getLoginUser',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取用户头像
 *
 * @author yubaoshan
 * @date 2020/5/26 19:08
 */
export function previewAvatar (parameter) {
  return axios({
    url: '/system/previewAvatar',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取短信验证码
 *
 * @author yubaoshan
 * @date 2020/5/26 19:29
 */
export function getSmsCaptcha (parameter) {
  return axios({
    url: '/getSmsCaptcha',
    method: 'get',
    params: parameter
  })
}
/**
 *
 *
 * @author yubaoshan
 * @date 2020/5/26 19:29
 */
export function twoStepCode (parameter) {
  return axios({
    url: '/auth/2step-code',
    method: 'get',
    params: parameter
  })
}

+ 16 - 0
_web/src/api/modular/system/machineManage.js

@ -0,0 +1,16 @@
import { axios } from '@/utils/request'
/**
 * 系统属性监控
 *
 * @author yubaoshan
 * @date 2020/6/8 19:47
 */
export function sysMachineQuery (parameter) {
  return axios({
    url: '/sysMachine/query',
    method: 'get',
    params: parameter
  })
}

+ 115 - 0
_web/src/api/modular/system/menuManage.js

@ -0,0 +1,115 @@
import { axios } from '@/utils/request'
/**
 * 获取菜单列表
 *
 * @author yubaoshan
 * @param parameter
 * @returns {*}
 */
export function getMenuList (parameter) {
  return axios({
    url: '/sysMenu/list',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取系统菜单树,用于新增,编辑时选择上级节点
 *
 * @author yubaoshan
 * @date 2020/4/23 12:22
 */
export function getMenuTree (parameter) {
  return axios({
    url: '/sysMenu/tree',
    method: 'get',
    params: parameter
  })
}
/**
 * 增加菜单
 *
 * @author yubaoshan
 * @date 2020/4/24 23:23
 */
export function sysMenuAdd (parameter) {
  return axios({
    url: '/sysMenu/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 增加菜单
 *
 * @author yubaoshan
 * @date 2020/4/24 23:23
 */
export function sysMenuDelete (parameter) {
  return axios({
    url: '/sysMenu/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * 查看菜单详情
 *
 * @author yubaoshan
 * @date 2020/4/25 01:11
 */
export function sysMenuDetail (parameter) {
  return axios({
    url: '/sysMenu/detail',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑系统菜单
 *
 * @author yubaoshan
 * @date 2020/4/25 01:11
 */
export function sysMenuEdit (parameter) {
  return axios({
    url: '/sysMenu/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 获取系统菜单树,用于给角色授权时选择
 *
 * @author yubaoshan
 * @date 2020/6/2 17:30
 */
export function SysMenuTreeForGrant (parameter) {
  return axios({
    url: '/sysMenu/treeForGrant',
    method: 'get',
    params: parameter
  })
}
/**
 * 根据系统切换菜单
 *
 * @author yubaoshan
 * @date 2020/6/28 15:25
 */
export function sysMenuChange (parameter) {
  return axios({
    url: '/sysMenu/change',
    method: 'post',
    data: parameter
  })
}

+ 86 - 0
_web/src/api/modular/system/noticeManage.js

@ -0,0 +1,86 @@
import { axios } from '@/utils/request'
/**
 * 查询系统通知公告
 *
 * @author yubaoshan
 * @date 2020/6/30 01:56
 */
export function sysNoticePage (parameter) {
  return axios({
    url: '/sysNotice/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 添加系统通知公告
 *
 * @author yubaoshan
 * @date 2020/6/30 01:56
 */
export function sysNoticeAdd (parameter) {
  return axios({
    url: '/sysNotice/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑系统通知公告
 *
 * @author yubaoshan
 * @date 2020/6/30 01:56
 */
export function sysNoticeEdit (parameter) {
  return axios({
    url: '/sysNotice/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除系统通知公告
 *
 * @author yubaoshan
 * @date 2020/6/30 01:56
 */
export function sysNoticeDelete (parameter) {
  return axios({
    url: '/sysNotice/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * 通知公告详情
 *
 * @author yubaoshan
 * @date 2020/6/30 01:56
 */
export function sysNoticeDetail (parameter) {
  return axios({
    url: '/sysNotice/detail',
    method: 'get',
    params: parameter
  })
}
/**
 * 修改状态
 *
 * @author yubaoshan
 * @date 2020/7/30 02:23
 */
export function sysNoticeChangeStatus (parameter) {
  return axios({
    url: '/sysNotice/changeStatus',
    method: 'post',
    data: parameter
  })
}

+ 16 - 0
_web/src/api/modular/system/noticeReceivedManage.js

@ -0,0 +1,16 @@
import { axios } from '@/utils/request'
/**
 * 查询我收到的系统通知公告
 *
 * @author yubaoshan
 * @date 2020/7/3 03:02
 */
export function sysNoticeReceived (parameter) {
  return axios({
    url: '/sysNotice/received',
    method: 'get',
    params: parameter
  })
}

+ 33 - 0
_web/src/api/modular/system/onlineUserManage.js

@ -0,0 +1,33 @@
import { axios } from '@/utils/request'
/**
 * 在线用户列表
 *
 * @author yubaoshan
 * @date 2020/6/8 11:11
 */
export function sysOnlineUserList (parameter) {
  return axios({
    url: '/sysOnlineUser/list',
    method: 'get',
    params: parameter
  })
}
/**
 * 强制下线
 *
 * @author yubaoshan
 * @date 2020/6/8 11:11
 */
export function sysOnlineUserForceExist (parameter) {
  return axios({
    url: '/sysOnlineUser/forceExist',
    method: 'post',
    data: parameter
  })
}

+ 86 - 0
_web/src/api/modular/system/orgManage.js

@ -0,0 +1,86 @@
import { axios } from '@/utils/request'
/**
 * 获取机构树
 *
 * @author yubaoshan
 * @date 2020/4/26 12:08
 */
export function getOrgTree (parameter) {
  return axios({
    url: '/sysOrg/tree',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取机构列表
 *
 * @author yubaoshan
 * @date 2020/5/11 12:59
 */
export function getOrgList (parameter) {
  return axios({
    url: '/sysOrg/list',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取机构列表
 *
 * @author yubaoshan
 * @date 2020/5/11 16:17
 */
export function getOrgPage (parameter) {
  return axios({
    url: '/sysOrg/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 新增机构
 *
 * @author yubaoshan
 * @date 2020/5/11 13:56
 */
export function sysOrgAdd (parameter) {
  return axios({
    url: '/sysOrg/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑机构
 *
 * @author yubaoshan
 * @date 2020/5/11 13:56
 */
export function sysOrgEdit (parameter) {
  return axios({
    url: '/sysOrg/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除机构
 *
 * @author yubaoshan
 * @date 2020/5/11 12:59
 */
export function sysOrgDelete (parameter) {
  return axios({
    url: '/sysOrg/delete',
    method: 'post',
    data: parameter
  })
}

+ 72 - 0
_web/src/api/modular/system/posManage.js

@ -0,0 +1,72 @@
import { axios } from '@/utils/request'
/**
 * 查询系统职位
 *
 * @author yubaoshan
 * @date 2020/5/25 01:31
 */
export function sysPosPage (parameter) {
  return axios({
    url: '/sysPos/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 系统职位列表
 *
 * @author yubaoshan
 * @date 2020/6/21 23:50
 */
export function sysPosList (parameter) {
  return axios({
    url: '/sysPos/list',
    method: 'get',
    params: parameter
  })
}
/**
 * 添加系统职位
 *
 * @author yubaoshan
 * @date 2020/5/25 01:31
 */
export function sysPosAdd (parameter) {
  return axios({
    url: '/sysPos/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑系统职位
 *
 * @author yubaoshan
 * @date 2020/5/25 01:31
 */
export function sysPosEdit (parameter) {
  return axios({
    url: '/sysPos/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除系统职位
 *
 * @author yubaoshan
 * @date 2020/5/25 01:31
 */
export function sysPosDelete (parameter) {
  return axios({
    url: '/sysPos/delete',
    method: 'post',
    data: parameter
  })
}

+ 142 - 0
_web/src/api/modular/system/roleManage.js

@ -0,0 +1,142 @@
import { axios } from '@/utils/request'
/**
 * 获取角色列表
 *
 * @author yubaoshan
 * @date 2020/5/6 11:44
 */
export function getRolePage (parameter) {
  return axios({
    url: '/sysRole/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 增加角色
 *
 * @author yubaoshan
 * @date 2020/5/6 11:44
 */
export function sysRoleAdd (parameter) {
  return axios({
    url: '/sysRole/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑角色
 *
 * @author yubaoshan
 * @date 2020/5/6 11:44
 */
export function sysRoleEdit (parameter) {
  return axios({
    url: '/sysRole/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除角色
 *
 * @author yubaoshan
 * @date 2020/5/6 17:51
 */
export function sysRoleDelete (parameter) {
  return axios({
    url: '/sysRole/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除角色
 *
 * @author yubaoshan
 * @date 2020/5/7 11:28
 */
export function sysRoleDeteil (parameter) {
  return axios({
    url: '/sysRole/detail',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取授权角色列表
 *
 * @author yubaoshan
 * @date 2020/5/26 23:59
 */
export function sysRoleDropDown (parameter) {
  return axios({
    url: '/sysRole/dropDown',
    method: 'get',
    params: parameter
  })
}
/**
 * 拥有菜单
 *
 * @author yubaoshan
 * @date 2020/6/02 19:02
 */
export function sysRoleOwnMenu (parameter) {
  return axios({
    url: '/sysRole/ownMenu',
    method: 'get',
    params: parameter
  })
}
/**
 * 授权菜单
 *
 * @author yubaoshan
 * @date 2020/6/2 21:10
 */
export function sysRoleGrantMenu (parameter) {
  return axios({
    url: '/sysRole/grantMenu',
    method: 'post',
    data: parameter
  })
}
/**
 * 拥有数据
 *
 * @author yubaoshan
 * @date 2020/6/02 21:40
 */
export function sysRoleOwnData (parameter) {
  return axios({
    url: '/sysRole/ownData',
    method: 'get',
    params: parameter
  })
}
/**
 * 授权数据
 *
 * @author yubaoshan
 * @date 2020/6/2 21:50
 */
export function sysRoleGrantData (parameter) {
  return axios({
    url: '/sysRole/grantData',
    method: 'post',
    data: parameter
  })
}

+ 43 - 0
_web/src/api/modular/system/smsManage.js

@ -0,0 +1,43 @@
import { axios } from '@/utils/request'
/**
 * 发送记录查询
 *
 * @author yubaoshan
 * @date 2020/7/3 22:11
 */
export function smsPage (parameter) {
  return axios({
    url: '/sms/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 验证短信验证码
 *
 * @author yubaoshan
 * @date 2020/7/3 22:12
 */
export function sysSendLoginMessage (parameter) {
  return axios({
    url: '/sms/sendLoginMessage',
    method: 'post',
    data: parameter
  })
}
/**
 * 验证短信验证码
 *
 * @author yubaoshan
 * @date 2020/7/3 22:12
 */
export function sysValidateMessage (parameter) {
  return axios({
    url: '/sms/validateMessage',
    method: 'post',
    data: parameter
  })
}

+ 128 - 0
_web/src/api/modular/system/timersManage.js

@ -0,0 +1,128 @@
import { axios } from '@/utils/request'
/**
 * 分页查询定时任务
 *
 * @author yubaoshan
 * @date 2020/7/3 03:13
 */
export function sysTimersPage (parameter) {
  return axios({
    url: '/sysTimers/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 获取全部定时任务
 *
 * @author yubaoshan
 * @date 2020/7/3 03:23
 */
export function sysTimersList (parameter) {
  return axios({
    url: '/sysTimers/list',
    method: 'get',
    params: parameter
  })
}
/**
 * 查看详情定时任务
 *
 * @author yubaoshan
 * @date 2020/7/3 03:23
 */
export function sysTimersDetail (parameter) {
  return axios({
    url: '/sysTimers/detail',
    method: 'get',
    params: parameter
  })
}
/**
 * 添加定时任务
 *
 * @author yubaoshan
 * @date 2020/7/3 03:23
 */
export function sysTimersAdd (parameter) {
  return axios({
    url: '/sysTimers/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 删除定时任务
 *
 * @author yubaoshan
 * @date 2020/7/3 03:23
 */
export function sysTimersDelete(parameter) {
  return axios({
    url: '/sysTimers/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑定时任务
 *
 * @author yubaoshan
 * @date 2020/7/3 03:23
 */
export function sysTimersEdit(parameter) {
  return axios({
    url: '/sysTimers/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 获取系统的所有任务列表
 *
 * @author yubaoshan
 * @date 2020/7/3 03:23
 */
export function sysTimersGetActionClasses (parameter) {
  return axios({
    url: '/sysTimers/getActionClasses',
    method: 'post',
    data: parameter
  })
}
/**
 * 启动定时任务
 *
 * @author yubaoshan
 * @date 2020/7/3 03:23
 */
export function sysTimersStart (parameter) {
  return axios({
    url: '/sysTimers/start',
    method: 'post',
    data: parameter
  })
}
/**
 * 停止定时任务
 *
 * @author yubaoshan
 * @date 2020/7/3 03:23
 */
export function sysTimersStop (parameter) {
  return axios({
    url: '/sysTimers/stop',
    method: 'post',
    data: parameter
  })
}

+ 183 - 0
_web/src/api/modular/system/userManage.js

@ -0,0 +1,183 @@
import { axios } from '@/utils/request'
/**
 * 获取用户列表
 *
 * @author yubaoshan
 * @date 2020/4/26 12:08
 */
export function getUserPage (parameter) {
  return axios({
    url: '/sysUser/page',
    method: 'get',
    params: parameter
  })
}
/**
 * 增加用户
 *
 * @author yubaoshan
 * @date 2020/5/5 02:08
 */
export function sysUserAdd (parameter) {
  return axios({
    url: '/sysUser/add',
    method: 'post',
    data: parameter
  })
}
/**
 * 编辑用户
 *
 * @author yubaoshan
 * @date 2020/5/5 02:08
 */
export function sysUserEdit (parameter) {
  return axios({
    url: '/sysUser/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * 获取用户详情
 *
 * @author yubaoshan
 * @date 2020/5/5 19:55
 */
export function sysUserDetail (parameter) {
  return axios({
    url: '/sysUser/detail',
    method: 'get',
    params: parameter
  })
}
/**
 * 删除用户
 *
 * @author yubaoshan
 * @date 2020/5/7 19:31
 */
export function sysUserDelete (parameter) {
  return axios({
    url: '/sysUser/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * 拥有角色
 *
 * @author yubaoshan
 * @date 2020/6/3 11:58
 */
export function sysUserOwnRole (parameter) {
  return axios({
    url: '/sysUser/ownRole',
    method: 'get',
    params: parameter
  })
}
/**
 * 授权角色
 *
 * @author yubaoshan
 * @date 2020/5/26 23:59
 */
export function sysUserGrantRole (parameter) {
  return axios({
    url: '/sysUser/grantRole',
    method: 'post',
    data: parameter
  })
}
/**
 * 拥有数据
 *
 * @author yubaoshan
 * @date 2020/6/2 23:14
 */
export function sysUserOwnData (parameter) {
  return axios({
    url: '/sysUser/ownData',
    method: 'get',
    params: parameter
  })
}
/**
 * 授权数据
 *
 * @author yubaoshan
 * @date 2020/6/2 23:15
 */
export function sysUserGrantData (parameter) {
  return axios({
    url: '/sysUser/grantData',
    method: 'post',
    data: parameter
  })
}
/**
 * 修改状态
 *
 * @author yubaoshan
 * @date 2020/6/23 21:36
 */
export function sysUserChangeStatus (parameter) {
  return axios({
    url: '/sysUser/changeStatus',
    method: 'post',
    data: parameter
  })
}
/**
 * 重置密码
 *
 * @author yubaoshan
 * @date 2020/6/23 22:04
 */
export function sysUserResetPwd (parameter) {
  return axios({
    url: '/sysUser/resetPwd',
    method: 'post',
    data: parameter
  })
}
/**
 * 修改密码
 *
 * @author yubaoshan
 * @date 2020/6/25 00:25
 */
export function sysUserUpdatePwd (parameter) {
  return axios({
    url: '/sysUser/updatePwd',
    method: 'post',
    data: parameter
  })
}
/**
 * 用户选择器
 *
 * @author yubaoshan
 * @date 2020/6/25 00:25
 */
export function sysUserSelector (parameter) {
  return axios({
    url: '/sysUser/selector',
    method: 'get',
    params: parameter
  })
}

+ 69 - 0
_web/src/assets/background.svg

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
    <title>Group 21</title>
    <desc>Created with Sketch.</desc>
    <defs></defs>
    <g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
            <g id="Group-21" transform="translate(77.000000, 73.000000)">
                <g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
                    <ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"></ellipse>
                    <ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"></ellipse>
                    <path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"></path>
                    <path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"></path>
                    <path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
                    <path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
                    <g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6">
                        <ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"></ellipse>
                        <path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "></path>
                    </g>
                </g>
                <g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
                    <ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"></ellipse>
                    <ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"></ellipse>
                    <ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"></ellipse>
                    <ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"></ellipse>
                    <path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"></path>
                    <g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6">
                        <ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"></ellipse>
                        <path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "></path>
                    </g>
                    <ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"></ellipse>
                    <ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"></ellipse>
                    <ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"></ellipse>
                    <path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"></path>
                </g>
                <g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
                    <ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"></ellipse>
                    <g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
                        <ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"></ellipse>
                        <path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"></path>
                    </g>
                    <path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"></path>
                    <ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"></ellipse>
                    <ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"></ellipse>
                    <path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"></path>
                </g>
                <g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
                    <g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9">
                        <circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"></circle>
                        <path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "></path>
                    </g>
                    <circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"></circle>
                    <path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"></path>
                    <path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"></path>
                    <polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"></polyline>
                    <path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"></path>
                    <path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"></path>
                    <path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"></path>
                    <circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"></circle>
                    <circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"></circle>
                    <circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"></circle>
                    <circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"></circle>
                    <circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"></circle>
                </g>
            </g>
        </g>
    </g>
</svg>

File diff suppressed because it is too large
+ 1 - 0
_web/src/assets/icons/bx-analyse.svg


BIN
_web/src/assets/logo.png


+ 105 - 0
_web/src/assets/logo.svg

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="98px" height="97px" viewBox="0 0 98 97" enable-background="new 0 0 98 97" xml:space="preserve">  <image id="image0" width="98" height="97" x="0" y="0"
    href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGIAAABhCAYAAAAtMXSgAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAV
cElEQVR42t1de5QcVZn/3Xurqh8znZ7JkxBeAQwERVxEAV0EF1dFcZFVxOPioogu+wB1j57dFUVE
V8keReCgiye6gkFZwBMW5BlEQCALCIaESEIgJCQkmcnk1d3V3fW4j/2jurqrq6v6MVPdM+x3zj09
03PmPr5ffY/73e9+RdB/IoHPYKN+OwLQL5+/+LBj9NySQ4zM6TnKTkwRtpgSMosBOgioUoSMcWvl
kVuevhRABYAINBUYg+bz+e9QSr9c+04RQlylVEUpNaaU2sA5Xy2EWGdZ1qsASgBkrR8Zairw6Y+h
0AciU++iJwBo7ZP5IJydHh355pwjzlpkZM6apbHTGKGz4zq0pNwz+srj7wKwF4ALgAcY6I/Fstns
+9Lp9G/i+lEeTSilHuWc318ulx8DYAb6igKlr4BoAwCBBj59ALQ7Fix5+7uG5nxuhOkfoYQMd9Op
giIAUrV5K7QyhgZa/OQ8mg/gE5TS83Rd3y2EuLNarf6Cc74FHsAcDVBEbQ1hMICEAEkaiLAUBBnD
AGhPHHzCB47NDH9piGmn9Ny7AgGg1+btM4kgWvq6m7BHCyill2iadpEQ4n7btn9k2/Z6eFIn0Cx5
fZGOJIHwFx+UAB8A9tDBx7/3xMysr2cpezsImaxKJLU5azXm+GNItKq/3jsnxNA07RzG2IfS6fQ9
5XL5B5zzV9GsBv3mAxKkSQOSFBBRRpgBYNeOLl78ydGF38sz7YMghE5pEI+9dfuCVgnwf57SE0oI
0Rlj5+ZyuQ+4rvtT0zR/DOAAPED8cYPqypeQSY89JcagFQBWa9oiILPhsJP++eK5h/xvXtM/NFUQ
4K0wrO6CAITnNGUihGQNw7hsZGTkvnQ6fSaALACj1nwVGfVg9ExTkYiwQa7bgZ/NPfKYj85aeENW
005OgiENUmEXOCwNfSFK6ZGZTOYXuq7fUiqVvgdPOsJzCHpvQI+SMdmnNGgP6gAA0J9b9GefOn90
0e+SB6E+3ainLgxG4r4+IYTpun7hyMjISk3TToDnvYUlw5eOnp2GyQARCcK7MDy8Y/Ep1xyXzf0n
IzSXNCOAuvvaz71PR6KUHjc8PHx7JpP5OBqqSq+1sJoK8qst9aqaIm3Ct2cdcvAl8w6/eZhpp04n
kwLUl92vT5TSfDqd/iFj7GjTNK8DUEYz40Xt566NeC8SEQWC9ou5xyy9dP4R9w8ChB5Eoa9AAHVV
dWk+n/8+gFE0jHiUmuo4/W6BiAThzrnHnnTuyPx7U5Qd1e+F90h9BwLwNoOMsXPz+fyNAOahvc1o
S90AEfaOGADtnvlLT/nLkfkrNUrnD2LRtQl0WlBfA3NxxBg7PZ/PLwewAJ0NeCR1AiLSMN+94Jh3
vjc/79eMktFBLrhGA2Vyt8QYO7mNZHTcZ7QDIhKE2+cfe/x7Zy24jRKSH/xyiW/0wmA0fUcIEb30
mhTVwLgewGw0g6GhAxjdSERdJV0z+7DDPzhr3u0aIXOnY6E1UhEt6u/TQoyx03O53HcADKMH4x0H
RIuLel5mzshnRw/7lU7pIdO1yNrMoyKgTY1zPi0S4ZOmaecMDw9fhuZ9RlAqWvgeBUSLcR4F9BsW
Lrkhzdhbp3OBNeoUjlaEEDnJvhMhQgjRdf3vM5nMh+HtwMP2omXnHScRTRHUpw9/x6WzmH7OdC1M
KSXHXXvT6vL+W+BtnnwwWkAAIC3L2uK67o1Sym3TNWdCCEun01cxxo5Ds62I9KSiYjZBlaTfv/DN
7z5jeM7dIMQY9GLGubP5D9XiIz87sP3hB6rFLQCK8I40nUDzT9L8+ftxrwyAvGEYJ6dSqY8yxt5H
KR24g8E5X18sFv8G3vGuXZuzf+BUf6DC4WMg4CGdl5kzunzR0scGuWHjUjovOuXH/2vfjrt+Yo6v
qzG/Wpu8GwAg6swaaDxxfvzHgKer52Wz2Q/puv5xSukxZPKHUz2Tbds/L5fL34UnzXZgLfXkhzAQ
vkrSAGjbF5/yw7l66nODmKwrZfXZavGhb0y8ctuTTnlLbdI+s4Of/s/BE7Ogl9R0LhIAxG+5VCp1
WiqVuogxdsIgAFFKueVy+SLHcX5fA8IHo/4gRZ0xMwDagwcd/57TcrN/QwhYn2cp11nlxy6f2HzT
b60DL8NTPbxDCx9XhoHwVZQPhv8ZbMOZTOYvDMO4lDF2ZL/BEEK8VCgUzgewB80qigOQPpObQFgC
ZL+5YMkvdUoP6ufkCsLduWz3a//xmYmNN7/KrW1oiG5Q/QQnHFRFviS02zeEXdugt+Vwzl+xbfse
xpjLPI+wX1ktoJTOpZSWXdddgwjXmyFiz/D4oSd9dp6R+nTfEFBKramaj77/9eevuM/avwZeklcQ
gHYgxEmCH26OA0IiGhDLcZxnhRBPM8beRml8XtVUiTH2Zsuy7gNQCM/JB6Jp4/bp0UU3sy5zjXol
oRS/ozC+/CO71v+oqMQueIY4DEDQFkQxv10qS/iUrsW9jfgUQohdtm2v0nX9cEppX5wTQkiaMWY4
jvNkbW1NEtEUS7rz4OP/abaun92PiThSWtfu2371F/dsXgnv3NeXAt94+e5oOwnoNsIaBKRdC/Zb
sW37EcbYCKX0Lf0w5Iyxo13XfVBKuS8wvvSBYADYacjOumTeoT+jhAwlPQFXKfvqPVv//dv7tz0E
TxX5AATVkO8ZNfnYaLUDvcSSoiSkXXMdx3lK07QRSunxfQBDJ4SQgFRI1CSi7l3cc+hbL5xnpP46
aRCkUuLGfduuuWL/tgfg7QuCIITtQLcqaLIUBiT4nT+ucBznKcMwjqKUvilpflBKF1uWdRcaCdCy
KS/1UCNzUdKDAsAD5p5bv7p36z2IByHKK4qThqlQlAflp1SGN4xmsVj8mhBiY9L8IITkhoaGzkEg
BlWPBv7P/KUnpRl7c9KDbrYra87f9eJN8DwFB9GGud8AhKkdIDwwvz2WZX1FKVVJegKapp0NL1TO
UAOCAKAnDuc/lfRgthLlL+x66RruxVlmAgBh6giGbdvrHMe5MemBKaVLDMNYiqBEHASk8lQ/K+nB
7i/u/e/VTvFltLqlYYMcle4+KArahzAYLgCnXC4vl1JuSXLQWqj8/fBiYR4QPzn4LW8zCFmQ5ED7
uTN28fiGO9CIGYU3aDMBBJ+i9hr+g+ICKNi2fZ1SKtnLKZr2HnhRYkb/CkNDxxnZM6eQKh9J95T2
3Fb2VFI4WBdObZ9uEHwKS4ZEYE9TrVZ/o5TanOSAlNIjGGMLATD6qYMWHZZn+p8nOYAp+P4vTbz8
IAAL8bvkQduDbigoGWFVVeGcr0hyMEIIS6VSJwOgdDYxDsmSZL2ltVbp4UpDGnwAOsWKZgrFGnDT
NO9M2oPSNG0pAJ0u0tNvZQSJnlwtL+x8CN7NzzgQZiIAQYoKDgoAe4QQDyc5EKV0KQBGZ2n6kiTt
wz7ubrvN3PMSmr2P6XRRp0Jh48055/cmPMZCABpNE7IoyV43u+W1aBzuzFTD3A1Fbvoqlcrv4dm+
RIgQMgfAbKoROi/J2T9jmc/AC22/0aXBp7B62ieEWJdU54QQkkqlhiklJJPYlJVS9xZ2v4DmcPZM
N85tV4RWqXCllE8kPQ6tSpHYjrEsxfgjTmkHonfPb0RpqDMKgU2elHJtkp0LIQrkgtS8oxemUkdX
lNLKcDWuFOMAcQFqC0Fqd1iVBJQLoQSgJIgSgkOCSEUgJSAVJLeFKK/j1g54OjQupvRGAyJ4lOwn
HsxKp9NLlVIZpVQ9cUwI0e6etwIAxlhdwoQQHIArhFhLAOTQSDUJZqN1c101+JT7T39c2ssbzViH
wYhL05ksz4JhFK6hcXHb/yOvddrNzci4sEC4bMIbWS0F1+pXOBCh76J4FpXIEO6rDoYW6NT/Q/Cw
COgeiHDn4ZSX/w/krzH8ey888/+vacOoBToOA9FNh36nwUkFB4iqdzQdlGRAMwhGGIhOfAtLRZ0/
PhB+iZ2g+PUy+U4ZEtNBJObndoyKY1wUg4O8CudUkYg+2vJMi/mHYMftdF34u7ibPIMEg0R8JlUm
oheedPN9JBDd1reImkTche7gEzUIMNpVTetn3Q7S5fex/AhfsuvV6AQ7j7IRNPDdIMEIrinulk4v
a+s0Xi//F5l5qOVyuZNLpdILaPjIcdVfOnXqu3Eumr0nYDC2oqle1MbD3nmOAg4SBLqEIkIpKiG9
CSkiFaQSIApESi6JJEQJKZVUhAgXAkxSoQiRElIqEKWklJIQqSCllERKIiX3/l9IISWXkltEiqpQ
3BaSW1TyEhe8zAWvEOnudSvuTsfhW2G7uzwe1fde144eOUTy+fwfKKUnRCAZyzhCSMtNTqUUlFJj
Bw4cOBPAfkSXYOun9xSUBL30ptPWaaQ/OaxTJqWUIhBQEApKrNw3foYG4AAhRJ8yFwgBIWTx0NDQ
x8rl8gp4IY760OivamopUaEUtOmtY9OeWQTQQKAREKws7TQpIWQ8yTE0TTsPjbBJ25uU/VomAKaI
6ttdhyRJKeXe6ZgOFUK8lmTHlNJ3aJp2FCZZHGSK1FBPauql6wZBZSV2A6BUSrleKZXYvWRCCEmn
0/794l6CYVMeOtA/pVOvVzgQKooaEEKIXQB2J9k5pfRMAENovVvcb/VUtxOy33f/EqKtvLoJAKhl
Wa8nefQHAIyxY4N5nWiu0NLvJ5XAq57yhpCIzVblZQCKwru580yinCCEGoZxLoA0Eig82O2wTb+p
mQ+EVEr8pLDjOdQYIxzH+V3SeZ26rn8YtVQRREtGv1QUAUDo4O6zT5r2cue155zKBGoSIS3L2qSU
StR7IoTkcrncZ9BstHuudTfZ4Wtrm9G03i4/BS8RT/qxIFsIsSrpgTRN+4RhGMejQ0GQ/tAMd1+V
UreWxn4H73xf1M8gHMe5I2n1RAhJZTKZbwGYg+baqP0HRM1siRgTzuYVpQk/I7IuEcK27ReVUmuS
HpAxtjSXy/0bvMIkwQP3/oKRQC3yftLqyoEH0Xh5iPCBkAAc13UTTTv3SdO0c4eGhr4Az4sKgxFX
+X5K1EVFzGkjS4rSNya2PADvUmcdiHpqR7lcvksptSPpgQkhxDCMy7LZ7AXwbsjEpaL0cg7SfswZ
DMSz1eKqV4U9jkB+cFAiBADTdd3l/Ri8dinj69ls9m/hgRFXHzUR6SBkZgLhSlm9cuK129GoxMYR
kggJQJim+Sul1Ov9mIQPRq3w4BCi38WQCCBqhgb9nq4W7nvSKWxFqMxFCxAACo7jXNeviRBCqK7r
l+Vyue/DK1YbLP8fZTt6ASSwN5l5XlNVysJlY6/cgtaaVNIHoillslwu/1oI8Xy/JlS72npOPp+/
wzCMd8Iz4n41yG4BIR2GmHGq6e7ixC0bRGU7Igq/BIEI5mOWq9XqlUopt58TY4wtGRoaui2Xy10B
4CB4gATVVTuVBcSAshAzL/I65lovXbJ740p4O+mW5GxffMNJscJxnD9wzm/u9wQ94dAvHhkZeTiX
y30ZDUB8ldXJhrRQHukZpZaEks5VE1uus7wycmFpqBdFiZIIDsAplUrfF0JsGsRkKaVzdF3/yujo
6BPDw8PLUqnUO9D6cqXgzjzWdsz2qu7MGPqtuf+2n5u7/4jmCpdNFzyDT04UGAcsy/qqUqo6qEkT
QmYZhnHB0NDQvfl8ftXw8PDXUqnUiWgu79z2FTKZlDFjgNhuV1/4+K71P4dXEij2znlQNbWkigNw
bdt+1nXdZUnHobohxthSwzC+lM1mV42MjKzO5XL/gtYj2LCKIiMz5CzCFGL/xeMbl/HGu1Wj7o0o
tJGIJjBM07yJc37ndC2IEEJq5RLOgpchEpcdQgDAgD7tEiGVcn+wZ+uy31vFDWgtLxosECaB6OPE
sHpyAVRLpdLlQojEg4I9EkPDzY0NGOYNfVpdV6WU+nVh/KdXF15/DI3ikVGVeer2OQxE5LWiWjtQ
qVT+QUqZ6AFSjwuk6OJNJalpDoE/Wdm38sLdL92KRsW2cFWelgs8cRIR3uS5AFzXdV8zTfPzQohE
k9K6JUJI3AFTEzGlTZtqWlst/vasHet/BGAfui8U1taoRYLBOf+TZVmfl1LumYZ1Bt+JHZvhPaRP
j0RssMwnTt++Zhn30pOiikfG3imMm3DbAoS2bf+xUqlcLKWcGPBag0DEhjqoYgOXiA2W+cSp2567
ygbG0Fo2L+ryf8vC4ijOXjgAHMdxnq1Wq5+VUu4c4HrbxZvqUpHStYEa6zXV4kOnbnvuWzawC41q
+GEgwtUXmrYD3YhwEJCmWne2bT9vmuYFQoiXBrTmdu9EqlNmUMZaKfload8d79m+5rs1SYgDoeM1
504TjrtHXa/RxznfVCgUPi2EeGwAS+8Y8AMAMgDVJJV0bi2O/fisXS9cz4EJeNkYQRA6ldRuWVgn
igLDN97+oDsKhcIljuMsTzKhuWUiXT7plMm+AmFyvvcbuzdfftH4plvgeUd+yYtuKjtHUrd3CPyL
JnEvzlYAiqZpLkulUusymcyVlNI5STOAeJkZHQ+IMuiTjVBKbXOray/cueHqpxzzZXgh7XZV/ru+
KdXLZY4oMJpK7wOQtm3fLYR4MZvNXqlp2mkJs6IrBjPFErcRXCl7VWnPrz429uIKeOHsuILCk7qu
1uutmjAYKuLvinO+qVgs/l02mz3fMIzLKKWjCfGjKwYzJhMFYqdb3XjFxNZrf2nufh6NKGqUFIRj
SF3fGZzM9aYgGHHvaJAAZKVSuclxnEczmcwXNU07u7YzngoFz09iiSEZiagKXrjb3Lvi4vGNK3nj
9WXhis5R77rouQjMZBkTvJwYthtNxT4455tLpdK/GoZxezqd/kfG2Klkkll4ARsRHKtlbgabmvvq
Kmk9Uyncd+nYKytqZ8x+xc4wAO1Ka/d0bDCVJzQMRlTZtfqG0HGc1Y7jPJ9Op09JpVKfoZS+mxDS
q3dD0SryrT65opMCwpaissYqrbpy75bbH6sWN6ORbRF+DVucFMSp7L4CER4wrh5HsNIltyzrEcuy
nmaMLclkMp/UNO19PXhYccA3tVQvy1JK7RN8++pqYdVVu7fc+4Ko7ETDGwoyPegN+bZAhOYzKRCS
ACIIQpTdCO896oAIIZ43TXMDgB9mMplTNU07Q9O0kwEsaJMKQ9HeK/EKjHRalYLYJ5ydG+3q03eV
dj96fXHnC/BC1n4uart338W9fm1KJ5hJ3kUOqyr/5yhAeG1sF0C1Wq3eDeBBAFnG2OGpVOpthJDF
jLGjCCEjhJA0ACqlNOFtntqVp5NVIYolwf8kgTSglK2kXRHiwOvcfnWLU31tRWHX2scdcwzek2+H
GM0jPoMPUrgOFTBFEADg/wB/5lwNwMzQIAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMC0wNS0yN1Qx
NDozNzozNCswMDowMEebVpIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjAtMDUtMjdUMTQ6Mzc6MzQr
MDA6MDA2xu4uAAAAAElFTkSuQmCC" />
</svg>

BIN
_web/src/assets/welcome.png


+ 89 - 0
_web/src/components/ArticleListContent/ArticleListContent.vue

@ -0,0 +1,89 @@
<template>
  <div class="antd-pro-components-article-list-content-index-listContent">
    <div class="description">
      <slot>
        {{ description }}
      </slot>
    </div>
    <div class="extra">
      <a-avatar :src="avatar" size="small" />
      <a :href="href">{{ owner }}</a> 发布在 <a :href="href">{{ href }}</a>
      <em>{{ updateAt | moment }}</em>
    </div>
  </div>
</template>
<script>
export default {
  name: 'ArticleListContent',
  props: {
    prefixCls: {
      type: String,
      default: 'antd-pro-components-article-list-content-index-listContent'
    },
    description: {
      type: String,
      default: ''
    },
    owner: {
      type: String,
      required: true
    },
    avatar: {
      type: String,
      required: true
    },
    href: {
      type: String,
      required: true
    },
    updateAt: {
      type: String,
      required: true
    }
  }
}
</script>
<style lang="less" scoped>
@import '../index.less';
.antd-pro-components-article-list-content-index-listContent {
  .description {
    max-width: 720px;
    line-height: 22px;
  }
  .extra {
    margin-top: 16px;
    color: @text-color-secondary;
    line-height: 22px;
    & /deep/ .ant-avatar {
      position: relative;
      top: 1px;
      width: 20px;
      height: 20px;
      margin-right: 8px;
      vertical-align: top;
    }
    & > em {
      margin-left: 16px;
      color: @disabled-color;
      font-style: normal;
    }
  }
}
@media screen and (max-width: @screen-xs) {
  .antd-pro-components-article-list-content-index-listContent {
    .extra {
      & > em {
        display: block;
        margin-top: 8px;
        margin-left: 0;
      }
    }
  }
}
</style>

+ 3 - 0
_web/src/components/ArticleListContent/index.js

@ -0,0 +1,3 @@
import ArticleListContent from './ArticleListContent'
export default ArticleListContent

+ 46 - 0
_web/src/components/AvatarList/Item.vue

@ -0,0 +1,46 @@
<template>
  <tooltip v-if="tips !== ''">
    <template slot="title">{{ tips }}</template>
    <avatar :size="avatarSize" :src="src" />
  </tooltip>
  <avatar v-else :size="avatarSize" :src="src" />
</template>
<script>
import Avatar from 'ant-design-vue/es/avatar'
import Tooltip from 'ant-design-vue/es/tooltip'
export default {
  name: 'AvatarItem',
  components: {
    Avatar,
    Tooltip
  },
  props: {
    tips: {
      type: String,
      default: '',
      required: false
    },
    src: {
      type: String,
      default: ''
    }
  },
  data () {
    return {
      size: this.$parent.size
    }
  },
  computed: {
    avatarSize () {
      return this.size !== 'mini' && this.size || 20
    }
  },
  watch: {
    '$parent.size' (val) {
      this.size = val
    }
  }
}
</script>

+ 99 - 0
_web/src/components/AvatarList/List.vue

@ -0,0 +1,99 @@
<!--
<template>
  <div :class="[prefixCls]">
    <ul>
      <slot></slot>
      <template v-for="item in filterEmpty($slots.default).slice(0, 3)"></template>
      <template v-if="maxLength > 0 && filterEmpty($slots.default).length > maxLength">
        <avatar-item :size="size">
          <avatar :size="size !== 'mini' && size || 20" :style="excessItemsStyle">{{ `+${maxLength}` }}</avatar>
        </avatar-item>
      </template>
    </ul>
  </div>
</template>
-->
<script>
import Avatar from 'ant-design-vue/es/avatar'
import AvatarItem from './Item'
import { filterEmpty } from '@/components/_util/util'
export default {
  AvatarItem,
  name: 'AvatarList',
  components: {
    Avatar,
    AvatarItem
  },
  props: {
    prefixCls: {
      type: String,
      default: 'ant-pro-avatar-list'
    },
    /**
       * 头像大小 类型: large、small 、mini, default
       * 默认值: default
       */
    size: {
      type: [String, Number],
      default: 'default'
    },
    /**
       * 要显示的最大项目
       */
    maxLength: {
      type: Number,
      default: 0
    },
    /**
       * 多余的项目风格
       */
    excessItemsStyle: {
      type: Object,
      default: () => {
        return {
          color: '#f56a00',
          backgroundColor: '#fde3cf'
        }
      }
    }
  },
  data () {
    return {}
  },
  methods: {
    getItems (items) {
      const classString = {
        [`${this.prefixCls}-item`]: true,
        [`${this.size}`]: true
      }
      if (this.maxLength > 0) {
        items = items.slice(0, this.maxLength)
        items.push((<Avatar size={ this.size } style={ this.excessItemsStyle }>{`+${this.maxLength}`}</Avatar>))
      }
      const itemList = items.map((item) => (
        <li class={ classString }>{ item }</li>
      ))
      return itemList
    }
  },
  render () {
    const { prefixCls, size } = this.$props
    const classString = {
      [`${prefixCls}`]: true,
      [`${size}`]: true
    }
    const items = filterEmpty(this.$slots.default)
    const itemsDom = items && items.length ? <ul class={`${prefixCls}-items`}>{ this.getItems(items) }</ul> : null
    return (
      <div class={ classString }>
        { itemsDom }
      </div>
    )
  }
}
</script>

+ 4 - 0
_web/src/components/AvatarList/index.js

@ -0,0 +1,4 @@
import AvatarList from './List'
import './index.less'
export default AvatarList

+ 60 - 0
_web/src/components/AvatarList/index.less

@ -0,0 +1,60 @@
@import "../index";
@avatar-list-prefix-cls: ~"@{ant-pro-prefix}-avatar-list";
@avatar-list-item-prefix-cls: ~"@{ant-pro-prefix}-avatar-list-item";
.@{avatar-list-prefix-cls} {
  display: inline-block;
  ul {
    list-style: none;
    display: inline-block;
    padding: 0;
    margin: 0 0 0 8px;
    font-size: 0;
  }
}
.@{avatar-list-item-prefix-cls} {
  display: inline-block;
  font-size: @font-size-base;
  margin-left: -8px;
  width: @avatar-size-base;
  height: @avatar-size-base;
  :global {
    .ant-avatar {
      border: 1px solid #fff;
      cursor: pointer;
    }
  }
  &.large {
    width: @avatar-size-lg;
    height: @avatar-size-lg;
  }
  &.small {
    width: @avatar-size-sm;
    height: @avatar-size-sm;
  }
  &.mini {
    width: 20px;
    height: 20px;
    :global {
      .ant-avatar {
        width: 20px;
        height: 20px;
        line-height: 20px;
        .ant-avatar-string {
          font-size: 12px;
          line-height: 18px;
        }
      }
    }
  }
}

+ 64 - 0
_web/src/components/AvatarList/index.md

@ -0,0 +1,64 @@
# AvatarList 用户头像列表
一组用户头像,常用在项目/团队成员列表。可通过设置 `size` 属性来指定头像大小。
引用方式:
```javascript
import AvatarList from '@/components/AvatarList'
const AvatarListItem = AvatarList.AvatarItem
export default {
    components: {
        AvatarList,
        AvatarListItem
    }
}
```
## 代码演示  [demo](https://pro.loacg.com/test/home)
```html
<avatar-list size="mini">
    <avatar-list-item tips="Jake" src="https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png" />
    <avatar-list-item tips="Andy" src="https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png" />
    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
</avatar-list>
```
```html
<avatar-list :max-length="3">
    <avatar-list-item tips="Jake" src="https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png" />
    <avatar-list-item tips="Andy" src="https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png" />
    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
</avatar-list>
```
## API
### AvatarList
| 参数               | 说明       | 类型                                 | 默认值       |
| ---------------- | -------- | ---------------------------------- | --------- |
| size             | 头像大小     | `large`、`small` 、`mini`, `default` | `default` |
| maxLength        | 要显示的最大项目 | number                             | -         |
| excessItemsStyle | 多余的项目风格  | CSSProperties                      | -         |
### AvatarList.Item
| 参数   | 说明     | 类型        | 默认值 |
| ---- | ------ | --------- | --- |
| tips | 头像展示文案 | string | -   |
| src  | 头像图片连接 | string    | -   |

+ 62 - 0
_web/src/components/Charts/Bar.vue

@ -0,0 +1,62 @@
<template>
  <div :style="{ padding: '0 0 32px 32px' }">
    <h4 :style="{ marginBottom: '20px' }">{{ title }}</h4>
    <v-chart
      height="254"
      :data="data"
      :forceFit="true"
      :padding="['auto', 'auto', '40', '50']">
      <v-tooltip />
      <v-axis />
      <v-bar position="x*y"/>
    </v-chart>
  </div>
</template>
<script>
export default {
  name: 'Bar',
  props: {
    title: {
      type: String,
      default: ''
    },
    data: {
      type: Array,
      default: () => {
        return []
      }
    },
    scale: {
      type: Array,
      default: () => {
        return [{
          dataKey: 'x',
          min: 2
        }, {
          dataKey: 'y',
          title: '时间',
          min: 1,
          max: 22
        }]
      }
    },
    tooltip: {
      type: Array,
      default: () => {
        return [
          'x*y',
          (x, y) => ({
            name: x,
            value: y
          })
        ]
      }
    }
  },
  data () {
    return {
    }
  }
}
</script>

+ 120 - 0
_web/src/components/Charts/ChartCard.vue

@ -0,0 +1,120 @@
<template>
  <a-card :loading="loading" :body-style="{ padding: '20px 24px 8px' }" :bordered="false">
    <div class="chart-card-header">
      <div class="meta">
        <span class="chart-card-title">
          <slot name="title">
            {{ title }}
          </slot>
        </span>
        <span class="chart-card-action">
          <slot name="action"></slot>
        </span>
      </div>
      <div class="total">
        <slot name="total">
          <span>{{ typeof total === 'function' && total() || total }}</span>
        </slot>
      </div>
    </div>
    <div class="chart-card-content">
      <div class="content-fix">
        <slot></slot>
      </div>
    </div>
    <div class="chart-card-footer">
      <div class="field">
        <slot name="footer"></slot>
      </div>
    </div>
  </a-card>
</template>
<script>
export default {
  name: 'ChartCard',
  props: {
    title: {
      type: String,
      default: ''
    },
    total: {
      type: [Function, Number, String],
      required: false,
      default: null
    },
    loading: {
      type: Boolean,
      default: false
    }
  }
}
</script>
<style lang="less" scoped>
  .chart-card-header {
    position: relative;
    overflow: hidden;
    width: 100%;
    .meta {
      position: relative;
      overflow: hidden;
      width: 100%;
      color: rgba(0, 0, 0, .45);
      font-size: 14px;
      line-height: 22px;
    }
  }
  .chart-card-action {
    cursor: pointer;
    position: absolute;
    top: 0;
    right: 0;
  }
  .chart-card-footer {
    border-top: 1px solid #e8e8e8;
    padding-top: 9px;
    margin-top: 8px;
    > * {
      position: relative;
    }
    .field {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      margin: 0;
    }
  }
  .chart-card-content {
    margin-bottom: 12px;
    position: relative;
    height: 46px;
    width: 100%;
    .content-fix {
      position: absolute;
      left: 0;
      bottom: 0;
      width: 100%;
    }
  }
  .total {
    overflow: hidden;
    text-overflow: ellipsis;
    word-break: break-all;
    white-space: nowrap;
    color: #000;
    margin-top: 4px;
    margin-bottom: 0;
    font-size: 30px;
    line-height: 38px;
    height: 38px;
  }
</style>

+ 67 - 0
_web/src/components/Charts/Liquid.vue

@ -0,0 +1,67 @@
<template>
  <div>
    <v-chart
      :forceFit="true"
      :height="height"
      :width="width"
      :data="data"
      :scale="scale"
      :padding="0">
      <v-tooltip />
      <v-interval
        :shape="['liquid-fill-gauge']"
        position="transfer*value"
        color=""
        :v-style="{
          lineWidth: 10,
          opacity: 0.75
        }"
        :tooltip="[
          'transfer*value',
          (transfer, value) => {
            return {
              name: transfer,
              value,
            };
          },
        ]"
      ></v-interval>
      <v-guide
        v-for="(row, index) in data"
        :key="index"
        type="text"
        :top="true"
        :position="{
          gender: row.transfer,
          value: 45
        }"
        :content="row.value + '%'"
        :v-style="{
          fontSize: 100,
          textAlign: 'center',
          opacity: 0.75,
        }"
      />
    </v-chart>
  </div>
</template>
<script>
export default {
  name: 'Liquid',
  props: {
    height: {
      type: Number,
      default: 0
    },
    width: {
      type: Number,
      default: 0
    }
  }
}
</script>
<style scoped>
</style>

+ 56 - 0
_web/src/components/Charts/MiniArea.vue

@ -0,0 +1,56 @@
<template>
  <div class="antv-chart-mini">
    <div class="chart-wrapper" :style="{ height: 46 }">
      <v-chart :force-fit="true" :height="height" :data="data" :padding="[36, 0, 18, 0]">
        <v-tooltip />
        <v-smooth-area position="x*y" />
      </v-chart>
    </div>
  </div>
</template>
<script>
import moment from 'moment'
const data = []
const beginDay = new Date().getTime()
for (let i = 0; i < 10; i++) {
  data.push({
    x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format('YYYY-MM-DD'),
    y: Math.round(Math.random() * 10)
  })
}
const tooltip = [
  'x*y',
  (x, y) => ({
    name: x,
    value: y
  })
]
const scale = [{
  dataKey: 'x',
  min: 2
}, {
  dataKey: 'y',
  title: '时间',
  min: 1,
  max: 22
}]
export default {
  name: 'MiniArea',
  data () {
    return {
      data,
      tooltip,
      scale,
      height: 100
    }
  }
}
</script>
<style lang="less" scoped>
  @import "chart";
</style>

+ 57 - 0
_web/src/components/Charts/MiniBar.vue

@ -0,0 +1,57 @@
<template>
  <div class="antv-chart-mini">
    <div class="chart-wrapper" :style="{ height: 46 }">
      <v-chart :force-fit="true" :height="height" :data="data" :padding="[36, 5, 18, 5]">
        <v-tooltip />
        <v-bar position="x*y" />
      </v-chart>
    </div>
  </div>
</template>
<script>
import moment from 'moment'
const data = []
const beginDay = new Date().getTime()
for (let i = 0; i < 10; i++) {
  data.push({
    x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format('YYYY-MM-DD'),
    y: Math.round(Math.random() * 10)
  })
}
const tooltip = [
  'x*y',
  (x, y) => ({
    name: x,
    value: y
  })
]
const scale = [{
  dataKey: 'x',
  min: 2
}, {
  dataKey: 'y',
  title: '时间',
  min: 1,
  max: 30
}]
export default {
  name: 'MiniBar',
  data () {
    return {
      data,
      tooltip,
      scale,
      height: 100
    }
  }
}
</script>
<style lang="less" scoped>
  @import "chart";
</style>

+ 75 - 0
_web/src/components/Charts/MiniProgress.vue

@ -0,0 +1,75 @@
<template>
  <div class="chart-mini-progress">
    <div class="target" :style="{ left: target + '%'}">
      <span :style="{ backgroundColor: color }" />
      <span :style="{ backgroundColor: color }"/>
    </div>
    <div class="progress-wrapper">
      <div class="progress" :style="{ backgroundColor: color, width: percentage + '%', height: height }"></div>
    </div>
  </div>
</template>
<script>
export default {
  name: 'MiniProgress',
  props: {
    target: {
      type: Number,
      default: 0
    },
    height: {
      type: String,
      default: '10px'
    },
    color: {
      type: String,
      default: '#13C2C2'
    },
    percentage: {
      type: Number,
      default: 0
    }
  }
}
</script>
<style lang="less" scoped>
  .chart-mini-progress {
    padding: 5px 0;
    position: relative;
    width: 100%;
    .target {
      position: absolute;
      top: 0;
      bottom: 0;
      span {
        border-radius: 100px;
        position: absolute;
        top: 0;
        left: 0;
        height: 4px;
        width: 2px;
        &:last-child {
          top: auto;
          bottom: 0;
        }
      }
    }
    .progress-wrapper {
      background-color: #f5f5f5;
      position: relative;
      .progress {
        transition: all .4s cubic-bezier(.08,.82,.17,1) 0s;
        border-radius: 1px 0 0 1px;
        background-color: #1890ff;
        width: 0;
        height: 100%;
      }
    }
  }
</style>

+ 40 - 0
_web/src/components/Charts/MiniSmoothArea.vue

@ -0,0 +1,40 @@
<template>
  <div :class="prefixCls">
    <div class="chart-wrapper" :style="{ height: 46 }">
      <v-chart :force-fit="true" :height="100" :data="dataSource" :scale="scale" :padding="[36, 0, 18, 0]">
        <v-tooltip />
        <v-smooth-line position="x*y" :size="2" />
        <v-smooth-area position="x*y" />
      </v-chart>
    </div>
  </div>
</template>
<script>
export default {
  name: 'MiniSmoothArea',
  props: {
    prefixCls: {
      type: String,
      default: 'ant-pro-smooth-area'
    },
    scale: {
      type: [Object, Array],
      required: true
    },
    dataSource: {
      type: Array,
      required: true
    }
  },
  data () {
    return {
      height: 100
    }
  }
}
</script>
<style lang="less" scoped>
  @import "smooth.area.less";
</style>

+ 68 - 0
_web/src/components/Charts/Radar.vue

@ -0,0 +1,68 @@
<template>
  <v-chart :forceFit="true" height="400" :data="data" :padding="[20, 20, 95, 20]" :scale="scale">
    <v-tooltip></v-tooltip>
    <v-axis :dataKey="axis1Opts.dataKey" :line="axis1Opts.line" :tickLine="axis1Opts.tickLine" :grid="axis1Opts.grid" />
    <v-axis :dataKey="axis2Opts.dataKey" :line="axis2Opts.line" :tickLine="axis2Opts.tickLine" :grid="axis2Opts.grid" />
    <v-legend dataKey="user" marker="circle" :offset="30" />
    <v-coord type="polar" radius="0.8" />
    <v-line position="item*score" color="user" :size="2" />
    <v-point position="item*score" color="user" :size="4" shape="circle" />
  </v-chart>
</template>
<script>
const axis1Opts = {
  dataKey: 'item',
  line: null,
  tickLine: null,
  grid: {
    lineStyle: {
      lineDash: null
    },
    hideFirstLine: false
  }
}
const axis2Opts = {
  dataKey: 'score',
  line: null,
  tickLine: null,
  grid: {
    type: 'polygon',
    lineStyle: {
      lineDash: null
    }
  }
}
const scale = [
  {
    dataKey: 'score',
    min: 0,
    max: 80
  }, {
    dataKey: 'user',
    alias: '类型'
  }
]
export default {
  name: 'Radar',
  props: {
    data: {
      type: Array,
      default: null
    }
  },
  data () {
    return {
      axis1Opts,
      axis2Opts,
      scale
    }
  }
}
</script>
<style scoped>
</style>

+ 77 - 0
_web/src/components/Charts/RankList.vue

@ -0,0 +1,77 @@
<template>
  <div class="rank">
    <h4 class="title">{{ title }}</h4>
    <ul class="list">
      <li :key="index" v-for="(item, index) in list">
        <span :class="index < 3 ? 'active' : null">{{ index + 1 }}</span>
        <span>{{ item.name }}</span>
        <span>{{ item.total }}</span>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  name: 'RankList',
  // ['title', 'list']
  props: {
    title: {
      type: String,
      default: ''
    },
    list: {
      type: Array,
      default: null
    }
  }
}
</script>
<style lang="less" scoped>
  .rank {
    padding: 0 32px 32px 72px;
    .list {
      margin: 25px 0 0;
      padding: 0;
      list-style: none;
      li {
        margin-top: 16px;
        span {
          color: rgba(0, 0, 0, .65);
          font-size: 14px;
          line-height: 22px;
          &:first-child {
            background-color: #f5f5f5;
            border-radius: 20px;
            display: inline-block;
            font-size: 12px;
            font-weight: 600;
            margin-right: 24px;
            height: 20px;
            line-height: 20px;
            width: 20px;
            text-align: center;
          }
          &.active {
            background-color: #314659;
            color: #fff;
          }
          &:last-child {
            float: right;
          }
        }
      }
    }
  }
  .mobile .rank {
    padding: 0 32px 32px 32px;
  }
</style>

+ 113 - 0
_web/src/components/Charts/TagCloud.vue

@ -0,0 +1,113 @@
<template>
  <v-chart :width="width" :height="height" :padding="[0]" :data="data" :scale="scale">
    <v-tooltip :show-title="false" />
    <v-coord type="rect" direction="TL" />
    <v-point position="x*y" color="category" shape="cloud" tooltip="value*category" />
  </v-chart>
</template>
<script>
import { registerShape } from 'viser-vue'
const DataSet = require('@antv/data-set')
const imgUrl = 'https://gw.alipayobjects.com/zos/rmsportal/gWyeGLCdFFRavBGIDzWk.png'
const scale = [
  { dataKey: 'x', nice: false },
  { dataKey: 'y', nice: false }
]
registerShape('point', 'cloud', {
  draw (cfg, container) {
    return container.addShape('text', {
      attrs: {
        fillOpacity: cfg.opacity,
        fontSize: cfg.origin._origin.size,
        rotate: cfg.origin._origin.rotate,
        text: cfg.origin._origin.text,
        textAlign: 'center',
        fontFamily: cfg.origin._origin.font,
        fill: cfg.color,
        textBaseline: 'Alphabetic',
        ...cfg.style,
        x: cfg.x,
        y: cfg.y
      }
    })
  }
})
export default {
  name: 'TagCloud',
  props: {
    tagList: {
      type: Array,
      required: true
    },
    height: {
      type: Number,
      default: 400
    },
    width: {
      type: Number,
      default: 640
    }
  },
  data () {
    return {
      data: [],
      scale
    }
  },
  watch: {
    tagList: function (val) {
      if (val.length > 0) {
        this.initTagCloud(val)
      }
    }
  },
  mounted () {
    if (this.tagList.length > 0) {
      this.initTagCloud(this.tagList)
    }
  },
  methods: {
    initTagCloud (dataSource) {
      const { height, width } = this
      const dv = new DataSet.View().source(dataSource)
      const range = dv.range('value')
      const min = range[0]
      const max = range[1]
      const imageMask = new Image()
      imageMask.crossOrigin = ''
      imageMask.src = imgUrl
      imageMask.onload = () => {
        dv.transform({
          type: 'tag-cloud',
          fields: ['name', 'value'],
          size: [width, height],
          imageMask,
          font: 'Verdana',
          padding: 0,
          timeInterval: 5000, // max execute time
          rotate () {
            let random = ~~(Math.random() * 4) % 4
            if (random === 2) {
              random = 0
            }
            return random * 90 // 0, 90, 270
          },
          fontSize (d) {
            if (d.value) {
              return ((d.value - min) / (max - min)) * (32 - 8) + 8
            }
            return 0
          }
        })
        this.data = dv.rows
      }
    }
  }
}
</script>

+ 64 - 0
_web/src/components/Charts/TransferBar.vue

@ -0,0 +1,64 @@
<template>
  <div :style="{ padding: '0 0 32px 32px' }">
    <h4 :style="{ marginBottom: '20px' }">{{ title }}</h4>
    <v-chart
      height="254"
      :data="data"
      :scale="scale"
      :forceFit="true"
      :padding="['auto', 'auto', '40', '50']">
      <v-tooltip />
      <v-axis />
      <v-bar position="x*y"/>
    </v-chart>
  </div>
</template>
<script>
const tooltip = [
  'x*y',
  (x, y) => ({
    name: x,
    value: y
  })
]
const scale = [{
  dataKey: 'x',
  title: '日期(天)',
  alias: '日期(天)',
  min: 2
}, {
  dataKey: 'y',
  title: '流量(Gb)',
  alias: '流量(Gb)',
  min: 1
}]
export default {
  name: 'Bar',
  props: {
    title: {
      type: String,
      default: ''
    }
  },
  data () {
    return {
      data: [],
      scale,
      tooltip
    }
  },
  created () {
    this.getMonthBar()
  },
  methods: {
    getMonthBar () {
      this.$http.get('/analysis/month-bar')
        .then(res => {
          this.data = res.result
        })
    }
  }
}
</script>

+ 82 - 0
_web/src/components/Charts/Trend.vue

@ -0,0 +1,82 @@
<template>
  <div class="chart-trend">
    {{ term }}
    <span>{{ rate }}%</span>
    <span :class="['trend-icon', trend]"><a-icon :type="'caret-' + trend"/></span>
  </div>
</template>
<script>
export default {
  name: 'Trend',
  props: {
    term: {
      type: String,
      default: '',
      required: true
    },
    percentage: {
      type: Number,
      default: null
    },
    type: {
      type: Boolean,
      default: null
    },
    target: {
      type: Number,
      default: 0
    },
    value: {
      type: Number,
      default: 0
    },
    fixed: {
      type: Number,
      default: 2
    }
  },
  data () {
    return {
      trend: this.type && 'up' || 'down',
      rate: this.percentage
    }
  },
  created () {
    const type = this.type === null ? this.value >= this.target : this.type
    this.trend = type ? 'up' : 'down'
    this.rate = (this.percentage === null ? Math.abs(this.value - this.target) * 100 / this.target : this.percentage).toFixed(this.fixed)
  }
}
</script>
<style lang="less" scoped>
  .chart-trend {
    display: inline-block;
    font-size: 14px;
    line-height: 22px;
    .trend-icon {
      font-size: 12px;
      &.up, &.down {
        margin-left: 4px;
        position: relative;
        top: 1px;
        i {
          font-size: 12px;
          transform: scale(.83);
        }
      }
      &.up {
        color: #f5222d;
      }
      &.down {
        color: #52c41a;
        top: -1px;
      }
    }
  }
</style>

+ 13 - 0
_web/src/components/Charts/chart.less

@ -0,0 +1,13 @@
.antv-chart-mini {
  position: relative;
  width: 100%;
  .chart-wrapper {
    position: absolute;
    bottom: -28px;
    width: 100%;
/*    margin: 0 -5px;
    overflow: hidden;*/
  }
}

+ 14 - 0
_web/src/components/Charts/smooth.area.less

@ -0,0 +1,14 @@
@import "../index";
@smoothArea-prefix-cls: ~"@{ant-pro-prefix}-smooth-area";
.@{smoothArea-prefix-cls} {
    position: relative;
    width: 100%;
    .chart-wrapper {
        position: absolute;
        bottom: -28px;
        width: 100%;
    }
}

+ 102 - 0
_web/src/components/CountDown/CountDown.vue

@ -0,0 +1,102 @@
<template>
  <span>
    {{ lastTime | format }}
  </span>
</template>
<script>
function fixedZero (val) {
  return val * 1 < 10 ? `0${val}` : val
}
export default {
  name: 'CountDown',
  props: {
    format: {
      type: Function,
      default: undefined
    },
    target: {
      type: [Date, Number],
      required: true
    },
    onEnd: {
      type: Function,
      default: () => ({})
    }
  },
  data () {
    return {
      dateTime: '0',
      originTargetTime: 0,
      lastTime: 0,
      timer: 0,
      interval: 1000
    }
  },
  filters: {
    format (time) {
      const hours = 60 * 60 * 1000
      const minutes = 60 * 1000
      const h = Math.floor(time / hours)
      const m = Math.floor((time - h * hours) / minutes)
      const s = Math.floor((time - h * hours - m * minutes) / 1000)
      return `${fixedZero(h)}:${fixedZero(m)}:${fixedZero(s)}`
    }
  },
  created () {
    this.initTime()
    this.tick()
  },
  methods: {
    initTime () {
      let lastTime = 0
      let targetTime = 0
      this.originTargetTime = this.target
      try {
        if (Object.prototype.toString.call(this.target) === '[object Date]') {
          targetTime = this.target
        } else {
          targetTime = new Date(this.target).getTime()
        }
      } catch (e) {
        throw new Error('invalid target prop')
      }
      lastTime = targetTime - new Date().getTime()
      this.lastTime = lastTime < 0 ? 0 : lastTime
    },
    tick () {
      const { onEnd } = this
      this.timer = setTimeout(() => {
        if (this.lastTime < this.interval) {
          clearTimeout(this.timer)
          this.lastTime = 0
          if (typeof onEnd === 'function') {
            onEnd()
          }
        } else {
          this.lastTime -= this.interval
          this.tick()
        }
      }, this.interval)
    }
  },
  beforeUpdate () {
    if (this.originTargetTime !== this.target) {
      this.initTime()
    }
  },
  beforeDestroy () {
    clearTimeout(this.timer)
  }
}
</script>
<style scoped>
</style>

+ 3 - 0
_web/src/components/CountDown/index.js

@ -0,0 +1,3 @@
import CountDown from './CountDown'
export default CountDown

+ 34 - 0
_web/src/components/CountDown/index.md

@ -0,0 +1,34 @@
# CountDown 倒计时
倒计时组件。
引用方式:
```javascript
import CountDown from '@/components/CountDown/CountDown'
export default {
    components: {
        CountDown
    }
}
```
## 代码演示  [demo](https://pro.loacg.com/test/home)
```html
<count-down :target="new Date().getTime() + 3000000" :on-end="onEndHandle" />
```
## API
| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| target | 目标时间 | Date | - |
| onEnd |  倒计时结束回调 | funtion | -|

+ 153 - 0
_web/src/components/DescriptionList/DescriptionList.vue

@ -0,0 +1,153 @@
<template>
  <div :class="['description-list', size, layout === 'vertical' ? 'vertical': 'horizontal']">
    <div v-if="title" class="title">{{ title }}</div>
    <a-row>
      <slot></slot>
    </a-row>
  </div>
</template>
<script>
import { Col } from 'ant-design-vue/es/grid/'
const Item = {
  name: 'DetailListItem',
  props: {
    term: {
      type: String,
      default: '',
      required: false
    }
  },
  inject: {
    col: {
      type: Number
    }
  },
  render () {
    return (
      <Col {...{ props: responsive[this.col] }}>
        <div class="term">{this.$props.term}</div>
        <div class="content">{this.$slots.default}</div>
      </Col>
    )
  }
}
const responsive = {
  1: { xs: 24 },
  2: { xs: 24, sm: 12 },
  3: { xs: 24, sm: 12, md: 8 },
  4: { xs: 24, sm: 12, md: 6 }
}
export default {
  name: 'DetailList',
  Item: Item,
  components: {
    Col
  },
  props: {
    title: {
      type: String,
      default: '',
      required: false
    },
    col: {
      type: Number,
      required: false,
      default: 3
    },
    size: {
      type: String,
      required: false,
      default: 'large'
    },
    layout: {
      type: String,
      required: false,
      default: 'horizontal'
    }
  },
  provide () {
    return {
      col: this.col > 4 ? 4 : this.col
    }
  }
}
</script>
<style lang="less" scoped>
  .description-list {
    .title {
      color: rgba(0,0,0,.85);
      font-size: 14px;
      font-weight: 500;
      margin-bottom: 16px;
    }
    /deep/ .term {
      color: rgba(0,0,0,.85);
      display: table-cell;
      line-height: 20px;
      margin-right: 8px;
      padding-bottom: 16px;
      white-space: nowrap;
      &:not(:empty):after {
        content: ":";
        margin: 0 8px 0 2px;
        position: relative;
        top: -.5px;
      }
    }
    /deep/ .content {
      color: rgba(0,0,0,.65);
      display: table-cell;
      min-height: 22px;
      line-height: 22px;
      padding-bottom: 16px;
      width: 100%;
      &:empty {
        content: ' ';
        height: 38px;
        padding-bottom: 16px;
      }
    }
    &.small {
      .title {
        font-size: 14px;
        color: rgba(0, 0, 0, .65);
        font-weight: normal;
        margin-bottom: 12px;
      }
      /deep/ .term, .content {
        padding-bottom: 8px;
      }
    }
    &.large {
      /deep/ .term, .content {
        padding-bottom: 16px;
      }
      .title {
        font-size: 16px;
      }
    }
    &.vertical {
      .term {
        padding-bottom: 8px;
      }
      /deep/ .term, .content {
        display: block;
      }
    }
  }
</style>

+ 2 - 0
_web/src/components/DescriptionList/index.js

@ -0,0 +1,2 @@
import DescriptionList from './DescriptionList'
export default DescriptionList

+ 113 - 0
_web/src/components/Dialog.js

@ -0,0 +1,113 @@
import Modal from 'ant-design-vue/es/modal'
export default (Vue) => {
  function dialog (component, componentProps, modalProps) {
    const _vm = this
    modalProps = modalProps || {}
    if (!_vm || !_vm._isVue) {
      return
    }
    let dialogDiv = document.querySelector('body>div[type=dialog]')
    if (!dialogDiv) {
      dialogDiv = document.createElement('div')
      dialogDiv.setAttribute('type', 'dialog')
      document.body.appendChild(dialogDiv)
    }
    const handle = function (checkFunction, afterHandel) {
      if (checkFunction instanceof Function) {
        const res = checkFunction()
        if (res instanceof Promise) {
          res.then(c => {
            c && afterHandel()
          })
        } else {
          res && afterHandel()
        }
      } else {
        // checkFunction && afterHandel()
        checkFunction || afterHandel()
      }
    }
    const dialogInstance = new Vue({
      data () {
        return {
          visible: true
        }
      },
      router: _vm.$router,
      store: _vm.$store,
      mounted () {
        this.$on('close', (v) => {
          this.handleClose()
        })
      },
      methods: {
        handleClose () {
          handle(this.$refs._component.onCancel, () => {
            this.visible = false
            this.$refs._component.$emit('close')
            this.$refs._component.$emit('cancel')
            dialogInstance.$destroy()
          })
        },
        handleOk () {
          handle(this.$refs._component.onOK || this.$refs._component.onOk, () => {
            this.visible = false
            this.$refs._component.$emit('close')
            this.$refs._component.$emit('ok')
            dialogInstance.$destroy()
          })
        }
      },
      render: function (h) {
        const that = this
        const modalModel = modalProps && modalProps.model
        if (modalModel) {
          delete modalProps.model
        }
        const ModalProps = Object.assign({}, modalModel && { model: modalModel } || {}, {
          attrs: Object.assign({}, {
            ...(modalProps.attrs || modalProps)
          }, {
            visible: this.visible
          }),
          on: Object.assign({}, {
            ...(modalProps.on || modalProps)
          }, {
            ok: () => {
              that.handleOk()
            },
            cancel: () => {
              that.handleClose()
            }
          })
        })
        const componentModel = componentProps && componentProps.model
        if (componentModel) {
          delete componentProps.model
        }
        const ComponentProps = Object.assign({}, componentModel && { model: componentModel } || {}, {
          ref: '_component',
          attrs: Object.assign({}, {
            ...((componentProps && componentProps.attrs) || componentProps)
          }),
          on: Object.assign({}, {
            ...((componentProps && componentProps.on) || componentProps)
          })
        })
        return h(Modal, ModalProps, [h(component, ComponentProps)])
      }
    }).$mount(dialogDiv)
  }
  Object.defineProperty(Vue.prototype, '$dialog', {
    get: () => {
      return function () {
        dialog.apply(this, arguments)
      }
    }
  })
}

+ 82 - 0
_web/src/components/Editor/QuillEditor.vue

@ -0,0 +1,82 @@
<template>
  <div :class="prefixCls">
    <quill-editor
      v-model="content"
      ref="myQuillEditor"
      :options="editorOption"
      @blur="onEditorBlur($event)"
      @focus="onEditorFocus($event)"
      @ready="onEditorReady($event)"
      @change="onEditorChange($event)">
    </quill-editor>
  </div>
</template>
<script>
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
import { quillEditor } from 'vue-quill-editor'
export default {
  name: 'QuillEditor',
  components: {
    quillEditor
  },
  props: {
    prefixCls: {
      type: String,
      default: 'ant-editor-quill'
    },
    // 表单校验用字段
    // eslint-disable-next-line
    value: {
      type: String
    }
  },
  data () {
    return {
      content: null,
      editorOption: {
        // some quill options
      }
    }
  },
  methods: {
    onEditorBlur (quill) {
      console.log('editor blur!', quill)
    },
    onEditorFocus (quill) {
      console.log('editor focus!', quill)
    },
    onEditorReady (quill) {
      console.log('editor ready!', quill)
    },
    onEditorChange ({ quill, html, text }) {
      console.log('editor change!', quill, html, text)
      this.$emit('change', html)
    }
  },
  watch: {
    value (val) {
      this.content = val
    }
  }
}
</script>
<style lang="less" scoped>
@import url('../index.less');
/* 覆盖 quill 默认边框圆角为 ant 默认圆角,用于统一 ant 组件风格 */
.ant-editor-quill {
  /deep/ .ql-toolbar.ql-snow {
    border-radius: @border-radius-base @border-radius-base 0 0;
  }
  /deep/ .ql-container.ql-snow {
    border-radius: 0 0 @border-radius-base @border-radius-base;
  }
}
</style>

+ 123 - 0
_web/src/components/Editor/WangEditor.vue

@ -0,0 +1,123 @@
<template>
  <div>
    <div  id="editor" ref='myEditor'></div>
    <slot></slot>
  </div>
</template>
<script>
  import WangEditor from 'wangeditor'
  export default {
    name: 'component-wangeditor',
    data () {
      return {
        edit: ''
      }
    },
    props: {
      value: {
        default: ''
      },
      config: {
        default: () => {
          return {}
        }
      },
      uploadConfig: {
        default: () => {
          return {
            method: 'http', // 支持custom(objurl)和http(服务器)和base64
            url: '/',
          }
        }
      }
    },
    computed: {
      customConfig () {
        return {
          pasteFilterStyle: false, // 关闭掉粘贴样式的过滤
          pasteIgnoreImg: false, // 粘贴时不忽略图片
          ...this.config
        }
      }
    },
    watch: {
    },
    components: {
    },
    methods: {
      readBlobAsDataURL (blob, callback) {
        var a = new FileReader()
        a.onload = function (e) { callback(e.target.result) }
        a.readAsDataURL(blob)
      },
      initEditor () {
        var self = this
        this.editor = new WangEditor('#editor') // 这个地方传入div元素的id 需要加#号
        // 配置 onchange 事件
        this.editor.customConfig = this.customConfig
        this.editor.customConfig.uploadImgMaxLength = 5;
        this.editor.change = function () { // 编辑区域内容变化时
          self.$emit('input', this.txt.html())
          self.$emit('onchange', this.txt.html(), this.txt)
          // editor.txt.html('.....') //设置编辑器内容
          // editor.txt.clear() //清空编辑器内容
          // editor.txt.append('<p>追加的内容</p>')//继续追加内容。
          // editor.txt.text()  // 读取 text
          // editor.txt.getJSON()  // 获取 JSON 格式的内容
        }
        this.editor.customConfig.customUploadImg = function (files, insert) {
          if (self.uploadConfig.method === 'custom') {
            files.forEach(file => {
              var fileUrl = URL.createObjectURL(file)
              insert(fileUrl)
            })
          }
          if (self.uploadConfig.method === 'base64') {
            files.forEach(file => {
              self.readBlobAsDataURL(file, function (dataurl) {
                insert(dataurl)
              })
            })
          }
          if (self.uploadConfig.method === 'http') {
            if (self.uploadConfig.callback) {
              self.uploadConfig.callback(files, insert)
            } else {
              var formData = new FormData()
              files.forEach(file => {
                formData.append('file', file)
              })
              self.$axios.post(self.uploadConfig.url, formData).then(({ data }) => {
                if (data.status === 'success') {
                  insert(data.url)
                }
              })
            }
          }
        }
        this.editor.create() // 生成编辑器
        this.editor.txt.text(this.value) // 生成编辑器
        this.$emit('oninit', this.editor)
      }
    },
    beforeCreate () {
    },
    created () {
    },
    beforeMount () {
    },
    mounted () {
      this.initEditor()
    }
  }
</script>
<style >
  .w-e-toolbar{
    flex-wrap:wrap;
  }
</style>

+ 64 - 0
_web/src/components/Ellipsis/Ellipsis.vue

@ -0,0 +1,64 @@
<script>
import Tooltip from 'ant-design-vue/es/tooltip'
import { cutStrByFullLength, getStrFullLength } from '@/components/_util/util'
/*
    const isSupportLineClamp = document.body.style.webkitLineClamp !== undefined;
    const TooltipOverlayStyle = {
      overflowWrap: 'break-word',
      wordWrap: 'break-word',
    };
  */
export default {
  name: 'Ellipsis',
  components: {
    Tooltip
  },
  props: {
    prefixCls: {
      type: String,
      default: 'ant-pro-ellipsis'
    },
    tooltip: {
      type: Boolean
    },
    length: {
      type: Number,
      required: true
    },
    lines: {
      type: Number,
      default: 1
    },
    fullWidthRecognition: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    getStrDom (str, fullLength) {
      return (
        <span>{ cutStrByFullLength(str, this.length) + (fullLength > this.length ? '...' : '') }</span>
      )
    },
    getTooltip (fullStr, fullLength) {
      return (
        <Tooltip>
          <template slot="title">{ fullStr }</template>
          { this.getStrDom(fullStr, fullLength) }
        </Tooltip>
      )
    }
  },
  render () {
    const { tooltip, length } = this.$props
    const str = this.$slots.default.map(vNode => vNode.text).join('')
    const fullLength = getStrFullLength(str)
    const strDom = tooltip && fullLength > length ? this.getTooltip(str, fullLength) : this.getStrDom(str, fullLength)
    return (
      strDom
    )
  }
}
</script>

+ 3 - 0
_web/src/components/Ellipsis/index.js

@ -0,0 +1,3 @@
import Ellipsis from './Ellipsis'
export default Ellipsis

+ 38 - 0
_web/src/components/Ellipsis/index.md

@ -0,0 +1,38 @@
# Ellipsis 文本自动省略号
文本过长自动处理省略号,支持按照文本长度和最大行数两种方式截取。
引用方式:
```javascript
import Ellipsis from '@/components/Ellipsis'
export default {
    components: {
        Ellipsis
    }
}
```
## 代码演示  [demo](https://pro.loacg.com/test/home)
```html
<ellipsis :length="100" tooltip>
        There were injuries alleged in three cases in 2015, and a
        fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall.
</ellipsis>
```
## API
参数 | 说明 | 类型 | 默认值
----|------|-----|------
tooltip | 移动到文本展示完整内容的提示 | boolean | -
length | 在按照长度截取下的文本最大字符数,超过则截取省略 | number | -

+ 130 - 0
_web/src/components/Exception/ExceptionPage.vue

@ -0,0 +1,130 @@
<template>
  <div class="exception">
    <div class="imgBlock">
      <div class="imgEle" :style="{backgroundImage: `url(${config[type].img})`}">
      </div>
    </div>
    <div class="content">
      <h1>{{ config[type].title }}</h1>
      <div class="desc">{{ config[type].desc }}</div>
      <div class="actions">
        <a-button type="primary" @click="handleToHome">返回首页</a-button>
      </div>
    </div>
  </div>
</template>
<script>
import types from './type'
export default {
  name: 'Exception',
  props: {
    type: {
      type: String,
      default: '404'
    }
  },
  data () {
    return {
      config: types
    }
  },
  methods: {
    handleToHome () {
      this.$router.push({ name: 'Console' })
    }
  }
}
</script>
<style lang="less">
@import "~ant-design-vue/lib/style/index";
.exception {
  display: flex;
  align-items: center;
  height: 80%;
  min-height: 500px;
  .imgBlock {
    flex: 0 0 62.5%;
    width: 62.5%;
    padding-right: 152px;
    zoom: 1;
    &::before,
    &::after {
      content: ' ';
      display: table;
    }
    &::after {
      clear: both;
      height: 0;
      font-size: 0;
      visibility: hidden;
    }
  }
  .imgEle {
    float: right;
    width: 100%;
    max-width: 430px;
    height: 360px;
    background-repeat: no-repeat;
    background-position: 50% 50%;
    background-size: contain;
  }
  .content {
    flex: auto;
    h1 {
      margin-bottom: 24px;
      color: #434e59;
      font-weight: 600;
      font-size: 72px;
      line-height: 72px;
    }
    .desc {
      margin-bottom: 16px;
      color: @text-color-secondary;
      font-size: 20px;
      line-height: 28px;
    }
    .actions {
      button:not(:last-child) {
        margin-right: 8px;
      }
    }
  }
}
@media screen and (max-width: @screen-xl) {
  .exception {
    .imgBlock {
      padding-right: 88px;
    }
  }
}
@media screen and (max-width: @screen-sm) {
  .exception {
    display: block;
    text-align: center;
    .imgBlock {
      margin: 0 auto 24px;
      padding-right: 0;
    }
  }
}
@media screen and (max-width: @screen-xs) {
  .exception {
    .imgBlock {
      margin-bottom: -24px;
      overflow: hidden;
    }
  }
}
</style>

+ 2 - 0
_web/src/components/Exception/index.js

@ -0,0 +1,2 @@
import ExceptionPage from './ExceptionPage.vue'
export default ExceptionPage

+ 19 - 0
_web/src/components/Exception/type.js

@ -0,0 +1,19 @@
const types = {
  403: {
    img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg',
    title: '403',
    desc: '抱歉,你无权访问该页面'
  },
  404: {
    img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg',
    title: '404',
    desc: '抱歉,你访问的页面不存在或仍在开发中'
  },
  500: {
    img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg',
    title: '500',
    desc: '抱歉,服务器出错了'
  }
}
export default types

+ 30 - 0
_web/src/components/FooterToolbar/FooterToolBar.vue

@ -0,0 +1,30 @@
<template>
  <div :class="prefixCls">
    <div style="float: left">
      <slot name="extra">{{ extra }}</slot>
    </div>
    <div style="float: right">
      <slot></slot>
    </div>
  </div>
</template>
<script>
export default {
  name: 'FooterToolBar',
  props: {
    prefixCls: {
      type: String,
      default: 'ant-pro-footer-toolbar'
    },
    extra: {
      type: [String, Object],
      default: ''
    }
  }
}
</script>
<style lang="less" scoped>
</style>

+ 4 - 0
_web/src/components/FooterToolbar/index.js

@ -0,0 +1,4 @@
import FooterToolBar from './FooterToolBar'
import './index.less'
export default FooterToolBar

+ 23 - 0
_web/src/components/FooterToolbar/index.less

@ -0,0 +1,23 @@
@import "../index";
@footer-toolbar-prefix-cls: ~"@{ant-pro-prefix}-footer-toolbar";
.@{footer-toolbar-prefix-cls} {
  position: fixed;
  width: 100%;
  bottom: 0;
  right: 0;
  height: 56px;
  line-height: 56px;
  box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03);
  background: #fff;
  border-top: 1px solid #e8e8e8;
  padding: 0 24px;
  z-index: 9;
  &:after {
    content: "";
    display: block;
    clear: both;
  }
}

+ 48 - 0
_web/src/components/FooterToolbar/index.md

@ -0,0 +1,48 @@
# FooterToolbar 底部工具栏
固定在底部的工具栏。
## 何时使用
固定在内容区域的底部,不随滚动条移动,常用于长页面的数据搜集和提交工作。
引用方式:
```javascript
import FooterToolBar from '@/components/FooterToolbar'
export default {
    components: {
        FooterToolBar
    }
}
```
## 代码演示
```html
<footer-tool-bar>
    <a-button type="primary" @click="validate" :loading="loading">提交</a-button>
</footer-tool-bar>
```
```html
<footer-tool-bar extra="扩展信息提示">
    <a-button type="primary" @click="validate" :loading="loading">提交</a-button>
</footer-tool-bar>
```
## API
参数 | 说明 | 类型 | 默认值
----|------|-----|------
children (slot) | 工具栏内容,向右对齐 | - | -
extra | 额外信息,向左对齐 | String, Object | -

+ 46 - 0
_web/src/components/GlobalFooter/GlobalFooter.vue

@ -0,0 +1,46 @@
<template>
  <div class="footer">
    <div class="links">
    </div>
    <div class="copyright">
      Copyright © 2020 <a target="_blank" href="https://www.stylefeng.cn/">stylefeng</a> All rights reserved.
    </div>
  </div>
</template>
<script>
export default {
  name: 'GlobalFooter',
  data () {
    return {}
  }
}
</script>
<style lang="less" scoped>
.footer {
  padding: 0 16px;
  margin: 48px 0 24px;
  text-align: center;
  .links {
    margin-bottom: 8px;
    a {
      color: rgba(0, 0, 0, 0.45);
      &:hover {
        color: rgba(0, 0, 0, 0.65);
      }
      &:not(:last-child) {
        margin-right: 40px;
      }
    }
  }
  .copyright {
    color: rgba(0, 0, 0, 0.45);
    font-size: 14px;
  }
}
</style>

+ 2 - 0
_web/src/components/GlobalFooter/index.js

@ -0,0 +1,2 @@
import GlobalFooter from './GlobalFooter'
export default GlobalFooter

+ 125 - 0
_web/src/components/GlobalHeader/GlobalHeader.vue

@ -0,0 +1,125 @@
<template>
  <transition name="showHeader">
    <div v-if="visible" class="header-animat">
      <a-layout-header
        v-if="visible"
        :class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]"
        :style="{ padding: '0' }">
        <div v-if="mode === 'sidemenu'" class="header">
          <a-icon v-if="device==='mobile'" class="trigger" :type="collapsed ? 'menu-fold' : 'menu-unfold'" @click="toggle"/>
          <a-icon v-else class="trigger" :type="collapsed ? 'menu-unfold' : 'menu-fold'" @click="toggle"/>
          <user-menu></user-menu>
        </div>
        <div v-else :class="['top-nav-header-index', theme]">
          <div class="header-index-wide">
            <div class="header-index-left">
              <logo class="top-nav-header" :show-title="device !== 'mobile'"/>
              <s-menu v-if="device !== 'mobile'" mode="horizontal" :menu="menus" :theme="theme" />
              <a-icon v-else class="trigger" :type="collapsed ? 'menu-fold' : 'menu-unfold'" @click="toggle" />
            </div>
            <user-menu class="header-index-right"></user-menu>
          </div>
        </div>
      </a-layout-header>
    </div>
  </transition>
</template>
<script>
import UserMenu from '../tools/UserMenu'
import SMenu from '../Menu/'
import Logo from '../tools/Logo'
import { mixin } from '@/utils/mixin'
export default {
  name: 'GlobalHeader',
  components: {
    UserMenu,
    SMenu,
    Logo
  },
  mixins: [mixin],
  props: {
    mode: {
      type: String,
      // sidemenu, topmenu
      default: 'sidemenu'
    },
    menus: {
      type: Array,
      required: true
    },
    theme: {
      type: String,
      required: false,
      default: 'dark'
    },
    collapsed: {
      type: Boolean,
      required: false,
      default: false
    },
    device: {
      type: String,
      required: false,
      default: 'desktop'
    }
  },
  data () {
    return {
      visible: true,
      oldScrollTop: 0
    }
  },
  mounted () {
    document.addEventListener('scroll', this.handleScroll, { passive: true })
  },
  methods: {
    handleScroll () {
      if (!this.autoHideHeader) {
        return
      }
      const scrollTop = document.body.scrollTop + document.documentElement.scrollTop
      if (!this.ticking) {
        this.ticking = true
        requestAnimationFrame(() => {
          if (this.oldScrollTop > scrollTop) {
            this.visible = true
          } else if (scrollTop > 300 && this.visible) {
            this.visible = false
          } else if (scrollTop < 300 && !this.visible) {
            this.visible = true
          }
          this.oldScrollTop = scrollTop
          this.ticking = false
        })
      }
    },
    toggle () {
      this.$emit('toggle')
    }
  },
  beforeDestroy () {
    document.body.removeEventListener('scroll', this.handleScroll, true)
  }
}
</script>
<style lang="less">
@import '../index.less';
.header-animat{
  position: relative;
  z-index: @ant-global-header-zindex;
}
.showHeader-enter-active {
  transition: all 0.25s ease;
}
.showHeader-leave-active {
  transition: all 0.5s ease;
}
.showHeader-enter, .showHeader-leave-to {
  opacity: 0;
}
</style>

+ 0 - 0
_web/src/components/GlobalHeader/index.js


Some files were not shown because too many files changed in this diff