diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..25b312e
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,18 @@
+# http://editorconfig.org
+root = true
+
+# 空格替代Tab缩进在各种编辑工具下效果一致
+[*]
+indent_style = space
+indent_size = 4
+charset = utf-8
+end_of_line = lf
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.{json,yml,yaml}]
+indent_size = 2
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e33968
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,46 @@
+######################################################################
+# Build Tools
+
+.gradle
+/build/
+!gradle/wrapper/gradle-wrapper.jar
+
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+######################################################################
+# IDE
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### JRebel ###
+rebel.xml
+
+### NetBeans ###
+nbproject/private/
+build/*
+nbbuild/
+nbdist/
+.nb-gradle/
+
+######################################################################
+# Others
+*.log
+*.xml.versionsBackup
+*.swp
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml
diff --git a/.run/ruoyi-monitor-admin.run.xml b/.run/ruoyi-monitor-admin.run.xml
new file mode 100644
index 0000000..03e7d1c
--- /dev/null
+++ b/.run/ruoyi-monitor-admin.run.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.run/ruoyi-server.run.xml b/.run/ruoyi-server.run.xml
new file mode 100644
index 0000000..a1670d9
--- /dev/null
+++ b/.run/ruoyi-server.run.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.run/ruoyi-xxl-job-admin.run.xml b/.run/ruoyi-xxl-job-admin.run.xml
new file mode 100644
index 0000000..914ed01
--- /dev/null
+++ b/.run/ruoyi-xxl-job-admin.run.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index 9d2cb45..70bf706 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,85 @@
-# MyBlog
+ ## 博客简介
-基于Ruoyi-vue-plus二次开源的个人博客系统
\ No newline at end of file
+
+> 使用RuoYi-Vue-Plus 作为博客的后端框架
+
+> 项目代码、文档 均开源免费遵循开源协议在项目中保留开源协议文件即可
+
+### 系统演示功能暂未更新到最新代码,具体实现以最新代码效果为准
+### 系统演示出现bug等问题最新仓库代码已解决,请优先关注群内公告更新消息
+### 建议拉取代码后删除sys_oss中的全部代码,不然会影响文件管理页面的访问
+### :演示涉及到文件或者图片上传需要自行修改文件配置模块,写上自己的云端账密,使用后务必记住删除
+### : 演示模式三方登录逻辑暂未体现
+> 系统演示: 前台 http://water-zhi.cn 后台:http://admin.water-zhi.cn
+>
+> ## 部署博客的操作步骤文章与问题询问请进群:551275273
+
+## 业务功能
+
+| 功能 | 介绍 |
+|---|---|
+| 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置。 |
+| 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 |
+| 岗位管理 | 配置系统用户所属担任职务。 |
+| 菜单管理 | 配置系统菜单,操作权限,按钮权限标识等。 |
+| 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分。 |
+| 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护。 |
+| 参数管理 | 对系统动态配置常用参数。 |
+| 通知公告 | 系统通知公告信息发布维护。 |
+| 操作日志 | 系统正常操作日志记录和查询;系统异常信息日志记录和查询。 |
+| 登录日志 | 系统登录日志记录查询包含登录异常。 |
+| 文件管理 | 系统文件上传、下载等管理。 |
+| 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志。 |
+| 代码生成 | 前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 |
+| 系统接口 | 根据业务代码自动生成相关的api接口文档。 |
+| 服务监控 | 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等。 |
+| 缓存监控 | 对系统的缓存信息查询,命令统计等。 |
+| 在线构建器 | 拖动表单元素生成相应的HTML代码。 |
+| 连接池监视 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 |
+| 使用案例 | 系统的一些功能案例 |
+
+## 博客模块介绍
+
+| 包 | 介绍 |
+|--|---|
+| blogutils | 博客后台中通用的方法。 |
+| domain | 实体层 |
+| domain-bo | 前端后台管理系统给后端返回的数据(查询条件)。 |
+| domain-vo | 后端给前端后台管理系统返回的数据层。 |
+| dto | 后端给前端前台界面返回的数据 |
+| dto-vo | 前端的前台界面给后端返回的数据 |
+| domain-es | es索引对应查询的实体类 |
+
+## 博客特点:
+- 项目规范,属于企业级博客
+- 鉴权使用了sa-token极大的降低了与项目的耦合度,代替了spring-security
+- 标签与分类动态添加
+- 弹幕强留言
+- 文章推荐等功能
+- 多搜索模式
+- 使用just-auth集成三方登录,便于拓展
+- 前台参考"Hexo"的"Butterfly"设计
+- 后台根据ruoyi-vue-plus开发十分贴合企业级开发规范
+- 整合了easy_es mail等流行框架
+
+## 使用技术:
+### 前端:前端: vue + vuex + vue-router + axios + vuetify + element + echarts
+### 后端: SpringBoot + easy_es + nginx + docker + sa-token + Swagger2 + MyBatisPlus + Mysql + Redis + elasticsearch + RabbitMQ + MaxWell + Websocket
+
+
+## 存储:使用当前主流的三方云端,cos/oss/七牛等动态切换
+
+## 运行环境:服务器:至少1核2G(关闭es)
+
+
+## 加群与捐献 🐧群:551275273
+
+
+## 捐献作者
+开源博主创作不易!
+
+
+
+# 致敬:前端:风神 后端:LionLi+风神
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..997d583
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,470 @@
+
+
+ 4.0.0
+
+ com.zhi
+ ruoyi-vue-plus
+ 4.4.0
+
+ RuoYi-Vue-Plus
+ https://gitee.com/JavaLionLi/RuoYi-Vue-Plus
+ RuoYi-Vue-Plus后台管理系统
+
+
+ 4.4.0
+ 2.7.6
+ UTF-8
+ UTF-8
+ 1.8
+ 3.2.2
+ 2.2.2
+ 1.6.13
+ 5.2.3
+ 3.1.3
+ 2.3
+ 1.33.0
+ 3.5.2
+ 3.9.1
+ 5.8.10
+ 4.10.0
+ 2.7.7
+ 3.18.0
+ 2.2.3
+ 3.5.2
+ 2.14.2
+ 2.3.1
+ 1.18.24
+ 2.4.1
+ 2.4.1
+ 2.8.0
+ 1.4.0
+ 2.4.1
+ 1.1.1
+
+
+
+ 31.1-jre
+
+ 1.32
+
+
+ 1.12.349
+
+ 2.0.22
+ 3.1.635
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+ cn.hutool
+ hutool-bom
+ ${hutool.version}
+ pom
+ import
+
+
+
+ org.springdoc
+ springdoc-openapi-webmvc-core
+ ${springdoc.version}
+
+
+
+ org.springdoc
+ springdoc-openapi-javadoc
+ ${springdoc.version}
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+
+ org.apache.poi
+ poi
+ ${poi.version}
+
+
+ org.apache.poi
+ poi-ooxml
+ ${poi.version}
+
+
+ com.alibaba
+ easyexcel
+ ${easyexcel.version}
+
+
+ org.apache.poi
+ poi-ooxml-schemas
+
+
+
+
+
+
+ org.apache.velocity
+ velocity-engine-core
+ ${velocity.version}
+
+
+
+
+ cn.dev33
+ sa-token-spring-boot-starter
+ ${satoken.version}
+
+
+
+ cn.dev33
+ sa-token-jwt
+ ${satoken.version}
+
+
+ cn.hutool
+ hutool-all
+
+
+
+
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ ${dynamic-ds.version}
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus.version}
+
+
+ com.baomidou
+ mybatis-plus-extension
+ ${mybatis-plus.version}
+
+
+
+ p6spy
+ p6spy
+ ${p6spy.version}
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ ${okhttp.version}
+
+
+
+ com.amazonaws
+ aws-java-sdk-s3
+ ${aws-java-sdk-s3.version}
+
+
+
+ com.aliyun
+ dysmsapi20170525
+ ${aliyun.sms.version}
+
+
+
+ com.tencentcloudapi
+ tencentcloud-sdk-java-sms
+ ${tencent.sms.version}
+
+
+
+
+
+ org.redisson
+ redisson-spring-boot-starter
+ ${redisson.version}
+
+
+ com.baomidou
+ lock4j-redisson-spring-boot-starter
+ ${lock4j.version}
+
+
+
+
+ com.xuxueli
+ xxl-job-core
+ ${xxl-job.version}
+
+
+
+ com.alibaba
+ transmittable-thread-local
+ ${alibaba-ttl.version}
+
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+
+
+ org.yaml
+ snakeyaml
+ ${snakeyaml.version}
+
+
+
+
+ com.zhi
+ zhi-job
+ ${zhi-vue-plus.version}
+
+
+
+
+ com.zhi
+ zhi-generator
+ ${zhi-vue-plus.version}
+
+
+
+
+ com.zhi
+ zhi-framework
+ ${zhi-vue-plus.version}
+
+
+
+
+ com.zhi
+ zhi-system
+ ${zhi-vue-plus.version}
+
+
+
+
+ com.zhi
+ zhi-common
+ ${zhi-vue-plus.version}
+
+
+
+
+ com.zhi
+ zhi-oss
+ ${zhi-vue-plus.version}
+
+
+
+
+ com.zhi
+ zhi-sms
+ ${zhi-vue-plus.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+ ${rabbitmq.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+ ${mail.version}
+
+
+
+
+ org.apache.commons
+ commons-pool2
+ ${commons-pool2.version}
+
+
+
+
+ com.xkcoding.justauth
+ justauth-spring-boot-starter
+ ${justauth-spring-boot.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+ ${websocket.version}
+
+
+
+
+ cn.easy-es
+ easy-es-boot-starter
+ ${easy-es.version}
+
+
+
+
+
+ com.zhi
+ zhi-demo
+ ${zhi-vue-plus.version}
+
+
+
+
+ com.zhi
+ zhi-myblog
+ ${zhi-vue-plus.version}
+
+
+
+
+
+
+ zhi-admin
+ zhi-framework
+ zhi-system
+ zhi-job
+ zhi-generator
+ zhi-common
+ zhi-demo
+ zhi-extend
+ zhi-oss
+ zhi-sms
+ zhi-myblog
+
+ pom
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.9.0
+
+ ${java.version}
+ ${java.version}
+ ${project.build.sourceEncoding}
+
+
+ com.github.therapi
+ therapi-runtime-javadoc-scribe
+ 0.15.0
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ ${spring-boot.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
+ -Dfile.encoding=UTF-8
+
+ ${profiles.active}
+
+ exclude
+
+
+
+
+
+ src/main/resources
+
+ false
+
+
+ src/main/resources
+
+
+ application*
+ bootstrap*
+ banner*
+
+
+ true
+
+
+
+
+
+
+ public
+ huawei nexus
+ https://mirrors.huaweicloud.com/repository/maven/
+
+ true
+
+
+
+
+
+
+ public
+ huawei nexus
+ https://mirrors.huaweicloud.com/repository/maven/
+
+ true
+
+
+ false
+
+
+
+
+
+
+ dev
+
+
+ dev
+ debug
+
+
+
+ true
+
+
+
+
+ prod
+
+ prod
+ warn
+
+
+
+
+
+
+
diff --git a/script/bin/ry.bat b/script/bin/ry.bat
new file mode 100644
index 0000000..d57b79a
--- /dev/null
+++ b/script/bin/ry.bat
@@ -0,0 +1,68 @@
+rem 使用者应根据自身平台编码自行转换 防止乱码 例如 win使用gbk编码
+@echo off
+
+rem jar平级目录
+set AppName=zhi-admin.jar
+
+rem JVM参数
+set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
+
+
+ECHO.
+ ECHO. [1] 启动%AppName%
+ ECHO. [2] 关闭%AppName%
+ ECHO. [3] 重启%AppName%
+ ECHO. [4] 启动状态 %AppName%
+ ECHO. [5] 退 出
+ECHO.
+
+ECHO.请输入选择项目的序号:
+set /p ID=
+ IF "%id%"=="1" GOTO start
+ IF "%id%"=="2" GOTO stop
+ IF "%id%"=="3" GOTO restart
+ IF "%id%"=="4" GOTO status
+ IF "%id%"=="5" EXIT
+PAUSE
+:start
+ for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
+ set pid=%%a
+ set image_name=%%b
+ )
+ if defined pid (
+ echo %%is running
+ PAUSE
+ )
+
+start javaw %JVM_OPTS% -jar %AppName%
+
+echo starting……
+echo Start %AppName% success...
+goto:eof
+
+rem 函数stop通过jps命令查找pid并结束进程
+:stop
+ for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
+ set pid=%%a
+ set image_name=%%b
+ )
+ if not defined pid (echo process %AppName% does not exists) else (
+ echo prepare to kill %image_name%
+ echo start kill %pid% ...
+ rem 根据进程ID,kill进程
+ taskkill /f /pid %pid%
+ )
+goto:eof
+:restart
+ call :stop
+ call :start
+goto:eof
+:status
+ for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
+ set pid=%%a
+ set image_name=%%b
+ )
+ if not defined pid (echo process %AppName% is dead ) else (
+ echo %image_name% is running
+ )
+goto:eof
diff --git a/script/bin/ry.sh b/script/bin/ry.sh
new file mode 100644
index 0000000..aa9b62b
--- /dev/null
+++ b/script/bin/ry.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+# ./ry.sh start 启动 stop 停止 restart 重启 status 状态
+AppName=zhi-admin.jar
+
+# JVM参数
+JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
+APP_HOME=`pwd`
+LOG_PATH=$APP_HOME/logs/$AppName.log
+
+if [ "$1" = "" ];
+then
+ echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
+ exit 1
+fi
+
+if [ "$AppName" = "" ];
+then
+ echo -e "\033[0;31m 未输入应用名 \033[0m"
+ exit 1
+fi
+
+function start()
+{
+ PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
+
+ if [ x"$PID" != x"" ]; then
+ echo "$AppName is running..."
+ else
+ nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 &
+ echo "Start $AppName success..."
+ fi
+}
+
+function stop()
+{
+ echo "Stop $AppName"
+
+ PID=""
+ query(){
+ PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
+ }
+
+ query
+ if [ x"$PID" != x"" ]; then
+ kill -TERM $PID
+ echo "$AppName (pid:$PID) exiting..."
+ while [ x"$PID" != x"" ]
+ do
+ sleep 1
+ query
+ done
+ echo "$AppName exited."
+ else
+ echo "$AppName already stopped."
+ fi
+}
+
+function restart()
+{
+ stop
+ sleep 2
+ start
+}
+
+function status()
+{
+ PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
+ if [ $PID != 0 ];then
+ echo "$AppName is running..."
+ else
+ echo "$AppName is not running..."
+ fi
+}
+
+case $1 in
+ start)
+ start;;
+ stop)
+ stop;;
+ restart)
+ restart;;
+ status)
+ status;;
+ *)
+
+esac
diff --git a/script/docker/database.yml b/script/docker/database.yml
new file mode 100644
index 0000000..0368fd2
--- /dev/null
+++ b/script/docker/database.yml
@@ -0,0 +1,61 @@
+version: '3'
+
+services:
+ # 此镜像仅用于测试 正式环境需自行安装数据库
+ # SID: XE user: system password: oracle
+ oracle:
+ image: tekintian/oracle12c:latest
+ container_name: oracle
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ DBCA_TOTAL_MEMORY: 16192
+ ports:
+ - "18080:8080"
+ - "1521:1521"
+ volumes:
+ # 数据挂载
+ - "/docker/oracle/data:/u01/app/oracle"
+ network_mode: "host"
+
+ # 此镜像仅用于测试 正式环境需自行安装数据库
+ sqlserver:
+ image: mcr.microsoft.com/mssql/server:2017-latest
+ container_name: sqlserver
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ ACCEPT_EULA: "Y"
+ SA_PASSWORD: "Ruoyi@123"
+ ports:
+ - "1433:1433"
+ volumes:
+ # 数据挂载
+ - "/docker/sqlserver/data:/var/opt/mssql"
+ network_mode: "host"
+
+ postgres:
+ image: postgres:14.2
+ container_name: postgres
+ environment:
+ POSTGRES_USER: root
+ POSTGRES_PASSWORD: root
+ POSTGRES_DB: postgres
+ ports:
+ - "5432:5432"
+ volumes:
+ - /docker/postgres/data:/var/lib/postgresql/data
+ network_mode: "host"
+
+ postgres13:
+ image: postgres:13.6
+ container_name: postgres13
+ environment:
+ POSTGRES_USER: root
+ POSTGRES_PASSWORD: root
+ POSTGRES_DB: postgres
+ ports:
+ - "5433:5432"
+ volumes:
+ - /docker/postgres13/data:/var/lib/postgresql/data
+ network_mode: "host"
diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml
new file mode 100644
index 0000000..b31f2a3
--- /dev/null
+++ b/script/docker/docker-compose.yml
@@ -0,0 +1,154 @@
+version: '3'
+
+services:
+ mysql:
+ image: mysql:8.0.31
+ container_name: mysql
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ # root 密码
+ MYSQL_ROOT_PASSWORD: root
+ # 初始化数据库(后续的初始化sql会在这个库执行)
+ MYSQL_DATABASE: ry-vue
+ ports:
+ - "3306:3306"
+ volumes:
+ # 数据挂载
+ - /docker/mysql/data/:/var/lib/mysql/
+ # 配置挂载
+ - /docker/mysql/conf/:/etc/mysql/conf.d/
+ command:
+ # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
+ --default-authentication-plugin=mysql_native_password
+ --character-set-server=utf8mb4
+ --collation-server=utf8mb4_general_ci
+ --explicit_defaults_for_timestamp=true
+ --lower_case_table_names=1
+ privileged: true
+ network_mode: "host"
+
+ nginx-web:
+ image: nginx:1.22.1
+ container_name: nginx-web
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ ports:
+ - "80:80"
+ - "443:443"
+ volumes:
+ # 证书映射
+ - /docker/nginx/cert:/etc/nginx/cert
+ # 配置文件映射
+ - /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
+ # 页面目录
+ - /docker/nginx/html:/usr/share/nginx/html
+ # 日志目录
+ - /docker/nginx/log:/var/log/nginx
+ privileged: true
+ network_mode: "host"
+
+ redis:
+ image: redis:6.2.7
+ container_name: redis
+ ports:
+ - "6379:6379"
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ volumes:
+ # 配置文件
+ - /docker/redis/conf:/redis/config:rw
+ # 数据文件
+ - /docker/redis/data/:/redis/data/:rw
+ command: "redis-server /redis/config/redis.conf"
+ privileged: true
+ network_mode: "host"
+
+ minio:
+ image: minio/minio:RELEASE.2022-05-26T05-48-41Z
+ container_name: minio
+ ports:
+ # api 端口
+ - "9000:9000"
+ # 控制台端口
+ - "9001:9001"
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ # 管理后台用户名
+ MINIO_ACCESS_KEY: ruoyi
+ # 管理后台密码,最小8个字符
+ MINIO_SECRET_KEY: ruoyi123
+ # https需要指定域名
+ #MINIO_SERVER_URL: "https://xxx.com:9000"
+ #MINIO_BROWSER_REDIRECT_URL: "https://xxx.com:9001"
+ # 开启压缩 on 开启 off 关闭
+ MINIO_COMPRESS: "off"
+ # 扩展名 .pdf,.doc 为空 所有类型均压缩
+ MINIO_COMPRESS_EXTENSIONS: ""
+ # mime 类型 application/pdf 为空 所有类型均压缩
+ MINIO_COMPRESS_MIME_TYPES: ""
+ volumes:
+ # 映射当前目录下的data目录至容器内/data目录
+ - /docker/minio/data:/data
+ # 映射配置目录
+ - /docker/minio/config:/root/.minio/
+ command: server --address ':9000' --console-address ':9001' /data # 指定容器中的目录 /data
+ privileged: true
+ network_mode: "host"
+
+ ruoyi-server1:
+ image: ruoyi/ruoyi-server:4.4.0
+ container_name: ruoyi-server1
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ SERVER_PORT: 8080
+ volumes:
+ # 配置文件
+ - /docker/server1/logs/:/ruoyi/server/logs/
+ # skywalking 探针
+# - /docker/skywalking/agent/:/ruoyi/skywalking/agent
+ privileged: true
+ network_mode: "host"
+
+ ruoyi-server2:
+ image: "ruoyi/ruoyi-server:4.4.0"
+ container_name: ruoyi-server2
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ SERVER_PORT: 8081
+ volumes:
+ # 配置文件
+ - /docker/server2/logs/:/ruoyi/server/logs/
+ # skywalking 探针
+# - /docker/skywalking/agent/:/ruoyi/skywalking/agent
+ privileged: true
+ network_mode: "host"
+
+ zhi-monitor-admin:
+ image: ruoyi/zhi-monitor-admin:4.4.0
+ container_name: zhi-monitor-admin
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ volumes:
+ # 配置文件
+ - /docker/monitor/logs/:/ruoyi/monitor/logs
+ privileged: true
+ network_mode: "host"
+
+ zhi-xxl-job-admin:
+ image: ruoyi/zhi-xxl-job-admin:4.4.0
+ container_name: zhi-xxl-job-admin
+ environment:
+ # 时区上海
+ TZ: Asia/Shanghai
+ volumes:
+ # 配置文件
+ - /docker/xxljob/logs/:/ruoyi/xxljob/logs
+ privileged: true
+ network_mode: "host"
diff --git a/script/docker/nginx/conf/nginx.conf b/script/docker/nginx/conf/nginx.conf
new file mode 100644
index 0000000..e9630aa
--- /dev/null
+++ b/script/docker/nginx/conf/nginx.conf
@@ -0,0 +1,111 @@
+worker_processes 1;
+
+error_log /var/log/nginx/error.log warn;
+pid /var/run/nginx.pid;
+
+events {
+ worker_connections 1024;
+}
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+ sendfile on;
+ keepalive_timeout 65;
+ # 限制body大小
+ client_max_body_size 100m;
+
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ '$status $body_bytes_sent "$http_referer" '
+ '"$http_user_agent" "$http_x_forwarded_for"';
+
+ access_log /var/log/nginx/access.log main;
+
+ upstream server {
+ ip_hash;
+ server 127.0.0.1:8080;
+ server 127.0.0.1:8081;
+ }
+
+ upstream monitor-admin {
+ server 127.0.0.1:9090;
+ }
+
+ upstream xxljob-admin {
+ server 127.0.0.1:9100;
+ }
+
+ server {
+ listen 80;
+ server_name localhost;
+
+ # https配置参考 start
+ #listen 443 ssl;
+
+ # 证书直接存放 /docker/nginx/cert/ 目录下即可 更改证书名称即可 无需更改证书路径
+ #ssl on;
+ #ssl_certificate /etc/nginx/cert/xxx.local.crt; # /etc/nginx/cert/ 为docker映射路径 不允许更改
+ #ssl_certificate_key /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改
+ #ssl_session_timeout 5m;
+ #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
+ #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ #ssl_prefer_server_ciphers on;
+ # https配置参考 end
+
+ # 演示环境配置 拦截除 GET POST 之外的所有请求
+ # if ($request_method !~* GET|POST) {
+ # rewrite ^/(.*)$ /403;
+ # }
+
+ # location = /403 {
+ # default_type application/json;
+ # return 200 '{"msg":"演示模式,不允许操作","code":500}';
+ # }
+
+ # 限制外网访问内网 actuator 相关路径
+ location ~ ^(/[^/]*)?/actuator(/.*)?$ {
+ return 403;
+ }
+
+ location / {
+ root /usr/share/nginx/html;
+ try_files $uri $uri/ /index.html;
+ index index.html index.htm;
+ }
+
+ location /prod-api/ {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header REMOTE-HOST $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://server/;
+ }
+
+ # https 会拦截内链所有的 http 请求 造成功能无法使用
+ # 解决方案1 将 admin 服务 也配置成 https
+ # 解决方案2 将菜单配置为外链访问 走独立页面 http 访问
+ location /admin/ {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header REMOTE-HOST $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://monitor-admin/admin/;
+ }
+
+ # https 会拦截内链所有的 http 请求 造成功能无法使用
+ # 解决方案1 将 xxljob 服务 也配置成 https
+ # 解决方案2 将菜单配置为外链访问 走独立页面 http 访问
+ location /xxl-job-admin/ {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header REMOTE-HOST $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://xxljob-admin/xxl-job-admin/;
+ }
+
+ error_page 500 502 503 504 /50x.html;
+ location = /50x.html {
+ root html;
+ }
+ }
+}
diff --git a/script/docker/redis/conf/redis.conf b/script/docker/redis/conf/redis.conf
new file mode 100644
index 0000000..8ac7da0
--- /dev/null
+++ b/script/docker/redis/conf/redis.conf
@@ -0,0 +1,28 @@
+# redis 密码
+requirepass ruoyi123
+
+# key 监听器配置
+# notify-keyspace-events Ex
+
+# 配置持久化文件存储路径
+dir /redis/data
+# 配置rdb
+# 15分钟内有至少1个key被更改则进行快照
+save 900 1
+# 5分钟内有至少10个key被更改则进行快照
+save 300 10
+# 1分钟内有至少10000个key被更改则进行快照
+save 60 10000
+# 开启压缩
+rdbcompression yes
+# rdb文件名 用默认的即可
+dbfilename dump.rdb
+
+# 开启aof
+appendonly yes
+# 文件名
+appendfilename "appendonly.aof"
+# 持久化策略,no:不同步,everysec:每秒一次,always:总是同步,速度比较慢
+# appendfsync always
+appendfsync everysec
+# appendfsync no
diff --git a/script/docker/redis/data/README.md b/script/docker/redis/data/README.md
new file mode 100644
index 0000000..fbc5474
--- /dev/null
+++ b/script/docker/redis/data/README.md
@@ -0,0 +1 @@
+数据目录 请执行 `chmod 777 /docker/redis/data` 赋予读写权限 否则将无法写入数据
\ No newline at end of file
diff --git a/script/sql/ry-vue-blog.sql b/script/sql/ry-vue-blog.sql
new file mode 100644
index 0000000..ba27f7e
--- /dev/null
+++ b/script/sql/ry-vue-blog.sql
@@ -0,0 +1,2954 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server : 本地电脑
+ Source Server Type : MySQL
+ Source Server Version : 80017 (8.0.17)
+ Source Host : localhost:3306
+ Source Schema : ry-vue-blog
+
+ Target Server Type : MySQL
+ Target Server Version : 80017 (8.0.17)
+ File Encoding : 65001
+
+ Date: 17/04/2023 19:09:06
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for blog_article
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_article`;
+CREATE TABLE `blog_article` (
+ `id` bigint(11) NOT NULL AUTO_INCREMENT,
+ `user_id` bigint(11) NOT NULL COMMENT '作者',
+ `category_id` int(11) NULL DEFAULT NULL COMMENT '文章分类',
+ `article_cover` bigint(20) NULL DEFAULT NULL COMMENT '文章缩略图',
+ `article_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '标题',
+ `article_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '内容',
+ `type` tinyint(1) NOT NULL DEFAULT 0 COMMENT '文章类型 1原创 2转载 3翻译',
+ `original_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '原文链接',
+ `is_top` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否置顶 0否 1是',
+ `is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除 0否 1是',
+ `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态值 1公开 2私密 3评论可见',
+ `create_time` datetime NOT NULL COMMENT '发表时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `like_count` int(11) NULL DEFAULT 0 COMMENT '点赞数',
+ `views_count` int(11) NULL DEFAULT 0 COMMENT '浏览量',
+ `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `update_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ FULLTEXT INDEX `ft_search`(`article_content`)
+) ENGINE = InnoDB AUTO_INCREMENT = 158 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_article
+-- ----------------------------
+INSERT INTO `blog_article` VALUES (143, 1, 214, 1647487717082169345, '新的vue测试', '# Vue中 this.$router.push 传参 及 参数接收\n@[TOC](文章目录)\n## 1:两种方式![Description](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\n### 方法一:name跳转页面\n\n```js\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\n\n```\n**另一页面接收参数方式:**\n![1161451.jpg](http://127.0.0.1:9000/blog/2023/04/17/c45820d458654545b92c79c6fd148311.jpg)\n```js\nthis.$route.params.id\n\n```\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\n控制台展示:\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\n### 方法二:path跳转页面\n\n```js\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\n\n```\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\n\n\n## 2、区别\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\n\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779', 1, NULL, 0, 0, 1, '2023-01-13 19:45:57', '2023-04-17 18:34:46', 0, 0, 'admin', 'admin');
+INSERT INTO `blog_article` VALUES (156, 1, 1, 1630396074092933122, '123', '123', 1, NULL, 0, 0, 1, '2023-02-28 10:34:52', '2023-02-28 11:29:54', 0, 0, 'admin', 'admin');
+INSERT INTO `blog_article` VALUES (157, 1, 1, 1647910881729728513, '喜好测试', '喜好测试', 1, NULL, 0, 0, 1, '2023-04-17 18:32:28', '2023-04-17 18:32:28', 0, 0, 'admin', 'admin');
+
+-- ----------------------------
+-- Table structure for blog_article_tag
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_article_tag`;
+CREATE TABLE `blog_article_tag` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `article_id` int(11) NOT NULL COMMENT '文章id',
+ `tag_id` int(11) NOT NULL COMMENT '标签id',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `fk_article_tag_1`(`article_id` ASC) USING BTREE,
+ INDEX `fk_article_tag_2`(`tag_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1220 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_article_tag
+-- ----------------------------
+INSERT INTO `blog_article_tag` VALUES (1211, 156, 1);
+INSERT INTO `blog_article_tag` VALUES (1218, 157, 1);
+INSERT INTO `blog_article_tag` VALUES (1219, 143, 66);
+
+-- ----------------------------
+-- Table structure for blog_category
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_category`;
+CREATE TABLE `blog_category` (
+ `id` bigint(11) NOT NULL AUTO_INCREMENT,
+ `category_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分类名',
+ `create_time` datetime NOT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人',
+ `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '更新用户',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 228 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_category
+-- ----------------------------
+INSERT INTO `blog_category` VALUES (1, '默认', '2023-02-16 14:07:57', '2023-02-16 14:07:57', 'admin', 'admin');
+INSERT INTO `blog_category` VALUES (214, '测试', '2022-11-24 20:34:23', '2023-01-07 14:48:28', NULL, 'admin');
+INSERT INTO `blog_category` VALUES (216, '正式', '2023-01-08 19:02:14', '2023-01-09 11:27:26', 'admin', 'admin');
+INSERT INTO `blog_category` VALUES (217, '付费', '2023-01-08 20:28:59', '2023-01-09 11:27:52', 'admin', 'admin');
+INSERT INTO `blog_category` VALUES (218, '积分', '2023-01-08 21:23:52', '2023-01-09 11:27:57', 'admin', 'admin');
+
+-- ----------------------------
+-- Table structure for blog_chat_record
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_chat_record`;
+CREATE TABLE `blog_chat_record` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `user_id` bigint(11) NULL DEFAULT NULL COMMENT '用户id',
+ `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '昵称',
+ `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '头像',
+ `content` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '聊天内容',
+ `ip_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'ip地址',
+ `ip_source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'ip来源',
+ `type` tinyint(4) NOT NULL COMMENT '类型',
+ `create_time` datetime NOT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 3049 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_chat_record
+-- ----------------------------
+INSERT INTO `blog_chat_record` VALUES (1, 1, 'admin', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', '你好', '127.0.0.1', '127.0.0.1', 1, '2023-02-28 17:16:49', '2023-01-02 17:16:56');
+INSERT INTO `blog_chat_record` VALUES (2991, 1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', '666', NULL, NULL, 3, '2023-03-09 17:59:16', NULL);
+INSERT INTO `blog_chat_record` VALUES (2995, 1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', '💥', NULL, NULL, 3, '2023-03-09 18:06:51', NULL);
+INSERT INTO `blog_chat_record` VALUES (3018, 0, '游客', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '666', NULL, NULL, 3, '2023-03-10 17:31:05', NULL);
+INSERT INTO `blog_chat_record` VALUES (3019, 0, '游客', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '💗', NULL, NULL, 3, '2023-03-10 17:31:27', NULL);
+INSERT INTO `blog_chat_record` VALUES (3020, 0, '游客', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '💘', NULL, NULL, 3, '2023-03-10 17:35:32', NULL);
+INSERT INTO `blog_chat_record` VALUES (3021, 0, '游客', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '🥰', NULL, NULL, 3, '2023-03-10 17:38:31', NULL);
+INSERT INTO `blog_chat_record` VALUES (3022, 1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', '999', NULL, NULL, 3, '2023-03-10 17:51:01', NULL);
+INSERT INTO `blog_chat_record` VALUES (3023, 1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', 'http://127.0.0.1:9000/blog/2023/03/10/80220840d3ad4464b985a570af567bcc.wav', 'undefined', 'undefined', 5, '2023-03-10 18:00:15', NULL);
+INSERT INTO `blog_chat_record` VALUES (3024, 1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', 'http://127.0.0.1:9000/blog/2023/03/10/87e3915623a44d4cbdd9a6500c96bddb.wav', 'undefined', 'undefined', 5, '2023-03-10 18:02:39', NULL);
+INSERT INTO `blog_chat_record` VALUES (3025, 1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', 'http://127.0.0.1:9000/blog/2023/03/10/770cb001c77640019d594a9373910792.wav', 'undefined', 'undefined', 5, '2023-03-10 18:02:58', NULL);
+INSERT INTO `blog_chat_record` VALUES (3026, 1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', 'http://127.0.0.1:9000/blog/2023/03/10/a8f56f0433c9416ba42322d38a9e8d64.wav', 'undefined', 'undefined', 5, '2023-03-10 18:03:59', NULL);
+INSERT INTO `blog_chat_record` VALUES (3027, 0, '游客', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '33', NULL, NULL, 3, '2023-03-11 13:17:14', NULL);
+INSERT INTO `blog_chat_record` VALUES (3028, 0, '未知ip', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '哈喽', '未知ip', '', 3, '2023-03-11 13:19:24', NULL);
+INSERT INTO `blog_chat_record` VALUES (3029, 1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', '你是谁', '未知ip', '', 3, '2023-03-11 13:19:59', NULL);
+INSERT INTO `blog_chat_record` VALUES (3030, 0, '未知ip', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '嗯嗯?', '未知ip', '', 3, '2023-03-11 13:20:05', NULL);
+INSERT INTO `blog_chat_record` VALUES (3031, 3, '本部门及以下 密码666666', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg', '789', '6666', '6666', 3, '2023-03-11 13:25:59', NULL);
+INSERT INTO `blog_chat_record` VALUES (3032, 3, '本部门及以下 密码666666', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg', '6', '未知ip', '', 3, '2023-03-11 13:37:14', NULL);
+INSERT INTO `blog_chat_record` VALUES (3033, 3, '本部门及以下 密码666666', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg', '456', '127.0.0.1:8080', '', 3, '2023-03-11 13:40:20', NULL);
+INSERT INTO `blog_chat_record` VALUES (3034, 3, '本部门及以下 密码666666', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg', '999', '127.0.0.1:8080', '', 3, '2023-03-11 13:40:35', NULL);
+INSERT INTO `blog_chat_record` VALUES (3035, 3, '本部门及以下 密码666666', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg', '亲爱的', '127.0.0.1', '内网IP', 3, '2023-03-11 13:45:08', NULL);
+INSERT INTO `blog_chat_record` VALUES (3036, 0, '127.0.0.1', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', 'wa', '127.0.0.1', '内网IP', 3, '2023-03-11 14:41:36', NULL);
+INSERT INTO `blog_chat_record` VALUES (3037, 0, '127.0.0.1', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '为什么', '127.0.0.1', '内网IP', 3, '2023-03-11 16:19:35', NULL);
+INSERT INTO `blog_chat_record` VALUES (3038, 0, '', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '3', '', '', 3, '2023-03-11 16:54:13', NULL);
+INSERT INTO `blog_chat_record` VALUES (3039, NULL, '127.0.0.1', 'null', 'http://127.0.0.1:9000/blog/2023/03/11/8dbac03922f24a07bce8f0c28e540e47.wav', '127.0.0.1', '内网IP', 5, '2023-03-11 17:16:27', NULL);
+INSERT INTO `blog_chat_record` VALUES (3040, NULL, '127.0.0.1', 'null', 'http://127.0.0.1:9000/blog/2023/03/11/5310f49688eb4434bd40ce031b471230.wav', '127.0.0.1', '内网IP', 5, '2023-03-11 17:16:57', NULL);
+INSERT INTO `blog_chat_record` VALUES (3041, NULL, '127.0.0.1', 'null', 'http://127.0.0.1:9000/blog/2023/03/11/59e254468a49495b8186a57bb5c60733.wav', '127.0.0.1', '内网IP', 5, '2023-03-11 17:18:27', NULL);
+INSERT INTO `blog_chat_record` VALUES (3042, 0, '0:0:0:0:0:0:0:1', 'http://8.130.45.202:9000/blog/2023/02/23/c944a0b16c5346d4a81525ae5841f698.jpg', '?', '0:0:0:0:0:0:0:1', '内网IP', 3, '2023-03-11 17:25:26', NULL);
+INSERT INTO `blog_chat_record` VALUES (3043, NULL, '127.0.0.1', 'null', 'http://127.0.0.1:9000/blog/2023/03/11/ad5d9e1848b6497cb2d50e100103908a.wav', '127.0.0.1', '内网IP', 5, '2023-03-11 17:33:43', NULL);
+INSERT INTO `blog_chat_record` VALUES (3044, 0, '127.0.0.1', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '33', '127.0.0.1', '内网IP', 3, '2023-03-12 12:34:03', NULL);
+INSERT INTO `blog_chat_record` VALUES (3045, 0, '127.0.0.1', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '💗💥', '127.0.0.1', '内网IP', 3, '2023-03-12 14:56:50', NULL);
+INSERT INTO `blog_chat_record` VALUES (3046, 0, '127.0.0.1', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '💯🤡123😃', '127.0.0.1', '内网IP', 3, '2023-03-12 15:01:27', NULL);
+INSERT INTO `blog_chat_record` VALUES (3047, 0, '127.0.0.1', 'https://s1.ax1x.com/2023/03/09/ppndcTJ.png', '123123💯🤡😆', '127.0.0.1', '内网IP', 3, '2023-03-12 15:05:31', NULL);
+INSERT INTO `blog_chat_record` VALUES (3048, 1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', '666', '127.0.0.1', '内网IP', 3, '2023-04-17 19:06:33', NULL);
+
+-- ----------------------------
+-- Table structure for blog_comment
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_comment`;
+CREATE TABLE `blog_comment` (
+ `id` bigint(30) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `user_id` bigint(30) NOT NULL COMMENT '评论用户Id',
+ `comment_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '评论内容',
+ `reply_user_id` bigint(30) NULL DEFAULT NULL COMMENT '回复用户id',
+ `parent_id` bigint(11) NULL DEFAULT NULL COMMENT '父评论id',
+ `type` tinyint(4) NOT NULL COMMENT '评论类型 1.文章 2.友链 3.说说',
+ `is_delete` tinyint(4) NOT NULL DEFAULT 0 COMMENT '是否删除 0否 1是',
+ `create_time` datetime NOT NULL COMMENT '评论时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `topic_id` int(11) NULL DEFAULT NULL COMMENT '评论主题id',
+ `ip_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '评论ip',
+ `ip_source` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '真实地址',
+ `state` int(10) NULL DEFAULT NULL COMMENT '评论状态',
+ `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `fk_comment_user`(`user_id` ASC) USING BTREE,
+ INDEX `fk_comment_parent`(`parent_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1614588562538348562 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_comment
+-- ----------------------------
+INSERT INTO `blog_comment` VALUES (1, 1, '测试评论说说', NULL, NULL, 3, 0, '2022-12-07 19:35:07', NULL, 50, '192.168.88.111', '本地局域网', 1, 'admin', 'admin');
+INSERT INTO `blog_comment` VALUES (2, 1, '测试评论说说2', NULL, NULL, 3, 0, '2023-01-14 14:36:05', NULL, 50, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (3, 1, '测试回复说说', 1, 1, 3, 0, '2022-03-11 22:52:32', '2022-03-11 22:52:32', 50, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (4, 1, '测试评论文章', NULL, NULL, 1, 0, '2023-01-14 17:45:37', NULL, 138, NULL, NULL, 1, 'admin', NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348546, 1614548939325845505, '啦啦啦', NULL, NULL, 1, 0, '2023-01-15 19:41:26', '2023-01-15 19:41:26', 143, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348549, 1, '好滴好滴', NULL, NULL, 3, 0, '2023-01-15 19:54:28', '2023-01-15 19:54:28', 51, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348550, 1, '好滴', NULL, NULL, 3, 0, '2023-01-15 19:54:36', '2023-01-15 19:54:36', 51, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348551, 1, '哈哈哈', NULL, NULL, 3, 0, '2023-01-15 19:55:10', '2023-01-15 19:55:10', 51, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348552, 1, '回复说说哦', 1, 1614588562538348551, 3, 0, '2023-01-15 19:55:18', '2023-01-15 19:55:18', 51, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348553, 1614548939325845505, '拜拜', 1, 1614588562538348547, 1, 0, '2023-01-15 19:57:37', '2023-01-15 19:57:37', 143, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348554, 1614548939325845505, '啦啦啦', NULL, NULL, 1, 0, '2023-01-15 19:59:31', '2023-01-15 19:59:31', 139, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348555, 1614548939325845505, '123123', NULL, NULL, 2, 0, '2023-01-17 12:12:30', '2023-01-17 12:12:30', NULL, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348556, 1, '😁😆', NULL, NULL, 1, 0, '2023-02-09 20:11:50', '2023-02-09 20:11:50', 143, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348557, 1, '333', NULL, NULL, 1, 0, '2023-02-27 20:50:40', '2023-02-27 20:50:40', 139, NULL, NULL, 1, NULL, NULL);
+INSERT INTO `blog_comment` VALUES (1614588562538348561, 1, '删除删除', NULL, NULL, 2, 0, '2023-02-28 20:18:01', '2023-02-28 20:18:01', NULL, NULL, NULL, 2, NULL, NULL);
+
+-- ----------------------------
+-- Table structure for blog_friend_link
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_friend_link`;
+CREATE TABLE `blog_friend_link` (
+ `id` bigint(11) NOT NULL AUTO_INCREMENT,
+ `link_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '链接名',
+ `link_avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '链接头像',
+ `link_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '链接地址',
+ `link_intro` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '链接介绍',
+ `create_time` datetime NOT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `create_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `update_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `fk_friend_link_user`(`link_name` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_friend_link
+-- ----------------------------
+INSERT INTO `blog_friend_link` VALUES (1, '风丶宇的个人博客', 'https://static.talkxj.com/photos/b553f564f81a80dc338695acb1b475d2.jpg', 'https://www.talkxj.com', '往事不随风', '2022-01-18 00:26:46', NULL, NULL, NULL);
+
+-- ----------------------------
+-- Table structure for blog_message
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_message`;
+CREATE TABLE `blog_message` (
+ `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
+ `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '昵称',
+ `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '头像',
+ `message_content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '留言内容',
+ `ip_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户ip',
+ `ip_source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户地址',
+ `time` tinyint(1) NULL DEFAULT NULL COMMENT '弹幕速度',
+ `is_review` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '1' COMMENT '是否审核',
+ `create_time` datetime NOT NULL COMMENT '发布时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
+ `create_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `update_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 3948 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_message
+-- ----------------------------
+INSERT INTO `blog_message` VALUES (1, 'water-之', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg', '测试留言', '127.0.0.1', NULL, 10, 'Y', '2023-01-20 16:52:48', '2023-01-14 21:31:42', NULL, 'admin');
+INSERT INTO `blog_message` VALUES (3946, '老爸', 'https://s1.ax1x.com/2023/01/15/pSQf91A.jpg', '123123', '127.0.0.1', '', 9, 'N', '2023-01-15 21:07:59', '2023-01-15 21:07:59', NULL, NULL);
+INSERT INTO `blog_message` VALUES (3947, '游客', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/d917e0eddca44f41ba8e4befd51758c6.jpg', '123', '4.2.2.2', '美国', 7, 'Y', '2023-02-17 16:34:21', '2023-02-17 16:34:21', NULL, NULL);
+
+-- ----------------------------
+-- Table structure for blog_operation_log
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_operation_log`;
+CREATE TABLE `blog_operation_log` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
+ `opt_module` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作模块',
+ `opt_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作类型',
+ `opt_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作url',
+ `opt_method` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作方法',
+ `opt_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作描述',
+ `request_param` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '请求参数',
+ `request_method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '请求方式',
+ `response_data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '返回数据',
+ `user_id` int(11) NOT NULL COMMENT '用户id',
+ `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户昵称',
+ `ip_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作ip',
+ `ip_source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作地址',
+ `create_time` datetime NOT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1529 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_operation_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for blog_page
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_page`;
+CREATE TABLE `blog_page` (
+ `id` bigint(30) NOT NULL AUTO_INCREMENT COMMENT '页面id',
+ `page_name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '页面名',
+ `page_label` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '页面标签',
+ `page_cover` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '页面封面',
+ `create_time` datetime NOT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `create_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `update_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 905 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '页面' ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_page
+-- ----------------------------
+INSERT INTO `blog_page` VALUES (1, '首页', 'home', '1647487957390622721', '2021-08-07 10:32:36', '2023-04-16 14:31:53', NULL, 'admin');
+INSERT INTO `blog_page` VALUES (2, '归档', 'archive', '1614606077834403841', '2021-08-07 10:32:36', '2023-01-15 20:51:03', NULL, 'admin');
+INSERT INTO `blog_page` VALUES (3, '分类', 'category', '1614606235632508930', '2021-08-07 10:32:36', '2023-01-15 20:51:42', NULL, 'admin');
+INSERT INTO `blog_page` VALUES (4, '标签', 'tag', '1614606349667246081', '2021-08-07 10:32:36', '2023-01-15 20:52:09', NULL, 'admin');
+INSERT INTO `blog_page` VALUES (5, '相册', 'album', 'http://localhost:8080/upload/config/宇宙.jpg', '2021-08-07 10:32:36', '2021-12-27 12:23:12', NULL, NULL);
+INSERT INTO `blog_page` VALUES (6, '友链', 'link', '1614606607352700929', '2021-08-07 10:32:36', '2023-01-15 20:53:12', NULL, 'admin');
+INSERT INTO `blog_page` VALUES (7, '关于', 'about', '1614610913900367873', '2021-08-07 10:32:36', '2023-01-15 21:10:16', NULL, 'admin');
+INSERT INTO `blog_page` VALUES (8, '留言', 'message', '1614251029958778882', '2021-08-07 10:32:36', '2023-01-14 21:20:15', NULL, 'admin');
+INSERT INTO `blog_page` VALUES (9, '个人中心', 'user', '1614606431695249409', '2021-08-07 10:32:36', '2023-01-15 20:52:29', NULL, 'admin');
+INSERT INTO `blog_page` VALUES (10, '文章列表', 'articleList', '1614606523919605761', '2021-08-10 15:36:19', '2023-01-15 20:52:53', NULL, 'admin');
+INSERT INTO `blog_page` VALUES (11, '说说', 'talk', '1614607161785163778', '2022-01-23 00:51:24', '2023-01-15 20:55:22', NULL, 'admin');
+
+-- ----------------------------
+-- Table structure for blog_photo
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_photo`;
+CREATE TABLE `blog_photo` (
+ `id` bigint(30) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `album_id` bigint(30) NOT NULL COMMENT '相册id',
+ `photo_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '照片名',
+ `photo_desc` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '照片描述',
+ `photo_src` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '照片地址',
+ `is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
+ `create_time` datetime NOT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `create_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `update_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1633693831616565251 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '照片' ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_photo
+-- ----------------------------
+INSERT INTO `blog_photo` VALUES (1633693831616565250, 1630182639979831298, 'LOL娜美3440x1440壁纸_千叶网.jpeg', NULL, 'http://127.0.0.1:9000/blog/2023/03/09/bf0032f388f249cd8d47b81ed24a26a4.jpeg', 0, '2023-03-09 12:58:57', '2023-03-09 12:58:57', 'admin', 'admin');
+
+-- ----------------------------
+-- Table structure for blog_photo_album
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_photo_album`;
+CREATE TABLE `blog_photo_album` (
+ `id` bigint(30) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `album_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '相册名',
+ `album_desc` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '相册描述',
+ `album_cover` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '相册封面',
+ `is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
+ `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态值 1公开 2私密',
+ `create_time` datetime NOT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `create_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `update_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1630182639979831299 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '相册' ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_photo_album
+-- ----------------------------
+INSERT INTO `blog_photo_album` VALUES (1630182639979831298, '测试', '测试', 'http://127.0.0.1:9000/blog/2023/02/27/c1ed44bc66de4d648209d14b9d31bd69.jpg', 0, 1, '2023-02-27 20:26:43', '2023-02-27 20:26:43', 'admin', 'admin');
+
+-- ----------------------------
+-- Table structure for blog_tag
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_tag`;
+CREATE TABLE `blog_tag` (
+ `id` bigint(11) NOT NULL AUTO_INCREMENT,
+ `tag_name` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签名',
+ `create_by` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `create_time` datetime NULL DEFAULT NULL,
+ `update_by` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `update_time` datetime NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 68 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of blog_tag
+-- ----------------------------
+INSERT INTO `blog_tag` VALUES (1, '默认', 'admin', '2023-02-16 13:42:39', 'admin', '2023-02-16 14:12:43');
+INSERT INTO `blog_tag` VALUES (54, '测试', NULL, NULL, 'admin', '2023-01-08 15:01:53');
+INSERT INTO `blog_tag` VALUES (55, 'vue', 'admin', '2023-01-09 11:44:46', 'admin', '2023-01-09 11:44:46');
+INSERT INTO `blog_tag` VALUES (56, 'springboot', 'admin', '2023-01-09 11:44:54', 'admin', '2023-01-09 11:44:54');
+INSERT INTO `blog_tag` VALUES (59, 'html', 'admin', '2023-01-09 21:13:58', 'admin', '2023-01-09 21:13:58');
+INSERT INTO `blog_tag` VALUES (66, '啦啦啦', 'admin', '2023-01-16 14:20:51', 'admin', '2023-01-16 14:20:51');
+
+-- ----------------------------
+-- Table structure for blog_talk
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_talk`;
+CREATE TABLE `blog_talk` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '说说id',
+ `user_id` int(11) NOT NULL COMMENT '用户id',
+ `content` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '说说内容',
+ `images` varchar(2500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '图片',
+ `is_top` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否置顶',
+ `create_time` datetime NOT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `create_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `update_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 60 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_talk
+-- ----------------------------
+INSERT INTO `blog_talk` VALUES (52, 1, '😀😃😂', NULL, 0, '2023-02-08 22:24:16', '2023-02-08 22:24:16', 'admin', 'admin');
+INSERT INTO `blog_talk` VALUES (54, 1, '😄 😆😉🙂', NULL, 0, '2023-02-08 22:47:21', '2023-02-16 14:18:32', 'admin', 'admin');
+INSERT INTO `blog_talk` VALUES (55, 1, '😁😆', NULL, 0, '2023-02-15 21:08:07', '2023-02-16 14:19:26', 'admin', 'admin');
+
+-- ----------------------------
+-- Table structure for blog_website_config
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_website_config`;
+CREATE TABLE `blog_website_config` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `config` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '配置信息',
+ `create_time` datetime NOT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of blog_website_config
+-- ----------------------------
+INSERT INTO `blog_website_config` VALUES (1, '{\"alipayQRCode\":\"1613170158132543490\",\"gitee\":\"https://gitee.com/kalashok-pan\",\"github\":\"\",\"isChatRoom\":1,\"isCommentReview\":1,\"isEmailNotice\":1,\"isMessageReview\":1,\"isMusicPlayer\":0,\"isReward\":1,\"qq\":\"2831826106\",\"socialLoginList\":[\"qq\",\"weibo\",\"gitee\"],\"socialUrlList\":[\"gitee\",\"qq\"],\"touristAvatar\":\"1613170094936965121\",\"userAvatar\":\"1613170007087267841\",\"websiteAuthor\":\"Water-之\",\"websiteAvatar\":\"1625787929773232129\",\"websiteCreateTime\":\"2023-02-22\",\"websiteIntro\":\"记录成长\",\"websiteName\":\"夜色\",\"websiteNotice\":\"欢迎来到我的博客\",\"websiteRecordNo\":\"备案号\",\"websocketUrl\":\"ws://127.0.0.1:8080/websocket\",\"weiXinQRCode\":\"1613170123965743105\"}', '2021-08-09 19:37:30', NULL);
+
+-- ----------------------------
+-- Table structure for gen_table
+-- ----------------------------
+DROP TABLE IF EXISTS `gen_table`;
+CREATE TABLE `gen_table` (
+ `table_id` bigint(20) NOT NULL COMMENT '编号',
+ `table_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '表名称',
+ `table_comment` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '表描述',
+ `sub_table_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '关联子表的表名',
+ `sub_table_fk_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '子表关联的外键名',
+ `class_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '实体类名称',
+ `tpl_category` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'crud' COMMENT '使用的模板(crud单表操作 tree树表操作)',
+ `package_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成包路径',
+ `module_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成模块名',
+ `business_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成业务名',
+ `function_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成功能名',
+ `function_author` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生成功能作者',
+ `gen_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '生成代码方式(0zip压缩包 1自定义路径)',
+ `gen_path` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '/' COMMENT '生成路径(不填默认项目路径)',
+ `options` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '其它生成选项',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`table_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '代码生成业务表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of gen_table
+-- ----------------------------
+INSERT INTO `gen_table` VALUES (1611335897880530945, 'blog_article', '文章列表', NULL, NULL, 'Article', 'crud', 'com.zhi.blog', 'article', 'article', '文章列表', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"}', 'admin', '2023-01-06 20:15:34', 'admin', '2023-01-07 12:45:11', NULL);
+INSERT INTO `gen_table` VALUES (1611611446079225858, 'blog_category', '分类管理', NULL, NULL, 'Category', 'crud', 'com.zhi.blog', 'category', 'category', '分类管理', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"}', 'admin', '2023-01-07 14:30:58', 'admin', '2023-01-07 14:40:26', '分类管理');
+INSERT INTO `gen_table` VALUES (1611975642985832449, 'blog_tag', '标签管理', NULL, NULL, 'Tag', 'crud', 'com.zhi.blog', 'tag', 'tag', '标签管理', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"}', 'admin', '2023-01-08 14:38:04', 'admin', '2023-01-08 14:59:50', '标签管理');
+INSERT INTO `gen_table` VALUES (1612801946723414017, 'blog_comment', '评论管理', NULL, NULL, 'Comment', 'crud', 'com.zhi.blog', 'comment', 'comment', '评论管理', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"}', 'admin', '2023-01-10 21:01:07', 'admin', '2023-01-10 22:27:01', '评论管理');
+INSERT INTO `gen_table` VALUES (1613097812961054721, 'blog_message', '留言管理', NULL, NULL, 'Message', 'crud', 'com.zhi.blog', 'message', 'message', '留言管理', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"}', 'admin', '2023-01-11 16:56:31', 'admin', '2023-01-11 16:59:44', '留言管理');
+INSERT INTO `gen_table` VALUES (1613391695125204993, 'blog_page', '页面管理', NULL, NULL, 'BlogPage', 'crud', 'com.zhi.blog', 'page', 'page', '页面管理', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613139021339353090\"}', 'admin', '2023-01-11 21:53:14', 'admin', '2023-01-12 12:50:07', '页面管理');
+INSERT INTO `gen_table` VALUES (1613408128559218689, 'blog_friend_link', '友链管理', NULL, NULL, 'FriendLink', 'crud', 'com.zhi.blog', 'friendLink', 'friendLink', '友链管理', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613139021339353090\"}', 'admin', '2023-01-12 13:23:28', 'admin', '2023-01-12 13:33:11', '友链管理');
+INSERT INTO `gen_table` VALUES (1613814814495215617, 'blog_talk', '说说管理', NULL, NULL, 'Talk', 'crud', 'com.zhi.blog', 'talk', 'talk', '说说管理', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613813815185510401\"}', 'admin', '2023-01-13 16:14:15', 'admin', '2023-01-13 16:42:08', '说说管理');
+INSERT INTO `gen_table` VALUES (1627638276586246146, 'blog_photo_album', '相册管理', NULL, NULL, 'Album', 'crud', 'com.zhi.blog', 'album', 'album', '相册管理', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1627642998340730881\"}', 'admin', '2023-02-20 19:55:16', 'admin', '2023-02-20 20:15:28', '相册管理');
+INSERT INTO `gen_table` VALUES (1627992801939582977, 'blog_photo', '照片管理', NULL, NULL, 'Photo', 'crud', 'com.zhi.blog', 'photo', 'photo', '照片管理', 'ftz', '0', '/', '{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1627642998340730881\"}', 'admin', '2023-02-20 19:54:42', 'admin', '2023-02-21 19:46:30', '照片管理');
+
+-- ----------------------------
+-- Table structure for gen_table_column
+-- ----------------------------
+DROP TABLE IF EXISTS `gen_table_column`;
+CREATE TABLE `gen_table_column` (
+ `column_id` bigint(20) NOT NULL COMMENT '编号',
+ `table_id` bigint(20) NULL DEFAULT NULL COMMENT '归属表编号',
+ `column_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列名称',
+ `column_comment` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列描述',
+ `column_type` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列类型',
+ `java_type` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'JAVA类型',
+ `java_field` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'JAVA字段名',
+ `is_pk` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否主键(1是)',
+ `is_increment` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否自增(1是)',
+ `is_required` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否必填(1是)',
+ `is_insert` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否为插入字段(1是)',
+ `is_edit` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否编辑字段(1是)',
+ `is_list` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否列表字段(1是)',
+ `is_query` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否查询字段(1是)',
+ `query_type` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'EQ' COMMENT '查询方式(等于、不等于、大于、小于、范围)',
+ `html_type` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
+ `dict_type` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典类型',
+ `sort` int(11) NULL DEFAULT NULL COMMENT '排序',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ PRIMARY KEY (`column_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '代码生成业务表字段' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of gen_table_column
+-- ----------------------------
+INSERT INTO `gen_table_column` VALUES (1611335898031525890, 1611335897880530945, 'id', '', 'int(11)', 'Long', 'id', '1', '1', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898031525891, 1611335897880530945, 'user_id', '作者', 'int(11)', 'Long', 'userId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 2, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274626, 1611335897880530945, 'category_id', '文章分类', 'int(11)', 'Long', 'categoryId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 3, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274627, 1611335897880530945, 'article_cover', '文章缩略图', 'varchar(1024)', 'String', 'articleCover', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'imageUpload', '', 4, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274628, 1611335897880530945, 'article_title', '标题', 'varchar(50)', 'String', 'articleTitle', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274629, 1611335897880530945, 'article_content', '内容', 'longtext', 'String', 'articleContent', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'editor', '', 6, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274630, 1611335897880530945, 'type', '文章类型 1原创 2转载 3翻译', 'tinyint(1)', 'Integer', 'type', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'radio', 'article_type', 7, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274631, 1611335897880530945, 'original_url', '原文链接', 'varchar(255)', 'String', 'originalUrl', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 8, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274632, 1611335897880530945, 'is_top', '是否置顶 0否 1是', 'tinyint(1)', 'Integer', 'isTop', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'radio', 'sys_yes_no', 9, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274633, 1611335897880530945, 'is_delete', '是否删除 0否 1是', 'tinyint(1)', 'Integer', 'isDelete', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'radio', 'sys_yes_no', 10, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274634, 1611335897880530945, 'status', '状态值 1公开 2私密 3评论可见', 'tinyint(1)', 'Integer', 'status', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'radio', 'article_status', 11, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274635, 1611335897880530945, 'create_time', '发表时间', 'datetime', 'Date', 'createTime', '0', '0', '1', NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 12, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274636, 1611335897880530945, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 13, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274637, 1611335897880530945, 'like_count', '点赞数', 'int(11)', 'Long', 'likeCount', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 14, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274638, 1611335897880530945, 'views_count', '浏览量', 'int(11)', 'Long', 'viewsCount', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 15, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274639, 1611335897880530945, 'create_by', '', 'varchar(255)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 16, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611335898069274640, 1611335897880530945, 'update_by', '', 'varchar(10)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 17, 'admin', '2023-01-06 20:16:30', 'admin', '2023-01-07 12:45:11');
+INSERT INTO `gen_table_column` VALUES (1611611446146334721, 1611611446079225858, 'id', '', 'int(11)', 'Long', 'id', '1', '1', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-01-07 14:31:26', 'admin', '2023-01-07 14:40:26');
+INSERT INTO `gen_table_column` VALUES (1611611446146334722, 1611611446079225858, 'category_name', '分类名', 'varchar(20)', 'String', 'categoryName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2023-01-07 14:31:26', 'admin', '2023-01-07 14:40:26');
+INSERT INTO `gen_table_column` VALUES (1611611446146334723, 1611611446079225858, 'create_time', '创建时间', 'datetime', 'Date', 'createTime', '0', '0', '1', NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 3, 'admin', '2023-01-07 14:31:26', 'admin', '2023-01-07 14:40:26');
+INSERT INTO `gen_table_column` VALUES (1611611446146334724, 1611611446079225858, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 4, 'admin', '2023-01-07 14:31:26', 'admin', '2023-01-07 14:40:26');
+INSERT INTO `gen_table_column` VALUES (1611611446146334725, 1611611446079225858, 'create_by', '创建人', 'varchar(20)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 5, 'admin', '2023-01-07 14:31:26', 'admin', '2023-01-07 14:40:26');
+INSERT INTO `gen_table_column` VALUES (1611611446146334726, 1611611446079225858, 'update_by', '更新用户', 'varchar(20)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 6, 'admin', '2023-01-07 14:31:26', 'admin', '2023-01-07 14:40:26');
+INSERT INTO `gen_table_column` VALUES (1611975643027775489, 1611975642985832449, 'id', '', 'int(11)', 'Long', 'id', '1', '0', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-01-08 14:38:37', 'admin', '2023-01-08 14:59:50');
+INSERT INTO `gen_table_column` VALUES (1611975643027775490, 1611975642985832449, 'tag_name', '标签名', 'varchar(11)', 'String', 'tagName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2023-01-08 14:38:37', 'admin', '2023-01-08 14:59:50');
+INSERT INTO `gen_table_column` VALUES (1611975643078107137, 1611975642985832449, 'create_by', '', 'varchar(20)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 3, 'admin', '2023-01-08 14:38:37', 'admin', '2023-01-08 14:59:50');
+INSERT INTO `gen_table_column` VALUES (1611975643078107138, 1611975642985832449, 'create_time', '', 'datetime', 'Date', 'createTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 4, 'admin', '2023-01-08 14:38:37', 'admin', '2023-01-08 14:59:50');
+INSERT INTO `gen_table_column` VALUES (1611975643078107139, 1611975642985832449, 'update_by', '', 'varchar(20)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 5, 'admin', '2023-01-08 14:38:37', 'admin', '2023-01-08 14:59:50');
+INSERT INTO `gen_table_column` VALUES (1611975643078107140, 1611975642985832449, 'update_time', '', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 6, 'admin', '2023-01-08 14:38:37', 'admin', '2023-01-08 14:59:50');
+INSERT INTO `gen_table_column` VALUES (1612801946790522881, 1612801946723414017, 'id', '主键', 'bigint(11)', 'Long', 'id', '1', '1', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946790522882, 1612801946723414017, 'user_id', '评论用户Id', 'bigint(11)', 'Long', 'userId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 2, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946790522883, 1612801946723414017, 'comment_content', '评论内容', 'text', 'String', 'commentContent', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'textarea', '', 3, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946790522884, 1612801946723414017, 'reply_user_id', '回复用户id', 'int(11)', 'Long', 'replyUserId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 4, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946790522885, 1612801946723414017, 'parent_id', '父评论id', 'int(11)', 'Long', 'parentId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946857631746, 1612801946723414017, 'type', '评论类型 1.文章 2.友链 3.说说', 'tinyint(4)', 'Integer', 'type', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'select', 'commen_type', 6, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946857631747, 1612801946723414017, 'is_delete', '是否删除 0否 1是', 'tinyint(4)', 'Integer', 'isDelete', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 7, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946857631749, 1612801946723414017, 'create_time', '评论时间', 'datetime', 'Date', 'createTime', '0', '0', '1', NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 8, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946857631750, 1612801946723414017, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 9, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946857631751, 1612801946723414017, 'topic_id', '评论主题id', 'int(11)', 'Long', 'topicId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 10, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946857631752, 1612801946723414017, 'ip_address', '评论ip', 'varchar(50)', 'String', 'ipAddress', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 11, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612801946857631753, 1612801946723414017, 'ip_source', '真实地址', 'varchar(50)', 'String', 'ipSource', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 12, 'admin', '2023-01-10 21:22:03', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612809899010551810, 1612801946723414017, 'state', '评论状态', 'int(10)', 'Integer', 'state', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'select', 'comment_status', 13, 'admin', '2023-01-10 21:53:39', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612811822023344130, 1612801946723414017, 'create_by', '创建人', 'varchar(20)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 14, 'admin', '2023-01-10 22:01:18', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1612812816513810434, 1612801946723414017, 'update_by', '更新人', 'varchar(20)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 15, 'admin', '2023-01-10 22:05:15', 'admin', '2023-01-10 22:27:01');
+INSERT INTO `gen_table_column` VALUES (1613097813036552193, 1613097812961054721, 'id', '主键id', 'bigint(11)', 'Long', 'id', '1', '1', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813036552194, 1613097812961054721, 'nickname', '昵称', 'varchar(50)', 'String', 'nickname', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813036552195, 1613097812961054721, 'avatar', '头像', 'varchar(255)', 'String', 'avatar', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'imageUpload', '', 3, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813091078145, 1613097812961054721, 'message_content', '留言内容', 'varchar(255)', 'String', 'messageContent', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'textarea', '', 4, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813091078146, 1613097812961054721, 'ip_address', '用户ip', 'varchar(50)', 'String', 'ipAddress', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813091078147, 1613097812961054721, 'ip_source', '用户地址', 'varchar(255)', 'String', 'ipSource', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813091078148, 1613097812961054721, 'time', '弹幕速度', 'tinyint(1)', 'Integer', 'time', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 7, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813091078149, 1613097812961054721, 'is_review', '是否审核', 'varchar(4)', 'String', 'isReview', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'radio', 'sys_yes_no', 8, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813091078150, 1613097812961054721, 'create_time', '发布时间', 'datetime', 'Date', 'createTime', '0', '0', '1', NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 9, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813091078151, 1613097812961054721, 'update_time', '修改时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 10, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813091078152, 1613097812961054721, 'create_by', '', 'varchar(10)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 11, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613097813091078153, 1613097812961054721, 'update_by', '', 'varchar(10)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 12, 'admin', '2023-01-11 16:57:43', 'admin', '2023-01-11 16:59:44');
+INSERT INTO `gen_table_column` VALUES (1613391695188119553, 1613391695125204993, 'id', '页面id', 'int(11)', 'Long', 'id', '1', '1', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-01-12 12:25:30', 'admin', '2023-01-12 12:50:07');
+INSERT INTO `gen_table_column` VALUES (1613391695188119554, 1613391695125204993, 'page_name', '页面名', 'varchar(10)', 'String', 'pageName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2023-01-12 12:25:30', 'admin', '2023-01-12 12:50:07');
+INSERT INTO `gen_table_column` VALUES (1613391695255228418, 1613391695125204993, 'page_label', '页面标签', 'varchar(20)', 'String', 'pageLabel', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 3, 'admin', '2023-01-12 12:25:30', 'admin', '2023-01-12 12:50:07');
+INSERT INTO `gen_table_column` VALUES (1613391695255228419, 1613391695125204993, 'page_cover', '页面封面', 'varchar(255)', 'String', 'pageCover', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'imageUpload', '', 4, 'admin', '2023-01-12 12:25:30', 'admin', '2023-01-12 12:50:07');
+INSERT INTO `gen_table_column` VALUES (1613391695255228420, 1613391695125204993, 'create_time', '创建时间', 'datetime', 'Date', 'createTime', '0', '0', '1', NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 5, 'admin', '2023-01-12 12:25:30', 'admin', '2023-01-12 12:50:07');
+INSERT INTO `gen_table_column` VALUES (1613391695255228421, 1613391695125204993, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 6, 'admin', '2023-01-12 12:25:30', 'admin', '2023-01-12 12:50:07');
+INSERT INTO `gen_table_column` VALUES (1613395321428168705, 1613391695125204993, 'create_by', '', 'varchar(10)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 7, 'admin', '2023-01-12 12:39:55', 'admin', '2023-01-12 12:50:07');
+INSERT INTO `gen_table_column` VALUES (1613395321428168706, 1613391695125204993, 'update_by', '', 'varchar(10)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 8, 'admin', '2023-01-12 12:39:55', 'admin', '2023-01-12 12:50:07');
+INSERT INTO `gen_table_column` VALUES (1613408128626327554, 1613408128559218689, 'id', '', 'int(11)', 'Long', 'id', '1', '1', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-01-12 13:30:48', 'admin', '2023-01-12 13:33:11');
+INSERT INTO `gen_table_column` VALUES (1613408128626327555, 1613408128559218689, 'link_name', '链接名', 'varchar(20)', 'String', 'linkName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2023-01-12 13:30:48', 'admin', '2023-01-12 13:33:11');
+INSERT INTO `gen_table_column` VALUES (1613408128626327556, 1613408128559218689, 'link_avatar', '链接头像', 'varchar(255)', 'String', 'linkAvatar', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'imageUpload', '', 3, 'admin', '2023-01-12 13:30:48', 'admin', '2023-01-12 13:33:11');
+INSERT INTO `gen_table_column` VALUES (1613408128626327557, 1613408128559218689, 'link_address', '链接地址', 'varchar(50)', 'String', 'linkAddress', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 4, 'admin', '2023-01-12 13:30:48', 'admin', '2023-01-12 13:33:11');
+INSERT INTO `gen_table_column` VALUES (1613408128693436418, 1613408128559218689, 'link_intro', '链接介绍', 'varchar(100)', 'String', 'linkIntro', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'admin', '2023-01-12 13:30:48', 'admin', '2023-01-12 13:33:11');
+INSERT INTO `gen_table_column` VALUES (1613408128693436419, 1613408128559218689, 'create_time', '创建时间', 'datetime', 'Date', 'createTime', '0', '0', '1', NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 6, 'admin', '2023-01-12 13:30:48', 'admin', '2023-01-12 13:33:11');
+INSERT INTO `gen_table_column` VALUES (1613408128693436420, 1613408128559218689, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 7, 'admin', '2023-01-12 13:30:48', 'admin', '2023-01-12 13:33:11');
+INSERT INTO `gen_table_column` VALUES (1613408128693436421, 1613408128559218689, 'create_by', '', 'varchar(10)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 8, 'admin', '2023-01-12 13:30:48', 'admin', '2023-01-12 13:33:11');
+INSERT INTO `gen_table_column` VALUES (1613408128693436422, 1613408128559218689, 'update_by', '', 'varchar(10)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 9, 'admin', '2023-01-12 13:30:48', 'admin', '2023-01-12 13:33:11');
+INSERT INTO `gen_table_column` VALUES (1613814814495215618, 1613814814495215617, 'id', '说说id', 'int(11)', 'Long', 'id', '1', '1', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-01-13 16:26:50', 'admin', '2023-01-13 16:42:08');
+INSERT INTO `gen_table_column` VALUES (1613814814495215619, 1613814814495215617, 'user_id', '用户id', 'int(11)', 'Long', 'userId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 2, 'admin', '2023-01-13 16:26:50', 'admin', '2023-01-13 16:42:08');
+INSERT INTO `gen_table_column` VALUES (1613814814495215620, 1613814814495215617, 'content', '说说内容', 'varchar(2000)', 'String', 'content', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'editor', '', 3, 'admin', '2023-01-13 16:26:50', 'admin', '2023-01-13 16:42:08');
+INSERT INTO `gen_table_column` VALUES (1613814814495215621, 1613814814495215617, 'images', '图片', 'varchar(2500)', 'String', 'images', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'imageUpload', '', 4, 'admin', '2023-01-13 16:26:50', 'admin', '2023-01-13 16:42:08');
+INSERT INTO `gen_table_column` VALUES (1613814814495215622, 1613814814495215617, 'is_top', '是否置顶', 'tinyint(1)', 'Integer', 'isTop', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', 'sys_yes_no', 5, 'admin', '2023-01-13 16:26:50', 'admin', '2023-01-13 16:42:08');
+INSERT INTO `gen_table_column` VALUES (1613814814562324482, 1613814814495215617, 'create_time', '创建时间', 'datetime', 'Date', 'createTime', '0', '0', '1', NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 6, 'admin', '2023-01-13 16:26:50', 'admin', '2023-01-13 16:42:08');
+INSERT INTO `gen_table_column` VALUES (1613814814562324483, 1613814814495215617, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 7, 'admin', '2023-01-13 16:26:50', 'admin', '2023-01-13 16:42:08');
+INSERT INTO `gen_table_column` VALUES (1613814814562324484, 1613814814495215617, 'create_by', '', 'varchar(10)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 8, 'admin', '2023-01-13 16:26:50', 'admin', '2023-01-13 16:42:08');
+INSERT INTO `gen_table_column` VALUES (1613814814562324485, 1613814814495215617, 'update_by', '', 'varchar(10)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 9, 'admin', '2023-01-13 16:26:50', 'admin', '2023-01-13 16:42:08');
+INSERT INTO `gen_table_column` VALUES (1627638276653355010, 1627638276586246146, 'id', '主键', 'int(11)', 'Long', 'id', '1', '1', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627638276653355011, 1627638276586246146, 'album_name', '相册名', 'varchar(20)', 'String', 'albumName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627638276653355012, 1627638276586246146, 'album_desc', '相册描述', 'varchar(50)', 'String', 'albumDesc', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 3, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627638276653355013, 1627638276586246146, 'album_cover', '相册封面', 'varchar(255)', 'String', 'albumCover', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'imageUpload', '', 4, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627638276653355014, 1627638276586246146, 'is_delete', '是否删除', 'tinyint(1)', 'Integer', 'isDelete', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', 'sys_yes_no', 5, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627638276653355015, 1627638276586246146, 'status', '状态值 1公开 2私密', 'tinyint(1)', 'Integer', 'status', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'radio', '', 6, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627638276653355016, 1627638276586246146, 'create_time', '创建时间', 'datetime', 'Date', 'createTime', '0', '0', '1', NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 7, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627638276712075265, 1627638276586246146, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 8, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627638276712075266, 1627638276586246146, 'create_by', '', 'varchar(10)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 9, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627638276712075267, 1627638276586246146, 'update_by', '', 'varchar(10)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 10, 'admin', '2023-02-20 19:56:20', 'admin', '2023-02-20 20:15:28');
+INSERT INTO `gen_table_column` VALUES (1627992802002497537, 1627992801939582977, 'id', '主键', 'int(11)', 'Long', 'id', '1', '1', '1', NULL, '1', '1', NULL, 'EQ', 'input', '', 1, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+INSERT INTO `gen_table_column` VALUES (1627992802002497538, 1627992801939582977, 'album_id', '相册id', 'int(11)', 'Long', 'albumId', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 2, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+INSERT INTO `gen_table_column` VALUES (1627992802002497539, 1627992801939582977, 'photo_name', '照片名', 'varchar(20)', 'String', 'photoName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 3, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+INSERT INTO `gen_table_column` VALUES (1627992802002497540, 1627992801939582977, 'photo_desc', '照片描述', 'varchar(50)', 'String', 'photoDesc', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 4, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+INSERT INTO `gen_table_column` VALUES (1627992802002497541, 1627992801939582977, 'photo_src', '照片地址', 'varchar(255)', 'String', 'photoSrc', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+INSERT INTO `gen_table_column` VALUES (1627992802002497542, 1627992801939582977, 'is_delete', '是否删除', 'tinyint(1)', 'Integer', 'isDelete', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+INSERT INTO `gen_table_column` VALUES (1627992802002497543, 1627992801939582977, 'create_time', '创建时间', 'datetime', 'Date', 'createTime', '0', '0', '1', NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 7, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+INSERT INTO `gen_table_column` VALUES (1627992802002497544, 1627992801939582977, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 8, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+INSERT INTO `gen_table_column` VALUES (1627992802065412097, 1627992801939582977, 'create_by', '', 'varchar(10)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 9, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+INSERT INTO `gen_table_column` VALUES (1627992802065412098, 1627992801939582977, 'update_by', '', 'varchar(10)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 10, 'admin', '2023-02-21 19:25:05', 'admin', '2023-02-21 19:46:30');
+
+-- ----------------------------
+-- Table structure for sys_config
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_config`;
+CREATE TABLE `sys_config` (
+ `config_id` bigint(20) NOT NULL COMMENT '参数主键',
+ `config_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数名称',
+ `config_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数键名',
+ `config_value` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数键值',
+ `config_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`config_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 (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2023-01-05 19:54:19', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow');
+INSERT INTO `sys_config` VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2023-01-05 19:54:19', '', NULL, '初始化密码 123456');
+INSERT INTO `sys_config` VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2023-01-05 19:54:19', '', NULL, '深色主题theme-dark,浅色主题theme-light');
+INSERT INTO `sys_config` VALUES (4, '账号自助-验证码开关', 'sys.account.captchaEnabled', 'true', 'Y', 'admin', '2023-01-05 19:54:19', '', NULL, '是否开启验证码功能(true开启,false关闭)');
+INSERT INTO `sys_config` VALUES (5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', '2023-01-05 19:54:19', '', NULL, '是否开启注册用户功能(true开启,false关闭)');
+INSERT INTO `sys_config` VALUES (11, 'OSS预览列表资源开关', 'sys.oss.previewListResource', 'true', 'Y', 'admin', '2023-01-05 19:54:19', '', NULL, 'true:开启, false:关闭');
+
+-- ----------------------------
+-- Table structure for sys_dept
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dept`;
+CREATE TABLE `sys_dept` (
+ `dept_id` bigint(20) NOT NULL COMMENT '部门id',
+ `parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父部门id',
+ `ancestors` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '祖级列表',
+ `dept_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '部门名称',
+ `order_num` int(4) NULL DEFAULT 0 COMMENT '显示顺序',
+ `leader` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '负责人',
+ `phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系电话',
+ `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '部门状态(0正常 1停用)',
+ `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ PRIMARY KEY (`dept_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_dept
+-- ----------------------------
+INSERT INTO `sys_dept` VALUES (100, 0, '0', 'water-之', 0, 'ftz', '15888888888', 'ftz@qq.com', '0', '0', 'admin', '2023-01-05 19:54:19', 'admin', '2023-01-15 14:24:42');
+INSERT INTO `sys_dept` VALUES (101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '2', 'admin', '2023-01-05 19:54:19', '', NULL);
+INSERT INTO `sys_dept` VALUES (103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '2', 'admin', '2023-01-05 19:54:19', '', NULL);
+INSERT INTO `sys_dept` VALUES (104, 100, '0,100', '芝士团', 1, 'ftz', '18888888888', '2831826106@qq.com', '0', '0', 'admin', '2023-01-15 14:25:36', 'admin', '2023-01-15 14:25:36');
+
+-- ----------------------------
+-- Table structure for sys_dict_data
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dict_data`;
+CREATE TABLE `sys_dict_data` (
+ `dict_code` bigint(20) NOT NULL COMMENT '字典编码',
+ `dict_sort` int(4) NULL DEFAULT 0 COMMENT '字典排序',
+ `dict_label` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典标签',
+ `dict_value` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典键值',
+ `dict_type` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典类型',
+ `css_class` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)',
+ `list_class` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '表格回显样式',
+ `is_default` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`dict_code`) 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 (1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '性别男');
+INSERT INTO `sys_dict_data` VALUES (2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '性别女');
+INSERT INTO `sys_dict_data` VALUES (3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '性别未知');
+INSERT INTO `sys_dict_data` VALUES (4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '显示菜单');
+INSERT INTO `sys_dict_data` VALUES (5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '隐藏菜单');
+INSERT INTO `sys_dict_data` VALUES (6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '正常状态');
+INSERT INTO `sys_dict_data` VALUES (7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '停用状态');
+INSERT INTO `sys_dict_data` VALUES (12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '系统默认是');
+INSERT INTO `sys_dict_data` VALUES (13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '系统默认否');
+INSERT INTO `sys_dict_data` VALUES (14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '通知');
+INSERT INTO `sys_dict_data` VALUES (15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '公告');
+INSERT INTO `sys_dict_data` VALUES (16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '正常状态');
+INSERT INTO `sys_dict_data` VALUES (17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '关闭状态');
+INSERT INTO `sys_dict_data` VALUES (18, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '新增操作');
+INSERT INTO `sys_dict_data` VALUES (19, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '修改操作');
+INSERT INTO `sys_dict_data` VALUES (20, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '删除操作');
+INSERT INTO `sys_dict_data` VALUES (21, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '授权操作');
+INSERT INTO `sys_dict_data` VALUES (22, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '导出操作');
+INSERT INTO `sys_dict_data` VALUES (23, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '导入操作');
+INSERT INTO `sys_dict_data` VALUES (24, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '强退操作');
+INSERT INTO `sys_dict_data` VALUES (25, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '生成操作');
+INSERT INTO `sys_dict_data` VALUES (26, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '清空操作');
+INSERT INTO `sys_dict_data` VALUES (27, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '正常状态');
+INSERT INTO `sys_dict_data` VALUES (28, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '停用状态');
+INSERT INTO `sys_dict_data` VALUES (29, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '其他操作');
+INSERT INTO `sys_dict_data` VALUES (30, 1, '原创', '1', 'article_type', NULL, 'success', 'N', '0', 'admin', '2023-01-06 19:52:34', 'admin', '2023-01-06 20:41:07', '原创');
+INSERT INTO `sys_dict_data` VALUES (31, 2, '转载', '2', 'article_type', NULL, 'danger', 'N', '0', 'admin', '2023-01-06 19:52:56', 'admin', '2023-01-06 20:41:29', NULL);
+INSERT INTO `sys_dict_data` VALUES (32, 3, '翻译', '3', 'article_type', NULL, 'warning', 'N', '0', 'admin', '2023-01-06 19:53:06', 'admin', '2023-01-06 20:41:23', NULL);
+INSERT INTO `sys_dict_data` VALUES (33, 0, '公开', '1', 'article_status', NULL, 'success', 'N', '0', 'admin', '2023-01-06 20:38:58', 'admin', '2023-01-07 12:48:05', NULL);
+INSERT INTO `sys_dict_data` VALUES (34, 0, '私密', '2', 'article_status', NULL, 'warning', 'N', '0', 'admin', '2023-01-06 20:39:07', 'admin', '2023-01-07 12:48:14', NULL);
+INSERT INTO `sys_dict_data` VALUES (35, 0, '评论可见', '3', 'article_status', NULL, 'primary', 'N', '0', 'admin', '2023-01-06 20:39:20', 'admin', '2023-01-07 12:48:20', NULL);
+INSERT INTO `sys_dict_data` VALUES (36, 0, '文章', '1', 'commen_type', NULL, 'primary', 'N', '0', 'admin', '2023-01-10 21:27:14', 'admin', '2023-01-10 21:27:14', '文章');
+INSERT INTO `sys_dict_data` VALUES (37, 0, '友链', '2', 'commen_type', NULL, 'success', 'N', '0', 'admin', '2023-01-10 21:27:39', 'admin', '2023-01-10 21:28:18', '友链');
+INSERT INTO `sys_dict_data` VALUES (38, 0, '说说', '3', 'commen_type', NULL, 'warning', 'N', '0', 'admin', '2023-01-10 21:28:07', 'admin', '2023-01-10 21:28:07', '说说');
+INSERT INTO `sys_dict_data` VALUES (39, 0, '审核通过', '1', 'comment_status', NULL, 'success', 'N', '0', 'admin', '2023-01-10 21:51:23', 'admin', '2023-01-10 21:51:23', '审核通过');
+INSERT INTO `sys_dict_data` VALUES (40, 0, '审核中', '2', 'comment_status', NULL, 'primary', 'N', '0', 'admin', '2023-01-10 21:51:51', 'admin', '2023-01-10 21:51:51', '审核中');
+INSERT INTO `sys_dict_data` VALUES (41, 0, '未通过审核', '3', 'comment_status', NULL, 'danger', 'N', '0', 'admin', '2023-01-10 21:52:12', 'admin', '2023-01-10 21:52:12', '审核不通过');
+
+-- ----------------------------
+-- Table structure for sys_dict_type
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dict_type`;
+CREATE TABLE `sys_dict_type` (
+ `dict_id` bigint(20) NOT NULL COMMENT '字典主键',
+ `dict_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典名称',
+ `dict_type` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典类型',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`dict_id`) USING BTREE,
+ UNIQUE INDEX `dict_type`(`dict_type` ASC) 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 (1, '用户性别', 'sys_user_sex', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '用户性别列表');
+INSERT INTO `sys_dict_type` VALUES (2, '菜单状态', 'sys_show_hide', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '菜单状态列表');
+INSERT INTO `sys_dict_type` VALUES (3, '系统开关', 'sys_normal_disable', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '系统开关列表');
+INSERT INTO `sys_dict_type` VALUES (6, '系统是否', 'sys_yes_no', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '系统是否列表');
+INSERT INTO `sys_dict_type` VALUES (7, '通知类型', 'sys_notice_type', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '通知类型列表');
+INSERT INTO `sys_dict_type` VALUES (8, '通知状态', 'sys_notice_status', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '通知状态列表');
+INSERT INTO `sys_dict_type` VALUES (9, '操作类型', 'sys_oper_type', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '操作类型列表');
+INSERT INTO `sys_dict_type` VALUES (10, '系统状态', 'sys_common_status', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '登录状态列表');
+INSERT INTO `sys_dict_type` VALUES (11, '文章类型', 'article_type', '0', 'admin', '2023-01-06 19:51:08', 'admin', '2023-01-06 19:51:08', '文章类型');
+INSERT INTO `sys_dict_type` VALUES (12, '文章状态', 'article_status', '0', 'admin', '2023-01-06 20:37:58', 'admin', '2023-01-06 20:37:58', '文章状态');
+INSERT INTO `sys_dict_type` VALUES (13, '评论类型', 'commen_type', '0', 'admin', '2023-01-10 21:26:09', 'admin', '2023-01-10 21:49:47', '评论类型');
+INSERT INTO `sys_dict_type` VALUES (14, '评论状态', 'comment_status', '0', 'admin', '2023-01-10 21:49:32', 'admin', '2023-01-10 21:50:32', '评论状态');
+
+-- ----------------------------
+-- Table structure for sys_logininfor
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_logininfor`;
+CREATE TABLE `sys_logininfor` (
+ `info_id` bigint(20) NOT NULL COMMENT '访问ID',
+ `user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '用户账号',
+ `ipaddr` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '登录IP地址',
+ `login_location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '登录地点',
+ `browser` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '浏览器类型',
+ `os` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '操作系统',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '登录状态(0成功 1失败)',
+ `msg` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '提示消息',
+ `login_time` datetime NULL DEFAULT NULL COMMENT '访问时间',
+ PRIMARY KEY (`info_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统访问记录' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_logininfor
+-- ----------------------------
+INSERT INTO `sys_logininfor` VALUES (1611299423906770946, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-06 17:51:34');
+INSERT INTO `sys_logininfor` VALUES (1611317393630523393, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-06 19:02:58');
+INSERT INTO `sys_logininfor` VALUES (1611328359785132033, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-06 19:46:33');
+INSERT INTO `sys_logininfor` VALUES (1611339128903925761, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-06 20:29:20');
+INSERT INTO `sys_logininfor` VALUES (1611574895685263361, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-07 12:06:11');
+INSERT INTO `sys_logininfor` VALUES (1611579610619805697, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码错误', '2023-01-07 12:24:56');
+INSERT INTO `sys_logininfor` VALUES (1611579626721738753, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-07 12:24:59');
+INSERT INTO `sys_logininfor` VALUES (1611601032943599618, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-07 13:50:03');
+INSERT INTO `sys_logininfor` VALUES (1611619601005674498, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-07 15:03:50');
+INSERT INTO `sys_logininfor` VALUES (1611623469097680898, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-01-07 15:19:12');
+INSERT INTO `sys_logininfor` VALUES (1611623483651915777, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-07 15:19:16');
+INSERT INTO `sys_logininfor` VALUES (1611636338011000834, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-07 16:10:20');
+INSERT INTO `sys_logininfor` VALUES (1611728373501931521, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-07 22:16:03');
+INSERT INTO `sys_logininfor` VALUES (1611933231484059649, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-08 11:50:05');
+INSERT INTO `sys_logininfor` VALUES (1611951754201546753, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-08 13:03:41');
+INSERT INTO `sys_logininfor` VALUES (1612006137933094914, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-08 16:39:48');
+INSERT INTO `sys_logininfor` VALUES (1612095882617004033, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-08 22:36:24');
+INSERT INTO `sys_logininfor` VALUES (1612283570628403201, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-09 11:02:13');
+INSERT INTO `sys_logininfor` VALUES (1612362677043085313, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-09 16:16:33');
+INSERT INTO `sys_logininfor` VALUES (1612415216702783490, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-09 19:45:20');
+INSERT INTO `sys_logininfor` VALUES (1612430246575947777, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-09 20:45:03');
+INSERT INTO `sys_logininfor` VALUES (1612462839132344321, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-09 22:54:34');
+INSERT INTO `sys_logininfor` VALUES (1612672676365664257, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-10 12:48:23');
+INSERT INTO `sys_logininfor` VALUES (1612685743216459778, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-10 13:40:18');
+INSERT INTO `sys_logininfor` VALUES (1612780928030076929, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-10 19:58:32');
+INSERT INTO `sys_logininfor` VALUES (1612796731911696385, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-10 21:01:20');
+INSERT INTO `sys_logininfor` VALUES (1613014077653680130, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-11 11:24:59');
+INSERT INTO `sys_logininfor` VALUES (1613030283009884161, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码错误', '2023-01-11 12:29:23');
+INSERT INTO `sys_logininfor` VALUES (1613030297329238018, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-11 12:29:26');
+INSERT INTO `sys_logininfor` VALUES (1613095742270918657, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码错误', '2023-01-11 16:49:29');
+INSERT INTO `sys_logininfor` VALUES (1613095755755606018, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-11 16:49:33');
+INSERT INTO `sys_logininfor` VALUES (1613133193999892481, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-11 19:18:19');
+INSERT INTO `sys_logininfor` VALUES (1613147414158434305, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-11 20:14:49');
+INSERT INTO `sys_logininfor` VALUES (1613156243768139778, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-11 20:49:54');
+INSERT INTO `sys_logininfor` VALUES (1613391154018045953, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码错误', '2023-01-12 12:23:21');
+INSERT INTO `sys_logininfor` VALUES (1613391166097641474, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-12 12:23:24');
+INSERT INTO `sys_logininfor` VALUES (1613399225163399170, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-12 12:55:25');
+INSERT INTO `sys_logininfor` VALUES (1613462999048196097, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-12 17:08:50');
+INSERT INTO `sys_logininfor` VALUES (1613795829213093890, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-13 15:11:23');
+INSERT INTO `sys_logininfor` VALUES (1613804936070488066, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-13 15:47:34');
+INSERT INTO `sys_logininfor` VALUES (1613813479037210626, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-13 16:21:31');
+INSERT INTO `sys_logininfor` VALUES (1613818016481468418, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-13 16:39:33');
+INSERT INTO `sys_logininfor` VALUES (1613860597596745730, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-13 19:28:45');
+INSERT INTO `sys_logininfor` VALUES (1613864271295344641, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-13 19:43:21');
+INSERT INTO `sys_logininfor` VALUES (1613864477042733058, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-13 19:44:10');
+INSERT INTO `sys_logininfor` VALUES (1613875842738311169, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-13 20:29:20');
+INSERT INTO `sys_logininfor` VALUES (1614110239337017345, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-14 12:00:44');
+INSERT INTO `sys_logininfor` VALUES (1614201878906683394, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-14 18:04:53');
+INSERT INTO `sys_logininfor` VALUES (1614223041905147905, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-14 19:28:59');
+INSERT INTO `sys_logininfor` VALUES (1614224418916122625, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-01-14 19:34:27');
+INSERT INTO `sys_logininfor` VALUES (1614224504811274241, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-14 19:34:47');
+INSERT INTO `sys_logininfor` VALUES (1614250835003334657, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-14 21:19:25');
+INSERT INTO `sys_logininfor` VALUES (1614269344081006593, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-14 22:32:58');
+INSERT INTO `sys_logininfor` VALUES (1614476058919243778, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 12:14:23');
+INSERT INTO `sys_logininfor` VALUES (1614508501265047553, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 14:23:17');
+INSERT INTO `sys_logininfor` VALUES (1614548379788914689, '老妈', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '注册成功', '2023-01-15 17:01:45');
+INSERT INTO `sys_logininfor` VALUES (1614548939325845506, '老爸', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '注册成功', '2023-01-15 17:03:59');
+INSERT INTO `sys_logininfor` VALUES (1614549974173888513, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 17:08:05');
+INSERT INTO `sys_logininfor` VALUES (1614563330284957697, '老爸', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 18:01:10');
+INSERT INTO `sys_logininfor` VALUES (1614568261498822658, '老爸', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 18:20:45');
+INSERT INTO `sys_logininfor` VALUES (1614570378099720194, '老爸', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 18:29:10');
+INSERT INTO `sys_logininfor` VALUES (1614571208295088130, '老爸', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 18:32:28');
+INSERT INTO `sys_logininfor` VALUES (1614580558325612546, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 19:09:37');
+INSERT INTO `sys_logininfor` VALUES (1614589224999297025, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 19:44:04');
+INSERT INTO `sys_logininfor` VALUES (1614592580480245761, '老爸', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 19:57:24');
+INSERT INTO `sys_logininfor` VALUES (1614592876329672706, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 19:58:34');
+INSERT INTO `sys_logininfor` VALUES (1614624165925490689, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-15 22:02:54');
+INSERT INTO `sys_logininfor` VALUES (1614869344561524738, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-16 14:17:09');
+INSERT INTO `sys_logininfor` VALUES (1614884718728212482, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-16 15:18:15');
+INSERT INTO `sys_logininfor` VALUES (1614985346641092610, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-16 21:58:06');
+INSERT INTO `sys_logininfor` VALUES (1614986721873682434, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码已失效', '2023-01-16 22:03:34');
+INSERT INTO `sys_logininfor` VALUES (1614986738340519938, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-16 22:03:38');
+INSERT INTO `sys_logininfor` VALUES (1614991232491118594, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-16 22:21:30');
+INSERT INTO `sys_logininfor` VALUES (1615200333963812866, '月色', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 12:12:23');
+INSERT INTO `sys_logininfor` VALUES (1615200756154064898, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 12:14:04');
+INSERT INTO `sys_logininfor` VALUES (1615202532001406978, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-01-17 12:21:07');
+INSERT INTO `sys_logininfor` VALUES (1615202599118659585, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 12:21:23');
+INSERT INTO `sys_logininfor` VALUES (1615222513904668673, '测试', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '注册成功', '2023-01-17 13:40:31');
+INSERT INTO `sys_logininfor` VALUES (1615222514512842754, '测试', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 13:40:32');
+INSERT INTO `sys_logininfor` VALUES (1615223161412931586, '最后的测试', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '注册成功', '2023-01-17 13:43:06');
+INSERT INTO `sys_logininfor` VALUES (1615223162398593026, '最后的测试', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 13:43:06');
+INSERT INTO `sys_logininfor` VALUES (1615224211964448769, 'lasttest', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '注册成功', '2023-01-17 13:47:16');
+INSERT INTO `sys_logininfor` VALUES (1615224213013024770, 'lasttest', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 13:47:16');
+INSERT INTO `sys_logininfor` VALUES (1615233660485709826, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 14:24:49');
+INSERT INTO `sys_logininfor` VALUES (1615238968490668033, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码已失效', '2023-01-17 14:45:54');
+INSERT INTO `sys_logininfor` VALUES (1615238979475550209, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 14:45:57');
+INSERT INTO `sys_logininfor` VALUES (1615253597279301634, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 15:44:02');
+INSERT INTO `sys_logininfor` VALUES (1615316735194411009, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-17 19:54:55');
+INSERT INTO `sys_logininfor` VALUES (1615639724200947713, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-18 17:18:22');
+INSERT INTO `sys_logininfor` VALUES (1615662360482045953, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-18 18:48:19');
+INSERT INTO `sys_logininfor` VALUES (1616078016146841602, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-19 22:19:59');
+INSERT INTO `sys_logininfor` VALUES (1616078308485636098, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-19 22:21:09');
+INSERT INTO `sys_logininfor` VALUES (1616078751743877121, 'lionli', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '密码输入错误1次', '2023-01-19 22:22:54');
+INSERT INTO `sys_logininfor` VALUES (1616078823239983106, '月色', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-19 22:23:11');
+INSERT INTO `sys_logininfor` VALUES (1616083640775622658, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-19 22:42:20');
+INSERT INTO `sys_logininfor` VALUES (1616084083316637697, '荷塘', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-19 22:44:06');
+INSERT INTO `sys_logininfor` VALUES (1616086965671706625, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-19 22:55:33');
+INSERT INTO `sys_logininfor` VALUES (1616088161279025154, '荷塘', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-19 23:00:18');
+INSERT INTO `sys_logininfor` VALUES (1616333993886642178, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-20 15:17:09');
+INSERT INTO `sys_logininfor` VALUES (1616395179604951041, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-20 19:20:17');
+INSERT INTO `sys_logininfor` VALUES (1616658509972148225, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '注册成功', '2023-01-21 12:46:39');
+INSERT INTO `sys_logininfor` VALUES (1616679603575754753, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '注册成功', '2023-01-21 14:10:29');
+INSERT INTO `sys_logininfor` VALUES (1616723839713071105, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 17:06:15');
+INSERT INTO `sys_logininfor` VALUES (1616725058108051458, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 17:11:06');
+INSERT INTO `sys_logininfor` VALUES (1616725157995401217, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 17:11:30');
+INSERT INTO `sys_logininfor` VALUES (1616725195320512513, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 17:11:39');
+INSERT INTO `sys_logininfor` VALUES (1616733778187702274, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 17:45:45');
+INSERT INTO `sys_logininfor` VALUES (1616733953455083521, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 17:46:27');
+INSERT INTO `sys_logininfor` VALUES (1616769216684277761, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:06:34');
+INSERT INTO `sys_logininfor` VALUES (1616769434628653057, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:07:26');
+INSERT INTO `sys_logininfor` VALUES (1616771721048621057, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:16:31');
+INSERT INTO `sys_logininfor` VALUES (1616771809485520897, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:16:52');
+INSERT INTO `sys_logininfor` VALUES (1616776382002511873, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:35:02');
+INSERT INTO `sys_logininfor` VALUES (1616776670746787841, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:36:11');
+INSERT INTO `sys_logininfor` VALUES (1616776771514941442, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:36:35');
+INSERT INTO `sys_logininfor` VALUES (1616777255063666689, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:38:31');
+INSERT INTO `sys_logininfor` VALUES (1616778667101274113, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:44:07');
+INSERT INTO `sys_logininfor` VALUES (1616778861930889217, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:44:54');
+INSERT INTO `sys_logininfor` VALUES (1616779057741971458, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 20:45:40');
+INSERT INTO `sys_logininfor` VALUES (1616783385886248962, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 21:02:52');
+INSERT INTO `sys_logininfor` VALUES (1616783822785925122, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 21:04:36');
+INSERT INTO `sys_logininfor` VALUES (1616784667363508226, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 21:07:58');
+INSERT INTO `sys_logininfor` VALUES (1616785814900043778, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 21:12:31');
+INSERT INTO `sys_logininfor` VALUES (1616786974746730498, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 21:17:08');
+INSERT INTO `sys_logininfor` VALUES (1616792935393779714, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 21:40:49');
+INSERT INTO `sys_logininfor` VALUES (1616793139652190209, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 21:41:38');
+INSERT INTO `sys_logininfor` VALUES (1616793834828599298, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 21:44:23');
+INSERT INTO `sys_logininfor` VALUES (1616798445601857538, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 22:02:43');
+INSERT INTO `sys_logininfor` VALUES (1616799944461557762, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 22:08:40');
+INSERT INTO `sys_logininfor` VALUES (1616801436639731714, 'kalashok-pan', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-21 22:14:36');
+INSERT INTO `sys_logininfor` VALUES (1617119682727247873, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-22 19:19:12');
+INSERT INTO `sys_logininfor` VALUES (1617452290749239298, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码错误', '2023-01-23 17:20:52');
+INSERT INTO `sys_logininfor` VALUES (1617452302237437953, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-23 17:20:54');
+INSERT INTO `sys_logininfor` VALUES (1617459160608153601, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-23 17:48:09');
+INSERT INTO `sys_logininfor` VALUES (1617476014672207874, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-23 18:55:08');
+INSERT INTO `sys_logininfor` VALUES (1617487785894211586, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-23 19:41:54');
+INSERT INTO `sys_logininfor` VALUES (1617870159047876610, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-24 21:01:19');
+INSERT INTO `sys_logininfor` VALUES (1617870188672245762, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-01-24 21:01:26');
+INSERT INTO `sys_logininfor` VALUES (1617870460630917121, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-24 21:02:31');
+INSERT INTO `sys_logininfor` VALUES (1617870481854095362, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-01-24 21:02:36');
+INSERT INTO `sys_logininfor` VALUES (1617870997199839233, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-24 21:04:39');
+INSERT INTO `sys_logininfor` VALUES (1617871024760610817, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-01-24 21:04:46');
+INSERT INTO `sys_logininfor` VALUES (1617874743417954306, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-01-24 21:19:32');
+INSERT INTO `sys_logininfor` VALUES (1617874884514340866, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-01-24 21:20:06');
+INSERT INTO `sys_logininfor` VALUES (1623326785519239170, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-08 22:24:00');
+INSERT INTO `sys_logininfor` VALUES (1623655905256034305, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-09 20:11:49');
+INSERT INTO `sys_logininfor` VALUES (1623656059384123394, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-09 20:12:25');
+INSERT INTO `sys_logininfor` VALUES (1624273563961913345, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 13:06:10');
+INSERT INTO `sys_logininfor` VALUES (1624274911478542337, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 13:11:31');
+INSERT INTO `sys_logininfor` VALUES (1624274948270977025, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 13:11:40');
+INSERT INTO `sys_logininfor` VALUES (1624279140691734530, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 13:28:19');
+INSERT INTO `sys_logininfor` VALUES (1624279192483000322, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 13:28:32');
+INSERT INTO `sys_logininfor` VALUES (1624281102959112194, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 13:36:07');
+INSERT INTO `sys_logininfor` VALUES (1624281141714481153, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 13:36:17');
+INSERT INTO `sys_logininfor` VALUES (1624290186202460162, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 14:12:13');
+INSERT INTO `sys_logininfor` VALUES (1624290224651644930, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 14:12:22');
+INSERT INTO `sys_logininfor` VALUES (1624292971576832001, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 14:23:17');
+INSERT INTO `sys_logininfor` VALUES (1624293013855416322, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 14:23:27');
+INSERT INTO `sys_logininfor` VALUES (1624299839888044034, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 14:50:35');
+INSERT INTO `sys_logininfor` VALUES (1624299875548016641, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 14:50:43');
+INSERT INTO `sys_logininfor` VALUES (1624300337852592130, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 14:52:33');
+INSERT INTO `sys_logininfor` VALUES (1624300397092941825, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 14:52:47');
+INSERT INTO `sys_logininfor` VALUES (1624307788572286978, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 15:22:10');
+INSERT INTO `sys_logininfor` VALUES (1624307823510839298, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '密码输入错误1次', '2023-02-11 15:22:18');
+INSERT INTO `sys_logininfor` VALUES (1624307855169445890, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 15:22:26');
+INSERT INTO `sys_logininfor` VALUES (1624311473729716225, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 15:36:48');
+INSERT INTO `sys_logininfor` VALUES (1624311507552583682, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 15:36:56');
+INSERT INTO `sys_logininfor` VALUES (1624312003495477250, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 15:38:55');
+INSERT INTO `sys_logininfor` VALUES (1624312062467391490, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 15:39:09');
+INSERT INTO `sys_logininfor` VALUES (1624316607964659714, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 15:57:12');
+INSERT INTO `sys_logininfor` VALUES (1624317686106300417, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 16:01:29');
+INSERT INTO `sys_logininfor` VALUES (1624317735733305345, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 16:01:41');
+INSERT INTO `sys_logininfor` VALUES (1624321148902805505, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-11 16:15:15');
+INSERT INTO `sys_logininfor` VALUES (1624321185028345857, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-11 16:15:24');
+INSERT INTO `sys_logininfor` VALUES (1624626861617258497, '测试666', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '注册成功', '2023-02-12 12:30:03');
+INSERT INTO `sys_logininfor` VALUES (1624626862540005377, '测试666', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-12 12:30:03');
+INSERT INTO `sys_logininfor` VALUES (1624627471531974658, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-12 12:32:28');
+INSERT INTO `sys_logininfor` VALUES (1625478260932476929, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-14 20:53:12');
+INSERT INTO `sys_logininfor` VALUES (1625487104853147650, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-14 21:28:21');
+INSERT INTO `sys_logininfor` VALUES (1625778036974571522, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-15 16:44:24');
+INSERT INTO `sys_logininfor` VALUES (1625787163205455874, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-15 17:20:40');
+INSERT INTO `sys_logininfor` VALUES (1625844261406744577, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-15 21:07:33');
+INSERT INTO `sys_logininfor` VALUES (1625845496801251330, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-15 21:12:28');
+INSERT INTO `sys_logininfor` VALUES (1625846201507237890, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-15 21:15:16');
+INSERT INTO `sys_logininfor` VALUES (1625846241772556289, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-15 21:15:25');
+INSERT INTO `sys_logininfor` VALUES (1625847087126138881, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-15 21:18:47');
+INSERT INTO `sys_logininfor` VALUES (1625847130541379586, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-15 21:18:57');
+INSERT INTO `sys_logininfor` VALUES (1626082520447610882, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-16 12:54:19');
+INSERT INTO `sys_logininfor` VALUES (1626093204354916353, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-16 13:36:46');
+INSERT INTO `sys_logininfor` VALUES (1626500769895186433, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-17 16:36:17');
+INSERT INTO `sys_logininfor` VALUES (1627233076977430530, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-19 17:06:13');
+INSERT INTO `sys_logininfor` VALUES (1627236400111906818, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-19 17:19:25');
+INSERT INTO `sys_logininfor` VALUES (1627286783274323969, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码错误', '2023-02-19 20:39:37');
+INSERT INTO `sys_logininfor` VALUES (1627286799334313986, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-19 20:39:41');
+INSERT INTO `sys_logininfor` VALUES (1627497155520401409, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-20 10:35:34');
+INSERT INTO `sys_logininfor` VALUES (1627529795665432577, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-20 12:45:16');
+INSERT INTO `sys_logininfor` VALUES (1627613052394311682, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-20 18:16:06');
+INSERT INTO `sys_logininfor` VALUES (1627635820544430082, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-20 19:46:34');
+INSERT INTO `sys_logininfor` VALUES (1627640695986601986, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '1', '验证码错误', '2023-02-20 20:05:57');
+INSERT INTO `sys_logininfor` VALUES (1627640707097313282, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-20 20:05:59');
+INSERT INTO `sys_logininfor` VALUES (1627852916217999361, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-21 10:09:14');
+INSERT INTO `sys_logininfor` VALUES (1627991363066818561, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-21 19:19:22');
+INSERT INTO `sys_logininfor` VALUES (1627995735364497410, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-21 19:36:45');
+INSERT INTO `sys_logininfor` VALUES (1628027130027794434, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-21 21:41:30');
+INSERT INTO `sys_logininfor` VALUES (1628215384534507522, 'admin', '4.2.2.2', 'XX XX', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-22 10:09:33');
+INSERT INTO `sys_logininfor` VALUES (1628251678241230849, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-22 12:33:46');
+INSERT INTO `sys_logininfor` VALUES (1628267482282201090, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-22 13:36:34');
+INSERT INTO `sys_logininfor` VALUES (1628324430931300354, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-22 17:22:52');
+INSERT INTO `sys_logininfor` VALUES (1628370965844987905, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-22 20:27:47');
+INSERT INTO `sys_logininfor` VALUES (1628380212242694145, 'test1', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-22 21:04:31');
+INSERT INTO `sys_logininfor` VALUES (1628380608164020226, 'test1', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-22 21:06:06');
+INSERT INTO `sys_logininfor` VALUES (1628380627105497089, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-22 21:06:10');
+INSERT INTO `sys_logininfor` VALUES (1628608838607351810, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 12:13:00');
+INSERT INTO `sys_logininfor` VALUES (1628622541339799554, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 13:07:27');
+INSERT INTO `sys_logininfor` VALUES (1628641061452693506, 'admin', '4.2.2.2', 'XX XX', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码已失效', '2023-02-23 14:21:02');
+INSERT INTO `sys_logininfor` VALUES (1628641080817795073, 'admin', '4.2.2.2', 'XX XX', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 14:21:07');
+INSERT INTO `sys_logininfor` VALUES (1628648705408110594, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-23 14:51:25');
+INSERT INTO `sys_logininfor` VALUES (1628648746008973313, 'test', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 14:51:35');
+INSERT INTO `sys_logininfor` VALUES (1628648839386763266, 'test', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-23 14:51:57');
+INSERT INTO `sys_logininfor` VALUES (1628648858944802817, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 14:52:01');
+INSERT INTO `sys_logininfor` VALUES (1628648998657069057, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-23 14:52:35');
+INSERT INTO `sys_logininfor` VALUES (1628649030479253506, 'test', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 14:52:42');
+INSERT INTO `sys_logininfor` VALUES (1628649172917817346, 'test', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-23 14:53:16');
+INSERT INTO `sys_logininfor` VALUES (1628649188986195970, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 14:53:20');
+INSERT INTO `sys_logininfor` VALUES (1628649648216346626, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-23 14:55:10');
+INSERT INTO `sys_logininfor` VALUES (1628649681875636226, 'test', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 14:55:18');
+INSERT INTO `sys_logininfor` VALUES (1628650094016335873, 'test', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-23 14:56:56');
+INSERT INTO `sys_logininfor` VALUES (1628650128174747649, 'test1', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 14:57:04');
+INSERT INTO `sys_logininfor` VALUES (1628651389901090818, 'test1', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-23 15:02:05');
+INSERT INTO `sys_logininfor` VALUES (1628651424604762114, 'test', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 15:02:13');
+INSERT INTO `sys_logininfor` VALUES (1628652200286855169, 'test', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-23 15:05:18');
+INSERT INTO `sys_logininfor` VALUES (1628652238660542466, 'test1', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 15:05:27');
+INSERT INTO `sys_logininfor` VALUES (1628656122997088257, 'test1', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-23 15:20:53');
+INSERT INTO `sys_logininfor` VALUES (1628656138100776962, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 15:20:57');
+INSERT INTO `sys_logininfor` VALUES (1628657546392870913, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 15:26:33');
+INSERT INTO `sys_logininfor` VALUES (1628668026226319362, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 16:08:11');
+INSERT INTO `sys_logininfor` VALUES (1628734404769722370, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-23 20:31:57');
+INSERT INTO `sys_logininfor` VALUES (1629470494346457090, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-25 21:16:55');
+INSERT INTO `sys_logininfor` VALUES (1629470667294388226, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-02-25 21:17:36');
+INSERT INTO `sys_logininfor` VALUES (1629470702673342466, 'test1', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-25 21:17:44');
+INSERT INTO `sys_logininfor` VALUES (1630181617853112321, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-27 20:22:40');
+INSERT INTO `sys_logininfor` VALUES (1630184528473595905, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-27 20:34:14');
+INSERT INTO `sys_logininfor` VALUES (1630188661712723970, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-27 20:50:39');
+INSERT INTO `sys_logininfor` VALUES (1630392843744854018, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-28 10:22:00');
+INSERT INTO `sys_logininfor` VALUES (1630393204249477121, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-28 10:23:26');
+INSERT INTO `sys_logininfor` VALUES (1630408383414779905, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-28 11:23:45');
+INSERT INTO `sys_logininfor` VALUES (1630510919807143938, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-28 18:11:11');
+INSERT INTO `sys_logininfor` VALUES (1630522549005713409, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-28 18:57:24');
+INSERT INTO `sys_logininfor` VALUES (1630539374959529986, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-28 20:04:16');
+INSERT INTO `sys_logininfor` VALUES (1630542760656281601, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-28 20:17:43');
+INSERT INTO `sys_logininfor` VALUES (1630572334056251393, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-02-28 22:15:14');
+INSERT INTO `sys_logininfor` VALUES (1630905035464417282, 'admin', '4.2.2.2', ' ', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-01 20:17:16');
+INSERT INTO `sys_logininfor` VALUES (1633693458906517505, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-09 12:57:28');
+INSERT INTO `sys_logininfor` VALUES (1633693502934126594, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-09 12:57:38');
+INSERT INTO `sys_logininfor` VALUES (1633727462414266369, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-09 15:12:35');
+INSERT INTO `sys_logininfor` VALUES (1633729052562993153, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-09 15:18:54');
+INSERT INTO `sys_logininfor` VALUES (1633736891427782658, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-09 15:50:03');
+INSERT INTO `sys_logininfor` VALUES (1633792347986735106, 'test1', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-09 19:30:25');
+INSERT INTO `sys_logininfor` VALUES (1633799616837259266, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-09 19:59:18');
+INSERT INTO `sys_logininfor` VALUES (1634120790859378690, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '验证码错误', '2023-03-10 17:15:32');
+INSERT INTO `sys_logininfor` VALUES (1634120804230819842, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-10 17:15:35');
+INSERT INTO `sys_logininfor` VALUES (1634126648821501954, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-10 17:38:48');
+INSERT INTO `sys_logininfor` VALUES (1634423882343559170, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-11 13:19:54');
+INSERT INTO `sys_logininfor` VALUES (1634425402141224962, 'test', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-11 13:25:57');
+INSERT INTO `sys_logininfor` VALUES (1634775531981496321, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-03-12 12:37:14');
+INSERT INTO `sys_logininfor` VALUES (1647072023224012801, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-04-15 10:59:06');
+INSERT INTO `sys_logininfor` VALUES (1647079066316050434, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-04-15 11:27:05');
+INSERT INTO `sys_logininfor` VALUES (1647486221905068034, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-04-16 14:24:59');
+INSERT INTO `sys_logininfor` VALUES (1647501372741947393, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2023-04-16 15:25:11');
+INSERT INTO `sys_logininfor` VALUES (1647501397098270722, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-04-16 15:25:17');
+INSERT INTO `sys_logininfor` VALUES (1647906314682142722, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-04-17 18:14:17');
+INSERT INTO `sys_logininfor` VALUES (1647906967932485634, 'test', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-04-17 18:16:52');
+INSERT INTO `sys_logininfor` VALUES (1647910507568451585, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-04-17 18:30:56');
+INSERT INTO `sys_logininfor` VALUES (1647910774464598017, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2023-04-17 18:32:00');
+
+-- ----------------------------
+-- Table structure for sys_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_menu`;
+CREATE TABLE `sys_menu` (
+ `menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
+ `menu_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '菜单名称',
+ `parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父菜单ID',
+ `order_num` int(4) NULL DEFAULT 0 COMMENT '显示顺序',
+ `path` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '路由地址',
+ `component` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组件路径',
+ `query_param` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '路由参数',
+ `is_frame` int(1) NULL DEFAULT 1 COMMENT '是否为外链(0是 1否)',
+ `is_cache` int(1) NULL DEFAULT 0 COMMENT '是否缓存(0缓存 1不缓存)',
+ `menu_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)',
+ `visible` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '显示状态(0显示 1隐藏)',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0正常 1停用)',
+ `perms` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限标识',
+ `icon` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '#' COMMENT '菜单图标',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '备注',
+ PRIMARY KEY (`menu_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 (1, '系统管理', 0, 5, 'system', NULL, '', 1, 0, 'M', '0', '0', '', 'system', 'admin', '2023-01-05 19:54:19', 'admin', '2023-02-14 22:03:37', '系统管理目录');
+INSERT INTO `sys_menu` VALUES (2, '系统监控', 0, 5, 'monitor', NULL, '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', '2023-01-05 19:54:19', 'admin', '2023-02-14 22:03:09', '系统监控目录');
+INSERT INTO `sys_menu` VALUES (3, '系统工具', 0, 6, 'tool', NULL, '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', '2023-01-05 19:54:19', 'admin', '2023-01-11 13:28:57', '系统工具目录');
+INSERT INTO `sys_menu` VALUES (5, '测试菜单', 0, 7, 'demo', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'star', 'admin', '2023-01-05 19:54:34', 'admin', '2023-01-11 13:29:03', '');
+INSERT INTO `sys_menu` VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'admin', '2023-01-05 19:54:19', '', NULL, '用户管理菜单');
+INSERT INTO `sys_menu` VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'admin', '2023-01-05 19:54:19', '', NULL, '角色管理菜单');
+INSERT INTO `sys_menu` VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', '2023-01-05 19:54:19', '', NULL, '菜单管理菜单');
+INSERT INTO `sys_menu` VALUES (103, '部门管理', 1, 4, 'dept', 'system/dept/index', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', '2023-01-05 19:54:19', '', NULL, '部门管理菜单');
+INSERT INTO `sys_menu` VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 'admin', '2023-01-05 19:54:19', '', NULL, '岗位管理菜单');
+INSERT INTO `sys_menu` VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'admin', '2023-01-05 19:54:19', '', NULL, '字典管理菜单');
+INSERT INTO `sys_menu` VALUES (106, '参数设置', 1, 7, 'config', 'system/config/index', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 'admin', '2023-01-05 19:54:19', '', NULL, '参数设置菜单');
+INSERT INTO `sys_menu` VALUES (107, '通知公告', 1, 8, 'notice', 'system/notice/index', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 'admin', '2023-01-05 19:54:19', '', NULL, '通知公告菜单');
+INSERT INTO `sys_menu` VALUES (108, '日志管理', 1, 9, 'log', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', '2023-01-05 19:54:19', '', NULL, '日志管理菜单');
+INSERT INTO `sys_menu` VALUES (109, '在线用户', 2, 1, 'online', 'monitor/online/index', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 'admin', '2023-01-05 19:54:19', '', NULL, '在线用户菜单');
+INSERT INTO `sys_menu` VALUES (112, '缓存列表', 2, 6, 'cacheList', 'monitor/cache/list', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis-list', 'admin', '2023-01-05 19:54:19', '', NULL, '缓存列表菜单');
+INSERT INTO `sys_menu` VALUES (113, '缓存监控', 2, 5, 'cache', 'monitor/cache/index', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 'admin', '2023-01-05 19:54:19', '', NULL, '缓存监控菜单');
+INSERT INTO `sys_menu` VALUES (114, '表单构建', 3, 1, 'build', 'tool/build/index', '', 1, 0, 'C', '0', '0', 'tool:build:list', 'build', 'admin', '2023-01-05 19:54:19', '', NULL, '表单构建菜单');
+INSERT INTO `sys_menu` VALUES (115, '代码生成', 3, 2, 'gen', 'tool/gen/index', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 'admin', '2023-01-05 19:54:19', '', NULL, '代码生成菜单');
+INSERT INTO `sys_menu` VALUES (118, '文件管理', 1, 10, 'oss', 'system/oss/index', '', 1, 0, 'C', '0', '0', 'system:oss:list', 'upload', 'admin', '2023-01-05 19:54:19', '', NULL, '文件管理菜单');
+INSERT INTO `sys_menu` VALUES (120, '任务调度中心', 2, 5, 'XxlJob', 'monitor/xxljob/index', '', 1, 0, 'C', '0', '0', 'monitor:xxljob:list', 'job', 'admin', '2023-01-05 19:54:19', '', NULL, 'Xxl-Job控制台菜单');
+INSERT INTO `sys_menu` VALUES (500, '操作日志', 108, 1, 'operlog', 'monitor/operlog/index', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 'admin', '2023-01-05 19:54:19', '', NULL, '操作日志菜单');
+INSERT INTO `sys_menu` VALUES (501, '登录日志', 108, 2, 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 'admin', '2023-01-05 19:54:19', '', NULL, '登录日志菜单');
+INSERT INTO `sys_menu` VALUES (1001, '用户查询', 100, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1002, '用户新增', 100, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1003, '用户修改', 100, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1004, '用户删除', 100, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1005, '用户导出', 100, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1006, '用户导入', 100, 6, '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1007, '重置密码', 100, 7, '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1008, '角色查询', 101, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1009, '角色新增', 101, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1010, '角色修改', 101, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1011, '角色删除', 101, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1012, '角色导出', 101, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1013, '菜单查询', 102, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1014, '菜单新增', 102, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1015, '菜单修改', 102, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1016, '菜单删除', 102, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1017, '部门查询', 103, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1018, '部门新增', 103, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1019, '部门修改', 103, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1020, '部门删除', 103, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1021, '岗位查询', 104, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1022, '岗位新增', 104, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1023, '岗位修改', 104, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1024, '岗位删除', 104, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1025, '岗位导出', 104, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1026, '字典查询', 105, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1027, '字典新增', 105, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1028, '字典修改', 105, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1029, '字典删除', 105, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1030, '字典导出', 105, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1031, '参数查询', 106, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1032, '参数新增', 106, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1033, '参数修改', 106, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1034, '参数删除', 106, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1035, '参数导出', 106, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1036, '公告查询', 107, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1037, '公告新增', 107, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1038, '公告修改', 107, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1039, '公告删除', 107, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1040, '操作查询', 500, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1041, '操作删除', 500, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1042, '日志导出', 500, 4, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1043, '登录查询', 501, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1044, '登录删除', 501, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1045, '日志导出', 501, 3, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1046, '在线查询', 109, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1047, '批量强退', 109, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1048, '单条强退', 109, 3, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1050, '账户解锁', 501, 4, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1055, '生成查询', 115, 1, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1056, '生成修改', 115, 2, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1057, '生成删除', 115, 3, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1058, '导入代码', 115, 2, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1059, '预览代码', 115, 4, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1060, '生成代码', 115, 5, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1500, '测试单表', 5, 1, 'demo', 'demo/demo/index', NULL, 1, 0, 'C', '0', '0', 'demo:demo:list', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '测试单表菜单');
+INSERT INTO `sys_menu` VALUES (1501, '测试单表查询', 1500, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:demo:query', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1502, '测试单表新增', 1500, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:demo:add', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1503, '测试单表修改', 1500, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:demo:edit', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1504, '测试单表删除', 1500, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:demo:remove', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1505, '测试单表导出', 1500, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:demo:export', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1506, '测试树表', 5, 1, 'tree', 'demo/tree/index', NULL, 1, 0, 'C', '0', '0', 'demo:tree:list', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '测试树表菜单');
+INSERT INTO `sys_menu` VALUES (1507, '测试树表查询', 1506, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:tree:query', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1508, '测试树表新增', 1506, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:tree:add', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1509, '测试树表修改', 1506, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:tree:edit', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1510, '测试树表删除', 1506, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:tree:remove', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1511, '测试树表导出', 1506, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'demo:tree:export', '#', 'admin', '2023-01-05 19:54:34', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1600, '文件查询', 118, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:query', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1601, '文件上传', 118, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:upload', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1602, '文件下载', 118, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:download', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1603, '文件删除', 118, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:remove', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1604, '配置添加', 118, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:add', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1605, '配置编辑', 118, 6, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:edit', '#', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1610972802922405889, '文章管理', 0, 1, 'article', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'education', 'admin', '2023-01-05 20:13:41', 'admin', '2023-01-10 18:21:29', '');
+INSERT INTO `sys_menu` VALUES (1610973263779946497, '发布文章', 1610972802922405889, 1, 'articles', 'article/article/index', NULL, 1, 0, 'C', '0', '0', NULL, 'form', 'admin', '2023-01-05 20:15:31', 'admin', '2023-01-05 20:22:40', '');
+INSERT INTO `sys_menu` VALUES (1611336461808898048, '文章列表', 1610972802922405889, 2, 'article', 'article/articleList/index', NULL, 1, 1, 'C', '0', '0', 'article:article:list', 'list', 'admin', '2023-01-06 20:21:38', 'admin', '2023-01-09 23:18:57', '文章列表菜单');
+INSERT INTO `sys_menu` VALUES (1611336461808898049, '文章列表查询', 1611336461808898048, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'article:article:query', '#', 'admin', '2023-01-06 20:21:38', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611336461808898050, '文章列表新增', 1611336461808898048, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'article:article:add', '#', 'admin', '2023-01-06 20:21:38', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611336461808898051, '文章列表修改', 1611336461808898048, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'article:article:edit', '#', 'admin', '2023-01-06 20:21:38', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611336461808898052, '文章列表删除', 1611336461808898048, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'article:article:remove', '#', 'admin', '2023-01-06 20:21:38', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611336461808898053, '文章列表导出', 1611336461808898048, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'article:article:export', '#', 'admin', '2023-01-06 20:21:38', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611613727679938560, '分类管理', 1610972802922405889, 3, 'category', 'category/category/index', NULL, 1, 0, 'C', '0', '0', 'category:category:list', 'table', 'admin', '2023-01-07 14:46:40', 'admin', '2023-01-09 23:19:06', '分类管理菜单');
+INSERT INTO `sys_menu` VALUES (1611613727679938561, '分类管理查询', 1611613727679938560, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'category:category:query', '#', 'admin', '2023-01-07 14:46:40', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611613727679938562, '分类管理新增', 1611613727679938560, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'category:category:add', '#', 'admin', '2023-01-07 14:46:40', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611613727679938563, '分类管理修改', 1611613727679938560, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'category:category:edit', '#', 'admin', '2023-01-07 14:46:40', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611613727679938564, '分类管理删除', 1611613727679938560, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'category:category:remove', '#', 'admin', '2023-01-07 14:46:40', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611613727679938565, '分类管理导出', 1611613727679938560, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'category:category:export', '#', 'admin', '2023-01-07 14:46:40', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611975928588574720, '标签管理', 1610972802922405889, 4, 'tag', 'tag/tag/index', NULL, 1, 0, 'C', '0', '0', 'tag:tag:list', 'icon', 'admin', '2023-01-08 14:57:33', 'admin', '2023-01-09 23:19:11', '标签管理菜单');
+INSERT INTO `sys_menu` VALUES (1611975928588574721, '标签管理查询', 1611975928588574720, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'tag:tag:query', '#', 'admin', '2023-01-08 14:57:33', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611975928588574722, '标签管理新增', 1611975928588574720, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'tag:tag:add', '#', 'admin', '2023-01-08 14:57:33', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611975928588574723, '标签管理修改', 1611975928588574720, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'tag:tag:edit', '#', 'admin', '2023-01-08 14:57:33', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611975928588574724, '标签管理删除', 1611975928588574720, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'tag:tag:remove', '#', 'admin', '2023-01-08 14:57:33', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1611975928588574725, '标签管理导出', 1611975928588574720, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'tag:tag:export', '#', 'admin', '2023-01-08 14:57:33', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1612801785548894209, '消息管理', 0, 2, '/message', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'message', 'admin', '2023-01-10 21:21:25', 'admin', '2023-01-11 13:28:26', '');
+INSERT INTO `sys_menu` VALUES (1612810100827877376, '评论管理', 1612801785548894209, 1, 'comment', 'comment/comment/index', NULL, 1, 0, 'C', '0', '0', 'comment:comment:list', 'documentation', 'admin', '2023-01-10 21:58:57', 'admin', '2023-01-11 13:27:41', '评论管理菜单');
+INSERT INTO `sys_menu` VALUES (1612810100827877377, '评论管理查询', 1612810100827877376, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'comment:comment:query', '#', 'admin', '2023-01-10 21:58:57', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1612810100827877378, '评论管理新增', 1612810100827877376, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'comment:comment:add', '#', 'admin', '2023-01-10 21:58:57', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1612810100827877379, '评论管理修改', 1612810100827877376, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'comment:comment:edit', '#', 'admin', '2023-01-10 21:58:57', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1612810100827877380, '评论管理删除', 1612810100827877376, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'comment:comment:remove', '#', 'admin', '2023-01-10 21:58:57', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1612810100827877381, '评论管理导出', 1612810100827877376, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'comment:comment:export', '#', 'admin', '2023-01-10 21:58:57', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613049235916275714, '个人中心', 0, 10, 'user/profile', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'user', 'admin', '2023-01-11 13:44:42', 'admin', '2023-01-11 13:45:12', '');
+INSERT INTO `sys_menu` VALUES (1613098351056703488, '留言管理', 1612801785548894209, 2, 'message', 'message/message/index', NULL, 1, 0, 'C', '0', '0', 'message:message:list', 'checkbox', 'admin', '2023-01-11 17:03:25', 'admin', '2023-01-11 17:31:31', '留言管理菜单');
+INSERT INTO `sys_menu` VALUES (1613098351056703489, '留言管理查询', 1613098351056703488, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'message:message:query', '#', 'admin', '2023-01-11 17:03:25', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613098351056703490, '留言管理新增', 1613098351056703488, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'message:message:add', '#', 'admin', '2023-01-11 17:03:25', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613098351056703491, '留言管理修改', 1613098351056703488, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'message:message:edit', '#', 'admin', '2023-01-11 17:03:25', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613098351056703492, '留言管理删除', 1613098351056703488, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'message:message:remove', '#', 'admin', '2023-01-11 17:03:25', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613098351056703493, '留言管理导出', 1613098351056703488, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'message:message:export', '#', 'admin', '2023-01-11 17:03:25', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613139021339353090, '界面管理', 0, 3, '/website', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'theme', 'admin', '2023-01-11 19:41:28', 'admin', '2023-01-11 19:41:28', '');
+INSERT INTO `sys_menu` VALUES (1613157470488813570, '网站管理', 1613139021339353090, 1, 'website', 'website', '', 1, 1, 'C', '0', '0', NULL, 'international', 'admin', '2023-01-11 20:54:47', 'admin', '2023-01-11 20:55:15', '');
+INSERT INTO `sys_menu` VALUES (1613398656495439872, '页面管理', 1613139021339353090, 2, 'page', 'page/index', NULL, 1, 0, 'C', '0', '0', 'page:page:list', 'education', 'admin', '2023-01-12 12:55:15', 'admin', '2023-01-12 13:37:39', '页面管理菜单');
+INSERT INTO `sys_menu` VALUES (1613398656495439873, '页面管理查询', 1613398656495439872, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'page:page:query', '#', 'admin', '2023-01-12 12:55:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613398656495439874, '页面管理新增', 1613398656495439872, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'page:page:add', '#', 'admin', '2023-01-12 12:55:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613398656495439875, '页面管理修改', 1613398656495439872, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'page:page:edit', '#', 'admin', '2023-01-12 12:55:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613398656495439876, '页面管理删除', 1613398656495439872, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'page:page:remove', '#', 'admin', '2023-01-12 12:55:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613398656495439877, '页面管理导出', 1613398656495439872, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'page:page:export', '#', 'admin', '2023-01-12 12:55:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613408736209010688, '友链管理', 1613139021339353090, 3, 'friendLink', 'friendLink/friendLink/index', NULL, 1, 0, 'C', '0', '0', 'friendLink:friendLink:list', 'people', 'admin', '2023-01-12 13:36:15', 'admin', '2023-01-12 13:37:50', '友链管理菜单');
+INSERT INTO `sys_menu` VALUES (1613408736209010689, '友链管理查询', 1613408736209010688, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'friendLink:friendLink:query', '#', 'admin', '2023-01-12 13:36:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613408736209010690, '友链管理新增', 1613408736209010688, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'friendLink:friendLink:add', '#', 'admin', '2023-01-12 13:36:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613408736209010691, '友链管理修改', 1613408736209010688, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'friendLink:friendLink:edit', '#', 'admin', '2023-01-12 13:36:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613408736209010692, '友链管理删除', 1613408736209010688, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'friendLink:friendLink:remove', '#', 'admin', '2023-01-12 13:36:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613408736209010693, '友链管理导出', 1613408736209010688, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'friendLink:friendLink:export', '#', 'admin', '2023-01-12 13:36:15', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613813815185510401, '说说管理', 0, 5, 'talk', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'wechat', 'admin', '2023-01-13 16:22:51', 'admin', '2023-01-13 16:22:51', '');
+INSERT INTO `sys_menu` VALUES (1613816542531686400, '说说列表', 1613813815185510401, 2, 'talks', 'talk/talkList/index', NULL, 1, 0, 'C', '0', '0', 'talk:talk:list', 'tree-table', 'admin', '2023-01-13 16:37:32', 'admin', '2023-01-14 12:52:36', '说说管理菜单');
+INSERT INTO `sys_menu` VALUES (1613816542531686401, '说说管理查询', 1613816542531686400, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'talk:talk:query', '#', 'admin', '2023-01-13 16:37:32', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613816542531686402, '说说管理新增', 1613816542531686400, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'talk:talk:add', '#', 'admin', '2023-01-13 16:37:32', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613816542531686403, '说说管理修改', 1613816542531686400, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'talk:talk:edit', '#', 'admin', '2023-01-13 16:37:32', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613816542531686404, '说说管理删除', 1613816542531686400, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'talk:talk:remove', '#', 'admin', '2023-01-13 16:37:32', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613816542531686405, '说说管理导出', 1613816542531686400, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'talk:talk:export', '#', 'admin', '2023-01-13 16:37:32', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1613861852100489217, '发布说说', 1613813815185510401, 1, 'talk', 'talk/talk', NULL, 1, 0, 'C', '0', '0', NULL, 'druid', 'admin', '2023-01-13 19:33:44', 'admin', '2023-01-13 19:34:54', '');
+INSERT INTO `sys_menu` VALUES (1625495355317592066, '云端配置', 0, 4, 'system/oss-config/index', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'upload', 'admin', '2023-02-14 22:01:08', 'admin', '2023-02-14 22:04:01', '');
+INSERT INTO `sys_menu` VALUES (1627233395924889602, '关于我', 1613139021339353090, 4, 'about', 'about/About.vue', NULL, 1, 0, 'C', '0', '0', NULL, 'theme', 'admin', '2023-02-19 17:07:29', 'admin', '2023-02-19 17:10:50', '');
+INSERT INTO `sys_menu` VALUES (1627642998340730881, '相册管理', 0, 2, 'album', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'build', 'admin', '2023-02-20 20:15:06', 'admin', '2023-02-20 20:15:06', '');
+INSERT INTO `sys_menu` VALUES (1627643112476131328, '相册列表', 1627642998340730881, 1, 'album', 'album/album/Album', NULL, 1, 0, 'C', '0', '0', 'album:album:list', 'list', 'admin', '2023-02-20 20:16:08', 'admin', '2023-02-21 19:42:07', '相册管理菜单');
+INSERT INTO `sys_menu` VALUES (1627643112476131329, '相册管理查询', 1627643112476131328, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'album:album:query', '#', 'admin', '2023-02-20 20:16:08', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1627643112476131330, '相册管理新增', 1627643112476131328, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'album:album:add', '#', 'admin', '2023-02-20 20:16:08', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1627643112476131331, '相册管理修改', 1627643112476131328, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'album:album:edit', '#', 'admin', '2023-02-20 20:16:08', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1627643112476131332, '相册管理删除', 1627643112476131328, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'album:album:remove', '#', 'admin', '2023-02-20 20:16:08', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1627643112476131333, '相册管理导出', 1627643112476131328, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'album:album:export', '#', 'admin', '2023-02-20 20:16:08', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1627996831193526274, '照片管理', 1627642998340730881, 2, 'photo', 'album/album/Photo', '', 1, 0, 'C', '1', '0', NULL, 'eye-open', 'admin', '2023-02-21 19:41:06', 'admin', '2023-02-22 21:46:53', '');
+
+-- ----------------------------
+-- Table structure for sys_notice
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_notice`;
+CREATE TABLE `sys_notice` (
+ `notice_id` bigint(20) NOT NULL COMMENT '公告ID',
+ `notice_title` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '公告标题',
+ `notice_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '公告类型(1通知 2公告)',
+ `notice_content` longblob NULL COMMENT '公告内容',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '公告状态(0正常 1关闭)',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`notice_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '通知公告表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_notice
+-- ----------------------------
+INSERT INTO `sys_notice` VALUES (1, '温馨提醒:2018-07-01 新版本发布啦', '2', 0xE696B0E78988E69CACE58685E5AEB9, '0', 'admin', '2023-01-05 19:54:19', '', NULL, '管理员');
+INSERT INTO `sys_notice` VALUES (2, '维护通知:2018-07-01 系统凌晨维护', '1', 0xE7BBB4E68AA4E58685E5AEB9, '0', 'admin', '2023-01-05 19:54:19', '', NULL, '管理员');
+
+-- ----------------------------
+-- Table structure for sys_oper_log
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_oper_log`;
+CREATE TABLE `sys_oper_log` (
+ `oper_id` bigint(20) NOT NULL COMMENT '日志主键',
+ `title` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '模块标题',
+ `business_type` int(2) NULL DEFAULT 0 COMMENT '业务类型(0其它 1新增 2修改 3删除)',
+ `method` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '方法名称',
+ `request_method` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '请求方式',
+ `operator_type` int(1) NULL DEFAULT 0 COMMENT '操作类别(0其它 1后台用户 2手机端用户)',
+ `oper_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '操作人员',
+ `dept_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '部门名称',
+ `oper_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '请求URL',
+ `oper_ip` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '主机地址',
+ `oper_location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '操作地点',
+ `oper_param` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '请求参数',
+ `json_result` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '返回参数',
+ `status` int(1) NULL DEFAULT 0 COMMENT '操作状态(0正常 1异常)',
+ `error_msg` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '错误消息',
+ `oper_time` datetime NULL DEFAULT NULL COMMENT '操作时间',
+ PRIMARY KEY (`oper_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '操作日志记录' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_oper_log
+-- ----------------------------
+INSERT INTO `sys_oper_log` VALUES (1610968366145691649, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/117', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-05 19:56:03');
+INSERT INTO `sys_oper_log` VALUES (1610972802922405890, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 20:13:41\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-05 20:13:41\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1610972802922405889\",\"menuName\":\"文章管理\",\"orderNum\":6,\"path\":\"articles\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"education\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-05 20:13:41');
+INSERT INTO `sys_oper_log` VALUES (1610973263779946498, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 20:15:31\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-05 20:15:31\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1610973263779946497\",\"menuName\":\"发布文章\",\"orderNum\":1,\"path\":\"articles\",\"component\":\"articles\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"form\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-05 20:15:31');
+INSERT INTO `sys_oper_log` VALUES (1610974189890658305, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 20:15:31\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-05 20:19:11\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1610973263779946497\",\"menuName\":\"发布文章\",\"orderNum\":1,\"path\":\"articles\",\"component\":\"article/Article.vue\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"form\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-05 20:19:12');
+INSERT INTO `sys_oper_log` VALUES (1610974340449394689, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 20:13:41\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-05 20:19:47\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1610972802922405889\",\"menuName\":\"文章管理\",\"orderNum\":6,\"path\":\"article\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"education\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-05 20:19:48');
+INSERT INTO `sys_oper_log` VALUES (1610974367708176386, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 20:15:31\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-05 20:19:54\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1610973263779946497\",\"menuName\":\"发布文章\",\"orderNum\":1,\"path\":\"articles\",\"component\":\"article/Article.vue\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"form\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-05 20:19:54');
+INSERT INTO `sys_oper_log` VALUES (1610975062465273857, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 20:15:31\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-05 20:22:40\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1610973263779946497\",\"menuName\":\"发布文章\",\"orderNum\":1,\"path\":\"articles\",\"component\":\"article/article/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"form\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-05 20:22:40');
+INSERT INTO `sys_oper_log` VALUES (1611328955581820930, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_article\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 19:48:55');
+INSERT INTO `sys_oper_log` VALUES (1611329514472828930, '字典类型', 1, 'com.zhi.web.controller.system.SysDictTypeController.add()', 'POST', 1, 'admin', '', '/system/dict/type', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:51:07\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 19:51:07\",\"dictId\":\"1611329514405720065\",\"dictName\":\"文章类型\",\"dictType\":\"article_type\",\"status\":\"0\",\"remark\":\"文章类型\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 19:51:08');
+INSERT INTO `sys_oper_log` VALUES (1611329875921170433, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:52:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 19:52:34\",\"dictCode\":\"1611329875858255874\",\"dictSort\":1,\"dictLabel\":\"原创\",\"dictValue\":\"1\",\"dictType\":\"article_type\",\"cssClass\":null,\"listClass\":\"default\",\"isDefault\":null,\"status\":\"0\",\"remark\":\"原创\",\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 19:52:34');
+INSERT INTO `sys_oper_log` VALUES (1611329966916595714, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:52:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 19:52:55\",\"dictCode\":\"1611329966849486850\",\"dictSort\":2,\"dictLabel\":\"转载\",\"dictValue\":\"2\",\"dictType\":\"article_type\",\"cssClass\":null,\"listClass\":\"default\",\"isDefault\":null,\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 19:52:56');
+INSERT INTO `sys_oper_log` VALUES (1611330010747072514, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:53:06\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 19:53:06\",\"dictCode\":\"1611330010747072513\",\"dictSort\":3,\"dictLabel\":\"翻译\",\"dictValue\":\"3\",\"dictType\":\"article_type\",\"cssClass\":null,\"listClass\":\"default\",\"isDefault\":null,\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 19:53:06');
+INSERT INTO `sys_oper_log` VALUES (1611331545770061826, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 19:59:12\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611328955321774082\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.system\",\"moduleName\":\"system\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:48:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 19:59:12\",\"columnId\":\"1611328955384688642\",\"tableId\":\"1611328955321774082\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"edit\":true,\"usableColumn\":false,\"insert\":false,\"superColumn\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:48:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 19:59:12\",\"columnId\":\"1611328955384688643\",\"tableId\":\"1611328955321774082\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"edit\":true,\"usableColumn\":false,\"insert\":true,\"superColumn\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:48:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 19:59:12\",\"columnId\":\"1611328955384688644\",\"tableId\":\"1611328955321774082\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 19:59:12');
+INSERT INTO `sys_oper_log` VALUES (1611331586249289730, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_article\"}', '', 0, '', '2023-01-06 19:59:22');
+INSERT INTO `sys_oper_log` VALUES (1611332134113472514, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:01:32\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611328955321774082\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.article\",\"moduleName\":\"system\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:48:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:01:32\",\"columnId\":\"1611328955384688642\",\"tableId\":\"1611328955321774082\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"edit\":true,\"usableColumn\":false,\"insert\":false,\"superColumn\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:48:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:01:32\",\"columnId\":\"1611328955384688643\",\"tableId\":\"1611328955321774082\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"edit\":true,\"usableColumn\":false,\"insert\":true,\"superColumn\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:48:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:01:32\",\"columnId\":\"1611328955384688644\",\"tableId\":\"1611328955321774082\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:01:33');
+INSERT INTO `sys_oper_log` VALUES (1611332431456071682, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:02:43\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611328955321774082\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"system\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:48:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:02:43\",\"columnId\":\"1611328955384688642\",\"tableId\":\"1611328955321774082\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"edit\":true,\"usableColumn\":false,\"insert\":false,\"superColumn\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:48:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:02:43\",\"columnId\":\"1611328955384688643\",\"tableId\":\"1611328955321774082\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"edit\":true,\"usableColumn\":false,\"insert\":true,\"superColumn\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:48:55\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:02:43\",\"columnId\":\"1611328955384688644\",\"tableId\":\"1611328955321774082\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"L', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:02:43');
+INSERT INTO `sys_oper_log` VALUES (1611332442721972226, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_article\"}', '', 0, '', '2023-01-06 20:02:46');
+INSERT INTO `sys_oper_log` VALUES (1611334151103934466, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:08:05\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:09:33\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1611332442470313984\",\"menuName\":\"文章列表\",\"orderNum\":1,\"path\":\"article\",\"component\":\"article/articleList/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"system:article:list\",\"icon\":\"#\",\"remark\":\"文章列表菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:09:33');
+INSERT INTO `sys_oper_log` VALUES (1611335883103997953, '代码生成', 3, 'com.zhi.generator.controller.GenController.remove()', 'DELETE', 1, 'admin', '', '/tool/gen/1611328955321774082', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:16:26');
+INSERT INTO `sys_oper_log` VALUES (1611335898144772097, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_article\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:16:30');
+INSERT INTO `sys_oper_log` VALUES (1611336444532559873, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:18:40\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611335897880530945\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"article\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:18:40\",\"columnId\":\"1611335898031525890\",\"tableId\":\"1611335897880530945\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"capJavaField\":\"Id\",\"query\":false,\"increment\":true,\"required\":true,\"list\":true,\"pk\":true,\"edit\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:18:40\",\"columnId\":\"1611335898031525891\",\"tableId\":\"1611335897880530945\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"capJavaField\":\"UserId\",\"query\":true,\"increment\":false,\"required\":true,\"list\":true,\"pk\":false,\"edit\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:18:40\",\"columnId\":\"1611335898069274626\",\"tableId\":\"1611335897880530945\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:18:40');
+INSERT INTO `sys_oper_log` VALUES (1611336462454820866, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_article\"}', '', 0, '', '2023-01-06 20:18:44');
+INSERT INTO `sys_oper_log` VALUES (1611337350841962497, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1611332442470313984', '127.0.0.1', '内网IP', '{}', '{\"code\":601,\"msg\":\"存在子菜单,不允许删除\",\"data\":null}', 0, '', '2023-01-06 20:22:16');
+INSERT INTO `sys_oper_log` VALUES (1611337368575479809, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1611332442470313989', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:22:21');
+INSERT INTO `sys_oper_log` VALUES (1611337377375129601, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1611332442470313988', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:22:23');
+INSERT INTO `sys_oper_log` VALUES (1611337397331628033, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1611332442470313987', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:22:27');
+INSERT INTO `sys_oper_log` VALUES (1611337406869475329, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1611332442470313986', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:22:30');
+INSERT INTO `sys_oper_log` VALUES (1611337416503791617, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1611332442470313985', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:22:32');
+INSERT INTO `sys_oper_log` VALUES (1611337427971018754, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1611332442470313984', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:22:35');
+INSERT INTO `sys_oper_log` VALUES (1611337521889873922, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:21:38\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:22:57\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1611336461808898048\",\"menuName\":\"文章列表\",\"orderNum\":1,\"path\":\"article\",\"component\":\"article/articleList/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"article:article:list\",\"icon\":\"#\",\"remark\":\"文章列表菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:22:57');
+INSERT INTO `sys_oper_log` VALUES (1611338297752256513, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:21:38\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:26:01\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1611336461808898048\",\"menuName\":\"文章列表\",\"orderNum\":1,\"path\":\"article\",\"component\":\"article/articleList/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"1\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"article:article:list\",\"icon\":\"#\",\"remark\":\"文章列表菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:26:02');
+INSERT INTO `sys_oper_log` VALUES (1611341301511454722, '字典类型', 1, 'com.zhi.web.controller.system.SysDictTypeController.add()', 'POST', 1, 'admin', '', '/system/dict/type', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:37:58\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:37:58\",\"dictId\":\"1611341301444345857\",\"dictName\":\"文章状态\",\"dictType\":\"article_status\",\"status\":\"0\",\"remark\":\"文章状态\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:37:58');
+INSERT INTO `sys_oper_log` VALUES (1611341551689105411, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:38:57\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:38:57\",\"dictCode\":\"1611341551689105410\",\"dictSort\":0,\"dictLabel\":\"公开\",\"dictValue\":\"1\",\"dictType\":\"article_status\",\"cssClass\":null,\"listClass\":\"default\",\"isDefault\":null,\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:38:58');
+INSERT INTO `sys_oper_log` VALUES (1611341588632535041, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:39:06\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:39:06\",\"dictCode\":\"1611341588569620481\",\"dictSort\":0,\"dictLabel\":\"私密\",\"dictValue\":\"2\",\"dictType\":\"article_status\",\"cssClass\":null,\"listClass\":\"default\",\"isDefault\":null,\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:39:07');
+INSERT INTO `sys_oper_log` VALUES (1611341642575478786, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:39:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:39:19\",\"dictCode\":\"1611341642508369922\",\"dictSort\":0,\"dictLabel\":\"评论可见\",\"dictValue\":\"3\",\"dictType\":\"article_status\",\"cssClass\":null,\"listClass\":\"default\",\"isDefault\":null,\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:39:20');
+INSERT INTO `sys_oper_log` VALUES (1611342092091621378, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:52:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:41:06\",\"dictCode\":30,\"dictSort\":1,\"dictLabel\":\"原创\",\"dictValue\":\"1\",\"dictType\":\"article_type\",\"cssClass\":null,\"listClass\":\"success\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":\"原创\",\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:41:07');
+INSERT INTO `sys_oper_log` VALUES (1611342122953310209, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:52:56\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:41:14\",\"dictCode\":31,\"dictSort\":2,\"dictLabel\":\"转载\",\"dictValue\":\"2\",\"dictType\":\"article_type\",\"cssClass\":null,\"listClass\":\"info\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:41:14');
+INSERT INTO `sys_oper_log` VALUES (1611342160467165185, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:53:06\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:41:22\",\"dictCode\":32,\"dictSort\":3,\"dictLabel\":\"翻译\",\"dictValue\":\"3\",\"dictType\":\"article_type\",\"cssClass\":null,\"listClass\":\"warning\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:41:23');
+INSERT INTO `sys_oper_log` VALUES (1611342186727702530, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 19:52:56\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:41:29\",\"dictCode\":31,\"dictSort\":2,\"dictLabel\":\"转载\",\"dictValue\":\"2\",\"dictType\":\"article_type\",\"cssClass\":null,\"listClass\":\"danger\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:41:29');
+INSERT INTO `sys_oper_log` VALUES (1611342736844226562, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:43:40\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611335897880530945\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"article\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:43:40\",\"columnId\":\"1611335898031525890\",\"tableId\":\"1611335897880530945\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:43:40\",\"columnId\":\"1611335898031525891\",\"tableId\":\"1611335897880530945\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":true,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:43:40\",\"columnId\":\"1611335898069274626\",\"tableId\":\"1611335897880530945\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:43:40');
+INSERT INTO `sys_oper_log` VALUES (1611342967430283266, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:44:35\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611335897880530945\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"article\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:44:35\",\"columnId\":\"1611335898031525890\",\"tableId\":\"1611335897880530945\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:44:35\",\"columnId\":\"1611335898031525891\",\"tableId\":\"1611335897880530945\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":true,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:44:35\",\"columnId\":\"1611335898069274626\",\"tableId\":\"1611335897880530945\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:44:35');
+INSERT INTO `sys_oper_log` VALUES (1611343112708390914, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:45:10\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611335897880530945\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"article\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:45:10\",\"columnId\":\"1611335898031525890\",\"tableId\":\"1611335897880530945\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:45:10\",\"columnId\":\"1611335898031525891\",\"tableId\":\"1611335897880530945\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":true,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:45:10\",\"columnId\":\"1611335898069274626\",\"tableId\":\"1611335897880530945\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:45:10');
+INSERT INTO `sys_oper_log` VALUES (1611343352865849346, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:46:07\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611335897880530945\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"article\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:46:07\",\"columnId\":\"1611335898031525890\",\"tableId\":\"1611335897880530945\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:46:07\",\"columnId\":\"1611335898031525891\",\"tableId\":\"1611335897880530945\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":true,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:46:07\",\"columnId\":\"1611335898069274626\",\"tableId\":\"1611335897880530945\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:46:07');
+INSERT INTO `sys_oper_log` VALUES (1611345218471297025, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:53:32\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611335897880530945\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"article\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:53:32\",\"columnId\":\"1611335898031525890\",\"tableId\":\"1611335897880530945\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:53:32\",\"columnId\":\"1611335898031525891\",\"tableId\":\"1611335897880530945\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":true,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:53:32\",\"columnId\":\"1611335898069274626\",\"tableId\":\"1611335897880530945\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:53:32');
+INSERT INTO `sys_oper_log` VALUES (1611345544616181761, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:54:49\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611335897880530945\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"article\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:54:49\",\"columnId\":\"1611335898031525890\",\"tableId\":\"1611335897880530945\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:54:49\",\"columnId\":\"1611335898031525891\",\"tableId\":\"1611335897880530945\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"superColumn\":false,\"edit\":true,\"usableColumn\":false,\"insert\":true,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-06 20:54:49\",\"columnId\":\"1611335898069274626\",\"tableId\":\"1611335897880530945\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-06 20:54:50');
+INSERT INTO `sys_oper_log` VALUES (1611575763675504642, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_article', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:09:38');
+INSERT INTO `sys_oper_log` VALUES (1611576999736893442, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:14:33\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611335897880530945\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"article\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:14:33\",\"columnId\":\"1611335898031525890\",\"tableId\":\"1611335897880530945\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"pk\":true,\"insert\":false,\"increment\":true,\"capJavaField\":\"Id\",\"query\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:14:33\",\"columnId\":\"1611335898031525891\",\"tableId\":\"1611335897880530945\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"pk\":false,\"insert\":true,\"increment\":false,\"capJavaField\":\"UserId\",\"query\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:14:33\",\"columnId\":\"1611335898069274626\",\"tableId\":\"1611335897880530945\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:14:33');
+INSERT INTO `sys_oper_log` VALUES (1611577369401876482, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_article\"}', '', 0, '', '2023-01-07 12:16:01');
+INSERT INTO `sys_oper_log` VALUES (1611580812430508034, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1020,\"categoryId\":214,\"articleCover\":\"https://upload.linkstarted.top/articles/d01408d1fe1a2f9c5ab29f9503b25003.jpg\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":2,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:29:42');
+INSERT INTO `sys_oper_log` VALUES (1611584038554927105, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"sys_dept\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:42:31');
+INSERT INTO `sys_oper_log` VALUES (1611584400187817995, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"sys_config\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:43:57');
+INSERT INTO `sys_oper_log` VALUES (1611584546703245313, '代码生成', 3, 'com.zhi.generator.controller.GenController.remove()', 'DELETE', 1, 'admin', '', '/tool/gen/1611584400120709122', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:44:32');
+INSERT INTO `sys_oper_log` VALUES (1611584559487483906, '代码生成', 3, 'com.zhi.generator.controller.GenController.remove()', 'DELETE', 1, 'admin', '', '/tool/gen/1611584038424903681', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:44:35');
+INSERT INTO `sys_oper_log` VALUES (1611584710604062722, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:45:11\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611335897880530945\",\"tableName\":\"blog_article\",\"tableComment\":\"文章列表\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Article\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"article\",\"businessName\":\"article\",\"functionName\":\"文章列表\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:45:11\",\"columnId\":\"1611335898031525890\",\"tableId\":\"1611335897880530945\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"superColumn\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:45:11\",\"columnId\":\"1611335898031525891\",\"tableId\":\"1611335897880530945\",\"columnName\":\"user_id\",\"columnComment\":\"作者\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"superColumn\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:16:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:45:11\",\"columnId\":\"1611335898069274626\",\"tableId\":\"1611335897880530945\",\"columnName\":\"category_id\",\"columnComment\":\"文章分类\",\"columnType\":\"int(11)\",\"javaType\":\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:45:11');
+INSERT INTO `sys_oper_log` VALUES (1611585412994793473, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:38:58\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:47:58\",\"dictCode\":33,\"dictSort\":0,\"dictLabel\":\"公开\",\"dictValue\":\"1\",\"dictType\":\"article_status\",\"cssClass\":null,\"listClass\":\"primary\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:47:59');
+INSERT INTO `sys_oper_log` VALUES (1611585437833461761, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:38:58\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:48:04\",\"dictCode\":33,\"dictSort\":0,\"dictLabel\":\"公开\",\"dictValue\":\"1\",\"dictType\":\"article_status\",\"cssClass\":null,\"listClass\":\"success\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:48:05');
+INSERT INTO `sys_oper_log` VALUES (1611585457374724098, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:39:07\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:48:09\",\"dictCode\":34,\"dictSort\":0,\"dictLabel\":\"私密\",\"dictValue\":\"2\",\"dictType\":\"article_status\",\"cssClass\":null,\"listClass\":\"info\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:48:10');
+INSERT INTO `sys_oper_log` VALUES (1611585477427691522, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:39:07\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:48:14\",\"dictCode\":34,\"dictSort\":0,\"dictLabel\":\"私密\",\"dictValue\":\"2\",\"dictType\":\"article_status\",\"cssClass\":null,\"listClass\":\"warning\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:48:14');
+INSERT INTO `sys_oper_log` VALUES (1611585501221978113, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:39:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 12:48:19\",\"dictCode\":35,\"dictSort\":0,\"dictLabel\":\"评论可见\",\"dictValue\":\"3\",\"dictType\":\"article_status\",\"cssClass\":null,\"listClass\":\"primary\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 12:48:20');
+INSERT INTO `sys_oper_log` VALUES (1611611446146334727, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_category\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 14:31:26');
+INSERT INTO `sys_oper_log` VALUES (1611612756539179010, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:36:38\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":null},\"tableId\":\"1611611446079225858\",\"tableName\":\"blog_category\",\"tableComment\":\"分类管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Category\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.system\",\"moduleName\":\"category\",\"businessName\":\"category\",\"functionName\":\"分类管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:36:38\",\"columnId\":\"1611611446146334721\",\"tableId\":\"1611611446079225858\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"superColumn\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:36:38\",\"columnId\":\"1611611446146334722\",\"tableId\":\"1611611446079225858\",\"columnName\":\"category_name\",\"columnComment\":\"分类名\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"javaField\":\"categoryName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"superColumn\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"CategoryName\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:36:38\",\"columnId\":\"1611611446146334723\",\"tableId\":\"1611611446079225858\",\"columnName\":\"create_time\",\"columnComment\":\"创建时间\",\"columnType\":\"datet', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 14:36:38');
+INSERT INTO `sys_oper_log` VALUES (1611612801036550145, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:36:48\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611611446079225858\",\"tableName\":\"blog_category\",\"tableComment\":\"分类管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Category\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.system\",\"moduleName\":\"category\",\"businessName\":\"category\",\"functionName\":\"分类管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:36:48\",\"columnId\":\"1611611446146334721\",\"tableId\":\"1611611446079225858\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"superColumn\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:36:48\",\"columnId\":\"1611611446146334722\",\"tableId\":\"1611611446079225858\",\"columnName\":\"category_name\",\"columnComment\":\"分类名\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"javaField\":\"categoryName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"superColumn\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"CategoryName\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:36:48\",\"columnId\":\"1611611446146334723\",\"tableId\":\"1611611446079225858\",\"columnName\":\"create_time\",\"columnComment\":\"创建时间\",\"c', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 14:36:49');
+INSERT INTO `sys_oper_log` VALUES (1611613261961199618, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:38:38\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611611446079225858\",\"tableName\":\"blog_category\",\"tableComment\":\"分类管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Category\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.system\",\"moduleName\":\"category\",\"businessName\":\"category\",\"functionName\":\"分类管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:38:38\",\"columnId\":\"1611611446146334721\",\"tableId\":\"1611611446079225858\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"superColumn\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:38:38\",\"columnId\":\"1611611446146334722\",\"tableId\":\"1611611446079225858\",\"columnName\":\"category_name\",\"columnComment\":\"分类名\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"javaField\":\"categoryName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"superColumn\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"CategoryName\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:38:38\",\"columnId\":\"1611611446146334723\",\"tableId\":\"1611611446079225858\",\"columnName\":\"create_time\",\"columnComment\":\"创建时间\",\"c', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 14:38:39');
+INSERT INTO `sys_oper_log` VALUES (1611613275215200258, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_category\"}', '', 0, '', '2023-01-07 14:38:42');
+INSERT INTO `sys_oper_log` VALUES (1611613712697884673, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:40:26\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611611446079225858\",\"tableName\":\"blog_category\",\"tableComment\":\"分类管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Category\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"category\",\"businessName\":\"category\",\"functionName\":\"分类管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:40:26\",\"columnId\":\"1611611446146334721\",\"tableId\":\"1611611446079225858\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"superColumn\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:40:26\",\"columnId\":\"1611611446146334722\",\"tableId\":\"1611611446079225858\",\"columnName\":\"category_name\",\"columnComment\":\"分类名\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"javaField\":\"categoryName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"superColumn\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"CategoryName\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:31:26\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:40:26\",\"columnId\":\"1611611446146334723\",\"tableId\":\"1611611446079225858\",\"columnName\":\"create_time\",\"columnComment\":\"创建时间\",\"col', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 14:40:26');
+INSERT INTO `sys_oper_log` VALUES (1611613727851905025, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_category\"}', '', 0, '', '2023-01-07 14:40:30');
+INSERT INTO `sys_oper_log` VALUES (1611615732909494273, '分类管理', 2, 'com.zhi.blog.controller.CategoryController.edit()', 'PUT', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":214,\"categoryName\":\"测试1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 14:48:28');
+INSERT INTO `sys_oper_log` VALUES (1611616146165878786, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:21:38\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:50:06\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1611336461808898048\",\"menuName\":\"文章列表\",\"orderNum\":1,\"path\":\"article\",\"component\":\"article/articleList/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"1\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"article:article:list\",\"icon\":\"list\",\"remark\":\"文章列表菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 14:50:06');
+INSERT INTO `sys_oper_log` VALUES (1611616243435982849, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:46:40\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-07 14:50:29\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1611613727679938560\",\"menuName\":\"分类管理\",\"orderNum\":1,\"path\":\"category\",\"component\":\"category/category/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"category:category:list\",\"icon\":\"table\",\"remark\":\"分类管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-07 14:50:29');
+INSERT INTO `sys_oper_log` VALUES (1611975643208130562, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_tag\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 14:38:37');
+INSERT INTO `sys_oper_log` VALUES (1611975904022536193, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 14:39:39\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611975642985832449\",\"tableName\":\"blog_tag\",\"tableComment\":\"标签管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Tag\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"tag\",\"businessName\":\"tag\",\"functionName\":\"标签管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-08 14:38:37\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 14:39:39\",\"columnId\":\"1611975643027775489\",\"tableId\":\"1611975642985832449\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"usableColumn\":false,\"insert\":false,\"superColumn\":false,\"edit\":true,\"pk\":true,\"increment\":false,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-08 14:38:37\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 14:39:39\",\"columnId\":\"1611975643027775490\",\"tableId\":\"1611975642985832449\",\"columnName\":\"tag_name\",\"columnComment\":\"标签名\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"tagName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"usableColumn\":false,\"insert\":true,\"superColumn\":false,\"edit\":true,\"pk\":false,\"increment\":false,\"query\":true,\"capJavaField\":\"TagName\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-08 14:38:37\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 14:39:39\",\"columnId\":\"1611975643078107137\",\"tableId\":\"1611975642985832449\",\"columnName\":\"create_by\",\"columnComment\":\"\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"ja', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 14:39:39');
+INSERT INTO `sys_oper_log` VALUES (1611975929351938050, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_tag\"}', '', 0, '', '2023-01-08 14:39:45');
+INSERT INTO `sys_oper_log` VALUES (1611980941331382274, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_tag', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 14:59:40');
+INSERT INTO `sys_oper_log` VALUES (1611980984037785601, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 14:59:50\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1610972802922405889\"},\"tableId\":\"1611975642985832449\",\"tableName\":\"blog_tag\",\"tableComment\":\"标签管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Tag\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"tag\",\"businessName\":\"tag\",\"functionName\":\"标签管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-08 14:38:37\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 14:59:50\",\"columnId\":\"1611975643027775489\",\"tableId\":\"1611975642985832449\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"insert\":false,\"edit\":true,\"usableColumn\":false,\"superColumn\":false,\"query\":false,\"increment\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-08 14:38:37\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 14:59:50\",\"columnId\":\"1611975643027775490\",\"tableId\":\"1611975642985832449\",\"columnName\":\"tag_name\",\"columnComment\":\"标签名\",\"columnType\":\"varchar(11)\",\"javaType\":\"String\",\"javaField\":\"tagName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"insert\":true,\"edit\":true,\"usableColumn\":false,\"superColumn\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"TagName\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-08 14:38:37\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 14:59:50\",\"columnId\":\"1611975643078107137\",\"tableId\":\"1611975642985832449\",\"columnName\":\"create_by\",\"columnComment\":\"\",\"columnType\":\"varchar(20)\",\"javaType\":\"Strin', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 14:59:50');
+INSERT INTO `sys_oper_log` VALUES (1611981482098786305, '标签管理', 2, 'com.zhi.blog.controller.TagController.edit()', 'PUT', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":54,\"tagName\":\"测试1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 15:01:49');
+INSERT INTO `sys_oper_log` VALUES (1611981497068257281, '标签管理', 2, 'com.zhi.blog.controller.TagController.edit()', 'PUT', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":54,\"tagName\":\"测试\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 15:01:53');
+INSERT INTO `sys_oper_log` VALUES (1611981706200449026, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-08 14:57:33\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 15:02:42\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1611975928588574720\",\"menuName\":\"标签管理\",\"orderNum\":1,\"path\":\"tag\",\"component\":\"tag/tag/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"tag:tag:list\",\"icon\":\"icon\",\"remark\":\"标签管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 15:02:43');
+INSERT INTO `sys_oper_log` VALUES (1612007924555603969, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '', 1, '创建Bucket失败, 请核对配置信息:[Unable to execute HTTP request: Connect to 127.0.0.1:9000 [/127.0.0.1] failed: Connection refused: no further information]', '2023-01-08 16:46:54');
+INSERT INTO `sys_oper_log` VALUES (1612008091446960129, '对象存储状态修改', 2, 'com.zhi.web.controller.system.SysOssConfigController.changeStatus()', 'PUT', 1, 'admin', '', '/system/oss/config/changeStatus', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":3,\"configKey\":\"aliyun\",\"accessKey\":null,\"secretKey\":null,\"bucketName\":null,\"prefix\":null,\"endpoint\":null,\"domain\":null,\"isHttps\":null,\"status\":\"0\",\"region\":null,\"ext1\":null,\"remark\":null,\"accessPolicy\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 16:47:33');
+INSERT INTO `sys_oper_log` VALUES (1612008140490956802, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '', 1, '创建Bucket失败, 请核对配置信息:[The OSS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 63BA83305423BA303718605A; S3 Extended Request ID: ruoyi.oss-cn-beijing.aliyuncs.com; Proxy: null)]', '2023-01-08 16:47:45');
+INSERT INTO `sys_oper_log` VALUES (1612008176973012994, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '', 1, '创建Bucket失败, 请核对配置信息:[The OSS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 63BA8339A645AE3338D94669; S3 Extended Request ID: ruoyi.oss-cn-beijing.aliyuncs.com; Proxy: null)]', '2023-01-08 16:47:54');
+INSERT INTO `sys_oper_log` VALUES (1612008327686938626, '对象存储状态修改', 2, 'com.zhi.web.controller.system.SysOssConfigController.changeStatus()', 'PUT', 1, 'admin', '', '/system/oss/config/changeStatus', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":4,\"configKey\":\"qcloud\",\"accessKey\":null,\"secretKey\":null,\"bucketName\":null,\"prefix\":null,\"endpoint\":null,\"domain\":null,\"isHttps\":null,\"status\":\"0\",\"region\":null,\"ext1\":null,\"remark\":null,\"accessPolicy\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 16:48:30');
+INSERT INTO `sys_oper_log` VALUES (1612008998649749505, '对象存储配置', 2, 'com.zhi.web.controller.system.SysOssConfigController.edit()', 'PUT', 1, 'admin', '', '/system/oss/config', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":3,\"configKey\":\"aliyun\",\"accessKey\":\" LTAI5tAaC4gFYq1qRjSj1y5E\",\"secretKey\":\" oJf6qB2y9byKdnVLsyBJUblJ2qVVLt\",\"bucketName\":\"2831826106\",\"prefix\":\"\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"domain\":\"\",\"isHttps\":\"N\",\"status\":\"1\",\"region\":\"\",\"ext1\":\"\",\"remark\":null,\"accessPolicy\":\"1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 16:51:10');
+INSERT INTO `sys_oper_log` VALUES (1612009015703789569, '对象存储状态修改', 2, 'com.zhi.web.controller.system.SysOssConfigController.changeStatus()', 'PUT', 1, 'admin', '', '/system/oss/config/changeStatus', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":3,\"configKey\":\"aliyun\",\"accessKey\":null,\"secretKey\":null,\"bucketName\":null,\"prefix\":null,\"endpoint\":null,\"domain\":null,\"isHttps\":null,\"status\":\"0\",\"region\":null,\"ext1\":null,\"remark\":null,\"accessPolicy\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 16:51:14');
+INSERT INTO `sys_oper_log` VALUES (1612009218578079745, '对象存储配置', 2, 'com.zhi.web.controller.system.SysOssConfigController.edit()', 'PUT', 1, 'admin', '', '/system/oss/config', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":3,\"configKey\":\"aliyun\",\"accessKey\":\" LTAI5tAaC4gFYq1qRjSj1y5E\",\"secretKey\":\" oJf6qB2y9byKdnVLsyBJUblJ2qVVLt\",\"bucketName\":\"2831826106\",\"prefix\":\"\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"domain\":\"\",\"isHttps\":\"N\",\"status\":\"0\",\"region\":\"\",\"ext1\":\"\",\"remark\":\"\",\"accessPolicy\":\"1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 16:52:02');
+INSERT INTO `sys_oper_log` VALUES (1612009288484544514, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612009288484544513\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/b5d43d06c1be409d9174efa1dcf30c4d.jpg\",\"fileName\":\"b.jpg\"}}', 0, '', '2023-01-08 16:52:19');
+INSERT INTO `sys_oper_log` VALUES (1612009297372274690, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":2,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 16:52:21');
+INSERT INTO `sys_oper_log` VALUES (1612010993678835714, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612010993611726850\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/e4aebcf8cc864490baf9dcb669b16b5e.jpg\",\"fileName\":\"hos.jpg\"}}', 0, '', '2023-01-08 16:59:05');
+INSERT INTO `sys_oper_log` VALUES (1612011001102753793, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612010993611726850\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":2,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 16:59:07');
+INSERT INTO `sys_oper_log` VALUES (1612013656831188994, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612010993611726850', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:09:40');
+INSERT INTO `sys_oper_log` VALUES (1612013716100898818, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612013716100898817\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/7a09c2d03aa14ca48308379828d3f6e8.jpg\",\"fileName\":\"b.jpg\"}}', 0, '', '2023-01-08 17:09:54');
+INSERT INTO `sys_oper_log` VALUES (1612014136152055810, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612013716100898817\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":2,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:11:34');
+INSERT INTO `sys_oper_log` VALUES (1612014934458130433, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612013716100898817', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:14:45');
+INSERT INTO `sys_oper_log` VALUES (1612014983883808770, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612014983883808769\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/3a3488ceb5e24ef78e2283d976cfc5ab.jpg\",\"fileName\":\"【4K】马尔代夫日落3840x2160风景壁纸_彼岸图网.jpg\"}}', 0, '', '2023-01-08 17:14:57');
+INSERT INTO `sys_oper_log` VALUES (1612015015211065346, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612014983883808769\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":2,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:15:04');
+INSERT INTO `sys_oper_log` VALUES (1612015220677435393, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612014983883808769', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:15:53');
+INSERT INTO `sys_oper_log` VALUES (1612015247776833538, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612015247718113282\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/acfb70172d404da4a16e2fb02811363c.jpg\",\"fileName\":\"b.jpg\"}}', 0, '', '2023-01-08 17:16:00');
+INSERT INTO `sys_oper_log` VALUES (1612015254584188929, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612015247718113282\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":2,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:16:01');
+INSERT INTO `sys_oper_log` VALUES (1612015364521091074, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612015247718113282', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:16:27');
+INSERT INTO `sys_oper_log` VALUES (1612015427624394754, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612015427624394753\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/5acccb368dbe40e5b7fc4cee2f788048.jpg\",\"fileName\":\"QQ图片20210424191210.jpg\"}}', 0, '', '2023-01-08 17:16:42');
+INSERT INTO `sys_oper_log` VALUES (1612015439607521281, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612015427624394753\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":2,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:16:45');
+INSERT INTO `sys_oper_log` VALUES (1612015792923107329, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612015427624394753', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:18:10');
+INSERT INTO `sys_oper_log` VALUES (1612015820236414978, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612015820169306114\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/d494400f449045e49251ae78113ac802.jpg\",\"fileName\":\"grey-heron-5370732.jpg\"}}', 0, '', '2023-01-08 17:18:16');
+INSERT INTO `sys_oper_log` VALUES (1612015828583079938, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612015820169306114\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":2,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:18:18');
+INSERT INTO `sys_oper_log` VALUES (1612016821118984193, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612015820169306114\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:22:15');
+INSERT INTO `sys_oper_log` VALUES (1612019525245493249, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612019525182578690\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/ed00d10800f0447182092eafe911620c.jpg\",\"fileName\":\"b.jpg\"}}', 0, '', '2023-01-08 17:32:59');
+INSERT INTO `sys_oper_log` VALUES (1612019544329576449, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612019525182578690', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:33:04');
+INSERT INTO `sys_oper_log` VALUES (1612019947783872513, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612015820169306114', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:34:40');
+INSERT INTO `sys_oper_log` VALUES (1612020086342705154, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612019985264173058\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/ba512aa4942046338fae39a3e33e6702.jpg\",\"fileName\":\"diagoona-bg-3.jpg\"}}', 0, '', '2023-01-08 17:35:13');
+INSERT INTO `sys_oper_log` VALUES (1612020180232200194, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612019985264173058', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 17:35:36');
+INSERT INTO `sys_oper_log` VALUES (1612020205838426115, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612020205838426114\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/809c0a315f9f41a98a0046aea45d437b.jpg\",\"fileName\":\"diagoona-bg-21.jpg\"}}', 0, '', '2023-01-08 17:35:42');
+INSERT INTO `sys_oper_log` VALUES (1612030689757147138, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612030689601957890\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/08/3eef4a5464cc472e98c3f0f7622bf721.jpg\",\"fileName\":\"hos.jpg\"}}', 0, '', '2023-01-08 18:17:21');
+INSERT INTO `sys_oper_log` VALUES (1612031271494545409, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"2022-12-02\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 18:19:40');
+INSERT INTO `sys_oper_log` VALUES (1612038602492035073, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 18:48:48');
+INSERT INTO `sys_oper_log` VALUES (1612038674080415746, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 18:49:05');
+INSERT INTO `sys_oper_log` VALUES (1612038692724097026, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '', 1, '不允许重复提交,请稍候再试', '2023-01-08 18:49:09');
+INSERT INTO `sys_oper_log` VALUES (1612038704522674177, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 18:49:12');
+INSERT INTO `sys_oper_log` VALUES (1612040317941399554, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 18:55:37');
+INSERT INTO `sys_oper_log` VALUES (1612040455162249217, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryName\":\"正式\"}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( id, category_name, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\n; Data truncation: Out of range value for column \'id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1', '2023-01-08 18:56:09');
+INSERT INTO `sys_oper_log` VALUES (1612040578810331139, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryName\":\"正式\"}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( id, category_name, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\n; Data truncation: Out of range value for column \'id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1', '2023-01-08 18:56:39');
+INSERT INTO `sys_oper_log` VALUES (1612040823984177154, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryName\":\"正式\"}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( id, category_name, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\n; Data truncation: Out of range value for column \'id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1', '2023-01-08 18:57:37');
+INSERT INTO `sys_oper_log` VALUES (1612041146849116162, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryName\":\"正式\"}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( id, category_name, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\n; Data truncation: Out of range value for column \'id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1', '2023-01-08 18:58:54');
+INSERT INTO `sys_oper_log` VALUES (1612041197772161027, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryName\":\"正式\"}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( id, category_name, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\n; Data truncation: Out of range value for column \'id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1', '2023-01-08 18:59:06');
+INSERT INTO `sys_oper_log` VALUES (1612041845909594114, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":215,\"categoryName\":\"正式\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 19:01:41');
+INSERT INTO `sys_oper_log` VALUES (1612041926402482178, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/215', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 19:02:00');
+INSERT INTO `sys_oper_log` VALUES (1612041985789632513, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":216,\"categoryName\":\"springboot\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 19:02:14');
+INSERT INTO `sys_oper_log` VALUES (1612063439776227330, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":216,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 20:27:29');
+INSERT INTO `sys_oper_log` VALUES (1612063816231788545, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":217,\"categoryName\":\"mybatis\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 20:28:59');
+INSERT INTO `sys_oper_log` VALUES (1612067010504663042, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":216,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 20:41:41');
+INSERT INTO `sys_oper_log` VALUES (1612069008167772162, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":216,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 20:49:37');
+INSERT INTO `sys_oper_log` VALUES (1612071313596305409, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":216,\"categoryName\":\"mybatis\",\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 20:58:47');
+INSERT INTO `sys_oper_log` VALUES (1612072507148357633, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":217,\"categoryName\":\"mybatis\",\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 21:03:31');
+INSERT INTO `sys_oper_log` VALUES (1612072577054822401, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":null,\"categoryName\":\"666\",\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 21:03:48');
+INSERT INTO `sys_oper_log` VALUES (1612076693399347201, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":217,\"categoryName\":\"vue\",\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'create_time\' doesn\'t have a default value\r\n### The error may exist in file [G:\\桌面\\ftz-blog\\zhi-blog\\zhi-myblog\\target\\classes\\mapper\\category\\CategoryMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: insert into blog_category (category_name) values (?)\r\n### Cause: java.sql.SQLException: Field \'create_time\' doesn\'t have a default value\n; Field \'create_time\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'create_time\' doesn\'t have a default value', '2023-01-08 21:20:09');
+INSERT INTO `sys_oper_log` VALUES (1612077627307302913, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":218,\"categoryName\":\"vue\",\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 21:23:52');
+INSERT INTO `sys_oper_log` VALUES (1612095929475768321, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":216,\"categoryName\":\"springboot\",\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 22:36:36');
+INSERT INTO `sys_oper_log` VALUES (1612096014162960385, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"springboot\",\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-08 22:36:56');
+INSERT INTO `sys_oper_log` VALUES (1612283779408273410, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612283779278249985\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/09/2362e4e2d41b48218817a761fff30633.jpg\",\"fileName\":\"【4K】马尔代夫日落3840x2160风景壁纸_彼岸图网.jpg\"}}', 0, '', '2023-01-09 11:03:02');
+INSERT INTO `sys_oper_log` VALUES (1612289916572606465, '分类管理', 2, 'com.zhi.blog.controller.CategoryController.edit()', 'PUT', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":216,\"categoryName\":\"正式\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 11:27:26');
+INSERT INTO `sys_oper_log` VALUES (1612290027352563714, '分类管理', 2, 'com.zhi.blog.controller.CategoryController.edit()', 'PUT', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":217,\"categoryName\":\"付费\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 11:27:52');
+INSERT INTO `sys_oper_log` VALUES (1612290049561403394, '分类管理', 2, 'com.zhi.blog.controller.CategoryController.edit()', 'PUT', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":218,\"categoryName\":\"积分\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 11:27:57');
+INSERT INTO `sys_oper_log` VALUES (1612293804071657473, '标签管理', 1, 'com.zhi.blog.controller.TagController.add()', 'POST', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"tagName\":\"vue\"}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/TagMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TagMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_tag ( id, tag_name, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\n; Data truncation: Out of range value for column \'id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1', '2023-01-09 11:42:53');
+INSERT INTO `sys_oper_log` VALUES (1612294117579087873, '标签管理', 1, 'com.zhi.blog.controller.TagController.add()', 'POST', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"tagName\":\"vue\"}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TagMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TagMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_tag ( tag_name, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'id\' doesn\'t have a default value\n; Field \'id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'id\' doesn\'t have a default value', '2023-01-09 11:44:07');
+INSERT INTO `sys_oper_log` VALUES (1612294279378558977, '标签管理', 1, 'com.zhi.blog.controller.TagController.add()', 'POST', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":55,\"tagName\":\"vue\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 11:44:46');
+INSERT INTO `sys_oper_log` VALUES (1612294315587985410, '标签管理', 1, 'com.zhi.blog.controller.TagController.add()', 'POST', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":56,\"tagName\":\"springboot\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 11:44:54');
+INSERT INTO `sys_oper_log` VALUES (1612294341974351873, '标签管理', 1, 'com.zhi.blog.controller.TagController.add()', 'POST', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":57,\"tagName\":\"mybatis\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 11:45:01');
+INSERT INTO `sys_oper_log` VALUES (1612344316095709185, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tag\":[{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-08 15:01:53\",\"id\":54,\"tagName\":\"测试\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-09 11:44:46\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-09 11:44:46\",\"id\":55,\"tagName\":\"vue\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-09 11:44:54\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-09 11:44:54\",\"id\":56,\"tagName\":\"springboot\"}],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 15:03:36');
+INSERT INTO `sys_oper_log` VALUES (1612420656517939202, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagName\":null,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 20:06:57');
+INSERT INTO `sys_oper_log` VALUES (1612421604418060290, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagName\":null,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 20:10:42');
+INSERT INTO `sys_oper_log` VALUES (1612422019184394241, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagName\":null,\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 20:12:21');
+INSERT INTO `sys_oper_log` VALUES (1612422245802700801, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"888\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 20:13:15');
+INSERT INTO `sys_oper_log` VALUES (1612430337000947714, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"vue\",\"mybatis\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '', 1, 'nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select id from blog_tag b where b.tag_name = ?}\r\n### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select id from blog_tag b where b.tag_name = ?}', '2023-01-09 20:45:25');
+INSERT INTO `sys_oper_log` VALUES (1612431005149380609, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"vue\",\"mybatis\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '', 1, 'nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select id from blog_tag b where b.tag_name = ?}\r\n### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select id from blog_tag b where b.tag_name = ?}', '2023-01-09 20:48:04');
+INSERT INTO `sys_oper_log` VALUES (1612431169213714433, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"vue\",\"mybatis\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '', 1, 'nested exception is org.apache.ibatis.binding.BindingException: Parameter \'aid\' not found. Available parameters are [arg1, arg0, param1, param2]', '2023-01-09 20:48:43');
+INSERT INTO `sys_oper_log` VALUES (1612431394842128385, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"vue\",\"mybatis\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '', 1, 'nested exception is org.apache.ibatis.binding.BindingException: Parameter \'aid\' not found. Available parameters are [arg1, arg0, param1, param2]', '2023-01-09 20:49:37');
+INSERT INTO `sys_oper_log` VALUES (1612431672647659521, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"vue\",\"mybatis\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '', 1, 'nested exception is org.apache.ibatis.binding.BindingException: Parameter \'aid\' not found. Available parameters are [arg1, arg0, param1, param2]', '2023-01-09 20:50:43');
+INSERT INTO `sys_oper_log` VALUES (1612433223332192258, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"vue\",\"mybatis\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 20:56:53');
+INSERT INTO `sys_oper_log` VALUES (1612435826787020801, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"springboot\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 21:07:13');
+INSERT INTO `sys_oper_log` VALUES (1612435903685390338, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"springboot\",\"66\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 21:07:32');
+INSERT INTO `sys_oper_log` VALUES (1612437422572851202, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 21:13:34');
+INSERT INTO `sys_oper_log` VALUES (1612437522720247809, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"html\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":1,\"viewsCount\":8}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 21:13:58');
+INSERT INTO `sys_oper_log` VALUES (1612447695627112450, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":217,\"categoryName\":\"付费\",\"tagNameList\":[\"测试\",\"vue\",\"springboot\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 21:54:23');
+INSERT INTO `sys_oper_log` VALUES (1612447779588689922, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":219,\"categoryName\":\"爸爸\",\"tagNameList\":[\"测试\",\"vue\",\"springboot\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 21:54:43');
+INSERT INTO `sys_oper_log` VALUES (1612447948573003777, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\",\"vue\",\"springboot\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 21:55:23');
+INSERT INTO `sys_oper_log` VALUES (1612448008983564290, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 21:55:38');
+INSERT INTO `sys_oper_log` VALUES (1612448481962643457, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/219', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 21:57:31');
+INSERT INTO `sys_oper_log` VALUES (1612468977341059073, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-06 20:21:38\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-09 23:18:57\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1611336461808898048\",\"menuName\":\"文章列表\",\"orderNum\":2,\"path\":\"article\",\"component\":\"article/articleList/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"1\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"article:article:list\",\"icon\":\"list\",\"remark\":\"文章列表菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 23:18:57');
+INSERT INTO `sys_oper_log` VALUES (1612469013948944385, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-07 14:46:40\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-09 23:19:05\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1611613727679938560\",\"menuName\":\"分类管理\",\"orderNum\":3,\"path\":\"category\",\"component\":\"category/category/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"category:category:list\",\"icon\":\"table\",\"remark\":\"分类管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 23:19:06');
+INSERT INTO `sys_oper_log` VALUES (1612469037697093634, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-08 14:57:33\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-09 23:19:11\",\"parentName\":null,\"parentId\":\"1610972802922405889\",\"children\":[],\"menuId\":\"1611975928588574720\",\"menuName\":\"标签管理\",\"orderNum\":4,\"path\":\"tag\",\"component\":\"tag/tag/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"tag:tag:list\",\"icon\":\"icon\",\"remark\":\"标签管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-09 23:19:11');
+INSERT INTO `sys_oper_log` VALUES (1612686933299888129, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 13:45:02');
+INSERT INTO `sys_oper_log` VALUES (1612687071468650498, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"部署成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 13:45:35');
+INSERT INTO `sys_oper_log` VALUES (1612691681054883841, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":1,\"originalUrl\":\"1\",\"isTop\":0,\"isDelete\":0,\"status\":1,\"likeCount\":0,\"viewsCount\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 14:03:54');
+INSERT INTO `sys_oper_log` VALUES (1612695678658609154, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612695678591500290\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/7e831194ef4a4973b9c2de4ea2252a22.jpg\",\"fileName\":\"QQ图片20210424191204.jpg\"}}', 0, '', '2023-01-10 14:19:47');
+INSERT INTO `sys_oper_log` VALUES (1612695952194338817, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612695952131424258\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/374080dfc43c447a885c39285d0436f0.jpg\",\"fileName\":\"少女 樱花 屋子 4k动漫壁纸_彼岸图网.jpg\"}}', 0, '', '2023-01-10 14:20:52');
+INSERT INTO `sys_oper_log` VALUES (1612696685740359682, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612696685677445121\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/79162c525f064ec2b014fd628439ff83.jpg\",\"fileName\":\"b.jpg\"}}', 0, '', '2023-01-10 14:23:47');
+INSERT INTO `sys_oper_log` VALUES (1612699455767781378, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612696685677445121\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 14:34:47');
+INSERT INTO `sys_oper_log` VALUES (1612699959658881025, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612696685677445121\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 14:36:48');
+INSERT INTO `sys_oper_log` VALUES (1612702970615508993, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612696685677445121\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, 'For input string: \"sys_user:1\"', '2023-01-10 14:48:45');
+INSERT INTO `sys_oper_log` VALUES (1612703410769965058, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612696685677445121\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, 'For input string: \"sys_user:1\"', '2023-01-10 14:50:30');
+INSERT INTO `sys_oper_log` VALUES (1612703601988251650, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612696685677445121\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, 'For input string: \"sys_user:1\"', '2023-01-10 14:51:16');
+INSERT INTO `sys_oper_log` VALUES (1612704198657400833, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612696685677445121\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, 'class java.lang.String cannot be cast to class java.lang.Long (java.lang.String and java.lang.Long are in module java.base of loader \'bootstrap\')', '2023-01-10 14:53:38');
+INSERT INTO `sys_oper_log` VALUES (1612705924198240257, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612705924017885186\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/ea3a501330294556a2e0155759798c80.jpg\",\"fileName\":\"QQ图片20210424183800.jpg\"}}', 0, '', '2023-01-10 15:00:30');
+INSERT INTO `sys_oper_log` VALUES (1612705954372063233, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612705924017885186\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试666\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:00:37');
+INSERT INTO `sys_oper_log` VALUES (1612706398364307457, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612705924017885186\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试666\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, 'For input string: \"sys_user:1\"', '2023-01-10 15:02:23');
+INSERT INTO `sys_oper_log` VALUES (1612707381672755202, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612705924017885186\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试666\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:06:17');
+INSERT INTO `sys_oper_log` VALUES (1612707569581768706, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612705924017885186\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试666\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:07:02');
+INSERT INTO `sys_oper_log` VALUES (1612707630663417857, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612705924017885186\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试666\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:07:16');
+INSERT INTO `sys_oper_log` VALUES (1612707825014886401, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612705924017885186\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试666\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:08:03');
+INSERT INTO `sys_oper_log` VALUES (1612707959668822018, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612705924017885186\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试666\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:08:35');
+INSERT INTO `sys_oper_log` VALUES (1612708397495480321, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612705924017885186\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试666\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:10:19');
+INSERT INTO `sys_oper_log` VALUES (1612708512935309314, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612705924017885186\",\"articleTitle\":\"新增测试\",\"articleContent\":\"新增测试666\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:10:47');
+INSERT INTO `sys_oper_log` VALUES (1612710518190047234, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612710517921611777\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/ad1f6ae51b984e529863a1916b784b0f.jpg\",\"fileName\":\"QQ图片20210424183800.jpg\"}}', 0, '', '2023-01-10 15:18:45');
+INSERT INTO `sys_oper_log` VALUES (1612710537555148802, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612710517921611777\",\"articleTitle\":\"新增测试1\",\"articleContent\":\"新增测试文章\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:18:50');
+INSERT INTO `sys_oper_log` VALUES (1612710618089979906, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612710517921611777\",\"articleTitle\":\"新增测试1\",\"articleContent\":\"新增测试文章\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:19:09');
+INSERT INTO `sys_oper_log` VALUES (1612710664487370754, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612710517921611777\",\"articleTitle\":\"新增测试1\",\"articleContent\":\"新增测试文章\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:19:20');
+INSERT INTO `sys_oper_log` VALUES (1612710956725501954, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612710956658393089\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/6c9410da771e41fc8fa273ec581f6c30.jpg\",\"fileName\":\"QQ图片20210424183800.jpg\"}}', 0, '', '2023-01-10 15:20:29');
+INSERT INTO `sys_oper_log` VALUES (1612710968616353794, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612710956658393089\",\"articleTitle\":\"新增测试文章\",\"articleContent\":\"测试文章新增\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:20:32');
+INSERT INTO `sys_oper_log` VALUES (1612711228587704322, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612710956658393089\",\"articleTitle\":\"新增测试文章\",\"articleContent\":\"测试文章新增\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:21:34');
+INSERT INTO `sys_oper_log` VALUES (1612711355960328194, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612710956658393089\",\"articleTitle\":\"新增测试文章\",\"articleContent\":\"测试文章新增\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:22:05');
+INSERT INTO `sys_oper_log` VALUES (1612711586546393090, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612710956658393089\",\"articleTitle\":\"新增测试文章\",\"articleContent\":\"测试文章新增\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article ( category_id, article_cover, article_title, article_content, type, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-10 15:23:00');
+INSERT INTO `sys_oper_log` VALUES (1612711780662910977, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":140,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612710956658393089\",\"articleTitle\":\"新增测试文章\",\"articleContent\":\"测试文章新增\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 15:23:46');
+INSERT INTO `sys_oper_log` VALUES (1612711926775685122, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":140,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"html\"],\"articleCover\":\"1612710956658393089\",\"articleTitle\":\"新增测试文章\",\"articleContent\":\"测试文章新增\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 15:24:21');
+INSERT INTO `sys_oper_log` VALUES (1612719243856457730, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"html\",\"springboot\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 15:53:25');
+INSERT INTO `sys_oper_log` VALUES (1612719310415867906, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 15:53:41');
+INSERT INTO `sys_oper_log` VALUES (1612719497125310466, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612719497062395905\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/97c978766c91400ea22d493e5f70f73f.jpg\",\"fileName\":\"QQ图片20210424183727.jpg\"}}', 0, '', '2023-01-10 15:54:26');
+INSERT INTO `sys_oper_log` VALUES (1612719512015089666, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":1,\"categoryId\":null,\"categoryName\":\"新的\",\"tagNameList\":[\"新的\"],\"articleCover\":\"1612719497062395905\",\"articleTitle\":\"新的新增测试\",\"articleContent\":\"新的新增测试啦啦啦\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insertById-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article_tag(article_id,tag_id) VALUES(?,?)\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\n; Column \'article_id\' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null', '2023-01-10 15:54:29');
+INSERT INTO `sys_oper_log` VALUES (1612720191672692737, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":1,\"categoryId\":null,\"categoryName\":\"新的\",\"tagNameList\":[\"新的\"],\"articleCover\":\"1612719497062395905\",\"articleTitle\":\"新的新增测试\",\"articleContent\":\"新的新增测试啦啦啦\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insertById-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article_tag(article_id,tag_id) VALUES(?,?)\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\n; Column \'article_id\' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null', '2023-01-10 15:57:11');
+INSERT INTO `sys_oper_log` VALUES (1612720564932194305, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":1,\"categoryId\":null,\"categoryName\":\"新的\",\"tagNameList\":[\"新的\"],\"articleCover\":\"1612719497062395905\",\"articleTitle\":\"新的新增测试\",\"articleContent\":\"新的新增测试啦啦啦\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insertById-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article_tag(article_id,tag_id) VALUES(?,?)\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\n; Column \'article_id\' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null', '2023-01-10 15:58:40');
+INSERT INTO `sys_oper_log` VALUES (1612720748084867074, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":1,\"categoryId\":null,\"categoryName\":\"新的\",\"tagNameList\":[\"新的\"],\"articleCover\":\"1612719497062395905\",\"articleTitle\":\"新的新增测试\",\"articleContent\":\"新的新增测试啦啦啦\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insertById-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article_tag(article_id,tag_id) VALUES(?,?)\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\n; Column \'article_id\' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null', '2023-01-10 15:59:24');
+INSERT INTO `sys_oper_log` VALUES (1612721222217379842, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":1,\"categoryId\":null,\"categoryName\":\"新的\",\"tagNameList\":[\"新的\"],\"articleCover\":\"1612719497062395905\",\"articleTitle\":\"新的新增测试\",\"articleContent\":\"新的新增测试啦啦啦\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insertById-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article_tag(article_id,tag_id) VALUES(?,?)\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\n; Column \'article_id\' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null', '2023-01-10 16:01:17');
+INSERT INTO `sys_oper_log` VALUES (1612721915804266497, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":220,\"categoryName\":\"新的\",\"tagNameList\":[\"springboot\",\"vue\",\"新的\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:04:02');
+INSERT INTO `sys_oper_log` VALUES (1612722381791440897, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/220', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:05:53');
+INSERT INTO `sys_oper_log` VALUES (1612722453367238657, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":220,\"categoryName\":null,\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\n; Field \'category_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'category_name\' doesn\'t have a default value', '2023-01-10 16:06:10');
+INSERT INTO `sys_oper_log` VALUES (1612722628269715457, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":220,\"categoryName\":null,\"tagNameList\":[\"springboot\",\"vue\",\"新的\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\n; Field \'category_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'category_name\' doesn\'t have a default value', '2023-01-10 16:06:52');
+INSERT INTO `sys_oper_log` VALUES (1612722794951356418, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\",\"新的\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:07:32');
+INSERT INTO `sys_oper_log` VALUES (1612722967383388162, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":221,\"categoryName\":\"新的\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:08:13');
+INSERT INTO `sys_oper_log` VALUES (1612723014258929666, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":221,\"categoryName\":\"新的\",\"tagNameList\":[\"springboot\",\"vue\",\"新的\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:08:24');
+INSERT INTO `sys_oper_log` VALUES (1612723053760884738, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/221', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:08:34');
+INSERT INTO `sys_oper_log` VALUES (1612723376348999681, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/60', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:09:51');
+INSERT INTO `sys_oper_log` VALUES (1612724795189768193, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/58', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:15:29');
+INSERT INTO `sys_oper_log` VALUES (1612729012243722241, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/59', '127.0.0.1', '内网IP', '{}', '', 1, 'nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select count(*) from blog_article_tag where tag_id = ? )\r\n### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select count(*) from blog_article_tag where tag_id = ? )', '2023-01-10 16:32:14');
+INSERT INTO `sys_oper_log` VALUES (1612729228552368130, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/59', '127.0.0.1', '内网IP', '{}', '', 1, 'nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select count(*) from blog_article_tag where tag_id = ? )\r\n### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select count(*) from blog_article_tag where tag_id = ? )', '2023-01-10 16:33:06');
+INSERT INTO `sys_oper_log` VALUES (1612729419275759617, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/59', '127.0.0.1', '内网IP', '{}', '', 1, 'nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select count(*) from blog_article_tag where tag_id = ? )\r\n### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select count(*) from blog_article_tag where tag_id = ? )', '2023-01-10 16:33:51');
+INSERT INTO `sys_oper_log` VALUES (1612729637027246081, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/59', '127.0.0.1', '内网IP', '{}', '', 1, 'nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select count(*) from blog_article_tag where tag_id = ? )\r\n### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: select count(*) from blog_article_tag where tag_id = ? )', '2023-01-10 16:34:43');
+INSERT INTO `sys_oper_log` VALUES (1612729889964736514, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/59', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"请先修改与该标签对应的文章\",\"data\":null}', 0, '', '2023-01-10 16:35:43');
+INSERT INTO `sys_oper_log` VALUES (1612730289178570754, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/59', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"已有文章对应该标签,无法删除\",\"data\":null}', 0, '', '2023-01-10 16:37:19');
+INSERT INTO `sys_oper_log` VALUES (1612730430824411137, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/57', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:37:52');
+INSERT INTO `sys_oper_log` VALUES (1612730777135509506, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"html\"],\"articleCover\":\"1612030689601957890\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:39:15');
+INSERT INTO `sys_oper_log` VALUES (1612731173878919170, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:40:50');
+INSERT INTO `sys_oper_log` VALUES (1612731416804618241, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":222,\"categoryName\":\"新的\",\"tagNameList\":[\"springboot\",\"vue\",\"新的\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:41:48');
+INSERT INTO `sys_oper_log` VALUES (1612731565245231106, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/61', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"已有文章对应该标签,无法删除\",\"data\":null}', 0, '', '2023-01-10 16:42:23');
+INSERT INTO `sys_oper_log` VALUES (1612731587626037250, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/61', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"已有文章对应该标签,无法删除\",\"data\":null}', 0, '', '2023-01-10 16:42:28');
+INSERT INTO `sys_oper_log` VALUES (1612731709780946945, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/61', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"已有文章对应该标签,无法删除\",\"data\":null}', 0, '', '2023-01-10 16:42:57');
+INSERT INTO `sys_oper_log` VALUES (1612731830732091393, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/222', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:43:26');
+INSERT INTO `sys_oper_log` VALUES (1612731863913230338, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\",\"新的\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:43:34');
+INSERT INTO `sys_oper_log` VALUES (1612731906019848193, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:43:44');
+INSERT INTO `sys_oper_log` VALUES (1612731938768973826, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/61', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:43:52');
+INSERT INTO `sys_oper_log` VALUES (1612732987181395969, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612732987122675713\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/411d45bd7c324201a2a5d543491c5f77.jpg\",\"fileName\":\"hos.jpg\"}}', 0, '', '2023-01-10 16:48:02');
+INSERT INTO `sys_oper_log` VALUES (1612733000938713089, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":1,\"categoryId\":null,\"categoryName\":\"新的测试\",\"tagNameList\":[\"新的测试\"],\"articleCover\":\"1612732987122675713\",\"articleTitle\":\"新的测试\",\"articleContent\":\"## 新的测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insertById-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article_tag(article_id,tag_id) VALUES(?,?)\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\n; Column \'article_id\' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null', '2023-01-10 16:48:05');
+INSERT INTO `sys_oper_log` VALUES (1612734226174603266, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":1,\"categoryId\":null,\"categoryName\":\"新的测试\",\"tagNameList\":[\"新的测试\"],\"articleCover\":\"1612732987122675713\",\"articleTitle\":\"新的测试\",\"articleContent\":\"## 新的测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\r\n### The error may exist in com/zhi/blog/mapper/ArticleMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.ArticleMapper.insertById-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_article_tag(article_id,tag_id) VALUES(?,?)\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null\n; Column \'article_id\' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column \'article_id\' cannot be null', '2023-01-10 16:52:57');
+INSERT INTO `sys_oper_log` VALUES (1612734550901813249, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\",\"新的\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:54:15');
+INSERT INTO `sys_oper_log` VALUES (1612734600759504897, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/63', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"已有文章对应该标签,无法删除\",\"data\":null}', 0, '', '2023-01-10 16:54:27');
+INSERT INTO `sys_oper_log` VALUES (1612734641393922050, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:54:36');
+INSERT INTO `sys_oper_log` VALUES (1612734676005318657, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/63', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 16:54:45');
+INSERT INTO `sys_oper_log` VALUES (1612740241414733826, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":223,\"categoryName\":\"新的测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:16:51');
+INSERT INTO `sys_oper_log` VALUES (1612740262306562049, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/223', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:16:56');
+INSERT INTO `sys_oper_log` VALUES (1612740294661423105, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章666\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:17:04');
+INSERT INTO `sys_oper_log` VALUES (1612740319223267329, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/62', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:17:10');
+INSERT INTO `sys_oper_log` VALUES (1612740474215383042, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612740474085359618\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/9487a03afd7647949633c8be9b8bca28.jpg\",\"fileName\":\"QQ图片20210424183800.jpg\"}}', 0, '', '2023-01-10 17:17:47');
+INSERT INTO `sys_oper_log` VALUES (1612740486726991873, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":141,\"userId\":1,\"categoryId\":224,\"categoryName\":\"最后测试\",\"tagNameList\":[\"最后测试\"],\"articleCover\":\"1612740474085359618\",\"articleTitle\":\"最后的测试\",\"articleContent\":\"最后的测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:17:50');
+INSERT INTO `sys_oper_log` VALUES (1612740611645947906, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/141', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:18:20');
+INSERT INTO `sys_oper_log` VALUES (1612740643283582977, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/224', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:18:27');
+INSERT INTO `sys_oper_log` VALUES (1612740659750420482, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/64', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"已有文章对应此标签,无法删除\",\"data\":null}', 0, '', '2023-01-10 17:18:31');
+INSERT INTO `sys_oper_log` VALUES (1612740799412355073, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/64', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"已有文章对应此标签,无法删除\",\"data\":null}', 0, '', '2023-01-10 17:19:05');
+INSERT INTO `sys_oper_log` VALUES (1612740953850822657, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/64', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:19:41');
+INSERT INTO `sys_oper_log` VALUES (1612741710532702210, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":140,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"html\",\"最终测试\"],\"articleCover\":\"1612710956658393089\",\"articleTitle\":\"新增测试文章\",\"articleContent\":\"测试文章新增\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:22:42');
+INSERT INTO `sys_oper_log` VALUES (1612741739200770049, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/65', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"已有文章对应此标签,无法删除\",\"data\":null}', 0, '', '2023-01-10 17:22:49');
+INSERT INTO `sys_oper_log` VALUES (1612741772428046338, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/140', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:22:56');
+INSERT INTO `sys_oper_log` VALUES (1612741788207017985, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/65', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:23:00');
+INSERT INTO `sys_oper_log` VALUES (1612742639868833794, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612009288484544513\",\"articleTitle\":\"测试文章\",\"articleContent\":\"这一次我一定要成功\",\"type\":2,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:26:23');
+INSERT INTO `sys_oper_log` VALUES (1612742812690935809, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612742812628021250\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/a4e7cd098c6d4afa8ded437288ce8c22.jpg\",\"fileName\":\"QQ图片20210424183800.jpg\"}}', 0, '', '2023-01-10 17:27:05');
+INSERT INTO `sys_oper_log` VALUES (1612742826859294721, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":142,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"测试\"],\"articleCover\":\"1612742812628021250\",\"articleTitle\":\"NEW\",\"articleContent\":\"NEW\",\"type\":3,\"originalUrl\":null,\"isDelete\":0,\"status\":2}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:27:08');
+INSERT INTO `sys_oper_log` VALUES (1612742859516145665, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/142', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 17:27:16');
+INSERT INTO `sys_oper_log` VALUES (1612748733320130562, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612748733253021697\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/3acf65d19bcd4fa18ec3847f3d0c90be.jpg\",\"fileName\":\"b.jpg\"}}', 0, '', '2023-01-10 17:50:36');
+INSERT INTO `sys_oper_log` VALUES (1612756503863881730, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 20:13:41\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 18:21:28\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1610972802922405889\",\"menuName\":\"文章管理\",\"orderNum\":1,\"path\":\"article\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"education\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 18:21:29');
+INSERT INTO `sys_oper_log` VALUES (1612756556611448834, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 18:21:41\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":1,\"menuName\":\"系统管理\",\"orderNum\":2,\"path\":\"system\",\"component\":null,\"queryParam\":\"\",\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"\",\"icon\":\"system\",\"remark\":\"系统管理目录\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 18:21:41');
+INSERT INTO `sys_oper_log` VALUES (1612780988134453250, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612710956658393089', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:58:46');
+INSERT INTO `sys_oper_log` VALUES (1612781012268478465, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612719497062395905', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:58:52');
+INSERT INTO `sys_oper_log` VALUES (1612781023395966977, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612732987122675713', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:58:55');
+INSERT INTO `sys_oper_log` VALUES (1612781042282917890, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612009288484544513', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:58:59');
+INSERT INTO `sys_oper_log` VALUES (1612781051376168961, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612020205838426114', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:01');
+INSERT INTO `sys_oper_log` VALUES (1612781061702545410, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612030689601957890', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:04');
+INSERT INTO `sys_oper_log` VALUES (1612781068602175490, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612283779278249985', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:05');
+INSERT INTO `sys_oper_log` VALUES (1612781075120123906, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612695678591500290', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:07');
+INSERT INTO `sys_oper_log` VALUES (1612781080820183041, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612695952131424258', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:08');
+INSERT INTO `sys_oper_log` VALUES (1612781088097300481, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612696685677445121', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:10');
+INSERT INTO `sys_oper_log` VALUES (1612781095118565377, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612705924017885186', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:12');
+INSERT INTO `sys_oper_log` VALUES (1612781101837840386, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612710517921611777', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:13');
+INSERT INTO `sys_oper_log` VALUES (1612781109261758466, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612740474085359618', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:15');
+INSERT INTO `sys_oper_log` VALUES (1612781118828965889, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612742812628021250', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:17');
+INSERT INTO `sys_oper_log` VALUES (1612781129033707521, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612748733253021697', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 19:59:20');
+INSERT INTO `sys_oper_log` VALUES (1612781294230564865, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612009288484544513', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"操作失败\",\"data\":null}', 0, '', '2023-01-10 19:59:59');
+INSERT INTO `sys_oper_log` VALUES (1612781375247740930, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612781375180632066\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg\",\"fileName\":\"QQ图片20210424191151.jpg\"}}', 0, '', '2023-01-10 20:00:19');
+INSERT INTO `sys_oper_log` VALUES (1612781392805097473, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612781375180632066\",\"articleTitle\":\"测试文章\",\"articleContent\":\"这一次我一定要成功\",\"type\":1,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 20:00:23');
+INSERT INTO `sys_oper_log` VALUES (1612783832598179842, '对象存储配置', 2, 'com.zhi.web.controller.system.SysOssConfigController.edit()', 'PUT', 1, 'admin', '', '/system/oss/config', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":2,\"configKey\":\"qiniu\",\"accessKey\":\"DLH4FnygkdCqfAKwQFxFwx2QrGTf0pJGDzDXYNQh\",\"secretKey\":\"zRpC1Xdf0Dc98u470lLh1k0XoE_l40ZDWF6gpNwn\",\"bucketName\":\"420-image\",\"prefix\":\"\",\"endpoint\":\"s3-cn-north-1.qiniucs.com\",\"domain\":\"\",\"isHttps\":\"N\",\"status\":\"1\",\"region\":\"\",\"ext1\":\"\",\"remark\":null,\"accessPolicy\":\"1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 20:10:04');
+INSERT INTO `sys_oper_log` VALUES (1612783883315703809, '对象存储状态修改', 2, 'com.zhi.web.controller.system.SysOssConfigController.changeStatus()', 'PUT', 1, 'admin', '', '/system/oss/config/changeStatus', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":2,\"configKey\":\"qiniu\",\"accessKey\":null,\"secretKey\":null,\"bucketName\":null,\"prefix\":null,\"endpoint\":null,\"domain\":null,\"isHttps\":null,\"status\":\"0\",\"region\":null,\"ext1\":null,\"remark\":null,\"accessPolicy\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 20:10:17');
+INSERT INTO `sys_oper_log` VALUES (1612783932170956802, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612783932108042241\",\"url\":\"http://420-image.s3-cn-north-1.qiniucs.com/2023/01/10/e9b738e3ea884802aaeb1fd9eb4efe3a.jpg\",\"fileName\":\"QQ图片20210424191204.jpg\"}}', 0, '', '2023-01-10 20:10:28');
+INSERT INTO `sys_oper_log` VALUES (1612786512188010498, '对象存储配置', 2, 'com.zhi.web.controller.system.SysOssConfigController.edit()', 'PUT', 1, 'admin', '', '/system/oss/config', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":1,\"configKey\":\"minio\",\"accessKey\":\"WmyGewy8Cv3vJNQD\",\"secretKey\":\"LMBPaqaR2DJKlabmjZg5ys3pCJzSE82v\",\"bucketName\":\"ruoyi\",\"prefix\":\"\",\"endpoint\":\"127.0.0.1:9000\",\"domain\":\"\",\"isHttps\":\"N\",\"status\":\"1\",\"region\":\"\",\"ext1\":\"\",\"remark\":null,\"accessPolicy\":\"1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 20:20:43');
+INSERT INTO `sys_oper_log` VALUES (1612786736969150465, '对象存储配置', 2, 'com.zhi.web.controller.system.SysOssConfigController.edit()', 'PUT', 1, 'admin', '', '/system/oss/config', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":1,\"configKey\":\"minio\",\"accessKey\":\"WmyGewy8Cv3vJNQD\",\"secretKey\":\"LMBPaqaR2DJKlabmjZg5ys3pCJzSE82v\",\"bucketName\":\"ruoyi\",\"prefix\":\"\",\"endpoint\":\"127.0.0.1:9000\",\"domain\":\"\",\"isHttps\":\"N\",\"status\":\"1\",\"region\":\"\",\"ext1\":\"\",\"remark\":\"\",\"accessPolicy\":\"1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 20:21:37');
+INSERT INTO `sys_oper_log` VALUES (1612786747094200321, '对象存储状态修改', 2, 'com.zhi.web.controller.system.SysOssConfigController.changeStatus()', 'PUT', 1, 'admin', '', '/system/oss/config/changeStatus', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":1,\"configKey\":\"minio\",\"accessKey\":null,\"secretKey\":null,\"bucketName\":null,\"prefix\":null,\"endpoint\":null,\"domain\":null,\"isHttps\":null,\"status\":\"0\",\"region\":null,\"ext1\":null,\"remark\":null,\"accessPolicy\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 20:21:39');
+INSERT INTO `sys_oper_log` VALUES (1612786835128446978, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1612786835128446977\",\"url\":\"http://127.0.0.1:9000/ruoyi/2023/01/10/602f608660bf4ce9ac85fb4aceee2a04.jpg\",\"fileName\":\"QQ图片20210424183727.jpg\"}}', 0, '', '2023-01-10 20:22:00');
+INSERT INTO `sys_oper_log` VALUES (1612787286074847234, '对象存储状态修改', 2, 'com.zhi.web.controller.system.SysOssConfigController.changeStatus()', 'PUT', 1, 'admin', '', '/system/oss/config/changeStatus', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":3,\"configKey\":\"aliyun\",\"accessKey\":null,\"secretKey\":null,\"bucketName\":null,\"prefix\":null,\"endpoint\":null,\"domain\":null,\"isHttps\":null,\"status\":\"0\",\"region\":null,\"ext1\":null,\"remark\":null,\"accessPolicy\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 20:23:48');
+INSERT INTO `sys_oper_log` VALUES (1612787314940047362, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612783932108042241', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 20:23:55');
+INSERT INTO `sys_oper_log` VALUES (1612787323756474369, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612786835128446977', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 20:23:57');
+INSERT INTO `sys_oper_log` VALUES (1612801785548894210, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:21:24\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:21:24\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1612801785548894209\",\"menuName\":\"消息管理\",\"orderNum\":2,\"path\":\"/message\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"message\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:21:25');
+INSERT INTO `sys_oper_log` VALUES (1612801946857631754, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_comment\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:22:03');
+INSERT INTO `sys_oper_log` VALUES (1612802180614582274, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:22:58\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1612801946723414017\",\"tableName\":\"blog_comment\",\"tableComment\":\"评论管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Comment\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"comment\",\"businessName\":\"comment\",\"functionName\":\"评论管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:22:58\",\"columnId\":\"1612801946790522881\",\"tableId\":\"1612801946723414017\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"pk\":true,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:22:58\",\"columnId\":\"1612801946790522882\",\"tableId\":\"1612801946723414017\",\"columnName\":\"user_id\",\"columnComment\":\"评论用户Id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"pk\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:22:58\",\"columnId\":\"1612801946790522883\",\"tableId\":\"1612801946723414017\",\"columnName\":\"comment_content\",\"columnComment\":\"评论内容\",\"columnType\":\"text\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:22:59');
+INSERT INTO `sys_oper_log` VALUES (1612802976722841602, '字典类型', 1, 'com.zhi.web.controller.system.SysDictTypeController.add()', 'POST', 1, 'admin', '', '/system/dict/type', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:26:08\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:26:08\",\"dictId\":\"1612802976722841601\",\"dictName\":\"评论类型\",\"dictType\":\"commentype\",\"status\":\"0\",\"remark\":\"评论类型\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:26:09');
+INSERT INTO `sys_oper_log` VALUES (1612803250258571266, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:27:13\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:27:13\",\"dictCode\":\"1612803250258571265\",\"dictSort\":0,\"dictLabel\":\"文章\",\"dictValue\":\"1\",\"dictType\":\"commentype\",\"cssClass\":null,\"listClass\":\"primary\",\"isDefault\":null,\"status\":\"0\",\"remark\":\"文章\",\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:27:14');
+INSERT INTO `sys_oper_log` VALUES (1612803354105344002, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:27:38\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:27:38\",\"dictCode\":\"1612803354046623746\",\"dictSort\":0,\"dictLabel\":\"友链\",\"dictValue\":\"2\",\"dictType\":\"commentype\",\"cssClass\":null,\"listClass\":\"info\",\"isDefault\":null,\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:27:39');
+INSERT INTO `sys_oper_log` VALUES (1612803386770583554, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:27:39\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:27:46\",\"dictCode\":\"1612803354046623746\",\"dictSort\":0,\"dictLabel\":\"友链\",\"dictValue\":\"2\",\"dictType\":\"commentype\",\"cssClass\":null,\"listClass\":\"success\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":null,\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:27:47');
+INSERT INTO `sys_oper_log` VALUES (1612803473668173825, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:28:07\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:28:07\",\"dictCode\":\"1612803473601064961\",\"dictSort\":0,\"dictLabel\":\"说说\",\"dictValue\":\"3\",\"dictType\":\"commentype\",\"cssClass\":null,\"listClass\":\"warning\",\"isDefault\":null,\"status\":\"0\",\"remark\":\"说说\",\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:28:07');
+INSERT INTO `sys_oper_log` VALUES (1612803517423153154, '字典数据', 2, 'com.zhi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:27:39\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:28:17\",\"dictCode\":\"1612803354046623746\",\"dictSort\":0,\"dictLabel\":\"友链\",\"dictValue\":\"2\",\"dictType\":\"commentype\",\"cssClass\":null,\"listClass\":\"success\",\"isDefault\":\"N\",\"status\":\"0\",\"remark\":\"友链\",\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:28:18');
+INSERT INTO `sys_oper_log` VALUES (1612805147610705921, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:34:46\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1612801946723414017\",\"tableName\":\"blog_comment\",\"tableComment\":\"评论管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Comment\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"comment\",\"businessName\":\"comment\",\"functionName\":\"评论管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:34:46\",\"columnId\":\"1612801946790522881\",\"tableId\":\"1612801946723414017\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"pk\":true,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:34:46\",\"columnId\":\"1612801946790522882\",\"tableId\":\"1612801946723414017\",\"columnName\":\"user_id\",\"columnComment\":\"评论用户Id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"pk\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:34:46\",\"columnId\":\"1612801946790522883\",\"tableId\":\"1612801946723414017\",\"columnName\":\"comment_content\",\"columnComment\":\"评论内容\",\"columnType\":\"text\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:34:46');
+INSERT INTO `sys_oper_log` VALUES (1612808863181041666, '字典类型', 1, 'com.zhi.web.controller.system.SysDictTypeController.add()', 'POST', 1, 'admin', '', '/system/dict/type', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:49:32\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:49:32\",\"dictId\":\"1612808863113932801\",\"dictName\":\"评论状态\",\"dictType\":\"comment_status\",\"status\":\"0\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:49:32');
+INSERT INTO `sys_oper_log` VALUES (1612808926083018754, '字典类型', 2, 'com.zhi.web.controller.system.SysDictTypeController.edit()', 'PUT', 1, 'admin', '', '/system/dict/type', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:26:09\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:49:47\",\"dictId\":13,\"dictName\":\"评论类型\",\"dictType\":\"commen_type\",\"status\":\"0\",\"remark\":\"评论类型\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:49:47');
+INSERT INTO `sys_oper_log` VALUES (1612809114323382273, '字典类型', 2, 'com.zhi.web.controller.system.SysDictTypeController.edit()', 'PUT', 1, 'admin', '', '/system/dict/type', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:49:32\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:50:32\",\"dictId\":14,\"dictName\":\"评论状态\",\"dictType\":\"comment_status\",\"status\":\"0\",\"remark\":\"评论状态\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:50:32');
+INSERT INTO `sys_oper_log` VALUES (1612809327414996993, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:51:22\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:51:22\",\"dictCode\":\"1612809327352082433\",\"dictSort\":0,\"dictLabel\":\"审核通过\",\"dictValue\":\"1\",\"dictType\":\"comment_status\",\"cssClass\":null,\"listClass\":\"success\",\"isDefault\":null,\"status\":\"0\",\"remark\":\"审核通过\",\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:51:23');
+INSERT INTO `sys_oper_log` VALUES (1612809446243823617, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:51:51\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:51:51\",\"dictCode\":\"1612809446180909057\",\"dictSort\":0,\"dictLabel\":\"审核中\",\"dictValue\":\"2\",\"dictType\":\"comment_status\",\"cssClass\":null,\"listClass\":\"primary\",\"isDefault\":null,\"status\":\"0\",\"remark\":\"审核中\",\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:51:51');
+INSERT INTO `sys_oper_log` VALUES (1612809531824402434, '字典数据', 1, 'com.zhi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:52:11\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:52:11\",\"dictCode\":\"1612809531757293569\",\"dictSort\":0,\"dictLabel\":\"未通过审核\",\"dictValue\":\"3\",\"dictType\":\"comment_status\",\"cssClass\":null,\"listClass\":\"danger\",\"isDefault\":null,\"status\":\"0\",\"remark\":\"审核不通过\",\"default\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:52:12');
+INSERT INTO `sys_oper_log` VALUES (1612809866806685698, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:53:31\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1612801946723414017\",\"tableName\":\"blog_comment\",\"tableComment\":\"评论管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Comment\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"comment\",\"businessName\":\"comment\",\"functionName\":\"评论管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:53:31\",\"columnId\":\"1612801946790522881\",\"tableId\":\"1612801946723414017\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"pk\":true,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:53:31\",\"columnId\":\"1612801946790522882\",\"tableId\":\"1612801946723414017\",\"columnName\":\"user_id\",\"columnComment\":\"评论用户Id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"pk\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:53:31\",\"columnId\":\"1612801946790522883\",\"tableId\":\"1612801946723414017\",\"columnName\":\"comment_content\",\"columnComment\":\"评论内容\",\"columnType\":\"text\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:53:31');
+INSERT INTO `sys_oper_log` VALUES (1612809899010551811, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_comment', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:53:39');
+INSERT INTO `sys_oper_log` VALUES (1612810027997982722, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:54:09\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1612801946723414017\",\"tableName\":\"blog_comment\",\"tableComment\":\"评论管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Comment\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"comment\",\"businessName\":\"comment\",\"functionName\":\"评论管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:54:09\",\"columnId\":\"1612801946790522881\",\"tableId\":\"1612801946723414017\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"pk\":true,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:54:09\",\"columnId\":\"1612801946790522882\",\"tableId\":\"1612801946723414017\",\"columnName\":\"user_id\",\"columnComment\":\"评论用户Id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"superColumn\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"pk\":false,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 21:54:09\",\"columnId\":\"1612801946790522883\",\"tableId\":\"1612801946723414017\",\"columnName\":\"comment_content\",\"columnComment\":\"评论内容\",\"columnType\":\"text\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 21:54:10');
+INSERT INTO `sys_oper_log` VALUES (1612810101087924225, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_comment\"}', '', 0, '', '2023-01-10 21:54:27');
+INSERT INTO `sys_oper_log` VALUES (1612811822207893505, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_comment', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 22:01:18');
+INSERT INTO `sys_oper_log` VALUES (1612811903199903745, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:01:36\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1612801946723414017\",\"tableName\":\"blog_comment\",\"tableComment\":\"评论管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Comment\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"comment\",\"businessName\":\"comment\",\"functionName\":\"评论管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:01:36\",\"columnId\":\"1612801946790522881\",\"tableId\":\"1612801946723414017\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":false,\"list\":true,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:01:36\",\"columnId\":\"1612801946790522882\",\"tableId\":\"1612801946723414017\",\"columnName\":\"user_id\",\"columnComment\":\"评论用户Id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":true,\"list\":true,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:01:36\",\"columnId\":\"1612801946790522883\",\"tableId\":\"1612801946723414017\",\"columnName\":\"comment_content\",\"columnComment\":\"评论内容\",\"columnType\":\"text\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 22:01:37');
+INSERT INTO `sys_oper_log` VALUES (1612812816593502209, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_comment', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 22:05:15');
+INSERT INTO `sys_oper_log` VALUES (1612812888873943042, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:05:31\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1612801946723414017\",\"tableName\":\"blog_comment\",\"tableComment\":\"评论管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Comment\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"comment\",\"businessName\":\"comment\",\"functionName\":\"评论管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:05:31\",\"columnId\":\"1612801946790522881\",\"tableId\":\"1612801946723414017\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"insert\":false,\"usableColumn\":false,\"edit\":true,\"superColumn\":false,\"capJavaField\":\"Id\",\"query\":false,\"increment\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:05:31\",\"columnId\":\"1612801946790522882\",\"tableId\":\"1612801946723414017\",\"columnName\":\"user_id\",\"columnComment\":\"评论用户Id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"insert\":true,\"usableColumn\":false,\"edit\":true,\"superColumn\":false,\"capJavaField\":\"UserId\",\"query\":true,\"increment\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:05:31\",\"columnId\":\"1612801946790522883\",\"tableId\":\"1612801946723414017\",\"columnName\":\"comment_content\",\"columnComment\":\"评论内容\",\"columnType\":\"text\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 22:05:32');
+INSERT INTO `sys_oper_log` VALUES (1612816099190022146, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_comment', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 22:18:17');
+INSERT INTO `sys_oper_log` VALUES (1612816206497095682, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:18:42\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1612801946723414017\",\"tableName\":\"blog_comment\",\"tableComment\":\"评论管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Comment\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"comment\",\"businessName\":\"comment\",\"functionName\":\"评论管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:18:42\",\"columnId\":\"1612801946790522881\",\"tableId\":\"1612801946723414017\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"insert\":false,\"superColumn\":false,\"edit\":true,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:18:42\",\"columnId\":\"1612801946790522882\",\"tableId\":\"1612801946723414017\",\"columnName\":\"user_id\",\"columnComment\":\"评论用户Id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"insert\":true,\"superColumn\":false,\"edit\":true,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:18:42\",\"columnId\":\"1612801946790522883\",\"tableId\":\"1612801946723414017\",\"columnName\":\"comment_content\",\"columnComment\":\"评论内容\",\"columnType\":\"text\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 22:18:43');
+INSERT INTO `sys_oper_log` VALUES (1612818046714429441, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_comment', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 22:26:02');
+INSERT INTO `sys_oper_log` VALUES (1612818139198832641, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:26:23\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1612801946723414017\",\"tableName\":\"blog_comment\",\"tableComment\":\"评论管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Comment\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"comment\",\"businessName\":\"comment\",\"functionName\":\"评论管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:26:23\",\"columnId\":\"1612801946790522881\",\"tableId\":\"1612801946723414017\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:26:23\",\"columnId\":\"1612801946790522882\",\"tableId\":\"1612801946723414017\",\"columnName\":\"user_id\",\"columnComment\":\"评论用户Id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":true,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:26:23\",\"columnId\":\"1612801946790522883\",\"tableId\":\"1612801946723414017\",\"columnName\":\"comment_content\",\"columnComment\":\"评论内容\",\"columnType\":\"text\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 22:26:24');
+INSERT INTO `sys_oper_log` VALUES (1612818295013031937, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:27:00\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1612801946723414017\",\"tableName\":\"blog_comment\",\"tableComment\":\"评论管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Comment\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"comment\",\"businessName\":\"comment\",\"functionName\":\"评论管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:27:00\",\"columnId\":\"1612801946790522881\",\"tableId\":\"1612801946723414017\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":false,\"query\":false,\"increment\":true,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:27:00\",\"columnId\":\"1612801946790522882\",\"tableId\":\"1612801946723414017\",\"columnName\":\"user_id\",\"columnComment\":\"评论用户Id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":true,\"query\":true,\"increment\":false,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:22:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-10 22:27:00\",\"columnId\":\"1612801946790522883\",\"tableId\":\"1612801946723414017\",\"columnName\":\"comment_content\",\"columnComment\":\"评论内容\",\"columnType\":\"text\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-10 22:27:01');
+INSERT INTO `sys_oper_log` VALUES (1613044955473854465, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:58:57\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:27:40\",\"parentName\":null,\"parentId\":\"1612801785548894209\",\"children\":[],\"menuId\":\"1612810100827877376\",\"menuName\":\"评论管理\",\"orderNum\":1,\"path\":\"comment\",\"component\":\"comment/comment/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"comment:comment:list\",\"icon\":\"documentation\",\"remark\":\"评论管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:27:41');
+INSERT INTO `sys_oper_log` VALUES (1613045082510934017, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:21:25\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:28:11\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1612801785548894209\",\"menuName\":\"消息管理\",\"orderNum\":3,\"path\":\"/message\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"message\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:28:11');
+INSERT INTO `sys_oper_log` VALUES (1613045143236067330, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-10 21:21:25\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:28:25\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1612801785548894209\",\"menuName\":\"消息管理\",\"orderNum\":2,\"path\":\"/message\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"message\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:28:26');
+INSERT INTO `sys_oper_log` VALUES (1613045202312839170, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:28:39\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":1,\"menuName\":\"系统管理\",\"orderNum\":4,\"path\":\"system\",\"component\":null,\"queryParam\":\"\",\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"\",\"icon\":\"system\",\"remark\":\"系统管理目录\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:28:40');
+INSERT INTO `sys_oper_log` VALUES (1613045244880830466, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:28:49\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":2,\"menuName\":\"系统监控\",\"orderNum\":5,\"path\":\"monitor\",\"component\":null,\"queryParam\":\"\",\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"\",\"icon\":\"monitor\",\"remark\":\"系统监控目录\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:28:50');
+INSERT INTO `sys_oper_log` VALUES (1613045275205648385, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:28:57\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":3,\"menuName\":\"系统工具\",\"orderNum\":6,\"path\":\"tool\",\"component\":null,\"queryParam\":\"\",\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"\",\"icon\":\"tool\",\"remark\":\"系统工具目录\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:28:57');
+INSERT INTO `sys_oper_log` VALUES (1613045301604597761, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:29:03\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":5,\"menuName\":\"测试菜单\",\"orderNum\":7,\"path\":\"demo\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"star\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:29:04');
+INSERT INTO `sys_oper_log` VALUES (1613047100537389058, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":217,\"categoryName\":\"付费\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612781375180632066\",\"articleTitle\":\"测试文章\",\"articleContent\":\"这一次我一定要成功\",\"type\":1,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:36:12');
+INSERT INTO `sys_oper_log` VALUES (1613047998453989377, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1612030689601957890', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"操作失败\",\"data\":null}', 0, '', '2023-01-11 13:39:46');
+INSERT INTO `sys_oper_log` VALUES (1613048040078262274, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613048040015347713\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/98212b3ebd05452daf5fdb3d53898124.jpg\",\"fileName\":\"QQ图片20210424183800.jpg\"}}', 0, '', '2023-01-11 13:39:56');
+INSERT INTO `sys_oper_log` VALUES (1613048048580116481, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"html\"],\"articleCover\":\"1613048040015347713\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:39:58');
+INSERT INTO `sys_oper_log` VALUES (1613049235983384578, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 13:44:41\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:44:41\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1613049235916275714\",\"menuName\":\"个人中心\",\"orderNum\":10,\"path\":\"system/user/profile\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"user\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:44:42');
+INSERT INTO `sys_oper_log` VALUES (1613049363242762242, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 13:44:42\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:45:11\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1613049235916275714\",\"menuName\":\"个人中心\",\"orderNum\":10,\"path\":\"user/profile\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"user\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:45:12');
+INSERT INTO `sys_oper_log` VALUES (1613049556528873474, '个人信息', 2, 'com.zhi.web.controller.system.SysProfileController.updateProfile()', 'PUT', 1, 'admin', '', '/system/user/profile', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 13:45:57\",\"userId\":1,\"deptId\":null,\"userName\":null,\"nickName\":\"water-之\",\"userType\":\"sys_user\",\"email\":\"2831826106@qq.com\",\"phonenumber\":\"18888888888\",\"sex\":\"0\",\"avatar\":null,\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"127.0.0.1\",\"loginDate\":\"2023-01-11 12:29:26\",\"remark\":\"管理员\",\"dept\":{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"parentName\":null,\"parentId\":101,\"children\":[],\"deptId\":103,\"deptName\":\"研发部门\",\"orderNum\":1,\"leader\":\"若依\",\"phone\":null,\"email\":null,\"status\":\"0\",\"delFlag\":null,\"ancestors\":\"0,100,101\"},\"roles\":[{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"roleId\":1,\"roleName\":\"超级管理员\",\"roleKey\":\"admin\",\"roleSort\":1,\"dataScope\":\"1\",\"menuCheckStrictly\":null,\"deptCheckStrictly\":null,\"status\":\"0\",\"delFlag\":null,\"remark\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":null,\"permissions\":null,\"admin\":true}],\"roleIds\":null,\"postIds\":null,\"roleId\":null,\"admin\":true}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 13:45:58');
+INSERT INTO `sys_oper_log` VALUES (1613097813158187009, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_message\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 16:57:43');
+INSERT INTO `sys_oper_log` VALUES (1613098320635416577, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 16:59:44\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1612801785548894209\"},\"tableId\":\"1613097812961054721\",\"tableName\":\"blog_message\",\"tableComment\":\"留言管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Message\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"message\",\"businessName\":\"message\",\"functionName\":\"留言管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 16:57:43\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 16:59:44\",\"columnId\":\"1613097813036552193\",\"tableId\":\"1613097812961054721\",\"columnName\":\"id\",\"columnComment\":\"主键id\",\"columnType\":\"bigint(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 16:57:43\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 16:59:44\",\"columnId\":\"1613097813036552194\",\"tableId\":\"1613097812961054721\",\"columnName\":\"nickname\",\"columnComment\":\"昵称\",\"columnType\":\"varchar(50)\",\"javaType\":\"String\",\"javaField\":\"nickname\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":true,\"increment\":false,\"query\":true,\"capJavaField\":\"Nickname\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 16:57:43\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 16:59:44\",\"columnId\":\"1613097813036552195\",\"tableId\":\"1613097812961054721\",\"columnName\":\"avatar\",\"columnComment\":\"头像\",\"columnType\":\"varchar(', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 16:59:44');
+INSERT INTO `sys_oper_log` VALUES (1613098352000421890, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_message\"}', '', 0, '', '2023-01-11 16:59:52');
+INSERT INTO `sys_oper_log` VALUES (1613099785902972929, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 17:03:25\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 17:05:33\",\"parentName\":null,\"parentId\":\"1612801785548894209\",\"children\":[],\"menuId\":\"1613098351056703488\",\"menuName\":\"留言管理\",\"orderNum\":1,\"path\":\"message\",\"component\":\"message/message/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"message:message:list\",\"icon\":\"checkbox\",\"remark\":\"留言管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 17:05:34');
+INSERT INTO `sys_oper_log` VALUES (1613106317432512514, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 17:03:25\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 17:31:30\",\"parentName\":null,\"parentId\":\"1612801785548894209\",\"children\":[],\"menuId\":\"1613098351056703488\",\"menuName\":\"留言管理\",\"orderNum\":2,\"path\":\"message\",\"component\":\"message/message/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"message:message:list\",\"icon\":\"checkbox\",\"remark\":\"留言管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 17:31:31');
+INSERT INTO `sys_oper_log` VALUES (1613139021398073346, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 19:41:28\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 19:41:28\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1613139021339353090\",\"menuName\":\"界面管理\",\"orderNum\":3,\"path\":\"/website\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"theme\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 19:41:28');
+INSERT INTO `sys_oper_log` VALUES (1613157470555922433, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 20:54:46\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 20:54:46\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1613157470488813570\",\"menuName\":\"网站管理\",\"orderNum\":1,\"path\":\"website\",\"component\":\"website\",\"queryParam\":\"website\",\"isFrame\":\"1\",\"isCache\":\"1\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"international\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 20:54:47');
+INSERT INTO `sys_oper_log` VALUES (1613157589825150978, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 20:54:47\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 20:55:15\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1613157470488813570\",\"menuName\":\"网站管理\",\"orderNum\":1,\"path\":\"website\",\"component\":\"website\",\"queryParam\":\"\",\"isFrame\":\"1\",\"isCache\":\"1\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"international\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 20:55:15');
+INSERT INTO `sys_oper_log` VALUES (1613163573985464322, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613163573826080770\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/378641b3b92149d88409807b0a76c9e4.jpg\",\"fileName\":\"QQ图片20230111154502.jpg\"}}', 0, '', '2023-01-11 21:19:02');
+INSERT INTO `sys_oper_log` VALUES (1613163746723680257, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613163746656571393\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/c93f7a5406b344a1bbe5e62f1ce736b3.jpg\",\"fileName\":\"QQ图片20230111154502.jpg\"}}', 0, '', '2023-01-11 21:19:43');
+INSERT INTO `sys_oper_log` VALUES (1613166340854566914, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613166340791652354\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/5e19b20605c94fedb072adbf76cefb6f.jpg\",\"fileName\":\"QQ图片20230111154502.jpg\"}}', 0, '', '2023-01-11 21:30:02');
+INSERT INTO `sys_oper_log` VALUES (1613170007288594433, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613170007087267841\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/d2a1e401f0aa41ad93b3df32a66840d9.jpg\",\"fileName\":\"QQ图片20230111154502.jpg\"}}', 0, '', '2023-01-11 21:44:36');
+INSERT INTO `sys_oper_log` VALUES (1613170095004073985, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613170094936965121\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/d917e0eddca44f41ba8e4befd51758c6.jpg\",\"fileName\":\"QQ图片20230111154502.jpg\"}}', 0, '', '2023-01-11 21:44:57');
+INSERT INTO `sys_oper_log` VALUES (1613170123965743106, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613170123965743105\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/a6e94d542f824079a5106f43c5c9d112.jpg\",\"fileName\":\"wei.jpg\"}}', 0, '', '2023-01-11 21:45:03');
+INSERT INTO `sys_oper_log` VALUES (1613170158212235266, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613170158132543490\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/ea557fe94c634ae1afb36c9ab81c9e6c.jpg\",\"fileName\":\"zhi.jpg\"}}', 0, '', '2023-01-11 21:45:12');
+INSERT INTO `sys_oper_log` VALUES (1613171390939152385, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 21:50:05\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 21:50:05\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1613171390876237826\",\"menuName\":\"页面管理\",\"orderNum\":2,\"path\":\"pages\",\"component\":\"pages\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"1\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"education\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 21:50:06');
+INSERT INTO `sys_oper_log` VALUES (1613173787618983938, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1613166340791652354', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 21:59:37');
+INSERT INTO `sys_oper_log` VALUES (1613182408033599489, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1613166340791652354', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"操作失败\",\"data\":null}', 0, '', '2023-01-11 22:33:52');
+INSERT INTO `sys_oper_log` VALUES (1613182450786140161, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613182450719031297\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/11/f031de41bc1845519aabb95d9bede0fd.jpg\",\"fileName\":\"QQ图片20230111154502.jpg\"}}', 0, '', '2023-01-11 22:34:02');
+INSERT INTO `sys_oper_log` VALUES (1613183158545580033, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-11 21:50:06\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-11 22:36:51\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1613171390876237826\",\"menuName\":\"页面管理\",\"orderNum\":2,\"path\":\"pages\",\"component\":\"page\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"1\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"education\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-11 22:36:51');
+INSERT INTO `sys_oper_log` VALUES (1613391695351697409, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_page\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:25:30');
+INSERT INTO `sys_oper_log` VALUES (1613395308337745922, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:39:51\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":null},\"tableId\":\"1613391695125204993\",\"tableName\":\"blog_page\",\"tableComment\":\"页面\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"BlogPage\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.system\",\"moduleName\":\"system\",\"businessName\":\"page\",\"functionName\":\"页面\",\"functionAuthor\":\"ruoyi\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:39:51\",\"columnId\":\"1613391695188119553\",\"tableId\":\"1613391695125204993\",\"columnName\":\"id\",\"columnComment\":\"页面id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"insert\":false,\"edit\":true,\"increment\":true,\"capJavaField\":\"Id\",\"query\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:39:51\",\"columnId\":\"1613391695188119554\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_name\",\"columnComment\":\"页面名\",\"columnType\":\"varchar(10)\",\"javaType\":\"String\",\"javaField\":\"pageName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"insert\":true,\"edit\":true,\"increment\":false,\"capJavaField\":\"PageName\",\"query\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:39:51\",\"columnId\":\"1613391695255228418\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_label\",\"columnComment\":\"页面标签\",\"columnType\":\"varchar(20)\",\"javaType\":\"S', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:39:52');
+INSERT INTO `sys_oper_log` VALUES (1613395321428168707, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_page', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:39:55');
+INSERT INTO `sys_oper_log` VALUES (1613395528807141378, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:40:44\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613139021339353090\"},\"tableId\":\"1613391695125204993\",\"tableName\":\"blog_page\",\"tableComment\":\"页面管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Page\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"page\",\"businessName\":\"page\",\"functionName\":\"页面管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:40:44\",\"columnId\":\"1613391695188119553\",\"tableId\":\"1613391695125204993\",\"columnName\":\"id\",\"columnComment\":\"页面id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"insert\":false,\"edit\":true,\"increment\":true,\"capJavaField\":\"Id\",\"query\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:40:44\",\"columnId\":\"1613391695188119554\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_name\",\"columnComment\":\"页面名\",\"columnType\":\"varchar(10)\",\"javaType\":\"String\",\"javaField\":\"pageName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"insert\":true,\"edit\":true,\"increment\":false,\"capJavaField\":\"PageName\",\"query\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:40:44\",\"columnId\":\"1613391695255228418\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_label\",\"columnComment\":\"页面标签\",\"columnType\":\"varchar(20)\",\"j', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:40:44');
+INSERT INTO `sys_oper_log` VALUES (1613395547211747329, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_page\"}', '', 0, '', '2023-01-12 12:40:49');
+INSERT INTO `sys_oper_log` VALUES (1613395870345121794, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1613171390876237826', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:42:06');
+INSERT INTO `sys_oper_log` VALUES (1613396059499843586, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:42:50\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613139021339353090\"},\"tableId\":\"1613391695125204993\",\"tableName\":\"blog_page\",\"tableComment\":\"页面管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Page\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"page\",\"businessName\":\"page\",\"functionName\":\"页面管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:42:50\",\"columnId\":\"1613391695188119553\",\"tableId\":\"1613391695125204993\",\"columnName\":\"id\",\"columnComment\":\"页面id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"insert\":false,\"edit\":true,\"increment\":true,\"capJavaField\":\"Id\",\"query\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:42:50\",\"columnId\":\"1613391695188119554\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_name\",\"columnComment\":\"页面名\",\"columnType\":\"varchar(10)\",\"javaType\":\"String\",\"javaField\":\"pageName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"insert\":true,\"edit\":true,\"increment\":false,\"capJavaField\":\"PageName\",\"query\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:42:50\",\"columnId\":\"1613391695255228418\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_label\",\"columnComment\":\"页面标签\",\"columnType\":\"varchar(20)\",\"j', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:42:51');
+INSERT INTO `sys_oper_log` VALUES (1613397864447266818, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:50:01\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613139021339353090\"},\"tableId\":\"1613391695125204993\",\"tableName\":\"blog_page\",\"tableComment\":\"页面管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"BlogPage\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"page\",\"businessName\":\"page\",\"functionName\":\"页面管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:50:01\",\"columnId\":\"1613391695188119553\",\"tableId\":\"1613391695125204993\",\"columnName\":\"id\",\"columnComment\":\"页面id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"insert\":false,\"edit\":true,\"increment\":true,\"capJavaField\":\"Id\",\"query\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:50:01\",\"columnId\":\"1613391695188119554\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_name\",\"columnComment\":\"页面名\",\"columnType\":\"varchar(10)\",\"javaType\":\"String\",\"javaField\":\"pageName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"insert\":true,\"edit\":true,\"increment\":false,\"capJavaField\":\"PageName\",\"query\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:50:01\",\"columnId\":\"1613391695255228418\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_label\",\"columnComment\":\"页面标签\",\"columnType\":\"varchar(20)', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:50:01');
+INSERT INTO `sys_oper_log` VALUES (1613397888925224961, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:50:06\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613139021339353090\"},\"tableId\":\"1613391695125204993\",\"tableName\":\"blog_page\",\"tableComment\":\"页面管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"BlogPage\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"page\",\"businessName\":\"page\",\"functionName\":\"页面管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:50:06\",\"columnId\":\"1613391695188119553\",\"tableId\":\"1613391695125204993\",\"columnName\":\"id\",\"columnComment\":\"页面id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"insert\":false,\"edit\":true,\"increment\":true,\"capJavaField\":\"Id\",\"query\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:50:06\",\"columnId\":\"1613391695188119554\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_name\",\"columnComment\":\"页面名\",\"columnType\":\"varchar(10)\",\"javaType\":\"String\",\"javaField\":\"pageName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"insert\":true,\"edit\":true,\"increment\":false,\"capJavaField\":\"PageName\",\"query\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:25:30\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:50:06\",\"columnId\":\"1613391695255228418\",\"tableId\":\"1613391695125204993\",\"columnName\":\"page_label\",\"columnComment\":\"页面标签\",\"columnType\":\"varchar(20)', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:50:07');
+INSERT INTO `sys_oper_log` VALUES (1613398656654823426, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_page\"}', '', 0, '', '2023-01-12 12:53:10');
+INSERT INTO `sys_oper_log` VALUES (1613399563744395265, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:55:15\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 12:56:46\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1613398656495439872\",\"menuName\":\"页面管理\",\"orderNum\":1,\"path\":\"page\",\"component\":\"page/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"page:page:list\",\"icon\":\"#\",\"remark\":\"页面管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:56:46');
+INSERT INTO `sys_oper_log` VALUES (1613399733093613570, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613399733030699010\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/12/25ee313c2e774b64913d6e3d65cd696d.jpg\",\"fileName\":\"bg.jpg\"}}', 0, '', '2023-01-12 12:57:27');
+INSERT INTO `sys_oper_log` VALUES (1613399741121511426, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"pageName\":\"首页\",\"pageLabel\":\"home\",\"pageCover\":\"1613399733030699010\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 12:57:28');
+INSERT INTO `sys_oper_log` VALUES (1613403777094647809, '页面管理', 3, 'com.zhi.blog.controller.BlogPageController.remove()', 'DELETE', 1, 'admin', '', '/page/page/11', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 13:13:31');
+INSERT INTO `sys_oper_log` VALUES (1613408128760545281, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_friend_link\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 13:30:48');
+INSERT INTO `sys_oper_log` VALUES (1613408579778248706, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:32:35\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":null},\"tableId\":\"1613408128559218689\",\"tableName\":\"blog_friend_link\",\"tableComment\":\"友链管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"FriendLink\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"FriendLink\",\"businessName\":\"friendLink\",\"functionName\":\"友链管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 13:30:48\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:32:35\",\"columnId\":\"1613408128626327554\",\"tableId\":\"1613408128559218689\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"insert\":false,\"edit\":true,\"capJavaField\":\"Id\",\"increment\":true,\"query\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 13:30:48\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:32:35\",\"columnId\":\"1613408128626327555\",\"tableId\":\"1613408128559218689\",\"columnName\":\"link_name\",\"columnComment\":\"链接名\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"javaField\":\"linkName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"insert\":true,\"edit\":true,\"capJavaField\":\"LinkName\",\"increment\":false,\"query\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 13:30:48\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:32:35\",\"columnId\":\"1613408128626327556\",\"tableId\":\"1613408128559218689\",\"columnName\":\"link_avatar\",\"columnComment\":\"链接头像\",\"columnType\":\"varchar(25', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 13:32:36');
+INSERT INTO `sys_oper_log` VALUES (1613408725907800065, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:33:10\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613139021339353090\"},\"tableId\":\"1613408128559218689\",\"tableName\":\"blog_friend_link\",\"tableComment\":\"友链管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"FriendLink\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"friendLink\",\"businessName\":\"friendLink\",\"functionName\":\"友链管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 13:30:48\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:33:10\",\"columnId\":\"1613408128626327554\",\"tableId\":\"1613408128559218689\",\"columnName\":\"id\",\"columnComment\":\"\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"superColumn\":false,\"insert\":false,\"edit\":true,\"capJavaField\":\"Id\",\"increment\":true,\"query\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 13:30:48\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:33:10\",\"columnId\":\"1613408128626327555\",\"tableId\":\"1613408128559218689\",\"columnName\":\"link_name\",\"columnComment\":\"链接名\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"javaField\":\"linkName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"superColumn\":false,\"insert\":true,\"edit\":true,\"capJavaField\":\"LinkName\",\"increment\":false,\"query\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 13:30:48\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:33:10\",\"columnId\":\"1613408128626327556\",\"tableId\":\"1613408128559218689\",\"columnName\":\"link_avatar\",\"columnComment\":\"链接头像\",\"column', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 13:33:11');
+INSERT INTO `sys_oper_log` VALUES (1613408736947208193, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_friend_link\"}', '', 0, '', '2023-01-12 13:33:13');
+INSERT INTO `sys_oper_log` VALUES (1613409851134783489, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 12:55:15\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:37:38\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1613398656495439872\",\"menuName\":\"页面管理\",\"orderNum\":2,\"path\":\"page\",\"component\":\"page/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"page:page:list\",\"icon\":\"education\",\"remark\":\"页面管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 13:37:39');
+INSERT INTO `sys_oper_log` VALUES (1613409899566411778, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-12 13:36:15\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-12 13:37:50\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1613408736209010688\",\"menuName\":\"友链管理\",\"orderNum\":3,\"path\":\"friendLink\",\"component\":\"friendLink/friendLink/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"friendLink:friendLink:list\",\"icon\":\"people\",\"remark\":\"友链管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-12 13:37:50');
+INSERT INTO `sys_oper_log` VALUES (1613813536683724801, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_talk\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:21:45');
+INSERT INTO `sys_oper_log` VALUES (1613813815252619265, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:22:51\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:22:51\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1613813815185510401\",\"menuName\":\"说说管理\",\"orderNum\":5,\"path\":\"talk\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"wechat\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:22:51');
+INSERT INTO `sys_oper_log` VALUES (1613814203334791170, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:24:23\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613813815185510401\"},\"tableId\":\"1613813536490786817\",\"tableName\":\"blog_talk\",\"tableComment\":\"说说管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Talk\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"talk\",\"businessName\":\"talk\",\"functionName\":\"说说管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:21:45\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:24:23\",\"columnId\":\"1613813536553701378\",\"tableId\":\"1613813536490786817\",\"columnName\":\"id\",\"columnComment\":\"说说id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":false,\"pk\":true,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:21:45\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:24:23\",\"columnId\":\"1613813536553701379\",\"tableId\":\"1613813536490786817\",\"columnName\":\"user_id\",\"columnComment\":\"用户id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":true,\"pk\":false,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:21:45\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:24:23\",\"columnId\":\"1613813536553701380\",\"tableId\":\"1613813536490786817\",\"columnName\":\"content\",\"columnComment\":\"说说内容\",\"columnType\":\"varchar(2000)\",\"javaType\":\"Stri', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:24:24');
+INSERT INTO `sys_oper_log` VALUES (1613814685134491649, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_talk', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:26:19');
+INSERT INTO `sys_oper_log` VALUES (1613814749819047937, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_talk', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:26:34');
+INSERT INTO `sys_oper_log` VALUES (1613814792953270273, '代码生成', 3, 'com.zhi.generator.controller.GenController.remove()', 'DELETE', 1, 'admin', '', '/tool/gen/1613813536490786817', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:26:45');
+INSERT INTO `sys_oper_log` VALUES (1613814814562324486, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '127.0.0.1', '内网IP', '\"blog_talk\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:26:50');
+INSERT INTO `sys_oper_log` VALUES (1613815252976144385, '代码生成', 2, 'com.zhi.generator.controller.GenController.synchDb()', 'GET', 1, 'admin', '', '/tool/gen/synchDb/blog_talk', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:28:34');
+INSERT INTO `sys_oper_log` VALUES (1613816292383395842, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:32:42\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613813815185510401\"},\"tableId\":\"1613814814495215617\",\"tableName\":\"blog_talk\",\"tableComment\":\"说说管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Talk\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"talk\",\"businessName\":\"talk\",\"functionName\":\"说说管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:26:50\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:32:42\",\"columnId\":\"1613814814495215618\",\"tableId\":\"1613814814495215617\",\"columnName\":\"id\",\"columnComment\":\"说说id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":false,\"pk\":true,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:26:50\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:32:42\",\"columnId\":\"1613814814495215619\",\"tableId\":\"1613814814495215617\",\"columnName\":\"user_id\",\"columnComment\":\"用户id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":true,\"pk\":false,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:26:50\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:32:42\",\"columnId\":\"1613814814495215620\",\"tableId\":\"1613814814495215617\",\"columnName\":\"content\",\"columnComment\":\"说说内容\",\"columnType\":\"varchar(2000)\",\"javaType\":\"Stri', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:32:42');
+INSERT INTO `sys_oper_log` VALUES (1613816525758664706, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:33:37\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613813815185510401\"},\"tableId\":\"1613814814495215617\",\"tableName\":\"blog_talk\",\"tableComment\":\"说说管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Talk\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"talk\",\"businessName\":\"talk\",\"functionName\":\"说说管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:26:50\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:33:37\",\"columnId\":\"1613814814495215618\",\"tableId\":\"1613814814495215617\",\"columnName\":\"id\",\"columnComment\":\"说说id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":false,\"pk\":true,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:26:50\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:33:37\",\"columnId\":\"1613814814495215619\",\"tableId\":\"1613814814495215617\",\"columnName\":\"user_id\",\"columnComment\":\"用户id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"usableColumn\":false,\"superColumn\":false,\"edit\":true,\"insert\":true,\"pk\":false,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:26:50\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:33:37\",\"columnId\":\"1613814814495215620\",\"tableId\":\"1613814814495215617\",\"columnName\":\"content\",\"columnComment\":\"说说内容\",\"columnType\":\"varchar(2000)\",\"javaType\":\"Stri', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:33:38');
+INSERT INTO `sys_oper_log` VALUES (1613816543253106690, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '127.0.0.1', '内网IP', '{\"tables\":\"blog_talk\"}', '', 0, '', '2023-01-13 16:33:42');
+INSERT INTO `sys_oper_log` VALUES (1613818666359513089, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:42:07\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1613813815185510401\"},\"tableId\":\"1613814814495215617\",\"tableName\":\"blog_talk\",\"tableComment\":\"说说管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Talk\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"talk\",\"businessName\":\"talk\",\"functionName\":\"说说管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:26:50\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:42:07\",\"columnId\":\"1613814814495215618\",\"tableId\":\"1613814814495215617\",\"columnName\":\"id\",\"columnComment\":\"说说id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\",\"required\":true,\"list\":true,\"edit\":true,\"usableColumn\":false,\"superColumn\":false,\"pk\":true,\"insert\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:26:50\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:42:07\",\"columnId\":\"1613814814495215619\",\"tableId\":\"1613814814495215617\",\"columnName\":\"user_id\",\"columnComment\":\"用户id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"userId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"increment\":false,\"query\":true,\"capJavaField\":\"UserId\",\"required\":true,\"list\":true,\"edit\":true,\"usableColumn\":false,\"superColumn\":false,\"pk\":false,\"insert\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:26:50\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 16:42:07\",\"columnId\":\"1613814814495215620\",\"tableId\":\"1613814814495215617\",\"columnName\":\"content\",\"columnComment\":\"说说内容\",\"columnType\":\"varchar(2000)\",\"javaType\":\"Stri', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 16:42:08');
+INSERT INTO `sys_oper_log` VALUES (1613861852230512641, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 19:33:44\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 19:33:44\",\"parentName\":null,\"parentId\":\"1613813815185510401\",\"children\":[],\"menuId\":\"1613861852100489217\",\"menuName\":\"发布说说\",\"orderNum\":1,\"path\":\"talks\",\"component\":\"talk/talk\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"druid\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 19:33:44');
+INSERT INTO `sys_oper_log` VALUES (1613862048360361985, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:37:32\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 19:34:31\",\"parentName\":null,\"parentId\":\"1613813815185510401\",\"children\":[],\"menuId\":\"1613816542531686400\",\"menuName\":\"说说列表\",\"orderNum\":2,\"path\":\"talk\",\"component\":\"talk/talkList/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"talk:talk:list\",\"icon\":\"#\",\"remark\":\"说说管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 19:34:31');
+INSERT INTO `sys_oper_log` VALUES (1613862119185379329, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:37:32\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 19:34:47\",\"parentName\":null,\"parentId\":\"1613813815185510401\",\"children\":[],\"menuId\":\"1613816542531686400\",\"menuName\":\"说说列表\",\"orderNum\":2,\"path\":\"talks\",\"component\":\"talk/talkList/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"talk:talk:list\",\"icon\":\"#\",\"remark\":\"说说管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 19:34:48');
+INSERT INTO `sys_oper_log` VALUES (1613862142845448193, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 19:33:44\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-13 19:34:53\",\"parentName\":null,\"parentId\":\"1613813815185510401\",\"children\":[],\"menuId\":\"1613861852100489217\",\"menuName\":\"发布说说\",\"orderNum\":1,\"path\":\"talk\",\"component\":\"talk/talk\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"druid\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 19:34:54');
+INSERT INTO `sys_oper_log` VALUES (1613863062186553346, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613863062123638785\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/caf912a50d0d43c0a4c19f9b1cee09b2.jpg\",\"fileName\":\"QQ图片20210630102637.jpg\"}}', 0, '', '2023-01-13 19:38:33');
+INSERT INTO `sys_oper_log` VALUES (1613864916580626434, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613864916513517570\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/c796289e847c487da88241ea4f1b8e74.jpg\",\"fileName\":\"QQ图片20210630102637.jpg\"}}', 0, '', '2023-01-13 19:45:55');
+INSERT INTO `sys_oper_log` VALUES (1613864927099940865, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"springboot\"],\"articleCover\":\"1613864916513517570\",\"articleTitle\":\"没错\",\"articleContent\":\"## 我没有错\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 19:45:57');
+INSERT INTO `sys_oper_log` VALUES (1613867081856512001, '说说管理', 3, 'com.zhi.blog.controller.TalkController.remove()', 'DELETE', 1, 'admin', '', '/talk/talk/1', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 19:54:31');
+INSERT INTO `sys_oper_log` VALUES (1613876229541220354, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1613876229478305794\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/29f4a22badc84eeb96d82ff158607f39.jpg\",\"fileName\":\"1.jpg\"}}', 0, '', '2023-01-13 20:30:52');
+INSERT INTO `sys_oper_log` VALUES (1613876241180413953, '说说管理', 2, 'com.zhi.blog.controller.TalkController.edit()', 'PUT', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"userId\":1,\"content\":\"
123
\",\"images\":\"1612781375180632066,1613876229478305794\",\"isTop\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-13 20:30:55');
+INSERT INTO `sys_oper_log` VALUES (1613877614940815362, '用户头像', 2, 'com.zhi.web.controller.system.SysProfileController.avatar()', 'POST', 1, 'admin', '', '/system/user/profile/avatar', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"imgUrl\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg\"}}', 0, '', '2023-01-13 20:36:22');
+INSERT INTO `sys_oper_log` VALUES (1614114601379573762, '说说管理', 2, 'com.zhi.blog.controller.TalkController.edit()', 'PUT', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2022-01-24 23:34:59\",\"updateBy\":null,\"updateTime\":null,\"id\":1,\"userId\":1,\"content\":\"123123
\",\"images\":\"[\\\"1612781375180632066\\\",\\\"1613876229478305794\\\"]\",\"isTop\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 12:18:04');
+INSERT INTO `sys_oper_log` VALUES (1614115754544730114, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614115754364375041\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/265c8d9461764d14964e65660d44789f.jpg\",\"fileName\":\"bg.jpg\"}}', 0, '', '2023-01-14 12:22:39');
+INSERT INTO `sys_oper_log` VALUES (1614115793014886403, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614115793014886402\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/cc9175f9061a410098477f44c8696095.jpg\",\"fileName\":\"1.jpg\"}}', 0, '', '2023-01-14 12:22:49');
+INSERT INTO `sys_oper_log` VALUES (1614116043825876995, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614116043825876994\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/901316157b53401ebf37c938acf6aaec.jpg\",\"fileName\":\"290072.jpg\"}}', 0, '', '2023-01-14 12:23:48');
+INSERT INTO `sys_oper_log` VALUES (1614116069310468097, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614116069247553538\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/11c17deb734846f88920a5945c3c754c.jpg\",\"fileName\":\"789672.jpg\"}}', 0, '', '2023-01-14 12:23:54');
+INSERT INTO `sys_oper_log` VALUES (1614116077447417858, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"发布说说 \",\"images\":\"1614116043825876994,1614116069247553538\",\"isTop\":null,\"imgList\":[\"1614116043825876994\",\"1614116069247553538\"]}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( id, content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\n; Data truncation: Out of range value for column \'id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1', '2023-01-14 12:23:56');
+INSERT INTO `sys_oper_log` VALUES (1614116344356204545, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"发布说说 \",\"images\":\"1614116043825876994,1614116069247553538\",\"isTop\":null,\"imgList\":[\"1614116043825876994\",\"1614116069247553538\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:25:00');
+INSERT INTO `sys_oper_log` VALUES (1614116535259951106, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"发布说说 \",\"images\":\"1614116043825876994,1614116069247553538\",\"isTop\":null,\"imgList\":[\"1614116043825876994\",\"1614116069247553538\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:25:45');
+INSERT INTO `sys_oper_log` VALUES (1614116812700577794, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"发布说说 \",\"images\":\"1614116043825876994,1614116069247553538\",\"isTop\":null,\"imgList\":[\"1614116043825876994\",\"1614116069247553538\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:26:52');
+INSERT INTO `sys_oper_log` VALUES (1614117071782735873, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"发布说说 \",\"images\":\"1614116043825876994,1614116069247553538\",\"isTop\":null,\"imgList\":[\"1614116043825876994\",\"1614116069247553538\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:27:53');
+INSERT INTO `sys_oper_log` VALUES (1614117106473824257, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"发布说说 \",\"images\":\"1614116043825876994,1614116069247553538\",\"isTop\":null,\"imgList\":[\"1614116043825876994\",\"1614116069247553538\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:28:02');
+INSERT INTO `sys_oper_log` VALUES (1614117461110616066, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614117461043507201\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/1a74551d29ef4390914d17d814bcee8a.jpg\",\"fileName\":\"1161451.jpg\"}}', 0, '', '2023-01-14 12:29:26');
+INSERT INTO `sys_oper_log` VALUES (1614117497441677313, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614117497311653890\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/5af50c14fd6848a0865fa70c4ac5a18c.jpg\",\"fileName\":\"789672.jpg\"}}', 0, '', '2023-01-14 12:29:35');
+INSERT INTO `sys_oper_log` VALUES (1614117505574432770, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"123123 \",\"images\":\"1614117461043507201,1614117497311653890\",\"isTop\":null,\"imgList\":[\"1614117461043507201\",\"1614117497311653890\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:29:37');
+INSERT INTO `sys_oper_log` VALUES (1614117990893154305, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"123123 \",\"images\":\"1614117461043507201,1614117497311653890\",\"isTop\":null,\"imgList\":[\"1614117461043507201\",\"1614117497311653890\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:31:33');
+INSERT INTO `sys_oper_log` VALUES (1614118087483781122, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"123123 \",\"images\":\"1614117461043507201,1614117497311653890\",\"isTop\":null,\"imgList\":[\"1614117461043507201\",\"1614117497311653890\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:31:56');
+INSERT INTO `sys_oper_log` VALUES (1614118087508946945, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"123123 \",\"images\":\"1614117461043507201,1614117497311653890\",\"isTop\":null,\"imgList\":[\"1614117461043507201\",\"1614117497311653890\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:31:56');
+INSERT INTO `sys_oper_log` VALUES (1614118556285333506, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614118556243390465\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/4ed4a6ed89494d0aba239a5bdfdde5dd.jpg\",\"fileName\":\"1161451.jpg\"}}', 0, '', '2023-01-14 12:33:47');
+INSERT INTO `sys_oper_log` VALUES (1614118597087522817, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614118597024608258\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/24bae2bc59354bd7a855a17af5dbfb28.jpg\",\"fileName\":\"1.jpg\"}}', 0, '', '2023-01-14 12:33:57');
+INSERT INTO `sys_oper_log` VALUES (1614118607992713218, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"测试 \",\"images\":\"1614118556243390465,1614118597024608258\",\"isTop\":null,\"imgList\":[\"1614118556243390465\",\"1614118597024608258\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:34:00');
+INSERT INTO `sys_oper_log` VALUES (1614118780915478529, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"测试 \",\"images\":\"1614118556243390465,1614118597024608258\",\"isTop\":null,\"imgList\":[\"1614118556243390465\",\"1614118597024608258\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:34:41');
+INSERT INTO `sys_oper_log` VALUES (1614120033267490818, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614120033066164225\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/56e3989fd3184fe6b6d2c4a79d01468e.jpg\",\"fileName\":\"1161451.jpg\"}}', 0, '', '2023-01-14 12:39:39');
+INSERT INTO `sys_oper_log` VALUES (1614120071460823041, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614120071397908481\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/fd6a7a6910934b589c8d46a37a4213ac.jpg\",\"fileName\":\"1.jpg\"}}', 0, '', '2023-01-14 12:39:49');
+INSERT INTO `sys_oper_log` VALUES (1614120079522275329, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"测试 \",\"images\":\"1614120033066164225,1614120071397908481\",\"isTop\":null,\"imgList\":[\"1614120033066164225\",\"1614120071397908481\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:39:51');
+INSERT INTO `sys_oper_log` VALUES (1614120201001902081, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"测试 \",\"images\":\"1614120033066164225,1614120071397908481\",\"isTop\":null,\"imgList\":[\"1614120033066164225\",\"1614120071397908481\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:40:19');
+INSERT INTO `sys_oper_log` VALUES (1614120440593129474, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614120440526020610\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/86b5c0de5583496a9334e01cffaec4b3.jpg\",\"fileName\":\"1161451.jpg\"}}', 0, '', '2023-01-14 12:41:17');
+INSERT INTO `sys_oper_log` VALUES (1614120471761002497, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614120471693893634\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/c327173c17384b2b8af29b72df9cf4f9.jpg\",\"fileName\":\"789672.jpg\"}}', 0, '', '2023-01-14 12:41:24');
+INSERT INTO `sys_oper_log` VALUES (1614120563062611969, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"content\":\"测试 \",\"images\":\"1614120440526020610,1614120471693893634\",\"isTop\":null,\"imgList\":[\"1614120440526020610\",\"1614120471693893634\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'user_id\' doesn\'t have a default value\n; Field \'user_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'user_id\' doesn\'t have a default value', '2023-01-14 12:41:46');
+INSERT INTO `sys_oper_log` VALUES (1614120954965794818, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614120954898685954\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/8ec8b962a88b473c8950181bebd60a41.jpg\",\"fileName\":\"1161451.jpg\"}}', 0, '', '2023-01-14 12:43:19');
+INSERT INTO `sys_oper_log` VALUES (1614121020434685953, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614121020367577090\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/09fe7b5d66364ec18091f404d065cc7a.jpg\",\"fileName\":\"789672.jpg\"}}', 0, '', '2023-01-14 12:43:35');
+INSERT INTO `sys_oper_log` VALUES (1614121049614458882, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":50,\"userId\":1,\"content\":\"最后一次 \",\"images\":\"1614120954898685954,1614121020367577090\",\"isTop\":null,\"imgList\":[\"1614120954898685954\",\"1614121020367577090\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 12:43:42');
+INSERT INTO `sys_oper_log` VALUES (1614121865922486273, '说说管理', 2, 'com.zhi.blog.controller.TalkController.edit()', 'PUT', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-14 12:43:42\",\"updateBy\":null,\"updateTime\":null,\"id\":50,\"userId\":1,\"content\":\"最后一次 成功啦\",\"images\":\"[\\\"1614120954898685954\\\",\\\"1614121020367577090\\\"]\",\"isTop\":null,\"imgList\":[\"[\\\"1614120954898685954\\\"\",\"\\\"1614121020367577090\\\"]\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 12:46:56');
+INSERT INTO `sys_oper_log` VALUES (1614122343913758722, '说说管理', 2, 'com.zhi.blog.controller.TalkController.edit()', 'PUT', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-14 12:43:42\",\"updateBy\":null,\"updateTime\":null,\"id\":50,\"userId\":1,\"content\":\"最后一次 成功啦阿松大 \",\"images\":\"1614120954898685954,1614121020367577090\",\"isTop\":null,\"imgList\":[\"1614120954898685954\",\"1614121020367577090\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 12:48:50');
+INSERT INTO `sys_oper_log` VALUES (1614122455591297025, '说说管理', 2, 'com.zhi.blog.controller.TalkController.edit()', 'PUT', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-14 12:43:42\",\"updateBy\":null,\"updateTime\":null,\"id\":50,\"userId\":1,\"content\":\"测试发布说说 \",\"images\":\"1614120954898685954,1614121020367577090\",\"isTop\":null,\"imgList\":[\"1614120954898685954\",\"1614121020367577090\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 12:49:17');
+INSERT INTO `sys_oper_log` VALUES (1614123288164835329, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-13 16:37:32\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-14 12:52:35\",\"parentName\":null,\"parentId\":\"1613813815185510401\",\"children\":[],\"menuId\":\"1613816542531686400\",\"menuName\":\"说说列表\",\"orderNum\":2,\"path\":\"talks\",\"component\":\"talk/talkList/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"talk:talk:list\",\"icon\":\"tree-table\",\"remark\":\"说说管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 12:52:36');
+INSERT INTO `sys_oper_log` VALUES (1614223215855517697, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\"],\"articleCover\":\"1613864916513517570\",\"articleTitle\":\"没错\",\"articleContent\":\"## 我没有错\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 19:29:40');
+INSERT INTO `sys_oper_log` VALUES (1614223282423316481, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1613864916513517570', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 19:29:56');
+INSERT INTO `sys_oper_log` VALUES (1614223342854848514, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614223342854848513\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/73304fd887f543e6bab3c13dc25818d7.jpg\",\"fileName\":\"QQ图片20210630102645.jpg\"}}', 0, '', '2023-01-14 19:30:10');
+INSERT INTO `sys_oper_log` VALUES (1614223355869773825, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\"],\"articleCover\":\"1614223342854848513\",\"articleTitle\":\"没错\",\"articleContent\":\"## 我没有错\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 19:30:14');
+INSERT INTO `sys_oper_log` VALUES (1614223756430000129, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\"],\"articleCover\":\"1614223342854848513\",\"articleTitle\":\"没错\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 19:31:49');
+INSERT INTO `sys_oper_log` VALUES (1614224661946679297, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\"],\"articleCover\":\"1614223342854848513\",\"articleTitle\":\"没错\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 19:35:25');
+INSERT INTO `sys_oper_log` VALUES (1614224692464435202, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\"],\"articleCover\":\"1614223342854848513\",\"articleTitle\":\"没错\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 19:35:32');
+INSERT INTO `sys_oper_log` VALUES (1614224828229861378, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\"],\"articleCover\":\"1614223342854848513\",\"articleTitle\":\"vue测试\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 19:36:05');
+INSERT INTO `sys_oper_log` VALUES (1614228904174776321, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1613399733030699010', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 19:52:16');
+INSERT INTO `sys_oper_log` VALUES (1614228984697024515, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614228984697024514\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/3e925dbf2f3843b081c07b37d59762be.jpg\",\"fileName\":\"QQ图片20210630102619.jpg\"}}', 0, '', '2023-01-14 19:52:36');
+INSERT INTO `sys_oper_log` VALUES (1614228990703267842, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"pageName\":\"首页\",\"pageLabel\":\"home\",\"pageCover\":\"1614228984697024514\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 19:52:37');
+INSERT INTO `sys_oper_log` VALUES (1614251030088802305, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614251029958778882\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/14/00cd5ad983314d6d93b6870edc0e91b2.jpg\",\"fileName\":\"天空 云 少女 草地 唯美人物风景4k动漫壁纸3840x2160_彼岸图网.jpg\"}}', 0, '', '2023-01-14 21:20:12');
+INSERT INTO `sys_oper_log` VALUES (1614251043565101058, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":8,\"pageName\":\"留言\",\"pageLabel\":\"message\",\"pageCover\":\"1614251029958778882\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 21:20:15');
+INSERT INTO `sys_oper_log` VALUES (1614252598766972930, '留言管理', 2, 'com.zhi.blog.controller.MessageController.edit()', 'PUT', 1, 'admin', '', '/message/message', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"nickname\":\"water-之\",\"avatar\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg\",\"messageContent\":\"测试留言\",\"ipAddress\":\"127.0.0.1\",\"ipSource\":null,\"time\":3,\"isReview\":\"Y\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 21:26:26');
+INSERT INTO `sys_oper_log` VALUES (1614253871838810113, '留言管理', 2, 'com.zhi.blog.controller.MessageController.edit()', 'PUT', 1, 'admin', '', '/message/message', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"nickname\":\"water-之\",\"avatar\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg\",\"messageContent\":\"测试留言\",\"ipAddress\":\"127.0.0.1\",\"ipSource\":null,\"time\":1,\"isReview\":\"Y\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 21:31:29');
+INSERT INTO `sys_oper_log` VALUES (1614253924028534785, '留言管理', 2, 'com.zhi.blog.controller.MessageController.edit()', 'PUT', 1, 'admin', '', '/message/message', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"nickname\":\"water-之\",\"avatar\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg\",\"messageContent\":\"测试留言\",\"ipAddress\":\"127.0.0.1\",\"ipSource\":null,\"time\":10,\"isReview\":\"Y\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-14 21:31:42');
+INSERT INTO `sys_oper_log` VALUES (1614508855549517825, '部门管理', 2, 'com.zhi.web.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '', '/system/dept', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-15 14:24:41\",\"parentName\":null,\"parentId\":0,\"children\":[],\"deptId\":100,\"deptName\":\"water-之\",\"orderNum\":0,\"leader\":\"ftz\",\"phone\":\"15888888888\",\"email\":\"ftz@qq.com\",\"status\":\"0\",\"delFlag\":\"0\",\"ancestors\":\"0\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:24:42');
+INSERT INTO `sys_oper_log` VALUES (1614509080875917313, '部门管理', 1, 'com.zhi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '', '/system/dept', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-15 14:25:35\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-15 14:25:35\",\"parentName\":null,\"parentId\":100,\"children\":[],\"deptId\":\"1614509080808808450\",\"deptName\":\"芝士团\",\"orderNum\":1,\"leader\":\"ftz\",\"phone\":\"18888888888\",\"email\":\"2831826106@qq.com\",\"status\":\"0\",\"delFlag\":null,\"ancestors\":\"0,100\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:25:36');
+INSERT INTO `sys_oper_log` VALUES (1614509199151095809, '用户管理', 2, 'com.zhi.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '', '/system/user', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-15 14:26:03\",\"userId\":2,\"deptId\":\"1614509080808808450\",\"userName\":\"lionli\",\"nickName\":\"疯狂的狮子Li\",\"userType\":\"sys_user\",\"email\":\"crazyLionLi@qq.com\",\"phonenumber\":\"15666666666\",\"sex\":\"1\",\"avatar\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg\",\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"127.0.0.1\",\"loginDate\":\"2023-01-05 19:54:19\",\"remark\":\"测试员\",\"dept\":{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"parentName\":null,\"parentId\":101,\"children\":[],\"deptId\":105,\"deptName\":\"测试部门\",\"orderNum\":3,\"leader\":\"若依\",\"phone\":null,\"email\":null,\"status\":\"0\",\"delFlag\":null,\"ancestors\":\"0,100,101\"},\"roles\":[{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"roleId\":2,\"roleName\":\"普通角色\",\"roleKey\":\"common\",\"roleSort\":2,\"dataScope\":\"2\",\"menuCheckStrictly\":null,\"deptCheckStrictly\":null,\"status\":\"0\",\"delFlag\":null,\"remark\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":null,\"permissions\":null,\"admin\":false}],\"roleIds\":[2],\"postIds\":[2],\"roleId\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:26:04');
+INSERT INTO `sys_oper_log` VALUES (1614509251638616066, '用户管理', 2, 'com.zhi.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '', '/system/user', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":null,\"updateTime\":null,\"userId\":1,\"deptId\":\"1614509080808808450\",\"userName\":\"admin\",\"nickName\":\"water-之\",\"userType\":\"sys_user\",\"email\":\"2831826106@qq.com\",\"phonenumber\":\"18888888888\",\"sex\":\"0\",\"avatar\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg\",\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"127.0.0.1\",\"loginDate\":\"2023-01-15 14:23:17\",\"remark\":\"管理员\",\"dept\":{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"parentName\":null,\"parentId\":101,\"children\":[],\"deptId\":103,\"deptName\":\"研发部门\",\"orderNum\":1,\"leader\":\"若依\",\"phone\":null,\"email\":null,\"status\":\"0\",\"delFlag\":null,\"ancestors\":\"0,100,101\"},\"roles\":[{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"roleId\":1,\"roleName\":\"超级管理员\",\"roleKey\":\"admin\",\"roleSort\":1,\"dataScope\":\"1\",\"menuCheckStrictly\":null,\"deptCheckStrictly\":null,\"status\":\"0\",\"delFlag\":null,\"remark\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":null,\"permissions\":null,\"admin\":true}],\"roleIds\":[1],\"postIds\":[1],\"roleId\":null,\"admin\":true}', '', 1, '不允许操作超级管理员用户', '2023-01-15 14:26:16');
+INSERT INTO `sys_oper_log` VALUES (1614509307896815617, '用户管理', 2, 'com.zhi.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '', '/system/user', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-15 14:26:29\",\"userId\":3,\"deptId\":\"1614509080808808450\",\"userName\":\"test\",\"nickName\":\"本部门及以下 密码666666\",\"userType\":\"sys_user\",\"email\":\"\",\"phonenumber\":\"\",\"sex\":\"0\",\"avatar\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg\",\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"127.0.0.1\",\"loginDate\":\"2023-01-05 19:54:34\",\"remark\":null,\"dept\":{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"parentName\":null,\"parentId\":102,\"children\":[],\"deptId\":108,\"deptName\":\"市场部门\",\"orderNum\":1,\"leader\":\"若依\",\"phone\":null,\"email\":null,\"status\":\"0\",\"delFlag\":null,\"ancestors\":\"0,100,102\"},\"roles\":[{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"roleId\":3,\"roleName\":\"本部门及以下\",\"roleKey\":\"test1\",\"roleSort\":3,\"dataScope\":\"4\",\"menuCheckStrictly\":null,\"deptCheckStrictly\":null,\"status\":\"0\",\"delFlag\":null,\"remark\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":null,\"permissions\":null,\"admin\":false}],\"roleIds\":[3],\"postIds\":[],\"roleId\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:26:30');
+INSERT INTO `sys_oper_log` VALUES (1614509339702222850, '用户管理', 2, 'com.zhi.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '', '/system/user', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-01-15 14:26:37\",\"userId\":4,\"deptId\":\"1614509080808808450\",\"userName\":\"test1\",\"nickName\":\"仅本人 密码666666\",\"userType\":\"sys_user\",\"email\":\"\",\"phonenumber\":\"\",\"sex\":\"0\",\"avatar\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg\",\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"127.0.0.1\",\"loginDate\":\"2023-01-05 19:54:34\",\"remark\":null,\"dept\":{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"parentName\":null,\"parentId\":100,\"children\":[],\"deptId\":102,\"deptName\":\"长沙分公司\",\"orderNum\":2,\"leader\":\"若依\",\"phone\":null,\"email\":null,\"status\":\"0\",\"delFlag\":null,\"ancestors\":\"0,100\"},\"roles\":[{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"roleId\":4,\"roleName\":\"仅本人\",\"roleKey\":\"test2\",\"roleSort\":4,\"dataScope\":\"5\",\"menuCheckStrictly\":null,\"deptCheckStrictly\":null,\"status\":\"0\",\"delFlag\":null,\"remark\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":null,\"permissions\":null,\"admin\":false}],\"roleIds\":[4],\"postIds\":[],\"roleId\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:26:37');
+INSERT INTO `sys_oper_log` VALUES (1614509616127827970, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/109', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:27:43');
+INSERT INTO `sys_oper_log` VALUES (1614509626651336705, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/108', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:27:46');
+INSERT INTO `sys_oper_log` VALUES (1614509635832668162, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/102', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:27:48');
+INSERT INTO `sys_oper_log` VALUES (1614509646523949057, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/107', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:27:51');
+INSERT INTO `sys_oper_log` VALUES (1614509654157582337, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/106', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:27:52');
+INSERT INTO `sys_oper_log` VALUES (1614509662504247298, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/105', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:27:54');
+INSERT INTO `sys_oper_log` VALUES (1614509671542972417, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/104', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:27:57');
+INSERT INTO `sys_oper_log` VALUES (1614509681567358978, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/103', '127.0.0.1', '内网IP', '{}', '{\"code\":601,\"msg\":\"部门存在用户,不允许删除\",\"data\":null}', 0, '', '2023-01-15 14:27:59');
+INSERT INTO `sys_oper_log` VALUES (1614510113987518465, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/103', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:29:42');
+INSERT INTO `sys_oper_log` VALUES (1614510125370859522, '部门管理', 3, 'com.zhi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '', '/system/dept/101', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 14:29:45');
+INSERT INTO `sys_oper_log` VALUES (1614553932061749249, '用户管理', 2, 'com.zhi.web.controller.system.SysUserController.changeStatus()', 'PUT', 1, 'admin', '', '/system/user/changeStatus', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-01-15 17:23:49\",\"userId\":\"1614548379499507713\",\"deptId\":null,\"userName\":null,\"nickName\":null,\"userType\":null,\"email\":null,\"phonenumber\":null,\"sex\":null,\"avatar\":null,\"status\":\"1\",\"delFlag\":null,\"loginIp\":null,\"loginDate\":null,\"remark\":null,\"dept\":null,\"roles\":null,\"roleIds\":null,\"postIds\":null,\"roleId\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 17:23:49');
+INSERT INTO `sys_oper_log` VALUES (1614605745679081474, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1614228984697024514', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 20:49:42');
+INSERT INTO `sys_oper_log` VALUES (1614606003926573058, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614606003863658498\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/15/40d34efc34c04b60baff7449036d57cf.jpg\",\"fileName\":\"高山湖泊风景3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-01-15 20:50:44');
+INSERT INTO `sys_oper_log` VALUES (1614606010968809474, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"pageName\":\"首页\",\"pageLabel\":\"home\",\"pageCover\":\"1614606003863658498\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 20:50:46');
+INSERT INTO `sys_oper_log` VALUES (1614606077901512705, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614606077834403841\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/15/b28c9780398444b29ca0efdbdac07c67.jpg\",\"fileName\":\"芬兰,芬兰,夕阳3440x1440风景壁纸_千叶网.jpg\"}}', 0, '', '2023-01-15 20:51:02');
+INSERT INTO `sys_oper_log` VALUES (1614606083962281986, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":2,\"pageName\":\"归档\",\"pageLabel\":\"archive\",\"pageCover\":\"1614606077834403841\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 20:51:03');
+INSERT INTO `sys_oper_log` VALUES (1614606235695423490, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614606235632508930\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/15/a7228927d57245e990d57f43a9029ba4.jpg\",\"fileName\":\"荷兰盛开的石南3440x1440带鱼屏壁纸_千叶网.jpg\"}}', 0, '', '2023-01-15 20:51:39');
+INSERT INTO `sys_oper_log` VALUES (1614606247250731009, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":3,\"pageName\":\"分类\",\"pageLabel\":\"category\",\"pageCover\":\"1614606235632508930\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 20:51:42');
+INSERT INTO `sys_oper_log` VALUES (1614606349734354945, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614606349667246081\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/15/b4f2141bc9974b2eaca0992e7b78e31c.jpg\",\"fileName\":\"美丽的海边风景3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-01-15 20:52:06');
+INSERT INTO `sys_oper_log` VALUES (1614606358714359810, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":4,\"pageName\":\"标签\",\"pageLabel\":\"tag\",\"pageCover\":\"1614606349667246081\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 20:52:09');
+INSERT INTO `sys_oper_log` VALUES (1614606431695249410, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614606431695249409\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/15/fb76b85f778a4e6bae364ba1bcd8c492.jpg\",\"fileName\":\"夜海 少女 3440x1440动漫壁纸_千叶网.jpg\"}}', 0, '', '2023-01-15 20:52:26');
+INSERT INTO `sys_oper_log` VALUES (1614606446241095682, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":9,\"pageName\":\"个人中心\",\"pageLabel\":\"user\",\"pageCover\":\"1614606431695249409\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 20:52:29');
+INSERT INTO `sys_oper_log` VALUES (1614606523919605762, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614606523919605761\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/15/1845ae60b1c04ee18d10e7e27454c035.jpg\",\"fileName\":\"俄勒冈州,太平洋城,岩石,海边风景4K壁纸_千叶网.jpg\"}}', 0, '', '2023-01-15 20:52:48');
+INSERT INTO `sys_oper_log` VALUES (1614606544803045377, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":10,\"pageName\":\"文章列表\",\"pageLabel\":\"articleList\",\"pageCover\":\"1614606523919605761\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 20:52:53');
+INSERT INTO `sys_oper_log` VALUES (1614606607352700930, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614606607352700929\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/15/e5a7b176d64a445e9b665ab1a40f2fec.jpg\",\"fileName\":\"沉沦螺旋_荷鲁斯站Downward,Spiral_,Horus,Station3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-01-15 20:53:08');
+INSERT INTO `sys_oper_log` VALUES (1614606626952683521, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":6,\"pageName\":\"友链\",\"pageLabel\":\"link\",\"pageCover\":\"1614606607352700929\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 20:53:12');
+INSERT INTO `sys_oper_log` VALUES (1614607161852272641, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614607161785163778\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/15/e218c7845b8c4d59b82a400201896204.jpg\",\"fileName\":\"俄勒冈州,太平洋城,岩石,海边风景4K壁纸_千叶网.jpg\"}}', 0, '', '2023-01-15 20:55:20');
+INSERT INTO `sys_oper_log` VALUES (1614607169267802114, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":11,\"pageName\":\"说说\",\"pageLabel\":\"talk\",\"pageCover\":\"1614607161785163778\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 20:55:22');
+INSERT INTO `sys_oper_log` VALUES (1614610914072334337, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614610913900367873\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/15/56fdb73fae684261b93ca2d184906bd3.jpg\",\"fileName\":\"美丽蓝色花瓣3440x1440_千叶网.jpg\"}}', 0, '', '2023-01-15 21:10:15');
+INSERT INTO `sys_oper_log` VALUES (1614610921215234050, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":7,\"pageName\":\"关于\",\"pageLabel\":\"about\",\"pageCover\":\"1614610913900367873\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-15 21:10:16');
+INSERT INTO `sys_oper_log` VALUES (1614870127927488513, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1614223342854848513', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-16 14:20:16');
+INSERT INTO `sys_oper_log` VALUES (1614870206906232833, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614870206843318273\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/16/736a20a9c0d14c9bb33488936599d041.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-01-16 14:20:35');
+INSERT INTO `sys_oper_log` VALUES (1614870273054601217, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\",\"测试\"],\"articleCover\":\"1614870206843318273\",\"articleTitle\":\"新的vue测试\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-16 14:20:51');
+INSERT INTO `sys_oper_log` VALUES (1614870928829837313, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1614120954898685954', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-16 14:23:27');
+INSERT INTO `sys_oper_log` VALUES (1614870976867201026, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1614870976800092162\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/16/80c7f49646ed4be7a706b654f85ccfa2.jpg\",\"fileName\":\"古墓丽影_暗影3440x1440带鱼屏壁纸_千叶网.jpg\"}}', 0, '', '2023-01-16 14:23:38');
+INSERT INTO `sys_oper_log` VALUES (1614871010631348226, '说说管理', 2, 'com.zhi.blog.controller.TalkController.edit()', 'PUT', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-14 12:43:42\",\"updateBy\":null,\"updateTime\":null,\"id\":50,\"userId\":1,\"content\":\"测试发布说说 \",\"images\":\"1614121020367577090,1614870976800092162\",\"isTop\":null,\"imgList\":[\"1614121020367577090\",\"1614870976800092162\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-16 14:23:46');
+INSERT INTO `sys_oper_log` VALUES (1614988100012924929, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1506', '127.0.0.1', '内网IP', '{}', '{\"code\":601,\"msg\":\"存在子菜单,不允许删除\",\"data\":null}', 0, '', '2023-01-16 22:09:03');
+INSERT INTO `sys_oper_log` VALUES (1614988124826427394, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1511', '127.0.0.1', '内网IP', '{}', '{\"code\":601,\"msg\":\"菜单已分配,不允许删除\",\"data\":null}', 0, '', '2023-01-16 22:09:09');
+INSERT INTO `sys_oper_log` VALUES (1615211813593538561, '评论管理', 3, 'com.zhi.blog.controller.CommentController.remove()', 'DELETE', 1, 'admin', '', '/comment/comment/1614588562538348547', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-17 12:58:00');
+INSERT INTO `sys_oper_log` VALUES (1615211838843248642, '评论管理', 3, 'com.zhi.blog.controller.CommentController.remove()', 'DELETE', 1, 'admin', '', '/comment/comment/1614588562538348548', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-17 12:58:06');
+INSERT INTO `sys_oper_log` VALUES (1615211859709911041, '评论管理', 3, 'com.zhi.blog.controller.CommentController.remove()', 'DELETE', 1, 'admin', '', '/comment/comment/5', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-17 12:58:11');
+INSERT INTO `sys_oper_log` VALUES (1615213249089826817, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":217,\"categoryName\":\"付费\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1612781375180632066\",\"articleTitle\":\"测试文章\",\"articleContent\":\"这一次我一定要成功\",\"type\":1,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":2}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-01-17 13:03:42');
+INSERT INTO `sys_oper_log` VALUES (1623662249392492546, '评论管理', 3, 'com.zhi.blog.controller.CommentController.remove()', 'DELETE', 1, 'admin', '', '/comment/comment/1614583947344216065,1614584340719599618,1614586639571599361', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-09 20:37:01');
+INSERT INTO `sys_oper_log` VALUES (1624274517046194177, '用户管理', 2, 'com.zhi.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '', '/system/user', '127.0.0.1', '内网IP', '{\"createBy\":\"老妈\",\"createTime\":\"2023-01-15 17:01:45\",\"updateBy\":null,\"updateTime\":null,\"userId\":5,\"deptId\":null,\"userName\":\"荷塘\",\"nickName\":\"荷塘\",\"userType\":\"sys_user\",\"email\":\"2831826106@qq.com\",\"phonenumber\":\"\",\"sex\":\"0\",\"avatar\":\"https://s1.ax1x.com/2023/01/15/pSQf91A.jpg\",\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"127.0.0.1\",\"loginDate\":\"2023-01-19 23:00:18\",\"remark\":null,\"intro\":null,\"webSite\":null,\"dept\":null,\"roles\":[],\"roleIds\":[4],\"postIds\":[],\"roleId\":null,\"admin\":false}', '{\"code\":500,\"msg\":\"修改用户\'荷塘\'失败,邮箱账号已存在\",\"data\":null}', 0, '', '2023-02-11 13:09:57');
+INSERT INTO `sys_oper_log` VALUES (1624274534045708290, '用户管理', 2, 'com.zhi.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '', '/system/user', '127.0.0.1', '内网IP', '{\"createBy\":\"老妈\",\"createTime\":\"2023-01-15 17:01:45\",\"updateBy\":null,\"updateTime\":null,\"userId\":5,\"deptId\":null,\"userName\":\"荷塘\",\"nickName\":\"荷塘\",\"userType\":\"sys_user\",\"email\":\"2831826106@qq.com\",\"phonenumber\":\"\",\"sex\":\"0\",\"avatar\":\"https://s1.ax1x.com/2023/01/15/pSQf91A.jpg\",\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"127.0.0.1\",\"loginDate\":\"2023-01-19 23:00:18\",\"remark\":null,\"intro\":null,\"webSite\":null,\"dept\":null,\"roles\":[],\"roleIds\":[4],\"postIds\":[],\"roleId\":null,\"admin\":false}', '{\"code\":500,\"msg\":\"修改用户\'荷塘\'失败,邮箱账号已存在\",\"data\":null}', 0, '', '2023-02-11 13:10:01');
+INSERT INTO `sys_oper_log` VALUES (1624274642627850242, '用户管理', 2, 'com.zhi.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '', '/system/user', '127.0.0.1', '内网IP', '{\"createBy\":\"kalashok-pan\",\"createTime\":\"2023-01-21 14:10:29\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-11 13:10:27\",\"userId\":\"1614548939325845510\",\"deptId\":null,\"userName\":\"kalashok-pan\",\"nickName\":\"卡拉肖克-潘\",\"userType\":\"sys_user\",\"email\":\"\",\"phonenumber\":\"\",\"sex\":\"0\",\"avatar\":\"https://foruda.gitee.com/avatar/1673853732714613266/8669563_kalashok-pan_1673853732.png\",\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"127.0.0.1\",\"loginDate\":\"2023-01-21 22:14:36\",\"remark\":\"暂无\",\"intro\":null,\"webSite\":null,\"dept\":null,\"roles\":[],\"roleIds\":[4],\"postIds\":[],\"roleId\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-11 13:10:27');
+INSERT INTO `sys_oper_log` VALUES (1624274822630600706, '角色管理', 2, 'com.zhi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '', '/system/role', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-11 13:11:09\",\"roleId\":4,\"roleName\":\"仅本人\",\"roleKey\":\"test2\",\"roleSort\":4,\"dataScope\":\"5\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"delFlag\":\"0\",\"remark\":null,\"flag\":false,\"menuIds\":[\"1610972802922405889\",\"1610973263779946497\",\"1611336461808898048\",\"1611336461808898049\",\"1611336461808898050\",\"1611336461808898051\",\"1611336461808898052\",\"1611336461808898053\",\"1611613727679938560\",\"1611613727679938561\",\"1611613727679938562\",\"1611613727679938563\",\"1611613727679938564\",\"1611613727679938565\",\"1611975928588574720\",\"1611975928588574721\",\"1611975928588574722\",\"1611975928588574723\",\"1611975928588574724\",\"1611975928588574725\",5,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511],\"deptIds\":null,\"permissions\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-11 13:11:10');
+INSERT INTO `sys_oper_log` VALUES (1624281077399023617, '角色管理', 2, 'com.zhi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '', '/system/role', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-11 13:36:01\",\"roleId\":4,\"roleName\":\"仅本人\",\"roleKey\":\"test2\",\"roleSort\":4,\"dataScope\":\"5\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"delFlag\":\"0\",\"remark\":null,\"flag\":false,\"menuIds\":[\"1610972802922405889\",\"1610973263779946497\",\"1611336461808898048\",\"1611336461808898049\",\"1611336461808898050\",\"1611336461808898051\",\"1611336461808898052\",\"1611336461808898053\",\"1611613727679938560\",\"1611613727679938561\",\"1611613727679938562\",\"1611613727679938563\",\"1611613727679938564\",\"1611613727679938565\",\"1611975928588574720\",\"1611975928588574721\",\"1611975928588574722\",\"1611975928588574723\",\"1611975928588574724\",\"1611975928588574725\",1,100,1001,1002,1003,1004,1005,1006,1007,101,1008,1009,1010,1011,1012,102,1013,1014,1015,1016,103,1017,1018,1019,1020,104,1021,1022,1023,1024,1025,105,1026,1027,1028,1029,1030,106,1031,1032,1033,1034,1035,107,1036,1037,1038,1039,108,500,1040,1041,1042,501,1043,1044,1045,1050,118,1600,1601,1602,1603,1604,1605,5,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511],\"deptIds\":null,\"permissions\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-11 13:36:01');
+INSERT INTO `sys_oper_log` VALUES (1624290470186201090, '角色管理', 2, 'com.zhi.web.controller.system.SysRoleController.dataScope()', 'PUT', 1, 'admin', '', '/system/role/dataScope', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-11 14:13:20\",\"roleId\":4,\"roleName\":\"仅本人\",\"roleKey\":\"test2\",\"roleSort\":4,\"dataScope\":\"5\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"delFlag\":\"0\",\"remark\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":[],\"permissions\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-11 14:13:21');
+INSERT INTO `sys_oper_log` VALUES (1624293141957849089, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'test1', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\"],\"articleCover\":\"1614870206843318273\",\"articleTitle\":\"新的vue测试\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-11 14:23:58');
+INSERT INTO `sys_oper_log` VALUES (1624311868313059329, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'test1', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1624311868237561857\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/02/11/f270e45538104ebb951f9b4584480021.png\",\"fileName\":\"logo.png\"}}', 0, '', '2023-02-11 15:38:22');
+INSERT INTO `sys_oper_log` VALUES (1624311874814230530, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'test1', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"test1\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":144,\"userId\":4,\"categoryId\":225,\"categoryName\":\"\",\"tagNameList\":[],\"articleCover\":\"1624311868237561857\",\"articleTitle\":\"test1的文章\",\"articleContent\":\"test1的文章\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-11 15:38:24');
+INSERT INTO `sys_oper_log` VALUES (1624311932792094721, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'test1', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":144,\"userId\":4,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"html\"],\"articleCover\":\"1624311868237561857\",\"articleTitle\":\"test1的文章\",\"articleContent\":\"test1的文章\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-11 15:38:38');
+INSERT INTO `sys_oper_log` VALUES (1625478372123475970, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1625478371997646850\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/02/14/755f9aff4a644dcab2084a39ed1feb25.png\",\"fileName\":\"XHIZI6T41671292212659.png\"}}', 0, '', '2023-02-14 20:53:38');
+INSERT INTO `sys_oper_log` VALUES (1625478381686489090, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":145,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\"],\"articleCover\":\"1625478371997646850\",\"articleTitle\":\"测试\",\"articleContent\":\"测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 20:53:41');
+INSERT INTO `sys_oper_log` VALUES (1625480098423504898, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1625480098360590337\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/02/14/3eb4a158cb6640cd840f6faad0d3fbb9.png\",\"fileName\":\"XHIZI6T41671292212659.png\"}}', 0, '', '2023-02-14 21:00:30');
+INSERT INTO `sys_oper_log` VALUES (1625487055830122498, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":146,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\"],\"articleCover\":\"1625480098360590337\",\"articleTitle\":\"11\",\"articleContent\":\"11\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 21:28:09');
+INSERT INTO `sys_oper_log` VALUES (1625487737119313922, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/146', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 21:30:51');
+INSERT INTO `sys_oper_log` VALUES (1625487743901503489, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/145', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 21:30:53');
+INSERT INTO `sys_oper_log` VALUES (1625487802793725953, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1625487802730811393\",\"url\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/02/14/01f9bf2767854ac08f914b612e9b0b7f.png\",\"fileName\":\"XHIZI6T41671292212659.png\"}}', 0, '', '2023-02-14 21:31:07');
+INSERT INTO `sys_oper_log` VALUES (1625487811501101058, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"html\"],\"articleCover\":\"1625487802730811393\",\"articleTitle\":\"1\",\"articleContent\":\"1\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, 'For input string: \"sys_user:1\"', '2023-02-14 21:31:09');
+INSERT INTO `sys_oper_log` VALUES (1625487838730522626, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"html\"],\"articleCover\":\"1625487802730811393\",\"articleTitle\":\"1\",\"articleContent\":\"1\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, 'For input string: \"sys_user:1\"', '2023-02-14 21:31:16');
+INSERT INTO `sys_oper_log` VALUES (1625488008918601729, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":null,\"categoryId\":null,\"categoryName\":\"测试\",\"tagNameList\":[\"html\"],\"articleCover\":\"1625487802730811393\",\"articleTitle\":\"1\",\"articleContent\":\"1\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, 'For input string: \"sys_user:1\"', '2023-02-14 21:31:56');
+INSERT INTO `sys_oper_log` VALUES (1625488897154756610, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":147,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"html\"],\"articleCover\":\"1625487802730811393\",\"articleTitle\":\"1\",\"articleContent\":\"1\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 21:35:28');
+INSERT INTO `sys_oper_log` VALUES (1625489375234138114, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":148,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"html\"],\"articleCover\":\"1625487802730811393\",\"articleTitle\":\"1\",\"articleContent\":\"1\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 21:37:22');
+INSERT INTO `sys_oper_log` VALUES (1625490298421420033, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":149,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"html\"],\"articleCover\":\"1625487802730811393\",\"articleTitle\":\"1\",\"articleContent\":\"1\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 21:41:02');
+INSERT INTO `sys_oper_log` VALUES (1625495355380506626, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-14 22:01:07\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-14 22:01:07\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1625495355317592066\",\"menuName\":\"云端配置\",\"orderNum\":10,\"path\":\"oss-config/index\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"download\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 22:01:08');
+INSERT INTO `sys_oper_log` VALUES (1625495551623602177, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-14 22:01:08\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-14 22:01:54\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1625495355317592066\",\"menuName\":\"云端配置\",\"orderNum\":10,\"path\":\"system/oss-config/index\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"download\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 22:01:54');
+INSERT INTO `sys_oper_log` VALUES (1625495738651811841, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-14 22:01:08\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-14 22:02:38\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1625495355317592066\",\"menuName\":\"云端配置\",\"orderNum\":5,\"path\":\"system/oss-config/index\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"download\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 22:02:39');
+INSERT INTO `sys_oper_log` VALUES (1625495844050477057, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-14 22:01:08\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-14 22:03:04\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1625495355317592066\",\"menuName\":\"云端配置\",\"orderNum\":4,\"path\":\"system/oss-config/index\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"download\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 22:03:04');
+INSERT INTO `sys_oper_log` VALUES (1625495864619343873, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-14 22:03:09\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":2,\"menuName\":\"系统监控\",\"orderNum\":5,\"path\":\"monitor\",\"component\":null,\"queryParam\":\"\",\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"\",\"icon\":\"monitor\",\"remark\":\"系统监控目录\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 22:03:09');
+INSERT INTO `sys_oper_log` VALUES (1625495981514596354, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-14 22:03:36\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":1,\"menuName\":\"系统管理\",\"orderNum\":5,\"path\":\"system\",\"component\":null,\"queryParam\":\"\",\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"\",\"icon\":\"system\",\"remark\":\"系统管理目录\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 22:03:37');
+INSERT INTO `sys_oper_log` VALUES (1625496082559574018, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-14 22:01:08\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-14 22:04:00\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1625495355317592066\",\"menuName\":\"云端配置\",\"orderNum\":4,\"path\":\"system/oss-config/index\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"upload\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-14 22:04:01');
+INSERT INTO `sys_oper_log` VALUES (1625778064375959553, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/149', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 16:44:31');
+INSERT INTO `sys_oper_log` VALUES (1625778069941800961, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/148', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 16:44:32');
+INSERT INTO `sys_oper_log` VALUES (1625778076593967105, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/147', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 16:44:34');
+INSERT INTO `sys_oper_log` VALUES (1625778085594943489, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/144', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 16:44:36');
+INSERT INTO `sys_oper_log` VALUES (1625787279983267841, '对象存储配置', 2, 'com.zhi.web.controller.system.SysOssConfigController.edit()', 'PUT', 1, 'admin', '', '/system/oss/config', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":1,\"configKey\":\"minio\",\"accessKey\":\"hBaUeH9xKIj6dgvqFPCXHdk3wcoAavN2\",\"secretKey\":\"hBaUeH9xKIj6dgvqFPCXHdk3wcoAavN2\",\"bucketName\":\"blog\",\"prefix\":\"\",\"endpoint\":\"127.0.0.1:9000\",\"domain\":\"\",\"isHttps\":\"N\",\"status\":\"1\",\"region\":\"\",\"ext1\":\"\",\"remark\":\"\",\"accessPolicy\":\"1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 17:21:08');
+INSERT INTO `sys_oper_log` VALUES (1625787307225272321, '对象存储状态修改', 2, 'com.zhi.web.controller.system.SysOssConfigController.changeStatus()', 'PUT', 1, 'admin', '', '/system/oss/config/changeStatus', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":1,\"configKey\":\"minio\",\"accessKey\":null,\"secretKey\":null,\"bucketName\":null,\"prefix\":null,\"endpoint\":null,\"domain\":null,\"isHttps\":null,\"status\":\"0\",\"region\":null,\"ext1\":null,\"remark\":null,\"accessPolicy\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 17:21:14');
+INSERT INTO `sys_oper_log` VALUES (1625787348908265474, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '', 1, '创建Bucket失败, 请核对配置信息:[The Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 1743F5041BDC54A0; S3 Extended Request ID: 51b06bbe-5c82-4e94-8731-642a4083de7e; Proxy: null)]', '2023-02-15 17:21:24');
+INSERT INTO `sys_oper_log` VALUES (1625787606790852610, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '', 1, '创建Bucket失败, 请核对配置信息:[The Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 1743F5126CA97120; S3 Extended Request ID: 51b06bbe-5c82-4e94-8731-642a4083de7e; Proxy: null)]', '2023-02-15 17:22:26');
+INSERT INTO `sys_oper_log` VALUES (1625787904087314434, '对象存储配置', 2, 'com.zhi.web.controller.system.SysOssConfigController.edit()', 'PUT', 1, 'admin', '', '/system/oss/config', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":1,\"configKey\":\"minio\",\"accessKey\":\"Di4h8evEEG9p9fsB\",\"secretKey\":\"hBaUeH9xKIj6dgvqFPCXHdk3wcoAavN2\",\"bucketName\":\"blog\",\"prefix\":\"\",\"endpoint\":\"127.0.0.1:9000\",\"domain\":\"\",\"isHttps\":\"N\",\"status\":\"0\",\"region\":\"\",\"ext1\":\"\",\"remark\":\"\",\"accessPolicy\":\"1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 17:23:37');
+INSERT INTO `sys_oper_log` VALUES (1625787929773232130, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1625787929773232129\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/15/c33f0514eddf4d1cae8a3e114a54c1af.png\",\"fileName\":\"1.png\"}}', 0, '', '2023-02-15 17:23:43');
+INSERT INTO `sys_oper_log` VALUES (1625788426961833986, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1625788426961833985\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/15/8f08966dff5c4f21861f997453d23cda.jpg\",\"fileName\":\"奔驰银箭MercedesBenz Vision EQ Silver Arrow 3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-15 17:25:41');
+INSERT INTO `sys_oper_log` VALUES (1625788430799622145, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":217,\"categoryName\":\"付费\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1625788426961833985\",\"articleTitle\":\"测试文章\",\"articleContent\":\"这一次我一定要成功\",\"type\":1,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 17:25:42');
+INSERT INTO `sys_oper_log` VALUES (1625844324862369793, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/225', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:07:48');
+INSERT INTO `sys_oper_log` VALUES (1625844424464506881, '说说管理', 3, 'com.zhi.blog.controller.TalkController.remove()', 'DELETE', 1, 'admin', '', '/talk/talk/53', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:08:12');
+INSERT INTO `sys_oper_log` VALUES (1625844436040785922, '说说管理', 3, 'com.zhi.blog.controller.TalkController.remove()', 'DELETE', 1, 'admin', '', '/talk/talk/51', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:08:15');
+INSERT INTO `sys_oper_log` VALUES (1625844453824634882, '说说管理', 3, 'com.zhi.blog.controller.TalkController.remove()', 'DELETE', 1, 'admin', '', '/talk/talk/50', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:08:19');
+INSERT INTO `sys_oper_log` VALUES (1625845605282729985, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '', 1, '创建Bucket失败, 请核对配置信息:[Unable to execute HTTP request: Connect to 127.0.0.1:9000 [/127.0.0.1] failed: Connection refused: connect]', '2023-02-15 21:12:54');
+INSERT INTO `sys_oper_log` VALUES (1625845998343540739, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1625845998343540738\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/15/bf09b6dafe91486ab42c70e3674bb84b.jpg\",\"fileName\":\"1.jpg\"}}', 0, '', '2023-02-15 21:14:27');
+INSERT INTO `sys_oper_log` VALUES (1625846030375440386, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":150,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"springboot\"],\"articleCover\":\"1625845998343540738\",\"articleTitle\":\"123\",\"articleContent\":\"123\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:14:35');
+INSERT INTO `sys_oper_log` VALUES (1625846305064603649, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'test1', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1625846305001689090\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/15/c152c56a1200477f85e9d6e8364d9f13.jpg\",\"fileName\":\"QQ图片20210630102645.jpg\"}}', 0, '', '2023-02-15 21:15:41');
+INSERT INTO `sys_oper_log` VALUES (1625846327227305985, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'test1', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"test1\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":151,\"userId\":4,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\"],\"articleCover\":\"1625846305001689090\",\"articleTitle\":\"11111\",\"articleContent\":\"11111\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:15:46');
+INSERT INTO `sys_oper_log` VALUES (1625847073033277442, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'test1', '', '/article/article/151', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:18:44');
+INSERT INTO `sys_oper_log` VALUES (1625847185734225921, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1625788426961833985', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:19:11');
+INSERT INTO `sys_oper_log` VALUES (1625847195834109954, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1625847195834109953\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/15/d1003aa894b3458ab595e3b00b171d48.jpg\",\"fileName\":\"1.jpg\"}}', 0, '', '2023-02-15 21:19:13');
+INSERT INTO `sys_oper_log` VALUES (1625847199101472769, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":138,\"userId\":1,\"categoryId\":217,\"categoryName\":\"付费\",\"tagNameList\":[\"springboot\",\"vue\"],\"articleCover\":\"1625847195834109953\",\"articleTitle\":\"测试文章\",\"articleContent\":\"这一次我一定要成功\",\"type\":1,\"originalUrl\":\"1\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:19:14');
+INSERT INTO `sys_oper_log` VALUES (1625847218852450305, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/138', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-15 21:19:18');
+INSERT INTO `sys_oper_log` VALUES (1626093282092146690, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1626093282025037825\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/16/f73c9860389842e590cecab5be49a3b3.jpg\",\"fileName\":\"宇宙.jpg\"}}', 0, '', '2023-02-16 13:37:04');
+INSERT INTO `sys_oper_log` VALUES (1626093305089515522, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":152,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\"],\"articleCover\":\"1626093282025037825\",\"articleTitle\":\"123\",\"articleContent\":\"123\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":2}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 13:37:10');
+INSERT INTO `sys_oper_log` VALUES (1626093921014669314, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/152', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 13:39:37');
+INSERT INTO `sys_oper_log` VALUES (1626094020730052609, '说说管理', 3, 'com.zhi.blog.controller.TalkController.remove()', 'DELETE', 1, 'admin', '', '/talk/talk/56', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 13:40:01');
+INSERT INTO `sys_oper_log` VALUES (1626094366458142721, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1626094366391033858\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/16/02df055e87e049ae9af540e380b39766.jpg\",\"fileName\":\"QQ图片20210630102658.jpg\"}}', 0, '', '2023-02-16 13:41:23');
+INSERT INTO `sys_oper_log` VALUES (1626094375538810881, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"userId\":1,\"categoryId\":null,\"categoryName\":null,\"tagNameList\":[],\"articleCover\":\"1626094366391033858\",\"articleTitle\":\"CESHI\",\"articleContent\":\"CESHI\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\n; Field \'category_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'category_name\' doesn\'t have a default value', '2023-02-16 13:41:25');
+INSERT INTO `sys_oper_log` VALUES (1626094642476900353, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":226,\"categoryName\":\"默认\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 13:42:29');
+INSERT INTO `sys_oper_log` VALUES (1626094686273822721, '标签管理', 1, 'com.zhi.blog.controller.TagController.add()', 'POST', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":67,\"tagName\":\"默认\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 13:42:39');
+INSERT INTO `sys_oper_log` VALUES (1626098067285487618, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1626098067067383809\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/16/80992e0e2ac9492cb6d6c5800b9ea3fe.jpg\",\"fileName\":\"QQ图片20210630104247.jpg\"}}', 0, '', '2023-02-16 13:56:05');
+INSERT INTO `sys_oper_log` VALUES (1626098077410537474, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":153,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[\"默认\"],\"articleCover\":\"1626098067067383809\",\"articleTitle\":\"123\",\"articleContent\":\"123\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":2}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 13:56:08');
+INSERT INTO `sys_oper_log` VALUES (1626098177729900546, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/150', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 13:56:32');
+INSERT INTO `sys_oper_log` VALUES (1626100461083873282, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/1', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 14:05:36');
+INSERT INTO `sys_oper_log` VALUES (1626101052115886082, '分类管理', 1, 'com.zhi.blog.controller.CategoryController.add()', 'POST', 1, 'admin', '', '/category/category', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":227,\"categoryName\":\"默认\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 14:07:57');
+INSERT INTO `sys_oper_log` VALUES (1626101128309612545, '分类管理', 3, 'com.zhi.blog.controller.CategoryController.remove()', 'DELETE', 1, 'admin', '', '/category/category/1', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"不允许删除默认分类\",\"data\":null}', 0, '', '2023-02-16 14:08:15');
+INSERT INTO `sys_oper_log` VALUES (1626101164233826306, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/1', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"不允许删除默认标签\",\"data\":null}', 0, '', '2023-02-16 14:08:24');
+INSERT INTO `sys_oper_log` VALUES (1626101207946862593, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/1', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"不允许删除默认标签\",\"data\":null}', 0, '', '2023-02-16 14:08:34');
+INSERT INTO `sys_oper_log` VALUES (1626101318445801474, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/1,66', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"不允许删除默认标签\",\"data\":null}', 0, '', '2023-02-16 14:09:00');
+INSERT INTO `sys_oper_log` VALUES (1626101728887808002, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/66', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"已有文章对应此标签,无法删除\",\"data\":null}', 0, '', '2023-02-16 14:10:38');
+INSERT INTO `sys_oper_log` VALUES (1626102097579712513, '标签管理', 3, 'com.zhi.blog.controller.TagController.remove()', 'DELETE', 1, 'admin', '', '/tag/tag/1', '127.0.0.1', '内网IP', '{}', '{\"code\":500,\"msg\":\"不允许删除默认标签\",\"data\":null}', 0, '', '2023-02-16 14:12:06');
+INSERT INTO `sys_oper_log` VALUES (1626102236230819841, '标签管理', 2, 'com.zhi.blog.controller.TagController.edit()', 'PUT', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"tagName\":\"默认1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 14:12:39');
+INSERT INTO `sys_oper_log` VALUES (1626102251271593986, '标签管理', 2, 'com.zhi.blog.controller.TagController.edit()', 'PUT', 1, 'admin', '', '/tag/tag', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"tagName\":\"默认\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 14:12:43');
+INSERT INTO `sys_oper_log` VALUES (1626103128623521794, '说说管理', 3, 'com.zhi.blog.controller.TalkController.remove()', 'DELETE', 1, 'admin', '', '/talk/talk/57', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 14:16:12');
+INSERT INTO `sys_oper_log` VALUES (1626104291028738050, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1626104290965823489\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/16/9f00764fa98545a0a9745af49611d6df.jpg\",\"fileName\":\"宇宙.jpg\"}}', 0, '', '2023-02-16 14:20:49');
+INSERT INTO `sys_oper_log` VALUES (1626104299861942273, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-15 21:08:07\",\"updateBy\":null,\"updateTime\":null,\"id\":55,\"userId\":1,\"content\":\"123\",\"images\":\"1626104290965823489\",\"isTop\":null,\"imgList\":[\"1626104290965823489\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'55\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/TalkMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.TalkMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_talk ( id, user_id, content, images, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'55\' for key \'PRIMARY\'\n; Duplicate entry \'55\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'55\' for key \'PRIMARY\'', '2023-02-16 14:20:51');
+INSERT INTO `sys_oper_log` VALUES (1626104340341170177, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":58,\"userId\":1,\"content\":\"123\",\"images\":null,\"isTop\":null,\"imgList\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 14:21:01');
+INSERT INTO `sys_oper_log` VALUES (1626104363510505473, '说说管理', 3, 'com.zhi.blog.controller.TalkController.remove()', 'DELETE', 1, 'admin', '', '/talk/talk/58', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 14:21:06');
+INSERT INTO `sys_oper_log` VALUES (1626104384729489410, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1626104384729489409\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/16/aee9e25c646640198a1ebe91ebfd558a.jpg\",\"fileName\":\"宇宙.jpg\"}}', 0, '', '2023-02-16 14:21:12');
+INSERT INTO `sys_oper_log` VALUES (1626104390031089665, '说说管理', 1, 'com.zhi.blog.controller.TalkController.add()', 'POST', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":59,\"userId\":1,\"content\":\"123\",\"images\":\"1626104384729489409\",\"isTop\":null,\"imgList\":[\"1626104384729489409\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 14:21:13');
+INSERT INTO `sys_oper_log` VALUES (1626104443470716929, '说说管理', 2, 'com.zhi.blog.controller.TalkController.edit()', 'PUT', 1, 'admin', '', '/talk/talk', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-16 14:21:13\",\"updateBy\":null,\"updateTime\":null,\"id\":59,\"userId\":1,\"content\":\"123666\",\"images\":\"1626104384729489409\",\"isTop\":null,\"imgList\":[\"1626104384729489409\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-16 14:21:26');
+INSERT INTO `sys_oper_log` VALUES (1627233397812326401, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-19 17:07:28\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-19 17:07:28\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1627233395924889602\",\"menuName\":\"关于我\",\"orderNum\":4,\"path\":\"about/About.vue\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"people\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-19 17:07:29');
+INSERT INTO `sys_oper_log` VALUES (1627233573985677314, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-19 17:07:29\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-19 17:08:10\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1627233395924889602\",\"menuName\":\"关于我\",\"orderNum\":4,\"path\":\"about\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"people\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-19 17:08:11');
+INSERT INTO `sys_oper_log` VALUES (1627234047824588801, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-19 17:07:29\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-19 17:10:03\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1627233395924889602\",\"menuName\":\"关于我\",\"orderNum\":4,\"path\":\"about\",\"component\":\"about\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"theme\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-19 17:10:04');
+INSERT INTO `sys_oper_log` VALUES (1627234242603872258, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-19 17:07:29\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-19 17:10:50\",\"parentName\":null,\"parentId\":\"1613139021339353090\",\"children\":[],\"menuId\":\"1627233395924889602\",\"menuName\":\"关于我\",\"orderNum\":4,\"path\":\"about\",\"component\":\"about/About.vue\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"theme\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-19 17:10:51');
+INSERT INTO `sys_oper_log` VALUES (1627502180934127617, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627502179105411073\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/8fd16de1a8554a7d9390d0f72a696dfe.jpg\",\"fileName\":\"QQ图片20210630123438.jpg\"}}', 0, '', '2023-02-20 10:55:32');
+INSERT INTO `sys_oper_log` VALUES (1627503991862628353, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627503990038106114\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/e8965b9e67fc4620afb5b6164b8252ad.jpg\",\"fileName\":\"QQ图片20210630123438.jpg\"}}', 0, '', '2023-02-20 11:02:44');
+INSERT INTO `sys_oper_log` VALUES (1627504234058518530, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627504232301105154\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/613d1c41c1e4440197404428a479d34e.jpg\",\"fileName\":\"bg.jpg\"}}', 0, '', '2023-02-20 11:03:42');
+INSERT INTO `sys_oper_log` VALUES (1627504613349429250, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627504611596210178\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/f053bc30eb244bd8881d07ae09f24514.jpg\",\"fileName\":\"QQ图片20210630104301.jpg\"}}', 0, '', '2023-02-20 11:05:12');
+INSERT INTO `sys_oper_log` VALUES (1627511141108322305, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627511139413823490\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/cf788d70c46a440d8ed34ed775086b89.jpg\",\"fileName\":\"QQ图片20210630123438.jpg\"}}', 0, '', '2023-02-20 11:31:08');
+INSERT INTO `sys_oper_log` VALUES (1627511357404385281, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627511333031284737\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/4467f549139a4833b281fe83ab0a9fcc.jpeg\",\"fileName\":\"digitalart,城市,未来,猫,fantasyart,科幻_千叶网.jpeg\"}}', 0, '', '2023-02-20 11:32:00');
+INSERT INTO `sys_oper_log` VALUES (1627511452283736066, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627511450526322690\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/e5ab0134bf1644ea88e4095323356b05.jpeg\",\"fileName\":\"digitalart,城市,未来,猫,fantasyart,科幻_千叶网.jpeg\"}}', 0, '', '2023-02-20 11:32:23');
+INSERT INTO `sys_oper_log` VALUES (1627511566293307394, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627511565311840258\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/e7a1c90ebad94a82bd452d2dac349a0c.jpg\",\"fileName\":\"QQ图片20210630102637.jpg\"}}', 0, '', '2023-02-20 11:32:50');
+INSERT INTO `sys_oper_log` VALUES (1627511670681145345, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627511668344918018\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/c4a4c3092b1e4c5cba341caafc0890a5.jpg\",\"fileName\":\"bg.jpg\"}}', 0, '', '2023-02-20 11:33:15');
+INSERT INTO `sys_oper_log` VALUES (1627511792068497410, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627511791024115714\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/39f290cc5fc244eaaf79f0f48d14b316.jpg\",\"fileName\":\"QQ图片20210630102619.jpg\"}}', 0, '', '2023-02-20 11:33:44');
+INSERT INTO `sys_oper_log` VALUES (1627529841039413250, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627529839412023298\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/40bdcd90d42b4d34aa89ecd64016229b.jpg\",\"fileName\":\"QQ图片20210630134357.jpg\"}}', 0, '', '2023-02-20 12:45:27');
+INSERT INTO `sys_oper_log` VALUES (1627530044001783809, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627530023676186625\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/93d6d39a2103496f969ca8c3d83a0aaa.jpg\",\"fileName\":\"QQ图片20210630102642.jpg\"}}', 0, '', '2023-02-20 12:46:15');
+INSERT INTO `sys_oper_log` VALUES (1627530373174956033, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627530371480457218\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/3d966f171aec430d86a3bbea9c04e1e0.jpg\",\"fileName\":\"QQ图片20210630123442.jpg\"}}', 0, '', '2023-02-20 12:47:34');
+INSERT INTO `sys_oper_log` VALUES (1627531673199480833, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627531672146710530\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/c1125cdf905c437cba44833617ab531b.jpg\",\"fileName\":\"QQ图片20210630102637.jpg\"}}', 0, '', '2023-02-20 12:52:44');
+INSERT INTO `sys_oper_log` VALUES (1627532282497634306, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627532280811524097\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/1675166ba2be427385fb412fb10e5f94.jpg\",\"fileName\":\"QQ图片20210630104247.jpg\"}}', 0, '', '2023-02-20 12:55:09');
+INSERT INTO `sys_oper_log` VALUES (1627534210719846401, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627534209742573569\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/4163a7b8abfa4b99a957c6fd40349736.jpg\",\"fileName\":\"QQ图片20210630102642.jpg\"}}', 0, '', '2023-02-20 13:02:49');
+INSERT INTO `sys_oper_log` VALUES (1627535584610258946, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627535582852845569\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/36d78492c4b14db5ad97bf66d1403a5a.jpg\",\"fileName\":\"bg.jpg\"}}', 0, '', '2023-02-20 13:08:16');
+INSERT INTO `sys_oper_log` VALUES (1627536508116307969, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627536506291785729\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/14f71b942c7b4afcb5c58ceb454800ea.jpg\",\"fileName\":\"QQ图片20210630102619.jpg\"}}', 0, '', '2023-02-20 13:11:56');
+INSERT INTO `sys_oper_log` VALUES (1627536710353063938, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627536708662759425\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/0d08292815454dcd9a3f2ff2b9baad8a.jpg\",\"fileName\":\"QQ图片20210630104227.jpg\"}}', 0, '', '2023-02-20 13:12:45');
+INSERT INTO `sys_oper_log` VALUES (1627537622157004802, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627537597880373250\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/7e23633378da4f74957de13fa4dfc267.jpg\",\"fileName\":\"QQ图片20210630104227.jpg\"}}', 0, '', '2023-02-20 13:16:22');
+INSERT INTO `sys_oper_log` VALUES (1627537695494410242, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627537693686665218\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/5dead792e5c74d47bf779e2e3af6bc0c.jpg\",\"fileName\":\"QQ图片20210630104247.jpg\"}}', 0, '', '2023-02-20 13:16:39');
+INSERT INTO `sys_oper_log` VALUES (1627537801836793857, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627537800050020353\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/db579a99836047d6b12e03150dd93506.jpg\",\"fileName\":\"QQ图片20210630104301.jpg\"}}', 0, '', '2023-02-20 13:17:05');
+INSERT INTO `sys_oper_log` VALUES (1627537807918534657, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627537806861570050\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/9755790db5df49549c65e7792d09a718.jpg\",\"fileName\":\"QQ图片20210630104227.jpg\"}}', 0, '', '2023-02-20 13:17:06');
+INSERT INTO `sys_oper_log` VALUES (1627537811844403202, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627537810158292994\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/61b276351e2148c699808b27cd191f7e.jpg\",\"fileName\":\"QQ图片20210630134408.jpg\"}}', 0, '', '2023-02-20 13:17:07');
+INSERT INTO `sys_oper_log` VALUES (1627537823252910082, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627537821663268865\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/101d48888ddd47c99c36c3f83a3844a7.jpg\",\"fileName\":\"QQ图片20210630134405.jpg\"}}', 0, '', '2023-02-20 13:17:10');
+INSERT INTO `sys_oper_log` VALUES (1627537930186690561, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627537928395722754\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/40f81a32f577464fac47933fdd14d9fa.jpg\",\"fileName\":\"789672.jpg\"}}', 0, '', '2023-02-20 13:17:35');
+INSERT INTO `sys_oper_log` VALUES (1627539510432665601, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627539508666863618\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/9d75283ccbda4d38b72293c3ece90af9.jpg\",\"fileName\":\"290072.jpg\"}}', 0, '', '2023-02-20 13:23:52');
+INSERT INTO `sys_oper_log` VALUES (1627539514878627841, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627539513163157505\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/3fcd6fb825484eb1accec5fd1b805667.jpg\",\"fileName\":\"QQ图片20210630102645.jpg\"}}', 0, '', '2023-02-20 13:23:53');
+INSERT INTO `sys_oper_log` VALUES (1627539523401453569, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627539521610485762\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/7925a23fc65e4b3b82ae85d79ecc65c8.jpg\",\"fileName\":\"QQ图片20210630102619.jpg\"}}', 0, '', '2023-02-20 13:23:55');
+INSERT INTO `sys_oper_log` VALUES (1627539530670182401, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627539529046986753\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/70e2e6777de04562979d3a42af939914.jpg\",\"fileName\":\"798004.jpg\"}}', 0, '', '2023-02-20 13:23:57');
+INSERT INTO `sys_oper_log` VALUES (1627539544192618497, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627539542598782978\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/5014c280255c42c6b0ceee9bab64b5fc.jpeg\",\"fileName\":\"digitalart,城市,未来,猫,fantasyart,科幻_千叶网.jpeg\"}}', 0, '', '2023-02-20 13:24:00');
+INSERT INTO `sys_oper_log` VALUES (1627539549389361154, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627539548277870594\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/5d0070200e2a49e4bceca0e255dd2a2d.jpg\",\"fileName\":\"QQ图片20210630102642.jpg\"}}', 0, '', '2023-02-20 13:24:01');
+INSERT INTO `sys_oper_log` VALUES (1627539728595193857, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627539726816808962\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/2e089b929d0d4c05b317be1b8509dc23.jpg\",\"fileName\":\"宇宙.jpg\"}}', 0, '', '2023-02-20 13:24:44');
+INSERT INTO `sys_oper_log` VALUES (1627542648199876609, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627542645771374593\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/426c4f1e9b2644628c74a31994ce9481.jpg\",\"fileName\":\"QQ图片20210630104247.jpg\"}}', 0, '', '2023-02-20 13:36:20');
+INSERT INTO `sys_oper_log` VALUES (1627544877321457666, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627544875626958850\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/e1cc961801a949a291370a99e400349b.jpeg\",\"fileName\":\"digitalart,城市,未来,猫,fantasyart,科幻_千叶网.jpeg\"}}', 0, '', '2023-02-20 13:45:12');
+INSERT INTO `sys_oper_log` VALUES (1627556658781655041, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627556657644998657\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/eaadf85450f1410dab0478eb37c19cf7.jpeg\",\"fileName\":\"thelastofus,apocalyptic_千叶网.jpeg\"}}', 0, '', '2023-02-20 14:32:01');
+INSERT INTO `sys_oper_log` VALUES (1627556771088338945, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627556770035568641\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/65859e6d993e44b298f294a728a5b731.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-20 14:32:27');
+INSERT INTO `sys_oper_log` VALUES (1627556785961340929, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":154,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"默认\"],\"articleCover\":\"1627556770035568641\",\"articleTitle\":\"测试\",\"articleContent\":\"![DESC](http://127.0.0.1:9000/blog/2023/02/20/eaadf85450f1410dab0478eb37c19cf7.jpeg)\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 14:32:31');
+INSERT INTO `sys_oper_log` VALUES (1627557207899934721, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627557206851358722\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/d90a424b6e734cdea66a48af80338338.jpg\",\"fileName\":\"Life,is,Strange,23440x1440带鱼屏壁纸_千叶网.jpg\"}}', 0, '', '2023-02-20 14:34:12');
+INSERT INTO `sys_oper_log` VALUES (1627561975720480769, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627561973971456001\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/92b4709cdc5b497e8b08f3b23ac4be37.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-20 14:53:08');
+INSERT INTO `sys_oper_log` VALUES (1627613439021060097, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 18:17:37\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 18:17:37\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1627613437242675202\",\"menuName\":\"相册管理\",\"orderNum\":4,\"path\":\"albums\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"phone\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 18:17:38');
+INSERT INTO `sys_oper_log` VALUES (1627613774808649730, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 18:18:57\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 18:18:57\",\"parentName\":null,\"parentId\":\"1627613437242675202\",\"children\":[],\"menuId\":\"1627613773059624962\",\"menuName\":\"相册列表\",\"orderNum\":1,\"path\":\"album\",\"component\":\"album/Album.vue\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"example\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 18:18:58');
+INSERT INTO `sys_oper_log` VALUES (1627635890568335361, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1627613773059624962', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 19:46:51');
+INSERT INTO `sys_oper_log` VALUES (1627635902572433409, '菜单管理', 3, 'com.zhi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '', '/system/menu/1627613437242675202', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 19:46:54');
+INSERT INTO `sys_oper_log` VALUES (1627638279127994370, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '4.2.2.2', ' ', '\"blog_photo_album\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 19:56:20');
+INSERT INTO `sys_oper_log` VALUES (1627638807874539522, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 19:58:26\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":null},\"tableId\":\"1627638276586246146\",\"tableName\":\"blog_photo_album\",\"tableComment\":\"相册管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Album\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"album\",\"businessName\":\"Album\",\"functionName\":\"相册管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 19:56:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 19:58:26\",\"columnId\":\"1627638276653355010\",\"tableId\":\"1627638276586246146\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"superColumn\":false,\"pk\":true,\"edit\":true,\"insert\":false,\"usableColumn\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 19:56:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 19:58:26\",\"columnId\":\"1627638276653355011\",\"tableId\":\"1627638276586246146\",\"columnName\":\"album_name\",\"columnComment\":\"相册名\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"javaField\":\"albumName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"superColumn\":false,\"pk\":false,\"edit\":true,\"insert\":true,\"usableColumn\":false,\"increment\":false,\"query\":true,\"capJavaField\":\"AlbumName\"},{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 19:56:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 19:58:26\",\"columnId\":\"1627638276653355012\",\"tableId\":\"1627638276586246146\",\"columnName\":\"album_desc\",\"columnComment\":\"相册描述\",\"columnType\":\"varchar(50)\",\"javaTyp', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 19:58:27');
+INSERT INTO `sys_oper_log` VALUES (1627639008316133378, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 19:59:14\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":null},\"tableId\":\"1627638276586246146\",\"tableName\":\"blog_photo_album\",\"tableComment\":\"相册管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Album\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"album\",\"businessName\":\"album\",\"functionName\":\"相册管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 19:56:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 19:59:14\",\"columnId\":\"1627638276653355010\",\"tableId\":\"1627638276586246146\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"superColumn\":false,\"pk\":true,\"edit\":true,\"insert\":false,\"usableColumn\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 19:56:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 19:59:14\",\"columnId\":\"1627638276653355011\",\"tableId\":\"1627638276586246146\",\"columnName\":\"album_name\",\"columnComment\":\"相册名\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"javaField\":\"albumName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"superColumn\":false,\"pk\":false,\"edit\":true,\"insert\":true,\"usableColumn\":false,\"increment\":false,\"query\":true,\"capJavaField\":\"AlbumName\"},{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 19:56:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 19:59:14\",\"columnId\":\"1627638276653355012\",\"tableId\":\"1627638276586246146\",\"columnName\":\"album_desc\",\"columnComment\":\"相册描述\",\"columnType\":\"varchar(50)\",\"javaTyp', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 19:59:14');
+INSERT INTO `sys_oper_log` VALUES (1627639040209620994, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '4.2.2.2', ' ', '{\"tables\":\"blog_photo_album\"}', '', 0, '', '2023-02-20 19:59:22');
+INSERT INTO `sys_oper_log` VALUES (1627641229317521410, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:02:59\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:08:03\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1627639037193916416\",\"menuName\":\"相册管理\",\"orderNum\":1,\"path\":\"album\",\"component\":\"album/album/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:list\",\"icon\":\"#\",\"remark\":\"相册管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:08:04');
+INSERT INTO `sys_oper_log` VALUES (1627641510222643201, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:02:59\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:09:10\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1627639037193916416\",\"menuName\":\"相册管理\",\"orderNum\":1,\"path\":\"album\",\"component\":\"album/album/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:list\",\"icon\":\"#\",\"remark\":\"相册管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:09:11');
+INSERT INTO `sys_oper_log` VALUES (1627641734093619201, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:10:03\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:10:03\",\"parentName\":null,\"parentId\":\"1627639037193916416\",\"children\":[],\"menuId\":\"1627641732344594434\",\"menuName\":\"相册列表\",\"orderNum\":1,\"path\":\"album\",\"component\":\"album\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"build\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:10:04');
+INSERT INTO `sys_oper_log` VALUES (1627641927472005121, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:02:59\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:10:49\",\"parentName\":null,\"parentId\":\"1627641732344594434\",\"children\":[],\"menuId\":\"1627639037193916418\",\"menuName\":\"相册管理新增\",\"orderNum\":2,\"path\":\"#\",\"component\":\"\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"F\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:add\",\"icon\":\"#\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:10:50');
+INSERT INTO `sys_oper_log` VALUES (1627641959738785793, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:02:59\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:10:57\",\"parentName\":null,\"parentId\":\"1627641732344594434\",\"children\":[],\"menuId\":\"1627639037193916419\",\"menuName\":\"相册管理修改\",\"orderNum\":3,\"path\":\"#\",\"component\":\"\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"F\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:edit\",\"icon\":\"#\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:10:58');
+INSERT INTO `sys_oper_log` VALUES (1627641998884225026, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:02:59\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:11:06\",\"parentName\":null,\"parentId\":\"1627641732344594434\",\"children\":[],\"menuId\":\"1627639037193916420\",\"menuName\":\"相册管理删除\",\"orderNum\":4,\"path\":\"#\",\"component\":\"\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"F\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:remove\",\"icon\":\"#\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:11:07');
+INSERT INTO `sys_oper_log` VALUES (1627642025320923137, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:02:59\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:11:13\",\"parentName\":null,\"parentId\":\"1627641732344594434\",\"children\":[],\"menuId\":\"1627639037193916417\",\"menuName\":\"相册管理查询\",\"orderNum\":1,\"path\":\"#\",\"component\":\"\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"F\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:query\",\"icon\":\"#\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:11:14');
+INSERT INTO `sys_oper_log` VALUES (1627642049081655297, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:02:59\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:11:18\",\"parentName\":null,\"parentId\":\"1627641732344594434\",\"children\":[],\"menuId\":\"1627639037193916421\",\"menuName\":\"相册管理导出\",\"orderNum\":5,\"path\":\"#\",\"component\":\"\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"F\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:export\",\"icon\":\"#\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:11:19');
+INSERT INTO `sys_oper_log` VALUES (1627642194154242049, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:10:04\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:11:49\",\"parentName\":null,\"parentId\":\"1627639037193916416\",\"children\":[],\"menuId\":\"1627641732344594434\",\"menuName\":\"相册列表\",\"orderNum\":1,\"path\":\"album\",\"component\":\"album/album\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"build\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:11:54');
+INSERT INTO `sys_oper_log` VALUES (1627642569422815234, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:10:04\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:13:22\",\"parentName\":null,\"parentId\":\"1627639037193916416\",\"children\":[],\"menuId\":\"1627641732344594434\",\"menuName\":\"相册列表\",\"orderNum\":1,\"path\":\"album\",\"component\":\"album/album\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"build\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:13:23');
+INSERT INTO `sys_oper_log` VALUES (1627642634212229121, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:02:59\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:13:38\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1627639037193916416\",\"menuName\":\"相册管理\",\"orderNum\":2,\"path\":\"album\",\"component\":\"album/album/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:list\",\"icon\":\"chart\",\"remark\":\"相册管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:13:39');
+INSERT INTO `sys_oper_log` VALUES (1627642999389306882, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:15:05\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:15:05\",\"parentName\":null,\"parentId\":0,\"children\":[],\"menuId\":\"1627642998340730881\",\"menuName\":\"相册管理\",\"orderNum\":2,\"path\":\"album\",\"component\":null,\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"M\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"build\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:15:06');
+INSERT INTO `sys_oper_log` VALUES (1627643093526265857, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:15:27\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1627642998340730881\"},\"tableId\":\"1627638276586246146\",\"tableName\":\"blog_photo_album\",\"tableComment\":\"相册管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Album\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"album\",\"businessName\":\"album\",\"functionName\":\"相册管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 19:56:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:15:27\",\"columnId\":\"1627638276653355010\",\"tableId\":\"1627638276586246146\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"insert\":false,\"superColumn\":false,\"edit\":true,\"query\":false,\"capJavaField\":\"Id\",\"increment\":true},{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 19:56:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:15:27\",\"columnId\":\"1627638276653355011\",\"tableId\":\"1627638276586246146\",\"columnName\":\"album_name\",\"columnComment\":\"相册名\",\"columnType\":\"varchar(20)\",\"javaType\":\"String\",\"javaField\":\"albumName\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"LIKE\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"insert\":true,\"superColumn\":false,\"edit\":true,\"query\":true,\"capJavaField\":\"AlbumName\",\"increment\":false},{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 19:56:20\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:15:27\",\"columnId\":\"1627638276653355012\",\"tableId\":\"1627638276586246146\",\"columnName\":\"album_desc\",\"columnComment\":\"相册描述\",\"columnType\":\"varc', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:15:28');
+INSERT INTO `sys_oper_log` VALUES (1627643114850107394, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '4.2.2.2', ' ', '{\"tables\":\"blog_photo_album\"}', '', 0, '', '2023-02-20 20:15:33');
+INSERT INTO `sys_oper_log` VALUES (1627643465665888258, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:16:08\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 20:16:56\",\"parentName\":null,\"parentId\":\"1627642998340730881\",\"children\":[],\"menuId\":\"1627643112476131328\",\"menuName\":\"相册列表\",\"orderNum\":1,\"path\":\"album\",\"component\":\"album/album/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:list\",\"icon\":\"#\",\"remark\":\"相册管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:16:57');
+INSERT INTO `sys_oper_log` VALUES (1627645267471777793, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627645265534009346\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/62389e369ae64d61a26c756aa9e42dd8.jpeg\",\"fileName\":\"Spider,Man,MaviC漫画,漫画,蜘蛛,超级英雄,标志,黑暗_千叶网.jpeg\"}}', 0, '', '2023-02-20 20:24:07');
+INSERT INTO `sys_oper_log` VALUES (1627645455175270401, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627645452625133569\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/f5c1f42c1e084aa0aee90cb929fd441d.jpg\",\"fileName\":\"Riffelsee里弗尔湖3440x1440风景壁纸_千叶网.jpg\"}}', 0, '', '2023-02-20 20:24:51');
+INSERT INTO `sys_oper_log` VALUES (1627645791646535681, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":null,\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"1627645452625133569\",\"isDelete\":null,\"status\":0}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1\n; Data truncation: Out of range value for column \'id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'id\' at row 1', '2023-02-20 20:26:12');
+INSERT INTO `sys_oper_log` VALUES (1627646020739420161, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627646019632123906\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"1627645452625133569\",\"isDelete\":null,\"status\":0}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 20:27:06');
+INSERT INTO `sys_oper_log` VALUES (1627657037682843649, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:16:08\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-20 21:10:47\",\"parentName\":null,\"parentId\":\"1627642998340730881\",\"children\":[],\"menuId\":\"1627643112476131328\",\"menuName\":\"相册列表\",\"orderNum\":1,\"path\":\"album\",\"component\":\"album/album/Album\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:list\",\"icon\":\"#\",\"remark\":\"相册管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 21:10:53');
+INSERT INTO `sys_oper_log` VALUES (1627657202904866817, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627646019632123906\",\"albumName\":\"测试2\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/20/f5c1f42c1e084aa0aee90cb929fd441d.jpg\",\"isDelete\":0,\"status\":0}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627646019632123906\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627646019632123906\' for key \'PRIMARY\'\n; Duplicate entry \'1627646019632123906\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627646019632123906\' for key \'PRIMARY\'', '2023-02-20 21:11:32');
+INSERT INTO `sys_oper_log` VALUES (1627658267767349250, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1627646019632123906', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 21:15:46');
+INSERT INTO `sys_oper_log` VALUES (1627665762942459906, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627665761763860482\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/731df6e97c8f461a9b4b60b301d833a3.jpg\",\"fileName\":\"windows10窗口4k高清壁纸图片_千叶网.jpg\"}}', 0, '', '2023-02-20 21:45:33');
+INSERT INTO `sys_oper_log` VALUES (1627665816679882753, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627665814859554817\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/20/731df6e97c8f461a9b4b60b301d833a3.jpg\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 21:45:46');
+INSERT INTO `sys_oper_log` VALUES (1627666192242057218, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627666190476255233\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/83c7f5de63634221951855a1a0649058.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-20 21:47:15');
+INSERT INTO `sys_oper_log` VALUES (1627666216036343809, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627666215004545026\",\"albumName\":\"123\",\"albumDesc\":\"123\",\"albumCover\":\"1627666190476255233\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 21:47:21');
+INSERT INTO `sys_oper_log` VALUES (1627666936890519553, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1627666215004545026', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 21:50:13');
+INSERT INTO `sys_oper_log` VALUES (1627666978418323457, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627666975754940417\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/8a5338914aa145da9cbc54dfa7736cee.jpg\",\"fileName\":\"windows10窗口4k高清壁纸图片_千叶网.jpg\"}}', 0, '', '2023-02-20 21:50:23');
+INSERT INTO `sys_oper_log` VALUES (1627666984240017410, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627666982407106562\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/20/8a5338914aa145da9cbc54dfa7736cee.jpg\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-20 21:50:24');
+INSERT INTO `sys_oper_log` VALUES (1627667033590198274, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627667031962808322\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/af418a8aca0f4095a8e30ca3136db686.jpg\",\"fileName\":\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-20 21:50:36');
+INSERT INTO `sys_oper_log` VALUES (1627667038480756738, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627666982407106562\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/20/af418a8aca0f4095a8e30ca3136db686.jpg\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'\n; Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'', '2023-02-20 21:50:37');
+INSERT INTO `sys_oper_log` VALUES (1627673598292520962, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627673595939516418\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/20/bc7e25049822464abee816506fb51bc0.jpg\",\"fileName\":\"冰岛的环路4K风景壁纸_千叶网.jpg\"}}', 0, '', '2023-02-20 22:16:41');
+INSERT INTO `sys_oper_log` VALUES (1627673609935908865, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627666982407106562\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/20/bc7e25049822464abee816506fb51bc0.jpg\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'\n; Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'', '2023-02-20 22:16:44');
+INSERT INTO `sys_oper_log` VALUES (1627852988309696513, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627852985965080577\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/a91dda88952d4e3fa8a821e91ad934e8.jpg\",\"fileName\":\"沉沦螺旋_荷鲁斯站Downward,Spiral_,Horus,Station3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 10:09:31');
+INSERT INTO `sys_oper_log` VALUES (1627852991732248578, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"html\"],\"articleCover\":\"1627852985965080577\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:09:32');
+INSERT INTO `sys_oper_log` VALUES (1627854299289743361, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627854297444249601\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/8f2a717137b646acbff87adadd57dbb2.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-21 10:14:44');
+INSERT INTO `sys_oper_log` VALUES (1627854305107243009, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627666982407106562\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/8f2a717137b646acbff87adadd57dbb2.jpg\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'\n; Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'', '2023-02-21 10:14:45');
+INSERT INTO `sys_oper_log` VALUES (1627855930416820226, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627855928726515714\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/9a820a2dcdb542b49351b5bf221d2e66.jpg\",\"fileName\":\"冰岛的环路4K风景壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 10:21:13');
+INSERT INTO `sys_oper_log` VALUES (1627855940969689090, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627666982407106562\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/20/8a5338914aa145da9cbc54dfa7736cee.jpg\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'\n; Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627666982407106562\' for key \'PRIMARY\'', '2023-02-21 10:21:15');
+INSERT INTO `sys_oper_log` VALUES (1627856440045613058, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1627666982407106562', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:23:14');
+INSERT INTO `sys_oper_log` VALUES (1627856490381455361, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627856486984069121\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/2c7f4a4f245a429db3dc048c4f0b96f6.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-21 10:23:26');
+INSERT INTO `sys_oper_log` VALUES (1627857022709936130, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627857021028020225\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/fe9add89604f4bf19f5831f9a6d00090.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-21 10:25:33');
+INSERT INTO `sys_oper_log` VALUES (1627857382304395265, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627857380664422402\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/9a2403427c2040f98927106ea09ad42f.jpg\",\"fileName\":\"windows10窗口4k高清壁纸图片_千叶网.jpg\"}}', 0, '', '2023-02-21 10:26:59');
+INSERT INTO `sys_oper_log` VALUES (1627857387211730945, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627857385458511873\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"1627857380664422402\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:27:00');
+INSERT INTO `sys_oper_log` VALUES (1627857824014938113, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1627857380664422402', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:28:44');
+INSERT INTO `sys_oper_log` VALUES (1627857833913495554, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627857832864919553\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/646d4ee4f3ac4476b947fbdb74cd00f5.jpg\",\"fileName\":\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 10:28:46');
+INSERT INTO `sys_oper_log` VALUES (1627857838007136257, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627857385458511873\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"1627857832864919553\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627857385458511873\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627857385458511873\' for key \'PRIMARY\'\n; Duplicate entry \'1627857385458511873\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627857385458511873\' for key \'PRIMARY\'', '2023-02-21 10:28:47');
+INSERT INTO `sys_oper_log` VALUES (1627858872054067201, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1627857385458511873', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:32:54');
+INSERT INTO `sys_oper_log` VALUES (1627860020618080257, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627860018860666882\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/b1c77c7cbfc14d8ebf3cd415ce74baa6.jpg\",\"fileName\":\"冰岛的环路4K风景壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 10:37:28');
+INSERT INTO `sys_oper_log` VALUES (1627860024481034242, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860023315017730\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/b1c77c7cbfc14d8ebf3cd415ce74baa6.jpg\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:37:29');
+INSERT INTO `sys_oper_log` VALUES (1627860305797226498, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1627860023315017730', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:38:36');
+INSERT INTO `sys_oper_log` VALUES (1627860337048985602, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627860331508310018\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/d4c7295727dc40749df1fdf921e593fc.png\",\"fileName\":\"超宽,空间,蓝色_千叶网.png\"}}', 0, '', '2023-02-21 10:38:43');
+INSERT INTO `sys_oper_log` VALUES (1627860338680569857, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"123\",\"albumDesc\":\"123\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/d4c7295727dc40749df1fdf921e593fc.png\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:38:44');
+INSERT INTO `sys_oper_log` VALUES (1627860390060793858, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627860387489685505\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/19663e839bb44b6f9b6e302150e718d6.jpg\",\"fileName\":\"超人总动员23440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 10:38:56');
+INSERT INTO `sys_oper_log` VALUES (1627860393965690881, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"123\",\"albumDesc\":\"123\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/19663e839bb44b6f9b6e302150e718d6.jpg\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\n; Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'', '2023-02-21 10:38:57');
+INSERT INTO `sys_oper_log` VALUES (1627861561097887746, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627861559386611714\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/5f07677143514124adb4fa3f72a07874.jpg\",\"fileName\":\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 10:43:35');
+INSERT INTO `sys_oper_log` VALUES (1627861565896171522, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"123\",\"albumDesc\":\"123\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/5f07677143514124adb4fa3f72a07874.jpg\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\n; Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'', '2023-02-21 10:43:36');
+INSERT INTO `sys_oper_log` VALUES (1627862001101348865, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"123\",\"albumDesc\":\"1233\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/d4c7295727dc40749df1fdf921e593fc.png\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\n; Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'', '2023-02-21 10:45:20');
+INSERT INTO `sys_oper_log` VALUES (1627862190193156097, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627862189152968706\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/5e6599b7be004731a9f56200ae01b715.jpg\",\"fileName\":\"沉沦螺旋_荷鲁斯站Downward,Spiral_,Horus,Station3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 10:46:05');
+INSERT INTO `sys_oper_log` VALUES (1627862196841127938, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"123\",\"albumDesc\":\"123\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/5e6599b7be004731a9f56200ae01b715.jpg\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\n; Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'', '2023-02-21 10:46:07');
+INSERT INTO `sys_oper_log` VALUES (1627863022376624129, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627863020413689857\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/da68286bc2654d559d047d63df24343c.jpg\",\"fileName\":\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 10:49:23');
+INSERT INTO `sys_oper_log` VALUES (1627863027732750337, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"123\",\"albumDesc\":\"123\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/da68286bc2654d559d047d63df24343c.jpg\",\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/AlbumMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.AlbumMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo_album ( id, album_name, album_desc, album_cover, is_delete, status, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'\n; Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1627860336587612162\' for key \'PRIMARY\'', '2023-02-21 10:49:25');
+INSERT INTO `sys_oper_log` VALUES (1627863433049317377, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627863430687924226\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/4330028b55a74589a9f01d1f9ba43bcf.jpg\",\"fileName\":\"windows10窗口4k高清壁纸图片_千叶网.jpg\"}}', 0, '', '2023-02-21 10:51:01');
+INSERT INTO `sys_oper_log` VALUES (1627863436274737153, '相册管理', 2, 'com.zhi.blog.controller.AlbumController.edit()', 'PUT', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"123\",\"albumDesc\":\"123\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/4330028b55a74589a9f01d1f9ba43bcf.jpg\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:51:02');
+INSERT INTO `sys_oper_log` VALUES (1627863463810342913, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627863462698852353\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/fca5c4d3b0e8497b84206a03a3bb2dad.jpg\",\"fileName\":\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 10:51:09');
+INSERT INTO `sys_oper_log` VALUES (1627863468428271617, '相册管理', 2, 'com.zhi.blog.controller.AlbumController.edit()', 'PUT', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"123\",\"albumDesc\":\"123\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/fca5c4d3b0e8497b84206a03a3bb2dad.jpg\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:51:10');
+INSERT INTO `sys_oper_log` VALUES (1627863526917840897, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627863525214953473\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/2260141bf2934ef6b68ff50adcde79f0.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-21 10:51:24');
+INSERT INTO `sys_oper_log` VALUES (1627863532320104450, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627863530621411330\",\"albumName\":\"555\",\"albumDesc\":\"555\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/2260141bf2934ef6b68ff50adcde79f0.jpg\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:51:25');
+INSERT INTO `sys_oper_log` VALUES (1627863720036179970, '相册管理', 2, 'com.zhi.blog.controller.AlbumController.edit()', 'PUT', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627863530621411330\",\"albumName\":\"555\",\"albumDesc\":\"555\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/2260141bf2934ef6b68ff50adcde79f0.jpg\",\"isDelete\":0,\"status\":2}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:52:10');
+INSERT INTO `sys_oper_log` VALUES (1627863815666311170, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1627863530621411330', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 10:52:33');
+INSERT INTO `sys_oper_log` VALUES (1627992307968012289, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1627992305770196994\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/17e1d88be409433ca4f672b2f0988700.jpg\",\"fileName\":\"沉沦螺旋_荷鲁斯站Downward,Spiral_,Horus,Station3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 19:23:08');
+INSERT INTO `sys_oper_log` VALUES (1627992314733424641, '相册管理', 2, 'com.zhi.blog.controller.AlbumController.edit()', 'PUT', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"123\",\"albumDesc\":\"123\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/17e1d88be409433ca4f672b2f0988700.jpg\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 19:23:09');
+INSERT INTO `sys_oper_log` VALUES (1627992457113268225, '相册管理', 2, 'com.zhi.blog.controller.AlbumController.edit()', 'PUT', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1627860336587612162\",\"albumName\":\"测试\",\"albumDesc\":\"123\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/21/17e1d88be409433ca4f672b2f0988700.jpg\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 19:23:43');
+INSERT INTO `sys_oper_log` VALUES (1627992803743133697, '代码生成', 6, 'com.zhi.generator.controller.GenController.importTableSave()', 'POST', 1, 'admin', '', '/tool/gen/importTable', '4.2.2.2', ' ', '\"blog_photo\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 19:25:06');
+INSERT INTO `sys_oper_log` VALUES (1627996832997076993, '菜单管理', 1, 'com.zhi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-21 19:41:05\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-21 19:41:05\",\"parentName\":null,\"parentId\":\"1627642998340730881\",\"children\":[],\"menuId\":\"1627996831193526274\",\"menuName\":\"照片管理\",\"orderNum\":2,\"path\":\"photo\",\"component\":null,\"queryParam\":\"album/album/Photo\",\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"eye-open\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 19:41:06');
+INSERT INTO `sys_oper_log` VALUES (1627996993454370817, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-21 19:41:06\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-21 19:41:44\",\"parentName\":null,\"parentId\":\"1627642998340730881\",\"children\":[],\"menuId\":\"1627996831193526274\",\"menuName\":\"照片管理\",\"orderNum\":2,\"path\":\"photo\",\"component\":\"album/album/Photo\",\"queryParam\":\"\",\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"icon\":\"eye-open\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 19:41:45');
+INSERT INTO `sys_oper_log` VALUES (1627997087301922817, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-20 20:16:08\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-21 19:42:06\",\"parentName\":null,\"parentId\":\"1627642998340730881\",\"children\":[],\"menuId\":\"1627643112476131328\",\"menuName\":\"相册列表\",\"orderNum\":1,\"path\":\"album\",\"component\":\"album/album/Album\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"album:album:list\",\"icon\":\"list\",\"remark\":\"相册管理菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 19:42:07');
+INSERT INTO `sys_oper_log` VALUES (1627998192618467329, '代码生成', 2, 'com.zhi.generator.controller.GenController.editSave()', 'PUT', 1, 'admin', '', '/tool/gen', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":\"admin\",\"updateTime\":\"2023-02-21 19:46:29\",\"params\":{\"treeCode\":null,\"treeName\":null,\"treeParentCode\":null,\"parentMenuId\":\"1627642998340730881\"},\"tableId\":\"1627992801939582977\",\"tableName\":\"blog_photo\",\"tableComment\":\"照片管理\",\"subTableName\":null,\"subTableFkName\":null,\"className\":\"Photo\",\"tplCategory\":\"crud\",\"packageName\":\"com.zhi.blog\",\"moduleName\":\"photo\",\"businessName\":\"photo\",\"functionName\":\"照片管理\",\"functionAuthor\":\"ftz\",\"genType\":\"0\",\"genPath\":\"/\",\"pkColumn\":null,\"subTable\":null,\"columns\":[{\"createBy\":\"admin\",\"createTime\":\"2023-02-21 19:25:05\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-21 19:46:29\",\"columnId\":\"1627992802002497537\",\"tableId\":\"1627992801939582977\",\"columnName\":\"id\",\"columnComment\":\"主键\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"id\",\"isPk\":\"1\",\"isIncrement\":\"1\",\"isRequired\":\"1\",\"isInsert\":null,\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":null,\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":1,\"required\":true,\"list\":true,\"pk\":true,\"usableColumn\":false,\"insert\":false,\"edit\":true,\"superColumn\":false,\"increment\":true,\"query\":false,\"capJavaField\":\"Id\"},{\"createBy\":\"admin\",\"createTime\":\"2023-02-21 19:25:05\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-21 19:46:29\",\"columnId\":\"1627992802002497538\",\"tableId\":\"1627992801939582977\",\"columnName\":\"album_id\",\"columnComment\":\"相册id\",\"columnType\":\"int(11)\",\"javaType\":\"Long\",\"javaField\":\"albumId\",\"isPk\":\"0\",\"isIncrement\":\"0\",\"isRequired\":\"1\",\"isInsert\":\"1\",\"isEdit\":\"1\",\"isList\":\"1\",\"isQuery\":\"1\",\"queryType\":\"EQ\",\"htmlType\":\"input\",\"dictType\":\"\",\"sort\":2,\"required\":true,\"list\":true,\"pk\":false,\"usableColumn\":false,\"insert\":true,\"edit\":true,\"superColumn\":false,\"increment\":false,\"query\":true,\"capJavaField\":\"AlbumId\"},{\"createBy\":\"admin\",\"createTime\":\"2023-02-21 19:25:05\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-21 19:46:29\",\"columnId\":\"1627992802002497539\",\"tableId\":\"1627992801939582977\",\"columnName\":\"photo_name\",\"columnComment\":\"照片名\",\"columnType\":\"varchar(20)\",\"javaType\":', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-21 19:46:31');
+INSERT INTO `sys_oper_log` VALUES (1627998296507183105, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '4.2.2.2', ' ', '{\"tables\":\"blog_photo\"}', '', 0, '', '2023-02-21 19:46:55');
+INSERT INTO `sys_oper_log` VALUES (1627998355462320130, '代码生成', 8, 'com.zhi.generator.controller.GenController.batchGenCode()', 'GET', 1, 'admin', '', '/tool/gen/batchGenCode', '4.2.2.2', ' ', '{\"tables\":\"blog_photo\"}', '', 0, '', '2023-02-21 19:47:09');
+INSERT INTO `sys_oper_log` VALUES (1628011020461129730, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628011018313646082\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/7d6d21febed94f7389f98fe5d485166a.jpg\",\"fileName\":\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 20:37:29');
+INSERT INTO `sys_oper_log` VALUES (1628011334799048705, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628011333062606850\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/b4700c8797e0487abada6fe0fa0d81ab.jpg\",\"fileName\":\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 20:38:44');
+INSERT INTO `sys_oper_log` VALUES (1628011436074713089, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628011433562324994\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/ae76c713607146a5bf03cc789c11a8f6.jpeg\",\"fileName\":\"scarlettjohansson,抽象,doubleexposure,undertheskin_千叶网.jpeg\"}}', 0, '', '2023-02-21 20:39:08');
+INSERT INTO `sys_oper_log` VALUES (1628012808505507841, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628012795993899009\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/7269a13857364af5ac18d6959c058bd1.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-21 20:44:35');
+INSERT INTO `sys_oper_log` VALUES (1628015590931283969, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628015589643632641\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/a658e31cf6764a0d80fc0e071077afec.png\",\"fileName\":\"超宽,空间,蓝色_千叶网.png\"}}', 0, '', '2023-02-21 20:55:39');
+INSERT INTO `sys_oper_log` VALUES (1628027196885000194, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628027195207278594\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/33a8fea53e0c42da8d6ed01a39e9f859.jpg\",\"fileName\":\"windows10窗口4k高清壁纸图片_千叶网.jpg\"}}', 0, '', '2023-02-21 21:41:46');
+INSERT INTO `sys_oper_log` VALUES (1628027203851739137, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":null}', '', 1, '', '2023-02-21 21:41:47');
+INSERT INTO `sys_oper_log` VALUES (1628027442369224705, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":null}', '', 1, '', '2023-02-21 21:42:44');
+INSERT INTO `sys_oper_log` VALUES (1628027633931476993, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628027632060817410\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/61d2d3ae38d1481c8ad91d33bf6a2b72.jpg\",\"fileName\":\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 21:43:30');
+INSERT INTO `sys_oper_log` VALUES (1628027638369050626, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":null}', '', 1, '', '2023-02-21 21:43:31');
+INSERT INTO `sys_oper_log` VALUES (1628027970708922370, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628027968905371649\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/da8f803220494db1a373a3c71c696a5f.png\",\"fileName\":\"超宽,空间,蓝色_千叶网.png\"}}', 0, '', '2023-02-21 21:44:50');
+INSERT INTO `sys_oper_log` VALUES (1628027975020666882, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/21/da8f803220494db1a373a3c71c696a5f.png\"]}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'album_id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'album_id\' at row 1\n; Data truncation: Out of range value for column \'album_id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'album_id\' at row 1', '2023-02-21 21:44:51');
+INSERT INTO `sys_oper_log` VALUES (1628028429238624258, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/21/da8f803220494db1a373a3c71c696a5f.png\"]}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'album_id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'album_id\' at row 1\n; Data truncation: Out of range value for column \'album_id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'album_id\' at row 1', '2023-02-21 21:46:39');
+INSERT INTO `sys_oper_log` VALUES (1628028982945472513, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628028981204836354\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/c3666fdb056d48138fa42188409cd573.jpg\",\"fileName\":\"冰岛的环路4K风景壁纸_千叶网.jpg\"}}', 0, '', '2023-02-21 21:48:52');
+INSERT INTO `sys_oper_log` VALUES (1628028987777310722, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/21/c3666fdb056d48138fa42188409cd573.jpg\"]}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'album_id\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'album_id\' at row 1\n; Data truncation: Out of range value for column \'album_id\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column \'album_id\' at row 1', '2023-02-21 21:48:53');
+INSERT INTO `sys_oper_log` VALUES (1628029253759098881, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628029252077182977\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/53c5a85233d54585970a9de6cb5367d8.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-21 21:49:56');
+INSERT INTO `sys_oper_log` VALUES (1628029311179120641, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/21/53c5a85233d54585970a9de6cb5367d8.jpeg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\n; Field \'photo_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value', '2023-02-21 21:50:10');
+INSERT INTO `sys_oper_log` VALUES (1628029349653471234, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/21/53c5a85233d54585970a9de6cb5367d8.jpeg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\n; Field \'photo_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value', '2023-02-21 21:50:19');
+INSERT INTO `sys_oper_log` VALUES (1628030551346733058, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628030545277575170\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/21/6ed5fcb5331b45eea2bfc372914fbf4b.jpeg\",\"fileName\":\"thelastofus,apocalyptic_千叶网.jpeg\"}}', 0, '', '2023-02-21 21:55:05');
+INSERT INTO `sys_oper_log` VALUES (1628215623551115266, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628215622326378497\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/967586ee878d4279803c6464f3d07466.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-22 10:10:30');
+INSERT INTO `sys_oper_log` VALUES (1628215636121444353, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628215635026731010\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/2b9cc3d96eb14132b0ac60928f8390ca.jpg\",\"fileName\":\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:10:33');
+INSERT INTO `sys_oper_log` VALUES (1628215668509859841, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628215666769223682\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/b7036a7850a848c1b7261de21d540e4a.jpg\",\"fileName\":\"班夫国家公园,湖的平静水域的星空背景3840x2160壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:10:41');
+INSERT INTO `sys_oper_log` VALUES (1628219721763614721, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628219695280779266\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/734c687efc744743b97227fd07ccc725.jpg\",\"fileName\":\"冰岛的环路4K风景壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:26:47');
+INSERT INTO `sys_oper_log` VALUES (1628219722346622978, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628219695280779267\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/6ca942afd78242d2866b1e01a406773e.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-22 10:26:47');
+INSERT INTO `sys_oper_log` VALUES (1628219744660320258, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628219739815899138\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/aef96991e9db4307a55c8f0a63862531.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-22 10:26:53');
+INSERT INTO `sys_oper_log` VALUES (1628219785894522882, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/6ca942afd78242d2866b1e01a406773e.jpeg\",\"http://127.0.0.1:9000/blog/2023/02/22/734c687efc744743b97227fd07ccc725.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/aef96991e9db4307a55c8f0a63862531.jpg\"],\"photoNameList\":[null,null,null]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'album_id\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'album_id\' doesn\'t have a default value\n; Field \'album_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'album_id\' doesn\'t have a default value', '2023-02-22 10:27:02');
+INSERT INTO `sys_oper_log` VALUES (1628220088031117314, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/6ca942afd78242d2866b1e01a406773e.jpeg\",\"http://127.0.0.1:9000/blog/2023/02/22/734c687efc744743b97227fd07ccc725.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/aef96991e9db4307a55c8f0a63862531.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/6ca942afd78242d2866b1e01a406773e.jpeg\",\"http://127.0.0.1:9000/blog/2023/02/22/734c687efc744743b97227fd07ccc725.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/aef96991e9db4307a55c8f0a63862531.jpg\"],\"photoNameList\":[null,null,null,null,null,null]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\n; Field \'photo_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value', '2023-02-22 10:28:15');
+INSERT INTO `sys_oper_log` VALUES (1628220410656980994, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628220408979259393\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/2dd52bd1ba6f4686ad2d62ea0cd89de5.jpg\",\"fileName\":\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:29:31');
+INSERT INTO `sys_oper_log` VALUES (1628220427937513474, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628220426192683010\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/dab1340ae4aa4e38bf86d976715683b2.jpg\",\"fileName\":\"windows10窗口4k高清壁纸图片_千叶网.jpg\"}}', 0, '', '2023-02-22 10:29:36');
+INSERT INTO `sys_oper_log` VALUES (1628220442831486978, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/2dd52bd1ba6f4686ad2d62ea0cd89de5.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/dab1340ae4aa4e38bf86d976715683b2.jpg\"],\"photoNameList\":[null,null]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\n; Field \'photo_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value', '2023-02-22 10:29:39');
+INSERT INTO `sys_oper_log` VALUES (1628221179057668098, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628221177908428802\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/ae4e8495d40948a3b106c97279aa4f8d.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-22 10:32:35');
+INSERT INTO `sys_oper_log` VALUES (1628221299631325186, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628221293578944514\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/47a5c691debf49b384e5d298b0a3cedb.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-22 10:33:03');
+INSERT INTO `sys_oper_log` VALUES (1628221333231894529, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628221330908250113\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/19d0822efcb04dd7847559445223f88d.jpg\",\"fileName\":\"超人总动员23440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:33:11');
+INSERT INTO `sys_oper_log` VALUES (1628221362172592130, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/47a5c691debf49b384e5d298b0a3cedb.jpeg\",null,\"http://127.0.0.1:9000/blog/2023/02/22/19d0822efcb04dd7847559445223f88d.jpg\",null],\"photoNameList\":[null,\"超宽,景观,自然,空间_千叶网.jpeg\",null,\"超人总动员23440x1440壁纸_千叶网.jpg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\n; Field \'photo_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value', '2023-02-22 10:33:18');
+INSERT INTO `sys_oper_log` VALUES (1628221828084269057, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628221825693515777\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/346727a62a7b4224bc080fda67d6a460.jpg\",\"fileName\":\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:35:09');
+INSERT INTO `sys_oper_log` VALUES (1628221838330953729, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628221836590317570\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/6f053e6fe8ef44de828be8541b07f7ba.jpeg\",\"fileName\":\"边境地区_千叶网.jpeg\"}}', 0, '', '2023-02-22 10:35:12');
+INSERT INTO `sys_oper_log` VALUES (1628221845427716097, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/346727a62a7b4224bc080fda67d6a460.jpg\",null,\"http://127.0.0.1:9000/blog/2023/02/22/6f053e6fe8ef44de828be8541b07f7ba.jpeg\",null],\"photoNameList\":[null,\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\",null,\"边境地区_千叶网.jpeg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value\n; Field \'photo_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'photo_name\' doesn\'t have a default value', '2023-02-22 10:35:14');
+INSERT INTO `sys_oper_log` VALUES (1628222467568828418, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628222465823997953\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/9b0985edc81b48aead0594c29574f069.jpg\",\"fileName\":\"冰岛的环路4K风景壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:37:42');
+INSERT INTO `sys_oper_log` VALUES (1628222667737792514, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628222665414148097\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/9d48d6066faa4600b95cde04724a8b1d.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-22 10:38:30');
+INSERT INTO `sys_oper_log` VALUES (1628222753343537154, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628222752253018113\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/2abeaa7065764e0d841c40cfce0f2bd5.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-22 10:38:50');
+INSERT INTO `sys_oper_log` VALUES (1628223040682721282, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628223038937890817\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/db6c5aa2543f443b82f50f09a4375fb9.jpg\",\"fileName\":\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:39:58');
+INSERT INTO `sys_oper_log` VALUES (1628223061884928002, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628223052288360450\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/a3bc0bda9bfd4b77911bfb2b409e2fb4.jpg\",\"fileName\":\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:40:04');
+INSERT INTO `sys_oper_log` VALUES (1628223064011440130, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/db6c5aa2543f443b82f50f09a4375fb9.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/a3bc0bda9bfd4b77911bfb2b409e2fb4.jpg\"],\"photoNameList\":[\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\",\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\"]}', '', 1, '\r\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column \'photo_name\' at row 1\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_name, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column \'photo_name\' at row 1\n; Data truncation: Data too long for column \'photo_name\' at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column \'photo_name\' at row 1', '2023-02-22 10:40:04');
+INSERT INTO `sys_oper_log` VALUES (1628223194429128706, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/db6c5aa2543f443b82f50f09a4375fb9.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/a3bc0bda9bfd4b77911bfb2b409e2fb4.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/db6c5aa2543f443b82f50f09a4375fb9.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/a3bc0bda9bfd4b77911bfb2b409e2fb4.jpg\"],\"photoNameList\":[\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\",\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\",\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\",\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628223193267306497\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_name, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628223193267306497\' for key \'PRIMARY\'\n; Duplicate entry \'1628223193267306497\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628223193267306497\' for key \'PRIMARY\'', '2023-02-22 10:40:35');
+INSERT INTO `sys_oper_log` VALUES (1628223279934210050, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628223278189379585\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/22fe7a29498949e09f3d430a8ffe5683.jpg\",\"fileName\":\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:40:56');
+INSERT INTO `sys_oper_log` VALUES (1628223284568915969, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/db6c5aa2543f443b82f50f09a4375fb9.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/a3bc0bda9bfd4b77911bfb2b409e2fb4.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/db6c5aa2543f443b82f50f09a4375fb9.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/a3bc0bda9bfd4b77911bfb2b409e2fb4.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/22fe7a29498949e09f3d430a8ffe5683.jpg\"],\"photoNameList\":[\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\",\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\",\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\",\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\",\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628223282765365250\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_name, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628223282765365250\' for key \'PRIMARY\'\n; Duplicate entry \'1628223282765365250\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628223282765365250\' for key \'PRIMARY\'', '2023-02-22 10:40:57');
+INSERT INTO `sys_oper_log` VALUES (1628226166626189313, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628226164214464514\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/6ac23306ff0b464fa2dd90b4df912b97.jpg\",\"fileName\":\"俄勒冈州,太平洋城,岩石,海边风景4K壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:52:24');
+INSERT INTO `sys_oper_log` VALUES (1628226171562885121, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/6ac23306ff0b464fa2dd90b4df912b97.jpg\"],\"photoNameList\":[\"俄勒冈州,太平洋城,岩石,海边风景4K壁纸_千叶网.jpg\"]}', '', 1, 'Index: 1, Size: 1', '2023-02-22 10:52:25');
+INSERT INTO `sys_oper_log` VALUES (1628226232476762113, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/6ac23306ff0b464fa2dd90b4df912b97.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/6ac23306ff0b464fa2dd90b4df912b97.jpg\"],\"photoNameList\":[\"俄勒冈州,太平洋城,岩石,海边风景4K壁纸_千叶网.jpg\",\"俄勒冈州,太平洋城,岩石,海边风景4K壁纸_千叶网.jpg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628226231377854465\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_name, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628226231377854465\' for key \'PRIMARY\'\n; Duplicate entry \'1628226231377854465\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628226231377854465\' for key \'PRIMARY\'', '2023-02-22 10:52:39');
+INSERT INTO `sys_oper_log` VALUES (1628227390897389570, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628227384710791169\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/3a73a6bf2b894514be30775b47700509.jpg\",\"fileName\":\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 10:57:16');
+INSERT INTO `sys_oper_log` VALUES (1628227402175873026, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628227399860617217\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/7b31b62304844f3891085a21a418543d.jpeg\",\"fileName\":\"边境地区_千叶网.jpeg\"}}', 0, '', '2023-02-22 10:57:18');
+INSERT INTO `sys_oper_log` VALUES (1628227409524293634, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/3a73a6bf2b894514be30775b47700509.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/7b31b62304844f3891085a21a418543d.jpeg\"],\"photoNameList\":[\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\",\"边境地区_千叶网.jpeg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628227407846572033\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_name, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628227407846572033\' for key \'PRIMARY\'\n; Duplicate entry \'1628227407846572033\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628227407846572033\' for key \'PRIMARY\'', '2023-02-22 10:57:20');
+INSERT INTO `sys_oper_log` VALUES (1628227994419986434, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628227992486412290\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/f662bdf7bb7f4ba3bdb14e2a37214c8b.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-22 10:59:40');
+INSERT INTO `sys_oper_log` VALUES (1628228014850441218, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628228013881556994\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/e0c6b69bbdd34c0882ee0b307a24429e.jpg\",\"fileName\":\"windows10窗口4k高清壁纸图片_千叶网.jpg\"}}', 0, '', '2023-02-22 10:59:44');
+INSERT INTO `sys_oper_log` VALUES (1628228103237009409, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/f662bdf7bb7f4ba3bdb14e2a37214c8b.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/e0c6b69bbdd34c0882ee0b307a24429e.jpg\"],\"photoNameList\":[\"t.jpg\",\"windows10窗口4k高清壁纸图片_千叶网.jpg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628228101492178945\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_name, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628228101492178945\' for key \'PRIMARY\'\n; Duplicate entry \'1628228101492178945\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628228101492178945\' for key \'PRIMARY\'', '2023-02-22 11:00:05');
+INSERT INTO `sys_oper_log` VALUES (1628228363808145410, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628228362709237761\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/d34fe4be5c7642fe9963741f3440e353.jpg\",\"fileName\":\"迪拜城市风光3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:01:08');
+INSERT INTO `sys_oper_log` VALUES (1628228364126912513, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628228362386276354\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/a83ec820c90f4d7b9f266723ec5a2566.jpeg\",\"fileName\":\"动画,动画,RWBY,RubyRose,角色_千叶网.jpeg\"}}', 0, '', '2023-02-22 11:01:08');
+INSERT INTO `sys_oper_log` VALUES (1628228480300744706, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/a83ec820c90f4d7b9f266723ec5a2566.jpeg\",\"http://127.0.0.1:9000/blog/2023/02/22/d34fe4be5c7642fe9963741f3440e353.jpg\"],\"photoNameList\":[\"动画,动画,RWBY,RubyRose,角色_千叶网.jpeg\",\"迪拜城市风光3440x1440壁纸_千叶网.jpg\"]}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628228462940520450\' for key \'PRIMARY\'\r\n### The error may exist in com/zhi/blog/mapper/PhotoMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.PhotoMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_photo ( id, album_id, photo_name, photo_src, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )\r\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628228462940520450\' for key \'PRIMARY\'\n; Duplicate entry \'1628228462940520450\' for key \'PRIMARY\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'1628228462940520450\' for key \'PRIMARY\'', '2023-02-22 11:01:35');
+INSERT INTO `sys_oper_log` VALUES (1628228862796132354, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628228860044668929\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/b5c839687e684804804db2c34c99f20e.jpg\",\"fileName\":\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:03:07');
+INSERT INTO `sys_oper_log` VALUES (1628228862796132355, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628228860044668930\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/0a32aa77c00844f190c7cc45e522427d.jpg\",\"fileName\":\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:03:07');
+INSERT INTO `sys_oper_log` VALUES (1628228871117631490, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/b5c839687e684804804db2c34c99f20e.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/0a32aa77c00844f190c7cc45e522427d.jpg\"],\"photoNameList\":[\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\",\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"]}', '', 1, 'Index: 2, Size: 2', '2023-02-22 11:03:09');
+INSERT INTO `sys_oper_log` VALUES (1628230553327144962, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628230551032860676\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/187bd45165c245e5a8a19f5428b30aed.jpg\",\"fileName\":\"沉沦螺旋_荷鲁斯站Downward,Spiral_,Horus,Station3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:09:50');
+INSERT INTO `sys_oper_log` VALUES (1628230553327144963, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628230551032860674\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/58b44e5755cf460bb9078489d7175e97.jpg\",\"fileName\":\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:09:50');
+INSERT INTO `sys_oper_log` VALUES (1628230553327144964, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628230551032860675\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/c170272f435d4a5caea755eea38088f7.jpg\",\"fileName\":\"超人总动员23440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:09:50');
+INSERT INTO `sys_oper_log` VALUES (1628230568074317826, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628230565687758849\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/a4a99e1f28e64743bd6e95d2ea59abb0.jpg\",\"fileName\":\"澳大利亚,艾尔斯岩,星空3440x1440高清壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:09:53');
+INSERT INTO `sys_oper_log` VALUES (1628230573682102273, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/187bd45165c245e5a8a19f5428b30aed.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/58b44e5755cf460bb9078489d7175e97.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/c170272f435d4a5caea755eea38088f7.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/a4a99e1f28e64743bd6e95d2ea59abb0.jpg\"],\"photoNameList\":[\"沉沦螺旋_荷鲁斯站Downward,Spiral_,Horus,Station3440x1440壁纸_千叶网.jpg\",\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\",\"超人总动员23440x1440壁纸_千叶网.jpg\",\"澳大利亚,艾尔斯岩,星空3440x1440高清壁纸_千叶网.jpg\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 11:09:54');
+INSERT INTO `sys_oper_log` VALUES (1628238172829814786, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628238171089178625\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/56cab13b983b422080c02e2efeb16852.jpg\",\"fileName\":\"冰岛的环路4K风景壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:40:06');
+INSERT INTO `sys_oper_log` VALUES (1628238172829814787, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628238171152093185\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/8516668007e3490e9b7c61eab483d066.png\",\"fileName\":\"超宽,空间,蓝色_千叶网.png\"}}', 0, '', '2023-02-22 11:40:06');
+INSERT INTO `sys_oper_log` VALUES (1628238173215690753, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628238170636193794\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/cb01806c847941f1b9666a338041fe2c.jpeg\",\"fileName\":\"超宽,景观,自然,空间_千叶网.jpeg\"}}', 0, '', '2023-02-22 11:40:06');
+INSERT INTO `sys_oper_log` VALUES (1628238173282799617, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628238170829131778\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/1c09448f90d142bfb78c3e513b748af7.jpg\",\"fileName\":\"沉沦螺旋_荷鲁斯站Downward,Spiral_,Horus,Station3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:40:06');
+INSERT INTO `sys_oper_log` VALUES (1628238173345714177, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628238170959155201\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/bcfb1cfd8d3c411e8214bb5cdb1afe3e.jpg\",\"fileName\":\"超人总动员23440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 11:40:06');
+INSERT INTO `sys_oper_log` VALUES (1628238178441793538, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/22/cb01806c847941f1b9666a338041fe2c.jpeg\",\"http://127.0.0.1:9000/blog/2023/02/22/1c09448f90d142bfb78c3e513b748af7.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/bcfb1cfd8d3c411e8214bb5cdb1afe3e.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/56cab13b983b422080c02e2efeb16852.jpg\",\"http://127.0.0.1:9000/blog/2023/02/22/8516668007e3490e9b7c61eab483d066.png\"],\"photoNameList\":[\"超宽,景观,自然,空间_千叶网.jpeg\",\"沉沦螺旋_荷鲁斯站Downward,Spiral_,Horus,Station3440x1440壁纸_千叶网.jpg\",\"超人总动员23440x1440壁纸_千叶网.jpg\",\"冰岛的环路4K风景壁纸_千叶网.jpg\",\"超宽,空间,蓝色_千叶网.png\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 11:40:08');
+INSERT INTO `sys_oper_log` VALUES (1628255854547472386, '照片管理', 3, 'com.zhi.blog.controller.PhotoController.remove()', 'DELETE', 1, 'admin', '', '/photo/photo/1628223193267306497', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 12:50:22');
+INSERT INTO `sys_oper_log` VALUES (1628255886302547969, '照片管理', 3, 'com.zhi.blog.controller.PhotoController.remove()', 'DELETE', 1, 'admin', '', '/photo/photo/1628223193267306497,1628228101492178945,1628227407846572033', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 12:50:29');
+INSERT INTO `sys_oper_log` VALUES (1628256535903768577, '照片管理', 3, 'com.zhi.blog.controller.PhotoController.remove()', 'DELETE', 1, 'admin', '', '/photo/photo/1628223193267306497,1628228101492178945,1628227407846572033,1628238176831180803,1628230572654497795', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 12:53:04');
+INSERT INTO `sys_oper_log` VALUES (1628256591251804161, '照片管理', 3, 'com.zhi.blog.controller.PhotoController.remove()', 'DELETE', 1, 'admin', '', '/photo/photo/1628223193267306497,1628228101492178945,1628227407846572033,1628238176831180803,1628230572654497795,1628238176831180802,1628230572608360450', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 12:53:18');
+INSERT INTO `sys_oper_log` VALUES (1628267546195005441, '照片管理', 2, 'com.zhi.blog.controller.PhotoController.edit()', 'PUT', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1628228462940520450\",\"albumId\":\"1627860336587612162\",\"photoName\":\"11\",\"photoDesc\":\"11\",\"photoSrc\":\"http://127.0.0.1:9000/blog/2023/02/22/a83ec820c90f4d7b9f266723ec5a2566.jpeg\",\"isDelete\":0}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 13:36:49');
+INSERT INTO `sys_oper_log` VALUES (1628267619872149505, '照片管理', 2, 'com.zhi.blog.controller.PhotoController.edit()', 'PUT', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1628228462940520450\",\"albumId\":\"1627860336587612162\",\"photoName\":\"11\",\"photoDesc\":\"没有描述·\",\"photoSrc\":\"http://127.0.0.1:9000/blog/2023/02/22/a83ec820c90f4d7b9f266723ec5a2566.jpeg\",\"isDelete\":0}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 13:37:07');
+INSERT INTO `sys_oper_log` VALUES (1628268476911063041, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628268475103318017\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/9e7bd207ef9d4c819da26f9e0d61cbaa.jpg\",\"fileName\":\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 13:40:31');
+INSERT INTO `sys_oper_log` VALUES (1628268482581762049, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1628268480258117634\",\"albumName\":\"猪猪·\",\"albumDesc\":\"猪猪·\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/22/9e7bd207ef9d4c819da26f9e0d61cbaa.jpg\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 13:40:33');
+INSERT INTO `sys_oper_log` VALUES (1628389240754794497, '照片管理', 2, 'com.zhi.blog.controller.PhotoController.editPhotoAlbum()', 'PUT', 1, 'admin', '', '/photo/photo/album', '4.2.2.2', ' ', '{\"ids\":[\"1628228462940520450\"],\"albumid\":\"1628268480258117634\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 21:40:24');
+INSERT INTO `sys_oper_log` VALUES (1628389299714125825, '照片管理', 2, 'com.zhi.blog.controller.PhotoController.editPhotoAlbum()', 'PUT', 1, 'admin', '', '/photo/photo/album', '4.2.2.2', ' ', '{\"ids\":[\"1628228462940520450\",\"1628228868731072514\",\"1628228868793987073\"],\"albumid\":\"1628268480258117634\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 21:40:38');
+INSERT INTO `sys_oper_log` VALUES (1628389422183608322, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628389419792855041\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/22/07d2835ba83e4dc782fa04899be5ce4b.jpg\",\"fileName\":\"Niyas,CK,India,3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-22 21:41:07');
+INSERT INTO `sys_oper_log` VALUES (1628389425937510401, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1628389422913417218\",\"albumName\":\"啦啦啦啦\",\"albumDesc\":\"拉拉\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/22/07d2835ba83e4dc782fa04899be5ce4b.jpg\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 21:41:08');
+INSERT INTO `sys_oper_log` VALUES (1628389467507257345, '照片管理', 2, 'com.zhi.blog.controller.PhotoController.editPhotoAlbum()', 'PUT', 1, 'admin', '', '/photo/photo/album', '4.2.2.2', ' ', '{\"ids\":[\"1628230572654497796\",\"1628238176831180804\"],\"albumid\":\"1628389422913417218\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 21:41:18');
+INSERT INTO `sys_oper_log` VALUES (1628389505738338306, '照片管理', 2, 'com.zhi.blog.controller.PhotoController.editPhotoAlbum()', 'PUT', 1, 'admin', '', '/photo/photo/album', '4.2.2.2', ' ', '{\"ids\":[\"1628238176831180804\"],\"albumid\":\"1627860336587612162\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 21:41:27');
+INSERT INTO `sys_oper_log` VALUES (1628389624537804801, '照片管理', 2, 'com.zhi.blog.controller.PhotoController.edit()', 'PUT', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1628228868793987073\",\"albumId\":\"1628268480258117634\",\"photoName\":\"奥日和黑暗森林\",\"photoDesc\":\"666\",\"photoSrc\":\"http://127.0.0.1:9000/blog/2023/02/22/0a32aa77c00844f190c7cc45e522427d.jpg\",\"isDelete\":0}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 21:41:55');
+INSERT INTO `sys_oper_log` VALUES (1628390877514821634, '菜单管理', 2, 'com.zhi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '', '/system/menu', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-02-21 19:41:06\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-22 21:46:53\",\"parentName\":null,\"parentId\":\"1627642998340730881\",\"children\":[],\"menuId\":\"1627996831193526274\",\"menuName\":\"照片管理\",\"orderNum\":2,\"path\":\"photo\",\"component\":\"album/album/Photo\",\"queryParam\":\"\",\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"1\",\"status\":\"0\",\"icon\":\"eye-open\",\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-22 21:46:54');
+INSERT INTO `sys_oper_log` VALUES (1628648986514558978, '角色管理', 2, 'com.zhi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '', '/system/role', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-23 14:52:31\",\"roleId\":3,\"roleName\":\"本部门及以下\",\"roleKey\":\"test1\",\"roleSort\":3,\"dataScope\":\"4\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"delFlag\":\"0\",\"remark\":null,\"flag\":false,\"menuIds\":[1,108,501,\"1610972802922405889\",\"1610973263779946497\",\"1611336461808898048\",\"1611336461808898049\",\"1611336461808898050\",\"1611336461808898051\",\"1611336461808898052\",\"1611336461808898053\",\"1611613727679938560\",\"1611613727679938561\",\"1611613727679938562\",\"1611613727679938563\",\"1611613727679938564\",\"1611613727679938565\",\"1611975928588574720\",\"1611975928588574721\",\"1611975928588574722\",\"1611975928588574723\",\"1611975928588574724\",\"1611975928588574725\",100,1001,1002,1003,1004,1005,1006,1007,101,1008,1009,1010,1011,1012,102,1013,1014,1015,1016,103,1017,1018,1019,1020,104,1021,1022,1023,1024,1025,105,1026,1027,1028,1029,1030,106,1031,1032,1033,1034,1035,107,1036,1037,1038,1039,500,1040,1041,1042,1043,1044,1045,5,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511],\"deptIds\":null,\"permissions\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 14:52:32');
+INSERT INTO `sys_oper_log` VALUES (1628649588195856386, '角色管理', 2, 'com.zhi.web.controller.system.SysRoleController.dataScope()', 'PUT', 1, 'admin', '', '/system/role/dataScope', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-23 14:54:54\",\"roleId\":3,\"roleName\":\"本部门及以下\",\"roleKey\":\"test1\",\"roleSort\":3,\"dataScope\":\"4\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"delFlag\":\"0\",\"remark\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":[],\"permissions\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 14:54:55');
+INSERT INTO `sys_oper_log` VALUES (1628649615035207682, '角色管理', 2, 'com.zhi.web.controller.system.SysRoleController.dataScope()', 'PUT', 1, 'admin', '', '/system/role/dataScope', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-23 14:55:01\",\"roleId\":4,\"roleName\":\"仅本人\",\"roleKey\":\"test2\",\"roleSort\":4,\"dataScope\":\"5\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"delFlag\":\"0\",\"remark\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":[],\"permissions\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 14:55:02');
+INSERT INTO `sys_oper_log` VALUES (1628740823380168705, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628740820213469186\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/9383112a6f184478bc19d9c599d838ed.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-23 20:57:27');
+INSERT INTO `sys_oper_log` VALUES (1628740823380168706, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628740820213469187\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/f64fce4f33d841c8a243b88dc1de9b38.jpeg\",\"fileName\":\"thelastofus,apocalyptic_千叶网.jpeg\"}}', 0, '', '2023-02-23 20:57:27');
+INSERT INTO `sys_oper_log` VALUES (1628740823380168707, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628740820213469185\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/9e959af95ac1495891a20b1c5ae596af.jpg\",\"fileName\":\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-23 20:57:27');
+INSERT INTO `sys_oper_log` VALUES (1628740827905822721, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1627860336587612162\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/23/f64fce4f33d841c8a243b88dc1de9b38.jpeg\",\"http://127.0.0.1:9000/blog/2023/02/23/9e959af95ac1495891a20b1c5ae596af.jpg\",\"http://127.0.0.1:9000/blog/2023/02/23/9383112a6f184478bc19d9c599d838ed.jpg\"],\"photoNameList\":[\"thelastofus,apocalyptic_千叶网.jpeg\",\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\",\"t.jpg\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 20:57:29');
+INSERT INTO `sys_oper_log` VALUES (1628740925972844546, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1627860336587612162', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 20:57:52');
+INSERT INTO `sys_oper_log` VALUES (1628741387090432001, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628741384812924930\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/a243f8d6f4624c77b0a5df4eaa5199b4.jpeg\",\"fileName\":\"scarlettjohansson,抽象,doubleexposure,undertheskin_千叶网.jpeg\"}}', 0, '', '2023-02-23 20:59:42');
+INSERT INTO `sys_oper_log` VALUES (1628741387090432002, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628741384812924931\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/2eca7b1342d041f28d27caf5c33f8bee.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-23 20:59:42');
+INSERT INTO `sys_oper_log` VALUES (1628741387090432003, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628741384812924929\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/af9bed20744f4ebcacb08ee7e7fef96e.jpeg\",\"fileName\":\"Spider,Man,MaviC漫画,漫画,蜘蛛,超级英雄,标志,黑暗_千叶网.jpeg\"}}', 0, '', '2023-02-23 20:59:42');
+INSERT INTO `sys_oper_log` VALUES (1628741393155395586, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1628268480258117634\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/23/2eca7b1342d041f28d27caf5c33f8bee.jpg\",\"http://127.0.0.1:9000/blog/2023/02/23/af9bed20744f4ebcacb08ee7e7fef96e.jpeg\",\"http://127.0.0.1:9000/blog/2023/02/23/a243f8d6f4624c77b0a5df4eaa5199b4.jpeg\"],\"photoNameList\":[\"t.jpg\",\"Spider,Man,MaviC漫画,漫画,蜘蛛,超级英雄,标志,黑暗_千叶网.jpeg\",\"scarlettjohansson,抽象,doubleexposure,undertheskin_千叶网.jpeg\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 20:59:43');
+INSERT INTO `sys_oper_log` VALUES (1628741452232167426, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1628268480258117634', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 20:59:57');
+INSERT INTO `sys_oper_log` VALUES (1628742005561524226, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628742002663260163\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/9d7b2483cee54a709875938f87edafc7.jpg\",\"fileName\":\"Life,is,Strange,23440x1440带鱼屏壁纸_千叶网.jpg\"}}', 0, '', '2023-02-23 21:02:09');
+INSERT INTO `sys_oper_log` VALUES (1628742005561524227, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628742002663260162\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/cfbfb6e32b064237a0174ba5b4a7ac03.jpeg\",\"fileName\":\"LOL娜美3440x1440壁纸_千叶网.jpeg\"}}', 0, '', '2023-02-23 21:02:09');
+INSERT INTO `sys_oper_log` VALUES (1628742005561524228, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628742002663260161\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/db6e8324ed9e43639aa2d1e2ce1040d2.jpg\",\"fileName\":\"LOL新版皮肤稻草人联合王国,费德提克3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-23 21:02:09');
+INSERT INTO `sys_oper_log` VALUES (1628742008275238913, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1628389422913417218\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/23/cfbfb6e32b064237a0174ba5b4a7ac03.jpeg\",\"http://127.0.0.1:9000/blog/2023/02/23/db6e8324ed9e43639aa2d1e2ce1040d2.jpg\",\"http://127.0.0.1:9000/blog/2023/02/23/9d7b2483cee54a709875938f87edafc7.jpg\"],\"photoNameList\":[\"LOL娜美3440x1440壁纸_千叶网.jpeg\",\"LOL新版皮肤稻草人联合王国,费德提克3440x1440壁纸_千叶网.jpg\",\"Life,is,Strange,23440x1440带鱼屏壁纸_千叶网.jpg\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 21:02:10');
+INSERT INTO `sys_oper_log` VALUES (1628742148885086210, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1628389422913417218', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 21:02:44');
+INSERT INTO `sys_oper_log` VALUES (1628742503777820673, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628742501022162946\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/f0b43ffa8ef646c2bd53b2bc17b23096.jpg\",\"fileName\":\"windows10窗口4k高清壁纸图片_千叶网.jpg\"}}', 0, '', '2023-02-23 21:04:08');
+INSERT INTO `sys_oper_log` VALUES (1628742505455542273, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1628742503907844097\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/23/f0b43ffa8ef646c2bd53b2bc17b23096.jpg\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 21:04:09');
+INSERT INTO `sys_oper_log` VALUES (1628742527697936386, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628742525885997058\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/c27113b003b84070bc4142cfbe81fe87.jpg\",\"fileName\":\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-23 21:04:14');
+INSERT INTO `sys_oper_log` VALUES (1628742528020897794, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628742525693059074\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/8117dbbf17ac45038383c449346f1642.jpeg\",\"fileName\":\"thelastofus,apocalyptic_千叶网.jpeg\"}}', 0, '', '2023-02-23 21:04:14');
+INSERT INTO `sys_oper_log` VALUES (1628742528083812354, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1628742525755973633\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/23/05a282c6e364474a802f29bcf42a48b1.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-23 21:04:14');
+INSERT INTO `sys_oper_log` VALUES (1628742532349419521, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '4.2.2.2', ' ', '{\"albumid\":\"1628742503907844097\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/02/23/8117dbbf17ac45038383c449346f1642.jpeg\",\"http://127.0.0.1:9000/blog/2023/02/23/05a282c6e364474a802f29bcf42a48b1.jpg\",\"http://127.0.0.1:9000/blog/2023/02/23/c27113b003b84070bc4142cfbe81fe87.jpg\"],\"photoNameList\":[\"thelastofus,apocalyptic_千叶网.jpeg\",\"t.jpg\",\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 21:04:15');
+INSERT INTO `sys_oper_log` VALUES (1628742589459062786, '相册管理', 3, 'com.zhi.blog.controller.AlbumController.remove()', 'DELETE', 1, 'admin', '', '/album/album/1628742503907844097', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-23 21:04:29');
+INSERT INTO `sys_oper_log` VALUES (1629470541016477698, '用户管理', 2, 'com.zhi.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '', '/system/user', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:34\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-25 21:17:05\",\"userId\":4,\"deptId\":104,\"userName\":\"test1\",\"nickName\":\"仅本人 密码666666\",\"userType\":\"sys_user\",\"email\":\"\",\"phonenumber\":\"\",\"sex\":\"0\",\"avatar\":\"http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg\",\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"4.2.2.2\",\"loginDate\":\"2023-02-23 15:05:27\",\"remark\":null,\"intro\":null,\"webSite\":null,\"dept\":{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"parentName\":null,\"parentId\":100,\"children\":[],\"deptId\":104,\"deptName\":\"芝士团\",\"orderNum\":1,\"leader\":\"ftz\",\"phone\":null,\"email\":null,\"status\":\"0\",\"delFlag\":null,\"ancestors\":\"0,100\"},\"roles\":[{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"roleId\":4,\"roleName\":\"仅本人\",\"roleKey\":\"test2\",\"roleSort\":4,\"dataScope\":\"5\",\"menuCheckStrictly\":null,\"deptCheckStrictly\":null,\"status\":\"0\",\"delFlag\":null,\"remark\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":null,\"permissions\":null,\"admin\":false}],\"roleIds\":[2],\"postIds\":[],\"roleId\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-25 21:17:06');
+INSERT INTO `sys_oper_log` VALUES (1629470599531212801, '角色管理', 2, 'com.zhi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '', '/system/role', '4.2.2.2', ' ', '{\"createBy\":\"admin\",\"createTime\":\"2023-01-05 19:54:19\",\"updateBy\":\"admin\",\"updateTime\":\"2023-02-25 21:17:19\",\"roleId\":2,\"roleName\":\"普通角色\",\"roleKey\":\"common\",\"roleSort\":2,\"dataScope\":\"2\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"delFlag\":\"0\",\"remark\":\"普通角色\",\"flag\":false,\"menuIds\":[2,109,1046,1047,1048,113,112,3,114,115,1055,1056,1058,1057,1059,1060],\"deptIds\":null,\"permissions\":null,\"admin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-25 21:17:20');
+INSERT INTO `sys_oper_log` VALUES (1630182479073746945, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"html\"],\"articleCover\":\"1627852985965080577\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-27 20:26:05');
+INSERT INTO `sys_oper_log` VALUES (1630182551253524481, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"html\"],\"articleCover\":\"1627852985965080577\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-27 20:26:22');
+INSERT INTO `sys_oper_log` VALUES (1630182639010947073, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1630182637203202050\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/27/c1ed44bc66de4d648209d14b9d31bd69.jpg\",\"fileName\":\"The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-27 20:26:43');
+INSERT INTO `sys_oper_log` VALUES (1630182641976320001, '相册管理', 1, 'com.zhi.blog.controller.AlbumController.add()', 'POST', 1, 'admin', '', '/album/album', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1630182639979831298\",\"albumName\":\"测试\",\"albumDesc\":\"测试\",\"albumCover\":\"http://127.0.0.1:9000/blog/2023/02/27/c1ed44bc66de4d648209d14b9d31bd69.jpg\",\"isDelete\":null,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-27 20:26:44');
+INSERT INTO `sys_oper_log` VALUES (1630183772261556226, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1627852985965080577', '4.2.2.2', ' ', '{}', '{\"code\":500,\"msg\":\"操作失败\",\"data\":null}', 0, '', '2023-02-27 20:31:13');
+INSERT INTO `sys_oper_log` VALUES (1630183790976540673, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1630183789298819074\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/27/011af11410064e15bae1670d8b015fa2.jpg\",\"fileName\":\"t.jpg\"}}', 0, '', '2023-02-27 20:31:18');
+INSERT INTO `sys_oper_log` VALUES (1630183793304379394, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":139,\"userId\":1,\"categoryId\":216,\"categoryName\":\"正式\",\"tagNameList\":[\"测试\",\"html\"],\"articleCover\":\"1630183789298819074\",\"articleTitle\":\"第二篇测试\",\"articleContent\":\"test上传\",\"type\":1,\"originalUrl\":\"\",\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-27 20:31:18');
+INSERT INTO `sys_oper_log` VALUES (1630183839030681601, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1630183837352960001\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/27/7a96413957ea4ff998dc2a62b1246c7d.jpg\",\"fileName\":\"奥日和黑暗森林3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-27 20:31:29');
+INSERT INTO `sys_oper_log` VALUES (1630183841614372865, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\"],\"articleCover\":\"1630183837352960001\",\"articleTitle\":\"新的vue测试\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-27 20:31:30');
+INSERT INTO `sys_oper_log` VALUES (1630188084169646082, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1630188081078444034\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/27/03d15fc042af4b9c8deafe3496aa2c5e.jpg\",\"fileName\":\"奥日与鬼火意志Ori,and,the,Will,of,the,Wisps3440x1440壁纸_千叶网.jpg\"}}', 0, '', '2023-02-27 20:48:21');
+INSERT INTO `sys_oper_log` VALUES (1630188087009189889, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"pageName\":\"首页\",\"pageLabel\":\"home\",\"pageCover\":\"1630188081078444034\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-27 20:48:22');
+INSERT INTO `sys_oper_log` VALUES (1630188145213546498, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/154', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-27 20:48:36');
+INSERT INTO `sys_oper_log` VALUES (1630188157280559106, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/153', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-27 20:48:39');
+INSERT INTO `sys_oper_log` VALUES (1630188932140474369, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/139', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-27 20:51:44');
+INSERT INTO `sys_oper_log` VALUES (1630392958811389953, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1630392957024616450\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/28/37b8cdb431a3472e83252aa67896e497.jpg\",\"fileName\":\"奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg\"}}', 0, '', '2023-02-28 10:22:27');
+INSERT INTO `sys_oper_log` VALUES (1630392967489404930, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":155,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[\"默认\"],\"articleCover\":\"1630392957024616450\",\"articleTitle\":\"测试删除\",\"articleContent\":\"测试删除\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-28 10:22:29');
+INSERT INTO `sys_oper_log` VALUES (1630393448018231298, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 10:24:24');
+INSERT INTO `sys_oper_log` VALUES (1630393950961418241, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 10:26:24');
+INSERT INTO `sys_oper_log` VALUES (1630394204989440002, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 10:27:24');
+INSERT INTO `sys_oper_log` VALUES (1630394994948849665, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 10:30:33');
+INSERT INTO `sys_oper_log` VALUES (1630395053526499329, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 10:30:47');
+INSERT INTO `sys_oper_log` VALUES (1630395132178087938, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', 'XX XX', '{}', '', 1, '', '2023-02-28 10:31:05');
+INSERT INTO `sys_oper_log` VALUES (1630396076550795266, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '4.2.2.2', ' ', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1630396074092933122\",\"url\":\"http://127.0.0.1:9000/blog/2023/02/28/8815c9b53d3f442bb096b7c400306ace.jpeg\",\"fileName\":\"thelastofus,apocalyptic_千叶网.jpeg\"}}', 0, '', '2023-02-28 10:34:51');
+INSERT INTO `sys_oper_log` VALUES (1630396083588837377, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":156,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[\"默认\"],\"articleCover\":\"1630396074092933122\",\"articleTitle\":\"123\",\"articleContent\":\"123\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-28 10:34:52');
+INSERT INTO `sys_oper_log` VALUES (1630396224374845441, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/156', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 10:35:26');
+INSERT INTO `sys_oper_log` VALUES (1630397493181267970, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 10:40:28');
+INSERT INTO `sys_oper_log` VALUES (1630397598798036993, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 10:40:54');
+INSERT INTO `sys_oper_log` VALUES (1630398584815992833, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":155,\"userId\":1,\"categoryId\":1,\"categoryName\":null,\"tagNameList\":[],\"articleCover\":\"1630392957024616450\",\"articleTitle\":\"测试删除\",\"articleContent\":\"测试删除\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\n; Field \'category_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'category_name\' doesn\'t have a default value', '2023-02-28 10:44:49');
+INSERT INTO `sys_oper_log` VALUES (1630398696531279874, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":155,\"userId\":1,\"categoryId\":1,\"categoryName\":null,\"tagNameList\":[],\"articleCover\":\"1630392957024616450\",\"articleTitle\":\"测试删除\",\"articleContent\":\"测试删除\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\n; Field \'category_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'category_name\' doesn\'t have a default value', '2023-02-28 10:45:15');
+INSERT INTO `sys_oper_log` VALUES (1630398768765583362, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":155,\"userId\":1,\"categoryId\":1,\"categoryName\":null,\"tagNameList\":[],\"articleCover\":\"1630392957024616450\",\"articleTitle\":\"测试删除\",\"articleContent\":\"测试删除\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\n; Field \'category_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'category_name\' doesn\'t have a default value', '2023-02-28 10:45:32');
+INSERT INTO `sys_oper_log` VALUES (1630408430080606210, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":156,\"userId\":1,\"categoryId\":1,\"categoryName\":null,\"tagNameList\":[],\"articleCover\":\"1630396074092933122\",\"articleTitle\":\"123\",\"articleContent\":\"123\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\n; Field \'category_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'category_name\' doesn\'t have a default value', '2023-02-28 11:23:56');
+INSERT INTO `sys_oper_log` VALUES (1630409546956660738, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":155,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[],\"articleCover\":\"1630392957024616450\",\"articleTitle\":\"测试删除\",\"articleContent\":\"测试删除\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '', 1, '\r\n### Error updating database. Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\r\n### The error may exist in com/zhi/blog/mapper/CategoryMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CategoryMapper.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO blog_category ( create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ? )\r\n### Cause: java.sql.SQLException: Field \'category_name\' doesn\'t have a default value\n; Field \'category_name\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'category_name\' doesn\'t have a default value', '2023-02-28 11:28:22');
+INSERT INTO `sys_oper_log` VALUES (1630409936582221825, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":156,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[\"默认\"],\"articleCover\":\"1630396074092933122\",\"articleTitle\":\"123\",\"articleContent\":\"123\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-28 11:29:55');
+INSERT INTO `sys_oper_log` VALUES (1630409978089054210, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":155,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[\"springboot\"],\"articleCover\":\"1630392957024616450\",\"articleTitle\":\"测试删除\",\"articleContent\":\"测试删除\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-28 11:30:05');
+INSERT INTO `sys_oper_log` VALUES (1630410976459251713, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 11:34:03');
+INSERT INTO `sys_oper_log` VALUES (1630411226573975553, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 11:35:03');
+INSERT INTO `sys_oper_log` VALUES (1630412037681074177, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 11:38:16');
+INSERT INTO `sys_oper_log` VALUES (1630412786334973953, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 11:41:15');
+INSERT INTO `sys_oper_log` VALUES (1630412974386696193, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 11:41:59');
+INSERT INTO `sys_oper_log` VALUES (1630415741666840577, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":155,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[\"默认\"],\"articleCover\":\"1630392957024616450\",\"articleTitle\":\"测试删除\",\"articleContent\":\"测试删除\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-28 11:52:59');
+INSERT INTO `sys_oper_log` VALUES (1630417219538243585, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 11:58:51');
+INSERT INTO `sys_oper_log` VALUES (1630417759764598786, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 12:01:00');
+INSERT INTO `sys_oper_log` VALUES (1630420154867257346, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":155,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[\"默认\"],\"articleCover\":\"1630392957024616450\",\"articleTitle\":\"测试删除\",\"articleContent\":\"测试删除\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-28 12:10:31');
+INSERT INTO `sys_oper_log` VALUES (1630522633269280769, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 18:57:44');
+INSERT INTO `sys_oper_log` VALUES (1630522977135132673, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 18:59:06');
+INSERT INTO `sys_oper_log` VALUES (1630523886107901954, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 19:02:43');
+INSERT INTO `sys_oper_log` VALUES (1630539411819073538, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 20:04:24');
+INSERT INTO `sys_oper_log` VALUES (1630539622809341954, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 20:05:15');
+INSERT INTO `sys_oper_log` VALUES (1630539886643646466, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 20:06:18');
+INSERT INTO `sys_oper_log` VALUES (1630539952930426882, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, '', '2023-02-28 20:06:33');
+INSERT INTO `sys_oper_log` VALUES (1630540776121421826, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '4.2.2.2', ' ', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":155,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[\"默认\"],\"articleCover\":\"1630392957024616450\",\"articleTitle\":\"测试删除\",\"articleContent\":\"测试删除\",\"type\":2,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-28 20:09:50');
+INSERT INTO `sys_oper_log` VALUES (1630540810149810178, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '', 1, 'nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error updating database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: DELETE FROM blog_comment WHERE id IN ( )\r\n### The error may exist in com/zhi/blog/mapper/CommentMapper.java (best guess)\r\n### The error may involve com.zhi.blog.mapper.CommentMapper.deleteBatchIds\r\n### The error occurred while executing an update\r\n### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: DELETE FROM blog_comment WHERE id IN ( )', '2023-02-28 20:09:58');
+INSERT INTO `sys_oper_log` VALUES (1630541699480567810, '文章列表', 3, 'com.zhi.blog.controller.ArticleController.remove()', 'DELETE', 1, 'admin', '', '/article/article/155', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-28 20:13:30');
+INSERT INTO `sys_oper_log` VALUES (1630543167365357569, '说说管理', 3, 'com.zhi.blog.controller.TalkController.remove()', 'DELETE', 1, 'admin', '', '/talk/talk/59', '4.2.2.2', ' ', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-02-28 20:19:20');
+INSERT INTO `sys_oper_log` VALUES (1633693827350958081, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1633693827288043522\",\"url\":\"http://127.0.0.1:9000/blog/2023/03/09/bf0032f388f249cd8d47b81ed24a26a4.jpeg\",\"fileName\":\"LOL娜美3440x1440壁纸_千叶网.jpeg\"}}', 0, '', '2023-03-09 12:58:56');
+INSERT INTO `sys_oper_log` VALUES (1633693831679479809, '照片管理', 1, 'com.zhi.blog.controller.PhotoController.add()', 'POST', 1, 'admin', '', '/photo/photo', '127.0.0.1', '内网IP', '{\"albumid\":\"1630182639979831298\",\"photoUrlList\":[\"http://127.0.0.1:9000/blog/2023/03/09/bf0032f388f249cd8d47b81ed24a26a4.jpeg\"],\"photoNameList\":[\"LOL娜美3440x1440壁纸_千叶网.jpeg\"]}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-03-09 12:58:57');
+INSERT INTO `sys_oper_log` VALUES (1647072075401154562, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1630183837352960001', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-15 10:59:19');
+INSERT INTO `sys_oper_log` VALUES (1647072122532548609, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1647072122465439746\",\"url\":\"http://127.0.0.1:9000/blog/2023/04/15/49170847943248e4b713989ddd13057f.jpg\",\"fileName\":\"Riffelsee里弗尔湖3440x1440风景壁纸_千叶网.jpg\"}}', 0, '', '2023-04-15 10:59:30');
+INSERT INTO `sys_oper_log` VALUES (1647072128526209025, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\"],\"articleCover\":\"1647072122465439746\",\"articleTitle\":\"新的vue测试\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-15 10:59:31');
+INSERT INTO `sys_oper_log` VALUES (1647486327500865537, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '', 1, '创建Bucket失败, 请核对配置信息:[The Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 1756563B632B1530; S3 Extended Request ID: aeaa3630-511a-428b-86d5-2c983a4507cf; Proxy: null)]', '2023-04-16 14:25:24');
+INSERT INTO `sys_oper_log` VALUES (1647487165757685761, '对象存储配置', 2, 'com.zhi.web.controller.system.SysOssConfigController.edit()', 'PUT', 1, 'admin', '', '/system/oss/config', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":1,\"configKey\":\"minio\",\"accessKey\":\"PTkrtTWYYmGcWh4R\",\"secretKey\":\"TPbwHM7lBNAnCuX7FD9xjuYokn2j9T5Z\",\"bucketName\":\"blog\",\"prefix\":\"\",\"endpoint\":\"127.0.0.1:9000\",\"domain\":\"\",\"isHttps\":\"N\",\"status\":\"0\",\"region\":\"\",\"ext1\":\"\",\"remark\":\"\",\"accessPolicy\":\"1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-16 14:28:44');
+INSERT INTO `sys_oper_log` VALUES (1647487217796415490, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '', 1, '创建Bucket失败, 请核对配置信息:[The Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 1756566CCFDC3408; S3 Extended Request ID: aeaa3630-511a-428b-86d5-2c983a4507cf; Proxy: null)]', '2023-04-16 14:28:56');
+INSERT INTO `sys_oper_log` VALUES (1647487626321625089, '对象存储配置', 2, 'com.zhi.web.controller.system.SysOssConfigController.edit()', 'PUT', 1, 'admin', '', '/system/oss/config', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"ossConfigId\":1,\"configKey\":\"minio\",\"accessKey\":\"05BFXRnPh5nmBEjH\",\"secretKey\":\"dZMNeKRRLZ7TheyHhvepfusURer9AWIt\",\"bucketName\":\"blog\",\"prefix\":\"\",\"endpoint\":\"127.0.0.1:9000\",\"domain\":\"\",\"isHttps\":\"N\",\"status\":\"0\",\"region\":\"\",\"ext1\":\"\",\"remark\":\"\",\"accessPolicy\":\"1\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-16 14:30:34');
+INSERT INTO `sys_oper_log` VALUES (1647487705090654209, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1647072122465439746', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-16 14:30:52');
+INSERT INTO `sys_oper_log` VALUES (1647487717145083905, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1647487717082169345\",\"url\":\"http://127.0.0.1:9000/blog/2023/04/16/dfddc05f9a9d48439599d442f2350646.jpg\",\"fileName\":\"1164338.jpg\"}}', 0, '', '2023-04-16 14:30:55');
+INSERT INTO `sys_oper_log` VALUES (1647487720047542273, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\"],\"articleCover\":\"1647487717082169345\",\"articleTitle\":\"新的vue测试\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-16 14:30:56');
+INSERT INTO `sys_oper_log` VALUES (1647487909449728001, 'OSS对象存储', 3, 'com.zhi.web.controller.system.SysOssController.remove()', 'DELETE', 1, 'admin', '', '/system/oss/1630188081078444034', '127.0.0.1', '内网IP', '{}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-16 14:31:41');
+INSERT INTO `sys_oper_log` VALUES (1647487957390622722, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1647487957390622721\",\"url\":\"http://127.0.0.1:9000/blog/2023/04/16/816497bf0865489a9563f4acdafa736b.jpg\",\"fileName\":\"QQ图片20210423133304.jpg\"}}', 0, '', '2023-04-16 14:31:53');
+INSERT INTO `sys_oper_log` VALUES (1647487960939003906, '页面管理', 2, 'com.zhi.blog.controller.BlogPageController.edit()', 'PUT', 1, 'admin', '', '/page/page', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":1,\"pageName\":\"首页\",\"pageLabel\":\"home\",\"pageCover\":\"1647487957390622721\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-16 14:31:53');
+INSERT INTO `sys_oper_log` VALUES (1647910881796837377, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1647910881729728513\",\"url\":\"http://127.0.0.1:9000/blog/2023/04/17/fb6fdcfdf0b1426183c791fa20be4d24.jpg\",\"fileName\":\"QQ图片20210630102619.jpg\"}}', 0, '', '2023-04-17 18:32:26');
+INSERT INTO `sys_oper_log` VALUES (1647910891024306177, '文章列表', 1, 'com.zhi.blog.controller.ArticleController.add()', 'POST', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":157,\"userId\":1,\"categoryId\":1,\"categoryName\":\"默认\",\"tagNameList\":[\"默认\"],\"articleCover\":\"1647910881729728513\",\"articleTitle\":\"喜好测试\",\"articleContent\":\"喜好测试\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-17 18:32:28');
+INSERT INTO `sys_oper_log` VALUES (1647911339319906306, 'OSS对象存储', 1, 'com.zhi.web.controller.system.SysOssController.upload()', 'POST', 1, 'admin', '', '/system/oss/upload', '127.0.0.1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"ossId\":\"1647911339319906305\",\"url\":\"http://127.0.0.1:9000/blog/2023/04/17/c45820d458654545b92c79c6fd148311.jpg\",\"fileName\":\"1161451.jpg\"}}', 0, '', '2023-04-17 18:34:15');
+INSERT INTO `sys_oper_log` VALUES (1647911472572944385, '文章列表', 2, 'com.zhi.blog.controller.ArticleController.edit()', 'PUT', 1, 'admin', '', '/article/article', '127.0.0.1', '内网IP', '{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":143,\"userId\":1,\"categoryId\":214,\"categoryName\":\"测试\",\"tagNameList\":[\"啦啦啦\"],\"articleCover\":\"1647487717082169345\",\"articleTitle\":\"新的vue测试\",\"articleContent\":\"# Vue中 this.$router.push 传参 及 参数接收\\n@[TOC](文章目录)\\n## 1:两种方式![Description](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法一:name跳转页面\\n\\n```js\\nthis.$router.push({name:\'anotherPage\',params:{id:1}});\\n\\n```\\n**另一页面接收参数方式:**\\n![1161451.jpg](http://127.0.0.1:9000/blog/2023/04/17/c45820d458654545b92c79c6fd148311.jpg)\\n```js\\nthis.$route.params.id\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/ee3e431c7d1f42e290cacb126494598f.png)\\n控制台展示:\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/da7e9c45e3be4ae89373ec195b0c96d7.png)\\n### 方法二:path跳转页面\\n\\n```js\\nthis.$router.push({path:\'/anotherPage\',query:{id:1}});\\n\\n```\\n![在这里插入图片描述](https://img-blog.csdnimg.cn/a54ddde315754e65977725ffc62f1e2a.png)\\n\\n\\n## 2、区别\\n### 1、path的query传参的参数会带在url后边展示在地址栏(/anotherPage?id=1),name的params传参的参数不会展示到地址栏。\\n### 2、由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效,需要用name来指定页面。\\n\\n原文链接:https://blog.csdn.net/chenxi_li/article/details/108365779\",\"type\":1,\"originalUrl\":null,\"isDelete\":0,\"status\":1}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2023-04-17 18:34:46');
+
+-- ----------------------------
+-- Table structure for sys_oss
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_oss`;
+CREATE TABLE `sys_oss` (
+ `oss_id` bigint(20) NOT NULL COMMENT '对象存储主键',
+ `file_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '文件名',
+ `original_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '原名',
+ `file_suffix` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '文件后缀名',
+ `url` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'URL地址',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '上传人',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新人',
+ `service` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'minio' COMMENT '服务商',
+ PRIMARY KEY (`oss_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'OSS对象存储表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_oss
+-- ----------------------------
+INSERT INTO `sys_oss` VALUES (1628740820213469185, '2023/02/23/9e959af95ac1495891a20b1c5ae596af.jpg', 'The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/23/9e959af95ac1495891a20b1c5ae596af.jpg', '2023-02-23 20:57:27', 'admin', '2023-02-23 20:57:27', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628740820213469186, '2023/02/23/9383112a6f184478bc19d9c599d838ed.jpg', 't.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/23/9383112a6f184478bc19d9c599d838ed.jpg', '2023-02-23 20:57:27', 'admin', '2023-02-23 20:57:27', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628740820213469187, '2023/02/23/f64fce4f33d841c8a243b88dc1de9b38.jpeg', 'thelastofus,apocalyptic_千叶网.jpeg', '.jpeg', 'http://127.0.0.1:9000/blog/2023/02/23/f64fce4f33d841c8a243b88dc1de9b38.jpeg', '2023-02-23 20:57:27', 'admin', '2023-02-23 20:57:27', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628741384812924929, '2023/02/23/af9bed20744f4ebcacb08ee7e7fef96e.jpeg', 'Spider,Man,MaviC漫画,漫画,蜘蛛,超级英雄,标志,黑暗_千叶网.jpeg', '.jpeg', 'http://127.0.0.1:9000/blog/2023/02/23/af9bed20744f4ebcacb08ee7e7fef96e.jpeg', '2023-02-23 20:59:41', 'admin', '2023-02-23 20:59:41', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628741384812924930, '2023/02/23/a243f8d6f4624c77b0a5df4eaa5199b4.jpeg', 'scarlettjohansson,抽象,doubleexposure,undertheskin_千叶网.jpeg', '.jpeg', 'http://127.0.0.1:9000/blog/2023/02/23/a243f8d6f4624c77b0a5df4eaa5199b4.jpeg', '2023-02-23 20:59:41', 'admin', '2023-02-23 20:59:41', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628741384812924931, '2023/02/23/2eca7b1342d041f28d27caf5c33f8bee.jpg', 't.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/23/2eca7b1342d041f28d27caf5c33f8bee.jpg', '2023-02-23 20:59:41', 'admin', '2023-02-23 20:59:41', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628742002663260161, '2023/02/23/db6e8324ed9e43639aa2d1e2ce1040d2.jpg', 'LOL新版皮肤稻草人联合王国,费德提克3440x1440壁纸_千叶网.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/23/db6e8324ed9e43639aa2d1e2ce1040d2.jpg', '2023-02-23 21:02:09', 'admin', '2023-02-23 21:02:09', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628742002663260162, '2023/02/23/cfbfb6e32b064237a0174ba5b4a7ac03.jpeg', 'LOL娜美3440x1440壁纸_千叶网.jpeg', '.jpeg', 'http://127.0.0.1:9000/blog/2023/02/23/cfbfb6e32b064237a0174ba5b4a7ac03.jpeg', '2023-02-23 21:02:09', 'admin', '2023-02-23 21:02:09', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628742002663260163, '2023/02/23/9d7b2483cee54a709875938f87edafc7.jpg', 'Life,is,Strange,23440x1440带鱼屏壁纸_千叶网.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/23/9d7b2483cee54a709875938f87edafc7.jpg', '2023-02-23 21:02:09', 'admin', '2023-02-23 21:02:09', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628742501022162946, '2023/02/23/f0b43ffa8ef646c2bd53b2bc17b23096.jpg', 'windows10窗口4k高清壁纸图片_千叶网.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/23/f0b43ffa8ef646c2bd53b2bc17b23096.jpg', '2023-02-23 21:04:07', 'admin', '2023-02-23 21:04:07', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628742525693059074, '2023/02/23/8117dbbf17ac45038383c449346f1642.jpeg', 'thelastofus,apocalyptic_千叶网.jpeg', '.jpeg', 'http://127.0.0.1:9000/blog/2023/02/23/8117dbbf17ac45038383c449346f1642.jpeg', '2023-02-23 21:04:13', 'admin', '2023-02-23 21:04:13', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628742525755973633, '2023/02/23/05a282c6e364474a802f29bcf42a48b1.jpg', 't.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/23/05a282c6e364474a802f29bcf42a48b1.jpg', '2023-02-23 21:04:13', 'admin', '2023-02-23 21:04:13', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1628742525885997058, '2023/02/23/c27113b003b84070bc4142cfbe81fe87.jpg', 'The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/23/c27113b003b84070bc4142cfbe81fe87.jpg', '2023-02-23 21:04:13', 'admin', '2023-02-23 21:04:13', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1630182637203202050, '2023/02/27/c1ed44bc66de4d648209d14b9d31bd69.jpg', 'The,Elder,Scrolls,Online_,Wolfhunter,上古卷轴3440x1440壁纸_千叶网.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/27/c1ed44bc66de4d648209d14b9d31bd69.jpg', '2023-02-27 20:26:43', 'admin', '2023-02-27 20:26:43', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1630183789298819074, '2023/02/27/011af11410064e15bae1670d8b015fa2.jpg', 't.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/27/011af11410064e15bae1670d8b015fa2.jpg', '2023-02-27 20:31:17', 'admin', '2023-02-27 20:31:17', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1630392957024616450, '2023/02/28/37b8cdb431a3472e83252aa67896e497.jpg', '奥罗拉湖的夜晚,瑞士Bannalp湖,冰岛,极光,星空,4K壁纸_千叶网.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/02/28/37b8cdb431a3472e83252aa67896e497.jpg', '2023-02-28 10:22:27', 'admin', '2023-02-28 10:22:27', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1630396074092933122, '2023/02/28/8815c9b53d3f442bb096b7c400306ace.jpeg', 'thelastofus,apocalyptic_千叶网.jpeg', '.jpeg', 'http://127.0.0.1:9000/blog/2023/02/28/8815c9b53d3f442bb096b7c400306ace.jpeg', '2023-02-28 10:34:50', 'admin', '2023-02-28 10:34:50', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1633693827288043522, '2023/03/09/bf0032f388f249cd8d47b81ed24a26a4.jpeg', 'LOL娜美3440x1440壁纸_千叶网.jpeg', '.jpeg', 'http://127.0.0.1:9000/blog/2023/03/09/bf0032f388f249cd8d47b81ed24a26a4.jpeg', '2023-03-09 12:58:56', 'admin', '2023-03-09 12:58:56', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1634131376791998466, '2023/03/10/25c4de0f22244c16814e19f0818f8e29.wav', 'voice.wav', '.wav', 'http://127.0.0.1:9000/blog/2023/03/10/25c4de0f22244c16814e19f0818f8e29.wav', '2023-03-10 17:57:36', NULL, '2023-03-10 17:57:36', NULL, 'minio');
+INSERT INTO `sys_oss` VALUES (1634132044038565890, '2023/03/10/80220840d3ad4464b985a570af567bcc.wav', 'voice.wav', '.wav', 'http://127.0.0.1:9000/blog/2023/03/10/80220840d3ad4464b985a570af567bcc.wav', '2023-03-10 18:00:15', NULL, '2023-03-10 18:00:15', NULL, 'minio');
+INSERT INTO `sys_oss` VALUES (1634132647716364289, '2023/03/10/87e3915623a44d4cbdd9a6500c96bddb.wav', 'voice.wav', '.wav', 'http://127.0.0.1:9000/blog/2023/03/10/87e3915623a44d4cbdd9a6500c96bddb.wav', '2023-03-10 18:02:39', NULL, '2023-03-10 18:02:39', NULL, 'minio');
+INSERT INTO `sys_oss` VALUES (1634132728049868801, '2023/03/10/770cb001c77640019d594a9373910792.wav', 'voice.wav', '.wav', 'http://127.0.0.1:9000/blog/2023/03/10/770cb001c77640019d594a9373910792.wav', '2023-03-10 18:02:58', NULL, '2023-03-10 18:02:58', NULL, 'minio');
+INSERT INTO `sys_oss` VALUES (1634132983592034306, '2023/03/10/a8f56f0433c9416ba42322d38a9e8d64.wav', 'voice.wav', '.wav', 'http://127.0.0.1:9000/blog/2023/03/10/a8f56f0433c9416ba42322d38a9e8d64.wav', '2023-03-10 18:03:59', NULL, '2023-03-10 18:03:59', NULL, 'minio');
+INSERT INTO `sys_oss` VALUES (1634483410246377473, '2023/03/11/8dbac03922f24a07bce8f0c28e540e47.wav', 'voice.wav', '.wav', 'http://127.0.0.1:9000/blog/2023/03/11/8dbac03922f24a07bce8f0c28e540e47.wav', '2023-03-11 17:16:27', NULL, '2023-03-11 17:16:27', NULL, 'minio');
+INSERT INTO `sys_oss` VALUES (1634483538533359617, '2023/03/11/5310f49688eb4434bd40ce031b471230.wav', 'voice.wav', '.wav', 'http://127.0.0.1:9000/blog/2023/03/11/5310f49688eb4434bd40ce031b471230.wav', '2023-03-11 17:16:57', NULL, '2023-03-11 17:16:57', NULL, 'minio');
+INSERT INTO `sys_oss` VALUES (1634483915358019585, '2023/03/11/59e254468a49495b8186a57bb5c60733.wav', 'voice.wav', '.wav', 'http://127.0.0.1:9000/blog/2023/03/11/59e254468a49495b8186a57bb5c60733.wav', '2023-03-11 17:18:27', NULL, '2023-03-11 17:18:27', NULL, 'minio');
+INSERT INTO `sys_oss` VALUES (1634487757118185473, '2023/03/11/ad5d9e1848b6497cb2d50e100103908a.wav', 'voice.wav', '.wav', 'http://127.0.0.1:9000/blog/2023/03/11/ad5d9e1848b6497cb2d50e100103908a.wav', '2023-03-11 17:33:43', NULL, '2023-03-11 17:33:43', NULL, 'minio');
+INSERT INTO `sys_oss` VALUES (1647487717082169345, '2023/04/16/dfddc05f9a9d48439599d442f2350646.jpg', '1164338.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/04/16/dfddc05f9a9d48439599d442f2350646.jpg', '2023-04-16 14:30:55', 'admin', '2023-04-16 14:30:55', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1647487957390622721, '2023/04/16/816497bf0865489a9563f4acdafa736b.jpg', 'QQ图片20210423133304.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/04/16/816497bf0865489a9563f4acdafa736b.jpg', '2023-04-16 14:31:53', 'admin', '2023-04-16 14:31:53', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1647910881729728513, '2023/04/17/fb6fdcfdf0b1426183c791fa20be4d24.jpg', 'QQ图片20210630102619.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/04/17/fb6fdcfdf0b1426183c791fa20be4d24.jpg', '2023-04-17 18:32:26', 'admin', '2023-04-17 18:32:26', 'admin', 'minio');
+INSERT INTO `sys_oss` VALUES (1647911339319906305, '2023/04/17/c45820d458654545b92c79c6fd148311.jpg', '1161451.jpg', '.jpg', 'http://127.0.0.1:9000/blog/2023/04/17/c45820d458654545b92c79c6fd148311.jpg', '2023-04-17 18:34:15', 'admin', '2023-04-17 18:34:15', 'admin', 'minio');
+
+-- ----------------------------
+-- Table structure for sys_oss_config
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_oss_config`;
+CREATE TABLE `sys_oss_config` (
+ `oss_config_id` bigint(20) NOT NULL COMMENT '主建',
+ `config_key` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '配置key',
+ `access_key` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT 'accessKey',
+ `secret_key` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '秘钥',
+ `bucket_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '桶名称',
+ `prefix` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '前缀',
+ `endpoint` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '访问站点',
+ `domain` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '自定义域名',
+ `is_https` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'N' COMMENT '是否https(Y=是,N=否)',
+ `region` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '域',
+ `access_policy` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '1' COMMENT '桶权限类型(0=private 1=public 2=custom)',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1' COMMENT '状态(0=正常,1=停用)',
+ `ext1` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '扩展字段',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`oss_config_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '对象存储配置表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_oss_config
+-- ----------------------------
+INSERT INTO `sys_oss_config` VALUES (1, 'minio', '05BFXRnPh5nmBEjH', 'dZMNeKRRLZ7TheyHhvepfusURer9AWIt', 'blog', '', '127.0.0.1:9000', '', 'N', '', '1', '0', '', 'admin', '2023-01-05 19:54:19', 'admin', '2023-04-16 14:30:34', '');
+INSERT INTO `sys_oss_config` VALUES (2, 'qiniu', 'xxxxx', 'xxxxx', '420-image', '', 's3-cn-north-1.qiniucs.com', '', 'N', '', '1', '1', '', 'admin', '2023-01-05 19:54:19', 'admin', '2023-01-10 20:10:17', '');
+INSERT INTO `sys_oss_config` VALUES (3, 'aliyun', 'xxxx', 'xxxxx', '2831826106', '', 'oss-cn-beijing.aliyuncs.com', '', 'N', '', '1', '1', '', 'admin', '2023-01-05 19:54:19', 'admin', '2023-01-10 20:23:48', '');
+INSERT INTO `sys_oss_config` VALUES (4, 'qcloud', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi-1250000000', '', 'cos.ap-beijing.myqcloud.com', '', 'N', 'ap-beijing', '1', '1', '', 'admin', '2023-01-05 19:54:19', 'admin', '2023-01-08 16:48:30', NULL);
+INSERT INTO `sys_oss_config` VALUES (5, 'image', 'ruoyi', 'ruoyi123', 'ruoyi', 'image', '127.0.0.1:9000', '', 'N', '', '1', '1', '', 'admin', '2023-01-05 19:54:19', 'admin', '2023-01-05 19:54:19', NULL);
+
+-- ----------------------------
+-- Table structure for sys_post
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_post`;
+CREATE TABLE `sys_post` (
+ `post_id` bigint(20) NOT NULL COMMENT '岗位ID',
+ `post_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '岗位编码',
+ `post_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '岗位名称',
+ `post_sort` int(4) NOT NULL COMMENT '显示顺序',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '状态(0正常 1停用)',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`post_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '岗位信息表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_post
+-- ----------------------------
+INSERT INTO `sys_post` VALUES (1, 'ceo', '董事长', 1, '0', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_post` VALUES (2, 'se', '项目经理', 2, '0', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_post` VALUES (3, 'hr', '人力资源', 3, '0', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+INSERT INTO `sys_post` VALUES (4, 'user', '普通员工', 4, '0', 'admin', '2023-01-05 19:54:19', '', NULL, '');
+
+-- ----------------------------
+-- Table structure for sys_role
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role`;
+CREATE TABLE `sys_role` (
+ `role_id` bigint(20) NOT NULL COMMENT '角色ID',
+ `role_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色名称',
+ `role_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色权限字符串',
+ `role_sort` int(4) NOT NULL COMMENT '显示顺序',
+ `data_scope` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
+ `menu_check_strictly` tinyint(1) NULL DEFAULT 1 COMMENT '菜单树选择项是否关联显示',
+ `dept_check_strictly` tinyint(1) NULL DEFAULT 1 COMMENT '部门树选择项是否关联显示',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色状态(0正常 1停用)',
+ `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`role_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 (1, '超级管理员', 'admin', 1, '1', 1, 1, '0', '0', 'admin', '2023-01-05 19:54:19', '', NULL, '超级管理员');
+INSERT INTO `sys_role` VALUES (2, '普通角色', 'common', 2, '2', 1, 1, '0', '0', 'admin', '2023-01-05 19:54:19', 'admin', '2023-02-25 21:17:19', '普通角色');
+INSERT INTO `sys_role` VALUES (3, '本部门及以下', 'test1', 3, '4', 1, 1, '0', '0', 'admin', '2023-01-05 19:54:34', 'admin', '2023-02-23 14:54:55', NULL);
+INSERT INTO `sys_role` VALUES (4, '仅本人', 'test2', 4, '5', 1, 1, '0', '0', 'admin', '2023-01-05 19:54:34', 'admin', '2023-02-23 14:55:01', NULL);
+
+-- ----------------------------
+-- Table structure for sys_role_dept
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_dept`;
+CREATE TABLE `sys_role_dept` (
+ `role_id` bigint(20) NOT NULL COMMENT '角色ID',
+ `dept_id` bigint(20) NOT NULL COMMENT '部门ID',
+ PRIMARY KEY (`role_id`, `dept_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_role_dept
+-- ----------------------------
+INSERT INTO `sys_role_dept` VALUES (2, 100);
+INSERT INTO `sys_role_dept` VALUES (2, 101);
+INSERT INTO `sys_role_dept` VALUES (2, 105);
+
+-- ----------------------------
+-- Table structure for sys_role_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_menu`;
+CREATE TABLE `sys_role_menu` (
+ `role_id` bigint(20) NOT NULL COMMENT '角色ID',
+ `menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
+ PRIMARY KEY (`role_id`, `menu_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 (2, 2);
+INSERT INTO `sys_role_menu` VALUES (2, 3);
+INSERT INTO `sys_role_menu` VALUES (2, 109);
+INSERT INTO `sys_role_menu` VALUES (2, 112);
+INSERT INTO `sys_role_menu` VALUES (2, 113);
+INSERT INTO `sys_role_menu` VALUES (2, 114);
+INSERT INTO `sys_role_menu` VALUES (2, 115);
+INSERT INTO `sys_role_menu` VALUES (2, 1046);
+INSERT INTO `sys_role_menu` VALUES (2, 1047);
+INSERT INTO `sys_role_menu` VALUES (2, 1048);
+INSERT INTO `sys_role_menu` VALUES (2, 1055);
+INSERT INTO `sys_role_menu` VALUES (2, 1056);
+INSERT INTO `sys_role_menu` VALUES (2, 1057);
+INSERT INTO `sys_role_menu` VALUES (2, 1058);
+INSERT INTO `sys_role_menu` VALUES (2, 1059);
+INSERT INTO `sys_role_menu` VALUES (2, 1060);
+INSERT INTO `sys_role_menu` VALUES (3, 1);
+INSERT INTO `sys_role_menu` VALUES (3, 5);
+INSERT INTO `sys_role_menu` VALUES (3, 100);
+INSERT INTO `sys_role_menu` VALUES (3, 101);
+INSERT INTO `sys_role_menu` VALUES (3, 102);
+INSERT INTO `sys_role_menu` VALUES (3, 103);
+INSERT INTO `sys_role_menu` VALUES (3, 104);
+INSERT INTO `sys_role_menu` VALUES (3, 105);
+INSERT INTO `sys_role_menu` VALUES (3, 106);
+INSERT INTO `sys_role_menu` VALUES (3, 107);
+INSERT INTO `sys_role_menu` VALUES (3, 108);
+INSERT INTO `sys_role_menu` VALUES (3, 500);
+INSERT INTO `sys_role_menu` VALUES (3, 501);
+INSERT INTO `sys_role_menu` VALUES (3, 1001);
+INSERT INTO `sys_role_menu` VALUES (3, 1002);
+INSERT INTO `sys_role_menu` VALUES (3, 1003);
+INSERT INTO `sys_role_menu` VALUES (3, 1004);
+INSERT INTO `sys_role_menu` VALUES (3, 1005);
+INSERT INTO `sys_role_menu` VALUES (3, 1006);
+INSERT INTO `sys_role_menu` VALUES (3, 1007);
+INSERT INTO `sys_role_menu` VALUES (3, 1008);
+INSERT INTO `sys_role_menu` VALUES (3, 1009);
+INSERT INTO `sys_role_menu` VALUES (3, 1010);
+INSERT INTO `sys_role_menu` VALUES (3, 1011);
+INSERT INTO `sys_role_menu` VALUES (3, 1012);
+INSERT INTO `sys_role_menu` VALUES (3, 1013);
+INSERT INTO `sys_role_menu` VALUES (3, 1014);
+INSERT INTO `sys_role_menu` VALUES (3, 1015);
+INSERT INTO `sys_role_menu` VALUES (3, 1016);
+INSERT INTO `sys_role_menu` VALUES (3, 1017);
+INSERT INTO `sys_role_menu` VALUES (3, 1018);
+INSERT INTO `sys_role_menu` VALUES (3, 1019);
+INSERT INTO `sys_role_menu` VALUES (3, 1020);
+INSERT INTO `sys_role_menu` VALUES (3, 1021);
+INSERT INTO `sys_role_menu` VALUES (3, 1022);
+INSERT INTO `sys_role_menu` VALUES (3, 1023);
+INSERT INTO `sys_role_menu` VALUES (3, 1024);
+INSERT INTO `sys_role_menu` VALUES (3, 1025);
+INSERT INTO `sys_role_menu` VALUES (3, 1026);
+INSERT INTO `sys_role_menu` VALUES (3, 1027);
+INSERT INTO `sys_role_menu` VALUES (3, 1028);
+INSERT INTO `sys_role_menu` VALUES (3, 1029);
+INSERT INTO `sys_role_menu` VALUES (3, 1030);
+INSERT INTO `sys_role_menu` VALUES (3, 1031);
+INSERT INTO `sys_role_menu` VALUES (3, 1032);
+INSERT INTO `sys_role_menu` VALUES (3, 1033);
+INSERT INTO `sys_role_menu` VALUES (3, 1034);
+INSERT INTO `sys_role_menu` VALUES (3, 1035);
+INSERT INTO `sys_role_menu` VALUES (3, 1036);
+INSERT INTO `sys_role_menu` VALUES (3, 1037);
+INSERT INTO `sys_role_menu` VALUES (3, 1038);
+INSERT INTO `sys_role_menu` VALUES (3, 1039);
+INSERT INTO `sys_role_menu` VALUES (3, 1040);
+INSERT INTO `sys_role_menu` VALUES (3, 1041);
+INSERT INTO `sys_role_menu` VALUES (3, 1042);
+INSERT INTO `sys_role_menu` VALUES (3, 1043);
+INSERT INTO `sys_role_menu` VALUES (3, 1044);
+INSERT INTO `sys_role_menu` VALUES (3, 1045);
+INSERT INTO `sys_role_menu` VALUES (3, 1500);
+INSERT INTO `sys_role_menu` VALUES (3, 1501);
+INSERT INTO `sys_role_menu` VALUES (3, 1502);
+INSERT INTO `sys_role_menu` VALUES (3, 1503);
+INSERT INTO `sys_role_menu` VALUES (3, 1504);
+INSERT INTO `sys_role_menu` VALUES (3, 1505);
+INSERT INTO `sys_role_menu` VALUES (3, 1506);
+INSERT INTO `sys_role_menu` VALUES (3, 1507);
+INSERT INTO `sys_role_menu` VALUES (3, 1508);
+INSERT INTO `sys_role_menu` VALUES (3, 1509);
+INSERT INTO `sys_role_menu` VALUES (3, 1510);
+INSERT INTO `sys_role_menu` VALUES (3, 1511);
+INSERT INTO `sys_role_menu` VALUES (3, 1610972802922405889);
+INSERT INTO `sys_role_menu` VALUES (3, 1610973263779946497);
+INSERT INTO `sys_role_menu` VALUES (3, 1611336461808898048);
+INSERT INTO `sys_role_menu` VALUES (3, 1611336461808898049);
+INSERT INTO `sys_role_menu` VALUES (3, 1611336461808898050);
+INSERT INTO `sys_role_menu` VALUES (3, 1611336461808898051);
+INSERT INTO `sys_role_menu` VALUES (3, 1611336461808898052);
+INSERT INTO `sys_role_menu` VALUES (3, 1611336461808898053);
+INSERT INTO `sys_role_menu` VALUES (3, 1611613727679938560);
+INSERT INTO `sys_role_menu` VALUES (3, 1611613727679938561);
+INSERT INTO `sys_role_menu` VALUES (3, 1611613727679938562);
+INSERT INTO `sys_role_menu` VALUES (3, 1611613727679938563);
+INSERT INTO `sys_role_menu` VALUES (3, 1611613727679938564);
+INSERT INTO `sys_role_menu` VALUES (3, 1611613727679938565);
+INSERT INTO `sys_role_menu` VALUES (3, 1611975928588574720);
+INSERT INTO `sys_role_menu` VALUES (3, 1611975928588574721);
+INSERT INTO `sys_role_menu` VALUES (3, 1611975928588574722);
+INSERT INTO `sys_role_menu` VALUES (3, 1611975928588574723);
+INSERT INTO `sys_role_menu` VALUES (3, 1611975928588574724);
+INSERT INTO `sys_role_menu` VALUES (3, 1611975928588574725);
+INSERT INTO `sys_role_menu` VALUES (4, 1);
+INSERT INTO `sys_role_menu` VALUES (4, 5);
+INSERT INTO `sys_role_menu` VALUES (4, 100);
+INSERT INTO `sys_role_menu` VALUES (4, 101);
+INSERT INTO `sys_role_menu` VALUES (4, 102);
+INSERT INTO `sys_role_menu` VALUES (4, 103);
+INSERT INTO `sys_role_menu` VALUES (4, 104);
+INSERT INTO `sys_role_menu` VALUES (4, 105);
+INSERT INTO `sys_role_menu` VALUES (4, 106);
+INSERT INTO `sys_role_menu` VALUES (4, 107);
+INSERT INTO `sys_role_menu` VALUES (4, 108);
+INSERT INTO `sys_role_menu` VALUES (4, 118);
+INSERT INTO `sys_role_menu` VALUES (4, 500);
+INSERT INTO `sys_role_menu` VALUES (4, 501);
+INSERT INTO `sys_role_menu` VALUES (4, 1001);
+INSERT INTO `sys_role_menu` VALUES (4, 1002);
+INSERT INTO `sys_role_menu` VALUES (4, 1003);
+INSERT INTO `sys_role_menu` VALUES (4, 1004);
+INSERT INTO `sys_role_menu` VALUES (4, 1005);
+INSERT INTO `sys_role_menu` VALUES (4, 1006);
+INSERT INTO `sys_role_menu` VALUES (4, 1007);
+INSERT INTO `sys_role_menu` VALUES (4, 1008);
+INSERT INTO `sys_role_menu` VALUES (4, 1009);
+INSERT INTO `sys_role_menu` VALUES (4, 1010);
+INSERT INTO `sys_role_menu` VALUES (4, 1011);
+INSERT INTO `sys_role_menu` VALUES (4, 1012);
+INSERT INTO `sys_role_menu` VALUES (4, 1013);
+INSERT INTO `sys_role_menu` VALUES (4, 1014);
+INSERT INTO `sys_role_menu` VALUES (4, 1015);
+INSERT INTO `sys_role_menu` VALUES (4, 1016);
+INSERT INTO `sys_role_menu` VALUES (4, 1017);
+INSERT INTO `sys_role_menu` VALUES (4, 1018);
+INSERT INTO `sys_role_menu` VALUES (4, 1019);
+INSERT INTO `sys_role_menu` VALUES (4, 1020);
+INSERT INTO `sys_role_menu` VALUES (4, 1021);
+INSERT INTO `sys_role_menu` VALUES (4, 1022);
+INSERT INTO `sys_role_menu` VALUES (4, 1023);
+INSERT INTO `sys_role_menu` VALUES (4, 1024);
+INSERT INTO `sys_role_menu` VALUES (4, 1025);
+INSERT INTO `sys_role_menu` VALUES (4, 1026);
+INSERT INTO `sys_role_menu` VALUES (4, 1027);
+INSERT INTO `sys_role_menu` VALUES (4, 1028);
+INSERT INTO `sys_role_menu` VALUES (4, 1029);
+INSERT INTO `sys_role_menu` VALUES (4, 1030);
+INSERT INTO `sys_role_menu` VALUES (4, 1031);
+INSERT INTO `sys_role_menu` VALUES (4, 1032);
+INSERT INTO `sys_role_menu` VALUES (4, 1033);
+INSERT INTO `sys_role_menu` VALUES (4, 1034);
+INSERT INTO `sys_role_menu` VALUES (4, 1035);
+INSERT INTO `sys_role_menu` VALUES (4, 1036);
+INSERT INTO `sys_role_menu` VALUES (4, 1037);
+INSERT INTO `sys_role_menu` VALUES (4, 1038);
+INSERT INTO `sys_role_menu` VALUES (4, 1039);
+INSERT INTO `sys_role_menu` VALUES (4, 1040);
+INSERT INTO `sys_role_menu` VALUES (4, 1041);
+INSERT INTO `sys_role_menu` VALUES (4, 1042);
+INSERT INTO `sys_role_menu` VALUES (4, 1043);
+INSERT INTO `sys_role_menu` VALUES (4, 1044);
+INSERT INTO `sys_role_menu` VALUES (4, 1045);
+INSERT INTO `sys_role_menu` VALUES (4, 1050);
+INSERT INTO `sys_role_menu` VALUES (4, 1500);
+INSERT INTO `sys_role_menu` VALUES (4, 1501);
+INSERT INTO `sys_role_menu` VALUES (4, 1502);
+INSERT INTO `sys_role_menu` VALUES (4, 1503);
+INSERT INTO `sys_role_menu` VALUES (4, 1504);
+INSERT INTO `sys_role_menu` VALUES (4, 1505);
+INSERT INTO `sys_role_menu` VALUES (4, 1506);
+INSERT INTO `sys_role_menu` VALUES (4, 1507);
+INSERT INTO `sys_role_menu` VALUES (4, 1508);
+INSERT INTO `sys_role_menu` VALUES (4, 1509);
+INSERT INTO `sys_role_menu` VALUES (4, 1510);
+INSERT INTO `sys_role_menu` VALUES (4, 1511);
+INSERT INTO `sys_role_menu` VALUES (4, 1600);
+INSERT INTO `sys_role_menu` VALUES (4, 1601);
+INSERT INTO `sys_role_menu` VALUES (4, 1602);
+INSERT INTO `sys_role_menu` VALUES (4, 1603);
+INSERT INTO `sys_role_menu` VALUES (4, 1604);
+INSERT INTO `sys_role_menu` VALUES (4, 1605);
+INSERT INTO `sys_role_menu` VALUES (4, 1610972802922405889);
+INSERT INTO `sys_role_menu` VALUES (4, 1610973263779946497);
+INSERT INTO `sys_role_menu` VALUES (4, 1611336461808898048);
+INSERT INTO `sys_role_menu` VALUES (4, 1611336461808898049);
+INSERT INTO `sys_role_menu` VALUES (4, 1611336461808898050);
+INSERT INTO `sys_role_menu` VALUES (4, 1611336461808898051);
+INSERT INTO `sys_role_menu` VALUES (4, 1611336461808898052);
+INSERT INTO `sys_role_menu` VALUES (4, 1611336461808898053);
+INSERT INTO `sys_role_menu` VALUES (4, 1611613727679938560);
+INSERT INTO `sys_role_menu` VALUES (4, 1611613727679938561);
+INSERT INTO `sys_role_menu` VALUES (4, 1611613727679938562);
+INSERT INTO `sys_role_menu` VALUES (4, 1611613727679938563);
+INSERT INTO `sys_role_menu` VALUES (4, 1611613727679938564);
+INSERT INTO `sys_role_menu` VALUES (4, 1611613727679938565);
+INSERT INTO `sys_role_menu` VALUES (4, 1611975928588574720);
+INSERT INTO `sys_role_menu` VALUES (4, 1611975928588574721);
+INSERT INTO `sys_role_menu` VALUES (4, 1611975928588574722);
+INSERT INTO `sys_role_menu` VALUES (4, 1611975928588574723);
+INSERT INTO `sys_role_menu` VALUES (4, 1611975928588574724);
+INSERT INTO `sys_role_menu` VALUES (4, 1611975928588574725);
+
+-- ----------------------------
+-- Table structure for sys_user
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user`;
+CREATE TABLE `sys_user` (
+ `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
+ `dept_id` bigint(20) NULL DEFAULT NULL COMMENT '部门ID',
+ `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户账号',
+ `nick_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户昵称',
+ `user_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'sys_user' COMMENT '用户类型(sys_user系统用户)',
+ `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '用户邮箱',
+ `phonenumber` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '手机号码',
+ `sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
+ `avatar` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '头像地址',
+ `password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '密码',
+ `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
+ `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
+ `login_ip` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '最后登录IP',
+ `login_date` datetime NULL DEFAULT NULL COMMENT '最后登录时间',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `web_site` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '个人网站',
+ `intro` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '个人简介',
+ PRIMARY KEY (`user_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1614548939325845512 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_user
+-- ----------------------------
+INSERT INTO `sys_user` VALUES (1, 104, 'admin', 'water-之', 'sys_user', '2831826106@qq.com', '18888888888', '0', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/13/69a29185d99642fc926a62f86305b3fe.jpg', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2023-04-17 18:32:00', 'admin', '2023-01-05 19:54:19', 'admin', '2023-04-17 18:32:00', '管理员', NULL, NULL);
+INSERT INTO `sys_user` VALUES (2, 104, 'lionli', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@qq.com', '15666666666', '1', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2023-01-05 19:54:19', 'admin', '2023-01-05 19:54:19', 'admin', '2023-01-15 14:26:04', '测试员', NULL, NULL);
+INSERT INTO `sys_user` VALUES (3, 104, 'test', '本部门及以下 密码666666', 'sys_user', '', '', '0', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg', '$2a$10$b8yUzN0C71sbz.PhNOCgJe.Tu1yWC3RNrTyjSQ8p1W0.aaUXUJ.Ne', '0', '0', '127.0.0.1', '2023-04-17 18:16:52', 'admin', '2023-01-05 19:54:34', 'test', '2023-04-17 18:16:52', NULL, NULL, NULL);
+INSERT INTO `sys_user` VALUES (4, 104, 'test1', '仅本人 密码666666', 'sys_user', '', '', '0', 'http://2831826106.oss-cn-beijing.aliyuncs.com/2023/01/10/180d5a6553f04ebda0c70efd8c69bebe.jpg', '$2a$10$b8yUzN0C71sbz.PhNOCgJe.Tu1yWC3RNrTyjSQ8p1W0.aaUXUJ.Ne', '0', '0', '127.0.0.1', '2023-03-09 19:30:25', 'admin', '2023-01-05 19:54:34', 'test1', '2023-03-09 19:30:25', NULL, NULL, NULL);
+INSERT INTO `sys_user` VALUES (5, NULL, '荷塘', '荷塘', 'sys_user', '2831826106@qq.com', '', '0', 'https://s1.ax1x.com/2023/01/15/pSQf91A.jpg', '$2a$10$h0IknNHCPWIe9o1NuThugOI2mhCqcXyrJd5a86/XOEO4ClTGVbwZW', '0', '0', '127.0.0.1', '2023-01-19 23:00:18', '老妈', '2023-01-15 17:01:45', '荷塘', '2023-01-19 23:00:18', NULL, NULL, NULL);
+INSERT INTO `sys_user` VALUES (6, NULL, '月色', '月色', 'sys_user', '2831826106@qq.com', '', '0', 'https://s1.ax1x.com/2023/01/15/pSQf91A.jpg', '$2a$10$4XkCMVnhmntbicUiy.cx6.BWrzWGGsEvqqgCLl.UqUP6g92YpZj3e', '0', '0', '127.0.0.1', '2023-01-19 22:23:11', '老爸', '2023-01-15 17:03:59', '月色', '2023-01-19 22:23:11', NULL, NULL, '热爱学习');
+INSERT INTO `sys_user` VALUES (7, NULL, '测试', '测试', 'sys_user', '2831826106@qq.com', '', '0', 'https://s1.ax1x.com/2023/01/15/pSQf91A.jpg', '$2a$10$oVCi4XG.DByyZa77YJkRUuoc7CwEV7U0LSqnNqAhMJT2Z3CHFchIy', '0', '0', '127.0.0.1', '2023-01-17 13:40:32', '测试', '2023-01-17 13:40:31', '测试', '2023-01-17 13:40:32', NULL, NULL, NULL);
+INSERT INTO `sys_user` VALUES (1614548939325845508, NULL, 'lasttest', 'lasttest', 'sys_user', '2831826106@qq.com', '', '0', 'https://s1.ax1x.com/2023/01/15/pSQf91A.jpg', '$2a$10$druteqFvNhYp5rJLfOjzw.X5lmIIar2LyhielGFi.2mAPGlydidUe', '0', '0', '127.0.0.1', '2023-01-17 13:47:16', 'lasttest', '2023-01-17 13:47:16', 'lasttest', '2023-01-17 13:47:16', NULL, NULL, NULL);
+INSERT INTO `sys_user` VALUES (1614548939325845510, NULL, 'kalashok-pan', '卡拉肖克-潘', 'sys_user', '', '', '0', 'https://foruda.gitee.com/avatar/1673853732714613266/8669563_kalashok-pan_1673853732.png', '$2a$10$02fRUrt.2aF5mjfYLLryjOtUEt4yQR3v3hF52eo8/.t7.ZliDTGjW', '0', '0', '127.0.0.1', '2023-01-21 22:14:36', 'kalashok-pan', '2023-01-21 14:10:29', 'admin', '2023-02-11 13:10:27', '暂无', NULL, NULL);
+INSERT INTO `sys_user` VALUES (1614548939325845511, NULL, '测试666', '测试666', 'sys_user', '2831826106@qq.com', '', '0', 'https://s1.ax1x.com/2023/01/15/pSQf91A.jpg', '$2a$10$PejLOGmhG2gRlr6UJdpriuijHixN9mDqYpVQ6LCin5tKOYpL5LiYi', '0', '0', '127.0.0.1', '2023-02-12 12:30:03', '测试666', '2023-02-12 12:30:03', '测试666', '2023-02-12 12:30:03', NULL, NULL, NULL);
+
+-- ----------------------------
+-- Table structure for sys_user_post
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user_post`;
+CREATE TABLE `sys_user_post` (
+ `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+ `post_id` bigint(20) NOT NULL COMMENT '岗位ID',
+ PRIMARY KEY (`user_id`, `post_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_user_post
+-- ----------------------------
+INSERT INTO `sys_user_post` VALUES (1, 1);
+INSERT INTO `sys_user_post` VALUES (2, 2);
+
+-- ----------------------------
+-- Table structure for sys_user_role
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user_role`;
+CREATE TABLE `sys_user_role` (
+ `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+ `role_id` bigint(20) NOT NULL COMMENT '角色ID',
+ PRIMARY KEY (`user_id`, `role_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 (1, 1);
+INSERT INTO `sys_user_role` VALUES (2, 2);
+INSERT INTO `sys_user_role` VALUES (3, 3);
+INSERT INTO `sys_user_role` VALUES (4, 2);
+INSERT INTO `sys_user_role` VALUES (1614548939325845510, 4);
+
+-- ----------------------------
+-- Table structure for test_demo
+-- ----------------------------
+DROP TABLE IF EXISTS `test_demo`;
+CREATE TABLE `test_demo` (
+ `id` bigint(20) NOT NULL COMMENT '主键',
+ `dept_id` bigint(20) NULL DEFAULT NULL COMMENT '部门id',
+ `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id',
+ `order_num` int(11) NULL DEFAULT 0 COMMENT '排序号',
+ `test_key` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'key键',
+ `value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '值',
+ `version` int(11) NULL DEFAULT 0 COMMENT '版本',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
+ `del_flag` int(11) NULL DEFAULT 0 COMMENT '删除标志',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '测试单表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of test_demo
+-- ----------------------------
+INSERT INTO `test_demo` VALUES (1, 102, 4, 1, '测试数据权限', '测试', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (2, 102, 3, 2, '子节点1', '111', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (3, 102, 3, 3, '子节点2', '222', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (4, 108, 4, 4, '测试数据', 'demo', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (5, 108, 3, 13, '子节点11', '1111', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (6, 108, 3, 12, '子节点22', '2222', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (7, 108, 3, 11, '子节点33', '3333', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (8, 108, 3, 10, '子节点44', '4444', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (9, 108, 3, 9, '子节点55', '5555', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (10, 108, 3, 8, '子节点66', '6666', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (11, 108, 3, 7, '子节点77', '7777', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (12, 108, 3, 6, '子节点88', '8888', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_demo` VALUES (13, 108, 3, 5, '子节点99', '9999', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+
+-- ----------------------------
+-- Table structure for test_tree
+-- ----------------------------
+DROP TABLE IF EXISTS `test_tree`;
+CREATE TABLE `test_tree` (
+ `id` bigint(20) NOT NULL COMMENT '主键',
+ `parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父id',
+ `dept_id` bigint(20) NULL DEFAULT NULL COMMENT '部门id',
+ `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id',
+ `tree_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '值',
+ `version` int(11) NULL DEFAULT 0 COMMENT '版本',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
+ `del_flag` int(11) NULL DEFAULT 0 COMMENT '删除标志',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '测试树表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of test_tree
+-- ----------------------------
+INSERT INTO `test_tree` VALUES (1, 0, 102, 4, '测试数据权限', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (2, 1, 102, 3, '子节点1', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (3, 2, 102, 3, '子节点2', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (4, 0, 108, 4, '测试树1', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (5, 4, 108, 3, '子节点11', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (6, 4, 108, 3, '子节点22', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (7, 4, 108, 3, '子节点33', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (8, 5, 108, 3, '子节点44', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (9, 6, 108, 3, '子节点55', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (10, 7, 108, 3, '子节点66', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (11, 7, 108, 3, '子节点77', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (12, 10, 108, 3, '子节点88', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+INSERT INTO `test_tree` VALUES (13, 10, 108, 3, '子节点99', 0, '2023-01-05 19:54:34', 'admin', NULL, NULL, 0);
+
+-- ----------------------------
+-- Table structure for user_article_operation
+-- ----------------------------
+DROP TABLE IF EXISTS `user_article_operation`;
+CREATE TABLE `user_article_operation` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `user_id` bigint(20) NULL DEFAULT NULL,
+ `article_id` int(11) NULL DEFAULT NULL,
+ `operation_type` int(11) NULL DEFAULT NULL COMMENT '点赞为1,收藏为2(计算分数时点赞3分,收藏5分)',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 55 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of user_article_operation
+-- ----------------------------
+INSERT INTO `user_article_operation` VALUES (53, 1, 156, 1);
+INSERT INTO `user_article_operation` VALUES (54, 1, 157, 1);
+
+-- ----------------------------
+-- Table structure for xxl_job_group
+-- ----------------------------
+DROP TABLE IF EXISTS `xxl_job_group`;
+CREATE TABLE `xxl_job_group` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `app_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '执行器AppName',
+ `title` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '执行器名称',
+ `address_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '执行器地址类型:0=自动注册、1=手动录入',
+ `address_list` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '执行器地址列表,多地址逗号分隔',
+ `update_time` datetime NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of xxl_job_group
+-- ----------------------------
+INSERT INTO `xxl_job_group` VALUES (1, 'xxl-job-executor', '示例执行器', 0, NULL, '2023-02-23 16:41:23');
+
+-- ----------------------------
+-- Table structure for xxl_job_info
+-- ----------------------------
+DROP TABLE IF EXISTS `xxl_job_info`;
+CREATE TABLE `xxl_job_info` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
+ `job_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `add_time` datetime NULL DEFAULT NULL,
+ `update_time` datetime NULL DEFAULT NULL,
+ `author` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '作者',
+ `alarm_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '报警邮件',
+ `schedule_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NONE' COMMENT '调度类型',
+ `schedule_conf` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',
+ `misfire_strategy` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',
+ `executor_route_strategy` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '执行器路由策略',
+ `executor_handler` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '执行器任务handler',
+ `executor_param` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '执行器任务参数',
+ `executor_block_strategy` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '阻塞处理策略',
+ `executor_timeout` int(11) NOT NULL DEFAULT 0 COMMENT '任务执行超时时间,单位秒',
+ `executor_fail_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '失败重试次数',
+ `glue_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'GLUE类型',
+ `glue_source` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT 'GLUE源代码',
+ `glue_remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'GLUE备注',
+ `glue_updatetime` datetime NULL DEFAULT NULL COMMENT 'GLUE更新时间',
+ `child_jobid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
+ `trigger_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '调度状态:0-停止,1-运行',
+ `trigger_last_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '上次调度时间',
+ `trigger_next_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '下次调度时间',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of xxl_job_info
+-- ----------------------------
+INSERT INTO `xxl_job_info` VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '', 0, 0, 0);
+
+-- ----------------------------
+-- Table structure for xxl_job_lock
+-- ----------------------------
+DROP TABLE IF EXISTS `xxl_job_lock`;
+CREATE TABLE `xxl_job_lock` (
+ `lock_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '锁名称',
+ PRIMARY KEY (`lock_name`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of xxl_job_lock
+-- ----------------------------
+INSERT INTO `xxl_job_lock` VALUES ('schedule_lock');
+
+-- ----------------------------
+-- Table structure for xxl_job_log
+-- ----------------------------
+DROP TABLE IF EXISTS `xxl_job_log`;
+CREATE TABLE `xxl_job_log` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
+ `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
+ `executor_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
+ `executor_handler` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '执行器任务handler',
+ `executor_param` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '执行器任务参数',
+ `executor_sharding_param` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
+ `executor_fail_retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '失败重试次数',
+ `trigger_time` datetime NULL DEFAULT NULL COMMENT '调度-时间',
+ `trigger_code` int(11) NOT NULL COMMENT '调度-结果',
+ `trigger_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '调度-日志',
+ `handle_time` datetime NULL DEFAULT NULL COMMENT '执行-时间',
+ `handle_code` int(11) NOT NULL COMMENT '执行-状态',
+ `handle_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '执行-日志',
+ `alarm_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `I_trigger_time`(`trigger_time` ASC) USING BTREE,
+ INDEX `I_handle_code`(`handle_code` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of xxl_job_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for xxl_job_log_report
+-- ----------------------------
+DROP TABLE IF EXISTS `xxl_job_log_report`;
+CREATE TABLE `xxl_job_log_report` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `trigger_day` datetime NULL DEFAULT NULL COMMENT '调度-时间',
+ `running_count` int(11) NOT NULL DEFAULT 0 COMMENT '运行中-日志数量',
+ `suc_count` int(11) NOT NULL DEFAULT 0 COMMENT '执行成功-日志数量',
+ `fail_count` int(11) NOT NULL DEFAULT 0 COMMENT '执行失败-日志数量',
+ `update_time` datetime NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `i_trigger_day`(`trigger_day` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of xxl_job_log_report
+-- ----------------------------
+INSERT INTO `xxl_job_log_report` VALUES (1, '2023-01-05 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (2, '2023-01-04 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (3, '2023-01-03 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (4, '2023-01-06 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (5, '2023-01-07 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (6, '2023-01-08 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (7, '2023-01-09 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (8, '2023-01-10 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (9, '2023-01-11 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (10, '2023-01-12 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (11, '2023-01-13 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (12, '2023-01-14 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (13, '2023-01-15 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (14, '2023-01-16 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (15, '2023-01-17 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (16, '2023-01-18 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (17, '2023-01-19 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (18, '2023-01-20 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (19, '2023-01-21 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (20, '2023-01-22 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (21, '2023-01-23 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (22, '2023-01-24 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (23, '2023-02-08 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (24, '2023-02-07 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (25, '2023-02-06 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (26, '2023-02-09 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (27, '2023-02-11 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (28, '2023-02-10 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (29, '2023-02-12 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (30, '2023-02-13 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (31, '2023-02-14 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (32, '2023-02-15 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (33, '2023-02-16 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (34, '2023-02-17 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (35, '2023-02-18 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (36, '2023-02-19 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (37, '2023-02-20 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (38, '2023-02-21 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (39, '2023-02-22 00:00:00', 0, 0, 0, NULL);
+INSERT INTO `xxl_job_log_report` VALUES (40, '2023-02-23 00:00:00', 0, 0, 0, NULL);
+
+-- ----------------------------
+-- Table structure for xxl_job_logglue
+-- ----------------------------
+DROP TABLE IF EXISTS `xxl_job_logglue`;
+CREATE TABLE `xxl_job_logglue` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
+ `glue_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'GLUE类型',
+ `glue_source` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT 'GLUE源代码',
+ `glue_remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'GLUE备注',
+ `add_time` datetime NULL DEFAULT NULL,
+ `update_time` datetime NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of xxl_job_logglue
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for xxl_job_registry
+-- ----------------------------
+DROP TABLE IF EXISTS `xxl_job_registry`;
+CREATE TABLE `xxl_job_registry` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `registry_group` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `registry_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `registry_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `update_time` datetime NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `i_g_k_v`(`registry_group` ASC, `registry_key` ASC, `registry_value` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 327 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of xxl_job_registry
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for xxl_job_user
+-- ----------------------------
+DROP TABLE IF EXISTS `xxl_job_user`;
+CREATE TABLE `xxl_job_user` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '账号',
+ `password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
+ `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
+ `permission` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `i_username`(`username` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of xxl_job_user
+-- ----------------------------
+INSERT INTO `xxl_job_user` VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/script/sql/sql.md b/script/sql/sql.md
new file mode 100644
index 0000000..02bd144
--- /dev/null
+++ b/script/sql/sql.md
@@ -0,0 +1 @@
+# 加入qq群:551275273 了解博客部署教程
\ No newline at end of file
diff --git a/zhi-admin-ui/.editorconfig b/zhi-admin-ui/.editorconfig
new file mode 100644
index 0000000..7034f9b
--- /dev/null
+++ b/zhi-admin-ui/.editorconfig
@@ -0,0 +1,22 @@
+# 告诉EditorConfig插件,这是根文件,不用继续往上查找
+root = true
+
+# 匹配全部文件
+[*]
+# 设置字符集
+charset = utf-8
+# 缩进风格,可选space、tab
+indent_style = space
+# 缩进的空格数
+indent_size = 2
+# 结尾换行符,可选lf、cr、crlf
+end_of_line = lf
+# 在文件结尾插入新行
+insert_final_newline = true
+# 删除一行中的前后空格
+trim_trailing_whitespace = true
+
+# 匹配md结尾的文件
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false
diff --git a/zhi-admin-ui/.env.development b/zhi-admin-ui/.env.development
new file mode 100644
index 0000000..bbd575e
--- /dev/null
+++ b/zhi-admin-ui/.env.development
@@ -0,0 +1,18 @@
+# 页面标题
+VUE_APP_TITLE = zhi-water的博客
+
+# 开发环境配置
+ENV = 'development'
+
+# 若依管理系统/开发环境
+VUE_APP_BASE_API = '/dev-api'
+
+# 应用访问路径 例如使用前缀 /admin/
+VUE_APP_CONTEXT_PATH = '/'
+
+
+# xxl-job 控制台地址
+VUE_APP_XXL_JOB_ADMIN = 'http://localhost:9100/xxl-job-admin'
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true
diff --git a/zhi-admin-ui/.env.production b/zhi-admin-ui/.env.production
new file mode 100644
index 0000000..0ab440a
--- /dev/null
+++ b/zhi-admin-ui/.env.production
@@ -0,0 +1,15 @@
+# 页面标题
+VUE_APP_TITLE = zhi-water的博客
+
+# 生产环境配置
+ENV = 'production'
+
+# 应用访问路径 例如使用前缀 /admin/
+VUE_APP_CONTEXT_PATH = '/'
+
+
+# 监控地址
+VUE_APP_XXL_JOB_ADMIN = '/xxl-job-admin'
+
+# 若依管理系统/生产环境
+VUE_APP_BASE_API = '/prod-api'
diff --git a/zhi-admin-ui/.eslintignore b/zhi-admin-ui/.eslintignore
new file mode 100644
index 0000000..89be6f6
--- /dev/null
+++ b/zhi-admin-ui/.eslintignore
@@ -0,0 +1,10 @@
+# 忽略build目录下类型为js的文件的语法检查
+build/*.js
+# 忽略src/assets目录下文件的语法检查
+src/assets
+# 忽略public目录下文件的语法检查
+public
+# 忽略当前目录下为js的文件的语法检查
+*.js
+# 忽略当前目录下为vue的文件的语法检查
+*.vue
\ No newline at end of file
diff --git a/zhi-admin-ui/.eslintrc.js b/zhi-admin-ui/.eslintrc.js
new file mode 100644
index 0000000..82bbdee
--- /dev/null
+++ b/zhi-admin-ui/.eslintrc.js
@@ -0,0 +1,199 @@
+// ESlint 检查配置
+module.exports = {
+ root: true,
+ parserOptions: {
+ parser: 'babel-eslint',
+ sourceType: 'module'
+ },
+ env: {
+ browser: true,
+ node: true,
+ es6: true,
+ },
+ extends: ['plugin:vue/recommended', 'eslint:recommended'],
+
+ // add your custom rules here
+ //it is base on https://github.com/vuejs/eslint-config-vue
+ rules: {
+ "vue/max-attributes-per-line": [2, {
+ "singleline": 10,
+ "multiline": {
+ "max": 1,
+ "allowFirstLine": false
+ }
+ }],
+ "vue/singleline-html-element-content-newline": "off",
+ "vue/multiline-html-element-content-newline":"off",
+ "vue/name-property-casing": ["error", "PascalCase"],
+ "vue/no-v-html": "off",
+ 'accessor-pairs': 2,
+ 'arrow-spacing': [2, {
+ 'before': true,
+ 'after': true
+ }],
+ 'block-spacing': [2, 'always'],
+ 'brace-style': [2, '1tbs', {
+ 'allowSingleLine': true
+ }],
+ 'camelcase': [0, {
+ 'properties': 'always'
+ }],
+ 'comma-dangle': [2, 'never'],
+ 'comma-spacing': [2, {
+ 'before': false,
+ 'after': true
+ }],
+ 'comma-style': [2, 'last'],
+ 'constructor-super': 2,
+ 'curly': [2, 'multi-line'],
+ 'dot-location': [2, 'property'],
+ 'eol-last': 2,
+ 'eqeqeq': ["error", "always", {"null": "ignore"}],
+ 'generator-star-spacing': [2, {
+ 'before': true,
+ 'after': true
+ }],
+ 'handle-callback-err': [2, '^(err|error)$'],
+ 'indent': [2, 2, {
+ 'SwitchCase': 1
+ }],
+ 'jsx-quotes': [2, 'prefer-single'],
+ 'key-spacing': [2, {
+ 'beforeColon': false,
+ 'afterColon': true
+ }],
+ 'keyword-spacing': [2, {
+ 'before': true,
+ 'after': true
+ }],
+ 'new-cap': [2, {
+ 'newIsCap': true,
+ 'capIsNew': false
+ }],
+ 'new-parens': 2,
+ 'no-array-constructor': 2,
+ 'no-caller': 2,
+ 'no-console': 'off',
+ 'no-class-assign': 2,
+ 'no-cond-assign': 2,
+ 'no-const-assign': 2,
+ 'no-control-regex': 0,
+ 'no-delete-var': 2,
+ 'no-dupe-args': 2,
+ 'no-dupe-class-members': 2,
+ 'no-dupe-keys': 2,
+ 'no-duplicate-case': 2,
+ 'no-empty-character-class': 2,
+ 'no-empty-pattern': 2,
+ 'no-eval': 2,
+ 'no-ex-assign': 2,
+ 'no-extend-native': 2,
+ 'no-extra-bind': 2,
+ 'no-extra-boolean-cast': 2,
+ 'no-extra-parens': [2, 'functions'],
+ 'no-fallthrough': 2,
+ 'no-floating-decimal': 2,
+ 'no-func-assign': 2,
+ 'no-implied-eval': 2,
+ 'no-inner-declarations': [2, 'functions'],
+ 'no-invalid-regexp': 2,
+ 'no-irregular-whitespace': 2,
+ 'no-iterator': 2,
+ 'no-label-var': 2,
+ 'no-labels': [2, {
+ 'allowLoop': false,
+ 'allowSwitch': false
+ }],
+ 'no-lone-blocks': 2,
+ 'no-mixed-spaces-and-tabs': 2,
+ 'no-multi-spaces': 2,
+ 'no-multi-str': 2,
+ 'no-multiple-empty-lines': [2, {
+ 'max': 1
+ }],
+ 'no-native-reassign': 2,
+ 'no-negated-in-lhs': 2,
+ 'no-new-object': 2,
+ 'no-new-require': 2,
+ 'no-new-symbol': 2,
+ 'no-new-wrappers': 2,
+ 'no-obj-calls': 2,
+ 'no-octal': 2,
+ 'no-octal-escape': 2,
+ 'no-path-concat': 2,
+ 'no-proto': 2,
+ 'no-redeclare': 2,
+ 'no-regex-spaces': 2,
+ 'no-return-assign': [2, 'except-parens'],
+ 'no-self-assign': 2,
+ 'no-self-compare': 2,
+ 'no-sequences': 2,
+ 'no-shadow-restricted-names': 2,
+ 'no-spaced-func': 2,
+ 'no-sparse-arrays': 2,
+ 'no-this-before-super': 2,
+ 'no-throw-literal': 2,
+ 'no-trailing-spaces': 2,
+ 'no-undef': 2,
+ 'no-undef-init': 2,
+ 'no-unexpected-multiline': 2,
+ 'no-unmodified-loop-condition': 2,
+ 'no-unneeded-ternary': [2, {
+ 'defaultAssignment': false
+ }],
+ 'no-unreachable': 2,
+ 'no-unsafe-finally': 2,
+ 'no-unused-vars': [2, {
+ 'vars': 'all',
+ 'args': 'none'
+ }],
+ 'no-useless-call': 2,
+ 'no-useless-computed-key': 2,
+ 'no-useless-constructor': 2,
+ 'no-useless-escape': 0,
+ 'no-whitespace-before-property': 2,
+ 'no-with': 2,
+ 'one-var': [2, {
+ 'initialized': 'never'
+ }],
+ 'operator-linebreak': [2, 'after', {
+ 'overrides': {
+ '?': 'before',
+ ':': 'before'
+ }
+ }],
+ 'padded-blocks': [2, 'never'],
+ 'quotes': [2, 'single', {
+ 'avoidEscape': true,
+ 'allowTemplateLiterals': true
+ }],
+ 'semi': [2, 'never'],
+ 'semi-spacing': [2, {
+ 'before': false,
+ 'after': true
+ }],
+ 'space-before-blocks': [2, 'always'],
+ 'space-before-function-paren': [2, 'never'],
+ 'space-in-parens': [2, 'never'],
+ 'space-infix-ops': 2,
+ 'space-unary-ops': [2, {
+ 'words': true,
+ 'nonwords': false
+ }],
+ 'spaced-comment': [2, 'always', {
+ 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
+ }],
+ 'template-curly-spacing': [2, 'never'],
+ 'use-isnan': 2,
+ 'valid-typeof': 2,
+ 'wrap-iife': [2, 'any'],
+ 'yield-star-spacing': [2, 'both'],
+ 'yoda': [2, 'never'],
+ 'prefer-const': 2,
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
+ 'object-curly-spacing': [2, 'always', {
+ objectsInObjects: false
+ }],
+ 'array-bracket-spacing': [2, 'never']
+ }
+}
diff --git a/zhi-admin-ui/.gitignore b/zhi-admin-ui/.gitignore
new file mode 100644
index 0000000..78a752d
--- /dev/null
+++ b/zhi-admin-ui/.gitignore
@@ -0,0 +1,23 @@
+.DS_Store
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock
diff --git a/zhi-admin-ui/README.md b/zhi-admin-ui/README.md
new file mode 100644
index 0000000..00c0ab8
--- /dev/null
+++ b/zhi-admin-ui/README.md
@@ -0,0 +1,30 @@
+## 开发
+
+```bash
+# 克隆项目
+git clone https://gitee.com/y_project/RuoYi-Vue
+
+# 进入项目目录
+cd ruoyi-ui
+
+# 安装依赖
+npm install
+
+# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
+npm install --registry=https://registry.npmmirror.com
+
+# 启动服务
+npm run dev
+```
+
+浏览器访问 http://localhost:80
+
+## 发布
+
+```bash
+# 构建测试环境
+npm run build:stage
+
+# 构建生产环境
+npm run build:prod
+```
\ No newline at end of file
diff --git a/zhi-admin-ui/babel.config.js b/zhi-admin-ui/babel.config.js
new file mode 100644
index 0000000..b99f001
--- /dev/null
+++ b/zhi-admin-ui/babel.config.js
@@ -0,0 +1,13 @@
+module.exports = {
+ presets: [
+ // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
+ '@vue/cli-plugin-babel/preset'
+ ],
+ 'env': {
+ 'development': {
+ // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
+ // This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
+ 'plugins': ['dynamic-import-node']
+ }
+ }
+}
diff --git a/zhi-admin-ui/bin/build.bat b/zhi-admin-ui/bin/build.bat
new file mode 100644
index 0000000..dda590d
--- /dev/null
+++ b/zhi-admin-ui/bin/build.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [Ϣ] Weḅdistļ
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+npm run build:prod
+
+pause
\ No newline at end of file
diff --git a/zhi-admin-ui/bin/package.bat b/zhi-admin-ui/bin/package.bat
new file mode 100644
index 0000000..2f22a4a
--- /dev/null
+++ b/zhi-admin-ui/bin/package.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 安装Web工程,生成node_modules文件。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+npm install --registry=https://registry.npmmirror.com
+
+pause
diff --git a/zhi-admin-ui/bin/run-web.bat b/zhi-admin-ui/bin/run-web.bat
new file mode 100644
index 0000000..0318c52
--- /dev/null
+++ b/zhi-admin-ui/bin/run-web.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 使用 Vue CLI 命令运行 Web 工程。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+npm run dev
+
+pause
\ No newline at end of file
diff --git a/zhi-admin-ui/build/index.js b/zhi-admin-ui/build/index.js
new file mode 100644
index 0000000..0c57de2
--- /dev/null
+++ b/zhi-admin-ui/build/index.js
@@ -0,0 +1,35 @@
+const { run } = require('runjs')
+const chalk = require('chalk')
+const config = require('../vue.config.js')
+const rawArgv = process.argv.slice(2)
+const args = rawArgv.join(' ')
+
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
+ const report = rawArgv.includes('--report')
+
+ run(`vue-cli-service build ${args}`)
+
+ const port = 9526
+ const publicPath = config.publicPath
+
+ var connect = require('connect')
+ var serveStatic = require('serve-static')
+ const app = connect()
+
+ app.use(
+ publicPath,
+ serveStatic('./dist', {
+ index: ['index.html', '/']
+ })
+ )
+
+ app.listen(port, function () {
+ console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`))
+ if (report) {
+ console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`))
+ }
+
+ })
+} else {
+ run(`vue-cli-service build ${args}`)
+}
diff --git a/zhi-admin-ui/package.json b/zhi-admin-ui/package.json
new file mode 100644
index 0000000..5637cb5
--- /dev/null
+++ b/zhi-admin-ui/package.json
@@ -0,0 +1,96 @@
+{
+ "name": "ruoyi-vue-plus",
+ "version": "4.4.0",
+ "description": "RuoYi-Vue-Plus后台管理系统",
+ "author": "LionLi",
+ "license": "MIT",
+ "scripts": {
+ "dev": "vue-cli-service serve",
+ "build:prod": "vue-cli-service build",
+ "preview": "node build/index.js --preview",
+ "lint": "eslint --ext .js,.vue src"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "src/**/*.{js,vue}": [
+ "eslint --fix",
+ "git add"
+ ]
+ },
+ "keywords": [
+ "vue",
+ "admin",
+ "dashboard",
+ "element-ui",
+ "boilerplate",
+ "admin-template",
+ "management-system"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://gitee.com/y_project/RuoYi-Vue.git"
+ },
+ "dependencies": {
+ "@kangc/v-md-editor": "^1.7.11",
+ "@riophae/vue-treeselect": "0.4.0",
+ "axios": "0.24.0",
+ "clipboard": "2.0.8",
+ "core-js": "3.25.3",
+ "dayjs": "^1.11.7",
+ "echarts": "4.9.0",
+ "element-ui": "2.15.10",
+ "file-saver": "2.0.5",
+ "fuse.js": "6.4.3",
+ "highlight.js": "9.18.5",
+ "image-conversion": "^2.1.1",
+ "js-beautify": "1.13.0",
+ "js-cookie": "3.0.1",
+ "jsencrypt": "3.0.0-rc.1",
+ "less-loader": "^5.0.0",
+ "mavon-editor": "^2.9.0",
+ "nprogress": "0.2.0",
+ "path": "^0.12.7",
+ "quill": "1.3.7",
+ "screenfull": "5.0.2",
+ "sortablejs": "1.10.2",
+ "vue": "2.6.12",
+ "vue-calendar-heatmap": "^0.8.4",
+ "vue-count-to": "1.0.13",
+ "vue-cropper": "0.5.5",
+ "vue-meta": "2.4.0",
+ "vue-router": "3.4.9",
+ "vuedraggable": "2.24.3",
+ "vuex": "3.6.0"
+ },
+ "devDependencies": {
+ "@vue/cli-plugin-babel": "4.4.6",
+ "@vue/cli-plugin-eslint": "4.4.6",
+ "@vue/cli-service": "4.4.6",
+ "babel-eslint": "10.1.0",
+ "babel-plugin-dynamic-import-node": "2.3.3",
+ "chalk": "4.1.0",
+ "compression-webpack-plugin": "5.0.2",
+ "connect": "3.6.6",
+ "eslint": "7.15.0",
+ "eslint-plugin-vue": "7.2.0",
+ "lint-staged": "10.5.3",
+ "runjs": "4.4.2",
+ "sass": "1.32.13",
+ "sass-loader": "10.1.1",
+ "script-ext-html-webpack-plugin": "2.1.5",
+ "svg-sprite-loader": "5.1.1",
+ "vue-template-compiler": "2.6.12"
+ },
+ "engines": {
+ "node": ">=8.9",
+ "npm": ">= 3.0.0"
+ },
+ "browserslist": [
+ "> 1%",
+ "last 2 versions"
+ ]
+}
diff --git a/zhi-admin-ui/public/favicon.ico b/zhi-admin-ui/public/favicon.ico
new file mode 100644
index 0000000..71b1dac
Binary files /dev/null and b/zhi-admin-ui/public/favicon.ico differ
diff --git a/zhi-admin-ui/public/html/ie.html b/zhi-admin-ui/public/html/ie.html
new file mode 100644
index 0000000..052ffcd
--- /dev/null
+++ b/zhi-admin-ui/public/html/ie.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+ 请升级您的浏览器
+
+
+
+
+
+
+请升级您的浏览器,以便我们更好的为您提供服务!
+您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。
+
+请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束
+自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明 。
+
+您可以选择更先进的浏览器
+推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。
+
+
+
+
\ No newline at end of file
diff --git a/zhi-admin-ui/public/index.html b/zhi-admin-ui/public/index.html
new file mode 100644
index 0000000..05b6745
--- /dev/null
+++ b/zhi-admin-ui/public/index.html
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+ <%= webpackConfig.name %>
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/public/robots.txt b/zhi-admin-ui/public/robots.txt
new file mode 100644
index 0000000..77470cb
--- /dev/null
+++ b/zhi-admin-ui/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /
\ No newline at end of file
diff --git a/zhi-admin-ui/src/App.vue b/zhi-admin-ui/src/App.vue
new file mode 100644
index 0000000..fc1f53c
--- /dev/null
+++ b/zhi-admin-ui/src/App.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/api/about/about.js b/zhi-admin-ui/src/api/about/about.js
new file mode 100644
index 0000000..48f3e43
--- /dev/null
+++ b/zhi-admin-ui/src/api/about/about.js
@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+// 查询关于我的信息
+export function getAbout(query) {
+ return request({
+ url: '/blogInfo/about',
+ method: 'get',
+ params: query
+ })
+}
+
+// 修改关于我
+export function updateAbout(data) {
+ return request({
+ url: '/blogInfo/admin/about',
+ method: 'put',
+ data: data
+ })
+}
+
+
+//上传富文本编辑器内图片
+export function uploadOssImage(data){
+ return request({
+ url:'/system/oss/upload',
+ method:'post',
+ data:data
+ })
+
+}
+
+
+
+
diff --git a/zhi-admin-ui/src/api/album/album.js b/zhi-admin-ui/src/api/album/album.js
new file mode 100644
index 0000000..790340c
--- /dev/null
+++ b/zhi-admin-ui/src/api/album/album.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询相册管理列表
+export function listAlbum(query) {
+ return request({
+ url: '/album/album/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询相册管理详细
+export function getAlbum(id) {
+ return request({
+ url: '/album/album/' + id,
+ method: 'get'
+ })
+}
+
+// 新增相册管理
+export function addAlbum(data) {
+ return request({
+ url: '/album/album',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改相册管理
+export function updateAlbum(data) {
+ return request({
+ url: '/album/album',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除相册管理
+export function delAlbum(id) {
+ return request({
+ url: '/album/album/' + id,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/article/article.js b/zhi-admin-ui/src/api/article/article.js
new file mode 100644
index 0000000..bc7f6b8
--- /dev/null
+++ b/zhi-admin-ui/src/api/article/article.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询文章列表列表
+export function listArticle(query) {
+ return request({
+ url: '/article/article/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询文章列表详细
+export function getArticle(id) {
+ return request({
+ url: '/article/article/' + id,
+ method: 'get'
+ })
+}
+
+// 新增文章列表
+export function addArticle(data) {
+ return request({
+ url: '/article/article',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改文章列表
+export function updateArticle(data) {
+ return request({
+ url: '/article/article',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除文章列表
+export function delArticle(id) {
+ return request({
+ url: '/article/article/' + id,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/category/category.js b/zhi-admin-ui/src/api/category/category.js
new file mode 100644
index 0000000..faa5d6c
--- /dev/null
+++ b/zhi-admin-ui/src/api/category/category.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询分类管理列表
+export function listCategory(query) {
+ return request({
+ url: '/category/category/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询分类管理详细
+export function getCategory(id) {
+ return request({
+ url: '/category/category/' + id,
+ method: 'get'
+ })
+}
+
+// 新增分类管理
+export function addCategory(data) {
+ return request({
+ url: '/category/category',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改分类管理
+export function updateCategory(data) {
+ return request({
+ url: '/category/category',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除分类管理
+export function delCategory(id) {
+ return request({
+ url: '/category/category/' + id,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/comment/comment.js b/zhi-admin-ui/src/api/comment/comment.js
new file mode 100644
index 0000000..24a8878
--- /dev/null
+++ b/zhi-admin-ui/src/api/comment/comment.js
@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+// 查询评论管理列表
+export function listComment(query) {
+ return request({
+ url: '/comment/comment/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询评论管理详细
+export function getComment(id) {
+ return request({
+ url: '/comment/comment/' + id,
+ method: 'get'
+ })
+}
+
+// 新增评论管理
+export function addComment(data) {
+ return request({
+ url: '/comment/comment',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改评论管理
+export function updateComment(data) {
+ return request({
+ url: '/comment/comment',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除评论管理
+export function delComment(id) {
+ return request({
+ url: '/comment/comment/' + id,
+ method: 'delete'
+ })
+
+}
+
+//审核评论管理
+export function auditComment(query){
+ return request({
+ url:'/comment/comment/audit',
+ method: 'get',
+ params: query
+
+ })
+}
diff --git a/zhi-admin-ui/src/api/demo/demo.js b/zhi-admin-ui/src/api/demo/demo.js
new file mode 100644
index 0000000..04d4025
--- /dev/null
+++ b/zhi-admin-ui/src/api/demo/demo.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询测试单表列表
+export function listDemo(query) {
+ return request({
+ url: '/demo/demo/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 自定义分页接口
+export function pageDemo(query) {
+ return request({
+ url: '/demo/demo/page',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询测试单表详细
+export function getDemo(id) {
+ return request({
+ url: '/demo/demo/' + id,
+ method: 'get'
+ })
+}
+
+// 新增测试单表
+export function addDemo(data) {
+ return request({
+ url: '/demo/demo',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改测试单表
+export function updateDemo(data) {
+ return request({
+ url: '/demo/demo',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除测试单表
+export function delDemo(id) {
+ return request({
+ url: '/demo/demo/' + id,
+ method: 'delete'
+ })
+}
+
diff --git a/zhi-admin-ui/src/api/demo/tree.js b/zhi-admin-ui/src/api/demo/tree.js
new file mode 100644
index 0000000..4c7ebc0
--- /dev/null
+++ b/zhi-admin-ui/src/api/demo/tree.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询测试树表列表
+export function listTree(query) {
+ return request({
+ url: '/demo/tree/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询测试树表详细
+export function getTree(id) {
+ return request({
+ url: '/demo/tree/' + id,
+ method: 'get'
+ })
+}
+
+// 新增测试树表
+export function addTree(data) {
+ return request({
+ url: '/demo/tree',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改测试树表
+export function updateTree(data) {
+ return request({
+ url: '/demo/tree',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除测试树表
+export function delTree(id) {
+ return request({
+ url: '/demo/tree/' + id,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/friendLink/friendLink.js b/zhi-admin-ui/src/api/friendLink/friendLink.js
new file mode 100644
index 0000000..1778f2c
--- /dev/null
+++ b/zhi-admin-ui/src/api/friendLink/friendLink.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询友链管理列表
+export function listFriendLink(query) {
+ return request({
+ url: '/friendLink/friendLink/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询友链管理详细
+export function getFriendLink(id) {
+ return request({
+ url: '/friendLink/friendLink/' + id,
+ method: 'get'
+ })
+}
+
+// 新增友链管理
+export function addFriendLink(data) {
+ return request({
+ url: '/friendLink/friendLink',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改友链管理
+export function updateFriendLink(data) {
+ return request({
+ url: '/friendLink/friendLink',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除友链管理
+export function delFriendLink(id) {
+ return request({
+ url: '/friendLink/friendLink/' + id,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/login.js b/zhi-admin-ui/src/api/login.js
new file mode 100644
index 0000000..3c5bcfe
--- /dev/null
+++ b/zhi-admin-ui/src/api/login.js
@@ -0,0 +1,71 @@
+import request from '@/utils/request'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+ const data = {
+ username,
+ password,
+ code,
+ uuid
+ }
+ return request({
+ url: '/login',
+ headers: {
+ isToken: false
+ },
+ method: 'post',
+ data: data
+ })
+}
+
+// 注册方法
+export function register(data) {
+ return request({
+ url: '/register',
+ headers: {
+ isToken: false
+ },
+ method: 'post',
+ data: data
+ })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+ return request({
+ url: '/getInfo',
+ method: 'get'
+ })
+}
+
+// 退出方法
+export function logout() {
+ return request({
+ url: '/logout',
+ method: 'post'
+ })
+}
+
+// 获取验证码
+export function getCodeImg() {
+ return request({
+ url: '/captchaImage',
+ headers: {
+ isToken: false
+ },
+ method: 'get',
+ timeout: 20000
+ })
+}
+
+// 短信验证码
+export function getCodeSms() {
+ return request({
+ url: '/captchaSms',
+ headers: {
+ isToken: false
+ },
+ method: 'get',
+ timeout: 20000
+ })
+}
diff --git a/zhi-admin-ui/src/api/menu.js b/zhi-admin-ui/src/api/menu.js
new file mode 100644
index 0000000..faef101
--- /dev/null
+++ b/zhi-admin-ui/src/api/menu.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 获取路由
+export const getRouters = () => {
+ return request({
+ url: '/getRouters',
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/zhi-admin-ui/src/api/message/message.js b/zhi-admin-ui/src/api/message/message.js
new file mode 100644
index 0000000..b6cdc15
--- /dev/null
+++ b/zhi-admin-ui/src/api/message/message.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询留言管理列表
+export function listMessage(query) {
+ return request({
+ url: '/message/message/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询留言管理详细
+export function getMessage(id) {
+ return request({
+ url: '/message/message/' + id,
+ method: 'get'
+ })
+}
+
+// 新增留言管理
+export function addMessage(data) {
+ return request({
+ url: '/message/message',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改留言管理
+export function updateMessage(data) {
+ return request({
+ url: '/message/message',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除留言管理
+export function delMessage(id) {
+ return request({
+ url: '/message/message/' + id,
+ method: 'delete'
+ })
+}
+
+// 审核留言管理
+export function auditMessage(query){
+ return request({
+ url:'/message/message/audit',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/zhi-admin-ui/src/api/monitor/cache.js b/zhi-admin-ui/src/api/monitor/cache.js
new file mode 100644
index 0000000..5cf0517
--- /dev/null
+++ b/zhi-admin-ui/src/api/monitor/cache.js
@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+// 查询缓存详细
+export function getCache() {
+ return request({
+ url: '/monitor/cache',
+ method: 'get'
+ })
+}
+
+// 查询缓存名称列表
+export function listCacheName() {
+ return request({
+ url: '/monitor/cache/getNames',
+ method: 'get'
+ })
+}
+
+// 查询缓存键名列表
+export function listCacheKey(cacheName) {
+ return request({
+ url: '/monitor/cache/getKeys/' + cacheName,
+ method: 'get'
+ })
+}
+
+// 查询缓存内容
+export function getCacheValue(cacheName, cacheKey) {
+ return request({
+ url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,
+ method: 'get'
+ })
+}
+
+// 清理指定名称缓存
+export function clearCacheName(cacheName) {
+ return request({
+ url: '/monitor/cache/clearCacheName/' + cacheName,
+ method: 'delete'
+ })
+}
+
+// 清理指定键名缓存
+export function clearCacheKey(cacheName, cacheKey) {
+ return request({
+ url: '/monitor/cache/clearCacheKey/'+ cacheName + "/" + cacheKey,
+ method: 'delete'
+ })
+}
+
+// 清理全部缓存
+export function clearCacheAll() {
+ return request({
+ url: '/monitor/cache/clearCacheAll',
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/monitor/logininfor.js b/zhi-admin-ui/src/api/monitor/logininfor.js
new file mode 100644
index 0000000..4d112b7
--- /dev/null
+++ b/zhi-admin-ui/src/api/monitor/logininfor.js
@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+// 查询登录日志列表
+export function list(query) {
+ return request({
+ url: '/monitor/logininfor/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除登录日志
+export function delLogininfor(infoId) {
+ return request({
+ url: '/monitor/logininfor/' + infoId,
+ method: 'delete'
+ })
+}
+
+// 解锁用户登录状态
+export function unlockLogininfor(userName) {
+ return request({
+ url: '/monitor/logininfor/unlock/' + userName,
+ method: 'get'
+ })
+}
+
+// 清空登录日志
+export function cleanLogininfor() {
+ return request({
+ url: '/monitor/logininfor/clean',
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/monitor/online.js b/zhi-admin-ui/src/api/monitor/online.js
new file mode 100644
index 0000000..bd22137
--- /dev/null
+++ b/zhi-admin-ui/src/api/monitor/online.js
@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 查询在线用户列表
+export function list(query) {
+ return request({
+ url: '/monitor/online/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 强退用户
+export function forceLogout(tokenId) {
+ return request({
+ url: '/monitor/online/' + tokenId,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/monitor/operlog.js b/zhi-admin-ui/src/api/monitor/operlog.js
new file mode 100644
index 0000000..a04bca8
--- /dev/null
+++ b/zhi-admin-ui/src/api/monitor/operlog.js
@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 查询操作日志列表
+export function list(query) {
+ return request({
+ url: '/monitor/operlog/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除操作日志
+export function delOperlog(operId) {
+ return request({
+ url: '/monitor/operlog/' + operId,
+ method: 'delete'
+ })
+}
+
+// 清空操作日志
+export function cleanOperlog() {
+ return request({
+ url: '/monitor/operlog/clean',
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/page/page.js b/zhi-admin-ui/src/api/page/page.js
new file mode 100644
index 0000000..3e0052b
--- /dev/null
+++ b/zhi-admin-ui/src/api/page/page.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询页面管理列表
+export function listPage(query) {
+ return request({
+ url: '/page/page/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询页面管理详细
+export function getPage(id) {
+ return request({
+ url: '/page/page/' + id,
+ method: 'get'
+ })
+}
+
+// 新增页面管理
+export function addPage(data) {
+ return request({
+ url: '/page/page',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改页面管理
+export function updatePage(data) {
+ return request({
+ url: '/page/page',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除页面管理
+export function delPage(id) {
+ return request({
+ url: '/page/page/' + id,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/photo/photo.js b/zhi-admin-ui/src/api/photo/photo.js
new file mode 100644
index 0000000..f3df85a
--- /dev/null
+++ b/zhi-admin-ui/src/api/photo/photo.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询照片管理列表
+export function listPhoto(query) {
+ return request({
+ url: '/photo/photo/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询照片管理详细
+export function getPhoto(id) {
+ return request({
+ url: '/photo/photo/' + id,
+ method: 'get'
+ })
+}
+
+// 新增照片管理
+export function addPhoto(data) {
+ return request({
+ url: '/photo/photo',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改照片管理
+export function updatePhoto(data) {
+ return request({
+ url: '/photo/photo',
+ method: 'put',
+ data: data
+ })
+}
+
+// 修改照片所属相册
+export function updatePhotoAlbum(data) {
+ return request({
+ url: '/photo/photo/album',
+ method: 'put',
+ data: data
+ })
+}
+
+
+// 删除照片管理
+export function delPhoto(id) {
+ return request({
+ url: '/photo/photo/' + id,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/system/config.js b/zhi-admin-ui/src/api/system/config.js
new file mode 100644
index 0000000..02f0cfc
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/config.js
@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+// 查询参数列表
+export function listConfig(query) {
+ return request({
+ url: '/system/config/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询参数详细
+export function getConfig(configId) {
+ return request({
+ url: '/system/config/' + configId,
+ method: 'get'
+ })
+}
+
+// 根据参数键名查询参数值
+export function getConfigKey(configKey) {
+ return request({
+ url: '/system/config/configKey/' + configKey,
+ method: 'get'
+ })
+}
+
+// 新增参数配置
+export function addConfig(data) {
+ return request({
+ url: '/system/config',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改参数配置
+export function updateConfig(data) {
+ return request({
+ url: '/system/config',
+ method: 'put',
+ data: data
+ })
+}
+
+// 修改参数配置
+export function updateConfigByKey(key, value) {
+ return request({
+ url: '/system/config/updateByKey',
+ method: 'put',
+ data: {
+ configKey: key,
+ configValue: value
+ }
+ })
+}
+
+// 删除参数配置
+export function delConfig(configId) {
+ return request({
+ url: '/system/config/' + configId,
+ method: 'delete'
+ })
+}
+
+// 刷新参数缓存
+export function refreshCache() {
+ return request({
+ url: '/system/config/refreshCache',
+ method: 'delete'
+ })
+}
+
diff --git a/zhi-admin-ui/src/api/system/dept.js b/zhi-admin-ui/src/api/system/dept.js
new file mode 100644
index 0000000..331c4b2
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/dept.js
@@ -0,0 +1,52 @@
+import request from '@/utils/request'
+
+// 查询部门列表
+export function listDept(query) {
+ return request({
+ url: '/system/dept/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询部门列表(排除节点)
+export function listDeptExcludeChild(deptId) {
+ return request({
+ url: '/system/dept/list/exclude/' + deptId,
+ method: 'get'
+ })
+}
+
+// 查询部门详细
+export function getDept(deptId) {
+ return request({
+ url: '/system/dept/' + deptId,
+ method: 'get'
+ })
+}
+
+// 新增部门
+export function addDept(data) {
+ return request({
+ url: '/system/dept',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改部门
+export function updateDept(data) {
+ return request({
+ url: '/system/dept',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除部门
+export function delDept(deptId) {
+ return request({
+ url: '/system/dept/' + deptId,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/system/dict/data.js b/zhi-admin-ui/src/api/system/dict/data.js
new file mode 100644
index 0000000..6c9eb79
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/dict/data.js
@@ -0,0 +1,52 @@
+import request from '@/utils/request'
+
+// 查询字典数据列表
+export function listData(query) {
+ return request({
+ url: '/system/dict/data/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询字典数据详细
+export function getData(dictCode) {
+ return request({
+ url: '/system/dict/data/' + dictCode,
+ method: 'get'
+ })
+}
+
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+ return request({
+ url: '/system/dict/data/type/' + dictType,
+ method: 'get'
+ })
+}
+
+// 新增字典数据
+export function addData(data) {
+ return request({
+ url: '/system/dict/data',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改字典数据
+export function updateData(data) {
+ return request({
+ url: '/system/dict/data',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除字典数据
+export function delData(dictCode) {
+ return request({
+ url: '/system/dict/data/' + dictCode,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/system/dict/type.js b/zhi-admin-ui/src/api/system/dict/type.js
new file mode 100644
index 0000000..a0254ba
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/dict/type.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询字典类型列表
+export function listType(query) {
+ return request({
+ url: '/system/dict/type/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询字典类型详细
+export function getType(dictId) {
+ return request({
+ url: '/system/dict/type/' + dictId,
+ method: 'get'
+ })
+}
+
+// 新增字典类型
+export function addType(data) {
+ return request({
+ url: '/system/dict/type',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改字典类型
+export function updateType(data) {
+ return request({
+ url: '/system/dict/type',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除字典类型
+export function delType(dictId) {
+ return request({
+ url: '/system/dict/type/' + dictId,
+ method: 'delete'
+ })
+}
+
+// 刷新字典缓存
+export function refreshCache() {
+ return request({
+ url: '/system/dict/type/refreshCache',
+ method: 'delete'
+ })
+}
+
+// 获取字典选择框列表
+export function optionselect() {
+ return request({
+ url: '/system/dict/type/optionselect',
+ method: 'get'
+ })
+}
diff --git a/zhi-admin-ui/src/api/system/menu.js b/zhi-admin-ui/src/api/system/menu.js
new file mode 100644
index 0000000..f6415c6
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/menu.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询菜单列表
+export function listMenu(query) {
+ return request({
+ url: '/system/menu/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询菜单详细
+export function getMenu(menuId) {
+ return request({
+ url: '/system/menu/' + menuId,
+ method: 'get'
+ })
+}
+
+// 查询菜单下拉树结构
+export function treeselect() {
+ return request({
+ url: '/system/menu/treeselect',
+ method: 'get'
+ })
+}
+
+// 根据角色ID查询菜单下拉树结构
+export function roleMenuTreeselect(roleId) {
+ return request({
+ url: '/system/menu/roleMenuTreeselect/' + roleId,
+ method: 'get'
+ })
+}
+
+// 新增菜单
+export function addMenu(data) {
+ return request({
+ url: '/system/menu',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改菜单
+export function updateMenu(data) {
+ return request({
+ url: '/system/menu',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除菜单
+export function delMenu(menuId) {
+ return request({
+ url: '/system/menu/' + menuId,
+ method: 'delete'
+ })
+}
\ No newline at end of file
diff --git a/zhi-admin-ui/src/api/system/notice.js b/zhi-admin-ui/src/api/system/notice.js
new file mode 100644
index 0000000..c274ea5
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/notice.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询公告列表
+export function listNotice(query) {
+ return request({
+ url: '/system/notice/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询公告详细
+export function getNotice(noticeId) {
+ return request({
+ url: '/system/notice/' + noticeId,
+ method: 'get'
+ })
+}
+
+// 新增公告
+export function addNotice(data) {
+ return request({
+ url: '/system/notice',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改公告
+export function updateNotice(data) {
+ return request({
+ url: '/system/notice',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除公告
+export function delNotice(noticeId) {
+ return request({
+ url: '/system/notice/' + noticeId,
+ method: 'delete'
+ })
+}
\ No newline at end of file
diff --git a/zhi-admin-ui/src/api/system/oss.js b/zhi-admin-ui/src/api/system/oss.js
new file mode 100644
index 0000000..7d80026
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/oss.js
@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+// 查询OSS对象存储列表
+export function listOss(query) {
+ return request({
+ url: '/system/oss/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询OSS对象基于id串
+export function listByIds(ossId) {
+ return request({
+ url: '/system/oss/listByIds/' + ossId,
+ method: 'get'
+ })
+}
+
+// 删除OSS对象存储
+export function delOss(ossId) {
+ return request({
+ url: '/system/oss/' + ossId,
+ method: 'delete'
+ })
+}
+
diff --git a/zhi-admin-ui/src/api/system/ossConfig.js b/zhi-admin-ui/src/api/system/ossConfig.js
new file mode 100644
index 0000000..f290762
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/ossConfig.js
@@ -0,0 +1,58 @@
+import request from '@/utils/request'
+
+// 查询对象存储配置列表
+export function listOssConfig(query) {
+ return request({
+ url: '/system/oss/config/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询对象存储配置详细
+export function getOssConfig(ossConfigId) {
+ return request({
+ url: '/system/oss/config/' + ossConfigId,
+ method: 'get'
+ })
+}
+
+// 新增对象存储配置
+export function addOssConfig(data) {
+ return request({
+ url: '/system/oss/config',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改对象存储配置
+export function updateOssConfig(data) {
+ return request({
+ url: '/system/oss/config',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除对象存储配置
+export function delOssConfig(ossConfigId) {
+ return request({
+ url: '/system/oss/config/' + ossConfigId,
+ method: 'delete'
+ })
+}
+
+// 对象存储状态修改
+export function changeOssConfigStatus(ossConfigId, status, configKey) {
+ const data = {
+ ossConfigId,
+ status,
+ configKey
+ }
+ return request({
+ url: '/system/oss/config/changeStatus',
+ method: 'put',
+ data: data
+ })
+}
diff --git a/zhi-admin-ui/src/api/system/post.js b/zhi-admin-ui/src/api/system/post.js
new file mode 100644
index 0000000..1a8e9ca
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/post.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询岗位列表
+export function listPost(query) {
+ return request({
+ url: '/system/post/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询岗位详细
+export function getPost(postId) {
+ return request({
+ url: '/system/post/' + postId,
+ method: 'get'
+ })
+}
+
+// 新增岗位
+export function addPost(data) {
+ return request({
+ url: '/system/post',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改岗位
+export function updatePost(data) {
+ return request({
+ url: '/system/post',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除岗位
+export function delPost(postId) {
+ return request({
+ url: '/system/post/' + postId,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/system/role.js b/zhi-admin-ui/src/api/system/role.js
new file mode 100644
index 0000000..f13e6f4
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/role.js
@@ -0,0 +1,119 @@
+import request from '@/utils/request'
+
+// 查询角色列表
+export function listRole(query) {
+ return request({
+ url: '/system/role/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询角色详细
+export function getRole(roleId) {
+ return request({
+ url: '/system/role/' + roleId,
+ method: 'get'
+ })
+}
+
+// 新增角色
+export function addRole(data) {
+ return request({
+ url: '/system/role',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改角色
+export function updateRole(data) {
+ return request({
+ url: '/system/role',
+ method: 'put',
+ data: data
+ })
+}
+
+// 角色数据权限
+export function dataScope(data) {
+ return request({
+ url: '/system/role/dataScope',
+ method: 'put',
+ data: data
+ })
+}
+
+// 角色状态修改
+export function changeRoleStatus(roleId, status) {
+ const data = {
+ roleId,
+ status
+ }
+ return request({
+ url: '/system/role/changeStatus',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除角色
+export function delRole(roleId) {
+ return request({
+ url: '/system/role/' + roleId,
+ method: 'delete'
+ })
+}
+
+// 查询角色已授权用户列表
+export function allocatedUserList(query) {
+ return request({
+ url: '/system/role/authUser/allocatedList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询角色未授权用户列表
+export function unallocatedUserList(query) {
+ return request({
+ url: '/system/role/authUser/unallocatedList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 取消用户授权角色
+export function authUserCancel(data) {
+ return request({
+ url: '/system/role/authUser/cancel',
+ method: 'put',
+ data: data
+ })
+}
+
+// 批量取消用户授权角色
+export function authUserCancelAll(data) {
+ return request({
+ url: '/system/role/authUser/cancelAll',
+ method: 'put',
+ params: data
+ })
+}
+
+// 授权用户选择
+export function authUserSelectAll(data) {
+ return request({
+ url: '/system/role/authUser/selectAll',
+ method: 'put',
+ params: data
+ })
+}
+
+// 根据角色ID查询部门树结构
+export function deptTreeSelect(roleId) {
+ return request({
+ url: '/system/role/deptTree/' + roleId,
+ method: 'get'
+ })
+}
diff --git a/zhi-admin-ui/src/api/system/user.js b/zhi-admin-ui/src/api/system/user.js
new file mode 100644
index 0000000..f2f76ef
--- /dev/null
+++ b/zhi-admin-ui/src/api/system/user.js
@@ -0,0 +1,135 @@
+import request from '@/utils/request'
+import { parseStrEmpty } from "@/utils/ruoyi";
+
+// 查询用户列表
+export function listUser(query) {
+ return request({
+ url: '/system/user/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询用户详细
+export function getUser(userId) {
+ return request({
+ url: '/system/user/' + parseStrEmpty(userId),
+ method: 'get'
+ })
+}
+
+// 新增用户
+export function addUser(data) {
+ return request({
+ url: '/system/user',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改用户
+export function updateUser(data) {
+ return request({
+ url: '/system/user',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除用户
+export function delUser(userId) {
+ return request({
+ url: '/system/user/' + userId,
+ method: 'delete'
+ })
+}
+
+// 用户密码重置
+export function resetUserPwd(userId, password) {
+ const data = {
+ userId,
+ password
+ }
+ return request({
+ url: '/system/user/resetPwd',
+ method: 'put',
+ data: data
+ })
+}
+
+// 用户状态修改
+export function changeUserStatus(userId, status) {
+ const data = {
+ userId,
+ status
+ }
+ return request({
+ url: '/system/user/changeStatus',
+ method: 'put',
+ data: data
+ })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+ return request({
+ url: '/system/user/profile',
+ method: 'get'
+ })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+ return request({
+ url: '/system/user/profile',
+ method: 'put',
+ data: data
+ })
+}
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+ const data = {
+ oldPassword,
+ newPassword
+ }
+ return request({
+ url: '/system/user/profile/updatePwd',
+ method: 'put',
+ params: data
+ })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+ return request({
+ url: '/system/user/profile/avatar',
+ method: 'post',
+ data: data
+ })
+}
+
+// 查询授权角色
+export function getAuthRole(userId) {
+ return request({
+ url: '/system/user/authRole/' + userId,
+ method: 'get'
+ })
+}
+
+// 保存授权角色
+export function updateAuthRole(data) {
+ return request({
+ url: '/system/user/authRole',
+ method: 'put',
+ params: data
+ })
+}
+
+// 查询部门下拉树结构
+export function deptTreeSelect() {
+ return request({
+ url: '/system/user/deptTree',
+ method: 'get'
+ })
+}
diff --git a/zhi-admin-ui/src/api/tag/tag.js b/zhi-admin-ui/src/api/tag/tag.js
new file mode 100644
index 0000000..4e0aeba
--- /dev/null
+++ b/zhi-admin-ui/src/api/tag/tag.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询标签管理列表
+export function listTag(query) {
+ return request({
+ url: '/tag/tag/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询标签管理详细
+export function getTag(id) {
+ return request({
+ url: '/tag/tag/' + id,
+ method: 'get'
+ })
+}
+
+// 新增标签管理
+export function addTag(data) {
+ return request({
+ url: '/tag/tag',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改标签管理
+export function updateTag(data) {
+ return request({
+ url: '/tag/tag',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除标签管理
+export function delTag(id) {
+ return request({
+ url: '/tag/tag/' + id,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/talk/talk.js b/zhi-admin-ui/src/api/talk/talk.js
new file mode 100644
index 0000000..d02f959
--- /dev/null
+++ b/zhi-admin-ui/src/api/talk/talk.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询说说管理列表
+export function listTalk(query) {
+ return request({
+ url: '/talk/talk/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询说说管理详细
+export function getTalk(id) {
+ return request({
+ url: '/talk/talk/' + id,
+ method: 'get'
+ })
+}
+
+// 新增说说管理
+export function addTalk(data) {
+ return request({
+ url: '/talk/talk',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改说说管理
+export function updateTalk(data) {
+ return request({
+ url: '/talk/talk',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除说说管理
+export function delTalk(id) {
+ return request({
+ url: '/talk/talk/' + id,
+ method: 'delete'
+ })
+}
diff --git a/zhi-admin-ui/src/api/tool/gen.js b/zhi-admin-ui/src/api/tool/gen.js
new file mode 100644
index 0000000..65ddfea
--- /dev/null
+++ b/zhi-admin-ui/src/api/tool/gen.js
@@ -0,0 +1,86 @@
+import request from '@/utils/request'
+
+// 查询生成表数据
+export function listTable(query) {
+ return request({
+ headers: { 'datasource': localStorage.getItem("dataName") },
+ url: '/tool/gen/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询db数据库列表
+export function listDbTable(query) {
+ return request({
+ headers: { 'datasource': localStorage.getItem("dataName") },
+ url: '/tool/gen/db/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询表详细信息
+export function getGenTable(tableId) {
+ return request({
+ headers: { 'datasource': localStorage.getItem("dataName") },
+ url: '/tool/gen/' + tableId,
+ method: 'get'
+ })
+}
+
+// 修改代码生成信息
+export function updateGenTable(data) {
+ return request({
+ headers: { 'datasource': localStorage.getItem("dataName") },
+ url: '/tool/gen',
+ method: 'put',
+ data: data
+ })
+}
+
+// 导入表
+export function importTable(data) {
+ return request({
+ headers: { 'datasource': localStorage.getItem("dataName") },
+ url: '/tool/gen/importTable',
+ method: 'post',
+ params: data
+ })
+}
+
+// 预览生成代码
+export function previewTable(tableId) {
+ return request({
+ headers: { 'datasource': localStorage.getItem("dataName") },
+ url: '/tool/gen/preview/' + tableId,
+ method: 'get'
+ })
+}
+
+// 删除表数据
+export function delTable(tableId) {
+ return request({
+ headers: { 'datasource': localStorage.getItem("dataName") },
+ url: '/tool/gen/' + tableId,
+ method: 'delete'
+ })
+}
+
+// 生成代码(自定义路径)
+export function genCode(tableName) {
+ return request({
+ headers: { 'datasource': localStorage.getItem("dataName") },
+ url: '/tool/gen/genCode/' + tableName,
+ method: 'get'
+ })
+}
+
+// 同步数据库
+export function synchDb(tableName) {
+ return request({
+ headers: { 'datasource': localStorage.getItem("dataName") },
+ url: '/tool/gen/synchDb/' + tableName,
+ method: 'get'
+ })
+}
diff --git a/zhi-admin-ui/src/api/website/website.js b/zhi-admin-ui/src/api/website/website.js
new file mode 100644
index 0000000..566503b
--- /dev/null
+++ b/zhi-admin-ui/src/api/website/website.js
@@ -0,0 +1,20 @@
+import request from '@/utils/request'
+
+// 查询标签管理列表
+export function getWebsiteConfig(query) {
+ return request({
+ url: '/website/admin/config',
+ method: 'get',
+ params: query
+ })
+}
+
+
+export function updateWebsiteConfig(data) {
+ return request({
+ url: 'website/config',
+ method: 'put',
+ data: data
+ })
+
+}
diff --git a/zhi-admin-ui/src/assets/401_images/401.gif b/zhi-admin-ui/src/assets/401_images/401.gif
new file mode 100644
index 0000000..cd6e0d9
Binary files /dev/null and b/zhi-admin-ui/src/assets/401_images/401.gif differ
diff --git a/zhi-admin-ui/src/assets/404_images/404.png b/zhi-admin-ui/src/assets/404_images/404.png
new file mode 100644
index 0000000..3d8e230
Binary files /dev/null and b/zhi-admin-ui/src/assets/404_images/404.png differ
diff --git a/zhi-admin-ui/src/assets/404_images/404_cloud.png b/zhi-admin-ui/src/assets/404_images/404_cloud.png
new file mode 100644
index 0000000..c6281d0
Binary files /dev/null and b/zhi-admin-ui/src/assets/404_images/404_cloud.png differ
diff --git a/zhi-admin-ui/src/assets/icons/index.js b/zhi-admin-ui/src/assets/icons/index.js
new file mode 100644
index 0000000..2c6b309
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/index.js
@@ -0,0 +1,9 @@
+import Vue from 'vue'
+import SvgIcon from '@/components/SvgIcon'// svg component
+
+// register globally
+Vue.component('svg-icon', SvgIcon)
+
+const req = require.context('./svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys().map(requireContext)
+requireAll(req)
diff --git a/zhi-admin-ui/src/assets/icons/svg/404.svg b/zhi-admin-ui/src/assets/icons/svg/404.svg
new file mode 100644
index 0000000..6df5019
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/404.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/bug.svg b/zhi-admin-ui/src/assets/icons/svg/bug.svg
new file mode 100644
index 0000000..05a150d
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/bug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/build.svg b/zhi-admin-ui/src/assets/icons/svg/build.svg
new file mode 100644
index 0000000..97c4688
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/build.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/button.svg b/zhi-admin-ui/src/assets/icons/svg/button.svg
new file mode 100644
index 0000000..904fddc
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/cascader.svg b/zhi-admin-ui/src/assets/icons/svg/cascader.svg
new file mode 100644
index 0000000..e256024
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/cascader.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/chart.svg b/zhi-admin-ui/src/assets/icons/svg/chart.svg
new file mode 100644
index 0000000..27728fb
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/chart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/checkbox.svg b/zhi-admin-ui/src/assets/icons/svg/checkbox.svg
new file mode 100644
index 0000000..013fd3a
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/checkbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/clipboard.svg b/zhi-admin-ui/src/assets/icons/svg/clipboard.svg
new file mode 100644
index 0000000..90923ff
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/clipboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/code.svg b/zhi-admin-ui/src/assets/icons/svg/code.svg
new file mode 100644
index 0000000..5f9c5ab
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/color.svg b/zhi-admin-ui/src/assets/icons/svg/color.svg
new file mode 100644
index 0000000..44a81aa
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/color.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/component.svg b/zhi-admin-ui/src/assets/icons/svg/component.svg
new file mode 100644
index 0000000..29c3458
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/component.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/dashboard.svg b/zhi-admin-ui/src/assets/icons/svg/dashboard.svg
new file mode 100644
index 0000000..5317d37
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/dashboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/date-range.svg b/zhi-admin-ui/src/assets/icons/svg/date-range.svg
new file mode 100644
index 0000000..fda571e
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/date-range.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/date.svg b/zhi-admin-ui/src/assets/icons/svg/date.svg
new file mode 100644
index 0000000..52dc73e
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/date.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/dict.svg b/zhi-admin-ui/src/assets/icons/svg/dict.svg
new file mode 100644
index 0000000..4849377
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/dict.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/documentation.svg b/zhi-admin-ui/src/assets/icons/svg/documentation.svg
new file mode 100644
index 0000000..7043122
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/documentation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/download.svg b/zhi-admin-ui/src/assets/icons/svg/download.svg
new file mode 100644
index 0000000..c896951
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/drag.svg b/zhi-admin-ui/src/assets/icons/svg/drag.svg
new file mode 100644
index 0000000..4185d3c
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/drag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/druid.svg b/zhi-admin-ui/src/assets/icons/svg/druid.svg
new file mode 100644
index 0000000..a2b4b4e
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/druid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/edit.svg b/zhi-admin-ui/src/assets/icons/svg/edit.svg
new file mode 100644
index 0000000..d26101f
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/edit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/education.svg b/zhi-admin-ui/src/assets/icons/svg/education.svg
new file mode 100644
index 0000000..7bfb01d
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/education.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/email.svg b/zhi-admin-ui/src/assets/icons/svg/email.svg
new file mode 100644
index 0000000..74d25e2
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/email.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/example.svg b/zhi-admin-ui/src/assets/icons/svg/example.svg
new file mode 100644
index 0000000..46f42b5
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/example.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/excel.svg b/zhi-admin-ui/src/assets/icons/svg/excel.svg
new file mode 100644
index 0000000..74d97b8
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/excel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/exit-fullscreen.svg b/zhi-admin-ui/src/assets/icons/svg/exit-fullscreen.svg
new file mode 100644
index 0000000..485c128
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/exit-fullscreen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/eye-open.svg b/zhi-admin-ui/src/assets/icons/svg/eye-open.svg
new file mode 100644
index 0000000..88dcc98
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/eye-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/eye.svg b/zhi-admin-ui/src/assets/icons/svg/eye.svg
new file mode 100644
index 0000000..16ed2d8
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/eye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/form.svg b/zhi-admin-ui/src/assets/icons/svg/form.svg
new file mode 100644
index 0000000..dcbaa18
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/form.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/fullscreen.svg b/zhi-admin-ui/src/assets/icons/svg/fullscreen.svg
new file mode 100644
index 0000000..0e86b6f
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/fullscreen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/github.svg b/zhi-admin-ui/src/assets/icons/svg/github.svg
new file mode 100644
index 0000000..db0a0d4
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/github.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/guide.svg b/zhi-admin-ui/src/assets/icons/svg/guide.svg
new file mode 100644
index 0000000..b271001
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/guide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/icon.svg b/zhi-admin-ui/src/assets/icons/svg/icon.svg
new file mode 100644
index 0000000..82be8ee
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/input.svg b/zhi-admin-ui/src/assets/icons/svg/input.svg
new file mode 100644
index 0000000..ab91381
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/input.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/international.svg b/zhi-admin-ui/src/assets/icons/svg/international.svg
new file mode 100644
index 0000000..e9b56ee
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/international.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/job.svg b/zhi-admin-ui/src/assets/icons/svg/job.svg
new file mode 100644
index 0000000..2a93a25
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/job.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/language.svg b/zhi-admin-ui/src/assets/icons/svg/language.svg
new file mode 100644
index 0000000..0082b57
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/language.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/link.svg b/zhi-admin-ui/src/assets/icons/svg/link.svg
new file mode 100644
index 0000000..48197ba
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/link.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/list.svg b/zhi-admin-ui/src/assets/icons/svg/list.svg
new file mode 100644
index 0000000..20259ed
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/lock.svg b/zhi-admin-ui/src/assets/icons/svg/lock.svg
new file mode 100644
index 0000000..74fee54
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/log.svg b/zhi-admin-ui/src/assets/icons/svg/log.svg
new file mode 100644
index 0000000..d879d33
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/log.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/logininfor.svg b/zhi-admin-ui/src/assets/icons/svg/logininfor.svg
new file mode 100644
index 0000000..267f844
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/logininfor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/message.svg b/zhi-admin-ui/src/assets/icons/svg/message.svg
new file mode 100644
index 0000000..14ca817
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/money.svg b/zhi-admin-ui/src/assets/icons/svg/money.svg
new file mode 100644
index 0000000..c1580de
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/money.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/monitor.svg b/zhi-admin-ui/src/assets/icons/svg/monitor.svg
new file mode 100644
index 0000000..bc308cb
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/monitor.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/nested.svg b/zhi-admin-ui/src/assets/icons/svg/nested.svg
new file mode 100644
index 0000000..06713a8
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/nested.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/number.svg b/zhi-admin-ui/src/assets/icons/svg/number.svg
new file mode 100644
index 0000000..ad5ce9a
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/number.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/online.svg b/zhi-admin-ui/src/assets/icons/svg/online.svg
new file mode 100644
index 0000000..330a202
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/online.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/password.svg b/zhi-admin-ui/src/assets/icons/svg/password.svg
new file mode 100644
index 0000000..6c64def
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/password.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/pdf.svg b/zhi-admin-ui/src/assets/icons/svg/pdf.svg
new file mode 100644
index 0000000..957aa0c
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/pdf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/people.svg b/zhi-admin-ui/src/assets/icons/svg/people.svg
new file mode 100644
index 0000000..2bd54ae
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/people.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/peoples.svg b/zhi-admin-ui/src/assets/icons/svg/peoples.svg
new file mode 100644
index 0000000..aab852e
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/peoples.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/phone.svg b/zhi-admin-ui/src/assets/icons/svg/phone.svg
new file mode 100644
index 0000000..ab8e8c4
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/phone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/post.svg b/zhi-admin-ui/src/assets/icons/svg/post.svg
new file mode 100644
index 0000000..2922c61
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/post.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/qq.svg b/zhi-admin-ui/src/assets/icons/svg/qq.svg
new file mode 100644
index 0000000..ee13d4e
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/qq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/question.svg b/zhi-admin-ui/src/assets/icons/svg/question.svg
new file mode 100644
index 0000000..cf75bd4
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/radio.svg b/zhi-admin-ui/src/assets/icons/svg/radio.svg
new file mode 100644
index 0000000..0cde345
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/radio.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/rate.svg b/zhi-admin-ui/src/assets/icons/svg/rate.svg
new file mode 100644
index 0000000..aa3b14d
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/rate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/redis-list.svg b/zhi-admin-ui/src/assets/icons/svg/redis-list.svg
new file mode 100644
index 0000000..98a15b2
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/redis-list.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/redis.svg b/zhi-admin-ui/src/assets/icons/svg/redis.svg
new file mode 100644
index 0000000..2f1d62d
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/redis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/row.svg b/zhi-admin-ui/src/assets/icons/svg/row.svg
new file mode 100644
index 0000000..0780992
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/row.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/search.svg b/zhi-admin-ui/src/assets/icons/svg/search.svg
new file mode 100644
index 0000000..84233dd
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/select.svg b/zhi-admin-ui/src/assets/icons/svg/select.svg
new file mode 100644
index 0000000..d628382
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/select.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/server.svg b/zhi-admin-ui/src/assets/icons/svg/server.svg
new file mode 100644
index 0000000..eb287e3
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/server.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/shopping.svg b/zhi-admin-ui/src/assets/icons/svg/shopping.svg
new file mode 100644
index 0000000..87513e7
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/shopping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/size.svg b/zhi-admin-ui/src/assets/icons/svg/size.svg
new file mode 100644
index 0000000..ddb25b8
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/size.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/skill.svg b/zhi-admin-ui/src/assets/icons/svg/skill.svg
new file mode 100644
index 0000000..a3b7312
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/skill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/slider.svg b/zhi-admin-ui/src/assets/icons/svg/slider.svg
new file mode 100644
index 0000000..fbe4f39
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/slider.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/star.svg b/zhi-admin-ui/src/assets/icons/svg/star.svg
new file mode 100644
index 0000000..6cf86e6
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/swagger.svg b/zhi-admin-ui/src/assets/icons/svg/swagger.svg
new file mode 100644
index 0000000..05d4e7b
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/swagger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/switch.svg b/zhi-admin-ui/src/assets/icons/svg/switch.svg
new file mode 100644
index 0000000..0ba61e3
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/switch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/system.svg b/zhi-admin-ui/src/assets/icons/svg/system.svg
new file mode 100644
index 0000000..5992593
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/system.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/tab.svg b/zhi-admin-ui/src/assets/icons/svg/tab.svg
new file mode 100644
index 0000000..b4b48e4
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/table.svg b/zhi-admin-ui/src/assets/icons/svg/table.svg
new file mode 100644
index 0000000..0e3dc9d
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/table.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/textarea.svg b/zhi-admin-ui/src/assets/icons/svg/textarea.svg
new file mode 100644
index 0000000..2709f29
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/textarea.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/theme.svg b/zhi-admin-ui/src/assets/icons/svg/theme.svg
new file mode 100644
index 0000000..5982a2f
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/theme.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/time-range.svg b/zhi-admin-ui/src/assets/icons/svg/time-range.svg
new file mode 100644
index 0000000..13c1202
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/time-range.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/time.svg b/zhi-admin-ui/src/assets/icons/svg/time.svg
new file mode 100644
index 0000000..b376e32
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/tool.svg b/zhi-admin-ui/src/assets/icons/svg/tool.svg
new file mode 100644
index 0000000..48e0e35
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/tool.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/tree-table.svg b/zhi-admin-ui/src/assets/icons/svg/tree-table.svg
new file mode 100644
index 0000000..8aafdb8
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/tree-table.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/tree.svg b/zhi-admin-ui/src/assets/icons/svg/tree.svg
new file mode 100644
index 0000000..dd4b7dd
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/upload.svg b/zhi-admin-ui/src/assets/icons/svg/upload.svg
new file mode 100644
index 0000000..bae49c0
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/upload.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/user.svg b/zhi-admin-ui/src/assets/icons/svg/user.svg
new file mode 100644
index 0000000..0ba0716
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/validCode.svg b/zhi-admin-ui/src/assets/icons/svg/validCode.svg
new file mode 100644
index 0000000..cfb1021
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/validCode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/wechat.svg b/zhi-admin-ui/src/assets/icons/svg/wechat.svg
new file mode 100644
index 0000000..c586e55
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/wechat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svg/zip.svg b/zhi-admin-ui/src/assets/icons/svg/zip.svg
new file mode 100644
index 0000000..f806fc4
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svg/zip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/icons/svgo.yml b/zhi-admin-ui/src/assets/icons/svgo.yml
new file mode 100644
index 0000000..d11906a
--- /dev/null
+++ b/zhi-admin-ui/src/assets/icons/svgo.yml
@@ -0,0 +1,22 @@
+# replace default config
+
+# multipass: true
+# full: true
+
+plugins:
+
+ # - name
+ #
+ # or:
+ # - name: false
+ # - name: true
+ #
+ # or:
+ # - name:
+ # param1: 1
+ # param2: 2
+
+- removeAttrs:
+ attrs:
+ - 'fill'
+ - 'fill-rule'
diff --git a/zhi-admin-ui/src/assets/images/dark.svg b/zhi-admin-ui/src/assets/images/dark.svg
new file mode 100644
index 0000000..f646bd7
--- /dev/null
+++ b/zhi-admin-ui/src/assets/images/dark.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/images/light.svg b/zhi-admin-ui/src/assets/images/light.svg
new file mode 100644
index 0000000..ab7cc08
--- /dev/null
+++ b/zhi-admin-ui/src/assets/images/light.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/images/login-background.jpg b/zhi-admin-ui/src/assets/images/login-background.jpg
new file mode 100644
index 0000000..333eb33
Binary files /dev/null and b/zhi-admin-ui/src/assets/images/login-background.jpg differ
diff --git a/zhi-admin-ui/src/assets/images/profile.jpg b/zhi-admin-ui/src/assets/images/profile.jpg
new file mode 100644
index 0000000..af2b032
Binary files /dev/null and b/zhi-admin-ui/src/assets/images/profile.jpg differ
diff --git a/zhi-admin-ui/src/assets/js/china.js b/zhi-admin-ui/src/assets/js/china.js
new file mode 100644
index 0000000..0a58c96
--- /dev/null
+++ b/zhi-admin-ui/src/assets/js/china.js
@@ -0,0 +1,792 @@
+/* eslint-disable no-undef */
+(function(root, factory) {
+ if (typeof define === "function" && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(["exports", "echarts"], factory);
+ } else if (
+ typeof exports === "object" &&
+ typeof exports.nodeName !== "string"
+ ) {
+ // CommonJS
+ factory(exports, require("echarts"));
+ } else {
+ // Browser globals
+ factory({}, root.echarts);
+ }
+})(this, function(exports, echarts) {
+ var log = function(msg) {
+ if (typeof console !== "undefined") {
+ console && console.error && console.error(msg);
+ }
+ };
+ if (!echarts) {
+ log("ECharts is not Loaded");
+ return;
+ }
+ if (!echarts.registerMap) {
+ log("ECharts Map is not loaded");
+ return;
+ }
+ echarts.registerMap("china", {
+ type: "FeatureCollection",
+ features: [
+ {
+ id: "710000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@°Ü¯Û"],
+ [
+ "@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚänÜƤɊĂǀĆĴĤNJŨxĚĮǂƺòƌâÔ®ĮXŦţƸZûÐƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ¿@ăƑ¥ĘWǬÏĶŁâ"
+ ],
+ ["@@\\p|WoYG¿¥Ij@¢"],
+ ["@@
¡@V^RqBbAnTXeRz¤L«³I"],
+ ["@@ÆEEkWqë @"],
+ ["@@fced"]
+ ],
+ encodeOffsets: [
+ [[122886, 24033]],
+ [[123335, 22980]],
+ [[122375, 24193]],
+ [[122518, 24117]],
+ [[124427, 22618]],
+ [[124862, 26043]]
+ ]
+ },
+ properties: { cp: [121.509062, 25.044332], name: "台湾", childNum: 6 }
+ },
+ {
+ id: "130000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@o~Z]ªrºc_ħ²G¼s`jΟnüsÂłNX_M`ǽÓnUK
Ĝēs¤©yrý§uģcJe"],
+ ["@@U`Ts¿mÂ"],
+ [
+ "@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiñÖ`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒQgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ džiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°
N«úmH¯âDùyŜŲIÄuШD¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu
{Z}Ö@U´
ʚLg®¯Oı°Ãw ^VbÉsmA
ê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅna@³@ďyýIĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«P˵EFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅaVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MðoťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœKUFyƝ
īÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥ÍpDž¡KąÅkĝęěhq}HyÃ]¹ǧ£
Í÷¿qᵧg¤o^á¾ZE¤i`ij{nOl»WÝĔįhgF[¿¡ßkOüš_ūiDZàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"
+ ]
+ ],
+ encodeOffsets: [
+ [[119712, 40641]],
+ [[121616, 39981]],
+ [[116462, 37237]]
+ ]
+ },
+ properties: { cp: [114.502461, 38.045474], name: "河北", childNum: 3 }
+ },
+ {
+ id: "140000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@ÞĩÒSra}ÁyWix±Üe´lèßÓǏokćiµVZģ¡coTS˹ĪmnÕńehZg{gtwªpXaĚThȑp{¶Eh®RćƑP¿£Pmc¸mQÝWďȥoÅîɡųAďä³aÏJ½¥PGąSM
EÅruµéYÓŌ_dĒCoȵ]¯_²ÕjāK~©ÅØ^ÔkïçămÏk]±cݯÑÃmQÍ~_apm
~ç¡qu{JÅŧ·Ls}EyÁÆcI{¤IiCfUcƌÃp§]ě«vD@¡SÀµMÅwuYY¡DbÑc¡h×]nkoQdaMç~eDÛtT©±@¥ù@É¡ZcW|WqOJmĩl«ħşvOÓ«IqăV¥D[mI~Ó¢cehiÍ]Ɠ~ĥqX·eƷn±}v[ěďŕ]_œ`¹§ÕōIo©bs^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs×¥ŅxÊdÒ{ºvĴÎêÌɊ²¶ü¨|ÞƸµȲLLúÉƎ¤ϊęĔV`_bªS^|dzY|dz¥pZbÆ£¶ÒK}tĦÔņƠPYznÍvX¶Ěn ĠÔzý¦ª÷ÑĸÙUȌ¸dòÜJð´ìúNM¬XZ´¤ŊǸ_tldI{¦ƀðĠȤ¥NehXnYGR° ƬDj¬¸|CĞKqºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBÊTŸʂōĖĴŞȀÆÿȄlŤĒötνî¼ĨXh|ªM¤Ðz"
+ ],
+ encodeOffsets: [[116874, 41716]]
+ },
+ properties: { cp: [112.549248, 37.857014], name: "山西", childNum: 1 }
+ },
+ {
+ id: "150000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ [
+ "@@Č^â£ĂhĖMÈÄw\\fŦ°W ¢¾luŸDw\\̀ʉÌÛM
Ā[bÓEn}¶Vc
ês¯PqFB
|S³C|kñHdiÄ¥sʼnÅ
PóÑÑE^ÅPpy_YtShQ·aHwsOnʼnÃs©iqjUSiº]ïW«gW¡ARëśijĘ
ů`çõh]y»ǃǛҤxÒm~zf}pf|ÜroÈzrKÈĵSƧżĠu¦ö"
+ ],
+ [
+ "@@sKC
GS|úþXgp{ÁX¿ć{ƱȏñZáĔyoÁhA}ŅĆfdʼn_¹Y°ėǩÑ¡H¯¶oMQqð¡Ë|Ñ`ƭŁX½·óÛxğįÅcQs«tȋDžFù^it«Č¯[hAi©á¥ÇĚ×l|¹y¯YȵƓñǙµïċĻ|Düȭ¶¡oŽäÕG\\ÄT¿Òõr¯LguÏYęRƩɷŌO\\İТæ^Ŋ IJȶȆbÜGĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľ]ėl¥ËĭûÁėéV©±ćn©ȇÍq¯½YÃÔʼnÉNÑÅÝy¹NqáʅDǡËñƁYÅy̱os§ȋµʽǘǏƬɱàưN¢ƔÊuľýľώȪƺɂļxZĈ}ÌʼnŪĺœĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~ǼȳÐUfdIxÿ\\G zâɏÙOº·pqy£@qþ@Ǟ˽IBäƣzsÂZÁàĻdñ°ŕzéØűzșCìDȐĴĺf®Àľưø@ɜÖÞKĊŇƄ§͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФÔ¤ƌĞ̪Qʤ´¼mȠJˀƲÀɠmǐnǔĎȆÞǠN~ʢĜ¶ƌĆĘźʆȬ˪ĚĒ¸ĞGȖƴƀj`ĢçĶāàŃºēĢĖćYÀŎüôQÐÂŎŞdžŞêƖoˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^ªƂ`ªt¾äƚêĦĀ¼ÐĔǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDÄ|ø˂˜ƮЬɚwɲFjĔ²Äw°dždÀÉ_ĸdîàŎjÊêTЪŌŜWÈ|tqĢUB~´°ÎFCU¼pĀēƄN¦¾O¶łKĊOjĚj´ĜYp{¦SĚÍ\\TתV÷Ší¨ÅDK°ßtŇĔK¨ǵÂcḷ̌ĚǣȄĽFlġUĵŇȣFʉɁMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFxúQEr´Wrh¤Ɛ \\talĈDJÜ|[Pll̚¸ƎGú´P¬W¦^¦H]prRn|or¾wLVnÇIujkmon£cX^Bh`¥V¦U¤¸}xRj[^xN[~ªxQ[`ªHÆÂExx^wN¶Ê|¨ìMrdYpoRzNyÀDs~bcfÌ`L¾n|¾T°c¨È¢ar¤`[|òDŞĔöxElÖdHÀI`Ď\\Àì~ÆR¼tf¦^¢ķ¶eÐÚMptgjɡČÅyġLûŇV®ÄÈƀĎ°P|ªVVªj¬ĚÒêp¬E|ŬÂc|ÀtƐK f{ĘFĒƌXƲąo½Ę\\¥o}Ûu£çkX{uĩ«āíÓUŅßŢqŤ¥lyň[oi{¦LńðFȪȖĒL¿Ìf£K£ʺoqNwğc`uetOj×°KJ±qÆġmĚŗos¬
qehqsuH{¸kH¡
ÊRǪÇƌbȆ¢´äÜ¢NìÉʖ¦â©Ż؛Ç@Vu»Aylßí¹ĵê
ÝlISò³C¹Ìâ²i¶Ìoú^H²CǜңDŽ z¼g^èöŰ_IJĕê}gÁnUI«m
]jvV¼euhwqAaW_µj
»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáGOUÛOB±XkŹ£k|e]olkVͼÕqtaÏõjgÁ£§U^RLËnX°ÇBz^~wfvypV ¯ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyxþp]ÉvïèvƀnÂĴÖ@V~Ĉ³MEĸÅĖtējyÄDXÄxGQuv_i¦aBçw˛wD©{tāmQ{EJ§KPśƘƿ¥@sCTÉ}ɃwƇy±gÑ}T[÷kÐ禫
SÒ¥¸ëBX½HáŵÀğtSÝÂa[ƣ°¯¦Pï¡]£ġÒk®G²èQ°óMq}EóƐÇ\\@áügQÍu¥FTÕ¿Jû]|mvāÎYua^WoÀa·ząÒot׶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶¿A[¡{d×uQAMxVvMOmăl«ct[wº_ÇÊjb£ĦS_éQZ_lwgOiýe`YYLq§IÁdz£ÙË[ÕªuƏ³ÍTs·bÁĽäė[b[ŗfãcn¥îC¿÷µ[ŏÀQōĉm¿Á^£mJVmL[{Ï_£F¥Ö{ŹA}
×Wu©ÅaųijƳhB{·TQqÙIķËZđ©Yc|M¡
LeVUóK_QWk_ĥ¿ãZ»X\\ĴuUèlG®ěłTĠğDŃOrÍdÆÍz]±
ŭ©Å]ÅÐ}UË¥©TċïxgckfWgi\\ÏĒ¥HkµEë{»ÏetcG±ahUiñiWsɁ·cCÕk]wȑ|ća}w
VaĚá G°ùnM¬¯{ÈÐÆA¥ÄêJxÙ¢hP¢ÛºµwWOóFÁz^ÀŗÎú´§¢T¤ǻƺSėǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇqZñiñC³ª
»E`¨åXēÕqÉû[l}ç@čƘóO¿¡FUsAʽīccocÇS}£IS~ălkĩXçmĈ
ŀÐoÐdxÒuL^T{r@¢ÍĝKén£kQyÅõËXŷƏL§~}kq»IHėDžjĝ»ÑÞoå°qTt|r©ÏS¯·eŨĕx«È[eM¿yupN~¹ÏyN£{©għWí»Í¾səšDž_ÃĀɗ±ąijĉʍŌŷSÉA±åǥɋ@ë£R©ąP©}ĹªƏj¹erLDĝ·{i«ƫC£µ"
+ ]
+ ],
+ encodeOffsets: [[[127444, 52594]], [[113793, 40312]]]
+ },
+ properties: { cp: [111.670801, 40.818311], name: "内蒙古", childNum: 2 }
+ },
+ {
+ id: "210000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@L@@sa"],
+ ["@@MnNm"],
+ ["@@dc"],
+ ["@@eÀC@b"],
+ ["@@f
XwkbrÄ`qg"],
+ ["@@^jtWQ"],
+ ["@@~ Y]c"],
+ ["@@G`ĔN^_¿ZÃM"],
+ ["@@iX¶BY"],
+ ["@@YZ"],
+ ["@@L_{Epf"],
+ ["@@^WqCT\\"],
+ ["@@\\[§t|¤_"],
+ ["@@m`n_"],
+ ["@@Ïxnj{q_×^Giip"],
+ [
+ "@@@é^BntaÊU]x ¯ÄPIJ°hʙK³VÕ@Y~|EvĹsǦL^pòŸÒG Ël]xxÄ_fT¤Ď¤cPC¨¸TVjbgH²sdÎdHt`B²¬GJję¶[ÐhjeXdlwhðSȦªVÊÏÆZÆŶ®²^ÎyÅÎcPqńĚDMħĜŁHkçvV[ij¼WYÀäĦ`XlR`ôLUVfK¢{NZdĒªYĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~źB|¦ÕE¤Ð`\\|KUnnI]¤ÀÂĊnŎR®Ő¿¶\\ÀøíDm¦ÎbŨabaĘ\\ľã¸atÎSƐ´©v\\ÖÚÌǴ¤Â¨JKrZ_ZfjþhPkx`YRIjJcVf~sCN¤ EhæmsHy¨SðÑÌ\\\\ĐRZk°IS§fqŒßýáĞÙÉÖ[^¯ǤŲê´\\¦¬ĆPM¯£»uïpùzExanµyoluqe¦W^£ÊL}ñrkqWňûPUP¡ôJoo·U}£[·¨@XĸDXmÛݺGUCÁª½{íĂ^cjk¶Ã[q¤LÉö³cux«zZf²BWÇ®Yß½ve±ÃCý£W{Ú^q^sÑ·¨ÍOt¹·C¥GDrí@wÕKţëV·i}xËÍ÷i©ĝɝǡ]{c±OW³Ya±_ç©HĕoƫŇqr³Lys[ñ³¯OSďOMisZ±ÅFC¥Pq{Ã[Pg}\\¿ghćO
k^ģÁFıĉĥMoEqqZûěʼn³F¦oĵhÕP{¯~TÍlªNßYÐ{Ps{ÃVUeĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀffdF~ĀeĖd`sx² ®EżĀdQÂd^~ăÔH¦\\LKpĄVez¤NP ǹÓRÆąJSha[¦´ÂghwmBШźhI|VV|p] ¼èNä¶ÜBÖ¼L`¼bØæKVpoúNZÞÒKxpw|ÊEMnzEQIZZNBčÚFÜçmĩWĪñtÞĵÇñZ«uD±|Əlij¥ãn·±PmÍada CLǑkùó¡³Ï«QaċÏOÃ¥ÕđQȥċƭy³ÃA"
+ ]
+ ],
+ encodeOffsets: [
+ [[123686, 41445]],
+ [[126019, 40435]],
+ [[124393, 40128]],
+ [[126117, 39963]],
+ [[125322, 40140]],
+ [[126686, 40700]],
+ [[126041, 40374]],
+ [[125584, 40168]],
+ [[125453, 40165]],
+ [[125362, 40214]],
+ [[125280, 40291]],
+ [[125774, 39997]],
+ [[125976, 40496]],
+ [[125822, 39993]],
+ [[125509, 40217]],
+ [[122731, 40949]]
+ ]
+ },
+ properties: { cp: [123.429096, 41.796767], name: "辽宁", childNum: 16 }
+ },
+ {
+ id: "220000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@pä³PClFbbÍzwBGĭZÅi»lYċ²SgkÇ£^Sqd¯R
©é£¯S\\cZ¹iűƏCuƍÓXoR}M^o£
R}oªUF
uuXHlEÅÏ©¤ÛmTþ¤D²ÄufàÀXXȱAeyYw¬dvõ´KÊ£\\rµÄlidā]|DÂVH¹Þ®ÜWnCķ W§@\\¸~¤Vp¸póIO¢VOŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúv𼤠N°ąO¥«³[éǡű_°Õ\\ÚÊĝþâőàerR¨JYlďQ[ ÏYëЧTGztnß¡gFkMāGÁ¤ia Éȹ`\\xs¬dĆkNnuNUuP@vRY¾\\¢
GªóĄ~RãÖÎĢùđŴÕhQxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp]vbÍZuĂ{n^IüÀSÖ¦EvRÎûh@â[ƏÈô~FNr¯ôçR±HÑlĢ^¤¢OðævxsŒ]ÞÁTĠs¶¿âÆGW¾ìA¦·TѬè¥ÏÐJ¨¼ÒÖ¼ƦɄxÊ~StD@Ă¼Ŵ¡jlºWvÐzƦZвCH AxiukdGgetqmcÛ£Ozy¥cE}|
¾cZ
k¿uŐã[oxGikfeäT@
SUwpiÚFM©£è^Ú`@v¶eňf heP¶täOlÃUgÞzŸU`l}ÔÆUvØ_Ō¬Öi^ĉi§²ÃB~¡ĈÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYxƘDVÇĺĿg¿cwÅ\\¹¥Yĭl¤OvLjM_a W`zļMž·\\swqÝSAqŚij¯°kRē°wx^ĐkǂÒ\\]nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°G³¼XÀ¤¹i´o¤ŃÈ`ÌDzÄUĞd\\iÖmÈBĤÜɲDEh LG¾ƀľ{WaYÍÈĢĘÔRîĐj}ÇccjoUb½{h§Ǿ{KƖµÎ÷GĀÖŠåưÎslyiē«`å§H¥Ae^§GK}iã\\c]v©ģZmÃ|[M}ģTɟĵÂÂ`ÀçmFK¥ÚíÁbX³ÌQÒHof{]ept·GŋĜYünĎųVY^ydõkÅZW«WUa~U·SbwGçǑiW^qFuNĝ·EwUtW·Ýďæ©PuqEzwAVXRãQ`©GMehccďÏd©ÑW_ÏYƅ»
é\\ɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ýL¡ýqT^rme\\PpZZbyuybQefµ]UhĿDCmûvaÙNSkCwncćfv~
YÇG"
+ ],
+ encodeOffsets: [[130196, 42528]]
+ },
+ properties: { cp: [125.3245, 43.886841], name: "吉林", childNum: 1 }
+ },
+ {
+ id: "230000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@ƨĶTLÇyqpÇÛqe{~oyen}s`qiXGù]Ëp½©lÉÁp]Þñ´FĂ^fäîºkàz¼BUvÈ@"],
+ [
+ "@@UµNÿ¥īèçHÍøƕ¶Lǽ|g¨|a¾pVidd~ÈiíďÓQġėÇZÎXb½|ſÃH½KFgɱCģÛÇAnjÕc[VĝDZÃËÇ_ £ń³pj£º¿»WH´¯U¸đĢmtĜyzzNN|g¸÷äűѱĉā~mq^[ǁÑďlw]¯xQĔ¯l°řĴrBÞTxr[tŽ¸ĻN_yX`biNKu
P£kZĮ¦[ºxÆÀdhĹŀUÈƗCwáZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFć}¢A±Äj¨]ĊÕjŋ«×`VuÓÅ~_kŷVÝyhVkÄãPsOµfgeŇ
µf@u_Ù ÙcªNªÙEojVxT@ãSefjlwH\\pŏäÀvlY½d{F~¦dyz¤PÜndsrhfHcvlwjF£G±DÏƥYyÏu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|C˜zxAè¥bfudTrFWÁ¹Am|ĔĕsķÆF´N}ć
UÕ@Áijſmuçuð^ÊýowFzØÎĕNőǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°Uzouxe]}
AyÈW¯ÌmKQ]Īºif¸ÄX|sZt|½ÚUÎ lk^p{f¤lºlÆW A²PVÜPHÊâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi`¶bXrBgxfv»uUi^v~J¬mVp´£´VWrnP½ì¢BX¬hðX¹^TjVriªjtŊÄmtPGx¸bgRsT`ZozÆO]ÒFôÒOÆŊvÅpcGêsx´DR{AEOr°x|íb³Wm~DVjºéNNËܲɶGxŷCSt}]ûōSmtuÇÃĕNāg»íT«u}ç½BĵÞʣ¥ëÊ¡MÛ³ãȅ¡ƋaǩÈÉQG¢·lG|tvgrrf«ptęŘnÅĢrI²¯LiØsPf_vĠdxM prʹL¤¤eËÀđKïÙVY§]Ióáĥ]ķK¥j|pŇ\\kzţ¦šnņäÔVĂîĪ¬|vW®l¤èØrxm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄĄ»ƢjȦOǺ¨ìSŖÆƬyQv`cwZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨSfm ĊƀP̎ēz©ĊÄÕÊmgÇsJ¥ƔŊśæÎÑqv¿íUOµªÂnĦÁ_½ä@êí
£P}Ġ[@gġ}gɊ×ûÏWXá¢užƻÌsNͽƎÁ§čŐAēeL³àydl¦ĘVçŁpśdžĽĺſÊQíÜçÛġÔsĕ¬Ǹ¯YßċġHµ ¡eå`ļrĉŘóƢFìĎWøxÊkƈdƬv|I|·©NqńRŀ¤éeŊŀàŀU²ŕƀBQ£Ď}L¹Îk@©ĈuǰųǨÚ§ƈnTËÇéƟÊcfčŤ^XmHĊĕË«W·ċëx³ǔķÐċJāwİ_ĸȀ^ôWr°oú¬Ħ
ŨK~ȰCĐ´Ƕ£fNÎèâw¢XnŮeÂÆĶ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®ØCÔ ŬGƠƦYĜĘÜƬDJg_ͥœ@čŅĻA¶¯@wÎqC½Ĉ»NăëKďÍQÙƫ[«ÃígßÔÇOÝáWñuZ¯ĥŕā¡ÑķJu¤E 寰WKɱ_d_}}vyõu¬ï¹ÓU±½@gÏ¿rýDg
Cdµ°MFYxw¿CG£Rƛ½Õ{]L§{qqą¿BÇƻğëܭNJË|c²}Fµ}ÙRsÓpg±QNqǫŋRwŕnéÑÉK«SeYR
ŋ@{¤SJ}D Ûǖ֍]gr¡µŷjqWÛham³~S«Þ]"
+ ]
+ ],
+ encodeOffsets: [[[127123, 51780]], [[134456, 44547]]]
+ },
+ properties: { cp: [126.642464, 45.756967], name: "黑龙江", childNum: 2 }
+ },
+ {
+ id: "320000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@cþÅPi`ZRu¥É\\]~°Y`µÓ^phÁbnÀşúòaĬºTÖŒbe¦¦{¸ZâćNp©Hr|^mjhSEb\\afv`sz^lkljÄtg¤D¾X¿À|ĐiZȀåB·î}GL¢õcßjayBFµÏC^ĭcÙt¿sğH]j{s©HM¢QnDÀ©DaÜÞ·jgàiDbPufjDk`dPOîhw¡ĥ¥GP²ĐobºrYî¶aHŢ´ ]´rılw³r_{£DB_Ûdåuk|Ũ¯F Cºyr{XFye³Þċ¿ÂkĭB¿MvÛpm`rÚã@Ę¹hågËÖƿxnlč¶Åì½Ot¾dJlVJĂǀŞqvnO^JZż·Q}êÍÅmµÒ]ƍ¦Dq}¬R^èĂ´ŀĻĊIÔtIJyQŐĠMNtR®òLhĚs©»}OÓGZz¶A\\jĨFäOĤHYJvÞHNiÜaĎÉnFQlNM¤B´ĄNöɂtpŬdfå
qm¿QûùŞÚb¤uŃJŴu»¹ĄlȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Yxcitğ®jű¢KOķCoy`å®VTa_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋÄÄÍīçÛɈǥ£ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ¡RLčiXyÅNïă¡¸iĔÏNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCtOPrE^ÒogĉIµÛÅʹK
¤½phMü`oæŀ"
+ ],
+ encodeOffsets: [[121740, 32276]]
+ },
+ properties: { cp: [118.767413, 32.041544], name: "江苏", childNum: 1 }
+ },
+ {
+ id: "330000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@E^dQ]K"],
+ ["@@jX^j"],
+ ["@@sfbU"],
+ ["@@qP\\xz[ck"],
+ ["@@R¢FX}°[s_"],
+ ["@@Cb\\}"],
+ ["@@e|v\\la{u"],
+ ["@@v~u}"],
+ ["@@QxÂF¯}"],
+ ["@@¹nvÞs¯o"],
+ ["@@rSkUEj"],
+ ["@@biZP"],
+ ["@@p[}INf"],
+ ["@@À¿"],
+ ["@@¹dnb
"],
+ ["@@rSBnR"],
+ ["@@g~h}"],
+ ["@@FlEk"],
+ ["@@OdPc"],
+ ["@@v[u\\"],
+ ["@@FjâL~wyoo~sµL\\"],
+ ["@@¬e¹aN"],
+ ["@@\\nÔ¡q]L³ë\\ÿ®QÖ"],
+ ["@@ÊA©[¬"],
+ ["@@Kxv"],
+ ["@@@hlIk]"],
+ ["@@pW{o||j"],
+ ["@@Md|_mC"],
+ ["@@¢
X£ÏylD¼XtH"],
+ ["@@hlÜ[LykAvyfw^E¤"],
+ ["@@fp¤MusR"],
+ ["@@®_ma~LÁ¬Z"],
+ ["@@iMxZ"],
+ ["@@ZcYd"],
+ ["@@Z~dOSo|A¿qZv"],
+ ["@@@`EN¡v"],
+ ["@@|TY{"],
+ ["@@@n@m"],
+ ["@@XWkCT\\"],
+ ["@@ºwZRkĕWO¢"],
+ ["@@X®±Grƪ\\ÔáXq{"],
+ ["@@ůTG°ĄLHm°UC"],
+ [
+ "@@¤aÜx~}dtüGæţŎíĔcŖpMËÐjē¢·ðĄÆMzjWKĎ¢Q¶À_ê_Bıi«pZgf¤Nrq]§ĂN®«H±yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªÁŖHŗʼnåqûõi¨hÜ·ñt»¹ýv_[«¸mYL¯Qª
mĉÅdMgÇjcº«ę¬K´B«Âącoċ\\xKd¡gěŧ«®á[~ıxu·ÅKsËÉc¢Ù\\ĭƛëbf¹ģSĜkáƉÔĈZB{aMµfzʼnfåÂŧįƋǝÊĕġć£g³neą»@¦S®\\ßðChiqªĭiAuAµ_W¥ƣO\\lċĢttC¨£t`PZäuXßBsĻyekOđġĵHuXBµ]×\\°®¬F¢¾pµ¼kŘó¬Wät¸|@L¨¸µrºù³Ù~§WIZW®±Ð¨ÒÉx`²pĜrOògtÁZ}þÙ]¡FKwsPlU[}¦Rvn`hq¬\\nQ´ĘRWb_ rtČFIÖkĦPJ¶ÖÀÖJĈĄTĚòC ²@Pú
Øz©PCÈÚĒ±hŖl¬â~nm¨f©iļ«mntuÖZÜÄjL®EÌFª²iÊxبIÈhhst"
+ ],
+ ["@@o\\VzRZ}y"],
+ ["@@@°¡mÛGĕ¨§Ianá[ýƤjfæØLäGr"]
+ ],
+ encodeOffsets: [
+ [[125592, 31553]],
+ [[125785, 31436]],
+ [[125729, 31431]],
+ [[125513, 31380]],
+ [[125223, 30438]],
+ [[125115, 30114]],
+ [[124815, 29155]],
+ [[124419, 28746]],
+ [[124095, 28635]],
+ [[124005, 28609]],
+ [[125000, 30713]],
+ [[125111, 30698]],
+ [[125078, 30682]],
+ [[125150, 30684]],
+ [[124014, 28103]],
+ [[125008, 31331]],
+ [[125411, 31468]],
+ [[125329, 31479]],
+ [[125626, 30916]],
+ [[125417, 30956]],
+ [[125254, 30976]],
+ [[125199, 30997]],
+ [[125095, 31058]],
+ [[125083, 30915]],
+ [[124885, 31015]],
+ [[125218, 30798]],
+ [[124867, 30838]],
+ [[124755, 30788]],
+ [[124802, 30809]],
+ [[125267, 30657]],
+ [[125218, 30578]],
+ [[125200, 30562]],
+ [[124968, 30474]],
+ [[125167, 30396]],
+ [[124955, 29879]],
+ [[124714, 29781]],
+ [[124762, 29462]],
+ [[124325, 28754]],
+ [[123990, 28459]],
+ [[125366, 31477]],
+ [[125115, 30363]],
+ [[125369, 31139]],
+ [[122495, 31878]],
+ [[125329, 30690]],
+ [[125192, 30787]]
+ ]
+ },
+ properties: { cp: [120.153576, 30.287459], name: "浙江", childNum: 45 }
+ },
+ {
+ id: "340000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@^iuLX^"],
+ ["@@e©Ehl"],
+ [
+ "@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊzÖgņtÀÁĂÆáhEz|WzqD¹°Eŧl{ævÜcA`¤C`|´qxIJkq^³³GšµbíZ
¹qpa±ď OH¦Ħx¢gPícOl_iCveaOjCh߸iÝbÛªCC¿mRV§¢A|t^iĠGÀtÚsd]ĮÐDE¶zAb àiödK¡~H¸íæAǿYj{ď¿À½W®£ChÃsikkly]_teu[bFaTign{]GqªoĈMYá|·¥f¥őaSÕėNµñĞ«Im_m¿Âa]uĜp
Z_§{Cäg¤°r[_YjÆOdý[I[á·¥Q_nùgL¾mvˊBÜƶĊJhpc¹O]iŠ]¥ jtsggJǧw×jÉ©±EFËKiÛÃÕYv
sm¬njĻª§emná}k«ŕgđ²ÙDÇ¤í¡ªOy×Où±@DñSęćăÕIÕ¿IµĥOjNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßF¶X®¿mw
RIÞfßoG³¾©uyHį{Ɓħ¯AFnuP
ÍÔzVdàôº^Ðæd´oG¤{S¬ćxã}ŧ×Kǥĩ«ÕOEзÖdÖsƘѨ[Û^Xr¢¼§xvÄƵ`K§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē
ßúLÃÃ_ÈÏ|]ÂÏFlg`ben¾¢pUh~ƴĖ¶_r sĄ~cƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³
]u}f
ïQl{skloNdjäËzDvčoQďHI¦rbtHĔ~BmlRV_ħTLnñH±DL¼Lªl§Ťa¸ĚlK²\\RòvDcÎJbt[¤D@®hh~kt°ǾzÖ@¾ªdbYhüóZ ň¶vHrľ\\ÊJuxAT|dmÀO[ÃÔG·ĚąĐlŪÚpSJ¨ĸLvÞcPæķŨ®mÐálwKhïgA¢ųÆ©Þ¤OÈm°K´"
+ ]
+ ],
+ encodeOffsets: [
+ [[121722, 32278]],
+ [[119475, 30423]],
+ [[119168, 35472]]
+ ]
+ },
+ properties: { cp: [117.283042, 31.86119], name: "安徽", childNum: 3 }
+ },
+ {
+ id: "350000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@zht´]"],
+ ["@@aj^~ĆG©O"],
+ ["@@ed¨C}}i"],
+ ["@@@vPGsQ"],
+ ["@@sBzddW]Q"],
+ ["@@S¨Q{"],
+ ["@@NVucW"],
+ ["@@qptBAq"],
+ ["@@¸[mu"],
+ ["@@Q\\pD]_"],
+ ["@@jSwUadpF"],
+ ["@@eXª~"],
+ ["@@AjvFso"],
+ ["@@fT_Çí\\v|ba¦jZÆy°"],
+ ["@@IjJi"],
+ ["@@wJIx«¼AoNe{M"],
+ ["@@K±¡ÓČäeZ"],
+ [
+ "@@k¡¹Eh~c®wBkUplÀ¡I~Māe£bN¨gZý¡a±Öcp©PhI¢Qq
ÇGj|¥U g[Ky¬ŏv@OptÉEF\\@ åA¬V{XģĐBy
cpě
¼³Ăp·¤¥ohqqÚ¡ŅLs^á§qlÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ßėuĕeûÒiÁŧSW¥Qûŗ½ùěcݧSùĩąSWó«íęACµeRåǃRCÒÇZÍ¢ź±^dlstjD¸ZpuÔâÃH¾oLUêÃÔjjēò´ĄWƛ
^Ñ¥Ħ@ÇòmOw¡õyJyD}¢ďÑÈġfZda©º²z£NjD°Ötj¶¬ZSÎ~¾c°¶ÐmxO¸¢Pl´SL|¥AȪĖMņIJg®áIJČĒü` QF¬h|ĂJ@zµ |ê³È ¸UÖŬŬÀEttĸr]ðM¤ĶIJHtÏ AĬkvsq^aÎbvdfÊòSD´Z^xPsĂrvƞŀjJd×ŘÉ ®AΦĤdxĆqAZRÀMźnĊ»İÐZ YXæJyĊ²·¶q§·K@·{sXãô«lŗ¶»o½E¡«¢±¨Y®Ø¶^AvWĶGĒĢPlzfļtàAvWYãO_¤sD§ssČġ[kƤPX¦`¶®BBvĪjv©jx[L¥àï[F
¼ÍË»ğV`«Ip}ccÅĥZEãoP
´B@D¸m±z«Ƴ¿å³BRضWlâþäą`]Z£Tc ĹGµ¶Hm@_©k¾xĨôȉðX«½đCIbćqK³ÁÄš¬OAwã»aLʼnËĥW[ÂGIÂNxij¤D¢îĎÎB§°_JGs¥E@
¤uć
PåcuMuw¢BI¿]zG¹guĮck\\_"
+ ]
+ ],
+ encodeOffsets: [
+ [[123250, 27563]],
+ [[122541, 27268]],
+ [[123020, 27189]],
+ [[122916, 27125]],
+ [[122887, 26845]],
+ [[122808, 26762]],
+ [[122568, 25912]],
+ [[122778, 26197]],
+ [[122515, 26757]],
+ [[122816, 26587]],
+ [[123388, 27005]],
+ [[122450, 26243]],
+ [[122578, 25962]],
+ [[121255, 25103]],
+ [[120987, 24903]],
+ [[122339, 25802]],
+ [[121042, 25093]],
+ [[122439, 26024]]
+ ]
+ },
+ properties: { cp: [119.306239, 26.075302], name: "福建", childNum: 18 }
+ },
+ {
+ id: "360000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@ĢĨƐgļ¼ÂMD~ņªe^\\^§ý©j×cZبzdÒa¶lÒJìõ`oz÷@¤u޸´ôęöY¼HČƶajlÞƩ¥éZ[|h}^U ¥pĄžƦO lt¸Æ Q\\aÆ|CnÂOjtĚĤdÈF`¶@Ðë ¦ōÒ¨SêvHĢûXD®
QgÄWiØPÞìºr¤džNĠ¢lĄtZoCƞÔºCxrpĠV®Ê{f_Y`_eq®Aot`@oDXfkp¨|s¬\\DÄSfè©Hn¬
^DhÆyøJhØxĢĀLÊƠPżċĄwȠ̦G®ǒĤäTŠÆ~Ħw«|TF¡nc³Ïå¹]ĉđxe{ÎÓvOEm°BƂĨİ|Gvz½ª´HàpeJÝQxnÀWEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[r«_gmQu~¥V\\OkxtL E¢Ú^~ýêPóqoě±_Êw§ÑªåƗā¼mĉŹ¿NQ
YBąrwģcÍ¥BŗÊcØiIƝĿuqtāwO]³YCñTeÉcaubÍ]trluī
BÐGsĵıN£ï^ķqss¿FūūVÕ·´Ç{éĈýÿOER_đûIċâJhŅıNȩĕB
¦K{Tk³¡OP·wnµÏd¯}½TÍ«YiµÕsC¯iM¤¦¯P|ÿUHvhe¥oFTuõ\\OSsMòđƇiaºćXĊĵà·çhƃ÷Ç{ígu^đgm[×zkKN¶Õ»lčÓ{XSÆv©_ÈëJbVkĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B±ÌKyáV¼Ã~
`gsÙfIƋlę¹e|~udjuTlXµf`¿Jd[\\L²"
+ ],
+ encodeOffsets: [[116689, 26234]]
+ },
+ properties: { cp: [115.892151, 28.676493], name: "江西", childNum: 1 }
+ },
+ {
+ id: "370000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@Xjd]{K"],
+ ["@@itbFHy"],
+ ["@@HlGk"],
+ ["@@TGy"],
+ ["@@K¬U"],
+ ["@@WdXc"],
+ ["@@PtOs"],
+ ["@@LnXhc"],
+ ["@@ppVu]Or"],
+ ["@@cdzAUa"],
+ ["@@udRhnCI"],
+ ["@@oIpR"],
+ [
+ "@@Ľč{fzƤîKÎMĮ]ZF½Y]â£ph¶¨râøÀÎǨ¤^ºÄGz~grĚĜlĞÆLĆdž¢Îo¦cvKbgr°WhmZp L]LºcUÆnżĤÌĒbAnrOA´ȊcÀbƦUØrĆUÜøĬƞEzVL®öØBkŖÝĐĖ¹ŧ̄±ÀbÎÉnb²ĦhņBĖįĦåXćì@L¯´ywƕCéõė ƿ¸lµ¾Z|ZWyFY¨Mf~C¿`à_RÇzwƌfQnny´INoƬèôº|sTJULîVjǎ¾ĒØDz²XPn±ŴPè¸ŔLƔÜƺ_TüÃĤBBċÈöA´faM¨{«M`¶d¡ôÖ°mȰBÔjj´PM|c^d¤u¤Û´ä«ƢfPk¶Môl]Lb}su^ke{lC
MrDÇ]NÑFsmoõľHyGă{{çrnÓEƕZGª¹Fj¢ïW
uøCǷë¡ąuhÛ¡^KxC`C\\bÅxì²ĝÝ¿_NīCȽĿåB¥¢·IŖÕy\\¹kxãČ×GDyäÁçFQ¡KtŵƋ]CgÏAùSedcÚźuYfyMmhUWpSyGwMPqŀÁ¼zK¶GY§Ë@´śÇµƕBm@IogZ¯uTMx}CVKï{éƵP_K«pÛÙqċtkkù]gTğwoɁsMõ³ăAN£MRkmEÊčÛbMjÝGu
IZGPģãħE[iµBEuDPÔ~ª¼ęt]ûG§¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~Ż¸YI] PumŝrƿIā[xedzL¯v¯s¬ÁY
~}
ťuŁgƋpÝĄ_ņī¶ÏSR´ÁP~¿Cyċßdwk´SsX|t`Ä ÈðAªìÎT°¦Dda^lĎDĶÚY°`ĪŴǒàŠv\\ebZHŖR¬ŢƱùęOÑM³FÛWp["
+ ]
+ ],
+ encodeOffsets: [
+ [[123806, 39303]],
+ [[123821, 39266]],
+ [[123742, 39256]],
+ [[123702, 39203]],
+ [[123649, 39066]],
+ [[123847, 38933]],
+ [[123580, 38839]],
+ [[123894, 37288]],
+ [[123043, 36624]],
+ [[123344, 38676]],
+ [[123522, 38857]],
+ [[123628, 38858]],
+ [[118260, 36742]]
+ ]
+ },
+ properties: { cp: [117.000923, 36.675807], name: "山东", childNum: 13 }
+ },
+ {
+ id: "410000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@ýLùµP³swIÓxcŢĞð´E®ÚPtĴXØx¶@«ŕŕQGYfa[şußǩđš_X³ijÕčC]kbc¥CS¯ëÍB©÷³Si_}mYTt³xlàcČzÀD}ÂOQ³ÐTĨ¯ƗòËŖ[hłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`Ƴĕg}V¡om½faÇo³TTj¥tĠRyK{ùÓjuµ{t}uËRivGçJFjµÍyqÎàQÂFewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr
|J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ
Ť]MÛfaQpě±ǽ¾]uFu÷nčįADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzËčľ^KLiÞñ[aA²zzÌ÷D|[íijgfÕÞd®|`Ć~oĠƑô³ŊD×°¯CsøÀ«ìUMhTº¨¸ǡîSÔDruÂÇZÖEvPZW~ØÐtĄE¢¦Ðy¸bô´oŬ¬²Ês~]®tªapŎJ¨Öº_Ŕ`Ŗ^Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvƶN¿¢T@uC¬^ĊðÄn|lGlRjsp¢ED}Fio~ÔN~zkĘHVsDzßjŬŢ`Pûàl¢\\ÀEhİgÞē X¼Pk|m"
+ ],
+ encodeOffsets: [[118256, 37017]]
+ },
+ properties: { cp: [113.665412, 34.757975], name: "河南", childNum: 1 }
+ },
+ {
+ id: "420000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@AB"],
+ ["@@lskt"],
+ [
+ "@@¾«}{ra®pîÃ\\{øCËyyB±b\\òÝjKL ]ĎĽÌJyÚCƈćÎT´Å´pb©ÈdFin~BCo°BĎÃømv®E^vǾ½Ĝ²RobÜeN^ĺ£R¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I¾®I{GqpCgyl{£ÍÍyPL¡¡¸kWxYlÙæŁĢz¾V´W¶ùŸo¾ZHxjwfxGNÁ³Xéæl¶EièIH ujÌQ~v|sv¶Ôi|ú¢FhQsğ¦SiŠBgÐE^ÁÐ{čnOÂÈUÎóĔÊēIJ}Z³½Mŧïeyp·uk³DsѨL¶_Åuèw»¡WqÜ]\\Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟOKÉġÿ×wg÷IÅzCg]m«ªGeçÃTC«[t§{loWeC@ps_Bprf_``Z|ei¡oċMqow¹DƝÓDYpûsYkıǃ}s¥ç³[§cY§HK«Qy]¢wwö¸ïx¼ņ¾Xv®ÇÀµRĠÐHM±cÏdƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy
¿³x¯No|¹HÏÛmjúË~TuęjCöAwě¬Rđl¯ ÑbŇTĿ_[IčĄʿnM¦ğ\\É[T·k¹©oĕ@A¾wya¥Y\\¥Âaz¯ãÁ¡k¥ne£ÛwE©Êō¶˓uoj_U¡cF¹[WvP©whuÕyBF`RqJUw\\i¡{jEPïÿ½fć
QÑÀQ{°fLÔ~wXgītêݾĺHd³fJd]HJ²
EoU¥HhwQsƐ»Xmg±çve]DmÍPoCc¾_hhøYrŊU¶eD°Č_N~øĹĚ·`z]Äþp¼
äÌQv\\rCé¾TnkžŐÚÜa¼ÝƆĢ¶Ûo
d
ĔňТJqPb ¾|J¾fXƐîĨ_Z¯À}úƲN_ĒÄ^ĈaŐyp»CÇÄKñL³ġM²wrIÒŭxjb[n«øæà ^²h¯ÚŐªÞ¸Y²ĒVø}Ā^İ´LÚm¥ÀJÞ{JVųÞŃx×sxxƈē ģMřÚðòIfĊŒ\\Ʈ±ŒdʧĘDvČ_Àæ~Dċ´A®µ¨ØLV¦êHÒ¤"
+ ]
+ ],
+ encodeOffsets: [
+ [[113712, 34000]],
+ [[115612, 30507]],
+ [[113649, 34054]]
+ ]
+ },
+ properties: { cp: [114.298572, 30.584355], name: "湖北", childNum: 3 }
+ },
+ {
+ id: "430000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@nFTs"],
+ [
+ "@@ßÅÆá½ÔXrCO
ËRïÿĩTooQyÓ[ŅBE¬ÎÓXaį§Ã¸G °ITxpúxÚij¥ÏĢ¾edÄ©ĸG
àGhM¤Â_U}Ċ}¢pczfþg¤ÇòAVM"
+ ],
+ [
+ "@@©KA·³CQ±Á«³BUƑ¹AtćOwD]JiØSm¯b£ylX
HËѱH«C^õľAŧ¤É¥ïyuǙuA¢^{ÌC´¦ŷJ£^[ª¿ĕ~Ƈ
N
skóā¹¿ï]ă~÷O§@Vm¡Qđ¦¢Ĥ{ºjÔª¥nf´~Õo×ÛąMąıuZmZcÒ IJĪ²SÊDŽŶ¨ƚCÖŎªQؼrŭ«}NÏürʬmjr@ĘrTW SsdHzƓ^ÇÂyUi¯DÅYlŹu{hT}mĉ¹¥ěDÿë©ıÓ[Oº£¥ótł¹MÕƪ`P
DiÛU¾ÅâìUñBÈ£ýhedy¡oċ`pfmjP~kZa
ZsÐd°wj§@Ĵ®w~^kÀÅKvNmX\\¨aŃqvíó¿F¤¡@ũÑVw}S@j}¾«pĂrªg àÀ²NJ¶¶Dô
K|^ª°LX¾ŴäPĪ±£EXd^¶IJÞÜ~u¸ǔMRhsR
e`ÄofIÔ\\Ø ićymnú¨cj ¢»GČìƊÿШXeĈĀ¾Oð Fi ¢|[jVxrIQ_EzAN¦zLU`cªxOTu RLÄ¢dVi`p˔vŎµªÉF~Ød¢ºgİàw¸Áb[¦Zb¦z½xBĖ@ªpºlS¸Ö\\Ĕ[N¥ˀmĎăJ\\ŀ`
ňSÚĖÁĐiOĜ«BxDõĚivSÌ}iùÜnкG{p°M´wÀÒzJ²ò¨ oTçüöoÛÿñőФùTz²CȆȸǎŪƑÐc°dPÎğ˶[Ƚu¯½WM¡ÉB·rínZÒ `¨GA¾\\pēXhÃRCüWGġu
Té§ŎÑ©ò³I±³}_EÃħg®ęisÁPDmÅ{b[RÅs·kPŽƥóRoOV~]{g\\êYƪ¦kÝbiċƵGZ»Ěõ
ó·³vŝ£ø@pyö_ëIkѵbcѧy
×dYتiþ¨[]f]Ņ©C}ÁN»hĻħƏĩ"
+ ]
+ ],
+ encodeOffsets: [
+ [[115640, 30489]],
+ [[112543, 27312]],
+ [[116690, 26230]]
+ ]
+ },
+ properties: { cp: [112.982279, 28.19409], name: "湖南", childNum: 3 }
+ },
+ {
+ id: "440000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@QdAua"],
+ ["@@lxDLo"],
+ ["@@sbhNLo"],
+ ["@@Ă ā"],
+ ["@@WltO[["],
+ ["@@Kr]S"],
+ ["@@eI]y"],
+ ["@@I|Mym"],
+ ["@@Û³LS¼Y"],
+ ["@@nvºBëui©`¾"],
+ ["@@zdÛJw®"],
+ ["@@°
¯"],
+ ["@@a yAª¸ËJIxØ@ĀHAmÃV¡ofuo"],
+ ["@@sŗÃÔėAƁZÄ ~°ČPäh"],
+ ["@@¶ÝÌvmĞhıQ"],
+ ["@@HdSjĒ¢D}war
u«ZqadYM"],
+ ["@@el\\LqqU"],
+ ["@@~rMo\\"],
+ ["@@f^C"],
+ ["@@øPªoj÷ÍÝħXČx°Q¨ıXNv"],
+ ["@@gÇƳo[~tly"],
+ ["@@EÆC¿"],
+ ["@@OP"],
+ [
+ "@@wđógĝ[³¡VÙæÅöM̳¹pÁaËýý©D©ÜJŹƕģGą¤{Ùū
ÇO²«BƱéAÒĥ¡«BhlmtÃPµyU¯ucd·w_bŝcīímGO|KPȏŹãŝIŕŭŕ@Óoo¿ē±ß}
ŭIJWÈCőâUâǙIğʼn©IijE×
Á³AówXJþ±ÌÜÓĨ£L]ĈÙƺZǾĆĖMĸĤfÎĵlŨnÈĐtFFĤêk¶^k°f¶g}®Faf`vXŲxl¦ÔÁ²¬Ð¦pqÊ̲iXØRDÎ}Ä@ZĠsx®AR~®ETtĄZƈfŠŠHâÒÐAµ\\S¸^wĖkRzalŜ|E¨ÈNĀňZTpBh£\\ĎƀuXĖtKL¶G|»ĺEļĞ~ÜĢÛĊrOÙîvd]n¬VÊĜ°RÖpMƂªFbwEÀ©\\
¤]ŸI®¥D³|Ë]CöAŤ¦
æ´¥¸Lv¼¢ĽBaôF~®²GÌÒEYzk¤°ahlVÕI^CxĈPsBƒºV¸@¾ªR²ĨN]´_eavSivc}p}Đ¼ƌkJÚe th_¸ ºx±ò_xN˲@ă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIǪ`uTÅxYĒÖ¼kÖµMjJÚwn\\hĒv]îh|ÈƄøèg¸Ķß ĉĈWb¹ƀdéĘNTtP[öSvrCZaGubo´ŖÒÇĐ~¡zCI
özx¢PnÈñ @ĥÒ¦]ƞV}³ăĔñiiÄÓVépKG½ÄÓávYoC·sitiaÀyŧΡÈYDÑům}ý|m[węõĉZÅxUO}÷N¹³ĉo_qtăqwµŁYÙǝŕ¹tïÛUïmRCº
ĭ|µÕÊK½Rē ó]GªęAx»HO£|ām¡diď×YïYWªʼnOeÚtĐ«zđ¹T
āúEá²\\ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃOj YÇ÷Qěi"
+ ]
+ ],
+ encodeOffsets: [
+ [[117381, 22988]],
+ [[116552, 22934]],
+ [[116790, 22617]],
+ [[116973, 22545]],
+ [[116444, 22536]],
+ [[116931, 22515]],
+ [[116496, 22490]],
+ [[116453, 22449]],
+ [[113301, 21439]],
+ [[118726, 21604]],
+ [[118709, 21486]],
+ [[113210, 20816]],
+ [[115482, 22082]],
+ [[113171, 21585]],
+ [[113199, 21590]],
+ [[115232, 22102]],
+ [[115739, 22373]],
+ [[115134, 22184]],
+ [[113056, 21175]],
+ [[119573, 21271]],
+ [[119957, 24020]],
+ [[115859, 22356]],
+ [[116561, 22649]],
+ [[116285, 22746]]
+ ]
+ },
+ properties: { cp: [113.280637, 23.125178], name: "广东", childNum: 24 }
+ },
+ {
+ id: "450000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@H TQ§A"],
+ [
+ "@@ĨʪLƊDÎĹĐCǦė¸zÚGn£¾rªŀÜt¬@ÖÚSx~øOŒŶÐÂæȠ\\ÈÜObĖw^oÞLf¬°bI lTØBÌF£Ć¹gñĤaYt¿¤VSñK¸¤nM¼JE±½¸ñoÜCƆæĪ^ĚQÖ¦^f´QüÜÊz¯lzUĺš@ìp¶n]sxtx¶@~ÒĂJb©gk{°~c°`Ô¬rV\\la¼¤ôá`¯¹LCÆbxEræOv[H[~|aB£ÖsºdAĐzNÂðsÞÆ
Ĥªbab`ho¡³F«èVlo¤ÔRzpp®SĪº¨ÖºN
ijd`a¦¤F³ºDÎńĀìCĜº¦Ċ~nS|gźvZkCÆj°zVÈÁƔ]LÊFZg
čPkini«qÇczÍY®¬Ů»qR×ō©DÕ§ƙǃŵTÉĩ±ıdÑnYYIJvNĆĆØÜ Öp}e³¦m©iÓ|¹ħņ|ª¦QF¢Â¬ʖovg¿em^ucà÷gÕuíÙćĝ}FĻ¼Ĺ{µHKsLSđƃrč¤[AgoSŇYMÿ§Ç{FśbkylQxĕ]T·¶[B
ÑÏGáşşƇe
ăYSsFQ}BwtYğÃ@~
CÍQ ×Wj˱rÉ¥oÏ ±«ÓÂ¥kwWűmcih³K~µh¯e]lµélEģEďsmÇŧē`ãògK_ÛsUʝćğ¶höO¤Ǜn³c`¡y¦CezYwa[ďĵűMę§]XÎ_íÛ]éÛUćİÕBƣ±
dy¹T^dûÅÑŦ·PĻþÙ`K¦
¢ÍeĥR¿³£[~äu¼dltW¸oRM¢ď\\z}Æzdvň{ÎXF¶°Â_ÒÂÏL©ÖTmu¼ãlīkiqéfA·Êµ\\őDc¥ÝFyÔćcűH_hLÜêĺШc}rn`½Ì@¸¶ªVLhŒ\\Ţĺk~Ġið°|gtTĭĸ^xvKVGréAébUuMJVÃO¡
qĂXËSģãlýà_juYÛÒBG^éÖ¶§EGÅzěƯ¤EkN[kdåucé¬dnYpAyČ{`]þ¯TbÜÈk¡ĠvàhÂƄ¢J"
+ ]
+ ],
+ encodeOffsets: [[[111707, 21520]], [[107619, 25527]]]
+ },
+ properties: { cp: [108.320004, 22.82402], name: "广西", childNum: 2 }
+ },
+ {
+ id: "460000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@¦Ŝil¢XƦƞòïè§ŞCêɕrŧůÇąĻõ·ĉ³œ̅kÇm@ċȧŧĥĽʉƅſȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀоjNðĀÒRZdžzÐŘΰH¨Ƣb²_Ġ "
+ ],
+ encodeOffsets: [[112750, 20508]]
+ },
+ properties: { cp: [110.33119, 20.031971], name: "海南", childNum: 1 }
+ },
+ {
+ id: "510000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@LqKr"],
+ [
+ "@@[ĻéV£_ţġñpG réÏ·~ąSfy×Í·ºſƽiÍıƣıĻmHH}siaX@iÇ°ÁÃ×t«T¤JJJyJÈ`Ohߦ¡uËhIyCjmÿw
ZG
TiSsOB²fNmsPa{M{õE^Hj}gYpaeu¯oáwHjÁ½M¡pMuåmni{fk\\oÎqCwEZ¼KĝAy{m÷LwO×SimRI¯rKõBS«sFe]fµ¢óY_ÆPRcue°Cbo×bd£ŌIHgtrnyPt¦foaXďxlBowz_{ÊéWiêEGhܸºuFĈIxf®Y½ĀǙ]¤EyF²ċw¸¿@g¢§RGv»áW`ÃĵJwi]t¥wO½a[×]`ÃiüL¦LabbTÀåc}ÍhÆh®BHî|îºÉk¤Sy£ia©taį·Ɖ`ō¥UhO
ĝLk}©Fos´JmµlŁu
ønÑJWΪYÀïAetTŅÓGË«bo{ıwodƟ½OġܵxàNÖ¾P²§HKv¾]|BÆåoZ`¡Ø`ÀmºĠ~ÌЧnÇ
¿¤]wğ@srğu~Io[é±¹ ¿ſđÓ@qg¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@áťsZÏÅĭƋěpwDóÖáŻneQËq·GCœýS]x·ýq³OÕ¶Qzßti{řáÍÇWŝŭñzÇWpç¿JXĩè½cFÂLiVjx}\\NŇĖ¥GeJA¼ÄHfÈu~¸Æ«dE³ÉMA|bÒ
ćhG¬CMõƤąAvüVéŀ_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»ÕZ³ġqDoy`L¬gdp°şp¦ėìÅĮZ°Iähzĵf²å ĚÑKpIN|Ñz]ń
·FU×é»R³MÉ»GM«kiér}Ã`¹ăÞmÈnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ
þTº·àUȞÏʦ¶I«dĽĢdĬ¿»Ĕ×h\\c¬ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvwxBèĻĒ©ĈtCĢɽŠȣ¦āæ·HĽîôNÔ~^¤Ɗu^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ®Z´ğ~Sn|ªWÚ©òzPOȸbð¢|øĞŒQìÛÐ@ĞǎRS¤Á§d
i´ezÝúØã]HqkIþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwnÆƄmÀêErĒtD®ċæcQE®³^ĭ¥©l}äQtoŖÜqÆkµªÔĻĴ¡@Ċ°B²Èw^^RsºTĀ£ŚæQPJvÄz^Đ¹Æ¯fLà´GC²dtĀRt¼¤ĦOðğfÔðDŨŁĞƘïPÈ®âbMüÀXZ ¸£@Å»»QÉ]dsÖ×_Í_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|YÔZśÎs´xº±Uñt|OĩĠºNbgþJy^dÂY Į]Řz¦gC³R`Āz¢Aj¸CL¤RÆ»@Ŏk\\Ç´£YW}z@Z}öoû¶]´^NÒ}èNªPÍy¹`S°´ATeVamdUĐwʄvĮÕ\\uÆŗ¨Yp¹àZÂmWh{á}WØǍÉüwga§áCNęÎ[ĀÕĪgÖɪXøx¬½Ů¦¦[NÎLÜUÖ´òrÙŠxR^JkijnDX{U~ET{ļº¦PZcjF²Ė@pg¨B{u¨ŦyhoÚD®¯¢ WòàFΤ¨GDäz¦kŮPġqË¥À]eâÚ´ªKxīPÖ|æ[xäJÞĥsNÖ½I¬nĨY´®ÐƐmDŝuäđđEb
ee_v¡}ìęNJē}qÉåT¯µRs¡M@}ůaa¯wvƉåZw\\Z{åû^"
+ ]
+ ],
+ encodeOffsets: [[[108815, 30935]], [[110617, 31811]]]
+ },
+ properties: { cp: [104.065735, 30.659462], name: "四川", childNum: 2 }
+ },
+ {
+ id: "520000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@G\\lY£in"],
+ ["@@q|mc¯tÏVSÎ"],
+ [
+ "@@hÑ£IsNgßHHªķÃh_¹¡ĝħń¦uÙùgS¯JH|sÝÅtÁïyMDč»eÕtA¤{b\\}G®u\\åPFqwÅaD
K°ºâ_£ùbµmÁÛĹM[q|hlaªāI}ѵ@swtwm^oµD鼊yVky°ÉûÛR
³e¥]RÕěħ[ƅåÛDpJiVÂF²I
»mN·£LbÒYbWsÀbpkiTZĄă¶Hq`
ĥ_J¯ae«KpÝx]aĕÛPÇȟ[ÁåŵÏő÷Pw}TÙ@Õs«ĿÛq©½m¤ÙH·yǥĘĉBµĨÕnđ]K©œáG级ÕßgǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊw¶øV¤w²Ĉ]ÊKx|`ź¦ÂÈdrcÈbe¸`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pĐ`oÒh¶pa^ÓĔ}D»^Xy`d[Kv
JPhèhCrĂĚÂ^Êƌ wZLĠ£ÁbrzOIlMMĪŐžËr×ÎeŦtw|¢mKjSǘňĂStÎŦEtqFT¾E쬬ôxÌO¢ K³ŀºäYPVgŎ¦Ŋm޼VZwVlz¤
£Tl®ctĽÚó{GAÇge~Îd¿æaSba¥KKûj®_Ä^\\ؾbP®¦x^sxjĶI_Ä Xâ¼Hu¨Qh¡À@Ëô}±GNìĎlT¸
`V~R°tbÕĊ`¸úÛtÏFDu[MfqGH·¥yAztMFe|R_GkChZeÚ°tov`xbDnÐ{E}ZèxNEÞREn[Pv@{~rĆAB§EO¿|UZ~ìUf¨J²ĂÝÆsªB`s¶fvö¦Õ~dÔq¨¸º»uù[[§´sb¤¢zþF¢Æ
ÀhÂW\\ıËIÝo±ĭŠ£þÊs}¡R]ěDg´VG¢j±®èºÃmpU[Á뺰rÜbNu¸}º¼`niºÔXĄ¤¼ÔdaµÁ_Ã
ftQQgR·Ǔv}Ý×ĵ]µWc¤F²OĩųãW½¯K©
]{LóµCIµ±Mß¿h©āq¬o½~@i~TUxŪÒ¢@£ÀEîôruńb[§nWuMÆLl¿]x}ij½"
+ ]
+ ],
+ encodeOffsets: [
+ [[112158, 27383]],
+ [[112105, 27474]],
+ [[112095, 27476]]
+ ]
+ },
+ properties: { cp: [106.713478, 26.578343], name: "贵州", childNum: 3 }
+ },
+ {
+ id: "530000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@[ùx½}ÑRHYīĺûsÍniEoã½Ya²ė{c¬ĝgĂsAØÅwďõzFjw}«Dx¿}Uũlê@HÅF¨ÇoJ´Ónũuą¡Ã¢pÒÅØ TF²xa²ËXcÊlHîAßËŁkŻƑŷÉ©hWæßUËs¡¦}teèƶStÇÇ}Fd£jĈZĆƤTč\\D}O÷£U§~ŃGåŃDĝ¸Tsd¶¶Bª¤u¢ŌĎo~t¾ÍŶÒtD¦ÚiôözØX²ghįh½Û±¯ÿm·zR¦Ɵ`ªŊÃh¢rOÔ´£Ym¼èêf¯ŪĽncÚbw\\zlvWªâ ¦gmĿBĹ£¢ƹřbĥkǫßeeZkÙIKueT»sVesbaĕ ¶®dNĄÄpªy¼³BE®lGŭCǶwêżĔÂepÍÀQƞpC¼ŲÈAÎô¶RäQ^Øu¬°_Èôc´¹ò¨P΢hlϦ´ĦÆ´sâÇŲPnÊD^¯°Upv}®BP̪jǬxSöwlfòªvqĸ|`HviļndĜĆhňem·FyÞqóSį¯³X_ĞçêtryvL¤§z¦c¦¥jnŞklD¤øz½ĜàĂŧMÅ|áƆàÊcðÂFÜáŢ¥\\\\ºİøÒÐJĴîD¦zK²ǏÎEh~CDhMn^ÌöÄ©ČZÀaüfɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~ÄqêljN¬¼HÊNQ´ê¼VظE^ŃÒyM{JLoÒęæe±Ķygã¯JYÆĭĘëo¥Šo¯hcK«z_prC´ĢÖY¼ v¸¢RÅW³Â§fǸYi³xR´ďUË`êĿUûuĆBƣöNDH«ĈgÑaB{ÊNF´¬c·Åv}eÇÃGB»If¦HňĕM
~[iwjUÁKE¾dĪçWIèÀoÈXòyŞŮÈXâÎŚj|àsRyµÖPr´þ ¸^wþTDŔHr¸RÌmfżÕâCôoxĜƌÆĮÐYtâŦÔ@]ÈǮƒ\\Ī¼Ä£UsȯLbîƲŚºyhr@ĒÔƀÀ²º\\êpJ}ĠvqtĠ@^xÀ£È¨mËÏğ}n¹_¿¢×Y_æpÅA^{½Lu¨GO±Õ½ßM¶wÁĢÛPƢ¼pcIJx|ap̬HÐŊSfsðBZ¿©XÏÒKk÷Eû¿S
rEFsÕūkóVǥʼniTL¡n{uxţÏhôŝ¬ğōNNJkyPaqÂğ¤K®YxÉƋÁ]āęDqçgOgILu\\_gz]W¼~CÔē]bµogpÑ_oď`´³Țkl`IªºÎȄqÔþ»E³ĎSJ»_f·adÇqÇc¥Á_Źw{L^ɱćxU£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣGË÷k°_^ý|_zċBZocmø¯hhcæ\\lMFlư£ĜÆyHF¨µêÕ]HA
àÓ^it `þßäkĤÎT~Wlÿ¨ÔPzUCNVv [jâôDôď[}z¿msSh¯{jïğl}šĹ[őgK©U·µË@¾m_~q¡f¹
ÅË^»f³ø}Q¡Ö˳gͱ^Ç
\\ëÃA_¿bWÏ[¶ƛé£F{īZgm@|kHǭƁć¦UĔť×ë}ǝeďºȡȘÏíBÉ£āĘPªij¶ʼnÿy©nď£G¹¡I±LÉĺÑdĉÜW¥}gÁ{aqÃ¥aıęÏZï`"
+ ],
+ encodeOffsets: [[104636, 22969]]
+ },
+ properties: { cp: [102.712251, 25.040609], name: "云南", childNum: 1 }
+ },
+ {
+ id: "540000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@ÂhľxŖxÒVºÅâAĪÝȆµę¯Ňa±r_w~uSÕňqOj]ɄQ
£Z
UDûoY»©M[L¼qãË{VÍçWVi]ë©Ä÷àyƛhÚU°adcQ~Mx¥cc¡ÙaSyFÖkuRýq¿ÔµQĽ³aG{¿FµëªéĜÿª@¬·K·àariĕĀ«V»ŶĴūgèLǴŇƶaftèBŚ£^âǐÝ®M¦ÁǞÿ¬LhJ¾óƾƺcxwf]Y
´¦|QLn°adĊ
\\¨oǀÍŎ´ĩĀd`tÊQŞŕ|¨C^©Ĉ¦¦ÎJĊ{ëĎjª²rÐl`¼Ą[t|¦Stè¾PÜK¸dƄı]s¤î_v¹ÎVòŦj£Əsc¬_Ğ´|Ł¦Av¦w`ăaÝaa¢e¤ı²©ªSªÈMĄwÉØŔì@T¤Ę\\õª@þo´xA sÂtŎKzó´ÇĊµ¢r^nĊƬ×üG¢³ {âĊ]G~bÀgVjzlhǶfOfdªB]pjTOtĊn¤}®¦Č¥d¢¼»ddY¼t¢eȤJ¤}Ǿ¡°§¤AÐlc@ĝsªćļđAçwxUuzEÖġ~AN¹ÄÅȀŻ¦¿ģŁéì±H
ãd«g[ؼēÀcīľġ¬cJµ
ÐʥVȝ¸ßS¹ý±ğkƁ¼ą^ɛ¤Ûÿb[}¬ōõÃ]ËNm®g@Bg}ÍF±ǐyL¥íCIijÏ÷Ñį[¹¦[âšEÛïÁÉdƅß{âNÆāŨß¾ě÷yC£k´ÓH@¹TZ¥¢į·ÌAЧ®Zc
v½Z¹|ÅWZqgW|ieZÅYVÓqdqbc²R@c¥Rã»GeeƃīQ}J[ÒK
¬Ə|oėjġĠÑN¡ð¯EBčnwôɍėª²CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛęgſ¶ҍć`ĘąŌJÞä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷f±iMÝ@ĥ°G¬ÃM¥n£Øąğ¯ß§aëbéüÑOčk£{\\eµª×MÉfm«Ƒ{Å×Gŏǩãy³©WÑăû··Qòı}¯ãIéÕÂZ¨īès¶ZÈsæĔTŘvgÌsN@îá¾ó@ÙwU±ÉT廣TđWxq¹Zobs[ׯcĩvėŧ³BM|¹kªħ¥TzNYnÝßpęrñĠĉRS~½ěVVµõ«M££µBĉ¥áºae~³AuĐh`ܳç@BÛïĿa©|z²Ý¼D£àč²ŸIûI āóK¥}rÝ_Á´éMaň¨~ªSĈ½½KÙóĿeƃÆB·¬ën×W|Uº}LJrƳlŒµ`bÔ`QÐÓ@s¬ñIÍ@ûws¡åQÑßÁ`ŋĴ{ĪTÚÅTSijYo|Ç[ǾµMW¢ĭiÕØ¿@Mh
pÕ]jéò¿OƇĆƇpêĉâlØwěsǩĵ¸c
bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB\\qTGªÇĜçPoÿfñòą¦óQīÈáPābß{ZŗĸIæÅhnszÁCËìñÏ·ąĚÝUm®óL·ăUÈíoù´Êj°ŁŤ_uµ^°ìÇ@tĶĒ¡ÆM³Ģ«İĨÅ®ğRāðggheÆ¢zÊ©Ô\\°ÝĎz~ź¤PnMĪÖB£kn駿ćĆKĒ°¼L¶èâz¨u¦¥LDĘz¬ýÎmĘd¾ßFzhg²Fy¦ĝ¤ċņbÎ@yĄæm°NĮZRÖíJ²öLĸÒ¨Y®ƌÐVàtt_ÚÂyĠz]ŢhzĎ{ÂĢXc|ÐqfO¢¤ögÌHNPKŖUú´xx[xvĐCûĀìÖT¬¸^}Ìsòd´_KgžLĴ
ÀBon|H@Êx¦BpŰŌ¿fµƌA¾zLjRx¶FkĄźRzŀ~¶[´HnªVƞuĒȨƎcƽÌm¸ÁÈM¦x͊ëÀxdžBú^´W£dkɾĬpw˂ØɦļĬIŚÊnŔa¸~J°îlɌxĤÊÈðhÌ®gT´øàCÀ^ªerrƘd¢İP|Ė ŸWªĦ^¶´ÂLaT±üWƜǀRÂŶUńĖ[QhlLüAÜ\\qRĄ©"
+ ],
+ encodeOffsets: [[90849, 37210]]
+ },
+ properties: { cp: [91.132212, 29.660361], name: "西藏", childNum: 1 }
+ },
+ {
+ id: "610000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@p¢ȮµûGĦ}Ħðǚ¶òƄjɂz°{ºØkÈęâ¦jªBg\\ċ°s¬]jú EȌdž¬stRÆdĠİwܸôW¾ƮłÒ_{Ìû¼jº¹¢GǪÒ¯ĘZ`ºŊecņą~BÂgzpâēòYǠȰÌTΨÂW|fcă§uF@N¢XLRMº[ğȣſï|¥Jkc`sʼnǷY¹W@µ÷K
ãï³ÛIcñ·VȋÚÒķø©þ¥yÓğęmWµÎumZyOŅƟĥÓ~sÑL¤µaÅ
Y¦ocyZ{y c]{Ta©`U_Ěē£ωÊƍKùK¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑdìUYOuFÕÈYvÁCqÓTǢí§·S¹NgV¬ë÷Át°DدC´ʼnƒópģ}ċcEË
FéGU¥×K
§¶³BČ}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO
ÿEËߌĤNĔwƇÄńwĪo[_KÓª³ÙnKÇěÿ]ďă_d©·©Ýŏ°Ù®g]±ßå¬÷m\\iaǑkěX{¢|ZKlçhLtŇîŵœè[É@ƉĄEtƇϳħZ«mJ
×¾MtÝĦ£IwÄå\\Õ{OwĬ©LÙ³ÙgBƕŀrÌĢŭO¥lãyC§HÍ£ßEñX¡°ÙCgpťzb`wIvA|§hoĕ@E±iYd¥OĻ¹S|}F@¾oAO²{tfÜ¢FǂÒW²°BĤh^Wx{@¬F¸¡ķn£P|ªĴ@^ĠĈæbÔc¶lYi
^MicĎ°Â[ävï¶gv@ÀĬ·lJ¸sn|¼u~a]ÆÈtŌºJpþ£KKf~¦UbyäIĺãnÔ¿^ŵMThĠܤko¼Ŏìąǜh`[tRd²IJ_XPrɲlXiL§à¹H°Ȧqº®QCbAŌJ¸ĕÚ³ĺ§ `d¨YjiZvRĺ±öVKkjGȊÄePĞZmļKÀ[`ösìhïÎoĬdtKÞ{¬èÒÒBÔpIJÇĬJŊ¦±J«Y§@·pHµàåVKepWftsAÅqC·¬ko«pHÆuK@oHĆÛķhxenS³àǍrqƶRbzy¸ËÐl¼EºpĤ¼x¼½~Ğà@ÚüdK^mÌSj"
+ ],
+ encodeOffsets: [[110234, 38774]]
+ },
+ properties: { cp: [108.948024, 34.263161], name: "陕西", childNum: 1 }
+ },
+ {
+ id: "620000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@VuUv"],
+ [
+ "@@ũEĠtt~nkh`Q¦ÅÄÜdwAb×ĠąJ¤DüègĺqBqj°lI¡ĨÒ¤úSHbjÎB°aZ¢KJO[|A£Dx}NìHUnrk kp¼Y kMJn[aGáÚÏ[½rc}aQxOgsPMnUsncZ
sKúvAtÞġ£®ĀYKdnFw¢JE°Latf`¼h¬we|Æbj}GA·~W`¢MC¤tL©IJ°qdfObÞĬ¹ttu`^ZúE`[@Æsîz®¡CƳƜG²R¢RmfwĸgÜą G@pzJM½mhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬²I¥IʼnÈīoıÓÑAçÑ|«LÝcspīðÍg
të_õ\\ĉñLYnĝgRǡÁiHLlõUĹ²uQjYi§Z_c¨´ĹĖÙ·ŋI
aBDR¹ȥr¯GºßK¨jWkɱOqWij\\aQ\\sg_ĆǛōëp»£lğÛgSŶN®À]ÓämĹãJaz¥V}Le¤Lýo¹IsŋÅÇ^bz
³tmEÁ´a¹cčecÇNĊãÁ\\č¯dNj]jZµkÓdaćå]ğij@ ©O{¤ĸm¢E·®«|@Xwg]Aģ±¯XǁÑdzªcwQÚŝñsÕ³ÛV_ý¥\\ů¥©¾÷w©WÕÊĩhÿÖÁRo¸V¬âDb¨hûxÊ×nj~Zâg|XÁnßYoº§ZÅŘv[ĭÖʃuďxcVbnUSf
B¯³_TzºÎO©çMÑ~M³]µ^püµÄY~y@X~¤Z³[Èōl@®Å¼£QK·Di¡ByÿQ_´D¥hŗy^ĭÁZ]cIzýah¹MĪğPs{ò²Vw¹t³ŜË[Ñ}X\\gsF£sPAgěp×ëfYHāďÖqēŭOÏëdLü\\it^c®Rʺ¶¢H°mrY£B¹čIoľu¶uI]vģSQ{UŻÅ}QÂ|Ì°ƅ¤ĩŪU ęĄÌZÒ\\v²PĔ»ƢNHĂyAmƂwVm`]ÈbH`Ì¢²ILvĜH®¤Dlt_¢JJÄämèÔDëþgºƫaʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b
ð÷®üszMzÖĖQdȨýv§Tè|ªHþa¸|Ð ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v·À|\\ƁĚN´ĜçèÁz]ġ¤²¨QÒŨTIlªťØ}¼˗ƦvÄùØE«FïËIqōTvāÜŏíÛßÛVj³âwGăÂíNOPìyV³ʼnĖýZso§HÑiYw[ß\\X¦¥c]ÔƩÜ·«jÐqvÁ¦m^ċ±R¦ƈťĚgÀ»IïĨʗƮ°ƝĻþÍAƉſ±tÍEÕÞāNUÍ¡\\ſčåÒʻĘm ƭÌŹöʥëQ¤µÇcƕªoIýIÉ_mkl³ăƓ¦j¡YzŇi}Msßõīʋ }ÁVm_[n}eıUĥ¼ªI{ΧDÓƻėojqYhĹT©oūĶ£]ďxĩǑMĝq`B´ƃ˺Чç~²ņj@¥@đ´ί}ĥtPńǾV¬ufÓÉCtÓ̻
¹£G³]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼĤŊɲĖÂKq´ï¦ºĒDzņɾªǀÞĈĂD½ĄĎÌŗĞrôñnN¼â¾ʄľԆ|DŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿ĽĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY
tÁƤyAã˾J@ǝrý@¤
rz¸oP¹ɐÚyáHĀ[Jw
cVeȴÏ»ÈĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔĹŊũ~ËUă{ĻƹɁύȩþĽvĽƓÉ@ēĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶¨c~c¼īeXǚ\\đ¾JwÀďksãAfÕ¦L}waoZD½Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LFLzĈôe]gx}|KK}xklL]c¦£fRtív¦PĤoH{tK"
+ ]
+ ],
+ encodeOffsets: [[[108619, 36299]], [[108589, 36341]]]
+ },
+ properties: { cp: [103.823557, 36.058039], name: "甘肃", childNum: 2 }
+ },
+ {
+ id: "630000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@InJm"],
+ [
+ "@@CƽOŃĦsΰ~Ē³¦@@Ņi±è}ШƄ˹A³r_ĞǒNĪĐw¤^ŬĵªpĺSZgrpiƼĘÔ¨C|ÍJ©Ħ»®VIJ~f\\m `UnÂ~ʌĬàöNt~ňjy¢ZiƔ¥Ąk´nl`JÊJþ©pdƖ®È£¶ìRʦźõƮËnʼėæÑƀĎ[¢VÎĂMÖÝÎF²sƊƀÎBļýƞ¯ʘƭðħ¼Jh¿ŦęΌƇ¥²Q]Č¥nuÂÏri¸¬ƪÛ^Ó¦d¥[Wà
x\\ZjÒ¨GtpþYŊĕ´zUOëPîMĄÁxH´áiÜUàîÜŐĂÛSuŎrJð̬EFÁú×uÃÎkrĒ{V}İ«O_ÌËĬ©ÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u
ºµ[gt£¸OƤĿéYõ·kĀq]juw¥DĩƍõÇPéĽG©ã¤G
uȧþRcÕĕNyyûtøï»a½ē¿BMoį£Íj}éZËqbʍƬh¹ìÿÓAçãnIáI`ks£CGěUy×Cy
@¶ʡÊBnāzGơMē¼±O÷õJËĚăVĪũƆ£¯{ËL½ÌzżVR|ĠTbuvJvµhĻĖHAëáa
OÇðñęNw
œľ·LmI±íĠĩPÉ×®ÿscB³±JKßĊ«`
ađ»·QAmOVţéÿ¤¹SQt]]Çx±¯A@ĉij¢Óļ©l¶ÅÛrŕspãRk~¦ª]Į´FRådČsCqđéFn¿ÅƃmÉx{W©ºƝºįkÕƂƑ¸wWūЩÈF£\\tÈ¥ÄRÈýÌJ lGr^×äùyÞ³fjc¨£ÂZ|ǓMĝÏ@ëÜőRĝ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³ÞIňµç½©C¡į÷¯B»|St»]vųs»}MÓ ÿʪƟǭA¡fs»PY¼c¡»¦cċ¥£~msĉPSi^o©AecPeǵkgyUi¿h}aHĉ^|á´¡HØûÅ«ĉ®]m¡qĉ¶³ÈyôōLÁstB®wn±ă¥HSòė£Së@לÊăxÇN©©T±ª£IJ¡fb®Þbb_Ą¥xu¥B{łĝ³«`dƐt¤ťiñÍUuºí`£^tƃIJc·ÛLO½sç¥Ts{ă\\_»kϱq©čiìĉ|ÍI¥ć¥]ª§D{ŝŖÉR_sÿc³ĪōƿΧp[ĉc¯bKmR¥{³Ze^wx¹dƽŽôIg §Mĕ ƹĴ¿ǣÜÍ]Ý]snåA{eƭ`ǻŊĿ\\ijŬűYÂÿ¬jĖqßb¸L«¸©@ěĀ©ê¶ìÀEH|´bRľÓ¶rÀQþvl®ÕETzÜdb hw¤{LRdcb¯ÙVgƜßzÃôì®^jUèXÎ|UäÌ»rK\\ªN¼pZCüVY¤ɃRi^rPŇTÖ}|br°qňbĚ°ªiƶGQ¾²x¦PmlŜ[Ĥ¡ΞsĦÔÏâ\\ªÚŒU\\f
¢N²§x|¤§xĔsZPòʛ²SÐqF`ªVÞŜĶƨVZÌL`¢dŐIqr\\oäõF礻Ŷ×h¹]ClÙ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ´ÃbEÄlbʔC|CŮkƮ[ʼ¬ň´KŮÈΰÌĪ¶ƶlðļATUvdTGº̼ÔsÊDÔveOg"
+ ]
+ ],
+ encodeOffsets: [[[105308, 37219]], [[95370, 40081]]]
+ },
+ properties: { cp: [101.778916, 36.623178], name: "青海", childNum: 2 }
+ },
+ {
+ id: "640000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ [
+ "@@KëÀęĞ«Oęȿȕı]ʼn¡åįÕÔ«ǴõƪĚQÐZhv K°öqÀÑS[ÃÖHƖčËnL]ûc
Ùß@ĝ¾}w»»oģF¹»kÌÏ·{zP§B¢íyÅt@@á]Yv_ssģ¼ißĻL¾ġsKD£¡N_
X¸}B~HaiÅf{«x»ge_bsKF¯¡IxmELcÿZ¤ĢÝsuBLùtYdmVtNmtOPhRw~bd
¾qÐ\\âÙH\\bImlNZ»loqlVmGā§~QCw¤{A\\PKNY¯bFkC¥sks_Ã\\ă«¢ħkJi¯rrAhĹûç£CUĕĊ_ÔBixÅÙĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~hw^ófćKyEKzuÔ¡qQ¤xZÑ¢^ļöܾEp±âbÊÑÆ^fk¬
NC¾YpxbK~¥eÖäBlt¿Đx½I[ĒǙWf»Ĭ}d§dµùEuj¨IÆ¢¥dXªƅx¿]mtÏwßRĶX¢͎vÆzƂZò®ǢÌʆCrâºMÞzÆMÒÊÓŊZľr°Î®Ȉmª²ĈUªĚîøºĮ¦ÌĘk^FłĬhĚiĀĖ¾iİbjÕ"
+ ],
+ ["@@mfwěwMrŢªv@G"]
+ ],
+ encodeOffsets: [[[109366, 40242]], [[108600, 36303]]]
+ },
+ properties: { cp: [106.278179, 38.46637], name: "宁夏", childNum: 2 }
+ },
+ {
+ id: "650000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@QØĔ²X¨~ǘBºjʐßØvKƔX¨vĊO÷¢i@~cĝe_«E}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX
êÎf`C¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥OéÈ¿ÖğǤǷÂFÒzÉx[]Ĥĝœ¦EP}ûƥé¿İƷTėƫœŕƅƱB»Đ±ēO
¦E}`cȺrĦáŖuÒª«IJπdƺÏØZƴwʄ¤ĖGĐǂZĶèH¶}ÚZצʥĪï|ÇĦMŔ»İĝLjì¥Βba¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»òmqóŘĝč˾ăC
ćāƿÝɽ©DZŅ¹đ¥³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕUv£ƁQïƵkŏ½ΉÃŭdzLŇʻ«ƭ\\lŭD{ʓDkaFÃÄa³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍöůʼnT¡c_ËKYƧUśĵÝU_©rETÏʜ±OñtYwē¨{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\śnkOw¥±T»ƷFɯàĩÞáB¹Æ
ÑUwŕĽw[mG½Èå~Æ÷QyěCFmĭZīŵVÁƿQƛûXS²b½KϽĉS©ŷXĕ{ĕK·¥Ɨcqq©f¿]ßDõU³hgËÇïģÉɋwk¯í}I·œbmÉřīJɥĻˁ×xoɹīlc
¤³Xù]DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®ƝvUm©³G\\}µĿQyŹlăµEwLJQ½yƋBe¶ŋÀůo¥AÉw@{Gpm¿AijŽKLh³`ñcËtW±»ÕSëüÿďDu\\wwwù³VLŕOMËGh£õP¡erÏd{ġWÁ
č|yšg^ğyÁzÙs`s|ÉåªÇ}m¢Ń¨`x¥ù^}Ì¥H«YªƅAйn~ź¯f¤áÀzgÇDIÔ´AňĀÒ¶ûEYospõD[{ù°]uJqU|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw ÞkrťË¿XGÉbřaDü·Ē÷Aê[ÄäI®BÕĐÞ_¢āĠpÛÄȉĖġDKwbmÄNôfƫVÉvidzHQµâFùÂœ³¦{YGd¢ĚÜO {Ö¦ÞÍÀP^bƾl[vt×ĈÍE˨¡Đ~´î¸ùÎhuè`¸HÕŔVºwĠââWò@{ÙNÝ´ə²ȕn{¿¥{l÷eé^eďXj©î\\ªÑòÜìc\\üqÕ[Č¡xoÂċªbØø|¶ȴZdÆÂońéG\\¼C°ÌÆn´nxÊOĨŪƴĸ¢¸òTxÊǪMīĞÖŲÃɎOvʦƢ~FRěò¿ġ~åŊúN¸qĘ[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾ĄYÒ©ÊfºmÔĘcDoĬMŬS¤s²ʘÚžȂVŦ èW°ªB|IJXŔþÈJĦÆæFĚêYĂªĂ]øªŖNÞüAfɨJ¯ÎrDDĤ`mz\\§~D¬{vJ«lµĂb¤pŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMTòP÷fØĶK¢ȝ˔Sô¹òEð`Ɩ½ǒÂň×äı§ĤƝ§C~¡hlåǺŦŞkâ~}FøàIJaĞfƠ¥Ŕd®U¸źXv¢aƆúŪtŠųƠjdƺƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹\\ĜÑŚ¶ZƄ³àjĨoâȴLÊȮĐĚăÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTiƢ¾ªì°`öøu®Ê¾ãØ"
+ ],
+ encodeOffsets: [[88824, 50096]]
+ },
+ properties: { cp: [87.617733, 43.792818], name: "新疆", childNum: 1 }
+ },
+ {
+ id: "110000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@ĽOÁûtŷmiÍt_H»Ĩ±d`¹{bw
Yr³S]§§o¹qGtm_SŧoaFLgQN_dV@Zom_ć\\ßc±x¯oœRcfe
£o§ËgToÛJíĔóu
|wP¤XnO¢ÉŦ¯rNÄā¤zâŖÈRpŢZÚ{GrFt¦Òx§ø¹RóäV¤XdżâºWbwŚ¨Ud®bêņ¾jnŎGŃŶnzÚSeîĜZczî¾i]ÍQaúÍÔiþĩȨWĢü|Ėu[qb[swP@ÅğP¿{\\¥A¨ÏѨj¯X\\¯MKpA³[H
īu}}"
+ ],
+ encodeOffsets: [[120023, 41045]]
+ },
+ properties: { cp: [116.405285, 39.904989], name: "北京", childNum: 1 }
+ },
+ {
+ id: "120000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: [
+ "@@ŬgX§Ü«E
¶F̬O_ïlÁgz±AXeµÄĵ{¶]gitgIj·¥îakS¨ÐƎk}ĕ{gBqGf{¿aU^fIư³õ{YıëNĿk©ïËZŏR§òoY×Ógc
ĥs¡bġ«@dekąI[nlPqCnp{ō³°`{PNdƗqSÄĻNNâyj]äÒD ĬH°Æ]~¡HO¾X}ÐxgpgWrDGpù^LrzWxZ^¨´T\\|~@IzbĤjeĊªz£®ĔvěLmV¾Ô_ÈNW~zbĬvG²ZmDM~~"
+ ],
+ encodeOffsets: [[120237, 41215]]
+ },
+ properties: { cp: [117.190182, 39.125596], name: "天津", childNum: 1 }
+ },
+ {
+ id: "310000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@ɧư¬EpƸÁxc"],
+ ["@@©ª"],
+ ["@@MA"],
+ ["@@QpİE§ÉC¾"],
+ ["@@bŝÕÕEȣÚƥêImɇǦèÜĠÚÃƌÃ͎ó"],
+ [
+ "@@ǜûȬɋŭ×^sYɍDŋŽąñCG²«ªč@h_p¯A{oloY¬j@IJ`gQÚhr|ǀ^MIJvtbe´R¯Ô¬¨Yô¤r]ìƬį"
+ ]
+ ],
+ encodeOffsets: [
+ [[124702, 32062]],
+ [[124547, 32200]],
+ [[124808, 31991]],
+ [[124726, 32110]],
+ [[124903, 32376]],
+ [[124438, 32149]]
+ ]
+ },
+ properties: { cp: [121.472644, 31.231706], name: "上海", childNum: 6 }
+ },
+ {
+ id: "500000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ [
+ "@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êÐqHðqĖä¥^CÆIj²p
\\_ æüY|[YxƊæu°xb®
Űb@~¢NQt°¶Sæ Ê~rljĔëĚ¢~uf`faĔJåĊnÖ]jƎćÊ@£¾a®£Ű{ŶĕFègLk{Y|¡ĜWƔtƬJÑxq±ĢN´òKLÈüD|s`ŋć]Ã`đMûƱ½~Y°ħ`ƏíW½eI½{aOIrÏ¡ĕŇapµÜƅġ^ÖÛbÙŽŏml½SêqDu[RãË»ÿw`»y¸_ĺę}÷`M¯ċfCVµqʼn÷Zgg`d½pDOÎCn^uf²ènh¼WtƏxRGg¦
pVFI±G^Ic´ecGĹÞ½sëĬhxW}KÓeXsbkF¦LØgTkïƵNï¶}Gyw\\oñ¡nmĈzj@Óc£»Wă¹Ój_m»¹·~MvÛaq»ê\\ÂoVnÓØͲ«bq¿efE Ĝ^Q~ Évýş¤²ĮpEİ}zcĺL½¿gÅ¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u_n»_At©Þűā§IVeëY}{VPÀFA¨ąB}q@|Ou\\FmQFÝ
Mwå}]|FmÏCawu_p¯sfÙgY
DHl`{QEfNysB¦zG¸rHeN\\CvEsÐùÜ_·ÖĉsaQ¯}_UxÃđqNH¬Äd^ÝŰR¬ã°wećJE·vÝ·HgéFXjÉê`|ypxkAwWĐpb¥eOsmzwqChóUQl¥F^lafanòsrEvfQdÁUVfÎvÜ^eftET¬ôA\\¢sJnQTjPØxøK|nBzĞ»LY
FDxÓvr[ehľvN¢o¾NiÂxGpâ¬zbfZo~hGi]öF||NbtOMn eA±tPTLjpYQ|SHYĀxinzDJÌg¢và¥Pg_ÇzIIII£®S¬Øsμ£N"
+ ],
+ ["@@ifjN@s"]
+ ],
+ encodeOffsets: [[[109628, 30765]], [[111725, 31320]]]
+ },
+ properties: { cp: [106.504962, 29.533155], name: "重庆", childNum: 2 }
+ },
+ {
+ id: "810000",
+ type: "Feature",
+ geometry: {
+ type: "MultiPolygon",
+ coordinates: [
+ ["@@AlBk"],
+ ["@@mn"],
+ ["@@EpFo"],
+ [
+ "@@ea¢pl¸Eõ¹hj[]ÔCÎ@lj¡uBX
´AI¹
[yDU]W`çwZkmc
MpÅv}IoJlcafŃK°ä¬XJmÐ đhI®æÔtSHnEÒrÈc"
+ ],
+ ["@@rMUwAS®e"]
+ ],
+ encodeOffsets: [
+ [[117111, 23002]],
+ [[117072, 22876]],
+ [[117045, 22887]],
+ [[116975, 23082]],
+ [[116882, 22747]]
+ ]
+ },
+ properties: { cp: [114.173355, 22.320048], name: "香港", childNum: 5 }
+ },
+ {
+ id: "820000",
+ type: "Feature",
+ geometry: {
+ type: "Polygon",
+ coordinates: ["@@kÊd°å§s"],
+ encodeOffsets: [[116279, 22639]]
+ },
+ properties: { cp: [113.54909, 22.198951], name: "澳门", childNum: 1 }
+ }
+ ],
+ UTF8Encoding: true
+ });
+});
diff --git a/zhi-admin-ui/src/assets/js/config.js b/zhi-admin-ui/src/assets/js/config.js
new file mode 100644
index 0000000..ce25e62
--- /dev/null
+++ b/zhi-admin-ui/src/assets/js/config.js
@@ -0,0 +1,4 @@
+export default {
+ TENCENT_CAPTCHA: "2088053498",
+ UPLOAD_SIZE: 200 // 压缩文件大小
+};
diff --git a/zhi-admin-ui/src/assets/js/emoji.js b/zhi-admin-ui/src/assets/js/emoji.js
new file mode 100644
index 0000000..70b415d
--- /dev/null
+++ b/zhi-admin-ui/src/assets/js/emoji.js
@@ -0,0 +1,115 @@
+export default {
+ "[微笑]": "😀",
+
+ "[笑]": " https://static.talkxj.com/emoji/dx.jpg",
+
+ "[呲牙]": "https://static.talkxj.com/emoji/cy.jpg",
+
+ "[OK]": "https://static.talkxj.com/emoji/ok.jpg",
+
+ "[星星眼]": "https://static.talkxj.com/emoji/xxy.jpg",
+
+ "[哦呼]": "https://static.talkxj.com/emoji/oh.jpg",
+
+ "[嫌弃]": "https://static.talkxj.com/emoji/xq.jpg",
+
+ "[喜欢]": "https://static.talkxj.com/emoji/xh.jpg",
+
+ "[酸了]": "https://static.talkxj.com/emoji/sl.jpg",
+
+ "[大哭]": "https://static.talkxj.com/emoji/dq.jpg?",
+
+ "[害羞]": "https://static.talkxj.com/emoji/hx.jpg",
+
+ "[无语]": "https://static.talkxj.com/emoji/wy.jpg",
+
+ "[疑惑]": "https://static.talkxj.com/emoji/yh.jpg",
+
+ "[调皮]": "https://static.talkxj.com/emoji/tiaopi.jpg",
+
+ "[笑哭]": "https://static.talkxj.com/emoji/xiaoku.jpg",
+
+ "[奸笑]": "https://static.talkxj.com/emoji/jianxiao.jpg",
+
+ "[偷笑]": "https://static.talkxj.com/emoji/touxiao.jpg",
+
+ "[大笑]": "https://static.talkxj.com/emoji/daxiao.jpg",
+
+ "[阴险]": "https://static.talkxj.com/emoji/yinxian.jpg",
+
+ "[捂脸]": "https://static.talkxj.com/emoji/wulian.jpg",
+
+ "[呆]": "https://static.talkxj.com/emoji/dai.jpg",
+
+ "[抠鼻]": "https://static.talkxj.com/emoji/koubi.jpg",
+
+ "[惊喜]": "https://static.talkxj.com/emoji/jingxi.jpg",
+
+ "[惊讶]": "https://static.talkxj.com/emoji/jingya.jpg",
+
+ "[捂脸哭]": "https://static.talkxj.com/emoji/wulianku.jpg",
+
+ "[妙啊]": "https://static.talkxj.com/emoji/miaoa.jpg",
+
+ "[狗头]": "https://static.talkxj.com/emoji/goutou.jpg",
+
+ "[滑稽]": "https://static.talkxj.com/emoji/huaji.jpg",
+
+ "[吃瓜]": "https://static.talkxj.com/emoji/chigua.jpg",
+
+ "[打call]": "https://static.talkxj.com/emoji/dacall.jpg",
+
+ "[点赞]": "https://static.talkxj.com/emoji/dianzan.jpg",
+
+ "[鼓掌]": "https://static.talkxj.com/emoji/guzhang.jpg",
+
+ "[尴尬]": "https://static.talkxj.com/emoji/ganga.jpg",
+
+ "[冷]": "https://static.talkxj.com/emoji/leng.jpg",
+
+ "[灵魂出窍]": "https://static.talkxj.com/emoji/linghunchuqiao.jpg",
+
+ "[委屈]": "https://static.talkxj.com/emoji/weiqu.jpg",
+
+ "[傲娇]": "https://static.talkxj.com/emoji/aojiao.jpg",
+
+ "[疼]": "https://static.talkxj.com/emoji/teng.jpg",
+
+ "[吓]": "https://static.talkxj.com/emoji/xia.jpg?",
+
+ "[生病]": "https://static.talkxj.com/emoji/shengbing.jpg",
+
+ "[吐]": "https://static.talkxj.com/emoji/tu.jpg",
+
+ "[嘘声]": "https://static.talkxj.com/emoji/xusheng.jpg",
+
+ "[捂眼]": "https://static.talkxj.com/emoji/wuyan.jpg",
+
+ "[思考]": "https://static.talkxj.com/emoji/sikao.jpg",
+
+ "[再见]": "https://static.talkxj.com/emoji/zaijian.jpg",
+
+ "[翻白眼]": "https://static.talkxj.com/emoji/fanbaiyan.jpg",
+
+ "[哈欠]": "https://static.talkxj.com/emoji/haqian.jpg",
+
+ "[奋斗]": "https://static.talkxj.com/emoji/fengdou.jpg",
+
+ "[墨镜]": "https://static.talkxj.com/emoji/mojing.jpg",
+
+ "[撇嘴]": "https://static.talkxj.com/emoji/piezui.jpg",
+
+ "[难过]": "https://static.talkxj.com/emoji/nanguo.jpg",
+
+ "[抓狂]": "https://static.talkxj.com/emoji/zhuakuang.jpg",
+
+ "[生气]": "https://static.talkxj.com/emoji/shengqi.jpg",
+
+ "[爱心]": "https://static.talkxj.com/emoji/aixin.jpg",
+
+ "[胜利]": "https://static.talkxj.com/emoji/shengli.jpg",
+
+ "[保佑]": "https://static.talkxj.com/emoji/baoyou.jpg",
+
+ "[支持]": "https://static.talkxj.com/emoji/zhichi.jpg"
+};
diff --git a/zhi-admin-ui/src/assets/js/menu.js b/zhi-admin-ui/src/assets/js/menu.js
new file mode 100644
index 0000000..560e06c
--- /dev/null
+++ b/zhi-admin-ui/src/assets/js/menu.js
@@ -0,0 +1,41 @@
+import Layout from "@/layout/index.vue";
+import router from "../../router";
+import store from "../../store";
+import axios from "axios";
+import Vue from "vue";
+
+export function generaMenu() {
+ // 查询用户菜单
+ axios.get("/api/admin/user/menus").then(({ data }) => {
+ if (data.flag) {
+ var userMenuList = data.data;
+ userMenuList.forEach((item) => {
+ if (item.icon != null) {
+ item.icon = "iconfont " + item.icon;
+ }
+ if (item.component == "Layout") {
+ item.component = Layout;
+ }
+ if (item.children && item.children.length > 0) {
+ item.children.forEach((route) => {
+ route.icon = "iconfont " + route.icon;
+ route.component = loadView(route.component);
+ });
+ }
+ });
+ // 添加侧边栏菜单
+ store.commit("saveUserMenuList", userMenuList);
+ // 添加菜单到路由
+ //@ts-ignore
+ router.addRoutes(userMenuList);
+ } else {
+ Vue.prototype.$message.error(data.message);
+ router.push({ path: "/login" });
+ }
+ });
+}
+
+export const loadView = (view) => {
+ // 路由懒加载
+ return (resolve) => require([`@/views${view}`], resolve);
+};
diff --git a/zhi-admin-ui/src/assets/js/newEmoji.js b/zhi-admin-ui/src/assets/js/newEmoji.js
new file mode 100644
index 0000000..647dc64
--- /dev/null
+++ b/zhi-admin-ui/src/assets/js/newEmoji.js
@@ -0,0 +1,75 @@
+export default {
+ "[微笑]": "🙂",
+
+ "[笑]": "😃",
+
+ "[大笑]": "😄 ",
+
+ "[嘻嘻]": "😁",
+
+ "[斜眼笑]": "😆",
+
+ "[苦笑]": "😅",
+
+ "[笑出泪]": "🤣",
+
+ "[眨眼]": "😉",
+
+ "[喜笑颜开]": "🥰",
+
+ "[花痴]": "😍",
+
+ "[崇拜]": "🤩",
+
+ "[飞吻]": "😘",
+
+ "[亲亲]": "😗",
+
+ "[羞涩]": "😚",
+
+ "[好吃]": "😋",
+
+ "[吐舌]": "😛",
+
+ "[滑稽]": "🤪",
+
+ "[挑眉]": "🤨",
+
+ "[不高兴]": "😒",
+
+ "[流口水]": "🤤",
+
+ "[睡着]": "😴",
+
+ "[感冒]": "😷",
+
+ "[受伤]": "🤕",
+
+ "[冷脸]": "🥶",
+
+ "[头晕]": "😵",
+
+ "[墨镜笑]": "😎",
+
+ "[震惊]": "😲",
+
+ "[累]": "😫",
+
+ "[生气]": "😡",
+
+ "[小丑]": "🤡",
+
+ "[机器人]": "🤖",
+
+ "[爱心]": "💗",
+
+ "[中箭心]": "💘",
+
+ "[情书]": "💌",
+
+ "[一百分]": "💯",
+
+ "[爆炸]": "💥",
+
+ "[汗滴]": "💦",
+};
diff --git a/zhi-admin-ui/src/assets/logo/logo.png b/zhi-admin-ui/src/assets/logo/logo.png
new file mode 100644
index 0000000..cdd1a7d
Binary files /dev/null and b/zhi-admin-ui/src/assets/logo/logo.png differ
diff --git a/zhi-admin-ui/src/assets/styles/btn.scss b/zhi-admin-ui/src/assets/styles/btn.scss
new file mode 100644
index 0000000..e6ba1a8
--- /dev/null
+++ b/zhi-admin-ui/src/assets/styles/btn.scss
@@ -0,0 +1,99 @@
+@import './variables.scss';
+
+@mixin colorBtn($color) {
+ background: $color;
+
+ &:hover {
+ color: $color;
+
+ &:before,
+ &:after {
+ background: $color;
+ }
+ }
+}
+
+.blue-btn {
+ @include colorBtn($blue)
+}
+
+.light-blue-btn {
+ @include colorBtn($light-blue)
+}
+
+.red-btn {
+ @include colorBtn($red)
+}
+
+.pink-btn {
+ @include colorBtn($pink)
+}
+
+.green-btn {
+ @include colorBtn($green)
+}
+
+.tiffany-btn {
+ @include colorBtn($tiffany)
+}
+
+.yellow-btn {
+ @include colorBtn($yellow)
+}
+
+.pan-btn {
+ font-size: 14px;
+ color: #fff;
+ padding: 14px 36px;
+ border-radius: 8px;
+ border: none;
+ outline: none;
+ transition: 600ms ease all;
+ position: relative;
+ display: inline-block;
+
+ &:hover {
+ background: #fff;
+
+ &:before,
+ &:after {
+ width: 100%;
+ transition: 600ms ease all;
+ }
+ }
+
+ &:before,
+ &:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ height: 2px;
+ width: 0;
+ transition: 400ms ease all;
+ }
+
+ &::after {
+ right: inherit;
+ top: inherit;
+ left: 0;
+ bottom: 0;
+ }
+}
+
+.custom-button {
+ display: inline-block;
+ line-height: 1;
+ white-space: nowrap;
+ cursor: pointer;
+ background: #fff;
+ color: #fff;
+ -webkit-appearance: none;
+ text-align: center;
+ box-sizing: border-box;
+ outline: 0;
+ margin: 0;
+ padding: 10px 15px;
+ font-size: 14px;
+ border-radius: 4px;
+}
diff --git a/zhi-admin-ui/src/assets/styles/element-ui.scss b/zhi-admin-ui/src/assets/styles/element-ui.scss
new file mode 100644
index 0000000..363092a
--- /dev/null
+++ b/zhi-admin-ui/src/assets/styles/element-ui.scss
@@ -0,0 +1,92 @@
+// cover some element-ui styles
+
+.el-breadcrumb__inner,
+.el-breadcrumb__inner a {
+ font-weight: 400 !important;
+}
+
+.el-upload {
+ input[type="file"] {
+ display: none !important;
+ }
+}
+
+.el-upload__input {
+ display: none;
+}
+
+.cell {
+ .el-tag {
+ margin-right: 0px;
+ }
+}
+
+.small-padding {
+ .cell {
+ padding-left: 5px;
+ padding-right: 5px;
+ }
+}
+
+.fixed-width {
+ .el-button--mini {
+ padding: 7px 10px;
+ width: 60px;
+ }
+}
+
+.status-col {
+ .cell {
+ padding: 0 10px;
+ text-align: center;
+
+ .el-tag {
+ margin-right: 0px;
+ }
+ }
+}
+
+// to fixed https://github.com/ElemeFE/element/issues/2461
+.el-dialog {
+ transform: none;
+ left: 0;
+ position: relative;
+ margin: 0 auto;
+}
+
+// refine element ui upload
+.upload-container {
+ .el-upload {
+ width: 100%;
+
+ .el-upload-dragger {
+ width: 100%;
+ height: 200px;
+ }
+ }
+}
+
+// dropdown
+.el-dropdown-menu {
+ a {
+ display: block
+ }
+}
+
+// fix date-picker ui bug in filter-item
+.el-range-editor.el-input__inner {
+ display: inline-flex !important;
+}
+
+// to fix el-date-picker css style
+.el-range-separator {
+ box-sizing: content-box;
+}
+
+.el-menu--collapse
+ > div
+ > .el-submenu
+ > .el-submenu__title
+ .el-submenu__icon-arrow {
+ display: none;
+}
\ No newline at end of file
diff --git a/zhi-admin-ui/src/assets/styles/element-variables.scss b/zhi-admin-ui/src/assets/styles/element-variables.scss
new file mode 100644
index 0000000..1615ff2
--- /dev/null
+++ b/zhi-admin-ui/src/assets/styles/element-variables.scss
@@ -0,0 +1,31 @@
+/**
+* I think element-ui's default theme color is too light for long-term use.
+* So I modified the default color and you can modify it to your liking.
+**/
+
+/* theme color */
+$--color-primary: #1890ff;
+$--color-success: #13ce66;
+$--color-warning: #ffba00;
+$--color-danger: #ff4949;
+// $--color-info: #1E1E1E;
+
+$--button-font-weight: 400;
+
+// $--color-text-regular: #1f2d3d;
+
+$--border-color-light: #dfe4ed;
+$--border-color-lighter: #e6ebf5;
+
+$--table-border: 1px solid #dfe6ec;
+
+/* icon font path, required */
+$--font-path: '~element-ui/lib/theme-chalk/fonts';
+
+@import "~element-ui/packages/theme-chalk/src/index";
+
+// the :export directive is the magic sauce for webpack
+// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
+:export {
+ theme: $--color-primary;
+}
diff --git a/zhi-admin-ui/src/assets/styles/index.scss b/zhi-admin-ui/src/assets/styles/index.scss
new file mode 100644
index 0000000..96095ef
--- /dev/null
+++ b/zhi-admin-ui/src/assets/styles/index.scss
@@ -0,0 +1,191 @@
+@import './variables.scss';
+@import './mixin.scss';
+@import './transition.scss';
+@import './element-ui.scss';
+@import './sidebar.scss';
+@import './btn.scss';
+
+body {
+ height: 100%;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ text-rendering: optimizeLegibility;
+ font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
+}
+
+label {
+ font-weight: 700;
+}
+
+html {
+ height: 100%;
+ box-sizing: border-box;
+}
+
+#app {
+ height: 100%;
+}
+
+*,
+*:before,
+*:after {
+ box-sizing: inherit;
+}
+
+.no-padding {
+ padding: 0px !important;
+}
+
+.padding-content {
+ padding: 4px 0;
+}
+
+a:focus,
+a:active {
+ outline: none;
+}
+
+a,
+a:focus,
+a:hover {
+ cursor: pointer;
+ color: inherit;
+ text-decoration: none;
+}
+
+div:focus {
+ outline: none;
+}
+
+.fr {
+ float: right;
+}
+
+.fl {
+ float: left;
+}
+
+.pr-5 {
+ padding-right: 5px;
+}
+
+.pl-5 {
+ padding-left: 5px;
+}
+
+.block {
+ display: block;
+}
+
+.pointer {
+ cursor: pointer;
+}
+
+.inlineBlock {
+ display: block;
+}
+
+.clearfix {
+ &:after {
+ visibility: hidden;
+ display: block;
+ font-size: 0;
+ content: " ";
+ clear: both;
+ height: 0;
+ }
+}
+
+aside {
+ background: #eef1f6;
+ padding: 8px 24px;
+ margin-bottom: 20px;
+ border-radius: 2px;
+ display: block;
+ line-height: 32px;
+ font-size: 16px;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ color: #2c3e50;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+ a {
+ color: #337ab7;
+ cursor: pointer;
+
+ &:hover {
+ color: rgb(32, 160, 255);
+ }
+ }
+}
+
+//main-container全局样式
+.app-container {
+ padding: 20px;
+}
+
+.components-container {
+ margin: 30px 50px;
+ position: relative;
+}
+
+.pagination-container {
+ margin-top: 30px;
+}
+
+.text-center {
+ text-align: center
+}
+
+.sub-navbar {
+ height: 50px;
+ line-height: 50px;
+ position: relative;
+ width: 100%;
+ text-align: right;
+ padding-right: 20px;
+ transition: 600ms ease position;
+ background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
+
+ .subtitle {
+ font-size: 20px;
+ color: #fff;
+ }
+
+ &.draft {
+ background: #d0d0d0;
+ }
+
+ &.deleted {
+ background: #d0d0d0;
+ }
+}
+
+.link-type,
+.link-type:focus {
+ color: #337ab7;
+ cursor: pointer;
+
+ &:hover {
+ color: rgb(32, 160, 255);
+ }
+}
+
+.filter-container {
+ padding-bottom: 10px;
+
+ .filter-item {
+ display: inline-block;
+ vertical-align: middle;
+ margin-bottom: 10px;
+ }
+}
+
+//refine vue-multiselect plugin
+.multiselect {
+ line-height: 16px;
+}
+
+.multiselect--active {
+ z-index: 1000 !important;
+}
diff --git a/zhi-admin-ui/src/assets/styles/mixin.scss b/zhi-admin-ui/src/assets/styles/mixin.scss
new file mode 100644
index 0000000..06fa061
--- /dev/null
+++ b/zhi-admin-ui/src/assets/styles/mixin.scss
@@ -0,0 +1,66 @@
+@mixin clearfix {
+ &:after {
+ content: "";
+ display: table;
+ clear: both;
+ }
+}
+
+@mixin scrollBar {
+ &::-webkit-scrollbar-track-piece {
+ background: #d3dce6;
+ }
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #99a9bf;
+ border-radius: 20px;
+ }
+}
+
+@mixin relative {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
+@mixin pct($pct) {
+ width: #{$pct};
+ position: relative;
+ margin: 0 auto;
+}
+
+@mixin triangle($width, $height, $color, $direction) {
+ $width: $width/2;
+ $color-border-style: $height solid $color;
+ $transparent-border-style: $width solid transparent;
+ height: 0;
+ width: 0;
+
+ @if $direction==up {
+ border-bottom: $color-border-style;
+ border-left: $transparent-border-style;
+ border-right: $transparent-border-style;
+ }
+
+ @else if $direction==right {
+ border-left: $color-border-style;
+ border-top: $transparent-border-style;
+ border-bottom: $transparent-border-style;
+ }
+
+ @else if $direction==down {
+ border-top: $color-border-style;
+ border-left: $transparent-border-style;
+ border-right: $transparent-border-style;
+ }
+
+ @else if $direction==left {
+ border-right: $color-border-style;
+ border-top: $transparent-border-style;
+ border-bottom: $transparent-border-style;
+ }
+}
diff --git a/zhi-admin-ui/src/assets/styles/ruoyi.scss b/zhi-admin-ui/src/assets/styles/ruoyi.scss
new file mode 100644
index 0000000..16a4740
--- /dev/null
+++ b/zhi-admin-ui/src/assets/styles/ruoyi.scss
@@ -0,0 +1,287 @@
+/**
+* 通用css样式布局处理
+* Copyright (c) 2019 ruoyi
+*/
+
+/** 基础通用 **/
+.pt5 {
+ padding-top: 5px;
+}
+
+.pr5 {
+ padding-right: 5px;
+}
+
+.pb5 {
+ padding-bottom: 5px;
+}
+
+.mt5 {
+ margin-top: 5px;
+}
+
+.mr5 {
+ margin-right: 5px;
+}
+
+.mb5 {
+ margin-bottom: 5px;
+}
+
+.mb8 {
+ margin-bottom: 8px;
+}
+
+.ml5 {
+ margin-left: 5px;
+}
+
+.mt10 {
+ margin-top: 10px;
+}
+
+.mr10 {
+ margin-right: 10px;
+}
+
+.mb10 {
+ margin-bottom: 10px;
+}
+.ml10 {
+ margin-left: 10px;
+}
+
+.mt20 {
+ margin-top: 20px;
+}
+
+.mr20 {
+ margin-right: 20px;
+}
+
+.mb20 {
+ margin-bottom: 20px;
+}
+.ml20 {
+ margin-left: 20px;
+}
+
+.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+
+.el-dialog:not(.is-fullscreen) {
+ margin-top: 6vh !important;
+}
+
+.el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body {
+ overflow: auto;
+ overflow-x: hidden;
+ max-height: 70vh;
+ padding: 10px 20px 0;
+}
+
+.el-table {
+ .el-table__header-wrapper, .el-table__fixed-header-wrapper {
+ th {
+ word-break: break-word;
+ background-color: #f8f8f9;
+ color: #515a6e;
+ height: 40px;
+ font-size: 13px;
+ }
+ }
+
+ .el-table__body-wrapper {
+ .el-button [class*="el-icon-"] + span {
+ margin-left: 1px;
+ }
+ }
+}
+
+/** 表单布局 **/
+.form-header {
+ font-size: 15px;
+ color: #6379bb;
+ border-bottom: 1px solid #ddd;
+ margin: 8px 10px 25px 10px;
+ padding-bottom: 5px
+}
+
+/** 表格布局 **/
+.pagination-container {
+ position: relative;
+ height: 25px;
+ margin-bottom: 10px;
+ margin-top: 15px;
+ padding: 10px 20px !important;
+}
+
+/* tree border */
+.tree-border {
+ margin-top: 5px;
+ border: 1px solid #e5e6e7;
+ background: #FFFFFF none;
+ border-radius: 4px;
+}
+
+.pagination-container .el-pagination {
+ right: 0;
+ position: absolute;
+}
+
+@media (max-width: 768px) {
+ .pagination-container .el-pagination > .el-pagination__jump {
+ display: none !important;
+ }
+ .pagination-container .el-pagination > .el-pagination__sizes {
+ display: none !important;
+ }
+}
+
+.el-table .fixed-width .el-button--mini {
+ padding-left: 0;
+ padding-right: 0;
+ width: inherit;
+}
+
+/** 表格更多操作下拉样式 */
+.el-table .el-dropdown-link,.el-table .el-dropdown-selfdefine {
+ cursor: pointer;
+ margin-left: 5px;
+}
+
+.el-table .el-dropdown, .el-icon-arrow-down {
+ font-size: 12px;
+}
+
+.el-tree-node__content > .el-checkbox {
+ margin-right: 8px;
+}
+
+.list-group-striped > .list-group-item {
+ border-left: 0;
+ border-right: 0;
+ border-radius: 0;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.list-group {
+ padding-left: 0px;
+ list-style: none;
+}
+
+.list-group-item {
+ border-bottom: 1px solid #e7eaec;
+ border-top: 1px solid #e7eaec;
+ margin-bottom: -1px;
+ padding: 11px 0px;
+ font-size: 13px;
+}
+
+.pull-right {
+ float: right !important;
+}
+
+.el-card__header {
+ padding: 14px 15px 7px;
+ min-height: 40px;
+}
+
+.el-card__body {
+ padding: 15px 20px 20px 20px;
+}
+
+.card-box {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-bottom: 10px;
+}
+
+/* button color */
+.el-button--cyan.is-active,
+.el-button--cyan:active {
+ background: #20B2AA;
+ border-color: #20B2AA;
+ color: #FFFFFF;
+}
+
+.el-button--cyan:focus,
+.el-button--cyan:hover {
+ background: #48D1CC;
+ border-color: #48D1CC;
+ color: #FFFFFF;
+}
+
+.el-button--cyan {
+ background-color: #20B2AA;
+ border-color: #20B2AA;
+ color: #FFFFFF;
+}
+
+/* text color */
+.text-navy {
+ color: #1ab394;
+}
+
+.text-primary {
+ color: inherit;
+}
+
+.text-success {
+ color: #1c84c6;
+}
+
+.text-info {
+ color: #23c6c8;
+}
+
+.text-warning {
+ color: #f8ac59;
+}
+
+.text-danger {
+ color: #ed5565;
+}
+
+.text-muted {
+ color: #888888;
+}
+
+/* image */
+.img-circle {
+ border-radius: 50%;
+}
+
+.img-lg {
+ width: 120px;
+ height: 120px;
+}
+
+.avatar-upload-preview {
+ position: relative;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 200px;
+ height: 200px;
+ border-radius: 50%;
+ box-shadow: 0 0 4px #ccc;
+ overflow: hidden;
+}
+
+/* 拖拽列样式 */
+.sortable-ghost {
+ opacity: .8;
+ color: #fff !important;
+ background: #42b983 !important;
+}
+
+.top-right-btn {
+ position: relative;
+ float: right;
+}
diff --git a/zhi-admin-ui/src/assets/styles/sidebar.scss b/zhi-admin-ui/src/assets/styles/sidebar.scss
new file mode 100644
index 0000000..ed308b8
--- /dev/null
+++ b/zhi-admin-ui/src/assets/styles/sidebar.scss
@@ -0,0 +1,227 @@
+#app {
+
+ .main-container {
+ min-height: 100%;
+ transition: margin-left .28s;
+ margin-left: $base-sidebar-width;
+ position: relative;
+ }
+
+ .sidebarHide {
+ margin-left: 0!important;
+ }
+
+ .sidebar-container {
+ -webkit-transition: width .28s;
+ transition: width 0.28s;
+ width: $base-sidebar-width !important;
+ background-color: $base-menu-background;
+ height: 100%;
+ position: fixed;
+ font-size: 0px;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1001;
+ overflow: hidden;
+ -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35);
+ box-shadow: 2px 0 6px rgba(0,21,41,.35);
+
+ // reset element-ui css
+ .horizontal-collapse-transition {
+ transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
+ }
+
+ .scrollbar-wrapper {
+ overflow-x: hidden !important;
+ }
+
+ .el-scrollbar__bar.is-vertical {
+ right: 0px;
+ }
+
+ .el-scrollbar {
+ height: 100%;
+ }
+
+ &.has-logo {
+ .el-scrollbar {
+ height: calc(100% - 50px);
+ }
+ }
+
+ .is-horizontal {
+ display: none;
+ }
+
+ a {
+ display: inline-block;
+ width: 100%;
+ overflow: hidden;
+ }
+
+ .svg-icon {
+ margin-right: 16px;
+ }
+
+ .el-menu {
+ border: none;
+ height: 100%;
+ width: 100% !important;
+ }
+
+ .el-menu-item, .el-submenu__title {
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+ }
+
+ // menu hover
+ .submenu-title-noDropdown,
+ .el-submenu__title {
+ &:hover {
+ background-color: rgba(0, 0, 0, 0.06) !important;
+ }
+ }
+
+ & .theme-dark .is-active > .el-submenu__title {
+ color: $base-menu-color-active !important;
+ }
+
+ & .nest-menu .el-submenu>.el-submenu__title,
+ & .el-submenu .el-menu-item {
+ min-width: $base-sidebar-width !important;
+
+ &:hover {
+ background-color: rgba(0, 0, 0, 0.06) !important;
+ }
+ }
+
+ & .theme-dark .nest-menu .el-submenu>.el-submenu__title,
+ & .theme-dark .el-submenu .el-menu-item {
+ background-color: $base-sub-menu-background !important;
+
+ &:hover {
+ background-color: $base-sub-menu-hover !important;
+ }
+ }
+ }
+
+ .hideSidebar {
+ .sidebar-container {
+ width: 54px !important;
+ }
+
+ .main-container {
+ margin-left: 54px;
+ }
+
+ .submenu-title-noDropdown {
+ padding: 0 !important;
+ position: relative;
+
+ .el-tooltip {
+ padding: 0 !important;
+
+ .svg-icon {
+ margin-left: 20px;
+ }
+ }
+ }
+
+ .el-submenu {
+ overflow: hidden;
+
+ &>.el-submenu__title {
+ padding: 0 !important;
+
+ .svg-icon {
+ margin-left: 20px;
+ }
+
+ }
+ }
+
+ .el-menu--collapse {
+ .el-submenu {
+ &>.el-submenu__title {
+ &>span {
+ height: 0;
+ width: 0;
+ overflow: hidden;
+ visibility: hidden;
+ display: inline-block;
+ }
+ }
+ }
+ }
+ }
+
+ .el-menu--collapse .el-menu .el-submenu {
+ min-width: $base-sidebar-width !important;
+ }
+
+ // mobile responsive
+ .mobile {
+ .main-container {
+ margin-left: 0px;
+ }
+
+ .sidebar-container {
+ transition: transform .28s;
+ width: $base-sidebar-width !important;
+ }
+
+ &.hideSidebar {
+ .sidebar-container {
+ pointer-events: none;
+ transition-duration: 0.3s;
+ transform: translate3d(-$base-sidebar-width, 0, 0);
+ }
+ }
+ }
+
+ .withoutAnimation {
+
+ .main-container,
+ .sidebar-container {
+ transition: none;
+ }
+ }
+}
+
+// when menu collapsed
+.el-menu--vertical {
+ &>.el-menu {
+ .svg-icon {
+ margin-right: 16px;
+ }
+ }
+
+ .nest-menu .el-submenu>.el-submenu__title,
+ .el-menu-item {
+ &:hover {
+ // you can use $subMenuHover
+ background-color: rgba(0, 0, 0, 0.06) !important;
+ }
+ }
+
+ // the scroll bar appears when the subMenu is too long
+ >.el-menu--popup {
+ max-height: 100vh;
+ overflow-y: auto;
+
+ &::-webkit-scrollbar-track-piece {
+ background: #d3dce6;
+ }
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #99a9bf;
+ border-radius: 20px;
+ }
+ }
+}
diff --git a/zhi-admin-ui/src/assets/styles/transition.scss b/zhi-admin-ui/src/assets/styles/transition.scss
new file mode 100644
index 0000000..eb49895
--- /dev/null
+++ b/zhi-admin-ui/src/assets/styles/transition.scss
@@ -0,0 +1,53 @@
+// global transition css
+
+/* fade */
+.fade-enter-active,
+.fade-leave-active {
+ transition: opacity 0.28s;
+}
+
+.fade-enter,
+.fade-leave-active {
+ opacity: 0;
+}
+
+/* fade-transform */
+.fade-transform--move,
+.fade-transform-leave-active,
+.fade-transform-enter-active {
+ transition: all .5s;
+}
+
+.fade-transform-leave-active {
+ position: absolute;
+}
+
+.fade-transform-enter {
+ opacity: 0;
+ transform: translateX(-30px);
+}
+
+.fade-transform-leave-to {
+ opacity: 0;
+ transform: translateX(30px);
+}
+
+/* breadcrumb transition */
+.breadcrumb-enter-active,
+.breadcrumb-leave-active {
+ transition: all .5s;
+}
+
+.breadcrumb-enter,
+.breadcrumb-leave-active {
+ opacity: 0;
+ transform: translateX(20px);
+}
+
+.breadcrumb-move {
+ transition: all .5s;
+}
+
+.breadcrumb-leave-active {
+ position: absolute;
+}
diff --git a/zhi-admin-ui/src/assets/styles/variables.scss b/zhi-admin-ui/src/assets/styles/variables.scss
new file mode 100644
index 0000000..34484d4
--- /dev/null
+++ b/zhi-admin-ui/src/assets/styles/variables.scss
@@ -0,0 +1,54 @@
+// base color
+$blue:#324157;
+$light-blue:#3A71A8;
+$red:#C03639;
+$pink: #E65D6E;
+$green: #30B08F;
+$tiffany: #4AB7BD;
+$yellow:#FEC171;
+$panGreen: #30B08F;
+
+// 默认菜单主题风格
+$base-menu-color:#bfcbd9;
+$base-menu-color-active:#f4f4f5;
+$base-menu-background:#304156;
+$base-logo-title-color: #ffffff;
+
+$base-menu-light-color:rgba(0,0,0,.70);
+$base-menu-light-background:#ffffff;
+$base-logo-light-title-color: #001529;
+
+$base-sub-menu-background:#1f2d3d;
+$base-sub-menu-hover:#001528;
+
+// 自定义暗色菜单风格
+/**
+$base-menu-color:hsla(0,0%,100%,.65);
+$base-menu-color-active:#fff;
+$base-menu-background:#001529;
+$base-logo-title-color: #ffffff;
+
+$base-menu-light-color:rgba(0,0,0,.70);
+$base-menu-light-background:#ffffff;
+$base-logo-light-title-color: #001529;
+
+$base-sub-menu-background:#000c17;
+$base-sub-menu-hover:#001528;
+*/
+
+$base-sidebar-width: 200px;
+
+// the :export directive is the magic sauce for webpack
+// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
+:export {
+ menuColor: $base-menu-color;
+ menuLightColor: $base-menu-light-color;
+ menuColorActive: $base-menu-color-active;
+ menuBackground: $base-menu-background;
+ menuLightBackground: $base-menu-light-background;
+ subMenuBackground: $base-sub-menu-background;
+ subMenuHover: $base-sub-menu-hover;
+ sideBarWidth: $base-sidebar-width;
+ logoTitleColor: $base-logo-title-color;
+ logoLightTitleColor: $base-logo-light-title-color
+}
diff --git a/zhi-admin-ui/src/components/Breadcrumb/index.vue b/zhi-admin-ui/src/components/Breadcrumb/index.vue
new file mode 100644
index 0000000..1696f54
--- /dev/null
+++ b/zhi-admin-ui/src/components/Breadcrumb/index.vue
@@ -0,0 +1,74 @@
+
+
+
+
+ {{ item.meta.title }}
+ {{ item.meta.title }}
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Crontab/day.vue b/zhi-admin-ui/src/components/Crontab/day.vue
new file mode 100644
index 0000000..fe3eaf0
--- /dev/null
+++ b/zhi-admin-ui/src/components/Crontab/day.vue
@@ -0,0 +1,161 @@
+
+
+
+
+ 日,允许的通配符[, - * ? / L W]
+
+
+
+
+
+ 不指定
+
+
+
+
+
+ 周期从
+ -
+ 日
+
+
+
+
+
+ 从
+ 号开始,每
+ 日执行一次
+
+
+
+
+
+ 每月
+ 号最近的那个工作日
+
+
+
+
+
+ 本月最后一天
+
+
+
+
+
+ 指定
+
+ {{item}}
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Crontab/hour.vue b/zhi-admin-ui/src/components/Crontab/hour.vue
new file mode 100644
index 0000000..4b1f1fc
--- /dev/null
+++ b/zhi-admin-ui/src/components/Crontab/hour.vue
@@ -0,0 +1,114 @@
+
+
+
+
+ 小时,允许的通配符[, - * /]
+
+
+
+
+
+ 周期从
+ -
+ 小时
+
+
+
+
+
+ 从
+ 小时开始,每
+ 小时执行一次
+
+
+
+
+
+ 指定
+
+ {{item-1}}
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Crontab/index.vue b/zhi-admin-ui/src/components/Crontab/index.vue
new file mode 100644
index 0000000..3963df2
--- /dev/null
+++ b/zhi-admin-ui/src/components/Crontab/index.vue
@@ -0,0 +1,430 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+ 重置
+ 取消
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Crontab/min.vue b/zhi-admin-ui/src/components/Crontab/min.vue
new file mode 100644
index 0000000..43cab90
--- /dev/null
+++ b/zhi-admin-ui/src/components/Crontab/min.vue
@@ -0,0 +1,116 @@
+
+
+
+
+ 分钟,允许的通配符[, - * /]
+
+
+
+
+
+ 周期从
+ -
+ 分钟
+
+
+
+
+
+ 从
+ 分钟开始,每
+ 分钟执行一次
+
+
+
+
+
+ 指定
+
+ {{item-1}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/components/Crontab/month.vue b/zhi-admin-ui/src/components/Crontab/month.vue
new file mode 100644
index 0000000..fd0ac38
--- /dev/null
+++ b/zhi-admin-ui/src/components/Crontab/month.vue
@@ -0,0 +1,114 @@
+
+
+
+
+ 月,允许的通配符[, - * /]
+
+
+
+
+
+ 周期从
+ -
+ 月
+
+
+
+
+
+ 从
+ 月开始,每
+ 月月执行一次
+
+
+
+
+
+ 指定
+
+ {{item}}
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Crontab/result.vue b/zhi-admin-ui/src/components/Crontab/result.vue
new file mode 100644
index 0000000..aea6e0e
--- /dev/null
+++ b/zhi-admin-ui/src/components/Crontab/result.vue
@@ -0,0 +1,559 @@
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Crontab/second.vue b/zhi-admin-ui/src/components/Crontab/second.vue
new file mode 100644
index 0000000..e7b7761
--- /dev/null
+++ b/zhi-admin-ui/src/components/Crontab/second.vue
@@ -0,0 +1,117 @@
+
+
+
+
+ 秒,允许的通配符[, - * /]
+
+
+
+
+
+ 周期从
+ -
+ 秒
+
+
+
+
+
+ 从
+ 秒开始,每
+ 秒执行一次
+
+
+
+
+
+ 指定
+
+ {{item-1}}
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Crontab/week.vue b/zhi-admin-ui/src/components/Crontab/week.vue
new file mode 100644
index 0000000..1cec700
--- /dev/null
+++ b/zhi-admin-ui/src/components/Crontab/week.vue
@@ -0,0 +1,202 @@
+
+
+
+
+ 周,允许的通配符[, - * ? / L #]
+
+
+
+
+
+ 不指定
+
+
+
+
+
+ 周期从星期
+
+ {{item.value}}
+
+ -
+
+ {{item.value}}
+
+
+
+
+
+
+ 第
+ 周的星期
+
+ {{item.value}}
+
+
+
+
+
+
+ 本月最后一个星期
+
+ {{item.value}}
+
+
+
+
+
+
+ 指定
+
+ {{item.value}}
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Crontab/year.vue b/zhi-admin-ui/src/components/Crontab/year.vue
new file mode 100644
index 0000000..5487a6c
--- /dev/null
+++ b/zhi-admin-ui/src/components/Crontab/year.vue
@@ -0,0 +1,131 @@
+
+
+
+
+ 不填,允许的通配符[, - * /]
+
+
+
+
+
+ 每年
+
+
+
+
+
+ 周期从
+ -
+
+
+
+
+
+
+ 从
+ 年开始,每
+ 年执行一次
+
+
+
+
+
+
+ 指定
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/DictData/index.js b/zhi-admin-ui/src/components/DictData/index.js
new file mode 100644
index 0000000..7b85d4a
--- /dev/null
+++ b/zhi-admin-ui/src/components/DictData/index.js
@@ -0,0 +1,49 @@
+import Vue from 'vue'
+import store from '@/store'
+import DataDict from '@/utils/dict'
+import { getDicts as getDicts } from '@/api/system/dict/data'
+
+function searchDictByKey(dict, key) {
+ if (key == null && key == "") {
+ return null
+ }
+ try {
+ for (let i = 0; i < dict.length; i++) {
+ if (dict[i].key == key) {
+ return dict[i].value
+ }
+ }
+ } catch (e) {
+ return null
+ }
+}
+
+function install() {
+ Vue.use(DataDict, {
+ metas: {
+ '*': {
+ labelField: 'dictLabel',
+ valueField: 'dictValue',
+ request(dictMeta) {
+ const storeDict = searchDictByKey(store.getters.dict, dictMeta.type)
+ if (storeDict) {
+ return new Promise(resolve => { resolve(storeDict) })
+ } else {
+ return new Promise((resolve, reject) => {
+ getDicts(dictMeta.type).then(res => {
+ store.dispatch('dict/setDict', { key: dictMeta.type, value: res.data })
+ resolve(res.data)
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ }
+ },
+ },
+ },
+ })
+}
+
+export default {
+ install,
+}
\ No newline at end of file
diff --git a/zhi-admin-ui/src/components/DictTag/index.vue b/zhi-admin-ui/src/components/DictTag/index.vue
new file mode 100644
index 0000000..4c196c4
--- /dev/null
+++ b/zhi-admin-ui/src/components/DictTag/index.vue
@@ -0,0 +1,52 @@
+
+
+
+
+ {{ item.label }}
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/components/Editor/index.vue b/zhi-admin-ui/src/components/Editor/index.vue
new file mode 100644
index 0000000..1f2e15e
--- /dev/null
+++ b/zhi-admin-ui/src/components/Editor/index.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/EditorTwo/Editor.vue b/zhi-admin-ui/src/components/EditorTwo/Editor.vue
new file mode 100644
index 0000000..4c95f23
--- /dev/null
+++ b/zhi-admin-ui/src/components/EditorTwo/Editor.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/FileUpload/index.vue b/zhi-admin-ui/src/components/FileUpload/index.vue
new file mode 100644
index 0000000..2e33c1b
--- /dev/null
+++ b/zhi-admin-ui/src/components/FileUpload/index.vue
@@ -0,0 +1,227 @@
+
+
+
+
+ 选取文件
+
+
+ 请上传
+ 大小不超过 {{ fileSize }}MB
+ 格式为 {{ fileType.join("/") }}
+ 的文件
+
+
+
+
+
+
+
+ {{ getFileName(file.name) }}
+
+
+ 删除
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Hamburger/index.vue b/zhi-admin-ui/src/components/Hamburger/index.vue
new file mode 100644
index 0000000..368b002
--- /dev/null
+++ b/zhi-admin-ui/src/components/Hamburger/index.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/HeaderSearch/index.vue b/zhi-admin-ui/src/components/HeaderSearch/index.vue
new file mode 100644
index 0000000..c44eff5
--- /dev/null
+++ b/zhi-admin-ui/src/components/HeaderSearch/index.vue
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/IconSelect/index.vue b/zhi-admin-ui/src/components/IconSelect/index.vue
new file mode 100644
index 0000000..b0ec9fa
--- /dev/null
+++ b/zhi-admin-ui/src/components/IconSelect/index.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/IconSelect/requireIcons.js b/zhi-admin-ui/src/components/IconSelect/requireIcons.js
new file mode 100644
index 0000000..99e5c54
--- /dev/null
+++ b/zhi-admin-ui/src/components/IconSelect/requireIcons.js
@@ -0,0 +1,11 @@
+
+const req = require.context('../../assets/icons/svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys()
+
+const re = /\.\/(.*)\.svg/
+
+const icons = requireAll(req).map(i => {
+ return i.match(re)[1]
+})
+
+export default icons
diff --git a/zhi-admin-ui/src/components/ImagePreview/index.vue b/zhi-admin-ui/src/components/ImagePreview/index.vue
new file mode 100644
index 0000000..cd99626
--- /dev/null
+++ b/zhi-admin-ui/src/components/ImagePreview/index.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/ImageUpload/index.vue b/zhi-admin-ui/src/components/ImageUpload/index.vue
new file mode 100644
index 0000000..9c92e86
--- /dev/null
+++ b/zhi-admin-ui/src/components/ImageUpload/index.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+ 请上传
+ 大小不超过 {{ fileSize }}MB
+ 格式为 {{ fileType.join("/") }}
+ 的文件
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Pagination/index.vue b/zhi-admin-ui/src/components/Pagination/index.vue
new file mode 100644
index 0000000..56f5a6b
--- /dev/null
+++ b/zhi-admin-ui/src/components/Pagination/index.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/PanThumb/index.vue b/zhi-admin-ui/src/components/PanThumb/index.vue
new file mode 100644
index 0000000..1bcf417
--- /dev/null
+++ b/zhi-admin-ui/src/components/PanThumb/index.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/ParentView/index.vue b/zhi-admin-ui/src/components/ParentView/index.vue
new file mode 100644
index 0000000..7bf6148
--- /dev/null
+++ b/zhi-admin-ui/src/components/ParentView/index.vue
@@ -0,0 +1,3 @@
+
+
+
diff --git a/zhi-admin-ui/src/components/RightPanel/index.vue b/zhi-admin-ui/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..2d6122b
--- /dev/null
+++ b/zhi-admin-ui/src/components/RightPanel/index.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/RightToolbar/index.vue b/zhi-admin-ui/src/components/RightToolbar/index.vue
new file mode 100644
index 0000000..527e07c
--- /dev/null
+++ b/zhi-admin-ui/src/components/RightToolbar/index.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/RuoYi/Doc/index.vue b/zhi-admin-ui/src/components/RuoYi/Doc/index.vue
new file mode 100644
index 0000000..348ca30
--- /dev/null
+++ b/zhi-admin-ui/src/components/RuoYi/Doc/index.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/RuoYi/Git/index.vue b/zhi-admin-ui/src/components/RuoYi/Git/index.vue
new file mode 100644
index 0000000..d2d1cd9
--- /dev/null
+++ b/zhi-admin-ui/src/components/RuoYi/Git/index.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/Screenfull/index.vue b/zhi-admin-ui/src/components/Screenfull/index.vue
new file mode 100644
index 0000000..d4e539c
--- /dev/null
+++ b/zhi-admin-ui/src/components/Screenfull/index.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/SizeSelect/index.vue b/zhi-admin-ui/src/components/SizeSelect/index.vue
new file mode 100644
index 0000000..069b5de
--- /dev/null
+++ b/zhi-admin-ui/src/components/SizeSelect/index.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/SvgIcon/index.vue b/zhi-admin-ui/src/components/SvgIcon/index.vue
new file mode 100644
index 0000000..e4bf5ad
--- /dev/null
+++ b/zhi-admin-ui/src/components/SvgIcon/index.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/ThemePicker/index.vue b/zhi-admin-ui/src/components/ThemePicker/index.vue
new file mode 100644
index 0000000..1714e1f
--- /dev/null
+++ b/zhi-admin-ui/src/components/ThemePicker/index.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/TopNav/index.vue b/zhi-admin-ui/src/components/TopNav/index.vue
new file mode 100644
index 0000000..5f0edbe
--- /dev/null
+++ b/zhi-admin-ui/src/components/TopNav/index.vue
@@ -0,0 +1,185 @@
+
+
+
+
+ {{ item.meta.title }}
+
+
+
+
+ 更多菜单
+
+
+ {{ item.meta.title }}
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/WebSocket/WebSocket.vue b/zhi-admin-ui/src/components/WebSocket/WebSocket.vue
new file mode 100644
index 0000000..ed09c59
--- /dev/null
+++ b/zhi-admin-ui/src/components/WebSocket/WebSocket.vue
@@ -0,0 +1,115 @@
+
+ 给后台发送消息
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/components/iFrame/index.vue b/zhi-admin-ui/src/components/iFrame/index.vue
new file mode 100644
index 0000000..426857f
--- /dev/null
+++ b/zhi-admin-ui/src/components/iFrame/index.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/directive/dialog/drag.js b/zhi-admin-ui/src/directive/dialog/drag.js
new file mode 100644
index 0000000..2e82346
--- /dev/null
+++ b/zhi-admin-ui/src/directive/dialog/drag.js
@@ -0,0 +1,64 @@
+/**
+* v-dialogDrag 弹窗拖拽
+* Copyright (c) 2019 ruoyi
+*/
+
+export default {
+ bind(el, binding, vnode, oldVnode) {
+ const value = binding.value
+ if (value == false) return
+ // 获取拖拽内容头部
+ const dialogHeaderEl = el.querySelector('.el-dialog__header');
+ const dragDom = el.querySelector('.el-dialog');
+ dialogHeaderEl.style.cursor = 'move';
+ // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
+ const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);
+ dragDom.style.position = 'absolute';
+ dragDom.style.marginTop = 0;
+ let width = dragDom.style.width;
+ if (width.includes('%')) {
+ width = +document.body.clientWidth * (+width.replace(/\%/g, '') / 100);
+ } else {
+ width = +width.replace(/\px/g, '');
+ }
+ dragDom.style.left = `${(document.body.clientWidth - width) / 2}px`;
+ // 鼠标按下事件
+ dialogHeaderEl.onmousedown = (e) => {
+ // 鼠标按下,计算当前元素距离可视区的距离 (鼠标点击位置距离可视窗口的距离)
+ const disX = e.clientX - dialogHeaderEl.offsetLeft;
+ const disY = e.clientY - dialogHeaderEl.offsetTop;
+
+ // 获取到的值带px 正则匹配替换
+ let styL, styT;
+
+ // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
+ if (sty.left.includes('%')) {
+ styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100);
+ styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100);
+ } else {
+ styL = +sty.left.replace(/\px/g, '');
+ styT = +sty.top.replace(/\px/g, '');
+ };
+
+ // 鼠标拖拽事件
+ document.onmousemove = function (e) {
+ // 通过事件委托,计算移动的距离 (开始拖拽至结束拖拽的距离)
+ const l = e.clientX - disX;
+ const t = e.clientY - disY;
+
+ let finallyL = l + styL
+ let finallyT = t + styT
+
+ // 移动当前元素
+ dragDom.style.left = `${finallyL}px`;
+ dragDom.style.top = `${finallyT}px`;
+
+ };
+
+ document.onmouseup = function (e) {
+ document.onmousemove = null;
+ document.onmouseup = null;
+ };
+ }
+ }
+};
\ No newline at end of file
diff --git a/zhi-admin-ui/src/directive/dialog/dragHeight.js b/zhi-admin-ui/src/directive/dialog/dragHeight.js
new file mode 100644
index 0000000..d1590f8
--- /dev/null
+++ b/zhi-admin-ui/src/directive/dialog/dragHeight.js
@@ -0,0 +1,34 @@
+/**
+* v-dialogDragWidth 可拖动弹窗高度(右下角)
+* Copyright (c) 2019 ruoyi
+*/
+
+export default {
+ bind(el) {
+ const dragDom = el.querySelector('.el-dialog');
+ const lineEl = document.createElement('div');
+ lineEl.style = 'width: 6px; background: inherit; height: 10px; position: absolute; right: 0; bottom: 0; margin: auto; z-index: 1; cursor: nwse-resize;';
+ lineEl.addEventListener('mousedown',
+ function(e) {
+ // 鼠标按下,计算当前元素距离可视区的距离
+ const disX = e.clientX - el.offsetLeft;
+ const disY = e.clientY - el.offsetTop;
+ // 当前宽度 高度
+ const curWidth = dragDom.offsetWidth;
+ const curHeight = dragDom.offsetHeight;
+ document.onmousemove = function(e) {
+ e.preventDefault(); // 移动时禁用默认事件
+ // 通过事件委托,计算移动的距离
+ const xl = e.clientX - disX;
+ const yl = e.clientY - disY
+ dragDom.style.width = `${curWidth + xl}px`;
+ dragDom.style.height = `${curHeight + yl}px`;
+ };
+ document.onmouseup = function(e) {
+ document.onmousemove = null;
+ document.onmouseup = null;
+ };
+ }, false);
+ dragDom.appendChild(lineEl);
+ }
+}
\ No newline at end of file
diff --git a/zhi-admin-ui/src/directive/dialog/dragWidth.js b/zhi-admin-ui/src/directive/dialog/dragWidth.js
new file mode 100644
index 0000000..d5cda3a
--- /dev/null
+++ b/zhi-admin-ui/src/directive/dialog/dragWidth.js
@@ -0,0 +1,30 @@
+/**
+* v-dialogDragWidth 可拖动弹窗宽度(右侧边)
+* Copyright (c) 2019 ruoyi
+*/
+
+export default {
+ bind(el) {
+ const dragDom = el.querySelector('.el-dialog');
+ const lineEl = document.createElement('div');
+ lineEl.style = 'width: 5px; background: inherit; height: 80%; position: absolute; right: 0; top: 0; bottom: 0; margin: auto; z-index: 1; cursor: w-resize;';
+ lineEl.addEventListener('mousedown',
+ function (e) {
+ // 鼠标按下,计算当前元素距离可视区的距离
+ const disX = e.clientX - el.offsetLeft;
+ // 当前宽度
+ const curWidth = dragDom.offsetWidth;
+ document.onmousemove = function (e) {
+ e.preventDefault(); // 移动时禁用默认事件
+ // 通过事件委托,计算移动的距离
+ const l = e.clientX - disX;
+ dragDom.style.width = `${curWidth + l}px`;
+ };
+ document.onmouseup = function (e) {
+ document.onmousemove = null;
+ document.onmouseup = null;
+ };
+ }, false);
+ dragDom.appendChild(lineEl);
+ }
+}
\ No newline at end of file
diff --git a/zhi-admin-ui/src/directive/index.js b/zhi-admin-ui/src/directive/index.js
new file mode 100644
index 0000000..b9b07da
--- /dev/null
+++ b/zhi-admin-ui/src/directive/index.js
@@ -0,0 +1,23 @@
+import hasRole from './permission/hasRole'
+import hasPermi from './permission/hasPermi'
+import dialogDrag from './dialog/drag'
+import dialogDragWidth from './dialog/dragWidth'
+import dialogDragHeight from './dialog/dragHeight'
+import clipboard from './module/clipboard'
+
+const install = function(Vue) {
+ Vue.directive('hasRole', hasRole)
+ Vue.directive('hasPermi', hasPermi)
+ Vue.directive('clipboard', clipboard)
+ Vue.directive('dialogDrag', dialogDrag)
+ Vue.directive('dialogDragWidth', dialogDragWidth)
+ Vue.directive('dialogDragHeight', dialogDragHeight)
+}
+
+if (window.Vue) {
+ window['hasRole'] = hasRole
+ window['hasPermi'] = hasPermi
+ Vue.use(install); // eslint-disable-line
+}
+
+export default install
diff --git a/zhi-admin-ui/src/directive/module/clipboard.js b/zhi-admin-ui/src/directive/module/clipboard.js
new file mode 100644
index 0000000..635315a
--- /dev/null
+++ b/zhi-admin-ui/src/directive/module/clipboard.js
@@ -0,0 +1,54 @@
+/**
+* v-clipboard 文字复制剪贴
+* Copyright (c) 2021 ruoyi
+*/
+
+import Clipboard from 'clipboard'
+export default {
+ bind(el, binding, vnode) {
+ switch (binding.arg) {
+ case 'success':
+ el._vClipBoard_success = binding.value;
+ break;
+ case 'error':
+ el._vClipBoard_error = binding.value;
+ break;
+ default: {
+ const clipboard = new Clipboard(el, {
+ text: () => binding.value,
+ action: () => binding.arg === 'cut' ? 'cut' : 'copy'
+ });
+ clipboard.on('success', e => {
+ const callback = el._vClipBoard_success;
+ callback && callback(e);
+ });
+ clipboard.on('error', e => {
+ const callback = el._vClipBoard_error;
+ callback && callback(e);
+ });
+ el._vClipBoard = clipboard;
+ }
+ }
+ },
+ update(el, binding) {
+ if (binding.arg === 'success') {
+ el._vClipBoard_success = binding.value;
+ } else if (binding.arg === 'error') {
+ el._vClipBoard_error = binding.value;
+ } else {
+ el._vClipBoard.text = function () { return binding.value; };
+ el._vClipBoard.action = () => binding.arg === 'cut' ? 'cut' : 'copy';
+ }
+ },
+ unbind(el, binding) {
+ if (!el._vClipboard) return
+ if (binding.arg === 'success') {
+ delete el._vClipBoard_success;
+ } else if (binding.arg === 'error') {
+ delete el._vClipBoard_error;
+ } else {
+ el._vClipBoard.destroy();
+ delete el._vClipBoard;
+ }
+ }
+}
diff --git a/zhi-admin-ui/src/directive/permission/hasPermi.js b/zhi-admin-ui/src/directive/permission/hasPermi.js
new file mode 100644
index 0000000..7101e3e
--- /dev/null
+++ b/zhi-admin-ui/src/directive/permission/hasPermi.js
@@ -0,0 +1,28 @@
+ /**
+ * v-hasPermi 操作权限处理
+ * Copyright (c) 2019 ruoyi
+ */
+
+import store from '@/store'
+
+export default {
+ inserted(el, binding, vnode) {
+ const { value } = binding
+ const all_permission = "*:*:*";
+ const permissions = store.getters && store.getters.permissions
+
+ if (value && value instanceof Array && value.length > 0) {
+ const permissionFlag = value
+
+ const hasPermissions = permissions.some(permission => {
+ return all_permission === permission || permissionFlag.includes(permission)
+ })
+
+ if (!hasPermissions) {
+ el.parentNode && el.parentNode.removeChild(el)
+ }
+ } else {
+ throw new Error(`请设置操作权限标签值`)
+ }
+ }
+}
diff --git a/zhi-admin-ui/src/directive/permission/hasRole.js b/zhi-admin-ui/src/directive/permission/hasRole.js
new file mode 100644
index 0000000..ad9d4d7
--- /dev/null
+++ b/zhi-admin-ui/src/directive/permission/hasRole.js
@@ -0,0 +1,28 @@
+ /**
+ * v-hasRole 角色权限处理
+ * Copyright (c) 2019 ruoyi
+ */
+
+import store from '@/store'
+
+export default {
+ inserted(el, binding, vnode) {
+ const { value } = binding
+ const super_admin = "admin";
+ const roles = store.getters && store.getters.roles
+
+ if (value && value instanceof Array && value.length > 0) {
+ const roleFlag = value
+
+ const hasRole = roles.some(role => {
+ return super_admin === role || roleFlag.includes(role)
+ })
+
+ if (!hasRole) {
+ el.parentNode && el.parentNode.removeChild(el)
+ }
+ } else {
+ throw new Error(`请设置角色权限标签值"`)
+ }
+ }
+}
diff --git a/zhi-admin-ui/src/layout/components/AppMain.vue b/zhi-admin-ui/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..f4e74db
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/AppMain.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/IframeToggle/index.vue b/zhi-admin-ui/src/layout/components/IframeToggle/index.vue
new file mode 100644
index 0000000..26e17c1
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/IframeToggle/index.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/InnerLink/index.vue b/zhi-admin-ui/src/layout/components/InnerLink/index.vue
new file mode 100644
index 0000000..badefc5
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/InnerLink/index.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/Navbar.vue b/zhi-admin-ui/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..99671bc
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/Navbar.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/Settings/index.vue b/zhi-admin-ui/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..bb3c9ce
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/Settings/index.vue
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+
主题风格设置
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主题颜色
+
+
+
+
+
+
+
系统布局配置
+
+
+ 开启 TopNav
+
+
+
+
+ 开启 Tags-Views
+
+
+
+
+ 固定 Header
+
+
+
+
+ 显示 Logo
+
+
+
+
+ 动态标题
+
+
+
+
+
+
保存配置
+
重置配置
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/Sidebar/FixiOSBug.js b/zhi-admin-ui/src/layout/components/Sidebar/FixiOSBug.js
new file mode 100644
index 0000000..6823726
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/Sidebar/FixiOSBug.js
@@ -0,0 +1,25 @@
+export default {
+ computed: {
+ device() {
+ return this.$store.state.app.device
+ }
+ },
+ mounted() {
+ // In order to fix the click on menu on the ios device will trigger the mouseleave bug
+ this.fixBugIniOS()
+ },
+ methods: {
+ fixBugIniOS() {
+ const $subMenu = this.$refs.subMenu
+ if ($subMenu) {
+ const handleMouseleave = $subMenu.handleMouseleave
+ $subMenu.handleMouseleave = (e) => {
+ if (this.device === 'mobile') {
+ return
+ }
+ handleMouseleave(e)
+ }
+ }
+ }
+ }
+}
diff --git a/zhi-admin-ui/src/layout/components/Sidebar/Item.vue b/zhi-admin-ui/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..be3285d
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,33 @@
+
diff --git a/zhi-admin-ui/src/layout/components/Sidebar/Link.vue b/zhi-admin-ui/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..8b0bc93
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/Sidebar/Logo.vue b/zhi-admin-ui/src/layout/components/Sidebar/Logo.vue
new file mode 100644
index 0000000..74464df
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/Sidebar/Logo.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/Sidebar/SidebarItem.vue b/zhi-admin-ui/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..4853fbb
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/Sidebar/index.vue b/zhi-admin-ui/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..51d0839
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/TagsView/ScrollPane.vue b/zhi-admin-ui/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..bb753a1
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/TagsView/index.vue b/zhi-admin-ui/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..cc98071
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/TagsView/index.vue
@@ -0,0 +1,332 @@
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/components/index.js b/zhi-admin-ui/src/layout/components/index.js
new file mode 100644
index 0000000..104bd3a
--- /dev/null
+++ b/zhi-admin-ui/src/layout/components/index.js
@@ -0,0 +1,5 @@
+export { default as AppMain } from './AppMain'
+export { default as Navbar } from './Navbar'
+export { default as Settings } from './Settings'
+export { default as Sidebar } from './Sidebar/index.vue'
+export { default as TagsView } from './TagsView/index.vue'
diff --git a/zhi-admin-ui/src/layout/index.vue b/zhi-admin-ui/src/layout/index.vue
new file mode 100644
index 0000000..f048657
--- /dev/null
+++ b/zhi-admin-ui/src/layout/index.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/layout/mixin/ResizeHandler.js b/zhi-admin-ui/src/layout/mixin/ResizeHandler.js
new file mode 100644
index 0000000..e8d0df8
--- /dev/null
+++ b/zhi-admin-ui/src/layout/mixin/ResizeHandler.js
@@ -0,0 +1,45 @@
+import store from '@/store'
+
+const { body } = document
+const WIDTH = 992 // refer to Bootstrap's responsive design
+
+export default {
+ watch: {
+ $route(route) {
+ if (this.device === 'mobile' && this.sidebar.opened) {
+ store.dispatch('app/closeSideBar', { withoutAnimation: false })
+ }
+ }
+ },
+ beforeMount() {
+ window.addEventListener('resize', this.$_resizeHandler)
+ },
+ beforeDestroy() {
+ window.removeEventListener('resize', this.$_resizeHandler)
+ },
+ mounted() {
+ const isMobile = this.$_isMobile()
+ if (isMobile) {
+ store.dispatch('app/toggleDevice', 'mobile')
+ store.dispatch('app/closeSideBar', { withoutAnimation: true })
+ }
+ },
+ methods: {
+ // use $_ for mixins properties
+ // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
+ $_isMobile() {
+ const rect = body.getBoundingClientRect()
+ return rect.width - 1 < WIDTH
+ },
+ $_resizeHandler() {
+ if (!document.hidden) {
+ const isMobile = this.$_isMobile()
+ store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop')
+
+ if (isMobile) {
+ store.dispatch('app/closeSideBar', { withoutAnimation: true })
+ }
+ }
+ }
+ }
+}
diff --git a/zhi-admin-ui/src/main.js b/zhi-admin-ui/src/main.js
new file mode 100644
index 0000000..c448ae9
--- /dev/null
+++ b/zhi-admin-ui/src/main.js
@@ -0,0 +1,110 @@
+import Vue from 'vue'
+import Cookies from 'js-cookie'
+import Element from 'element-ui'
+import './assets/styles/element-variables.scss'
+import '@/assets/styles/index.scss' // global css
+import '@/assets/styles/ruoyi.scss' // ruoyi css
+import App from './App'
+import store from './store'
+import router from './router'
+import directive from './directive' // directive
+import plugins from './plugins' // plugins
+import { download } from '@/utils/request'
+
+import './assets/icons' // icon
+import './permission' // permission control
+import { getDicts } from "@/api/system/dict/data";
+import { getConfigKey, updateConfigByKey } from "@/api/system/config";
+import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
+// 分页组件
+import Pagination from "@/components/Pagination";
+// 自定义表格工具组件
+import RightToolbar from "@/components/RightToolbar"
+// 富文本组件
+import Editor from "@/components/Editor"
+// 文件上传组件
+import FileUpload from "@/components/FileUpload"
+// 图片上传组件
+import ImageUpload from "@/components/ImageUpload"
+// 图片预览组件
+import ImagePreview from "@/components/ImagePreview"
+// 字典标签组件
+import DictTag from '@/components/DictTag'
+// 头部标签组件
+import VueMeta from 'vue-meta'
+// 字典数据组件
+import DictData from '@/components/DictData'
+import dayjs from "dayjs";
+
+import VueCalendarHeatmap from "vue-calendar-heatmap";
+import VueMarkdownEditor from '@kangc/v-md-editor';
+import '@kangc/v-md-editor/lib/style/base-editor.css';
+import vuepressTheme from '@kangc/v-md-editor/lib/theme/vuepress.js';
+import '@kangc/v-md-editor/lib/theme/style/vuepress.css';
+import createEmojiPlugin from '@kangc/v-md-editor/lib/plugins/emoji/index';
+import '@kangc/v-md-editor/lib/plugins/emoji/emoji.css';
+import Prism from 'prismjs';
+// 富文本编辑器
+import mavonEditor from "mavon-editor";
+import "mavon-editor/dist/css/index.css";
+
+VueMarkdownEditor.use(vuepressTheme, {
+ Prism,
+});
+VueMarkdownEditor.use(createEmojiPlugin());
+
+
+// 全局方法挂载
+Vue.prototype.getDicts = getDicts
+Vue.prototype.getConfigKey = getConfigKey
+Vue.prototype.updateConfigByKey = updateConfigByKey
+Vue.prototype.parseTime = parseTime
+Vue.prototype.resetForm = resetForm
+Vue.prototype.addDateRange = addDateRange
+Vue.prototype.selectDictLabel = selectDictLabel
+Vue.prototype.selectDictLabels = selectDictLabels
+Vue.prototype.download = download
+Vue.prototype.handleTree = handleTree
+Vue.prototype.$moment = dayjs;
+
+// 全局组件挂载
+Vue.component('DictTag', DictTag)
+Vue.component('Pagination', Pagination)
+Vue.component('RightToolbar', RightToolbar)
+Vue.component('Editor', Editor)
+Vue.component('FileUpload', FileUpload)
+Vue.component('ImageUpload', ImageUpload)
+Vue.component('ImagePreview', ImagePreview)
+
+Vue.use(directive)
+Vue.use(plugins)
+Vue.use(VueMeta)
+Vue.use(VueMarkdownEditor);
+Vue.use(VueCalendarHeatmap);
+Vue.use(mavonEditor);
+DictData.install()
+
+/**
+ * If you don't want to use mock-server
+ * you want to use MockJs for mock api
+ * you can execute: mockXHR()
+ *
+ * Currently MockJs will be used in the production environment,
+ * please remove it before going online! ! !
+ */
+
+// 修改 el-dialog 默认点击遮照为不关闭
+Element.Dialog.props.closeOnClickModal.default = false
+
+Vue.use(Element, {
+ size: Cookies.get('size') || 'medium' // set element-ui default size
+})
+
+Vue.config.productionTip = false
+
+new Vue({
+ el: '#app',
+ router,
+ store,
+ render: h => h(App)
+})
diff --git a/zhi-admin-ui/src/permission.js b/zhi-admin-ui/src/permission.js
new file mode 100644
index 0000000..4da3e7f
--- /dev/null
+++ b/zhi-admin-ui/src/permission.js
@@ -0,0 +1,56 @@
+import router from './router'
+import store from './store'
+import { Message } from 'element-ui'
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
+import { getToken } from '@/utils/auth'
+import { isRelogin } from '@/utils/request'
+
+NProgress.configure({ showSpinner: false })
+
+const whiteList = ['/login', '/auth-redirect', '/bind', '/register','/article/articles/*']
+
+router.beforeEach((to, from, next) => {
+ NProgress.start()
+ if (getToken()) {
+ to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
+ /* has token*/
+ if (to.path === '/login') {
+ next({ path: '/' })
+ NProgress.done()
+ } else {
+ if (store.getters.roles.length === 0) {
+ isRelogin.show = true
+ // 判断当前用户是否已拉取完user_info信息
+ store.dispatch('GetInfo').then(() => {
+ isRelogin.show = false
+ store.dispatch('GenerateRoutes').then(accessRoutes => {
+ // 根据roles权限生成可访问的路由表
+ router.addRoutes(accessRoutes) // 动态添加可访问路由表
+ next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
+ })
+ }).catch(err => {
+ store.dispatch('LogOut').then(() => {
+ Message.error(err)
+ next({ path: '/' })
+ })
+ })
+ } else {
+ next()
+ }
+ }
+ } else {
+ // 没有token
+ if (whiteList.indexOf(to.path) !== -1) {
+ // 在免登录白名单,直接进入
+ next()
+ } else {
+ next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
+ NProgress.done()
+ }
+ }
+})
+
+router.afterEach(() => {
+ NProgress.done()
+})
diff --git a/zhi-admin-ui/src/plugins/auth.js b/zhi-admin-ui/src/plugins/auth.js
new file mode 100644
index 0000000..6c6bc24
--- /dev/null
+++ b/zhi-admin-ui/src/plugins/auth.js
@@ -0,0 +1,60 @@
+import store from '@/store'
+
+function authPermission(permission) {
+ const all_permission = "*:*:*";
+ const permissions = store.getters && store.getters.permissions
+ if (permission && permission.length > 0) {
+ return permissions.some(v => {
+ return all_permission === v || v === permission
+ })
+ } else {
+ return false
+ }
+}
+
+function authRole(role) {
+ const super_admin = "admin";
+ const roles = store.getters && store.getters.roles
+ if (role && role.length > 0) {
+ return roles.some(v => {
+ return super_admin === v || v === role
+ })
+ } else {
+ return false
+ }
+}
+
+export default {
+ // 验证用户是否具备某权限
+ hasPermi(permission) {
+ return authPermission(permission);
+ },
+ // 验证用户是否含有指定权限,只需包含其中一个
+ hasPermiOr(permissions) {
+ return permissions.some(item => {
+ return authPermission(item)
+ })
+ },
+ // 验证用户是否含有指定权限,必须全部拥有
+ hasPermiAnd(permissions) {
+ return permissions.every(item => {
+ return authPermission(item)
+ })
+ },
+ // 验证用户是否具备某角色
+ hasRole(role) {
+ return authRole(role);
+ },
+ // 验证用户是否含有指定角色,只需包含其中一个
+ hasRoleOr(roles) {
+ return roles.some(item => {
+ return authRole(item)
+ })
+ },
+ // 验证用户是否含有指定角色,必须全部拥有
+ hasRoleAnd(roles) {
+ return roles.every(item => {
+ return authRole(item)
+ })
+ }
+}
diff --git a/zhi-admin-ui/src/plugins/cache.js b/zhi-admin-ui/src/plugins/cache.js
new file mode 100644
index 0000000..6b5c00b
--- /dev/null
+++ b/zhi-admin-ui/src/plugins/cache.js
@@ -0,0 +1,77 @@
+const sessionCache = {
+ set (key, value) {
+ if (!sessionStorage) {
+ return
+ }
+ if (key != null && value != null) {
+ sessionStorage.setItem(key, value)
+ }
+ },
+ get (key) {
+ if (!sessionStorage) {
+ return null
+ }
+ if (key == null) {
+ return null
+ }
+ return sessionStorage.getItem(key)
+ },
+ setJSON (key, jsonValue) {
+ if (jsonValue != null) {
+ this.set(key, JSON.stringify(jsonValue))
+ }
+ },
+ getJSON (key) {
+ const value = this.get(key)
+ if (value != null) {
+ return JSON.parse(value)
+ }
+ },
+ remove (key) {
+ sessionStorage.removeItem(key);
+ }
+}
+const localCache = {
+ set (key, value) {
+ if (!localStorage) {
+ return
+ }
+ if (key != null && value != null) {
+ localStorage.setItem(key, value)
+ }
+ },
+ get (key) {
+ if (!localStorage) {
+ return null
+ }
+ if (key == null) {
+ return null
+ }
+ return localStorage.getItem(key)
+ },
+ setJSON (key, jsonValue) {
+ if (jsonValue != null) {
+ this.set(key, JSON.stringify(jsonValue))
+ }
+ },
+ getJSON (key) {
+ const value = this.get(key)
+ if (value != null) {
+ return JSON.parse(value)
+ }
+ },
+ remove (key) {
+ localStorage.removeItem(key);
+ }
+}
+
+export default {
+ /**
+ * 会话级缓存
+ */
+ session: sessionCache,
+ /**
+ * 本地缓存
+ */
+ local: localCache
+}
diff --git a/zhi-admin-ui/src/plugins/download.js b/zhi-admin-ui/src/plugins/download.js
new file mode 100644
index 0000000..85138bb
--- /dev/null
+++ b/zhi-admin-ui/src/plugins/download.js
@@ -0,0 +1,65 @@
+import axios from 'axios'
+import {Loading, Message} from 'element-ui'
+import { saveAs } from 'file-saver'
+import { getToken } from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+import { blobValidate } from "@/utils/ruoyi";
+
+const baseURL = process.env.VUE_APP_BASE_API
+let downloadLoadingInstance;
+
+export default {
+ oss(ossId) {
+ var url = baseURL + '/system/oss/download/' + ossId
+ downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
+ axios({
+ method: 'get',
+ url: url,
+ responseType: 'blob',
+ headers: { 'Authorization': 'Bearer ' + getToken() }
+ }).then(async (res) => {
+ const isLogin = await blobValidate(res.data);
+ if (isLogin) {
+ const blob = new Blob([res.data], { type: 'application/octet-stream' })
+ this.saveAs(blob, decodeURI(res.headers['download-filename']))
+ } else {
+ this.printErrMsg(res.data);
+ }
+ downloadLoadingInstance.close();
+ }).catch((r) => {
+ console.error(r)
+ Message.error('下载文件出现错误,请联系管理员!')
+ downloadLoadingInstance.close();
+ })
+ },
+ zip(url, name) {
+ var url = baseURL + url
+ axios({
+ method: 'get',
+ url: url,
+ responseType: 'blob',
+ headers: {
+ 'Authorization': 'Bearer ' + getToken(),
+ 'datasource': localStorage.getItem("dataName")
+ }
+ }).then(async (res) => {
+ const isLogin = await blobValidate(res.data);
+ if (isLogin) {
+ const blob = new Blob([res.data], { type: 'application/zip' })
+ this.saveAs(blob, name)
+ } else {
+ this.printErrMsg(res.data);
+ }
+ })
+ },
+ saveAs(text, name, opts) {
+ saveAs(text, name, opts);
+ },
+ async printErrMsg(data) {
+ const resText = await data.text();
+ const rspObj = JSON.parse(resText);
+ const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
+ Message.error(errMsg);
+ }
+}
+
diff --git a/zhi-admin-ui/src/plugins/index.js b/zhi-admin-ui/src/plugins/index.js
new file mode 100644
index 0000000..d000f2d
--- /dev/null
+++ b/zhi-admin-ui/src/plugins/index.js
@@ -0,0 +1,20 @@
+import tab from './tab'
+import auth from './auth'
+import cache from './cache'
+import modal from './modal'
+import download from './download'
+
+export default {
+ install(Vue) {
+ // 页签操作
+ Vue.prototype.$tab = tab
+ // 认证对象
+ Vue.prototype.$auth = auth
+ // 缓存对象
+ Vue.prototype.$cache = cache
+ // 模态框对象
+ Vue.prototype.$modal = modal
+ // 下载文件
+ Vue.prototype.$download = download
+ }
+}
diff --git a/zhi-admin-ui/src/plugins/modal.js b/zhi-admin-ui/src/plugins/modal.js
new file mode 100644
index 0000000..b37ca14
--- /dev/null
+++ b/zhi-admin-ui/src/plugins/modal.js
@@ -0,0 +1,83 @@
+import { Message, MessageBox, Notification, Loading } from 'element-ui'
+
+let loadingInstance;
+
+export default {
+ // 消息提示
+ msg(content) {
+ Message.info(content)
+ },
+ // 错误消息
+ msgError(content) {
+ Message.error(content)
+ },
+ // 成功消息
+ msgSuccess(content) {
+ Message.success(content)
+ },
+ // 警告消息
+ msgWarning(content) {
+ Message.warning(content)
+ },
+ // 弹出提示
+ alert(content) {
+ MessageBox.alert(content, "系统提示")
+ },
+ // 错误提示
+ alertError(content) {
+ MessageBox.alert(content, "系统提示", { type: 'error' })
+ },
+ // 成功提示
+ alertSuccess(content) {
+ MessageBox.alert(content, "系统提示", { type: 'success' })
+ },
+ // 警告提示
+ alertWarning(content) {
+ MessageBox.alert(content, "系统提示", { type: 'warning' })
+ },
+ // 通知提示
+ notify(content) {
+ Notification.info(content)
+ },
+ // 错误通知
+ notifyError(content) {
+ Notification.error(content);
+ },
+ // 成功通知
+ notifySuccess(content) {
+ Notification.success(content)
+ },
+ // 警告通知
+ notifyWarning(content) {
+ Notification.warning(content)
+ },
+ // 确认窗体
+ confirm(content) {
+ return MessageBox.confirm(content, "系统提示", {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: "warning",
+ })
+ },
+ // 提交内容
+ prompt(content) {
+ return MessageBox.prompt(content, "系统提示", {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: "warning",
+ })
+ },
+ // 打开遮罩层
+ loading(content) {
+ loadingInstance = Loading.service({
+ lock: true,
+ text: content,
+ spinner: "el-icon-loading",
+ background: "rgba(0, 0, 0, 0.7)",
+ })
+ },
+ // 关闭遮罩层
+ closeLoading() {
+ loadingInstance.close();
+ }
+}
diff --git a/zhi-admin-ui/src/plugins/tab.js b/zhi-admin-ui/src/plugins/tab.js
new file mode 100644
index 0000000..cade9f7
--- /dev/null
+++ b/zhi-admin-ui/src/plugins/tab.js
@@ -0,0 +1,67 @@
+import store from '@/store'
+import router from '@/router';
+
+export default {
+ // 刷新当前tab页签
+ refreshPage(obj) {
+ const { path, query, matched } = router.currentRoute;
+ if (obj === undefined) {
+ matched.forEach((m) => {
+ if (m.components && m.components.default && m.components.default.name) {
+ if (!['Layout', 'ParentView'].includes(m.components.default.name)) {
+ obj = { name: m.components.default.name, path: path, query: query };
+ }
+ }
+ });
+ }
+ return store.dispatch('tagsView/delCachedView', obj).then(() => {
+ const { path, query } = obj
+ router.replace({
+ path: '/redirect' + path,
+ query: query
+ })
+ })
+ },
+ // 关闭当前tab页签,打开新页签
+ closeOpenPage(obj) {
+ store.dispatch("tagsView/delView", router.currentRoute);
+ if (obj !== undefined) {
+ return router.push(obj);
+ }
+ },
+ // 关闭指定tab页签
+ closePage(obj) {
+ if (obj === undefined) {
+ return store.dispatch('tagsView/delView', router.currentRoute).then(({ lastPath }) => {
+ return router.push(lastPath || '/');
+ });
+ }
+ return store.dispatch('tagsView/delView', obj);
+ },
+ // 关闭所有tab页签
+ closeAllPage() {
+ return store.dispatch('tagsView/delAllViews');
+ },
+ // 关闭左侧tab页签
+ closeLeftPage(obj) {
+ return store.dispatch('tagsView/delLeftTags', obj || router.currentRoute);
+ },
+ // 关闭右侧tab页签
+ closeRightPage(obj) {
+ return store.dispatch('tagsView/delRightTags', obj || router.currentRoute);
+ },
+ // 关闭其他tab页签
+ closeOtherPage(obj) {
+ return store.dispatch('tagsView/delOthersViews', obj || router.currentRoute);
+ },
+ // 添加tab页签
+ openPage(title, url, params) {
+ var obj = { path: url, meta: { title: title } }
+ store.dispatch('tagsView/addView', obj);
+ return router.push({ path: url, query: params });
+ },
+ // 修改tab页签
+ updatePage(obj) {
+ return store.dispatch('tagsView/updateVisitedView', obj);
+ }
+}
diff --git a/zhi-admin-ui/src/router/index.js b/zhi-admin-ui/src/router/index.js
new file mode 100644
index 0000000..dd4d5f1
--- /dev/null
+++ b/zhi-admin-ui/src/router/index.js
@@ -0,0 +1,178 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+
+Vue.use(Router)
+
+/* Layout */
+import Layout from '@/layout'
+
+/**
+ * Note: 路由配置项
+ *
+ * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1
+ * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面
+ * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面
+ * // 若你想不管路由下面的 children 声明的个数都显示你的根路由
+ * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由
+ * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
+ * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题
+ * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数
+ * roles: ['admin', 'common'] // 访问路由的角色权限
+ * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限
+ * meta : {
+ noCache: true // 如果设置为true,则不会被 缓存(默认 false)
+ title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字
+ icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg
+ breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示
+ activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。
+ }
+ */
+
+// 公共路由
+export const constantRoutes = [
+ {
+ path: '/redirect',
+ component: Layout,
+ hidden: true,
+ children: [
+ {
+ path: '/redirect/:path(.*)',
+ component: () => import('@/views/redirect')
+ }
+ ]
+ },
+ {
+ path: '/login',
+ component: () => import('@/views/login'),
+ hidden: true
+ },
+ {
+ path: '/register',
+ component: () => import('@/views/register'),
+ hidden: true
+ },
+ {
+ path: '/404',
+ component: () => import('@/views/error/404'),
+ hidden: true
+ },
+ {
+ path: '/401',
+ component: () => import('@/views/error/401'),
+ hidden: true
+ },
+ {
+ path: '',
+ component: Layout,
+ redirect: 'index',
+ children: [
+ {
+ path: 'index',
+ component: () => import('@/views/index'),
+ name: 'Index',
+ meta: { title: '首页', icon: 'dashboard', affix: true }
+ }
+ ]
+ },
+ {
+ path: '/user',
+ component: Layout,
+ hidden: true,
+ redirect: 'noredirect',
+ children: [
+ {
+ path: 'profile',
+ component: () => import('@/views/system/user/profile/index'),
+ name: 'Profile',
+ meta: { title: '个人中心', icon: 'user' }
+ }
+ ]
+ }
+]
+
+// 动态路由,基于用户权限动态去加载
+export const dynamicRoutes = [
+ {
+ path: '/system/user-auth',
+ component: Layout,
+ hidden: true,
+ permissions: ['system:user:edit'],
+ children: [
+ {
+ path: 'role/:userId(\\d+)',
+ component: () => import('@/views/system/user/authRole'),
+ name: 'AuthRole',
+ meta: { title: '分配角色', activeMenu: '/system/user' }
+ }
+ ]
+ },
+ {
+ path: '/system/role-auth',
+ component: Layout,
+ hidden: true,
+ permissions: ['system:role:edit'],
+ children: [
+ {
+ path: 'user/:roleId(\\d+)',
+ component: () => import('@/views/system/role/authUser'),
+ name: 'AuthUser',
+ meta: { title: '分配用户', activeMenu: '/system/role' }
+ }
+ ]
+ },
+ {
+ path: '/system/dict-data',
+ component: Layout,
+ hidden: true,
+ permissions: ['system:dict:list'],
+ children: [
+ {
+ path: 'index/:dictId(\\d+)',
+ component: () => import('@/views/system/dict/data'),
+ name: 'Data',
+ meta: { title: '字典数据', activeMenu: '/system/dict' }
+ }
+ ]
+ },
+ {
+ path: '/system/oss-config',
+ component: Layout,
+ hidden: true,
+ permissions: ['system:oss:list'],
+ children: [
+ {
+ path: 'index',
+ component: () => import('@/views/system/oss/config'),
+ name: 'OssConfig',
+ meta: { title: '配置管理', activeMenu: '/system/oss' }
+ }
+ ]
+ },
+ {
+ path: '/tool/gen-edit',
+ component: Layout,
+ hidden: true,
+ permissions: ['tool:gen:edit'],
+ children: [
+ {
+ path: 'index/:tableId(\\d+)',
+ component: () => import('@/views/tool/gen/editTable'),
+ name: 'GenEdit',
+ meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
+ }
+ ]
+ }
+]
+
+// 防止连续点击多次路由报错
+let routerPush = Router.prototype.push;
+Router.prototype.push = function push(location) {
+ return routerPush.call(this, location).catch(err => err)
+}
+
+export default new Router({
+ base: process.env.VUE_APP_CONTEXT_PATH,
+ mode: 'history', // 去掉url中的#
+ scrollBehavior: () => ({ y: 0 }),
+ routes: constantRoutes
+})
diff --git a/zhi-admin-ui/src/settings.js b/zhi-admin-ui/src/settings.js
new file mode 100644
index 0000000..6a0b09f
--- /dev/null
+++ b/zhi-admin-ui/src/settings.js
@@ -0,0 +1,44 @@
+module.exports = {
+ /**
+ * 侧边栏主题 深色主题theme-dark,浅色主题theme-light
+ */
+ sideTheme: 'theme-dark',
+
+ /**
+ * 是否系统布局配置
+ */
+ showSettings: false,
+
+ /**
+ * 是否显示顶部导航
+ */
+ topNav: false,
+
+ /**
+ * 是否显示 tagsView
+ */
+ tagsView: true,
+
+ /**
+ * 是否固定头部
+ */
+ fixedHeader: false,
+
+ /**
+ * 是否显示logo
+ */
+ sidebarLogo: true,
+
+ /**
+ * 是否显示动态标题
+ */
+ dynamicTitle: false,
+
+ /**
+ * @type {string | array} 'production' | ['production', 'development']
+ * @description Need show err logs component.
+ * The default is only used in the production env
+ * If you want to also use it in dev, you can pass ['production', 'development']
+ */
+ errorLog: 'production'
+}
diff --git a/zhi-admin-ui/src/store/getters.js b/zhi-admin-ui/src/store/getters.js
new file mode 100644
index 0000000..8adb1b6
--- /dev/null
+++ b/zhi-admin-ui/src/store/getters.js
@@ -0,0 +1,19 @@
+const getters = {
+ sidebar: state => state.app.sidebar,
+ size: state => state.app.size,
+ device: state => state.app.device,
+ dict: state => state.dict.dict,
+ visitedViews: state => state.tagsView.visitedViews,
+ cachedViews: state => state.tagsView.cachedViews,
+ token: state => state.user.token,
+ avatar: state => state.user.avatar,
+ name: state => state.user.name,
+ introduction: state => state.user.introduction,
+ roles: state => state.user.roles,
+ permissions: state => state.user.permissions,
+ permission_routes: state => state.permission.routes,
+ topbarRouters:state => state.permission.topbarRouters,
+ defaultRoutes:state => state.permission.defaultRoutes,
+ sidebarRouters:state => state.permission.sidebarRouters,
+}
+export default getters
diff --git a/zhi-admin-ui/src/store/index.js b/zhi-admin-ui/src/store/index.js
new file mode 100644
index 0000000..97aaef8
--- /dev/null
+++ b/zhi-admin-ui/src/store/index.js
@@ -0,0 +1,25 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import app from './modules/app'
+import dict from './modules/dict'
+import user from './modules/user'
+import tagsView from './modules/tagsView'
+import permission from './modules/permission'
+import settings from './modules/settings'
+import getters from './getters'
+
+Vue.use(Vuex)
+
+const store = new Vuex.Store({
+ modules: {
+ app,
+ dict,
+ user,
+ tagsView,
+ permission,
+ settings
+ },
+ getters
+})
+
+export default store
diff --git a/zhi-admin-ui/src/store/modules/app.js b/zhi-admin-ui/src/store/modules/app.js
new file mode 100644
index 0000000..3e22d1c
--- /dev/null
+++ b/zhi-admin-ui/src/store/modules/app.js
@@ -0,0 +1,66 @@
+import Cookies from 'js-cookie'
+
+const state = {
+ sidebar: {
+ opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
+ withoutAnimation: false,
+ hide: false
+ },
+ device: 'desktop',
+ size: Cookies.get('size') || 'medium'
+}
+
+const mutations = {
+ TOGGLE_SIDEBAR: state => {
+ if (state.sidebar.hide) {
+ return false;
+ }
+ state.sidebar.opened = !state.sidebar.opened
+ state.sidebar.withoutAnimation = false
+ if (state.sidebar.opened) {
+ Cookies.set('sidebarStatus', 1)
+ } else {
+ Cookies.set('sidebarStatus', 0)
+ }
+ },
+ CLOSE_SIDEBAR: (state, withoutAnimation) => {
+ Cookies.set('sidebarStatus', 0)
+ state.sidebar.opened = false
+ state.sidebar.withoutAnimation = withoutAnimation
+ },
+ TOGGLE_DEVICE: (state, device) => {
+ state.device = device
+ },
+ SET_SIZE: (state, size) => {
+ state.size = size
+ Cookies.set('size', size)
+ },
+ SET_SIDEBAR_HIDE: (state, status) => {
+ state.sidebar.hide = status
+ }
+}
+
+const actions = {
+ toggleSideBar({ commit }) {
+ commit('TOGGLE_SIDEBAR')
+ },
+ closeSideBar({ commit }, { withoutAnimation }) {
+ commit('CLOSE_SIDEBAR', withoutAnimation)
+ },
+ toggleDevice({ commit }, device) {
+ commit('TOGGLE_DEVICE', device)
+ },
+ setSize({ commit }, size) {
+ commit('SET_SIZE', size)
+ },
+ toggleSideBarHide({ commit }, status) {
+ commit('SET_SIDEBAR_HIDE', status)
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
diff --git a/zhi-admin-ui/src/store/modules/dict.js b/zhi-admin-ui/src/store/modules/dict.js
new file mode 100644
index 0000000..f95bead
--- /dev/null
+++ b/zhi-admin-ui/src/store/modules/dict.js
@@ -0,0 +1,50 @@
+const state = {
+ dict: new Array()
+}
+const mutations = {
+ SET_DICT: (state, { key, value }) => {
+ if (key !== null && key !== "") {
+ state.dict.push({
+ key: key,
+ value: value
+ })
+ }
+ },
+ REMOVE_DICT: (state, key) => {
+ try {
+ for (let i = 0; i < state.dict.length; i++) {
+ if (state.dict[i].key == key) {
+ state.dict.splice(i, i)
+ return true
+ }
+ }
+ } catch (e) {
+ }
+ },
+ CLEAN_DICT: (state) => {
+ state.dict = new Array()
+ }
+}
+
+const actions = {
+ // 设置字典
+ setDict({ commit }, data) {
+ commit('SET_DICT', data)
+ },
+ // 删除字典
+ removeDict({ commit }, key) {
+ commit('REMOVE_DICT', key)
+ },
+ // 清空字典
+ cleanDict({ commit }) {
+ commit('CLEAN_DICT')
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/zhi-admin-ui/src/store/modules/permission.js b/zhi-admin-ui/src/store/modules/permission.js
new file mode 100644
index 0000000..2287665
--- /dev/null
+++ b/zhi-admin-ui/src/store/modules/permission.js
@@ -0,0 +1,133 @@
+import auth from '@/plugins/auth'
+import router, { constantRoutes, dynamicRoutes } from '@/router'
+import { getRouters } from '@/api/menu'
+import Layout from '@/layout/index'
+import ParentView from '@/components/ParentView'
+import InnerLink from '@/layout/components/InnerLink'
+
+const permission = {
+ state: {
+ routes: [],
+ addRoutes: [],
+ defaultRoutes: [],
+ topbarRouters: [],
+ sidebarRouters: []
+ },
+ mutations: {
+ SET_ROUTES: (state, routes) => {
+ state.addRoutes = routes
+ state.routes = constantRoutes.concat(routes)
+ },
+ SET_DEFAULT_ROUTES: (state, routes) => {
+ state.defaultRoutes = constantRoutes.concat(routes)
+ },
+ SET_TOPBAR_ROUTES: (state, routes) => {
+ state.topbarRouters = routes
+ },
+ SET_SIDEBAR_ROUTERS: (state, routes) => {
+ state.sidebarRouters = routes
+ },
+ },
+ actions: {
+ // 生成路由
+ GenerateRoutes({ commit }) {
+ return new Promise(resolve => {
+ // 向后端请求路由数据
+ getRouters().then(res => {
+ const sdata = JSON.parse(JSON.stringify(res.data))
+ const rdata = JSON.parse(JSON.stringify(res.data))
+ const sidebarRoutes = filterAsyncRouter(sdata)
+ const rewriteRoutes = filterAsyncRouter(rdata, false, true)
+ const asyncRoutes = filterDynamicRoutes(dynamicRoutes);
+ rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
+ router.addRoutes(asyncRoutes);
+ commit('SET_ROUTES', rewriteRoutes)
+ commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))
+ commit('SET_DEFAULT_ROUTES', sidebarRoutes)
+ commit('SET_TOPBAR_ROUTES', sidebarRoutes)
+ resolve(rewriteRoutes)
+ })
+ })
+ }
+ }
+}
+
+// 遍历后台传来的路由字符串,转换为组件对象
+function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
+ return asyncRouterMap.filter(route => {
+ if (type && route.children) {
+ route.children = filterChildren(route.children)
+ }
+ if (route.component) {
+ // Layout ParentView 组件特殊处理
+ if (route.component === 'Layout') {
+ route.component = Layout
+ } else if (route.component === 'ParentView') {
+ route.component = ParentView
+ } else if (route.component === 'InnerLink') {
+ route.component = InnerLink
+ } else {
+ route.component = loadView(route.component)
+ }
+ }
+ if (route.children != null && route.children && route.children.length) {
+ route.children = filterAsyncRouter(route.children, route, type)
+ } else {
+ delete route['children']
+ delete route['redirect']
+ }
+ return true
+ })
+}
+
+function filterChildren(childrenMap, lastRouter = false) {
+ var children = []
+ childrenMap.forEach((el, index) => {
+ if (el.children && el.children.length) {
+ if (el.component === 'ParentView' && !lastRouter) {
+ el.children.forEach(c => {
+ c.path = el.path + '/' + c.path
+ if (c.children && c.children.length) {
+ children = children.concat(filterChildren(c.children, c))
+ return
+ }
+ children.push(c)
+ })
+ return
+ }
+ }
+ if (lastRouter) {
+ el.path = lastRouter.path + '/' + el.path
+ }
+ children = children.concat(el)
+ })
+ return children
+}
+
+// 动态路由遍历,验证是否具备权限
+export function filterDynamicRoutes(routes) {
+ const res = []
+ routes.forEach(route => {
+ if (route.permissions) {
+ if (auth.hasPermiOr(route.permissions)) {
+ res.push(route)
+ }
+ } else if (route.roles) {
+ if (auth.hasRoleOr(route.roles)) {
+ res.push(route)
+ }
+ }
+ })
+ return res
+}
+
+export const loadView = (view) => {
+ if (process.env.NODE_ENV === 'development') {
+ return (resolve) => require([`@/views/${view}`], resolve)
+ } else {
+ // 使用 import 实现生产环境的路由懒加载
+ return () => import(`@/views/${view}`)
+ }
+}
+
+export default permission
diff --git a/zhi-admin-ui/src/store/modules/settings.js b/zhi-admin-ui/src/store/modules/settings.js
new file mode 100644
index 0000000..2455a1e
--- /dev/null
+++ b/zhi-admin-ui/src/store/modules/settings.js
@@ -0,0 +1,42 @@
+import defaultSettings from '@/settings'
+
+const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings
+
+const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''
+const state = {
+ title: '',
+ theme: storageSetting.theme || '#409EFF',
+ sideTheme: storageSetting.sideTheme || sideTheme,
+ showSettings: showSettings,
+ topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
+ tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
+ fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader,
+ sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo,
+ dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle
+}
+const mutations = {
+ CHANGE_SETTING: (state, { key, value }) => {
+ if (state.hasOwnProperty(key)) {
+ state[key] = value
+ }
+ }
+}
+
+const actions = {
+ // 修改布局设置
+ changeSetting({ commit }, data) {
+ commit('CHANGE_SETTING', data)
+ },
+ // 设置网页标题
+ setTitle({ commit }, title) {
+ state.title = title
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/zhi-admin-ui/src/store/modules/tagsView.js b/zhi-admin-ui/src/store/modules/tagsView.js
new file mode 100644
index 0000000..5fc011c
--- /dev/null
+++ b/zhi-admin-ui/src/store/modules/tagsView.js
@@ -0,0 +1,228 @@
+const state = {
+ visitedViews: [],
+ cachedViews: [],
+ iframeViews: []
+}
+
+const mutations = {
+ ADD_IFRAME_VIEW: (state, view) => {
+ if (state.iframeViews.some(v => v.path === view.path)) return
+ state.iframeViews.push(
+ Object.assign({}, view, {
+ title: view.meta.title || 'no-name'
+ })
+ )
+ },
+ ADD_VISITED_VIEW: (state, view) => {
+ if (state.visitedViews.some(v => v.path === view.path)) return
+ state.visitedViews.push(
+ Object.assign({}, view, {
+ title: view.meta.title || 'no-name'
+ })
+ )
+ },
+ ADD_CACHED_VIEW: (state, view) => {
+ if (state.cachedViews.includes(view.name)) return
+ if (view.meta && !view.meta.noCache) {
+ state.cachedViews.push(view.name)
+ }
+ },
+ DEL_VISITED_VIEW: (state, view) => {
+ for (const [i, v] of state.visitedViews.entries()) {
+ if (v.path === view.path) {
+ state.visitedViews.splice(i, 1)
+ break
+ }
+ }
+ state.iframeViews = state.iframeViews.filter(item => item.path !== view.path)
+ },
+ DEL_IFRAME_VIEW: (state, view) => {
+ state.iframeViews = state.iframeViews.filter(item => item.path !== view.path)
+ },
+ DEL_CACHED_VIEW: (state, view) => {
+ const index = state.cachedViews.indexOf(view.name)
+ index > -1 && state.cachedViews.splice(index, 1)
+ },
+
+ DEL_OTHERS_VISITED_VIEWS: (state, view) => {
+ state.visitedViews = state.visitedViews.filter(v => {
+ return v.meta.affix || v.path === view.path
+ })
+ state.iframeViews = state.iframeViews.filter(item => item.path === view.path)
+ },
+ DEL_OTHERS_CACHED_VIEWS: (state, view) => {
+ const index = state.cachedViews.indexOf(view.name)
+ if (index > -1) {
+ state.cachedViews = state.cachedViews.slice(index, index + 1)
+ } else {
+ state.cachedViews = []
+ }
+ },
+ DEL_ALL_VISITED_VIEWS: state => {
+ // keep affix tags
+ const affixTags = state.visitedViews.filter(tag => tag.meta.affix)
+ state.visitedViews = affixTags
+ state.iframeViews = []
+ },
+ DEL_ALL_CACHED_VIEWS: state => {
+ state.cachedViews = []
+ },
+ UPDATE_VISITED_VIEW: (state, view) => {
+ for (let v of state.visitedViews) {
+ if (v.path === view.path) {
+ v = Object.assign(v, view)
+ break
+ }
+ }
+ },
+ DEL_RIGHT_VIEWS: (state, view) => {
+ const index = state.visitedViews.findIndex(v => v.path === view.path)
+ if (index === -1) {
+ return
+ }
+ state.visitedViews = state.visitedViews.filter((item, idx) => {
+ if (idx <= index || (item.meta && item.meta.affix)) {
+ return true
+ }
+ const i = state.cachedViews.indexOf(item.name)
+ if (i > -1) {
+ state.cachedViews.splice(i, 1)
+ }
+ if(item.meta.link) {
+ const fi = state.iframeViews.findIndex(v => v.path === item.path)
+ state.iframeViews.splice(fi, 1)
+ }
+ return false
+ })
+ },
+ DEL_LEFT_VIEWS: (state, view) => {
+ const index = state.visitedViews.findIndex(v => v.path === view.path)
+ if (index === -1) {
+ return
+ }
+ state.visitedViews = state.visitedViews.filter((item, idx) => {
+ if (idx >= index || (item.meta && item.meta.affix)) {
+ return true
+ }
+ const i = state.cachedViews.indexOf(item.name)
+ if (i > -1) {
+ state.cachedViews.splice(i, 1)
+ }
+ if(item.meta.link) {
+ const fi = state.iframeViews.findIndex(v => v.path === item.path)
+ state.iframeViews.splice(fi, 1)
+ }
+ return false
+ })
+ }
+}
+
+const actions = {
+ addView({ dispatch }, view) {
+ dispatch('addVisitedView', view)
+ dispatch('addCachedView', view)
+ },
+ addIframeView({ commit }, view) {
+ commit('ADD_IFRAME_VIEW', view)
+ },
+ addVisitedView({ commit }, view) {
+ commit('ADD_VISITED_VIEW', view)
+ },
+ addCachedView({ commit }, view) {
+ commit('ADD_CACHED_VIEW', view)
+ },
+ delView({ dispatch, state }, view) {
+ return new Promise(resolve => {
+ dispatch('delVisitedView', view)
+ dispatch('delCachedView', view)
+ resolve({
+ visitedViews: [...state.visitedViews],
+ cachedViews: [...state.cachedViews]
+ })
+ })
+ },
+ delVisitedView({ commit, state }, view) {
+ return new Promise(resolve => {
+ commit('DEL_VISITED_VIEW', view)
+ resolve([...state.visitedViews])
+ })
+ },
+ delIframeView({ commit, state }, view) {
+ return new Promise(resolve => {
+ commit('DEL_IFRAME_VIEW', view)
+ resolve([...state.iframeViews])
+ })
+ },
+ delCachedView({ commit, state }, view) {
+ return new Promise(resolve => {
+ commit('DEL_CACHED_VIEW', view)
+ resolve([...state.cachedViews])
+ })
+ },
+ delOthersViews({ dispatch, state }, view) {
+ return new Promise(resolve => {
+ dispatch('delOthersVisitedViews', view)
+ dispatch('delOthersCachedViews', view)
+ resolve({
+ visitedViews: [...state.visitedViews],
+ cachedViews: [...state.cachedViews]
+ })
+ })
+ },
+ delOthersVisitedViews({ commit, state }, view) {
+ return new Promise(resolve => {
+ commit('DEL_OTHERS_VISITED_VIEWS', view)
+ resolve([...state.visitedViews])
+ })
+ },
+ delOthersCachedViews({ commit, state }, view) {
+ return new Promise(resolve => {
+ commit('DEL_OTHERS_CACHED_VIEWS', view)
+ resolve([...state.cachedViews])
+ })
+ },
+ delAllViews({ dispatch, state }, view) {
+ return new Promise(resolve => {
+ dispatch('delAllVisitedViews', view)
+ dispatch('delAllCachedViews', view)
+ resolve({
+ visitedViews: [...state.visitedViews],
+ cachedViews: [...state.cachedViews]
+ })
+ })
+ },
+ delAllVisitedViews({ commit, state }) {
+ return new Promise(resolve => {
+ commit('DEL_ALL_VISITED_VIEWS')
+ resolve([...state.visitedViews])
+ })
+ },
+ delAllCachedViews({ commit, state }) {
+ return new Promise(resolve => {
+ commit('DEL_ALL_CACHED_VIEWS')
+ resolve([...state.cachedViews])
+ })
+ },
+ updateVisitedView({ commit }, view) {
+ commit('UPDATE_VISITED_VIEW', view)
+ },
+ delRightTags({ commit }, view) {
+ return new Promise(resolve => {
+ commit('DEL_RIGHT_VIEWS', view)
+ resolve([...state.visitedViews])
+ })
+ },
+ delLeftTags({ commit }, view) {
+ return new Promise(resolve => {
+ commit('DEL_LEFT_VIEWS', view)
+ resolve([...state.visitedViews])
+ })
+ },
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
diff --git a/zhi-admin-ui/src/store/modules/user.js b/zhi-admin-ui/src/store/modules/user.js
new file mode 100644
index 0000000..d67c9a4
--- /dev/null
+++ b/zhi-admin-ui/src/store/modules/user.js
@@ -0,0 +1,96 @@
+import { login, logout, getInfo } from '@/api/login'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+
+const user = {
+ state: {
+ token: getToken(),
+ name: '',
+ avatar: '',
+ roles: [],
+ permissions: []
+ },
+
+ mutations: {
+ SET_TOKEN: (state, token) => {
+ state.token = token
+ },
+ SET_NAME: (state, name) => {
+ state.name = name
+ },
+ SET_AVATAR: (state, avatar) => {
+ state.avatar = avatar
+ },
+ SET_ROLES: (state, roles) => {
+ state.roles = roles
+ },
+ SET_PERMISSIONS: (state, permissions) => {
+ state.permissions = permissions
+ }
+ },
+
+ actions: {
+ // 登录
+ Login({ commit }, userInfo) {
+ const username = userInfo.username.trim()
+ const password = userInfo.password
+ const code = userInfo.code
+ const uuid = userInfo.uuid
+ return new Promise((resolve, reject) => {
+ login(username, password, code, uuid).then(res => {
+ setToken(res.data.token)
+ commit('SET_TOKEN', res.data.token)
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
+
+ // 获取用户信息
+ GetInfo({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ getInfo().then(res => {
+ const user = res.data.user
+ const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : user.avatar;
+ if (res.data.roles && res.data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
+ commit('SET_ROLES', res.data.roles)
+ commit('SET_PERMISSIONS', res.data.permissions)
+ } else {
+ commit('SET_ROLES', ['ROLE_DEFAULT'])
+ }
+ commit('SET_NAME', user.userName)
+ commit('SET_AVATAR', avatar)
+ resolve(res)
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
+
+ // 退出系统
+ LogOut({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ logout(state.token).then(() => {
+ commit('SET_TOKEN', '')
+ commit('SET_ROLES', [])
+ commit('SET_PERMISSIONS', [])
+ removeToken()
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
+
+ // 前端 登出
+ FedLogOut({ commit }) {
+ return new Promise(resolve => {
+ commit('SET_TOKEN', '')
+ removeToken()
+ resolve()
+ })
+ }
+ }
+}
+
+export default user
diff --git a/zhi-admin-ui/src/utils/auth.js b/zhi-admin-ui/src/utils/auth.js
new file mode 100644
index 0000000..08a43d6
--- /dev/null
+++ b/zhi-admin-ui/src/utils/auth.js
@@ -0,0 +1,15 @@
+import Cookies from 'js-cookie'
+
+const TokenKey = 'Admin-Token'
+
+export function getToken() {
+ return Cookies.get(TokenKey)
+}
+
+export function setToken(token) {
+ return Cookies.set(TokenKey, token)
+}
+
+export function removeToken() {
+ return Cookies.remove(TokenKey)
+}
diff --git a/zhi-admin-ui/src/utils/dict/Dict.js b/zhi-admin-ui/src/utils/dict/Dict.js
new file mode 100644
index 0000000..104bd6e
--- /dev/null
+++ b/zhi-admin-ui/src/utils/dict/Dict.js
@@ -0,0 +1,82 @@
+import Vue from 'vue'
+import { mergeRecursive } from "@/utils/ruoyi";
+import DictMeta from './DictMeta'
+import DictData from './DictData'
+
+const DEFAULT_DICT_OPTIONS = {
+ types: [],
+}
+
+/**
+ * @classdesc 字典
+ * @property {Object} label 标签对象,内部属性名为字典类型名称
+ * @property {Object} dict 字段数组,内部属性名为字典类型名称
+ * @property {Array.} _dictMetas 字典元数据数组
+ */
+export default class Dict {
+ constructor() {
+ this.owner = null
+ this.label = {}
+ this.type = {}
+ }
+
+ init(options) {
+ if (options instanceof Array) {
+ options = { types: options }
+ }
+ const opts = mergeRecursive(DEFAULT_DICT_OPTIONS, options)
+ if (opts.types === undefined) {
+ throw new Error('need dict types')
+ }
+ const ps = []
+ this._dictMetas = opts.types.map(t => DictMeta.parse(t))
+ this._dictMetas.forEach(dictMeta => {
+ const type = dictMeta.type
+ Vue.set(this.label, type, {})
+ Vue.set(this.type, type, [])
+ if (dictMeta.lazy) {
+ return
+ }
+ ps.push(loadDict(this, dictMeta))
+ })
+ return Promise.all(ps)
+ }
+
+ /**
+ * 重新加载字典
+ * @param {String} type 字典类型
+ */
+ reloadDict(type) {
+ const dictMeta = this._dictMetas.find(e => e.type === type)
+ if (dictMeta === undefined) {
+ return Promise.reject(`the dict meta of ${type} was not found`)
+ }
+ return loadDict(this, dictMeta)
+ }
+}
+
+/**
+ * 加载字典
+ * @param {Dict} dict 字典
+ * @param {DictMeta} dictMeta 字典元数据
+ * @returns {Promise}
+ */
+function loadDict(dict, dictMeta) {
+ return dictMeta.request(dictMeta)
+ .then(response => {
+ const type = dictMeta.type
+ let dicts = dictMeta.responseConverter(response, dictMeta)
+ if (!(dicts instanceof Array)) {
+ console.error('the return of responseConverter must be Array.')
+ dicts = []
+ } else if (dicts.filter(d => d instanceof DictData).length !== dicts.length) {
+ console.error('the type of elements in dicts must be DictData')
+ dicts = []
+ }
+ dict.type[type].splice(0, Number.MAX_SAFE_INTEGER, ...dicts)
+ dicts.forEach(d => {
+ Vue.set(dict.label[type], d.value, d.label)
+ })
+ return dicts
+ })
+}
diff --git a/zhi-admin-ui/src/utils/dict/DictConverter.js b/zhi-admin-ui/src/utils/dict/DictConverter.js
new file mode 100644
index 0000000..0cf5df8
--- /dev/null
+++ b/zhi-admin-ui/src/utils/dict/DictConverter.js
@@ -0,0 +1,17 @@
+import DictOptions from './DictOptions'
+import DictData from './DictData'
+
+export default function(dict, dictMeta) {
+ const label = determineDictField(dict, dictMeta.labelField, ...DictOptions.DEFAULT_LABEL_FIELDS)
+ const value = determineDictField(dict, dictMeta.valueField, ...DictOptions.DEFAULT_VALUE_FIELDS)
+ return new DictData(dict[label], dict[value], dict)
+}
+
+/**
+ * 确定字典字段
+ * @param {DictData} dict
+ * @param {...String} fields
+ */
+function determineDictField(dict, ...fields) {
+ return fields.find(f => Object.prototype.hasOwnProperty.call(dict, f))
+}
diff --git a/zhi-admin-ui/src/utils/dict/DictData.js b/zhi-admin-ui/src/utils/dict/DictData.js
new file mode 100644
index 0000000..afc763e
--- /dev/null
+++ b/zhi-admin-ui/src/utils/dict/DictData.js
@@ -0,0 +1,13 @@
+/**
+ * @classdesc 字典数据
+ * @property {String} label 标签
+ * @property {*} value 标签
+ * @property {Object} raw 原始数据
+ */
+export default class DictData {
+ constructor(label, value, raw) {
+ this.label = label
+ this.value = value
+ this.raw = raw
+ }
+}
diff --git a/zhi-admin-ui/src/utils/dict/DictMeta.js b/zhi-admin-ui/src/utils/dict/DictMeta.js
new file mode 100644
index 0000000..9779daa
--- /dev/null
+++ b/zhi-admin-ui/src/utils/dict/DictMeta.js
@@ -0,0 +1,38 @@
+import { mergeRecursive } from "@/utils/ruoyi";
+import DictOptions from './DictOptions'
+
+/**
+ * @classdesc 字典元数据
+ * @property {String} type 类型
+ * @property {Function} request 请求
+ * @property {String} label 标签字段
+ * @property {String} value 值字段
+ */
+export default class DictMeta {
+ constructor(options) {
+ this.type = options.type
+ this.request = options.request
+ this.responseConverter = options.responseConverter
+ this.labelField = options.labelField
+ this.valueField = options.valueField
+ this.lazy = options.lazy === true
+ }
+}
+
+
+/**
+ * 解析字典元数据
+ * @param {Object} options
+ * @returns {DictMeta}
+ */
+DictMeta.parse= function(options) {
+ let opts = null
+ if (typeof options === 'string') {
+ opts = DictOptions.metas[options] || {}
+ opts.type = options
+ } else if (typeof options === 'object') {
+ opts = options
+ }
+ opts = mergeRecursive(DictOptions.metas['*'], opts)
+ return new DictMeta(opts)
+}
diff --git a/zhi-admin-ui/src/utils/dict/DictOptions.js b/zhi-admin-ui/src/utils/dict/DictOptions.js
new file mode 100644
index 0000000..338a94e
--- /dev/null
+++ b/zhi-admin-ui/src/utils/dict/DictOptions.js
@@ -0,0 +1,51 @@
+import { mergeRecursive } from "@/utils/ruoyi";
+import dictConverter from './DictConverter'
+
+export const options = {
+ metas: {
+ '*': {
+ /**
+ * 字典请求,方法签名为function(dictMeta: DictMeta): Promise
+ */
+ request: (dictMeta) => {
+ console.log(`load dict ${dictMeta.type}`)
+ return Promise.resolve([])
+ },
+ /**
+ * 字典响应数据转换器,方法签名为function(response: Object, dictMeta: DictMeta): DictData
+ */
+ responseConverter,
+ labelField: 'label',
+ valueField: 'value',
+ },
+ },
+ /**
+ * 默认标签字段
+ */
+ DEFAULT_LABEL_FIELDS: ['label', 'name', 'title'],
+ /**
+ * 默认值字段
+ */
+ DEFAULT_VALUE_FIELDS: ['value', 'id', 'uid', 'key'],
+}
+
+/**
+ * 映射字典
+ * @param {Object} response 字典数据
+ * @param {DictMeta} dictMeta 字典元数据
+ * @returns {DictData}
+ */
+function responseConverter(response, dictMeta) {
+ const dicts = response.content instanceof Array ? response.content : response
+ if (dicts === undefined) {
+ console.warn(`no dict data of "${dictMeta.type}" found in the response`)
+ return []
+ }
+ return dicts.map(d => dictConverter(d, dictMeta))
+}
+
+export function mergeOptions(src) {
+ mergeRecursive(options, src)
+}
+
+export default options
diff --git a/zhi-admin-ui/src/utils/dict/index.js b/zhi-admin-ui/src/utils/dict/index.js
new file mode 100644
index 0000000..215eb9e
--- /dev/null
+++ b/zhi-admin-ui/src/utils/dict/index.js
@@ -0,0 +1,33 @@
+import Dict from './Dict'
+import { mergeOptions } from './DictOptions'
+
+export default function(Vue, options) {
+ mergeOptions(options)
+ Vue.mixin({
+ data() {
+ if (this.$options === undefined || this.$options.dicts === undefined || this.$options.dicts === null) {
+ return {}
+ }
+ const dict = new Dict()
+ dict.owner = this
+ return {
+ dict
+ }
+ },
+ created() {
+ if (!(this.dict instanceof Dict)) {
+ return
+ }
+ options.onCreated && options.onCreated(this.dict)
+ this.dict.init(this.$options.dicts).then(() => {
+ options.onReady && options.onReady(this.dict)
+ this.$nextTick(() => {
+ this.$emit('dictReady', this.dict)
+ if (this.$options.methods && this.$options.methods.onDictReady instanceof Function) {
+ this.$options.methods.onDictReady.call(this, this.dict)
+ }
+ })
+ })
+ },
+ })
+}
diff --git a/zhi-admin-ui/src/utils/errorCode.js b/zhi-admin-ui/src/utils/errorCode.js
new file mode 100644
index 0000000..d2111ee
--- /dev/null
+++ b/zhi-admin-ui/src/utils/errorCode.js
@@ -0,0 +1,6 @@
+export default {
+ '401': '认证失败,无法访问系统资源',
+ '403': '当前操作没有权限',
+ '404': '访问资源不存在',
+ 'default': '系统未知错误,请反馈给管理员'
+}
diff --git a/zhi-admin-ui/src/utils/generator/config.js b/zhi-admin-ui/src/utils/generator/config.js
new file mode 100644
index 0000000..7abf227
--- /dev/null
+++ b/zhi-admin-ui/src/utils/generator/config.js
@@ -0,0 +1,438 @@
+export const formConf = {
+ formRef: 'elForm',
+ formModel: 'formData',
+ size: 'medium',
+ labelPosition: 'right',
+ labelWidth: 100,
+ formRules: 'rules',
+ gutter: 15,
+ disabled: false,
+ span: 24,
+ formBtns: true
+}
+
+export const inputComponents = [
+ {
+ label: '单行文本',
+ tag: 'el-input',
+ tagIcon: 'input',
+ placeholder: '请输入',
+ defaultValue: undefined,
+ span: 24,
+ labelWidth: null,
+ style: { width: '100%' },
+ clearable: true,
+ prepend: '',
+ append: '',
+ 'prefix-icon': '',
+ 'suffix-icon': '',
+ maxlength: null,
+ 'show-word-limit': false,
+ readonly: false,
+ disabled: false,
+ required: true,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/input'
+ },
+ {
+ label: '多行文本',
+ tag: 'el-input',
+ tagIcon: 'textarea',
+ type: 'textarea',
+ placeholder: '请输入',
+ defaultValue: undefined,
+ span: 24,
+ labelWidth: null,
+ autosize: {
+ minRows: 4,
+ maxRows: 4
+ },
+ style: { width: '100%' },
+ maxlength: null,
+ 'show-word-limit': false,
+ readonly: false,
+ disabled: false,
+ required: true,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/input'
+ },
+ {
+ label: '密码',
+ tag: 'el-input',
+ tagIcon: 'password',
+ placeholder: '请输入',
+ defaultValue: undefined,
+ span: 24,
+ 'show-password': true,
+ labelWidth: null,
+ style: { width: '100%' },
+ clearable: true,
+ prepend: '',
+ append: '',
+ 'prefix-icon': '',
+ 'suffix-icon': '',
+ maxlength: null,
+ 'show-word-limit': false,
+ readonly: false,
+ disabled: false,
+ required: true,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/input'
+ },
+ {
+ label: '计数器',
+ tag: 'el-input-number',
+ tagIcon: 'number',
+ placeholder: '',
+ defaultValue: undefined,
+ span: 24,
+ labelWidth: null,
+ min: undefined,
+ max: undefined,
+ step: undefined,
+ 'step-strictly': false,
+ precision: undefined,
+ 'controls-position': '',
+ disabled: false,
+ required: true,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/input-number'
+ }
+]
+
+export const selectComponents = [
+ {
+ label: '下拉选择',
+ tag: 'el-select',
+ tagIcon: 'select',
+ placeholder: '请选择',
+ defaultValue: undefined,
+ span: 24,
+ labelWidth: null,
+ style: { width: '100%' },
+ clearable: true,
+ disabled: false,
+ required: true,
+ filterable: false,
+ multiple: false,
+ options: [{
+ label: '选项一',
+ value: 1
+ }, {
+ label: '选项二',
+ value: 2
+ }],
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/select'
+ },
+ {
+ label: '级联选择',
+ tag: 'el-cascader',
+ tagIcon: 'cascader',
+ placeholder: '请选择',
+ defaultValue: [],
+ span: 24,
+ labelWidth: null,
+ style: { width: '100%' },
+ props: {
+ props: {
+ multiple: false
+ }
+ },
+ 'show-all-levels': true,
+ disabled: false,
+ clearable: true,
+ filterable: false,
+ required: true,
+ options: [{
+ id: 1,
+ value: 1,
+ label: '选项1',
+ children: [{
+ id: 2,
+ value: 2,
+ label: '选项1-1'
+ }]
+ }],
+ dataType: 'dynamic',
+ labelKey: 'label',
+ valueKey: 'value',
+ childrenKey: 'children',
+ separator: '/',
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/cascader'
+ },
+ {
+ label: '单选框组',
+ tag: 'el-radio-group',
+ tagIcon: 'radio',
+ defaultValue: undefined,
+ span: 24,
+ labelWidth: null,
+ style: {},
+ optionType: 'default',
+ border: false,
+ size: 'medium',
+ disabled: false,
+ required: true,
+ options: [{
+ label: '选项一',
+ value: 1
+ }, {
+ label: '选项二',
+ value: 2
+ }],
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/radio'
+ },
+ {
+ label: '多选框组',
+ tag: 'el-checkbox-group',
+ tagIcon: 'checkbox',
+ defaultValue: [],
+ span: 24,
+ labelWidth: null,
+ style: {},
+ optionType: 'default',
+ border: false,
+ size: 'medium',
+ disabled: false,
+ required: true,
+ options: [{
+ label: '选项一',
+ value: 1
+ }, {
+ label: '选项二',
+ value: 2
+ }],
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/checkbox'
+ },
+ {
+ label: '开关',
+ tag: 'el-switch',
+ tagIcon: 'switch',
+ defaultValue: false,
+ span: 24,
+ labelWidth: null,
+ style: {},
+ disabled: false,
+ required: true,
+ 'active-text': '',
+ 'inactive-text': '',
+ 'active-color': null,
+ 'inactive-color': null,
+ 'active-value': true,
+ 'inactive-value': false,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/switch'
+ },
+ {
+ label: '滑块',
+ tag: 'el-slider',
+ tagIcon: 'slider',
+ defaultValue: null,
+ span: 24,
+ labelWidth: null,
+ disabled: false,
+ required: true,
+ min: 0,
+ max: 100,
+ step: 1,
+ 'show-stops': false,
+ range: false,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/slider'
+ },
+ {
+ label: '时间选择',
+ tag: 'el-time-picker',
+ tagIcon: 'time',
+ placeholder: '请选择',
+ defaultValue: null,
+ span: 24,
+ labelWidth: null,
+ style: { width: '100%' },
+ disabled: false,
+ clearable: true,
+ required: true,
+ 'picker-options': {
+ selectableRange: '00:00:00-23:59:59'
+ },
+ format: 'HH:mm:ss',
+ 'value-format': 'HH:mm:ss',
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/time-picker'
+ },
+ {
+ label: '时间范围',
+ tag: 'el-time-picker',
+ tagIcon: 'time-range',
+ defaultValue: null,
+ span: 24,
+ labelWidth: null,
+ style: { width: '100%' },
+ disabled: false,
+ clearable: true,
+ required: true,
+ 'is-range': true,
+ 'range-separator': '至',
+ 'start-placeholder': '开始时间',
+ 'end-placeholder': '结束时间',
+ format: 'HH:mm:ss',
+ 'value-format': 'HH:mm:ss',
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/time-picker'
+ },
+ {
+ label: '日期选择',
+ tag: 'el-date-picker',
+ tagIcon: 'date',
+ placeholder: '请选择',
+ defaultValue: null,
+ type: 'date',
+ span: 24,
+ labelWidth: null,
+ style: { width: '100%' },
+ disabled: false,
+ clearable: true,
+ required: true,
+ format: 'yyyy-MM-dd',
+ 'value-format': 'yyyy-MM-dd',
+ readonly: false,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/date-picker'
+ },
+ {
+ label: '日期范围',
+ tag: 'el-date-picker',
+ tagIcon: 'date-range',
+ defaultValue: null,
+ span: 24,
+ labelWidth: null,
+ style: { width: '100%' },
+ type: 'daterange',
+ 'range-separator': '至',
+ 'start-placeholder': '开始日期',
+ 'end-placeholder': '结束日期',
+ disabled: false,
+ clearable: true,
+ required: true,
+ format: 'yyyy-MM-dd',
+ 'value-format': 'yyyy-MM-dd',
+ readonly: false,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/date-picker'
+ },
+ {
+ label: '评分',
+ tag: 'el-rate',
+ tagIcon: 'rate',
+ defaultValue: 0,
+ span: 24,
+ labelWidth: null,
+ style: {},
+ max: 5,
+ 'allow-half': false,
+ 'show-text': false,
+ 'show-score': false,
+ disabled: false,
+ required: true,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/rate'
+ },
+ {
+ label: '颜色选择',
+ tag: 'el-color-picker',
+ tagIcon: 'color',
+ defaultValue: null,
+ labelWidth: null,
+ 'show-alpha': false,
+ 'color-format': '',
+ disabled: false,
+ required: true,
+ size: 'medium',
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/color-picker'
+ },
+ {
+ label: '上传',
+ tag: 'el-upload',
+ tagIcon: 'upload',
+ action: 'https://jsonplaceholder.typicode.com/posts/',
+ defaultValue: null,
+ labelWidth: null,
+ disabled: false,
+ required: true,
+ accept: '',
+ name: 'file',
+ 'auto-upload': true,
+ showTip: false,
+ buttonText: '点击上传',
+ fileSize: 2,
+ sizeUnit: 'MB',
+ 'list-type': 'text',
+ multiple: false,
+ regList: [],
+ changeTag: true,
+ document: 'https://element.eleme.cn/#/zh-CN/component/upload'
+ }
+]
+
+export const layoutComponents = [
+ {
+ layout: 'rowFormItem',
+ tagIcon: 'row',
+ type: 'default',
+ justify: 'start',
+ align: 'top',
+ label: '行容器',
+ layoutTree: true,
+ children: [],
+ document: 'https://element.eleme.cn/#/zh-CN/component/layout'
+ },
+ {
+ layout: 'colFormItem',
+ label: '按钮',
+ changeTag: true,
+ labelWidth: null,
+ tag: 'el-button',
+ tagIcon: 'button',
+ span: 24,
+ default: '主要按钮',
+ type: 'primary',
+ icon: 'el-icon-search',
+ size: 'medium',
+ disabled: false,
+ document: 'https://element.eleme.cn/#/zh-CN/component/button'
+ }
+]
+
+// 组件rule的触发方式,无触发方式的组件不生成rule
+export const trigger = {
+ 'el-input': 'blur',
+ 'el-input-number': 'blur',
+ 'el-select': 'change',
+ 'el-radio-group': 'change',
+ 'el-checkbox-group': 'change',
+ 'el-cascader': 'change',
+ 'el-time-picker': 'change',
+ 'el-date-picker': 'change',
+ 'el-rate': 'change'
+}
diff --git a/zhi-admin-ui/src/utils/generator/css.js b/zhi-admin-ui/src/utils/generator/css.js
new file mode 100644
index 0000000..c1c62e6
--- /dev/null
+++ b/zhi-admin-ui/src/utils/generator/css.js
@@ -0,0 +1,18 @@
+const styles = {
+ 'el-rate': '.el-rate{display: inline-block; vertical-align: text-top;}',
+ 'el-upload': '.el-upload__tip{line-height: 1.2;}'
+}
+
+function addCss(cssList, el) {
+ const css = styles[el.tag]
+ css && cssList.indexOf(css) === -1 && cssList.push(css)
+ if (el.children) {
+ el.children.forEach(el2 => addCss(cssList, el2))
+ }
+}
+
+export function makeUpCss(conf) {
+ const cssList = []
+ conf.fields.forEach(el => addCss(cssList, el))
+ return cssList.join('\n')
+}
diff --git a/zhi-admin-ui/src/utils/generator/drawingDefault.js b/zhi-admin-ui/src/utils/generator/drawingDefault.js
new file mode 100644
index 0000000..09f133c
--- /dev/null
+++ b/zhi-admin-ui/src/utils/generator/drawingDefault.js
@@ -0,0 +1,29 @@
+export default [
+ {
+ layout: 'colFormItem',
+ tagIcon: 'input',
+ label: '手机号',
+ vModel: 'mobile',
+ formId: 6,
+ tag: 'el-input',
+ placeholder: '请输入手机号',
+ defaultValue: '',
+ span: 24,
+ style: { width: '100%' },
+ clearable: true,
+ prepend: '',
+ append: '',
+ 'prefix-icon': 'el-icon-mobile',
+ 'suffix-icon': '',
+ maxlength: 11,
+ 'show-word-limit': true,
+ readonly: false,
+ disabled: false,
+ required: true,
+ changeTag: true,
+ regList: [{
+ pattern: '/^1(3|4|5|7|8|9)\\d{9}$/',
+ message: '手机号格式错误'
+ }]
+ }
+]
diff --git a/zhi-admin-ui/src/utils/generator/html.js b/zhi-admin-ui/src/utils/generator/html.js
new file mode 100644
index 0000000..9bcc536
--- /dev/null
+++ b/zhi-admin-ui/src/utils/generator/html.js
@@ -0,0 +1,359 @@
+/* eslint-disable max-len */
+import { trigger } from './config'
+
+let confGlobal
+let someSpanIsNot24
+
+export function dialogWrapper(str) {
+ return `
+ ${str}
+
+ 取消
+ 确定
+
+ `
+}
+
+export function vueTemplate(str) {
+ return `
+
+ ${str}
+
+ `
+}
+
+export function vueScript(str) {
+ return ``
+}
+
+export function cssStyle(cssStr) {
+ return ``
+}
+
+function buildFormTemplate(conf, child, type) {
+ let labelPosition = ''
+ if (conf.labelPosition !== 'right') {
+ labelPosition = `label-position="${conf.labelPosition}"`
+ }
+ const disabled = conf.disabled ? `:disabled="${conf.disabled}"` : ''
+ let str = `
+ ${child}
+ ${buildFromBtns(conf, type)}
+ `
+ if (someSpanIsNot24) {
+ str = `
+ ${str}
+ `
+ }
+ return str
+}
+
+function buildFromBtns(conf, type) {
+ let str = ''
+ if (conf.formBtns && type === 'file') {
+ str = `
+ 提交
+ 重置
+ `
+ if (someSpanIsNot24) {
+ str = `
+ ${str}
+ `
+ }
+ }
+ return str
+}
+
+// span不为24的用el-col包裹
+function colWrapper(element, str) {
+ if (someSpanIsNot24 || element.span !== 24) {
+ return `
+ ${str}
+ `
+ }
+ return str
+}
+
+const layouts = {
+ colFormItem(element) {
+ let labelWidth = ''
+ if (element.labelWidth && element.labelWidth !== confGlobal.labelWidth) {
+ labelWidth = `label-width="${element.labelWidth}px"`
+ }
+ const required = !trigger[element.tag] && element.required ? 'required' : ''
+ const tagDom = tags[element.tag] ? tags[element.tag](element) : null
+ let str = `
+ ${tagDom}
+ `
+ str = colWrapper(element, str)
+ return str
+ },
+ rowFormItem(element) {
+ const type = element.type === 'default' ? '' : `type="${element.type}"`
+ const justify = element.type === 'default' ? '' : `justify="${element.justify}"`
+ const align = element.type === 'default' ? '' : `align="${element.align}"`
+ const gutter = element.gutter ? `gutter="${element.gutter}"` : ''
+ const children = element.children.map(el => layouts[el.layout](el))
+ let str = `
+ ${children.join('\n')}
+ `
+ str = colWrapper(element, str)
+ return str
+ }
+}
+
+const tags = {
+ 'el-button': el => {
+ const {
+ tag, disabled
+ } = attrBuilder(el)
+ const type = el.type ? `type="${el.type}"` : ''
+ const icon = el.icon ? `icon="${el.icon}"` : ''
+ const size = el.size ? `size="${el.size}"` : ''
+ let child = buildElButtonChild(el)
+
+ if (child) child = `\n${child}\n` // 换行
+ return `<${el.tag} ${type} ${icon} ${size} ${disabled}>${child}${el.tag}>`
+ },
+ 'el-input': el => {
+ const {
+ disabled, vModel, clearable, placeholder, width
+ } = attrBuilder(el)
+ const maxlength = el.maxlength ? `:maxlength="${el.maxlength}"` : ''
+ const showWordLimit = el['show-word-limit'] ? 'show-word-limit' : ''
+ const readonly = el.readonly ? 'readonly' : ''
+ const prefixIcon = el['prefix-icon'] ? `prefix-icon='${el['prefix-icon']}'` : ''
+ const suffixIcon = el['suffix-icon'] ? `suffix-icon='${el['suffix-icon']}'` : ''
+ const showPassword = el['show-password'] ? 'show-password' : ''
+ const type = el.type ? `type="${el.type}"` : ''
+ const autosize = el.autosize && el.autosize.minRows
+ ? `:autosize="{minRows: ${el.autosize.minRows}, maxRows: ${el.autosize.maxRows}}"`
+ : ''
+ let child = buildElInputChild(el)
+
+ if (child) child = `\n${child}\n` // 换行
+ return `<${el.tag} ${vModel} ${type} ${placeholder} ${maxlength} ${showWordLimit} ${readonly} ${disabled} ${clearable} ${prefixIcon} ${suffixIcon} ${showPassword} ${autosize} ${width}>${child}${el.tag}>`
+ },
+ 'el-input-number': el => {
+ const { disabled, vModel, placeholder } = attrBuilder(el)
+ const controlsPosition = el['controls-position'] ? `controls-position=${el['controls-position']}` : ''
+ const min = el.min ? `:min='${el.min}'` : ''
+ const max = el.max ? `:max='${el.max}'` : ''
+ const step = el.step ? `:step='${el.step}'` : ''
+ const stepStrictly = el['step-strictly'] ? 'step-strictly' : ''
+ const precision = el.precision ? `:precision='${el.precision}'` : ''
+
+ return `<${el.tag} ${vModel} ${placeholder} ${step} ${stepStrictly} ${precision} ${controlsPosition} ${min} ${max} ${disabled}>${el.tag}>`
+ },
+ 'el-select': el => {
+ const {
+ disabled, vModel, clearable, placeholder, width
+ } = attrBuilder(el)
+ const filterable = el.filterable ? 'filterable' : ''
+ const multiple = el.multiple ? 'multiple' : ''
+ let child = buildElSelectChild(el)
+
+ if (child) child = `\n${child}\n` // 换行
+ return `<${el.tag} ${vModel} ${placeholder} ${disabled} ${multiple} ${filterable} ${clearable} ${width}>${child}${el.tag}>`
+ },
+ 'el-radio-group': el => {
+ const { disabled, vModel } = attrBuilder(el)
+ const size = `size="${el.size}"`
+ let child = buildElRadioGroupChild(el)
+
+ if (child) child = `\n${child}\n` // 换行
+ return `<${el.tag} ${vModel} ${size} ${disabled}>${child}${el.tag}>`
+ },
+ 'el-checkbox-group': el => {
+ const { disabled, vModel } = attrBuilder(el)
+ const size = `size="${el.size}"`
+ const min = el.min ? `:min="${el.min}"` : ''
+ const max = el.max ? `:max="${el.max}"` : ''
+ let child = buildElCheckboxGroupChild(el)
+
+ if (child) child = `\n${child}\n` // 换行
+ return `<${el.tag} ${vModel} ${min} ${max} ${size} ${disabled}>${child}${el.tag}>`
+ },
+ 'el-switch': el => {
+ const { disabled, vModel } = attrBuilder(el)
+ const activeText = el['active-text'] ? `active-text="${el['active-text']}"` : ''
+ const inactiveText = el['inactive-text'] ? `inactive-text="${el['inactive-text']}"` : ''
+ const activeColor = el['active-color'] ? `active-color="${el['active-color']}"` : ''
+ const inactiveColor = el['inactive-color'] ? `inactive-color="${el['inactive-color']}"` : ''
+ const activeValue = el['active-value'] !== true ? `:active-value='${JSON.stringify(el['active-value'])}'` : ''
+ const inactiveValue = el['inactive-value'] !== false ? `:inactive-value='${JSON.stringify(el['inactive-value'])}'` : ''
+
+ return `<${el.tag} ${vModel} ${activeText} ${inactiveText} ${activeColor} ${inactiveColor} ${activeValue} ${inactiveValue} ${disabled}>${el.tag}>`
+ },
+ 'el-cascader': el => {
+ const {
+ disabled, vModel, clearable, placeholder, width
+ } = attrBuilder(el)
+ const options = el.options ? `:options="${el.vModel}Options"` : ''
+ const props = el.props ? `:props="${el.vModel}Props"` : ''
+ const showAllLevels = el['show-all-levels'] ? '' : ':show-all-levels="false"'
+ const filterable = el.filterable ? 'filterable' : ''
+ const separator = el.separator === '/' ? '' : `separator="${el.separator}"`
+
+ return `<${el.tag} ${vModel} ${options} ${props} ${width} ${showAllLevels} ${placeholder} ${separator} ${filterable} ${clearable} ${disabled}>${el.tag}>`
+ },
+ 'el-slider': el => {
+ const { disabled, vModel } = attrBuilder(el)
+ const min = el.min ? `:min='${el.min}'` : ''
+ const max = el.max ? `:max='${el.max}'` : ''
+ const step = el.step ? `:step='${el.step}'` : ''
+ const range = el.range ? 'range' : ''
+ const showStops = el['show-stops'] ? `:show-stops="${el['show-stops']}"` : ''
+
+ return `<${el.tag} ${min} ${max} ${step} ${vModel} ${range} ${showStops} ${disabled}>${el.tag}>`
+ },
+ 'el-time-picker': el => {
+ const {
+ disabled, vModel, clearable, placeholder, width
+ } = attrBuilder(el)
+ const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : ''
+ const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : ''
+ const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : ''
+ const isRange = el['is-range'] ? 'is-range' : ''
+ const format = el.format ? `format="${el.format}"` : ''
+ const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : ''
+ const pickerOptions = el['picker-options'] ? `:picker-options='${JSON.stringify(el['picker-options'])}'` : ''
+
+ return `<${el.tag} ${vModel} ${isRange} ${format} ${valueFormat} ${pickerOptions} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${disabled}>${el.tag}>`
+ },
+ 'el-date-picker': el => {
+ const {
+ disabled, vModel, clearable, placeholder, width
+ } = attrBuilder(el)
+ const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : ''
+ const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : ''
+ const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : ''
+ const format = el.format ? `format="${el.format}"` : ''
+ const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : ''
+ const type = el.type === 'date' ? '' : `type="${el.type}"`
+ const readonly = el.readonly ? 'readonly' : ''
+
+ return `<${el.tag} ${type} ${vModel} ${format} ${valueFormat} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${readonly} ${disabled}>${el.tag}>`
+ },
+ 'el-rate': el => {
+ const { disabled, vModel } = attrBuilder(el)
+ const max = el.max ? `:max='${el.max}'` : ''
+ const allowHalf = el['allow-half'] ? 'allow-half' : ''
+ const showText = el['show-text'] ? 'show-text' : ''
+ const showScore = el['show-score'] ? 'show-score' : ''
+
+ return `<${el.tag} ${vModel} ${allowHalf} ${showText} ${showScore} ${disabled}>${el.tag}>`
+ },
+ 'el-color-picker': el => {
+ const { disabled, vModel } = attrBuilder(el)
+ const size = `size="${el.size}"`
+ const showAlpha = el['show-alpha'] ? 'show-alpha' : ''
+ const colorFormat = el['color-format'] ? `color-format="${el['color-format']}"` : ''
+
+ return `<${el.tag} ${vModel} ${size} ${showAlpha} ${colorFormat} ${disabled}>${el.tag}>`
+ },
+ 'el-upload': el => {
+ const disabled = el.disabled ? ':disabled=\'true\'' : ''
+ const action = el.action ? `:action="${el.vModel}Action"` : ''
+ const multiple = el.multiple ? 'multiple' : ''
+ const listType = el['list-type'] !== 'text' ? `list-type="${el['list-type']}"` : ''
+ const accept = el.accept ? `accept="${el.accept}"` : ''
+ const name = el.name !== 'file' ? `name="${el.name}"` : ''
+ const autoUpload = el['auto-upload'] === false ? ':auto-upload="false"' : ''
+ const beforeUpload = `:before-upload="${el.vModel}BeforeUpload"`
+ const fileList = `:file-list="${el.vModel}fileList"`
+ const ref = `ref="${el.vModel}"`
+ let child = buildElUploadChild(el)
+
+ if (child) child = `\n${child}\n` // 换行
+ return `<${el.tag} ${ref} ${fileList} ${action} ${autoUpload} ${multiple} ${beforeUpload} ${listType} ${accept} ${name} ${disabled}>${child}${el.tag}>`
+ }
+}
+
+function attrBuilder(el) {
+ return {
+ vModel: `v-model="${confGlobal.formModel}.${el.vModel}"`,
+ clearable: el.clearable ? 'clearable' : '',
+ placeholder: el.placeholder ? `placeholder="${el.placeholder}"` : '',
+ width: el.style && el.style.width ? ':style="{width: \'100%\'}"' : '',
+ disabled: el.disabled ? ':disabled=\'true\'' : ''
+ }
+}
+
+// el-buttin 子级
+function buildElButtonChild(conf) {
+ const children = []
+ if (conf.default) {
+ children.push(conf.default)
+ }
+ return children.join('\n')
+}
+
+// el-input innerHTML
+function buildElInputChild(conf) {
+ const children = []
+ if (conf.prepend) {
+ children.push(`${conf.prepend} `)
+ }
+ if (conf.append) {
+ children.push(`${conf.append} `)
+ }
+ return children.join('\n')
+}
+
+function buildElSelectChild(conf) {
+ const children = []
+ if (conf.options && conf.options.length) {
+ children.push(` `)
+ }
+ return children.join('\n')
+}
+
+function buildElRadioGroupChild(conf) {
+ const children = []
+ if (conf.options && conf.options.length) {
+ const tag = conf.optionType === 'button' ? 'el-radio-button' : 'el-radio'
+ const border = conf.border ? 'border' : ''
+ children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}${tag}>`)
+ }
+ return children.join('\n')
+}
+
+function buildElCheckboxGroupChild(conf) {
+ const children = []
+ if (conf.options && conf.options.length) {
+ const tag = conf.optionType === 'button' ? 'el-checkbox-button' : 'el-checkbox'
+ const border = conf.border ? 'border' : ''
+ children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}${tag}>`)
+ }
+ return children.join('\n')
+}
+
+function buildElUploadChild(conf) {
+ const list = []
+ if (conf['list-type'] === 'picture-card') list.push(' ')
+ else list.push(`${conf.buttonText} `)
+ if (conf.showTip) list.push(`只能上传不超过 ${conf.fileSize}${conf.sizeUnit} 的${conf.accept}文件
`)
+ return list.join('\n')
+}
+
+export function makeUpHtml(conf, type) {
+ const htmlList = []
+ confGlobal = conf
+ someSpanIsNot24 = conf.fields.some(item => item.span !== 24)
+ conf.fields.forEach(el => {
+ htmlList.push(layouts[el.layout](el))
+ })
+ const htmlStr = htmlList.join('\n')
+
+ let temp = buildFormTemplate(conf, htmlStr, type)
+ if (type === 'dialog') {
+ temp = dialogWrapper(temp)
+ }
+ confGlobal = null
+ return temp
+}
diff --git a/zhi-admin-ui/src/utils/generator/icon.json b/zhi-admin-ui/src/utils/generator/icon.json
new file mode 100644
index 0000000..2d9999a
--- /dev/null
+++ b/zhi-admin-ui/src/utils/generator/icon.json
@@ -0,0 +1 @@
+["platform-eleme","eleme","delete-solid","delete","s-tools","setting","user-solid","user","phone","phone-outline","more","more-outline","star-on","star-off","s-goods","goods","warning","warning-outline","question","info","remove","circle-plus","success","error","zoom-in","zoom-out","remove-outline","circle-plus-outline","circle-check","circle-close","s-help","help","minus","plus","check","close","picture","picture-outline","picture-outline-round","upload","upload2","download","camera-solid","camera","video-camera-solid","video-camera","message-solid","bell","s-cooperation","s-order","s-platform","s-fold","s-unfold","s-operation","s-promotion","s-home","s-release","s-ticket","s-management","s-open","s-shop","s-marketing","s-flag","s-comment","s-finance","s-claim","s-custom","s-opportunity","s-data","s-check","s-grid","menu","share","d-caret","caret-left","caret-right","caret-bottom","caret-top","bottom-left","bottom-right","back","right","bottom","top","top-left","top-right","arrow-left","arrow-right","arrow-down","arrow-up","d-arrow-left","d-arrow-right","video-pause","video-play","refresh","refresh-right","refresh-left","finished","sort","sort-up","sort-down","rank","loading","view","c-scale-to-original","date","edit","edit-outline","folder","folder-opened","folder-add","folder-remove","folder-delete","folder-checked","tickets","document-remove","document-delete","document-copy","document-checked","document","document-add","printer","paperclip","takeaway-box","search","monitor","attract","mobile","scissors","umbrella","headset","brush","mouse","coordinate","magic-stick","reading","data-line","data-board","pie-chart","data-analysis","collection-tag","film","suitcase","suitcase-1","receiving","collection","files","notebook-1","notebook-2","toilet-paper","office-building","school","table-lamp","house","no-smoking","smoking","shopping-cart-full","shopping-cart-1","shopping-cart-2","shopping-bag-1","shopping-bag-2","sold-out","sell","present","box","bank-card","money","coin","wallet","discount","price-tag","news","guide","male","female","thumb","cpu","link","connection","open","turn-off","set-up","chat-round","chat-line-round","chat-square","chat-dot-round","chat-dot-square","chat-line-square","message","postcard","position","turn-off-microphone","microphone","close-notification","bangzhu","time","odometer","crop","aim","switch-button","full-screen","copy-document","mic","stopwatch","medal-1","medal","trophy","trophy-1","first-aid-kit","discover","place","location","location-outline","location-information","add-location","delete-location","map-location","alarm-clock","timer","watch-1","watch","lock","unlock","key","service","mobile-phone","bicycle","truck","ship","basketball","football","soccer","baseball","wind-power","light-rain","lightning","heavy-rain","sunrise","sunrise-1","sunset","sunny","cloudy","partly-cloudy","cloudy-and-sunny","moon","moon-night","dish","dish-1","food","chicken","fork-spoon","knife-fork","burger","tableware","sugar","dessert","ice-cream","hot-water","water-cup","coffee-cup","cold-drink","goblet","goblet-full","goblet-square","goblet-square-full","refrigerator","grape","watermelon","cherry","apple","pear","orange","coffee","ice-tea","ice-drink","milk-tea","potato-strips","lollipop","ice-cream-square","ice-cream-round"]
\ No newline at end of file
diff --git a/zhi-admin-ui/src/utils/generator/js.js b/zhi-admin-ui/src/utils/generator/js.js
new file mode 100644
index 0000000..35e3e21
--- /dev/null
+++ b/zhi-admin-ui/src/utils/generator/js.js
@@ -0,0 +1,236 @@
+import { isArray } from 'util'
+import { exportDefault, titleCase } from '@/utils/index'
+import { trigger } from './config'
+
+const units = {
+ KB: '1024',
+ MB: '1024 / 1024',
+ GB: '1024 / 1024 / 1024'
+}
+let confGlobal
+const inheritAttrs = {
+ file: '',
+ dialog: 'inheritAttrs: false,'
+}
+
+
+export function makeUpJs(conf, type) {
+ confGlobal = conf = JSON.parse(JSON.stringify(conf))
+ const dataList = []
+ const ruleList = []
+ const optionsList = []
+ const propsList = []
+ const methodList = mixinMethod(type)
+ const uploadVarList = []
+
+ conf.fields.forEach(el => {
+ buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList)
+ })
+
+ const script = buildexport(
+ conf,
+ type,
+ dataList.join('\n'),
+ ruleList.join('\n'),
+ optionsList.join('\n'),
+ uploadVarList.join('\n'),
+ propsList.join('\n'),
+ methodList.join('\n')
+ )
+ confGlobal = null
+ return script
+}
+
+function buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) {
+ buildData(el, dataList)
+ buildRules(el, ruleList)
+
+ if (el.options && el.options.length) {
+ buildOptions(el, optionsList)
+ if (el.dataType === 'dynamic') {
+ const model = `${el.vModel}Options`
+ const options = titleCase(model)
+ buildOptionMethod(`get${options}`, model, methodList)
+ }
+ }
+
+ if (el.props && el.props.props) {
+ buildProps(el, propsList)
+ }
+
+ if (el.action && el.tag === 'el-upload') {
+ uploadVarList.push(
+ `${el.vModel}Action: '${el.action}',
+ ${el.vModel}fileList: [],`
+ )
+ methodList.push(buildBeforeUpload(el))
+ if (!el['auto-upload']) {
+ methodList.push(buildSubmitUpload(el))
+ }
+ }
+
+ if (el.children) {
+ el.children.forEach(el2 => {
+ buildAttributes(el2, dataList, ruleList, optionsList, methodList, propsList, uploadVarList)
+ })
+ }
+}
+
+function mixinMethod(type) {
+ const list = []; const
+ minxins = {
+ file: confGlobal.formBtns ? {
+ submitForm: `submitForm() {
+ this.$refs['${confGlobal.formRef}'].validate(valid => {
+ if(!valid) return
+ // TODO 提交表单
+ })
+ },`,
+ resetForm: `resetForm() {
+ this.$refs['${confGlobal.formRef}'].resetFields()
+ },`
+ } : null,
+ dialog: {
+ onOpen: 'onOpen() {},',
+ onClose: `onClose() {
+ this.$refs['${confGlobal.formRef}'].resetFields()
+ },`,
+ close: `close() {
+ this.$emit('update:visible', false)
+ },`,
+ handleConfirm: `handleConfirm() {
+ this.$refs['${confGlobal.formRef}'].validate(valid => {
+ if(!valid) return
+ this.close()
+ })
+ },`
+ }
+ }
+
+ const methods = minxins[type]
+ if (methods) {
+ Object.keys(methods).forEach(key => {
+ list.push(methods[key])
+ })
+ }
+
+ return list
+}
+
+function buildData(conf, dataList) {
+ if (conf.vModel === undefined) return
+ let defaultValue
+ if (typeof (conf.defaultValue) === 'string' && !conf.multiple) {
+ defaultValue = `'${conf.defaultValue}'`
+ } else {
+ defaultValue = `${JSON.stringify(conf.defaultValue)}`
+ }
+ dataList.push(`${conf.vModel}: ${defaultValue},`)
+}
+
+function buildRules(conf, ruleList) {
+ if (conf.vModel === undefined) return
+ const rules = []
+ if (trigger[conf.tag]) {
+ if (conf.required) {
+ const type = isArray(conf.defaultValue) ? 'type: \'array\',' : ''
+ let message = isArray(conf.defaultValue) ? `请至少选择一个${conf.vModel}` : conf.placeholder
+ if (message === undefined) message = `${conf.label}不能为空`
+ rules.push(`{ required: true, ${type} message: '${message}', trigger: '${trigger[conf.tag]}' }`)
+ }
+ if (conf.regList && isArray(conf.regList)) {
+ conf.regList.forEach(item => {
+ if (item.pattern) {
+ rules.push(`{ pattern: ${eval(item.pattern)}, message: '${item.message}', trigger: '${trigger[conf.tag]}' }`)
+ }
+ })
+ }
+ ruleList.push(`${conf.vModel}: [${rules.join(',')}],`)
+ }
+}
+
+function buildOptions(conf, optionsList) {
+ if (conf.vModel === undefined) return
+ if (conf.dataType === 'dynamic') { conf.options = [] }
+ const str = `${conf.vModel}Options: ${JSON.stringify(conf.options)},`
+ optionsList.push(str)
+}
+
+function buildProps(conf, propsList) {
+ if (conf.dataType === 'dynamic') {
+ conf.valueKey !== 'value' && (conf.props.props.value = conf.valueKey)
+ conf.labelKey !== 'label' && (conf.props.props.label = conf.labelKey)
+ conf.childrenKey !== 'children' && (conf.props.props.children = conf.childrenKey)
+ }
+ const str = `${conf.vModel}Props: ${JSON.stringify(conf.props.props)},`
+ propsList.push(str)
+}
+
+function buildBeforeUpload(conf) {
+ const unitNum = units[conf.sizeUnit]; let rightSizeCode = ''; let acceptCode = ''; const
+ returnList = []
+ if (conf.fileSize) {
+ rightSizeCode = `let isRightSize = file.size / ${unitNum} < ${conf.fileSize}
+ if(!isRightSize){
+ this.$message.error('文件大小超过 ${conf.fileSize}${conf.sizeUnit}')
+ }`
+ returnList.push('isRightSize')
+ }
+ if (conf.accept) {
+ acceptCode = `let isAccept = new RegExp('${conf.accept}').test(file.type)
+ if(!isAccept){
+ this.$message.error('应该选择${conf.accept}类型的文件')
+ }`
+ returnList.push('isAccept')
+ }
+ const str = `${conf.vModel}BeforeUpload(file) {
+ ${rightSizeCode}
+ ${acceptCode}
+ return ${returnList.join('&&')}
+ },`
+ return returnList.length ? str : ''
+}
+
+function buildSubmitUpload(conf) {
+ const str = `submitUpload() {
+ this.$refs['${conf.vModel}'].submit()
+ },`
+ return str
+}
+
+function buildOptionMethod(methodName, model, methodList) {
+ const str = `${methodName}() {
+ // TODO 发起请求获取数据
+ this.${model}
+ },`
+ methodList.push(str)
+}
+
+function buildexport(conf, type, data, rules, selectOptions, uploadVar, props, methods) {
+ const str = `${exportDefault}{
+ ${inheritAttrs[type]}
+ components: {},
+ props: [],
+ data () {
+ return {
+ ${conf.formModel}: {
+ ${data}
+ },
+ ${conf.formRules}: {
+ ${rules}
+ },
+ ${uploadVar}
+ ${selectOptions}
+ ${props}
+ }
+ },
+ computed: {},
+ watch: {},
+ created () {},
+ mounted () {},
+ methods: {
+ ${methods}
+ }
+}`
+ return str
+}
diff --git a/zhi-admin-ui/src/utils/generator/render.js b/zhi-admin-ui/src/utils/generator/render.js
new file mode 100644
index 0000000..e8640f0
--- /dev/null
+++ b/zhi-admin-ui/src/utils/generator/render.js
@@ -0,0 +1,126 @@
+import { makeMap } from '@/utils/index'
+
+// 参考https://github.com/vuejs/vue/blob/v2.6.10/src/platforms/web/server/util.js
+const isAttr = makeMap(
+ 'accept,accept-charset,accesskey,action,align,alt,async,autocomplete,'
+ + 'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,'
+ + 'checked,cite,class,code,codebase,color,cols,colspan,content,http-equiv,'
+ + 'name,contenteditable,contextmenu,controls,coords,data,datetime,default,'
+ + 'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,method,for,'
+ + 'form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,'
+ + 'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,'
+ + 'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,'
+ + 'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,'
+ + 'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,'
+ + 'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,'
+ + 'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,'
+ + 'target,title,type,usemap,value,width,wrap'
+)
+
+function vModel(self, dataObject, defaultValue) {
+ dataObject.props.value = defaultValue
+
+ dataObject.on.input = val => {
+ self.$emit('input', val)
+ }
+}
+
+const componentChild = {
+ 'el-button': {
+ default(h, conf, key) {
+ return conf[key]
+ },
+ },
+ 'el-input': {
+ prepend(h, conf, key) {
+ return {conf[key]}
+ },
+ append(h, conf, key) {
+ return {conf[key]}
+ }
+ },
+ 'el-select': {
+ options(h, conf, key) {
+ const list = []
+ conf.options.forEach(item => {
+ list.push( )
+ })
+ return list
+ }
+ },
+ 'el-radio-group': {
+ options(h, conf, key) {
+ const list = []
+ conf.options.forEach(item => {
+ if (conf.optionType === 'button') list.push({item.label} )
+ else list.push({item.label} )
+ })
+ return list
+ }
+ },
+ 'el-checkbox-group': {
+ options(h, conf, key) {
+ const list = []
+ conf.options.forEach(item => {
+ if (conf.optionType === 'button') {
+ list.push({item.label} )
+ } else {
+ list.push({item.label} )
+ }
+ })
+ return list
+ }
+ },
+ 'el-upload': {
+ 'list-type': (h, conf, key) => {
+ const list = []
+ if (conf['list-type'] === 'picture-card') {
+ list.push( )
+ } else {
+ list.push({conf.buttonText} )
+ }
+ if (conf.showTip) {
+ list.push(只能上传不超过 {conf.fileSize}{conf.sizeUnit} 的{conf.accept}文件
)
+ }
+ return list
+ }
+ }
+}
+
+export default {
+ render(h) {
+ const dataObject = {
+ attrs: {},
+ props: {},
+ on: {},
+ style: {}
+ }
+ const confClone = JSON.parse(JSON.stringify(this.conf))
+ const children = []
+
+ const childObjs = componentChild[confClone.tag]
+ if (childObjs) {
+ Object.keys(childObjs).forEach(key => {
+ const childFunc = childObjs[key]
+ if (confClone[key]) {
+ children.push(childFunc(h, confClone, key))
+ }
+ })
+ }
+
+ Object.keys(confClone).forEach(key => {
+ const val = confClone[key]
+ if (key === 'vModel') {
+ vModel(this, dataObject, confClone.defaultValue)
+ } else if (dataObject[key]) {
+ dataObject[key] = val
+ } else if (!isAttr(key)) {
+ dataObject.props[key] = val
+ } else {
+ dataObject.attrs[key] = val
+ }
+ })
+ return h(this.conf.tag, dataObject, children)
+ },
+ props: ['conf']
+}
diff --git a/zhi-admin-ui/src/utils/index.js b/zhi-admin-ui/src/utils/index.js
new file mode 100644
index 0000000..df5db12
--- /dev/null
+++ b/zhi-admin-ui/src/utils/index.js
@@ -0,0 +1,390 @@
+import { parseTime } from './ruoyi'
+
+/**
+ * 表格时间格式化
+ */
+export function formatDate(cellValue) {
+ if (cellValue == null || cellValue == "") return "";
+ var date = new Date(cellValue)
+ var year = date.getFullYear()
+ var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
+ var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
+ var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
+ var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
+ var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
+ return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
+}
+
+/**
+ * @param {number} time
+ * @param {string} option
+ * @returns {string}
+ */
+export function formatTime(time, option) {
+ if (('' + time).length === 10) {
+ time = parseInt(time) * 1000
+ } else {
+ time = +time
+ }
+ const d = new Date(time)
+ const now = Date.now()
+
+ const diff = (now - d) / 1000
+
+ if (diff < 30) {
+ return '刚刚'
+ } else if (diff < 3600) {
+ // less 1 hour
+ return Math.ceil(diff / 60) + '分钟前'
+ } else if (diff < 3600 * 24) {
+ return Math.ceil(diff / 3600) + '小时前'
+ } else if (diff < 3600 * 24 * 2) {
+ return '1天前'
+ }
+ if (option) {
+ return parseTime(time, option)
+ } else {
+ return (
+ d.getMonth() +
+ 1 +
+ '月' +
+ d.getDate() +
+ '日' +
+ d.getHours() +
+ '时' +
+ d.getMinutes() +
+ '分'
+ )
+ }
+}
+
+/**
+ * @param {string} url
+ * @returns {Object}
+ */
+export function getQueryObject(url) {
+ url = url == null ? window.location.href : url
+ const search = url.substring(url.lastIndexOf('?') + 1)
+ const obj = {}
+ const reg = /([^?&=]+)=([^?&=]*)/g
+ search.replace(reg, (rs, $1, $2) => {
+ const name = decodeURIComponent($1)
+ let val = decodeURIComponent($2)
+ val = String(val)
+ obj[name] = val
+ return rs
+ })
+ return obj
+}
+
+/**
+ * @param {string} input value
+ * @returns {number} output value
+ */
+export function byteLength(str) {
+ // returns the byte length of an utf8 string
+ let s = str.length
+ for (var i = str.length - 1; i >= 0; i--) {
+ const code = str.charCodeAt(i)
+ if (code > 0x7f && code <= 0x7ff) s++
+ else if (code > 0x7ff && code <= 0xffff) s += 2
+ if (code >= 0xDC00 && code <= 0xDFFF) i--
+ }
+ return s
+}
+
+/**
+ * @param {Array} actual
+ * @returns {Array}
+ */
+export function cleanArray(actual) {
+ const newArray = []
+ for (let i = 0; i < actual.length; i++) {
+ if (actual[i]) {
+ newArray.push(actual[i])
+ }
+ }
+ return newArray
+}
+
+/**
+ * @param {Object} json
+ * @returns {Array}
+ */
+export function param(json) {
+ if (!json) return ''
+ return cleanArray(
+ Object.keys(json).map(key => {
+ if (json[key] === undefined) return ''
+ return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])
+ })
+ ).join('&')
+}
+
+/**
+ * @param {string} url
+ * @returns {Object}
+ */
+export function param2Obj(url) {
+ const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
+ if (!search) {
+ return {}
+ }
+ const obj = {}
+ const searchArr = search.split('&')
+ searchArr.forEach(v => {
+ const index = v.indexOf('=')
+ if (index !== -1) {
+ const name = v.substring(0, index)
+ const val = v.substring(index + 1, v.length)
+ obj[name] = val
+ }
+ })
+ return obj
+}
+
+/**
+ * @param {string} val
+ * @returns {string}
+ */
+export function html2Text(val) {
+ const div = document.createElement('div')
+ div.innerHTML = val
+ return div.textContent || div.innerText
+}
+
+/**
+ * Merges two objects, giving the last one precedence
+ * @param {Object} target
+ * @param {(Object|Array)} source
+ * @returns {Object}
+ */
+export function objectMerge(target, source) {
+ if (typeof target !== 'object') {
+ target = {}
+ }
+ if (Array.isArray(source)) {
+ return source.slice()
+ }
+ Object.keys(source).forEach(property => {
+ const sourceProperty = source[property]
+ if (typeof sourceProperty === 'object') {
+ target[property] = objectMerge(target[property], sourceProperty)
+ } else {
+ target[property] = sourceProperty
+ }
+ })
+ return target
+}
+
+/**
+ * @param {HTMLElement} element
+ * @param {string} className
+ */
+export function toggleClass(element, className) {
+ if (!element || !className) {
+ return
+ }
+ let classString = element.className
+ const nameIndex = classString.indexOf(className)
+ if (nameIndex === -1) {
+ classString += '' + className
+ } else {
+ classString =
+ classString.substr(0, nameIndex) +
+ classString.substr(nameIndex + className.length)
+ }
+ element.className = classString
+}
+
+/**
+ * @param {string} type
+ * @returns {Date}
+ */
+export function getTime(type) {
+ if (type === 'start') {
+ return new Date().getTime() - 3600 * 1000 * 24 * 90
+ } else {
+ return new Date(new Date().toDateString())
+ }
+}
+
+/**
+ * @param {Function} func
+ * @param {number} wait
+ * @param {boolean} immediate
+ * @return {*}
+ */
+export function debounce(func, wait, immediate) {
+ let timeout, args, context, timestamp, result
+
+ const later = function() {
+ // 据上一次触发时间间隔
+ const last = +new Date() - timestamp
+
+ // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
+ if (last < wait && last > 0) {
+ timeout = setTimeout(later, wait - last)
+ } else {
+ timeout = null
+ // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
+ if (!immediate) {
+ result = func.apply(context, args)
+ if (!timeout) context = args = null
+ }
+ }
+ }
+
+ return function(...args) {
+ context = this
+ timestamp = +new Date()
+ const callNow = immediate && !timeout
+ // 如果延时不存在,重新设定延时
+ if (!timeout) timeout = setTimeout(later, wait)
+ if (callNow) {
+ result = func.apply(context, args)
+ context = args = null
+ }
+
+ return result
+ }
+}
+
+/**
+ * This is just a simple version of deep copy
+ * Has a lot of edge cases bug
+ * If you want to use a perfect deep copy, use lodash's _.cloneDeep
+ * @param {Object} source
+ * @returns {Object}
+ */
+export function deepClone(source) {
+ if (!source && typeof source !== 'object') {
+ throw new Error('error arguments', 'deepClone')
+ }
+ const targetObj = source.constructor === Array ? [] : {}
+ Object.keys(source).forEach(keys => {
+ if (source[keys] && typeof source[keys] === 'object') {
+ targetObj[keys] = deepClone(source[keys])
+ } else {
+ targetObj[keys] = source[keys]
+ }
+ })
+ return targetObj
+}
+
+/**
+ * @param {Array} arr
+ * @returns {Array}
+ */
+export function uniqueArr(arr) {
+ return Array.from(new Set(arr))
+}
+
+/**
+ * @returns {string}
+ */
+export function createUniqueString() {
+ const timestamp = +new Date() + ''
+ const randomNum = parseInt((1 + Math.random()) * 65536) + ''
+ return (+(randomNum + timestamp)).toString(32)
+}
+
+/**
+ * Check if an element has a class
+ * @param {HTMLElement} elm
+ * @param {string} cls
+ * @returns {boolean}
+ */
+export function hasClass(ele, cls) {
+ return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
+}
+
+/**
+ * Add class to element
+ * @param {HTMLElement} elm
+ * @param {string} cls
+ */
+export function addClass(ele, cls) {
+ if (!hasClass(ele, cls)) ele.className += ' ' + cls
+}
+
+/**
+ * Remove class from element
+ * @param {HTMLElement} elm
+ * @param {string} cls
+ */
+export function removeClass(ele, cls) {
+ if (hasClass(ele, cls)) {
+ const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
+ ele.className = ele.className.replace(reg, ' ')
+ }
+}
+
+export function makeMap(str, expectsLowerCase) {
+ const map = Object.create(null)
+ const list = str.split(',')
+ for (let i = 0; i < list.length; i++) {
+ map[list[i]] = true
+ }
+ return expectsLowerCase
+ ? val => map[val.toLowerCase()]
+ : val => map[val]
+}
+
+export const exportDefault = 'export default '
+
+export const beautifierConf = {
+ html: {
+ indent_size: '2',
+ indent_char: ' ',
+ max_preserve_newlines: '-1',
+ preserve_newlines: false,
+ keep_array_indentation: false,
+ break_chained_methods: false,
+ indent_scripts: 'separate',
+ brace_style: 'end-expand',
+ space_before_conditional: true,
+ unescape_strings: false,
+ jslint_happy: false,
+ end_with_newline: true,
+ wrap_line_length: '110',
+ indent_inner_html: true,
+ comma_first: false,
+ e4x: true,
+ indent_empty_lines: true
+ },
+ js: {
+ indent_size: '2',
+ indent_char: ' ',
+ max_preserve_newlines: '-1',
+ preserve_newlines: false,
+ keep_array_indentation: false,
+ break_chained_methods: false,
+ indent_scripts: 'normal',
+ brace_style: 'end-expand',
+ space_before_conditional: true,
+ unescape_strings: false,
+ jslint_happy: true,
+ end_with_newline: true,
+ wrap_line_length: '110',
+ indent_inner_html: true,
+ comma_first: false,
+ e4x: true,
+ indent_empty_lines: true
+ }
+}
+
+// 首字母大小
+export function titleCase(str) {
+ return str.replace(/( |^)[a-z]/g, L => L.toUpperCase())
+}
+
+// 下划转驼峰
+export function camelCase(str) {
+ return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase())
+}
+
+export function isNumberStr(str) {
+ return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
+}
+
diff --git a/zhi-admin-ui/src/utils/jsencrypt.js b/zhi-admin-ui/src/utils/jsencrypt.js
new file mode 100644
index 0000000..78d9523
--- /dev/null
+++ b/zhi-admin-ui/src/utils/jsencrypt.js
@@ -0,0 +1,30 @@
+import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
+
+// 密钥对生成 http://web.chacuo.net/netrsakeypair
+
+const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' +
+ 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
+
+const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' +
+ '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' +
+ 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' +
+ 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' +
+ 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' +
+ 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' +
+ 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' +
+ 'UP8iWi1Qw0Y='
+
+// 加密
+export function encrypt(txt) {
+ const encryptor = new JSEncrypt()
+ encryptor.setPublicKey(publicKey) // 设置公钥
+ return encryptor.encrypt(txt) // 对数据进行加密
+}
+
+// 解密
+export function decrypt(txt) {
+ const encryptor = new JSEncrypt()
+ encryptor.setPrivateKey(privateKey) // 设置私钥
+ return encryptor.decrypt(txt) // 对数据进行解密
+}
+
diff --git a/zhi-admin-ui/src/utils/permission.js b/zhi-admin-ui/src/utils/permission.js
new file mode 100644
index 0000000..bd4c066
--- /dev/null
+++ b/zhi-admin-ui/src/utils/permission.js
@@ -0,0 +1,51 @@
+import store from '@/store'
+
+/**
+ * 字符权限校验
+ * @param {Array} value 校验值
+ * @returns {Boolean}
+ */
+export function checkPermi(value) {
+ if (value && value instanceof Array && value.length > 0) {
+ const permissions = store.getters && store.getters.permissions
+ const permissionDatas = value
+ const all_permission = "*:*:*";
+
+ const hasPermission = permissions.some(permission => {
+ return all_permission === permission || permissionDatas.includes(permission)
+ })
+
+ if (!hasPermission) {
+ return false
+ }
+ return true
+ } else {
+ console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`)
+ return false
+ }
+}
+
+/**
+ * 角色权限校验
+ * @param {Array} value 校验值
+ * @returns {Boolean}
+ */
+export function checkRole(value) {
+ if (value && value instanceof Array && value.length > 0) {
+ const roles = store.getters && store.getters.roles
+ const permissionRoles = value
+ const super_admin = "admin";
+
+ const hasRole = roles.some(role => {
+ return super_admin === role || permissionRoles.includes(role)
+ })
+
+ if (!hasRole) {
+ return false
+ }
+ return true
+ } else {
+ console.error(`need roles! Like checkRole="['admin','editor']"`)
+ return false
+ }
+}
diff --git a/zhi-admin-ui/src/utils/request.js b/zhi-admin-ui/src/utils/request.js
new file mode 100644
index 0000000..f94fa0e
--- /dev/null
+++ b/zhi-admin-ui/src/utils/request.js
@@ -0,0 +1,148 @@
+import axios from 'axios'
+import { Notification, MessageBox, Message, Loading } from 'element-ui'
+import store from '@/store'
+import { getToken } from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+import { tansParams, blobValidate } from "@/utils/ruoyi";
+import cache from '@/plugins/cache'
+import { saveAs } from 'file-saver'
+
+let downloadLoadingInstance;
+// 是否显示重新登录
+export let isRelogin = { show: false };
+
+axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
+// 对应国际化资源文件后缀
+axios.defaults.headers['Content-Language'] = 'zh_CN'
+// 创建axios实例
+const service = axios.create({
+ // axios中请求配置有baseURL选项,表示请求URL公共部分
+ baseURL: process.env.VUE_APP_BASE_API,
+ // 超时
+ timeout: 10000
+})
+
+// request拦截器
+service.interceptors.request.use(config => {
+ // 是否需要设置 token
+ const isToken = (config.headers || {}).isToken === false
+ // 是否需要防止数据重复提交
+ const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
+ if (getToken() && !isToken) {
+ config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+ }
+ // get请求映射params参数
+ if (config.method === 'get' && config.params) {
+ let url = config.url + '?' + tansParams(config.params);
+ url = url.slice(0, -1);
+ config.params = {};
+ config.url = url;
+ }
+ if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
+ const requestObj = {
+ url: config.url,
+ data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
+ time: new Date().getTime()
+ }
+ const sessionObj = cache.session.getJSON('sessionObj')
+ if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
+ cache.session.setJSON('sessionObj', requestObj)
+ } else {
+ const s_url = sessionObj.url; // 请求地址
+ const s_data = sessionObj.data; // 请求数据
+ const s_time = sessionObj.time; // 请求时间
+ const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
+ if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
+ const message = '数据正在处理,请勿重复提交';
+ console.warn(`[${s_url}]: ` + message)
+ return Promise.reject(new Error(message))
+ } else {
+ cache.session.setJSON('sessionObj', requestObj)
+ }
+ }
+ }
+ return config
+}, error => {
+ console.log(error)
+ Promise.reject(error)
+})
+
+// 响应拦截器
+service.interceptors.response.use(res => {
+ // 未设置状态码则默认成功状态
+ const code = res.data.code || 200;
+ // 获取错误信息
+ const msg = errorCode[code] || res.data.msg || errorCode['default']
+ // 二进制数据则直接返回
+ if(res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer'){
+ return res.data
+ }
+ if (code === 401) {
+ if (!isRelogin.show) {
+ isRelogin.show = true;
+ MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
+ isRelogin.show = false;
+ store.dispatch('LogOut').then(() => {
+ location.href = process.env.VUE_APP_CONTEXT_PATH + "index";
+ })
+ }).catch(() => {
+ isRelogin.show = false;
+ });
+ }
+ return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+ } else if (code === 500) {
+ Message({ message: msg, type: 'error' })
+ return Promise.reject(new Error(msg))
+ } else if (code === 601) {
+ Message({ message: msg, type: 'warning' })
+ return Promise.reject('error')
+ } else if (code !== 200) {
+ Notification.error({ title: msg })
+ return Promise.reject('error')
+ } else {
+ return res.data
+ }
+ },
+ error => {
+ console.log('err' + error)
+ let { message } = error;
+ if (message == "Network Error") {
+ message = "后端接口连接异常";
+ } else if (message.includes("timeout")) {
+ message = "系统接口请求超时";
+ } else if (message.includes("Request failed with status code")) {
+ message = "系统接口" + message.substr(message.length - 3) + "异常";
+ }
+ Message({ message: message, type: 'error', duration: 5 * 1000 })
+ return Promise.reject(error)
+ }
+)
+
+// 通用下载方法
+export function download(url, params, filename, config) {
+ downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
+ return service.post(url, params, {
+ transformRequest: [(params) => { return tansParams(params) }],
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+ responseType: 'blob',
+ ...config
+ }).then(async (data) => {
+ const isLogin = await blobValidate(data);
+ if (isLogin) {
+ const blob = new Blob([data])
+ saveAs(blob, filename)
+ } else {
+ const resText = await data.text();
+ const rspObj = JSON.parse(resText);
+ const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
+ Message.error(errMsg);
+ }
+ downloadLoadingInstance.close();
+ }).catch((r) => {
+ console.error(r)
+ Message.error('下载文件出现错误,请联系管理员!')
+ downloadLoadingInstance.close();
+ })
+}
+
+export default service
diff --git a/zhi-admin-ui/src/utils/ruoyi.js b/zhi-admin-ui/src/utils/ruoyi.js
new file mode 100644
index 0000000..243c4c7
--- /dev/null
+++ b/zhi-admin-ui/src/utils/ruoyi.js
@@ -0,0 +1,239 @@
+
+
+/**
+ * 通用js方法封装处理
+ * Copyright (c) 2019 ruoyi
+ */
+
+// 日期格式化
+export function parseTime(time, pattern) {
+ if (arguments.length === 0 || !time) {
+ return null
+ }
+ const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
+ let date
+ if (typeof time === 'object') {
+ date = time
+ } else {
+ if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
+ time = parseInt(time)
+ } else if (typeof time === 'string') {
+ time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
+ }
+ if ((typeof time === 'number') && (time.toString().length === 10)) {
+ time = time * 1000
+ }
+ date = new Date(time)
+ }
+ const formatObj = {
+ y: date.getFullYear(),
+ m: date.getMonth() + 1,
+ d: date.getDate(),
+ h: date.getHours(),
+ i: date.getMinutes(),
+ s: date.getSeconds(),
+ a: date.getDay()
+ }
+ const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+ let value = formatObj[key]
+ // Note: getDay() returns 0 on Sunday
+ if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
+ if (result.length > 0 && value < 10) {
+ value = '0' + value
+ }
+ return value || 0
+ })
+ return time_str
+}
+
+// 表单重置
+export function resetForm(refName) {
+ if (this.$refs[refName]) {
+ this.$refs[refName].resetFields();
+ }
+}
+
+// 添加日期范围
+export function addDateRange(params, dateRange, propName) {
+ let search = params;
+ search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
+ dateRange = Array.isArray(dateRange) ? dateRange : [];
+ if (typeof (propName) === 'undefined') {
+ search.params['beginTime'] = dateRange[0];
+ search.params['endTime'] = dateRange[1];
+ } else {
+ search.params['begin' + propName] = dateRange[0];
+ search.params['end' + propName] = dateRange[1];
+ }
+ return search;
+}
+
+// 回显数据字典
+export function selectDictLabel(datas, value) {
+ if (value === undefined) {
+ return "";
+ }
+ var actions = [];
+ Object.keys(datas).some((key) => {
+ if (datas[key].value == ('' + value)) {
+ actions.push(datas[key].label);
+ return true;
+ }
+ })
+ if (actions.length === 0) {
+ actions.push(value);
+ }
+ return actions.join('');
+}
+
+// 回显数据字典(字符串、数组)
+export function selectDictLabels(datas, value, separator) {
+ if (value === undefined || value.length ===0) {
+ return "";
+ }
+ if (Array.isArray(value)) {
+ value = value.join(",");
+ }
+ var actions = [];
+ var currentSeparator = undefined === separator ? "," : separator;
+ var temp = value.split(currentSeparator);
+ Object.keys(value.split(currentSeparator)).some((val) => {
+ var match = false;
+ Object.keys(datas).some((key) => {
+ if (datas[key].value == ('' + temp[val])) {
+ actions.push(datas[key].label + currentSeparator);
+ match = true;
+ }
+ })
+ if (!match) {
+ actions.push(temp[val] + currentSeparator);
+ }
+ })
+ return actions.join('').substring(0, actions.join('').length - 1);
+}
+
+// 字符串格式化(%s )
+export function sprintf(str) {
+ var args = arguments, flag = true, i = 1;
+ str = str.replace(/%s/g, function () {
+ var arg = args[i++];
+ if (typeof arg === 'undefined') {
+ flag = false;
+ return '';
+ }
+ return arg;
+ });
+ return flag ? str : '';
+}
+
+// 转换字符串,undefined,null等转化为""
+export function parseStrEmpty(str) {
+ if (!str || str == "undefined" || str == "null") {
+ return "";
+ }
+ return str;
+}
+
+// 数据合并
+export function mergeRecursive(source, target) {
+ for (var p in target) {
+ try {
+ if (target[p].constructor == Object) {
+ source[p] = mergeRecursive(source[p], target[p]);
+ } else {
+ source[p] = target[p];
+ }
+ } catch (e) {
+ source[p] = target[p];
+ }
+ }
+ return source;
+};
+
+/**
+ * 构造树型结构数据
+ * @param {*} data 数据源
+ * @param {*} id id字段 默认 'id'
+ * @param {*} parentId 父节点字段 默认 'parentId'
+ * @param {*} children 孩子节点字段 默认 'children'
+ */
+export function handleTree(data, id, parentId, children) {
+ let config = {
+ id: id || 'id',
+ parentId: parentId || 'parentId',
+ childrenList: children || 'children'
+ };
+
+ var childrenListMap = {};
+ var nodeIds = {};
+ var tree = [];
+
+ for (let d of data) {
+ let parentId = d[config.parentId];
+ if (childrenListMap[parentId] == null) {
+ childrenListMap[parentId] = [];
+ }
+ nodeIds[d[config.id]] = d;
+ childrenListMap[parentId].push(d);
+ }
+
+ for (let d of data) {
+ let parentId = d[config.parentId];
+ if (nodeIds[parentId] == null) {
+ tree.push(d);
+ }
+ }
+
+ for (let t of tree) {
+ adaptToChildrenList(t);
+ }
+
+ function adaptToChildrenList(o) {
+ if (childrenListMap[o[config.id]] !== null) {
+ o[config.childrenList] = childrenListMap[o[config.id]];
+ }
+ if (o[config.childrenList]) {
+ for (let c of o[config.childrenList]) {
+ adaptToChildrenList(c);
+ }
+ }
+ }
+ return tree;
+}
+
+/**
+* 参数处理
+* @param {*} params 参数
+*/
+export function tansParams(params) {
+ let result = ''
+ for (const propName of Object.keys(params)) {
+ const value = params[propName];
+ var part = encodeURIComponent(propName) + "=";
+ if (value !== null && value !== "" && typeof (value) !== "undefined") {
+ if (typeof value === 'object') {
+ for (const key of Object.keys(value)) {
+ if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
+ let params = propName + '[' + key + ']';
+ var subPart = encodeURIComponent(params) + "=";
+ result += subPart + encodeURIComponent(value[key]) + "&";
+ }
+ }
+ } else {
+ result += part + encodeURIComponent(value) + "&";
+ }
+ }
+ }
+ return result
+}
+
+// 验证是否为blob格式
+export async function blobValidate(data) {
+ try {
+ const text = await data.text();
+ JSON.parse(text);
+ return false;
+ } catch (error) {
+ return true;
+ }
+}
diff --git a/zhi-admin-ui/src/utils/scroll-to.js b/zhi-admin-ui/src/utils/scroll-to.js
new file mode 100644
index 0000000..c5d8e04
--- /dev/null
+++ b/zhi-admin-ui/src/utils/scroll-to.js
@@ -0,0 +1,58 @@
+Math.easeInOutQuad = function(t, b, c, d) {
+ t /= d / 2
+ if (t < 1) {
+ return c / 2 * t * t + b
+ }
+ t--
+ return -c / 2 * (t * (t - 2) - 1) + b
+}
+
+// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts
+var requestAnimFrame = (function() {
+ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) }
+})()
+
+/**
+ * Because it's so fucking difficult to detect the scrolling element, just move them all
+ * @param {number} amount
+ */
+function move(amount) {
+ document.documentElement.scrollTop = amount
+ document.body.parentNode.scrollTop = amount
+ document.body.scrollTop = amount
+}
+
+function position() {
+ return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop
+}
+
+/**
+ * @param {number} to
+ * @param {number} duration
+ * @param {Function} callback
+ */
+export function scrollTo(to, duration, callback) {
+ const start = position()
+ const change = to - start
+ const increment = 20
+ let currentTime = 0
+ duration = (typeof (duration) === 'undefined') ? 500 : duration
+ var animateScroll = function() {
+ // increment the time
+ currentTime += increment
+ // find the value with the quadratic in-out easing function
+ var val = Math.easeInOutQuad(currentTime, start, change, duration)
+ // move the document.body
+ move(val)
+ // do the animation unless its over
+ if (currentTime < duration) {
+ requestAnimFrame(animateScroll)
+ } else {
+ if (callback && typeof (callback) === 'function') {
+ // the animation is done so lets callback
+ callback()
+ }
+ }
+ }
+ animateScroll()
+}
diff --git a/zhi-admin-ui/src/utils/validate.js b/zhi-admin-ui/src/utils/validate.js
new file mode 100644
index 0000000..adfa254
--- /dev/null
+++ b/zhi-admin-ui/src/utils/validate.js
@@ -0,0 +1,83 @@
+/**
+ * @param {string} path
+ * @returns {Boolean}
+ */
+export function isExternal(path) {
+ return /^(https?:|mailto:|tel:)/.test(path)
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validUsername(str) {
+ const valid_map = ['admin', 'editor']
+ return valid_map.indexOf(str.trim()) >= 0
+}
+
+/**
+ * @param {string} url
+ * @returns {Boolean}
+ */
+export function validURL(url) {
+ const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
+ return reg.test(url)
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validLowerCase(str) {
+ const reg = /^[a-z]+$/
+ return reg.test(str)
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validUpperCase(str) {
+ const reg = /^[A-Z]+$/
+ return reg.test(str)
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function validAlphabets(str) {
+ const reg = /^[A-Za-z]+$/
+ return reg.test(str)
+}
+
+/**
+ * @param {string} email
+ * @returns {Boolean}
+ */
+export function validEmail(email) {
+ const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
+ return reg.test(email)
+}
+
+/**
+ * @param {string} str
+ * @returns {Boolean}
+ */
+export function isString(str) {
+ if (typeof str === 'string' || str instanceof String) {
+ return true
+ }
+ return false
+}
+
+/**
+ * @param {Array} arg
+ * @returns {Boolean}
+ */
+export function isArray(arg) {
+ if (typeof Array.isArray === 'undefined') {
+ return Object.prototype.toString.call(arg) === '[object Array]'
+ }
+ return Array.isArray(arg)
+}
diff --git a/zhi-admin-ui/src/views/about/About.vue b/zhi-admin-ui/src/views/about/About.vue
new file mode 100644
index 0000000..5a0e5d5
--- /dev/null
+++ b/zhi-admin-ui/src/views/about/About.vue
@@ -0,0 +1,154 @@
+
+
+ {{ this.$route.meta.title }}
+
+
+
+
+ 修改
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/album/album/Album.vue b/zhi-admin-ui/src/views/album/album/Album.vue
new file mode 100644
index 0000000..85d023c
--- /dev/null
+++ b/zhi-admin-ui/src/views/album/album/Album.vue
@@ -0,0 +1,363 @@
+
+
+
+ {{ this.$route.meta.title }}
+
+
+ 新建相册
+
+
+
+ 回收站
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+
+ 删除
+
+
+
+
+
+
{{ item.photoCount }}
+
+
+
+
{{ item.albumName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 将文件拖到此处,或点击上传
+
+
+
+
+
+
+ 公开
+ 私密
+
+
+
+
+ 取 消
+
+ 确 定
+
+
+
+
+
+
+ 提示
+
+ 是否删除该相册?
+
+ 取 消
+
+ 确 定
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/album/album/Photo.vue b/zhi-admin-ui/src/views/album/album/Photo.vue
new file mode 100644
index 0000000..2c4fdb0
--- /dev/null
+++ b/zhi-admin-ui/src/views/album/album/Photo.vue
@@ -0,0 +1,530 @@
+
+
+
+ {{ this.$route.meta.title }}
+
+
+
+
+
+ {{ albumInfo.albumName }}
+ {{ albumInfo.photoCount }}张
+
+
+
+ {{ albumInfo.albumDesc }}
+
+
+ 上传照片
+
+
+
+
+
+
+
+ 全选
+
+
已选择{{ selectPhotoIdList.length }}张
+
+
+ 移动到
+
+
+ 批量删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+
+
+
+
{{ item.photoName }}
+
+
+
+
+
+
+
+
+
+
+ 上传照片
+
+
+
+
+
+
+
+
+
+
+
+ 将文件拖到此处,或点击上传
+
+
+ 支持上传jpg/png文件
+
+
+
+
+
+
+
+
+
+
+
+ 修改信息
+
+
+
+
+
+
+
+
+
+
+ 取 消
+
+ 确 定
+
+
+
+
+
+
+ 提示
+
+ 是否删除选中照片?
+
+ 取 消
+
+ 确 定
+
+
+
+
+
+
+ 移动照片
+
+
+
+
+
+
+
+
+
+
{{ item.albumName }}
+
+
+
+
+
+
+
+ 取 消
+
+ 确 定
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/album/album/new/SPhoto.vue b/zhi-admin-ui/src/views/album/album/new/SPhoto.vue
new file mode 100644
index 0000000..c9cc704
--- /dev/null
+++ b/zhi-admin-ui/src/views/album/album/new/SPhoto.vue
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/album/album/new/index.vue b/zhi-admin-ui/src/views/album/album/new/index.vue
new file mode 100644
index 0000000..ff48315
--- /dev/null
+++ b/zhi-admin-ui/src/views/album/album/new/index.vue
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/article/article/index.vue b/zhi-admin-ui/src/views/article/article/index.vue
new file mode 100644
index 0000000..6a6258a
--- /dev/null
+++ b/zhi-admin-ui/src/views/article/article/index.vue
@@ -0,0 +1,572 @@
+
+
+
+
+
+ {{ this.$route.meta.title }}
+
+
+
+
+
+
+
+
+ 发布文章
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.categoryName }}
+
+
+
+ 分类
+
+
+
+ {{ item.categoryName }}
+
+
+
+
+
+ {{ item.categoryName }}
+
+
+
+ 添加分类
+
+
+
+
+
+
+
+ {{ item}}
+
+
+
+ 标签
+
+
+
+ {{ item.tagName }}
+
+
+
+
+
添加标签
+
+ {{ item.tagName }}
+
+
+
+ 添加标签
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/article/articleList/index.vue b/zhi-admin-ui/src/views/article/articleList/index.vue
new file mode 100644
index 0000000..15467c5
--- /dev/null
+++ b/zhi-admin-ui/src/views/article/articleList/index.vue
@@ -0,0 +1,628 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+ 新增
+
+
+ 标签修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.categoryName}}
+
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.categoryName }}
+
+
+
+ 分类
+
+
+
+ {{ item.categoryName }}
+
+
+
+
+
+ {{ item.categoryName }}
+
+
+
+ 添加分类
+
+
+
+
+
+
+
+ {{ item}}
+
+
+
+ 标签
+
+
+
+ {{ item.tagName }}
+
+
+
+
+
添加标签
+
+ {{ item.tagName }}
+
+
+
+ 添加标签
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/category/category/index.vue b/zhi-admin-ui/src/views/category/category/index.vue
new file mode 100644
index 0000000..3cd6c16
--- /dev/null
+++ b/zhi-admin-ui/src/views/category/category/index.vue
@@ -0,0 +1,278 @@
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.categoryName}}
+
+ >
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/comment/comment/index.vue b/zhi-admin-ui/src/views/comment/comment/index.vue
new file mode 100644
index 0000000..9701390
--- /dev/null
+++ b/zhi-admin-ui/src/views/comment/comment/index.vue
@@ -0,0 +1,449 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+
+
+
+ {{scope.row.replyUserName== null ? '无' :scope.row.replyUserName}}
+
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 通过
+ 驳回
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/components/icons/element-icons.js b/zhi-admin-ui/src/views/components/icons/element-icons.js
new file mode 100644
index 0000000..9ea4d63
--- /dev/null
+++ b/zhi-admin-ui/src/views/components/icons/element-icons.js
@@ -0,0 +1,3 @@
+const elementIcons = ['platform-eleme', 'eleme', 'delete-solid', 'delete', 's-tools', 'setting', 'user-solid', 'user', 'phone', 'phone-outline', 'more', 'more-outline', 'star-on', 'star-off', 's-goods', 'goods', 'warning', 'warning-outline', 'question', 'info', 'remove', 'circle-plus', 'success', 'error', 'zoom-in', 'zoom-out', 'remove-outline', 'circle-plus-outline', 'circle-check', 'circle-close', 's-help', 'help', 'minus', 'plus', 'check', 'close', 'picture', 'picture-outline', 'picture-outline-round', 'upload', 'upload2', 'download', 'camera-solid', 'camera', 'video-camera-solid', 'video-camera', 'message-solid', 'bell', 's-cooperation', 's-order', 's-platform', 's-fold', 's-unfold', 's-operation', 's-promotion', 's-home', 's-release', 's-ticket', 's-management', 's-open', 's-shop', 's-marketing', 's-flag', 's-comment', 's-finance', 's-claim', 's-custom', 's-opportunity', 's-data', 's-check', 's-grid', 'menu', 'share', 'd-caret', 'caret-left', 'caret-right', 'caret-bottom', 'caret-top', 'bottom-left', 'bottom-right', 'back', 'right', 'bottom', 'top', 'top-left', 'top-right', 'arrow-left', 'arrow-right', 'arrow-down', 'arrow-up', 'd-arrow-left', 'd-arrow-right', 'video-pause', 'video-play', 'refresh', 'refresh-right', 'refresh-left', 'finished', 'sort', 'sort-up', 'sort-down', 'rank', 'loading', 'view', 'c-scale-to-original', 'date', 'edit', 'edit-outline', 'folder', 'folder-opened', 'folder-add', 'folder-remove', 'folder-delete', 'folder-checked', 'tickets', 'document-remove', 'document-delete', 'document-copy', 'document-checked', 'document', 'document-add', 'printer', 'paperclip', 'takeaway-box', 'search', 'monitor', 'attract', 'mobile', 'scissors', 'umbrella', 'headset', 'brush', 'mouse', 'coordinate', 'magic-stick', 'reading', 'data-line', 'data-board', 'pie-chart', 'data-analysis', 'collection-tag', 'film', 'suitcase', 'suitcase-1', 'receiving', 'collection', 'files', 'notebook-1', 'notebook-2', 'toilet-paper', 'office-building', 'school', 'table-lamp', 'house', 'no-smoking', 'smoking', 'shopping-cart-full', 'shopping-cart-1', 'shopping-cart-2', 'shopping-bag-1', 'shopping-bag-2', 'sold-out', 'sell', 'present', 'box', 'bank-card', 'money', 'coin', 'wallet', 'discount', 'price-tag', 'news', 'guide', 'male', 'female', 'thumb', 'cpu', 'link', 'connection', 'open', 'turn-off', 'set-up', 'chat-round', 'chat-line-round', 'chat-square', 'chat-dot-round', 'chat-dot-square', 'chat-line-square', 'message', 'postcard', 'position', 'turn-off-microphone', 'microphone', 'close-notification', 'bangzhu', 'time', 'odometer', 'crop', 'aim', 'switch-button', 'full-screen', 'copy-document', 'mic', 'stopwatch', 'medal-1', 'medal', 'trophy', 'trophy-1', 'first-aid-kit', 'discover', 'place', 'location', 'location-outline', 'location-information', 'add-location', 'delete-location', 'map-location', 'alarm-clock', 'timer', 'watch-1', 'watch', 'lock', 'unlock', 'key', 'service', 'mobile-phone', 'bicycle', 'truck', 'ship', 'basketball', 'football', 'soccer', 'baseball', 'wind-power', 'light-rain', 'lightning', 'heavy-rain', 'sunrise', 'sunrise-1', 'sunset', 'sunny', 'cloudy', 'partly-cloudy', 'cloudy-and-sunny', 'moon', 'moon-night', 'dish', 'dish-1', 'food', 'chicken', 'fork-spoon', 'knife-fork', 'burger', 'tableware', 'sugar', 'dessert', 'ice-cream', 'hot-water', 'water-cup', 'coffee-cup', 'cold-drink', 'goblet', 'goblet-full', 'goblet-square', 'goblet-square-full', 'refrigerator', 'grape', 'watermelon', 'cherry', 'apple', 'pear', 'orange', 'coffee', 'ice-tea', 'ice-drink', 'milk-tea', 'potato-strips', 'lollipop', 'ice-cream-square', 'ice-cream-round']
+
+export default elementIcons
diff --git a/zhi-admin-ui/src/views/components/icons/index.vue b/zhi-admin-ui/src/views/components/icons/index.vue
new file mode 100644
index 0000000..d3c9a71
--- /dev/null
+++ b/zhi-admin-ui/src/views/components/icons/index.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+ {{ generateIconCode(item) }}
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+ {{ generateElementIconCode(item) }}
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/components/icons/svg-icons.js b/zhi-admin-ui/src/views/components/icons/svg-icons.js
new file mode 100644
index 0000000..724cd8e
--- /dev/null
+++ b/zhi-admin-ui/src/views/components/icons/svg-icons.js
@@ -0,0 +1,10 @@
+const req = require.context('../../../assets/icons/svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys()
+
+const re = /\.\/(.*)\.svg/
+
+const svgIcons = requireAll(req).map(i => {
+ return i.match(re)[1]
+})
+
+export default svgIcons
diff --git a/zhi-admin-ui/src/views/dashboard/BarChart.vue b/zhi-admin-ui/src/views/dashboard/BarChart.vue
new file mode 100644
index 0000000..be0af34
--- /dev/null
+++ b/zhi-admin-ui/src/views/dashboard/BarChart.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/dashboard/LineChart.vue b/zhi-admin-ui/src/views/dashboard/LineChart.vue
new file mode 100644
index 0000000..e654168
--- /dev/null
+++ b/zhi-admin-ui/src/views/dashboard/LineChart.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/dashboard/PanelGroup.vue b/zhi-admin-ui/src/views/dashboard/PanelGroup.vue
new file mode 100644
index 0000000..1a1081f
--- /dev/null
+++ b/zhi-admin-ui/src/views/dashboard/PanelGroup.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/dashboard/PieChart.vue b/zhi-admin-ui/src/views/dashboard/PieChart.vue
new file mode 100644
index 0000000..4d2ef32
--- /dev/null
+++ b/zhi-admin-ui/src/views/dashboard/PieChart.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/dashboard/RaddarChart.vue b/zhi-admin-ui/src/views/dashboard/RaddarChart.vue
new file mode 100644
index 0000000..6823af3
--- /dev/null
+++ b/zhi-admin-ui/src/views/dashboard/RaddarChart.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/dashboard/mixins/resize.js b/zhi-admin-ui/src/views/dashboard/mixins/resize.js
new file mode 100644
index 0000000..b1e76e9
--- /dev/null
+++ b/zhi-admin-ui/src/views/dashboard/mixins/resize.js
@@ -0,0 +1,56 @@
+import { debounce } from '@/utils'
+
+export default {
+ data() {
+ return {
+ $_sidebarElm: null,
+ $_resizeHandler: null
+ }
+ },
+ mounted() {
+ this.initListener()
+ },
+ activated() {
+ if (!this.$_resizeHandler) {
+ // avoid duplication init
+ this.initListener()
+ }
+
+ // when keep-alive chart activated, auto resize
+ this.resize()
+ },
+ beforeDestroy() {
+ this.destroyListener()
+ },
+ deactivated() {
+ this.destroyListener()
+ },
+ methods: {
+ // use $_ for mixins properties
+ // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
+ $_sidebarResizeHandler(e) {
+ if (e.propertyName === 'width') {
+ this.$_resizeHandler()
+ }
+ },
+ initListener() {
+ this.$_resizeHandler = debounce(() => {
+ this.resize()
+ }, 100)
+ window.addEventListener('resize', this.$_resizeHandler)
+
+ this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
+ this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
+ },
+ destroyListener() {
+ window.removeEventListener('resize', this.$_resizeHandler)
+ this.$_resizeHandler = null
+
+ this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
+ },
+ resize() {
+ const { chart } = this
+ chart && chart.resize()
+ }
+ }
+}
diff --git a/zhi-admin-ui/src/views/demo/demo/index.vue b/zhi-admin-ui/src/views/demo/demo/index.vue
new file mode 100644
index 0000000..65387c9
--- /dev/null
+++ b/zhi-admin-ui/src/views/demo/demo/index.vue
@@ -0,0 +1,431 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 搜索(自定义分页接口)
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导入(校验)
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}
+
+
+
+
+
+ {{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 将文件拖到此处,或点击上传
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/demo/tree/index.vue b/zhi-admin-ui/src/views/demo/tree/index.vue
new file mode 100644
index 0000000..6cfa7f2
--- /dev/null
+++ b/zhi-admin-ui/src/views/demo/tree/index.vue
@@ -0,0 +1,313 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 展开/折叠
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}
+
+
+
+
+ 修改
+ 新增
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/error/401.vue b/zhi-admin-ui/src/views/error/401.vue
new file mode 100644
index 0000000..448b6ec
--- /dev/null
+++ b/zhi-admin-ui/src/views/error/401.vue
@@ -0,0 +1,88 @@
+
+
+
+ 返回
+
+
+
+
+ 401错误!
+
+ 您没有访问权限!
+ 对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/error/404.vue b/zhi-admin-ui/src/views/error/404.vue
new file mode 100644
index 0000000..96f075c
--- /dev/null
+++ b/zhi-admin-ui/src/views/error/404.vue
@@ -0,0 +1,233 @@
+
+
+
+
+
+
+ 404错误!
+
+
+ {{ message }}
+
+
+ 对不起,您正在寻找的页面不存在。尝试检查URL的错误,然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。
+
+
+ 返回首页
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/friendLink/friendLink/index.vue b/zhi-admin-ui/src/views/friendLink/friendLink/index.vue
new file mode 100644
index 0000000..5a58183
--- /dev/null
+++ b/zhi-admin-ui/src/views/friendLink/friendLink/index.vue
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/index.vue b/zhi-admin-ui/src/views/index.vue
new file mode 100644
index 0000000..3d724c8
--- /dev/null
+++ b/zhi-admin-ui/src/views/index.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/index_v1.vue b/zhi-admin-ui/src/views/index_v1.vue
new file mode 100644
index 0000000..d2d2ec6
--- /dev/null
+++ b/zhi-admin-ui/src/views/index_v1.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/login.vue b/zhi-admin-ui/src/views/login.vue
new file mode 100644
index 0000000..9709373
--- /dev/null
+++ b/zhi-admin-ui/src/views/login.vue
@@ -0,0 +1,220 @@
+
+
+
+ Water-zhi博客系统
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 记住密码
+
+
+ 登 录
+ 登 录 中...
+
+
+ 立即注册
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/message/message/index.vue b/zhi-admin-ui/src/views/message/message/index.vue
new file mode 100644
index 0000000..ba8b61a
--- /dev/null
+++ b/zhi-admin-ui/src/views/message/message/index.vue
@@ -0,0 +1,399 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 通过
+ 驳回
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/monitor/cache/index.vue b/zhi-admin-ui/src/views/monitor/cache/index.vue
new file mode 100644
index 0000000..8a0275c
--- /dev/null
+++ b/zhi-admin-ui/src/views/monitor/cache/index.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+ 基本信息
+
+
+
+
+ Redis版本
+ {{ cache.info.redis_version }}
+ 运行模式
+ {{ cache.info.redis_mode == "standalone" ? "单机" : "集群" }}
+ 端口
+ {{ cache.info.tcp_port }}
+ 客户端数
+ {{ cache.info.connected_clients }}
+
+
+ 运行时间(天)
+ {{ cache.info.uptime_in_days }}
+ 使用内存
+ {{ cache.info.used_memory_human }}
+ 使用CPU
+ {{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}
+ 内存配置
+ {{ cache.info.maxmemory_human }}
+
+
+ AOF是否开启
+ {{ cache.info.aof_enabled == "0" ? "否" : "是" }}
+ RDB是否成功
+ {{ cache.info.rdb_last_bgsave_status }}
+ Key数量
+ {{ cache.dbSize }}
+ 网络入口/出口
+ {{ cache.info.instantaneous_input_kbps }}kps/{{cache.info.instantaneous_output_kbps}}kps
+
+
+
+
+
+
+
+
+
+ 命令统计
+
+
+
+
+
+
+
+ 内存信息
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/monitor/cache/list.vue b/zhi-admin-ui/src/views/monitor/cache/list.vue
new file mode 100644
index 0000000..94307ab
--- /dev/null
+++ b/zhi-admin-ui/src/views/monitor/cache/list.vue
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+ 缓存列表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 键名列表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 缓存内容
+ 清理全部
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/monitor/logininfor/index.vue b/zhi-admin-ui/src/views/monitor/logininfor/index.vue
new file mode 100644
index 0000000..8a9b17a
--- /dev/null
+++ b/zhi-admin-ui/src/views/monitor/logininfor/index.vue
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 删除
+
+
+ 清空
+
+
+ 解锁
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.loginTime) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/monitor/online/index.vue b/zhi-admin-ui/src/views/monitor/online/index.vue
new file mode 100644
index 0000000..ad613c9
--- /dev/null
+++ b/zhi-admin-ui/src/views/monitor/online/index.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+ {{(pageNum - 1) * pageSize + scope.$index + 1}}
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.loginTime) }}
+
+
+
+
+ 强退
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/monitor/operlog/index.vue b/zhi-admin-ui/src/views/monitor/operlog/index.vue
new file mode 100644
index 0000000..c1b5377
--- /dev/null
+++ b/zhi-admin-ui/src/views/monitor/operlog/index.vue
@@ -0,0 +1,305 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 删除
+
+
+ 清空
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.operTime) }}
+
+
+
+
+ 详细
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.title }} / {{ typeFormat(form) }}
+ {{ form.operName }} / {{ form.operIp }} / {{ form.operLocation }}
+
+
+ {{ form.operUrl }}
+ {{ form.requestMethod }}
+
+
+ {{ form.method }}
+
+
+ {{ form.operParam }}
+
+
+ {{ form.jsonResult }}
+
+
+
+ 正常
+ 失败
+
+
+
+ {{ parseTime(form.operTime) }}
+
+
+ {{ form.errorMsg }}
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/monitor/xxljob/index.vue b/zhi-admin-ui/src/views/monitor/xxljob/index.vue
new file mode 100644
index 0000000..7167b48
--- /dev/null
+++ b/zhi-admin-ui/src/views/monitor/xxljob/index.vue
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/zhi-admin-ui/src/views/page/index.vue b/zhi-admin-ui/src/views/page/index.vue
new file mode 100644
index 0000000..39e945b
--- /dev/null
+++ b/zhi-admin-ui/src/views/page/index.vue
@@ -0,0 +1,302 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/redirect.vue b/zhi-admin-ui/src/views/redirect.vue
new file mode 100644
index 0000000..db4c1d6
--- /dev/null
+++ b/zhi-admin-ui/src/views/redirect.vue
@@ -0,0 +1,12 @@
+
diff --git a/zhi-admin-ui/src/views/register.vue b/zhi-admin-ui/src/views/register.vue
new file mode 100644
index 0000000..1797599
--- /dev/null
+++ b/zhi-admin-ui/src/views/register.vue
@@ -0,0 +1,212 @@
+
+
+
+ RuoYi-Vue-Plus后台管理系统
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 注 册
+ 注 册 中...
+
+
+ 使用已有账户登录
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/config/index.vue b/zhi-admin-ui/src/views/system/config/index.vue
new file mode 100644
index 0000000..f580b98
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/config/index.vue
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+ 刷新缓存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/dept/index.vue b/zhi-admin-ui/src/views/system/dept/index.vue
new file mode 100644
index 0000000..e502b4e
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/dept/index.vue
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 展开/折叠
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+ 新增
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/dict/data.vue b/zhi-admin-ui/src/views/system/dict/data.vue
new file mode 100644
index 0000000..c36cffc
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/dict/data.vue
@@ -0,0 +1,402 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+ {{scope.row.dictLabel}}
+ {{scope.row.dictLabel}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/dict/index.vue b/zhi-admin-ui/src/views/system/dict/index.vue
new file mode 100644
index 0000000..b6ed788
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/dict/index.vue
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+ 刷新缓存
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.dictType }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/menu/index.vue b/zhi-admin-ui/src/views/system/menu/index.vue
new file mode 100644
index 0000000..52eb8b9
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/menu/index.vue
@@ -0,0 +1,453 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 展开/折叠
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+ 新增
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 目录
+ 菜单
+ 按钮
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 是否外链
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+ 路由地址
+
+
+
+
+
+
+
+
+
+
+ 组件路径
+
+
+
+
+
+
+
+
+
+
+
+ 权限字符
+
+
+
+
+
+
+
+
+
+
+ 路由参数
+
+
+
+
+
+
+
+
+
+ 是否缓存
+
+
+ 缓存
+ 不缓存
+
+
+
+
+
+
+
+
+
+ 显示状态
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+ 菜单状态
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/notice/index.vue b/zhi-admin-ui/src/views/system/notice/index.vue
new file mode 100644
index 0000000..19e25a0
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/notice/index.vue
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/views/system/oss/config.vue b/zhi-admin-ui/src/views/system/oss/config.vue
new file mode 100644
index 0000000..0120641
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/oss/config.vue
@@ -0,0 +1,406 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ private
+ public
+ custom
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+ private
+ public
+ custom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/oss/index.vue b/zhi-admin-ui/src/views/system/oss/index.vue
new file mode 100644
index 0000000..9f8557c
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/oss/index.vue
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 上传文件
+
+
+ 上传图片
+
+
+ 删除
+
+
+ 预览开关 : {{previewListResource ? "禁用" : "启用"}}
+
+
+ 配置管理
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}
+
+
+
+
+
+
+ 下载
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/post/index.vue b/zhi-admin-ui/src/views/system/post/index.vue
new file mode 100644
index 0000000..444bf63
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/post/index.vue
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/role/authUser.vue b/zhi-admin-ui/src/views/system/role/authUser.vue
new file mode 100644
index 0000000..147aa33
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/role/authUser.vue
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 添加用户
+
+
+ 批量取消授权
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 取消授权
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhi-admin-ui/src/views/system/role/index.vue b/zhi-admin-ui/src/views/system/role/index.vue
new file mode 100644
index 0000000..ca02f3a
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/role/index.vue
@@ -0,0 +1,606 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+ 删除
+ handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">
+ 更多
+
+ 数据权限
+ 分配用户
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 权限字符
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+ 展开/折叠
+ 全选/全不选
+ 父子联动
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 展开/折叠
+ 全选/全不选
+ 父子联动
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/role/selectUser.vue b/zhi-admin-ui/src/views/system/role/selectUser.vue
new file mode 100644
index 0000000..b2b072f
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/role/selectUser.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/user/authRole.vue b/zhi-admin-ui/src/views/system/user/authRole.vue
new file mode 100644
index 0000000..7abe26a
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/user/authRole.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{(pageNum - 1) * pageSize + scope.$index + 1}}
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+
+
+
+
+ 提交
+ 返回
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/user/index.vue b/zhi-admin-ui/src/views/system/user/index.vue
new file mode 100644
index 0000000..b2120e6
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/user/index.vue
@@ -0,0 +1,670 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导入
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+ 删除
+ handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
+ 更多
+
+ 重置密码
+ 分配角色
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 将文件拖到此处,或点击上传
+
+
+ 是否更新已经存在的用户数据
+
+
仅允许导入xls、xlsx格式文件。
+
下载模板
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/user/profile/index.vue b/zhi-admin-ui/src/views/system/user/profile/index.vue
new file mode 100644
index 0000000..2cc7c2f
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/user/profile/index.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+ 个人信息
+
+
+
+
+
+
+
+ 基本资料
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/user/profile/resetPwd.vue b/zhi-admin-ui/src/views/system/user/profile/resetPwd.vue
new file mode 100644
index 0000000..64e8f8c
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/user/profile/resetPwd.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存
+ 关闭
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/user/profile/userAvatar.vue b/zhi-admin-ui/src/views/system/user/profile/userAvatar.vue
new file mode 100644
index 0000000..18b23a4
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/user/profile/userAvatar.vue
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提 交
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/system/user/profile/userInfo.vue b/zhi-admin-ui/src/views/system/user/profile/userInfo.vue
new file mode 100644
index 0000000..068b714
--- /dev/null
+++ b/zhi-admin-ui/src/views/system/user/profile/userInfo.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 男
+ 女
+
+
+
+ 保存
+ 关闭
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tag/tag/index.vue b/zhi-admin-ui/src/views/tag/tag/index.vue
new file mode 100644
index 0000000..17a43fb
--- /dev/null
+++ b/zhi-admin-ui/src/views/tag/tag/index.vue
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.tagName}}
+
+ >
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/talk/talk/index.vue b/zhi-admin-ui/src/views/talk/talk/index.vue
new file mode 100644
index 0000000..28d2755
--- /dev/null
+++ b/zhi-admin-ui/src/views/talk/talk/index.vue
@@ -0,0 +1,199 @@
+
+
+ {{ this.$route.meta.title }}
+
+
+
+
+
+
+
+
+
+
+ {{value}}
+
+
+
+
+
+
+
+
+ 发布
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/talk/talkList/index.vue b/zhi-admin-ui/src/views/talk/talkList/index.vue
new file mode 100644
index 0000000..cced271
--- /dev/null
+++ b/zhi-admin-ui/src/views/talk/talkList/index.vue
@@ -0,0 +1,255 @@
+
+
+ {{ this.$route.meta.title }}
+
+
+
+
+
+
+
+
+
{{ item.nickName }}
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+ {{ item.createTime | dateTime }}
+
+ 置顶
+
+
+ 私密
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提示
+
+ 是否删除该说说?
+
+ 取 消
+
+ 确 定
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/build/CodeTypeDialog.vue b/zhi-admin-ui/src/views/tool/build/CodeTypeDialog.vue
new file mode 100644
index 0000000..b5c2e2e
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/build/CodeTypeDialog.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+
+
+ 确定
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/build/DraggableItem.vue b/zhi-admin-ui/src/views/tool/build/DraggableItem.vue
new file mode 100644
index 0000000..e881778
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/build/DraggableItem.vue
@@ -0,0 +1,100 @@
+
diff --git a/zhi-admin-ui/src/views/tool/build/IconsDialog.vue b/zhi-admin-ui/src/views/tool/build/IconsDialog.vue
new file mode 100644
index 0000000..958be50
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/build/IconsDialog.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/build/RightPanel.vue b/zhi-admin-ui/src/views/tool/build/RightPanel.vue
new file mode 100644
index 0000000..c2760eb
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/build/RightPanel.vue
@@ -0,0 +1,946 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ {{ activeData.componentName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择
+
+
+
+
+
+
+ 选择
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 默认
+
+
+ 右侧
+
+
+
+
+
+
+ 个字符
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text
+
+
+ picture
+
+
+ picture-card
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选项
+
+
+
+
+
+ 添加选项
+
+
+
+
+
+
+ 选项
+
+
+
+ 动态数据
+
+
+ 静态数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加父级
+
+
+
+
+
+
+
+
+ 默认
+
+
+ 按钮
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 中等
+
+
+ 较小
+
+
+ 迷你
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 布局结构树
+
+
+
+
+ {{ node.label }}
+
+
+
+
+
+
+ 正则校验
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加规则
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 中等
+
+
+ 较小
+
+
+ 迷你
+
+
+
+
+
+
+ 左对齐
+
+
+ 右对齐
+
+
+ 顶部对齐
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/build/TreeNodeDialog.vue b/zhi-admin-ui/src/views/tool/build/TreeNodeDialog.vue
new file mode 100644
index 0000000..fa7f0b2
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/build/TreeNodeDialog.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+
+
+ 取消
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/build/index.vue b/zhi-admin-ui/src/views/tool/build/index.vue
new file mode 100644
index 0000000..d679422
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/build/index.vue
@@ -0,0 +1,783 @@
+
+
+
+
+
+
Form Generator
+
+
+
+
+
+ 输入型组件
+
+
+
+
+
+ {{ element.label }}
+
+
+
+
+ 选择型组件
+
+
+
+
+
+ {{ element.label }}
+
+
+
+
+ 布局型组件
+
+
+
+
+
+ {{ element.label }}
+
+
+
+
+
+
+
+
+
+
+ 导出vue文件
+
+
+ 复制代码
+
+
+ 清空
+
+
+
+
+
+
+
+
+
+ 从左侧拖入或点选组件进行表单设计
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/gen/basicInfoForm.vue b/zhi-admin-ui/src/views/tool/gen/basicInfoForm.vue
new file mode 100644
index 0000000..7029529
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/gen/basicInfoForm.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/gen/editTable.vue b/zhi-admin-ui/src/views/tool/gen/editTable.vue
new file mode 100644
index 0000000..f34327d
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/gen/editTable.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dict.dictName }}
+ {{ dict.dictType }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+ 返回
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/gen/genInfoForm.vue b/zhi-admin-ui/src/views/tool/gen/genInfoForm.vue
new file mode 100644
index 0000000..a597a95
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/gen/genInfoForm.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+ 生成模板
+
+
+
+
+
+
+
+
+
+
+ 生成包路径
+
+
+
+
+
+
+
+
+
+
+
+ 生成模块名
+
+
+
+
+
+
+
+
+
+
+
+ 生成业务名
+
+
+
+
+
+
+
+
+
+
+
+ 生成功能名
+
+
+
+
+
+
+
+
+
+
+
+ 上级菜单
+
+
+
+
+
+
+
+
+
+
+
+ 生成代码方式
+
+
+
+
+ zip压缩包
+ 自定义路径
+
+
+
+
+
+
+ 自定义路径
+
+
+
+
+
+
+
+ 最近路径快速选择
+
+
+
+ 恢复默认的生成基础路径
+
+
+
+
+
+
+
+
+
+
+
+
+ 树编码字段
+
+
+
+
+
+
+
+
+
+
+
+
+ 树父编码字段
+
+
+
+
+
+
+
+
+
+
+
+
+ 树名称字段
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关联子表的表名
+
+
+
+
+
+
+
+
+
+
+
+
+ 子表关联的外键名
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/gen/importTable.vue b/zhi-admin-ui/src/views/tool/gen/importTable.vue
new file mode 100644
index 0000000..3ea9532
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/gen/importTable.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/tool/gen/index.vue b/zhi-admin-ui/src/views/tool/gen/index.vue
new file mode 100644
index 0000000..66bd13f
--- /dev/null
+++ b/zhi-admin-ui/src/views/tool/gen/index.vue
@@ -0,0 +1,348 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 生成
+
+
+ 导入
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+ {{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}
+
+
+
+
+
+
+
+
+
+ 预览
+ 编辑
+ 删除
+ 同步
+ 生成代码
+
+
+
+
+
+
+
+
+ 复制
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/src/views/website/index.vue b/zhi-admin-ui/src/views/website/index.vue
new file mode 100644
index 0000000..02ab884
--- /dev/null
+++ b/zhi-admin-ui/src/views/website/index.vue
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ QQ
+ 微博
+ gitee
+
+
+
+ 修改
+
+
+
+
+
+
+
+
+
+ 是否展示
+
+
+
+ 是否展示
+
+
+
+ 是否展示
+
+
+ 修改
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+ 开启
+
+
+
+
+ 关闭
+ 开启
+
+
+
+
+ 关闭
+ 开启
+
+
+
+
+ 关闭
+ 开启
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+ 开启
+
+
+
+
+
+
+
+ 关闭
+ 开启
+
+
+
+ 修改
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin-ui/vue.config.js b/zhi-admin-ui/vue.config.js
new file mode 100644
index 0000000..209ac13
--- /dev/null
+++ b/zhi-admin-ui/vue.config.js
@@ -0,0 +1,136 @@
+'use strict'
+const path = require('path')
+
+function resolve(dir) {
+ return path.join(__dirname, dir)
+}
+
+const CompressionPlugin = require('compression-webpack-plugin')
+
+const name = process.env.VUE_APP_TITLE || 'zhi-water的博客' // 网页标题
+
+const port = process.env.port || process.env.npm_config_port || 81 // 端口
+
+// vue.config.js 配置说明
+//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
+// 这里只列一部分,具体配置参考文档
+module.exports = {
+ // 部署生产环境和开发环境下的URL。
+ // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
+ // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
+ publicPath: process.env.VUE_APP_CONTEXT_PATH,
+ // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
+ outputDir: 'dist',
+ // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
+ assetsDir: 'static',
+ // 是否开启eslint保存检测,有效值:ture | false | 'error'
+ lintOnSave: process.env.NODE_ENV === 'development',
+ // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
+ productionSourceMap: false,
+ // webpack-dev-server 相关配置
+ devServer: {
+ host: '0.0.0.0',
+ port: port,
+ open: true,
+ proxy: {
+ // detail: https://cli.vuejs.org/config/#devserver-proxy
+ [process.env.VUE_APP_BASE_API]: {
+ target: `http://127.0.0.1:8080`,
+ changeOrigin: true,
+ pathRewrite: {
+ ['^' + process.env.VUE_APP_BASE_API]: ''
+ }
+ }
+ },
+ disableHostCheck: true
+ },
+ css: {
+ loaderOptions: {
+ sass: {
+ sassOptions: { outputStyle: "expanded" }
+ }
+ }
+ },
+ configureWebpack: {
+ name: name,
+ resolve: {
+ alias: {
+ '@': resolve('src')
+ }
+ },
+ plugins: [
+ // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
+ new CompressionPlugin({
+ cache: false, // 不启用文件缓存
+ test: /\.(js|css|html)?$/i, // 压缩文件格式
+ filename: '[path].gz[query]', // 压缩后的文件名
+ algorithm: 'gzip', // 使用gzip压缩
+ minRatio: 0.8 // 压缩率小于1才会压缩
+ })
+ ],
+ },
+ chainWebpack(config) {
+ config.plugins.delete('preload') // TODO: need test
+ config.plugins.delete('prefetch') // TODO: need test
+
+ // set svg-sprite-loader
+ config.module
+ .rule('svg')
+ .exclude.add(resolve('src/assets/icons'))
+ .end()
+ config.module
+ .rule('icons')
+ .test(/\.svg$/)
+ .include.add(resolve('src/assets/icons'))
+ .end()
+ .use('svg-sprite-loader')
+ .loader('svg-sprite-loader')
+ .options({
+ symbolId: 'icon-[name]'
+ })
+ .end()
+
+ config
+ .when(process.env.NODE_ENV !== 'development',
+ config => {
+ config
+ .plugin('ScriptExtHtmlWebpackPlugin')
+ .after('html')
+ .use('script-ext-html-webpack-plugin', [{
+ // `runtime` must same as runtimeChunk name. default is `runtime`
+ inline: /runtime\..*\.js$/
+ }])
+ .end()
+ config
+ .optimization.splitChunks({
+ chunks: 'all',
+ cacheGroups: {
+ libs: {
+ name: 'chunk-libs',
+ test: /[\\/]node_modules[\\/]/,
+ priority: 10,
+ chunks: 'initial' // only package third parties that are initially dependent
+ },
+ elementUI: {
+ name: 'chunk-elementUI', // split elementUI into a single package
+ priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
+ test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
+ },
+ commons: {
+ name: 'chunk-commons',
+ test: resolve('src/components'), // can customize your rules
+ minChunks: 3, // minimum common number
+ priority: 5,
+ reuseExistingChunk: true
+ }
+ }
+ })
+ config.optimization.runtimeChunk('single'),
+ {
+ from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
+ to: './' //到根目录下
+ }
+ }
+ )
+ }
+}
diff --git a/zhi-admin/Dockerfile b/zhi-admin/Dockerfile
new file mode 100644
index 0000000..95335e3
--- /dev/null
+++ b/zhi-admin/Dockerfile
@@ -0,0 +1,23 @@
+FROM anapsix/alpine-java:8_server-jre_unlimited
+
+MAINTAINER Lion Li
+
+RUN mkdir -p /ruoyi/server/logs \
+ /ruoyi/server/temp \
+ /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/server
+
+ENV SERVER_PORT=8080
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/zhi-admin.jar ./app.jar
+
+ENTRYPOINT ["java", \
+ "-Djava.security.egd=file:/dev/./urandom", \
+ "-Dserver.port=${SERVER_PORT}", \
+ # 应用名称 如果想区分集群节点监控 改成不同的名称即可
+# "-Dskywalking.agent.service_name=ruoyi-server", \
+# "-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar", \
+ "-jar", "app.jar"]
diff --git a/zhi-admin/pom.xml b/zhi-admin/pom.xml
new file mode 100644
index 0000000..d028001
--- /dev/null
+++ b/zhi-admin/pom.xml
@@ -0,0 +1,157 @@
+
+
+
+ ruoyi-vue-plus
+ com.zhi
+ 4.4.0
+
+ 4.0.0
+ jar
+ zhi-admin
+
+
+ web服务入口
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ true
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+ com.oracle.database.jdbc
+ ojdbc8
+
+
+
+
+ org.postgresql
+ postgresql
+
+
+
+
+ com.microsoft.sqlserver
+ mssql-jdbc
+
+
+
+
+ com.zhi
+ zhi-framework
+
+
+
+ com.zhi
+ zhi-system
+
+
+
+ com.zhi
+ zhi-job
+
+
+
+ com.zhi
+ zhi-oss
+
+
+
+
+ com.zhi
+ zhi-generator
+
+
+
+
+ org.apache.commons
+ commons-pool2
+
+
+
+
+ com.xkcoding.justauth
+ justauth-spring-boot-starter
+
+
+
+
+ com.zhi
+ zhi-demo
+
+
+
+
+ com.zhi
+ zhi-myblog
+
+
+
+
+
+ com.zhi
+ zhi-common
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+ true
+
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.2.2
+
+ false
+ ${project.artifactId}
+
+
+
+
+
+
diff --git a/zhi-admin/src/main/java/com/zhi/RuoYiApplication.java b/zhi-admin/src/main/java/com/zhi/RuoYiApplication.java
new file mode 100644
index 0000000..6e17f47
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/RuoYiApplication.java
@@ -0,0 +1,25 @@
+package com.zhi;
+
+import cn.easyes.starter.register.EsMapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
+
+/**
+ * 启动程序
+ *
+ * @author ruoyi
+ */
+
+@SpringBootApplication
+@EsMapperScan("com.zhi.blog.easyesMapper")
+public class RuoYiApplication {
+ public static void main(String[] args) {
+ System.setProperty("spring.devtools.restart.enabled", "false");
+ SpringApplication application = new SpringApplication(RuoYiApplication.class);
+ application.setApplicationStartup(new BufferingApplicationStartup(2048));
+ application.run(args);
+ System.out.println("(♥◠‿◠)ノ゙ zhi-blog启动成功 ლ(´ڡ`ლ)゙");
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/RuoYiServletInitializer.java b/zhi-admin/src/main/java/com/zhi/RuoYiServletInitializer.java
new file mode 100644
index 0000000..fad455f
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/RuoYiServletInitializer.java
@@ -0,0 +1,18 @@
+package com.zhi;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web容器中进行部署
+ *
+ * @author ruoyi
+ */
+public class RuoYiServletInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(RuoYiApplication.class);
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/blogSearch/ArticleSearch.java b/zhi-admin/src/main/java/com/zhi/web/controller/blogSearch/ArticleSearch.java
new file mode 100644
index 0000000..96e59f0
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/blogSearch/ArticleSearch.java
@@ -0,0 +1,41 @@
+package com.zhi.web.controller.blogSearch;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.zhi.blog.dto.ArticleSearchDTO;
+import com.zhi.blog.dto.vo.ConditionVO;
+import com.zhi.common.core.domain.R;
+import com.zhi.web.controller.strategy.context.SearchStrategyContext;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author ftz-lover
+ * @version 1.0
+ * @date 2023/1/17 18:55
+ */
+
+@RestController
+public class ArticleSearch {
+
+ @Resource
+ private SearchStrategyContext searchStrategyContext;
+
+
+ /**
+ * 搜索文章
+ *
+ * @param condition 条件
+ * @return {@link R} 文章列表
+ */
+ @SaIgnore
+ @ApiOperation(value = "搜索文章")
+ @GetMapping("/articles/search")
+ public R> listArticlesBySearch(ConditionVO condition) {
+ return R.ok( searchStrategyContext.executeSearchStrategy(condition.getKeywords()));
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/common/CaptchaController.java b/zhi-admin/src/main/java/com/zhi/web/controller/common/CaptchaController.java
new file mode 100644
index 0000000..99c60b2
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/common/CaptchaController.java
@@ -0,0 +1,122 @@
+package com.zhi.web.controller.common;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.hutool.captcha.AbstractCaptcha;
+import cn.hutool.captcha.generator.CodeGenerator;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.RandomUtil;
+import com.zhi.common.constant.CacheConstants;
+import com.zhi.common.constant.Constants;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.enums.CaptchaType;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.common.utils.redis.RedisUtils;
+import com.zhi.common.utils.reflect.ReflectUtils;
+import com.zhi.common.utils.spring.SpringUtils;
+import com.zhi.framework.config.properties.CaptchaProperties;
+import com.zhi.sms.config.properties.SmsProperties;
+import com.zhi.sms.core.SmsTemplate;
+import com.zhi.sms.entity.SmsResult;
+import com.zhi.system.service.ISysConfigService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.constraints.NotBlank;
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 验证码操作处理
+ *
+ * @author Lion Li
+ */
+@SaIgnore
+@Slf4j
+@Validated
+@RequiredArgsConstructor
+@RestController
+public class CaptchaController {
+
+ private final CaptchaProperties captchaProperties;
+ private final SmsProperties smsProperties;
+ private final ISysConfigService configService;
+
+ /**
+ * 短信验证码
+ *
+ * @param phonenumber 用户手机号
+ */
+ @GetMapping("/captchaSms")
+ public R smsCaptcha(@NotBlank(message = "{user.phonenumber.not.blank}")
+ String phonenumber) {
+ if (!smsProperties.getEnabled()) {
+ return R.fail("当前系统没有开启短信功能!");
+ }
+ String key = CacheConstants.CAPTCHA_CODE_KEY + phonenumber;
+ String code = RandomUtil.randomNumbers(4);
+ RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
+ // 验证码模板id 自行处理 (查数据库或写死均可)
+ String templateId = "";
+ Map map = new HashMap<>(1);
+ map.put("code", code);
+ SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class);
+ SmsResult result = smsTemplate.send(phonenumber, templateId, map);
+ if (!result.isSuccess()) {
+ log.error("验证码短信发送异常 => {}", result);
+ return R.fail(result.getMessage());
+ }
+ return R.ok();
+ }
+
+ /**
+ * 生成验证码
+ */
+ @GetMapping("/captchaImage")
+ public R> getCode() {
+ Map ajax = new HashMap<>();
+ boolean captchaEnabled = configService.selectCaptchaEnabled();
+ ajax.put("captchaEnabled", captchaEnabled);
+ if (!captchaEnabled) {
+ return R.ok(ajax);
+ }
+ // 保存验证码信息
+ String uuid = IdUtil.simpleUUID();
+ String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
+ // 生成验证码
+ CaptchaType captchaType = captchaProperties.getType();
+ boolean isMath = CaptchaType.MATH == captchaType;
+ Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength();
+ CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length);
+ AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
+ captcha.setGenerator(codeGenerator);
+ captcha.createCode();
+ String code = isMath ? getCodeResult(captcha.getCode()) : captcha.getCode();
+ RedisUtils.setCacheObject(verifyKey, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
+ ajax.put("uuid", uuid);
+ ajax.put("img", captcha.getImageBase64());
+ return R.ok(ajax);
+ }
+
+ private String getCodeResult(String capStr) {
+ int numberLength = captchaProperties.getNumberLength();
+ int a = Convert.toInt(StringUtils.substring(capStr, 0, numberLength).trim());
+ char operator = capStr.charAt(numberLength);
+ int b = Convert.toInt(StringUtils.substring(capStr, numberLength + 1, numberLength + 1 + numberLength).trim());
+ switch (operator) {
+ case '*':
+ return Convert.toStr(a * b);
+ case '+':
+ return Convert.toStr(a + b);
+ case '-':
+ return Convert.toStr(a - b);
+ default:
+ return StringUtils.EMPTY;
+ }
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/consumer/EmailConsumer.java b/zhi-admin/src/main/java/com/zhi/web/controller/consumer/EmailConsumer.java
new file mode 100644
index 0000000..37d729a
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/consumer/EmailConsumer.java
@@ -0,0 +1,37 @@
+package com.zhi.web.controller.consumer;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.extra.mail.MailAccount;
+import cn.hutool.extra.mail.MailUtil;
+import com.alibaba.fastjson.JSON;
+import com.zhi.common.utils.email.MailUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.annotation.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import static com.zhi.common.constant.blog.MQPrefixConst.EMAIL_EXCHANGE;
+import static com.zhi.common.constant.blog.MQPrefixConst.EMAIL_QUEUE;
+import com.zhi.system.dto.EmailDTO;
+/**
+ * 通知邮箱
+ *
+ * @author water-zhi
+ * @date 2021/06/13
+ * @since 1.0.0
+ **/
+@Slf4j
+@Component
+@RabbitListener(bindings = @QueueBinding(
+ value = @Queue(EMAIL_QUEUE),
+ exchange = @Exchange(EMAIL_EXCHANGE)
+))
+public class EmailConsumer {
+
+ @RabbitHandler
+ public void process(byte[] data) {
+
+ EmailDTO emailDTO = JSON.parseObject(new String(data), EmailDTO.class);
+ log.info(emailDTO.toString());
+ MailUtils.sendText(emailDTO.getEmail(),emailDTO.getSubject(),emailDTO.getContent());
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/monitor/CacheController.java b/zhi-admin/src/main/java/com/zhi/web/controller/monitor/CacheController.java
new file mode 100644
index 0000000..e62a0da
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/monitor/CacheController.java
@@ -0,0 +1,169 @@
+package com.zhi.web.controller.monitor;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.collection.CollUtil;
+import com.zhi.common.constant.CacheConstants;
+import com.zhi.common.constant.CacheNames;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.utils.JsonUtils;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.common.utils.redis.CacheUtils;
+import com.zhi.common.utils.redis.RedisUtils;
+import com.zhi.system.domain.SysCache;
+import lombok.RequiredArgsConstructor;
+import org.redisson.spring.data.connection.RedissonConnectionFactory;
+import org.springframework.data.redis.connection.RedisConnection;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 缓存监控
+ *
+ * @author Lion Li
+ */
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/monitor/cache")
+public class CacheController {
+
+ private final RedissonConnectionFactory connectionFactory;
+
+ private final static List CACHES = new ArrayList<>();
+
+ static {
+ CACHES.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息"));
+ CACHES.add(new SysCache(CacheConstants.ONLINE_TOKEN_KEY, "在线用户"));
+ CACHES.add(new SysCache(CacheNames.SYS_CONFIG, "配置信息"));
+ CACHES.add(new SysCache(CacheNames.SYS_DICT, "数据字典"));
+ CACHES.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
+ CACHES.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
+ CACHES.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
+ CACHES.add(new SysCache(CacheNames.SYS_OSS_CONFIG, "OSS配置"));
+ CACHES.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
+ }
+
+ /**
+ * 获取缓存监控列表
+ */
+ @SaCheckPermission("monitor:cache:list")
+ @GetMapping()
+ public R> getInfo() throws Exception {
+ RedisConnection connection = connectionFactory.getConnection();
+ Properties info = connection.info();
+ Properties commandStats = connection.info("commandstats");
+ Long dbSize = connection.dbSize();
+
+ Map result = new HashMap<>(3);
+ result.put("info", info);
+ result.put("dbSize", dbSize);
+
+ List> pieList = new ArrayList<>();
+ if (commandStats != null) {
+ commandStats.stringPropertyNames().forEach(key -> {
+ Map data = new HashMap<>(2);
+ String property = commandStats.getProperty(key);
+ data.put("name", StringUtils.removeStart(key, "cmdstat_"));
+ data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
+ pieList.add(data);
+ });
+ }
+ result.put("commandStats", pieList);
+ return R.ok(result);
+ }
+
+ /**
+ * 获取缓存监控缓存名列表
+ */
+ @SaCheckPermission("monitor:cache:list")
+ @GetMapping("/getNames")
+ public R> cache() {
+ return R.ok(CACHES);
+ }
+
+ /**
+ * 获取缓存监控Key列表
+ *
+ * @param cacheName 缓存名
+ */
+ @SaCheckPermission("monitor:cache:list")
+ @GetMapping("/getKeys/{cacheName}")
+ public R> getCacheKeys(@PathVariable String cacheName) {
+ Collection cacheKeys = new HashSet<>(0);
+ if (isCacheNames(cacheName)) {
+ Set keys = CacheUtils.keys(cacheName);
+ if (CollUtil.isNotEmpty(keys)) {
+ cacheKeys = keys.stream().map(Object::toString).collect(Collectors.toList());
+ }
+ } else {
+ cacheKeys = RedisUtils.keys(cacheName + "*");
+ }
+ return R.ok(cacheKeys);
+ }
+
+ /**
+ * 获取缓存监控缓存值详情
+ *
+ * @param cacheName 缓存名
+ * @param cacheKey 缓存key
+ */
+ @SaCheckPermission("monitor:cache:list")
+ @GetMapping("/getValue/{cacheName}/{cacheKey}")
+ public R getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey) {
+ Object cacheValue;
+ if (isCacheNames(cacheName)) {
+ cacheValue = CacheUtils.get(cacheName, cacheKey);
+ } else {
+ cacheValue = RedisUtils.getCacheObject(cacheKey);
+ }
+ SysCache sysCache = new SysCache(cacheName, cacheKey, JsonUtils.toJsonString(cacheValue));
+ return R.ok(sysCache);
+ }
+
+ /**
+ * 清理缓存监控缓存名
+ *
+ * @param cacheName 缓存名
+ */
+ @SaCheckPermission("monitor:cache:list")
+ @DeleteMapping("/clearCacheName/{cacheName}")
+ public R clearCacheName(@PathVariable String cacheName) {
+ if (isCacheNames(cacheName)) {
+ CacheUtils.clear(cacheName);
+ } else {
+ RedisUtils.deleteKeys(cacheName + "*");
+ }
+ return R.ok();
+ }
+
+ /**
+ * 清理缓存监控Key
+ *
+ * @param cacheKey key名
+ */
+ @SaCheckPermission("monitor:cache:list")
+ @DeleteMapping("/clearCacheKey/{cacheName}/{cacheKey}")
+ public R clearCacheKey(@PathVariable String cacheName, @PathVariable String cacheKey) {
+ if (isCacheNames(cacheName)) {
+ CacheUtils.evict(cacheName, cacheKey);
+ } else {
+ RedisUtils.deleteObject(cacheKey);
+ }
+ return R.ok();
+ }
+
+ /**
+ * 清理全部缓存监控
+ */
+ @SaCheckPermission("monitor:cache:list")
+ @DeleteMapping("/clearCacheAll")
+ public R clearCacheAll() {
+ RedisUtils.deleteKeys("*");
+ return R.ok();
+ }
+
+ private boolean isCacheNames(String cacheName) {
+ return !StringUtils.contains(cacheName, ":");
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/monitor/SysLogininforController.java b/zhi-admin/src/main/java/com/zhi/web/controller/monitor/SysLogininforController.java
new file mode 100644
index 0000000..87259c7
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/monitor/SysLogininforController.java
@@ -0,0 +1,88 @@
+package com.zhi.web.controller.monitor;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.CacheConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.utils.poi.ExcelUtil;
+import com.zhi.common.utils.redis.RedisUtils;
+import com.zhi.system.domain.SysLogininfor;
+import com.zhi.system.service.ISysLogininforService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 系统访问记录
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/monitor/logininfor")
+public class SysLogininforController extends BaseController {
+
+ private final ISysLogininforService logininforService;
+
+ /**
+ * 获取系统访问记录列表
+ */
+ @SaCheckPermission("monitor:logininfor:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysLogininfor logininfor, PageQuery pageQuery) {
+ return logininforService.selectPageLogininforList(logininfor, pageQuery);
+ }
+
+ /**
+ * 导出系统访问记录列表
+ */
+ @Log(title = "登录日志", businessType = BusinessType.EXPORT)
+ @SaCheckPermission("monitor:logininfor:export")
+ @PostMapping("/export")
+ public void export(SysLogininfor logininfor, HttpServletResponse response) {
+ List list = logininforService.selectLogininforList(logininfor);
+ ExcelUtil.exportExcel(list, "登录日志", SysLogininfor.class, response);
+ }
+
+ /**
+ * 批量删除登录日志
+ * @param infoIds 日志ids
+ */
+ @SaCheckPermission("monitor:logininfor:remove")
+ @Log(title = "登录日志", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{infoIds}")
+ public R remove(@PathVariable Long[] infoIds) {
+ return toAjax(logininforService.deleteLogininforByIds(infoIds));
+ }
+
+ /**
+ * 清理系统访问记录
+ */
+ @SaCheckPermission("monitor:logininfor:remove")
+ @Log(title = "登录日志", businessType = BusinessType.CLEAN)
+ @DeleteMapping("/clean")
+ public R clean() {
+ logininforService.cleanLogininfor();
+ return R.ok();
+ }
+
+ @SaCheckPermission("monitor:logininfor:unlock")
+ @Log(title = "账户解锁", businessType = BusinessType.OTHER)
+ @GetMapping("/unlock/{userName}")
+ public R unlock(@PathVariable("userName") String userName) {
+ String loginName = CacheConstants.PWD_ERR_CNT_KEY + userName;
+ if (RedisUtils.hasKey(loginName)) {
+ RedisUtils.deleteObject(loginName);
+ }
+ return R.ok();
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/monitor/SysOperlogController.java b/zhi-admin/src/main/java/com/zhi/web/controller/monitor/SysOperlogController.java
new file mode 100644
index 0000000..efcef13
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/monitor/SysOperlogController.java
@@ -0,0 +1,74 @@
+package com.zhi.web.controller.monitor;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.utils.poi.ExcelUtil;
+import com.zhi.system.domain.SysOperLog;
+import com.zhi.system.service.ISysOperLogService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 操作日志记录
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/monitor/operlog")
+public class SysOperlogController extends BaseController {
+
+ private final ISysOperLogService operLogService;
+
+ /**
+ * 获取操作日志记录列表
+ */
+ @SaCheckPermission("monitor:operlog:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysOperLog operLog, PageQuery pageQuery) {
+ return operLogService.selectPageOperLogList(operLog, pageQuery);
+ }
+
+ /**
+ * 导出操作日志记录列表
+ */
+ @Log(title = "操作日志", businessType = BusinessType.EXPORT)
+ @SaCheckPermission("monitor:operlog:export")
+ @PostMapping("/export")
+ public void export(SysOperLog operLog, HttpServletResponse response) {
+ List list = operLogService.selectOperLogList(operLog);
+ ExcelUtil.exportExcel(list, "操作日志", SysOperLog.class, response);
+ }
+
+ /**
+ * 批量删除操作日志记录
+ * @param operIds 日志ids
+ */
+ @Log(title = "操作日志", businessType = BusinessType.DELETE)
+ @SaCheckPermission("monitor:operlog:remove")
+ @DeleteMapping("/{operIds}")
+ public R remove(@PathVariable Long[] operIds) {
+ return toAjax(operLogService.deleteOperLogByIds(operIds));
+ }
+
+ /**
+ * 清理操作日志记录
+ */
+ @Log(title = "操作日志", businessType = BusinessType.CLEAN)
+ @SaCheckPermission("monitor:operlog:remove")
+ @DeleteMapping("/clean")
+ public R clean() {
+ operLogService.cleanOperLog();
+ return R.ok();
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/monitor/SysUserOnlineController.java b/zhi-admin/src/main/java/com/zhi/web/controller/monitor/SysUserOnlineController.java
new file mode 100644
index 0000000..04d1bc3
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/monitor/SysUserOnlineController.java
@@ -0,0 +1,90 @@
+package com.zhi.web.controller.monitor;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.exception.NotLoginException;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.CacheConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.dto.UserOnlineDTO;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.utils.StreamUtils;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.common.utils.redis.RedisUtils;
+import com.zhi.system.domain.SysUserOnline;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 在线用户监控
+ *
+ * @author Lion Li
+ */
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/monitor/online")
+public class SysUserOnlineController extends BaseController {
+
+ /**
+ * 获取在线用户监控列表
+ *
+ * @param ipaddr IP地址
+ * @param userName 用户名
+ */
+ @SaCheckPermission("monitor:online:list")
+ @GetMapping("/list")
+ public TableDataInfo list(String ipaddr, String userName) {
+ // 获取所有未过期的 token
+ List keys = StpUtil.searchTokenValue("", 0, -1, false);
+ List userOnlineDTOList = new ArrayList<>();
+ for (String key : keys) {
+ String token = key.replace(CacheConstants.LOGIN_TOKEN_KEY, "");
+ // 如果已经过期则跳过
+ if (StpUtil.stpLogic.getTokenActivityTimeoutByToken(token) < -1) {
+ continue;
+ }
+ userOnlineDTOList.add(RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token));
+ }
+ if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
+ userOnlineDTOList = StreamUtils.filter(userOnlineDTOList, userOnline ->
+ StringUtils.equals(ipaddr, userOnline.getIpaddr()) &&
+ StringUtils.equals(userName, userOnline.getUserName())
+ );
+ } else if (StringUtils.isNotEmpty(ipaddr)) {
+ userOnlineDTOList = StreamUtils.filter(userOnlineDTOList, userOnline ->
+ StringUtils.equals(ipaddr, userOnline.getIpaddr())
+ );
+ } else if (StringUtils.isNotEmpty(userName)) {
+ userOnlineDTOList = StreamUtils.filter(userOnlineDTOList, userOnline ->
+ StringUtils.equals(userName, userOnline.getUserName())
+ );
+ }
+ Collections.reverse(userOnlineDTOList);
+ userOnlineDTOList.removeAll(Collections.singleton(null));
+ List userOnlineList = BeanUtil.copyToList(userOnlineDTOList, SysUserOnline.class);
+ return TableDataInfo.build(userOnlineList);
+ }
+
+ /**
+ * 强退用户
+ *
+ * @param tokenId token值
+ */
+ @SaCheckPermission("monitor:online:forceLogout")
+ @Log(title = "在线用户", businessType = BusinessType.FORCE)
+ @DeleteMapping("/{tokenId}")
+ public R forceLogout(@PathVariable String tokenId) {
+ try {
+ StpUtil.kickoutByTokenValue(tokenId);
+ } catch (NotLoginException ignored) {
+ }
+ return R.ok();
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/strategy/SearchStrategy.java b/zhi-admin/src/main/java/com/zhi/web/controller/strategy/SearchStrategy.java
new file mode 100644
index 0000000..1266065
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/strategy/SearchStrategy.java
@@ -0,0 +1,21 @@
+package com.zhi.web.controller.strategy;
+import com.zhi.blog.dto.ArticleSearchDTO;
+import java.util.List;
+
+/**
+ * 搜索策略
+ *
+ * @author yezhiqiu
+ * @date 2021/07/27
+ */
+public interface SearchStrategy {
+
+ /**
+ * 搜索文章
+ *
+ * @param keywords 关键字
+ * @return {@link List} 文章列表
+ */
+ List searchArticle(String keywords);
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/strategy/context/SearchStrategyContext.java b/zhi-admin/src/main/java/com/zhi/web/controller/strategy/context/SearchStrategyContext.java
new file mode 100644
index 0000000..07b3301
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/strategy/context/SearchStrategyContext.java
@@ -0,0 +1,41 @@
+package com.zhi.web.controller.strategy.context;
+
+import com.zhi.blog.dto.ArticleSearchDTO;
+import com.zhi.web.controller.strategy.SearchStrategy;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+import static com.zhi.common.enums.blog.SearchModeEnum.getStrategy;
+
+/**
+ * 搜索策略上下文
+ *
+ * @author yezhiqiu
+ * @date 2021/07/27
+ */
+@Service
+public class SearchStrategyContext {
+ /**
+ * 搜索模式
+ */
+ @Value("${search.mode}")
+ private String searchMode;
+
+ @Resource
+ private Map searchStrategyMap;
+
+ /**
+ * 执行搜索策略
+ *
+ * @param keywords 关键字
+ * @return {@link List} 搜索文章
+ */
+ public List executeSearchStrategy(String keywords) {
+ return searchStrategyMap.get(getStrategy(searchMode)).searchArticle(keywords);
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/strategy/impl/EsSearchStrategyImpl.java b/zhi-admin/src/main/java/com/zhi/web/controller/strategy/impl/EsSearchStrategyImpl.java
new file mode 100644
index 0000000..1016ed9
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/strategy/impl/EsSearchStrategyImpl.java
@@ -0,0 +1,80 @@
+//package com.zhi.web.controller.strategy.impl;
+//import cn.easyes.core.conditions.LambdaEsQueryWrapper;
+//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+//import com.zhi.blog.domain.es.EsArticle;
+//import com.zhi.blog.dto.ArticleSearchDTO;
+//import com.zhi.blog.easyesMapper.EsArticleMapper;
+//import com.zhi.web.controller.strategy.SearchStrategy;
+//import lombok.extern.log4j.Log4j2;
+//import org.springframework.stereotype.Service;
+//
+//import javax.annotation.Resource;
+//import java.util.ArrayList;
+//import java.util.List;
+//import java.util.stream.Collectors;
+//import static com.zhi.common.constant.blog.CommonConst.*;
+//
+///**
+// * es搜索策略实现
+// *
+// * @author yezhiqiu
+// * @date 2021/07/27
+// */
+//@Log4j2
+//@Service("esSearchStrategyImpl")
+//public class EsSearchStrategyImpl implements SearchStrategy {
+//
+//
+// @Resource
+// private EsArticleMapper esArticleMapper;
+//
+//
+// @Override
+// public List searchArticle(String keywords) {
+// if (StringUtils.isBlank(keywords)) {
+// return new ArrayList<>();
+// }
+// // 搜索文章
+// LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>();
+// wrapper
+// .eq(EsArticle::getStatus,ISTRUE)
+// .eq(EsArticle::getType,ISTRUE)
+// .and(i -> i
+// .like(EsArticle::getArticle_title, keywords)
+// .or()
+// .like(EsArticle::getArticle_content, keywords)
+// );
+//
+//
+// List articleList = esArticleMapper.selectList(wrapper);
+//
+//
+// // 高亮处理
+// return articleList.stream().map(item -> {
+// // 获取关键词第一次出现的位置
+// String articleContent = item.getArticle_content();
+// int index = item.getArticle_content().indexOf(keywords);
+// if (index != -1) {
+// // 获取关键词前面的文字
+// int preIndex = index > 25 ? index - 25 : 0;
+// String preText = item.getArticle_content().substring(preIndex, index);
+// // 获取关键词到后面的文字
+// int last = index + keywords.length();
+// int postLength = item.getArticle_content().length() - last;
+// int postIndex = postLength > 175 ? last + 175 : last + postLength;
+// String postText = item.getArticle_content().substring(index, postIndex);
+// // 文章内容高亮
+// articleContent = (preText + postText).replaceAll(keywords, PRE_TAG + keywords + POST_TAG);
+// }
+// // 文章标题高亮
+// String articleTitle = item.getArticle_title().replaceAll(keywords, PRE_TAG + keywords + POST_TAG);
+// return ArticleSearchDTO.builder()
+// .id(item.getId())
+// .articleTitle(articleTitle)
+// .articleContent(articleContent)
+// .build();
+// }).collect(Collectors.toList());
+//
+// }
+//
+//}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/strategy/impl/MySqlSearchStrategyImpl.java b/zhi-admin/src/main/java/com/zhi/web/controller/strategy/impl/MySqlSearchStrategyImpl.java
new file mode 100644
index 0000000..12082d7
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/strategy/impl/MySqlSearchStrategyImpl.java
@@ -0,0 +1,71 @@
+package com.zhi.web.controller.strategy.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.zhi.blog.domain.Article;
+import com.zhi.blog.dto.ArticleSearchDTO;
+import com.zhi.blog.mapper.ArticleMapper;
+import com.zhi.web.controller.strategy.SearchStrategy;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.zhi.common.constant.blog.CommonConst.*;
+import static com.zhi.common.enums.blog.ArticleStatusEnum.PUBLIC;
+
+/**
+ * mysql搜索策略
+ *
+ * @author yezhiqiu
+ * @date 2021/07/27
+ */
+@Service("mySqlSearchStrategyImpl")
+public class MySqlSearchStrategyImpl implements SearchStrategy {
+ @Resource
+ private ArticleMapper articleMapper;
+
+ @Override
+ public List searchArticle(String keywords) {
+ // 判空
+ if (StringUtils.isBlank(keywords)) {
+ return new ArrayList<>();
+ }
+ // 搜索文章
+ List articleList = articleMapper.selectList(new LambdaQueryWrapper()
+ .eq(Article::getIsDelete, FALSE)
+ .eq(Article::getStatus, PUBLIC.getStatus())
+ .and(i -> i.like(Article::getArticleTitle, keywords)
+ .or()
+ .like(Article::getArticleContent, keywords)));
+ // 高亮处理
+ return articleList.stream().map(item -> {
+ // 获取关键词第一次出现的位置
+ String articleContent = item.getArticleContent();
+ int index = item.getArticleContent().indexOf(keywords);
+ if (index != -1) {
+ // 获取关键词前面的文字
+ int preIndex = index > 25 ? index - 25 : 0;
+ String preText = item.getArticleContent().substring(preIndex, index);
+ // 获取关键词到后面的文字
+ int last = index + keywords.length();
+ int postLength = item.getArticleContent().length() - last;
+ int postIndex = postLength > 175 ? last + 175 : last + postLength;
+ String postText = item.getArticleContent().substring(index, postIndex);
+ // 文章内容高亮
+ articleContent = (preText + postText).replaceAll(keywords, PRE_TAG + keywords + POST_TAG);
+ }
+ // 文章标题高亮
+ String articleTitle = item.getArticleTitle().replaceAll(keywords, PRE_TAG + keywords + POST_TAG);
+ return ArticleSearchDTO.builder()
+ .id(item.getId())
+ .articleTitle(articleTitle)
+ .articleContent(articleContent)
+ .build();
+ }).collect(Collectors.toList());
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysConfigController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysConfigController.java
new file mode 100644
index 0000000..7b1404b
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysConfigController.java
@@ -0,0 +1,137 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.utils.poi.ExcelUtil;
+import com.zhi.system.domain.SysConfig;
+import com.zhi.system.service.ISysConfigService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 参数配置 信息操作处理
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/config")
+public class SysConfigController extends BaseController {
+
+ private final ISysConfigService configService;
+
+ /**
+ * 获取参数配置列表
+ */
+ @SaCheckPermission("system:config:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysConfig config, PageQuery pageQuery) {
+ return configService.selectPageConfigList(config, pageQuery);
+ }
+
+ /**
+ * 导出参数配置列表
+ */
+ @Log(title = "参数管理", businessType = BusinessType.EXPORT)
+ @SaCheckPermission("system:config:export")
+ @PostMapping("/export")
+ public void export(SysConfig config, HttpServletResponse response) {
+ List list = configService.selectConfigList(config);
+ ExcelUtil.exportExcel(list, "参数数据", SysConfig.class, response);
+ }
+
+ /**
+ * 根据参数编号获取详细信息
+ *
+ * @param configId 参数ID
+ */
+ @SaCheckPermission("system:config:query")
+ @GetMapping(value = "/{configId}")
+ public R getInfo(@PathVariable Long configId) {
+ return R.ok(configService.selectConfigById(configId));
+ }
+
+ /**
+ * 根据参数键名查询参数值
+ *
+ * @param configKey 参数Key
+ */
+ @GetMapping(value = "/configKey/{configKey}")
+ public R getConfigKey(@PathVariable String configKey) {
+ return R.ok(configService.selectConfigByKey(configKey));
+ }
+
+ /**
+ * 新增参数配置
+ */
+ @SaCheckPermission("system:config:add")
+ @Log(title = "参数管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody SysConfig config) {
+ if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
+ return R.fail("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
+ }
+ configService.insertConfig(config);
+ return R.ok();
+ }
+
+ /**
+ * 修改参数配置
+ */
+ @SaCheckPermission("system:config:edit")
+ @Log(title = "参数管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody SysConfig config) {
+ if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
+ return R.fail("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
+ }
+ configService.updateConfig(config);
+ return R.ok();
+ }
+
+ /**
+ * 根据参数键名修改参数配置
+ */
+ @SaCheckPermission("system:config:edit")
+ @Log(title = "参数管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/updateByKey")
+ public R updateByKey(@RequestBody SysConfig config) {
+ configService.updateConfig(config);
+ return R.ok();
+ }
+
+ /**
+ * 删除参数配置
+ *
+ * @param configIds 参数ID串
+ */
+ @SaCheckPermission("system:config:remove")
+ @Log(title = "参数管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{configIds}")
+ public R remove(@PathVariable Long[] configIds) {
+ configService.deleteConfigByIds(configIds);
+ return R.ok();
+ }
+
+ /**
+ * 刷新参数缓存
+ */
+ @SaCheckPermission("system:config:remove")
+ @Log(title = "参数管理", businessType = BusinessType.CLEAN)
+ @DeleteMapping("/refreshCache")
+ public R refreshCache() {
+ configService.resetConfigCache();
+ return R.ok();
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysDeptController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysDeptController.java
new file mode 100644
index 0000000..911d578
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysDeptController.java
@@ -0,0 +1,119 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.util.ArrayUtil;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.entity.SysDept;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.system.service.ISysDeptService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 部门信息
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/dept")
+public class SysDeptController extends BaseController {
+
+ private final ISysDeptService deptService;
+
+ /**
+ * 获取部门列表
+ */
+ @SaCheckPermission("system:dept:list")
+ @GetMapping("/list")
+ public R> list(SysDept dept) {
+ List depts = deptService.selectDeptList(dept);
+ return R.ok(depts);
+ }
+
+ /**
+ * 查询部门列表(排除节点)
+ *
+ * @param deptId 部门ID
+ */
+ @SaCheckPermission("system:dept:list")
+ @GetMapping("/list/exclude/{deptId}")
+ public R> excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) {
+ List depts = deptService.selectDeptList(new SysDept());
+ depts.removeIf(d -> d.getDeptId().equals(deptId)
+ || ArrayUtil.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""));
+ return R.ok(depts);
+ }
+
+ /**
+ * 根据部门编号获取详细信息
+ *
+ * @param deptId 部门ID
+ */
+ @SaCheckPermission("system:dept:query")
+ @GetMapping(value = "/{deptId}")
+ public R getInfo(@PathVariable Long deptId) {
+ deptService.checkDeptDataScope(deptId);
+ return R.ok(deptService.selectDeptById(deptId));
+ }
+
+ /**
+ * 新增部门
+ */
+ @SaCheckPermission("system:dept:add")
+ @Log(title = "部门管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody SysDept dept) {
+ if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
+ return R.fail("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+ }
+ return toAjax(deptService.insertDept(dept));
+ }
+
+ /**
+ * 修改部门
+ */
+ @SaCheckPermission("system:dept:edit")
+ @Log(title = "部门管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody SysDept dept) {
+ Long deptId = dept.getDeptId();
+ deptService.checkDeptDataScope(deptId);
+ if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
+ return R.fail("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+ } else if (dept.getParentId().equals(deptId)) {
+ return R.fail("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
+ } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
+ && deptService.selectNormalChildrenDeptById(deptId) > 0) {
+ return R.fail("该部门包含未停用的子部门!");
+ }
+ return toAjax(deptService.updateDept(dept));
+ }
+
+ /**
+ * 删除部门
+ *
+ * @param deptId 部门ID
+ */
+ @SaCheckPermission("system:dept:remove")
+ @Log(title = "部门管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{deptId}")
+ public R remove(@PathVariable Long deptId) {
+ if (deptService.hasChildByDeptId(deptId)) {
+ return R.warn("存在下级部门,不允许删除");
+ }
+ if (deptService.checkDeptExistUser(deptId)) {
+ return R.warn("部门存在用户,不允许删除");
+ }
+ deptService.checkDeptDataScope(deptId);
+ return toAjax(deptService.deleteDeptById(deptId));
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysDictDataController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysDictDataController.java
new file mode 100644
index 0000000..84d2e8b
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysDictDataController.java
@@ -0,0 +1,116 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.util.ObjectUtil;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.entity.SysDictData;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.utils.poi.ExcelUtil;
+import com.zhi.system.service.ISysDictDataService;
+import com.zhi.system.service.ISysDictTypeService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 数据字典信息
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/dict/data")
+public class SysDictDataController extends BaseController {
+
+ private final ISysDictDataService dictDataService;
+ private final ISysDictTypeService dictTypeService;
+
+ /**
+ * 查询字典数据列表
+ */
+ @SaCheckPermission("system:dict:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysDictData dictData, PageQuery pageQuery) {
+ return dictDataService.selectPageDictDataList(dictData, pageQuery);
+ }
+
+ /**
+ * 导出字典数据列表
+ */
+ @Log(title = "字典数据", businessType = BusinessType.EXPORT)
+ @SaCheckPermission("system:dict:export")
+ @PostMapping("/export")
+ public void export(SysDictData dictData, HttpServletResponse response) {
+ List list = dictDataService.selectDictDataList(dictData);
+ ExcelUtil.exportExcel(list, "字典数据", SysDictData.class, response);
+ }
+
+ /**
+ * 查询字典数据详细
+ *
+ * @param dictCode 字典code
+ */
+ @SaCheckPermission("system:dict:query")
+ @GetMapping(value = "/{dictCode}")
+ public R getInfo(@PathVariable Long dictCode) {
+ return R.ok(dictDataService.selectDictDataById(dictCode));
+ }
+
+ /**
+ * 根据字典类型查询字典数据信息
+ *
+ * @param dictType 字典类型
+ */
+ @GetMapping(value = "/type/{dictType}")
+ public R> dictType(@PathVariable String dictType) {
+ List data = dictTypeService.selectDictDataByType(dictType);
+ if (ObjectUtil.isNull(data)) {
+ data = new ArrayList<>();
+ }
+ return R.ok(data);
+ }
+
+ /**
+ * 新增字典类型
+ */
+ @SaCheckPermission("system:dict:add")
+ @Log(title = "字典数据", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody SysDictData dict) {
+ dictDataService.insertDictData(dict);
+ return R.ok();
+ }
+
+ /**
+ * 修改保存字典类型
+ */
+ @SaCheckPermission("system:dict:edit")
+ @Log(title = "字典数据", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody SysDictData dict) {
+ dictDataService.updateDictData(dict);
+ return R.ok();
+ }
+
+ /**
+ * 删除字典类型
+ *
+ * @param dictCodes 字典code串
+ */
+ @SaCheckPermission("system:dict:remove")
+ @Log(title = "字典类型", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{dictCodes}")
+ public R remove(@PathVariable Long[] dictCodes) {
+ dictDataService.deleteDictDataByIds(dictCodes);
+ return R.ok();
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysDictTypeController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysDictTypeController.java
new file mode 100644
index 0000000..7c9b5bc
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysDictTypeController.java
@@ -0,0 +1,125 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.entity.SysDictType;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.utils.poi.ExcelUtil;
+import com.zhi.system.service.ISysDictTypeService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 数据字典信息
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/dict/type")
+public class SysDictTypeController extends BaseController {
+
+ private final ISysDictTypeService dictTypeService;
+
+ /**
+ * 查询字典类型列表
+ */
+ @SaCheckPermission("system:dict:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysDictType dictType, PageQuery pageQuery) {
+ return dictTypeService.selectPageDictTypeList(dictType, pageQuery);
+ }
+
+ /**
+ * 导出字典类型列表
+ */
+ @Log(title = "字典类型", businessType = BusinessType.EXPORT)
+ @SaCheckPermission("system:dict:export")
+ @PostMapping("/export")
+ public void export(SysDictType dictType, HttpServletResponse response) {
+ List list = dictTypeService.selectDictTypeList(dictType);
+ ExcelUtil.exportExcel(list, "字典类型", SysDictType.class, response);
+ }
+
+ /**
+ * 查询字典类型详细
+ *
+ * @param dictId 字典ID
+ */
+ @SaCheckPermission("system:dict:query")
+ @GetMapping(value = "/{dictId}")
+ public R getInfo(@PathVariable Long dictId) {
+ return R.ok(dictTypeService.selectDictTypeById(dictId));
+ }
+
+ /**
+ * 新增字典类型
+ */
+ @SaCheckPermission("system:dict:add")
+ @Log(title = "字典类型", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody SysDictType dict) {
+ if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
+ return R.fail("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
+ }
+ dictTypeService.insertDictType(dict);
+ return R.ok();
+ }
+
+ /**
+ * 修改字典类型
+ */
+ @SaCheckPermission("system:dict:edit")
+ @Log(title = "字典类型", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody SysDictType dict) {
+ if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
+ return R.fail("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
+ }
+ dictTypeService.updateDictType(dict);
+ return R.ok();
+ }
+
+ /**
+ * 删除字典类型
+ *
+ * @param dictIds 字典ID串
+ */
+ @SaCheckPermission("system:dict:remove")
+ @Log(title = "字典类型", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{dictIds}")
+ public R remove(@PathVariable Long[] dictIds) {
+ dictTypeService.deleteDictTypeByIds(dictIds);
+ return R.ok();
+ }
+
+ /**
+ * 刷新字典缓存
+ */
+ @SaCheckPermission("system:dict:remove")
+ @Log(title = "字典类型", businessType = BusinessType.CLEAN)
+ @DeleteMapping("/refreshCache")
+ public R refreshCache() {
+ dictTypeService.resetDictCache();
+ return R.ok();
+ }
+
+ /**
+ * 获取字典选择框列表
+ */
+ @GetMapping("/optionselect")
+ public R> optionselect() {
+ List dictTypes = dictTypeService.selectDictTypeAll();
+ return R.ok(dictTypes);
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysIndexController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysIndexController.java
new file mode 100644
index 0000000..11187e6
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysIndexController.java
@@ -0,0 +1,32 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.zhi.common.config.RuoYiConfig;
+import com.zhi.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 首页
+ *
+ * @author Lion Li
+ */
+@RequiredArgsConstructor
+@RestController
+public class SysIndexController {
+
+ /**
+ * 系统基础配置
+ */
+ private final RuoYiConfig ruoyiConfig;
+
+ /**
+ * 访问首页,提示语
+ */
+ @SaIgnore
+ @GetMapping("/")
+ public String index() {
+ return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysLoginController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysLoginController.java
new file mode 100644
index 0000000..5b07b08
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysLoginController.java
@@ -0,0 +1,162 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.zhi.common.constant.Constants;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.entity.SysMenu;
+import com.zhi.common.core.domain.entity.SysUser;
+import com.zhi.common.core.domain.model.LoginBody;
+import com.zhi.common.core.domain.model.LoginUser;
+import com.zhi.common.core.domain.model.SmsLoginBody;
+import com.zhi.common.helper.LoginHelper;
+import com.zhi.system.domain.vo.RouterVo;
+import com.zhi.system.service.ISysMenuService;
+import com.zhi.system.service.ISysUserService;
+import com.zhi.system.service.SysLoginService;
+import com.zhi.system.service.SysPermissionService;
+import lombok.RequiredArgsConstructor;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotBlank;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 登录验证
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+public class SysLoginController {
+
+ private final SysLoginService loginService;
+ private final ISysMenuService menuService;
+ private final ISysUserService userService;
+
+ private final SysPermissionService permissionService;
+
+
+
+
+
+
+ /**
+ * 登录方法
+ *
+ * @param loginBody 登录信息
+ * @return 结果
+ */
+ @SaIgnore
+ @PostMapping("/login")
+ public R> login(@Validated @RequestBody LoginBody loginBody) {
+ Map ajax = new HashMap<>();
+ // 生成令牌
+ String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+ loginBody.getUuid());
+ ajax.put(Constants.TOKEN, token);
+ return R.ok(ajax);
+ }
+
+ /**
+ * 前台博客登录
+ */
+ @SaIgnore
+ @PostMapping("/blog/login")
+ public R blogLogin(String username,String password){
+ return R.ok(loginService.bloglogin(username,password));
+ }
+
+ /**
+ * 根据用户id返回用户信息
+ */
+ @SaIgnore
+ @PostMapping("/oauth/login")
+ public R oauthLogin(String userid){
+ return R.ok( loginService.getLoginUserById(Long.valueOf(userid)));
+ }
+
+ /**
+ * 短信登录(示例)
+ *
+ * @param smsLoginBody 登录信息
+ * @return 结果
+ */
+ @SaIgnore
+ @PostMapping("/smsLogin")
+ public R> smsLogin(@Validated @RequestBody SmsLoginBody smsLoginBody) {
+ Map ajax = new HashMap<>();
+ // 生成令牌
+ String token = loginService.smsLogin(smsLoginBody.getPhonenumber(), smsLoginBody.getSmsCode());
+ ajax.put(Constants.TOKEN, token);
+ return R.ok(ajax);
+ }
+
+ /**
+ * 小程序登录(示例)
+ *
+ * @param xcxCode 小程序code
+ * @return 结果
+ */
+ @SaIgnore
+ @PostMapping("/xcxLogin")
+ public R> xcxLogin(@NotBlank(message = "{xcx.code.not.blank}") String xcxCode) {
+ Map ajax = new HashMap<>();
+ // 生成令牌
+ String token = loginService.xcxLogin(xcxCode);
+ ajax.put(Constants.TOKEN, token);
+ return R.ok(ajax);
+ }
+
+ /**
+ * 退出登录
+ */
+ @SaIgnore
+ @PostMapping("/logout")
+ public R logout() {
+ loginService.logout();
+ return R.ok("退出成功");
+ }
+
+ /**
+ * 博客前台退出登录
+ */
+ @SaIgnore
+ @GetMapping("/blogLogout")
+ public R blogLogout(){
+ return R.ok("推出成功");
+ }
+
+ /**
+ * 获取用户信息
+ *
+ * @return 用户信息
+ */
+ @GetMapping("getInfo")
+ public R> getInfo() {
+ LoginUser loginUser = LoginHelper.getLoginUser();
+ SysUser user = userService.selectUserById(loginUser.getUserId());
+ Map ajax = new HashMap<>();
+ ajax.put("user", user);
+ ajax.put("roles", loginUser.getRolePermission());
+ ajax.put("permissions", loginUser.getMenuPermission());
+ return R.ok(ajax);
+ }
+
+ /**
+ * 获取路由信息
+ *
+ * @return 路由信息
+ */
+ @GetMapping("getRouters")
+ public R> getRouters() {
+ Long userId = LoginHelper.getUserId();
+ List menus = menuService.selectMenuTreeByUserId(userId);
+ return R.ok(menuService.buildMenus(menus));
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysMenuController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysMenuController.java
new file mode 100644
index 0000000..924e4da
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysMenuController.java
@@ -0,0 +1,127 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.lang.tree.Tree;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.entity.SysMenu;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.system.service.ISysMenuService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 菜单信息
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/menu")
+public class SysMenuController extends BaseController {
+
+ private final ISysMenuService menuService;
+
+ /**
+ * 获取菜单列表
+ */
+ @SaCheckPermission("system:menu:list")
+ @GetMapping("/list")
+ public R> list(SysMenu menu) {
+ List menus = menuService.selectMenuList(menu, getUserId());
+ return R.ok(menus);
+ }
+
+ /**
+ * 根据菜单编号获取详细信息
+ *
+ * @param menuId 菜单ID
+ */
+ @SaCheckPermission("system:menu:query")
+ @GetMapping(value = "/{menuId}")
+ public R getInfo(@PathVariable Long menuId) {
+ return R.ok(menuService.selectMenuById(menuId));
+ }
+
+ /**
+ * 获取菜单下拉树列表
+ */
+ @GetMapping("/treeselect")
+ public R>> treeselect(SysMenu menu) {
+ List menus = menuService.selectMenuList(menu, getUserId());
+ return R.ok(menuService.buildMenuTreeSelect(menus));
+ }
+
+ /**
+ * 加载对应角色菜单列表树
+ *
+ * @param roleId 角色ID
+ */
+ @GetMapping(value = "/roleMenuTreeselect/{roleId}")
+ public R> roleMenuTreeselect(@PathVariable("roleId") Long roleId) {
+ List menus = menuService.selectMenuList(getUserId());
+ Map ajax = new HashMap<>();
+ ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
+ ajax.put("menus", menuService.buildMenuTreeSelect(menus));
+ return R.ok(ajax);
+ }
+
+ /**
+ * 新增菜单
+ */
+ @SaCheckPermission("system:menu:add")
+ @Log(title = "菜单管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody SysMenu menu) {
+ if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) {
+ return R.fail("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+ } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
+ return R.fail("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+ }
+ return toAjax(menuService.insertMenu(menu));
+ }
+
+ /**
+ * 修改菜单
+ */
+ @SaCheckPermission("system:menu:edit")
+ @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody SysMenu menu) {
+ if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) {
+ return R.fail("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+ } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
+ return R.fail("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+ } else if (menu.getMenuId().equals(menu.getParentId())) {
+ return R.fail("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
+ }
+ return toAjax(menuService.updateMenu(menu));
+ }
+
+ /**
+ * 删除菜单
+ *
+ * @param menuId 菜单ID
+ */
+ @SaCheckPermission("system:menu:remove")
+ @Log(title = "菜单管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{menuId}")
+ public R remove(@PathVariable("menuId") Long menuId) {
+ if (menuService.hasChildByMenuId(menuId)) {
+ return R.warn("存在子菜单,不允许删除");
+ }
+ if (menuService.checkMenuExistRole(menuId)) {
+ return R.warn("菜单已分配,不允许删除");
+ }
+ return toAjax(menuService.deleteMenuById(menuId));
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysNoticeController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysNoticeController.java
new file mode 100644
index 0000000..32abcc2
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysNoticeController.java
@@ -0,0 +1,80 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.system.domain.SysNotice;
+import com.zhi.system.service.ISysNoticeService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 公告 信息操作处理
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/notice")
+public class SysNoticeController extends BaseController {
+
+ private final ISysNoticeService noticeService;
+
+ /**
+ * 获取通知公告列表
+ */
+ @SaCheckPermission("system:notice:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysNotice notice, PageQuery pageQuery) {
+ return noticeService.selectPageNoticeList(notice, pageQuery);
+ }
+
+ /**
+ * 根据通知公告编号获取详细信息
+ *
+ * @param noticeId 公告ID
+ */
+ @SaCheckPermission("system:notice:query")
+ @GetMapping(value = "/{noticeId}")
+ public R getInfo(@PathVariable Long noticeId) {
+ return R.ok(noticeService.selectNoticeById(noticeId));
+ }
+
+ /**
+ * 新增通知公告
+ */
+ @SaCheckPermission("system:notice:add")
+ @Log(title = "通知公告", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody SysNotice notice) {
+ return toAjax(noticeService.insertNotice(notice));
+ }
+
+ /**
+ * 修改通知公告
+ */
+ @SaCheckPermission("system:notice:edit")
+ @Log(title = "通知公告", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody SysNotice notice) {
+ return toAjax(noticeService.updateNotice(notice));
+ }
+
+ /**
+ * 删除通知公告
+ *
+ * @param noticeIds 公告ID串
+ */
+ @SaCheckPermission("system:notice:remove")
+ @Log(title = "通知公告", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{noticeIds}")
+ public R remove(@PathVariable Long[] noticeIds) {
+ return toAjax(noticeService.deleteNoticeByIds(noticeIds));
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysOssConfigController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysOssConfigController.java
new file mode 100644
index 0000000..0e8c585
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysOssConfigController.java
@@ -0,0 +1,105 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.annotation.RepeatSubmit;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.core.validate.AddGroup;
+import com.zhi.common.core.validate.EditGroup;
+import com.zhi.common.core.validate.QueryGroup;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.system.domain.bo.SysOssConfigBo;
+import com.zhi.system.domain.vo.SysOssConfigVo;
+import com.zhi.system.service.ISysOssConfigService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+
+/**
+ * 对象存储配置
+ *
+ * @author Lion Li
+ * @author 孤舟烟雨
+ * @date 2021-08-13
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/oss/config")
+public class SysOssConfigController extends BaseController {
+
+ private final ISysOssConfigService iSysOssConfigService;
+
+ /**
+ * 查询对象存储配置列表
+ */
+ @SaCheckPermission("system:oss:list")
+ @GetMapping("/list")
+ public TableDataInfo list(@Validated(QueryGroup.class) SysOssConfigBo bo, PageQuery pageQuery) {
+ return iSysOssConfigService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 获取对象存储配置详细信息
+ *
+ * @param ossConfigId OSS配置ID
+ */
+ @SaCheckPermission("system:oss:query")
+ @GetMapping("/{ossConfigId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long ossConfigId) {
+ return R.ok(iSysOssConfigService.queryById(ossConfigId));
+ }
+
+ /**
+ * 新增对象存储配置
+ */
+ @SaCheckPermission("system:oss:add")
+ @Log(title = "对象存储配置", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody SysOssConfigBo bo) {
+ return toAjax(iSysOssConfigService.insertByBo(bo));
+ }
+
+ /**
+ * 修改对象存储配置
+ */
+ @SaCheckPermission("system:oss:edit")
+ @Log(title = "对象存储配置", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody SysOssConfigBo bo) {
+ return toAjax(iSysOssConfigService.updateByBo(bo));
+ }
+
+ /**
+ * 删除对象存储配置
+ *
+ * @param ossConfigIds OSS配置ID串
+ */
+ @SaCheckPermission("system:oss:remove")
+ @Log(title = "对象存储配置", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ossConfigIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ossConfigIds) {
+ return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true));
+ }
+
+ /**
+ * 状态修改
+ */
+ @SaCheckPermission("system:oss:edit")
+ @Log(title = "对象存储状态修改", businessType = BusinessType.UPDATE)
+ @PutMapping("/changeStatus")
+ public R changeStatus(@RequestBody SysOssConfigBo bo) {
+ return toAjax(iSysOssConfigService.updateOssConfigStatus(bo));
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysOssController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysOssController.java
new file mode 100644
index 0000000..512969c
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysOssController.java
@@ -0,0 +1,110 @@
+package com.zhi.web.controller.system;
+
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.util.ObjectUtil;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.core.validate.QueryGroup;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.exception.ServiceException;
+import com.zhi.system.domain.bo.SysOssBo;
+import com.zhi.system.domain.vo.SysOssVo;
+import com.zhi.system.service.ISysOssService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotEmpty;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 文件上传 控制层
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/oss")
+public class SysOssController extends BaseController {
+
+ private final ISysOssService iSysOssService;
+
+ /**
+ * 查询OSS对象存储列表
+ */
+ @SaCheckPermission("system:oss:list")
+ @GetMapping("/list")
+ public TableDataInfo list(@Validated(QueryGroup.class) SysOssBo bo, PageQuery pageQuery) {
+ return iSysOssService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 查询OSS对象基于id串
+ *
+ * @param ossIds OSS对象ID串
+ */
+ @SaCheckPermission("system:oss:list")
+ @GetMapping("/listByIds/{ossIds}")
+ public R> listByIds(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ossIds) {
+ List list = iSysOssService.listByIds(Arrays.asList(ossIds));
+ return R.ok(list);
+ }
+
+ /**
+ * 上传OSS对象存储
+ *
+ * @param file 文件
+ */
+ @SaCheckPermission("system:oss:upload")
+ @Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
+ @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+ public R> upload(@RequestPart("file") MultipartFile file) {
+ if (ObjectUtil.isNull(file)) {
+ throw new ServiceException("上传文件不能为空");
+ }
+ SysOssVo oss = iSysOssService.upload(file);
+ Map map = new HashMap<>(2);
+ map.put("url", oss.getUrl());
+ map.put("fileName", oss.getOriginalName());
+ map.put("ossId", oss.getOssId().toString());
+ return R.ok(map);
+ }
+
+ /**
+ * 下载OSS对象
+ *
+ * @param ossId OSS对象ID
+ */
+ @SaCheckPermission("system:oss:download")
+ @GetMapping("/download/{ossId}")
+ public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException {
+ iSysOssService.download(ossId,response);
+ }
+
+ /**
+ * 删除OSS对象存储
+ *
+ * @param ossIds OSS对象ID串
+ */
+ @SaCheckPermission("system:oss:remove")
+ @Log(title = "OSS对象存储", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ossIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ossIds) {
+ return toAjax(iSysOssService.deleteWithValidByIds(Arrays.asList(ossIds), true));
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysPostController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysPostController.java
new file mode 100644
index 0000000..9506581
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysPostController.java
@@ -0,0 +1,115 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.utils.poi.ExcelUtil;
+import com.zhi.system.domain.SysPost;
+import com.zhi.system.service.ISysPostService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 岗位信息操作处理
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/post")
+public class SysPostController extends BaseController {
+
+ private final ISysPostService postService;
+
+ /**
+ * 获取岗位列表
+ */
+ @SaCheckPermission("system:post:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysPost post, PageQuery pageQuery) {
+ return postService.selectPagePostList(post, pageQuery);
+ }
+
+ /**
+ * 导出岗位列表
+ */
+ @Log(title = "岗位管理", businessType = BusinessType.EXPORT)
+ @SaCheckPermission("system:post:export")
+ @PostMapping("/export")
+ public void export(SysPost post, HttpServletResponse response) {
+ List list = postService.selectPostList(post);
+ ExcelUtil.exportExcel(list, "岗位数据", SysPost.class, response);
+ }
+
+ /**
+ * 根据岗位编号获取详细信息
+ *
+ * @param postId 岗位ID
+ */
+ @SaCheckPermission("system:post:query")
+ @GetMapping(value = "/{postId}")
+ public R getInfo(@PathVariable Long postId) {
+ return R.ok(postService.selectPostById(postId));
+ }
+
+ /**
+ * 新增岗位
+ */
+ @SaCheckPermission("system:post:add")
+ @Log(title = "岗位管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody SysPost post) {
+ if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) {
+ return R.fail("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+ } else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) {
+ return R.fail("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
+ }
+ return toAjax(postService.insertPost(post));
+ }
+
+ /**
+ * 修改岗位
+ */
+ @SaCheckPermission("system:post:edit")
+ @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody SysPost post) {
+ if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) {
+ return R.fail("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+ } else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) {
+ return R.fail("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
+ }
+ return toAjax(postService.updatePost(post));
+ }
+
+ /**
+ * 删除岗位
+ *
+ * @param postIds 岗位ID串
+ */
+ @SaCheckPermission("system:post:remove")
+ @Log(title = "岗位管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{postIds}")
+ public R remove(@PathVariable Long[] postIds) {
+ return toAjax(postService.deletePostByIds(postIds));
+ }
+
+ /**
+ * 获取岗位选择框列表
+ */
+ @GetMapping("/optionselect")
+ public R> optionselect() {
+ List posts = postService.selectPostAll();
+ return R.ok(posts);
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysProfileController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysProfileController.java
new file mode 100644
index 0000000..e23abdc
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysProfileController.java
@@ -0,0 +1,127 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.secure.BCrypt;
+import cn.hutool.core.io.FileUtil;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.entity.SysUser;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.helper.LoginHelper;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.common.utils.file.MimeTypeUtils;
+import com.zhi.system.domain.vo.SysOssVo;
+import com.zhi.system.service.ISysOssService;
+import com.zhi.system.service.ISysUserService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 个人信息 业务处理
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/user/profile")
+public class SysProfileController extends BaseController {
+
+ private final ISysUserService userService;
+ private final ISysOssService iSysOssService;
+
+ /**
+ * 个人信息
+ */
+ @GetMapping
+ public R> profile() {
+ SysUser user = userService.selectUserById(getUserId());
+ Map ajax = new HashMap<>();
+ ajax.put("user", user);
+ ajax.put("roleGroup", userService.selectUserRoleGroup(user.getUserName()));
+ ajax.put("postGroup", userService.selectUserPostGroup(user.getUserName()));
+ return R.ok(ajax);
+ }
+
+ /**
+ * 修改用户
+ */
+ @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R updateProfile(@RequestBody SysUser user) {
+ if (StringUtils.isNotEmpty(user.getPhonenumber())
+ && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
+ return R.fail("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+ }
+ if (StringUtils.isNotEmpty(user.getEmail())
+ && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
+ return R.fail("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+ }
+ user.setUserId(getUserId());
+ user.setUserName(null);
+ user.setPassword(null);
+ user.setAvatar(null);
+ user.setDeptId(null);
+ if (userService.updateUserProfile(user) > 0) {
+ return R.ok();
+ }
+ return R.fail("修改个人信息异常,请联系管理员");
+ }
+
+ /**
+ * 重置密码
+ *
+ * @param newPassword 旧密码
+ * @param oldPassword 新密码
+ */
+ @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+ @PutMapping("/updatePwd")
+ public R updatePwd(String oldPassword, String newPassword) {
+ SysUser user = userService.selectUserById(LoginHelper.getUserId());
+ String userName = user.getUserName();
+ String password = user.getPassword();
+ if (!BCrypt.checkpw(oldPassword, password)) {
+ return R.fail("修改密码失败,旧密码错误");
+ }
+ if (BCrypt.checkpw(newPassword, password)) {
+ return R.fail("新密码不能与旧密码相同");
+ }
+
+ if (userService.resetUserPwd(userName, BCrypt.hashpw(newPassword)) > 0) {
+ return R.ok();
+ }
+ return R.fail("修改密码异常,请联系管理员");
+ }
+
+ /**
+ * 头像上传
+ *
+ * @param avatarfile 用户头像
+ */
+ @Log(title = "用户头像", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/avatar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+ public R> avatar(@RequestPart("avatarfile") MultipartFile avatarfile) {
+ Map ajax = new HashMap<>();
+ if (!avatarfile.isEmpty()) {
+ String extension = FileUtil.extName(avatarfile.getOriginalFilename());
+ if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) {
+ return R.fail("文件格式不正确,请上传" + Arrays.toString(MimeTypeUtils.IMAGE_EXTENSION) + "格式");
+ }
+ SysOssVo oss = iSysOssService.upload(avatarfile);
+ String avatar = oss.getUrl();
+ if (userService.updateUserAvatar(getUsername(), avatar)) {
+ ajax.put("imgUrl", avatar);
+ return R.ok(ajax);
+ }
+ }
+ return R.fail("上传图片异常,请联系管理员");
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysRegisterController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysRegisterController.java
new file mode 100644
index 0000000..3ce454b
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysRegisterController.java
@@ -0,0 +1,113 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.alibaba.fastjson.JSON;
+import com.zhi.common.annotation.AccessLimit;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.model.RegisterBody;
+import com.zhi.common.exception.base.BaseException;
+import com.zhi.system.domain.vo.UserVO;
+import com.zhi.system.dto.EmailDTO;
+import com.zhi.system.service.ISysConfigService;
+import com.zhi.system.service.RedisService;
+import com.zhi.system.service.SysRegisterService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static com.zhi.common.constant.blog.MQPrefixConst.EMAIL_EXCHANGE;
+import static com.zhi.common.constant.blog.RedisPrefixConst.CODE_EXPIRE_TIME;
+import static com.zhi.common.constant.blog.RedisPrefixConst.USER_CODE_KEY;
+import static com.zhi.common.utils.blog.CommonUtils.checkEmail;
+import static com.zhi.common.utils.blog.CommonUtils.getRandomCode;
+
+/**
+ * 注册验证
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+public class SysRegisterController extends BaseController {
+
+ private final SysRegisterService registerService;
+ private final ISysConfigService configService;
+
+ @Resource
+ private RabbitTemplate rabbitTemplate;
+
+
+ @Resource
+ private RedisService redisService;
+
+ /**
+ * 用户注册
+ */
+ @SaIgnore
+ @PostMapping("/register")
+ public R register(@Validated @RequestBody RegisterBody user) {
+ if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) {
+ return R.fail("当前系统没有开启注册功能!");
+ }
+ registerService.register(user);
+ return R.ok();
+ }
+
+
+ /**
+ * 前台用户注册邮箱验证码检测
+ */
+ @SaIgnore
+ @AccessLimit(seconds = 60, maxCount = 1)
+ @ApiImplicitParam(name = "username", value = "用户名", required = true, dataType = "String")
+ @GetMapping("/users/code")
+ public R> sendCode(String email) {
+ // 校验邮箱是否合法
+ if (!checkEmail(email)) {
+ throw new BaseException("请输入正确邮箱");
+ }
+ // 生成六位随机验证码发送
+ String code = getRandomCode();
+ // 发送验证码
+ EmailDTO emailDTO = EmailDTO.builder()
+ .email(email)
+ .subject("验证码")
+ .content("您的验证码为 " + code + " 有效期15分钟,请不要告诉他人哦!")
+ .build();
+ rabbitTemplate.convertAndSend(EMAIL_EXCHANGE, "",new Message(JSON.toJSONBytes(emailDTO), new MessageProperties()));
+ // 将验证码存入redis,设置过期时间为15分钟
+ redisService.set(USER_CODE_KEY + email, code, CODE_EXPIRE_TIME);
+ return R.ok();
+ }
+
+
+ /**
+ * 前台用户注册
+ *
+ * @param user 用户信息
+ * @return {@link R<>}
+ */
+ @SaIgnore
+ @ApiOperation(value = "用户注册")
+ @PostMapping("/blog/register")
+ public R> register(@Valid @RequestBody UserVO user) {
+ registerService.blogregister(user);
+ return R.ok();
+ }
+
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysRoleController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysRoleController.java
new file mode 100644
index 0000000..8a53f25
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysRoleController.java
@@ -0,0 +1,237 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.util.ObjectUtil;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.entity.SysDept;
+import com.zhi.common.core.domain.entity.SysRole;
+import com.zhi.common.core.domain.entity.SysUser;
+import com.zhi.common.core.domain.model.LoginUser;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.helper.LoginHelper;
+import com.zhi.common.utils.poi.ExcelUtil;
+import com.zhi.system.domain.SysUserRole;
+import com.zhi.system.service.ISysDeptService;
+import com.zhi.system.service.ISysRoleService;
+import com.zhi.system.service.ISysUserService;
+import com.zhi.system.service.SysPermissionService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 角色信息
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/role")
+public class SysRoleController extends BaseController {
+
+ private final ISysRoleService roleService;
+ private final ISysUserService userService;
+ private final ISysDeptService deptService;
+ private final SysPermissionService permissionService;
+
+ /**
+ * 获取角色信息列表
+ */
+ @SaCheckPermission("system:role:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysRole role, PageQuery pageQuery) {
+ return roleService.selectPageRoleList(role, pageQuery);
+ }
+
+ /**
+ * 导出角色信息列表
+ */
+ @Log(title = "角色管理", businessType = BusinessType.EXPORT)
+ @SaCheckPermission("system:role:export")
+ @PostMapping("/export")
+ public void export(SysRole role, HttpServletResponse response) {
+ List list = roleService.selectRoleList(role);
+ ExcelUtil.exportExcel(list, "角色数据", SysRole.class, response);
+ }
+
+ /**
+ * 根据角色编号获取详细信息
+ *
+ * @param roleId 角色ID
+ */
+ @SaCheckPermission("system:role:query")
+ @GetMapping(value = "/{roleId}")
+ public R getInfo(@PathVariable Long roleId) {
+ roleService.checkRoleDataScope(roleId);
+ return R.ok(roleService.selectRoleById(roleId));
+ }
+
+ /**
+ * 新增角色
+ */
+ @SaCheckPermission("system:role:add")
+ @Log(title = "角色管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody SysRole role) {
+ if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) {
+ return R.fail("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
+ } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) {
+ return R.fail("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
+ }
+ return toAjax(roleService.insertRole(role));
+
+ }
+
+ /**
+ * 修改保存角色
+ */
+ @SaCheckPermission("system:role:edit")
+ @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody SysRole role) {
+ roleService.checkRoleAllowed(role);
+ roleService.checkRoleDataScope(role.getRoleId());
+ if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) {
+ return R.fail("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
+ } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) {
+ return R.fail("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
+ }
+
+ if (roleService.updateRole(role) > 0) {
+ // 更新缓存用户权限
+ LoginUser loginUser = getLoginUser();
+ SysUser sysUser = userService.selectUserById(loginUser.getUserId());
+ if (ObjectUtil.isNotNull(sysUser) && !sysUser.isAdmin()) {
+ loginUser.setMenuPermission(permissionService.getMenuPermission(sysUser));
+ LoginHelper.setLoginUser(loginUser);
+ }
+ return R.ok();
+ }
+ return R.fail("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
+ }
+
+ /**
+ * 修改保存数据权限
+ */
+ @SaCheckPermission("system:role:edit")
+ @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/dataScope")
+ public R dataScope(@RequestBody SysRole role) {
+ roleService.checkRoleAllowed(role);
+ roleService.checkRoleDataScope(role.getRoleId());
+ return toAjax(roleService.authDataScope(role));
+ }
+
+ /**
+ * 状态修改
+ */
+ @SaCheckPermission("system:role:edit")
+ @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/changeStatus")
+ public R changeStatus(@RequestBody SysRole role) {
+ roleService.checkRoleAllowed(role);
+ roleService.checkRoleDataScope(role.getRoleId());
+ return toAjax(roleService.updateRoleStatus(role));
+ }
+
+ /**
+ * 删除角色
+ *
+ * @param roleIds 角色ID串
+ */
+ @SaCheckPermission("system:role:remove")
+ @Log(title = "角色管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{roleIds}")
+ public R remove(@PathVariable Long[] roleIds) {
+ return toAjax(roleService.deleteRoleByIds(roleIds));
+ }
+
+ /**
+ * 获取角色选择框列表
+ */
+ @SaCheckPermission("system:role:query")
+ @GetMapping("/optionselect")
+ public R> optionselect() {
+ return R.ok(roleService.selectRoleAll());
+ }
+
+ /**
+ * 查询已分配用户角色列表
+ */
+ @SaCheckPermission("system:role:list")
+ @GetMapping("/authUser/allocatedList")
+ public TableDataInfo allocatedList(SysUser user, PageQuery pageQuery) {
+ return userService.selectAllocatedList(user, pageQuery);
+ }
+
+ /**
+ * 查询未分配用户角色列表
+ */
+ @SaCheckPermission("system:role:list")
+ @GetMapping("/authUser/unallocatedList")
+ public TableDataInfo unallocatedList(SysUser user, PageQuery pageQuery) {
+ return userService.selectUnallocatedList(user, pageQuery);
+ }
+
+ /**
+ * 取消授权用户
+ */
+ @SaCheckPermission("system:role:edit")
+ @Log(title = "角色管理", businessType = BusinessType.GRANT)
+ @PutMapping("/authUser/cancel")
+ public R cancelAuthUser(@RequestBody SysUserRole userRole) {
+ return toAjax(roleService.deleteAuthUser(userRole));
+ }
+
+ /**
+ * 批量取消授权用户
+ *
+ * @param roleId 角色ID
+ * @param userIds 用户ID串
+ */
+ @SaCheckPermission("system:role:edit")
+ @Log(title = "角色管理", businessType = BusinessType.GRANT)
+ @PutMapping("/authUser/cancelAll")
+ public R cancelAuthUserAll(Long roleId, Long[] userIds) {
+ return toAjax(roleService.deleteAuthUsers(roleId, userIds));
+ }
+
+ /**
+ * 批量选择用户授权
+ *
+ * @param roleId 角色ID
+ * @param userIds 用户ID串
+ */
+ @SaCheckPermission("system:role:edit")
+ @Log(title = "角色管理", businessType = BusinessType.GRANT)
+ @PutMapping("/authUser/selectAll")
+ public R selectAuthUserAll(Long roleId, Long[] userIds) {
+ roleService.checkRoleDataScope(roleId);
+ return toAjax(roleService.insertAuthUsers(roleId, userIds));
+ }
+
+ /**
+ * 获取对应角色部门树列表
+ *
+ * @param roleId 角色ID
+ */
+ @SaCheckPermission("system:role:list")
+ @GetMapping(value = "/deptTree/{roleId}")
+ public R> roleDeptTreeselect(@PathVariable("roleId") Long roleId) {
+ Map ajax = new HashMap<>();
+ ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
+ ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
+ return R.ok(ajax);
+ }
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysUserController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysUserController.java
new file mode 100644
index 0000000..00f22d2
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysUserController.java
@@ -0,0 +1,270 @@
+package com.zhi.web.controller.system;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.dev33.satoken.secure.BCrypt;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.zhi.common.annotation.Log;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.core.controller.BaseController;
+import com.zhi.common.core.domain.PageQuery;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.entity.SysDept;
+import com.zhi.common.core.domain.entity.SysRole;
+import com.zhi.common.core.domain.entity.SysUser;
+import com.zhi.common.core.page.TableDataInfo;
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.excel.ExcelResult;
+import com.zhi.common.helper.LoginHelper;
+import com.zhi.common.utils.StreamUtils;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.common.utils.poi.ExcelUtil;
+import com.zhi.system.domain.vo.SysUserExportVo;
+import com.zhi.system.domain.vo.SysUserImportVo;
+import com.zhi.system.domain.vo.UserInfoVO;
+import com.zhi.system.listener.SysUserImportListener;
+import com.zhi.system.service.ISysDeptService;
+import com.zhi.system.service.ISysPostService;
+import com.zhi.system.service.ISysRoleService;
+import com.zhi.system.service.ISysUserService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户信息
+ *
+ * @author Lion Li
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/user")
+public class SysUserController extends BaseController {
+
+ private final ISysUserService userService;
+ private final ISysRoleService roleService;
+ private final ISysPostService postService;
+ private final ISysDeptService deptService;
+
+
+ /**
+ * 博客前台用户修改信息
+ */
+ @SaIgnore
+ @PutMapping("/users/info")
+ public R BlogupdateUserInfo(@Valid @RequestBody UserInfoVO userInfoVO){
+ userService.updateBlogUserInfo(userInfoVO);
+ return R.ok();
+ }
+
+
+
+
+ /**
+ * 获取用户列表
+ */
+ @SaCheckPermission("system:user:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysUser user, PageQuery pageQuery) {
+ return userService.selectPageUserList(user, pageQuery);
+ }
+
+ /**
+ * 导出用户列表
+ */
+ @Log(title = "用户管理", businessType = BusinessType.EXPORT)
+ @SaCheckPermission("system:user:export")
+ @PostMapping("/export")
+ public void export(SysUser user, HttpServletResponse response) {
+ List list = userService.selectUserList(user);
+ List listVo = BeanUtil.copyToList(list, SysUserExportVo.class);
+ for (int i = 0; i < list.size(); i++) {
+ SysDept dept = list.get(i).getDept();
+ SysUserExportVo vo = listVo.get(i);
+ if (ObjectUtil.isNotEmpty(dept)) {
+ vo.setDeptName(dept.getDeptName());
+ vo.setLeader(dept.getLeader());
+ }
+ }
+ ExcelUtil.exportExcel(listVo, "用户数据", SysUserExportVo.class, response);
+ }
+
+ /**
+ * 导入数据
+ *
+ * @param file 导入文件
+ * @param updateSupport 是否更新已存在数据
+ */
+ @Log(title = "用户管理", businessType = BusinessType.IMPORT)
+ @SaCheckPermission("system:user:import")
+ @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+ public R importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
+ ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport));
+ return R.ok(result.getAnalysis());
+ }
+
+ /**
+ * 获取导入模板
+ */
+ @PostMapping("/importTemplate")
+ public void importTemplate(HttpServletResponse response) {
+ ExcelUtil.exportExcel(new ArrayList<>(), "用户数据", SysUserImportVo.class, response);
+ }
+
+ /**
+ * 根据用户编号获取详细信息
+ *
+ * @param userId 用户ID
+ */
+ @SaCheckPermission("system:user:query")
+ @GetMapping(value = {"/", "/{userId}"})
+ public R> getInfo(@PathVariable(value = "userId", required = false) Long userId) {
+ userService.checkUserDataScope(userId);
+ Map ajax = new HashMap<>();
+ List roles = roleService.selectRoleAll();
+ ajax.put("roles", LoginHelper.isAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isAdmin()));
+ ajax.put("posts", postService.selectPostAll());
+ if (ObjectUtil.isNotNull(userId)) {
+ SysUser sysUser = userService.selectUserById(userId);
+ ajax.put("user", sysUser);
+ ajax.put("postIds", postService.selectPostListByUserId(userId));
+ ajax.put("roleIds", StreamUtils.toList(sysUser.getRoles(), SysRole::getRoleId));
+ }
+ return R.ok(ajax);
+ }
+
+ /**
+ * 新增用户
+ */
+ @SaCheckPermission("system:user:add")
+ @Log(title = "用户管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public R add(@Validated @RequestBody SysUser user) {
+ if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
+ return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
+ } else if (StringUtils.isNotEmpty(user.getPhonenumber())
+ && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
+ return R.fail("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
+ } else if (StringUtils.isNotEmpty(user.getEmail())
+ && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
+ return R.fail("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+ }
+ user.setPassword(BCrypt.hashpw(user.getPassword()));
+ return toAjax(userService.insertUser(user));
+ }
+
+ /**
+ * 修改用户
+ */
+ @SaCheckPermission("system:user:edit")
+ @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public R edit(@Validated @RequestBody SysUser user) {
+ userService.checkUserAllowed(user);
+ userService.checkUserDataScope(user.getUserId());
+ if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
+ return R.fail("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
+ } else if (StringUtils.isNotEmpty(user.getPhonenumber())
+ && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
+ return R.fail("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+ } else if (StringUtils.isNotEmpty(user.getEmail())
+ && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
+ return R.fail("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+ }
+ return toAjax(userService.updateUser(user));
+ }
+
+ /**
+ * 删除用户
+ *
+ * @param userIds 角色ID串
+ */
+ @SaCheckPermission("system:user:remove")
+ @Log(title = "用户管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{userIds}")
+ public R remove(@PathVariable Long[] userIds) {
+ if (ArrayUtil.contains(userIds, getUserId())) {
+ return R.fail("当前用户不能删除");
+ }
+ return toAjax(userService.deleteUserByIds(userIds));
+ }
+
+ /**
+ * 重置密码
+ */
+ @SaCheckPermission("system:user:resetPwd")
+ @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/resetPwd")
+ public R resetPwd(@RequestBody SysUser user) {
+ userService.checkUserAllowed(user);
+ userService.checkUserDataScope(user.getUserId());
+ user.setPassword(BCrypt.hashpw(user.getPassword()));
+ return toAjax(userService.resetPwd(user));
+ }
+
+ /**
+ * 状态修改
+ */
+ @SaCheckPermission("system:user:edit")
+ @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/changeStatus")
+ public R changeStatus(@RequestBody SysUser user) {
+ userService.checkUserAllowed(user);
+ userService.checkUserDataScope(user.getUserId());
+ return toAjax(userService.updateUserStatus(user));
+ }
+
+ /**
+ * 根据用户编号获取授权角色
+ *
+ * @param userId 用户ID
+ */
+ @SaCheckPermission("system:user:query")
+ @GetMapping("/authRole/{userId}")
+ public R> authRole(@PathVariable Long userId) {
+ SysUser user = userService.selectUserById(userId);
+ List roles = roleService.selectRolesByUserId(userId);
+ Map ajax = new HashMap<>();
+ ajax.put("user", user);
+ ajax.put("roles", LoginHelper.isAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isAdmin()));
+ return R.ok(ajax);
+ }
+
+ /**
+ * 用户授权角色
+ *
+ * @param userId 用户Id
+ * @param roleIds 角色ID串
+ */
+ @SaCheckPermission("system:user:edit")
+ @Log(title = "用户管理", businessType = BusinessType.GRANT)
+ @PutMapping("/authRole")
+ public R insertAuthRole(Long userId, Long[] roleIds) {
+ userService.checkUserDataScope(userId);
+ userService.insertUserAuth(userId, roleIds);
+ return R.ok();
+ }
+
+ /**
+ * 获取部门树列表
+ */
+ @SaCheckPermission("system:user:list")
+ @GetMapping("/deptTree")
+ public R>> deptTree(SysDept dept) {
+ return R.ok(deptService.selectDeptTreeList(dept));
+ }
+
+}
diff --git a/zhi-admin/src/main/java/com/zhi/web/controller/system/SysUserOauthController.java b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysUserOauthController.java
new file mode 100644
index 0000000..1908521
--- /dev/null
+++ b/zhi-admin/src/main/java/com/zhi/web/controller/system/SysUserOauthController.java
@@ -0,0 +1,104 @@
+package com.zhi.web.controller.system;
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.xkcoding.justauth.AuthRequestFactory;
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.entity.SysUser;
+import com.zhi.common.core.domain.model.BlogLoginUser;
+import com.zhi.common.utils.BeanCopyUtils;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.system.service.SysLoginService;
+import com.zhi.system.service.SysRegisterService;
+import io.undertow.servlet.spec.HttpServletResponseImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.zhyd.oauth.config.AuthSource;
+import me.zhyd.oauth.model.AuthCallback;
+import me.zhyd.oauth.model.AuthResponse;
+import me.zhyd.oauth.request.AuthRequest;
+import me.zhyd.oauth.utils.AuthStateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 第三方登录
+ * @author ftz-lover
+ * @version 1.0
+ * @date 2023/1/20 15:05
+ */
+@SaIgnore
+@Slf4j
+@RestController
+@RequestMapping("/oauth")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class SysUserOauthController {
+
+
+ private final AuthRequestFactory factory;
+
+ private final SysRegisterService registerService;
+
+
+ private final SysLoginService loginService;
+
+
+ /**
+ * 登录类型
+ */
+ @GetMapping
+ public Map loginType() {
+ List oauthList = factory.oauthList();
+ return oauthList.stream().collect(Collectors
+ .toMap(oauth -> oauth.toLowerCase() + "登录",
+ oauth -> "http://127.0.0.1:8080/oauth/login/" + oauth.toLowerCase()));
+ }
+ /**
+ * 返回给前端回调地址
+ *
+ * @param response response
+ * @throws IOException
+ */
+
+ @GetMapping("/login/{type}")
+ public R login(@PathVariable String type, HttpServletResponse response) throws IOException {
+ AuthRequest authRequest = factory.get(type);
+ String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
+ return R.ok("请求成功",authorizeUrl);
+ }
+
+ /**
+ * 登录成功后的回调
+ *
+ * @return 登录成功后的信息
+ */
+ @SaIgnore
+ @RequestMapping("/{type}/callback")
+ public void login(@PathVariable String type, AuthCallback callback , HttpServletRequest request, HttpServletResponse httpServletResponse) throws IOException {
+ AuthRequest authRequest = factory.get(type);
+ AuthResponse authResponse = authRequest.login(callback);
+ String s = JSONUtil.toJsonStr(authResponse.getData());
+ SysUser sysUser = JSON.parseObject(s,SysUser.class);
+ BlogLoginUser blogLoginUser = registerService.OauthRegister(sysUser);
+ httpServletResponse.sendRedirect("http://localhost:8081/oauth/login/gitee?userid="+blogLoginUser.getId());
+
+ }
+
+
+
+
+
+
+
+
+}
diff --git a/zhi-admin/src/main/resources/application-dev.yml b/zhi-admin/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..1e8aa29
--- /dev/null
+++ b/zhi-admin/src/main/resources/application-dev.yml
@@ -0,0 +1,172 @@
+
+--- # xxl-job 配置
+xxl.job:
+ # 执行器开关
+ enabled: false
+ # 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
+ admin-addresses: http://localhost:9100/xxl-job-admin
+ # 执行器通讯TOKEN:非空时启用
+ access-token: xxl-job
+ executor:
+ # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册
+ appname: xxl-job-executor
+ # 执行器端口号 执行器从9101开始往后写
+ port: 9101
+ # 执行器注册:默认IP:PORT
+ address:
+ # 执行器IP:默认自动获取IP
+ ip:
+ # 执行器运行日志文件存储磁盘路径
+ logpath: ./logs/xxl-job
+ # 执行器日志文件保存天数:大于3生效
+ logretentiondays: 30
+
+--- # 数据源配置
+spring:
+ datasource:
+ type: com.zaxxer.hikari.HikariDataSource
+ # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
+ dynamic:
+ # 性能分析插件(有性能损耗 不建议生产环境使用)
+ p6spy: true
+ # 设置默认的数据源或者数据源组,默认值即为 master
+ primary: master
+ # 严格模式 匹配不到数据源则报错
+ strict: true
+ datasource:
+ # 主库数据源
+ master:
+ type: ${spring.datasource.type}
+ driverClassName: com.mysql.cj.jdbc.Driver
+ # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
+ # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
+ url: jdbc:mysql://localhost:3306/ry-vue-blog?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+ username: root
+ password: root
+ # 从库数据源
+# slave:
+# lazy: true
+# type: ${spring.datasource.type}
+# driverClassName: com.mysql.cj.jdbc.Driver
+# url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+# username:
+# password:
+# oracle:
+# type: ${spring.datasource.type}
+# driverClassName: oracle.jdbc.OracleDriver
+# url: jdbc:oracle:thin:@//localhost:1521/XE
+# username: ROOT
+# password: root
+# hikari:
+# connectionTestQuery: SELECT 1 FROM DUAL
+# postgres:
+# type: ${spring.datasource.type}
+# driverClassName: org.postgresql.Driver
+# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
+# username: root
+# password: root
+# sqlserver:
+# type: ${spring.datasource.type}
+# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
+# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
+# username: SA
+# password: root
+ hikari:
+ # 最大连接池数量
+ maxPoolSize: 20
+ # 最小空闲线程数量
+ minIdle: 10
+ # 配置获取连接等待超时的时间
+ connectionTimeout: 10000
+ # 校验超时时间
+ validationTimeout: 5000
+ # 空闲连接存活最大时间,默认10分钟
+ idleTimeout: 60000
+ # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
+ maxLifetime: 900000
+ # 连接测试query(配置检测连接是否有效)
+ connectionTestQuery: SELECT 1
+
+--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
+spring:
+ redis:
+ # 地址
+ host: localhost
+ # 端口,默认为6379
+ port: 6379
+ # 数据库索引
+ database: 0
+ # 密码(如没有密码请注释掉)
+ # password:
+ # 连接超时时间
+ timeout: 10s
+ # 是否开启ssl
+ ssl: false
+ # mq配置
+ rabbitmq:
+ host: 127.0.0.1
+ port: 5672
+ username: guest
+ password: guest
+ listener:
+ simple:
+ retry:
+ enabled: true
+ max-attempts: 3 #最大重试次数
+ initial-interval: 3000 #重试间隔时间(单位毫秒)
+
+redisson:
+ # redis key前缀
+ keyPrefix:
+ # 线程池数量
+ threads: 4
+ # Netty线程池数量
+ nettyThreads: 8
+ # 单节点配置
+ singleServerConfig:
+ # 客户端名称
+ clientName: ${ruoyi.name}
+ # 最小空闲连接数
+ connectionMinimumIdleSize: 8
+ # 连接池大小
+ connectionPoolSize: 32
+ # 连接空闲超时,单位:毫秒
+ idleConnectionTimeout: 10000
+ # 命令等待超时,单位:毫秒
+ timeout: 3000
+ # 发布和订阅连接池大小
+ subscriptionConnectionPoolSize: 50
+
+--- # mail 邮件发送
+mail:
+ enabled: true
+ host: smtp.163.com
+ port: 465
+ # 是否需要用户名密码验证
+ auth: true
+ # 发送方,遵循RFC-822标准
+ from: 18835400919@163.com
+ # 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
+ user: 18835400919@163.com
+ # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
+ pass: xxxx
+ # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
+ starttlsEnable: true
+ # 使用SSL安全连接
+ sslEnable: true
+ # SMTP超时时长,单位毫秒,缺省值不超时
+ timeout: 0
+ # Socket连接超时值,单位毫秒,缺省值不超时
+ connectionTimeout: 0
+
+--- # sms 短信
+sms:
+ enabled: false
+ # 阿里云 dysmsapi.aliyuncs.com
+ # 腾讯云 sms.tencentcloudapi.com
+ endpoint: "dysmsapi.aliyuncs.com"
+ accessKeyId: xxxxxxx
+ accessKeySecret: xxxxxx
+ signName: 测试
+ # 腾讯专用
+ sdkAppId:
diff --git a/zhi-admin/src/main/resources/application-prod.yml b/zhi-admin/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..bd55e65
--- /dev/null
+++ b/zhi-admin/src/main/resources/application-prod.yml
@@ -0,0 +1,174 @@
+--- # 临时文件存储位置 避免临时文件被系统清理报错
+spring.servlet.multipart.location: /ruoyi/server/temp
+--- # xxl-job 配置
+xxl.job:
+ # 执行器开关
+ enabled: false
+ # 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
+ admin-addresses: http://xxxx/xxl-job-admin
+ # 执行器通讯TOKEN:非空时启用
+ access-token: xxl-job
+ executor:
+ # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册
+ appname: xxl-job-executor
+ # 执行器端口号 执行器从9101开始往后写
+ port: 9101
+ # 执行器注册:默认IP:PORT
+ address:
+ # 执行器IP:默认自动获取IP
+ ip:
+ # 执行器运行日志文件存储磁盘路径
+ logpath: ./logs/xxl-job
+ # 执行器日志文件保存天数:大于3生效
+ logretentiondays: 30
+
+--- # 数据源配置
+spring:
+ datasource:
+ type: com.zaxxer.hikari.HikariDataSource
+ # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
+ dynamic:
+ # 性能分析插件(有性能损耗 不建议生产环境使用)
+ p6spy: false
+ # 设置默认的数据源或者数据源组,默认值即为 master
+ primary: master
+ # 严格模式 匹配不到数据源则报错
+ strict: true
+ datasource:
+ # 主库数据源
+ master:
+ type: ${spring.datasource.type}
+ driverClassName: com.mysql.cj.jdbc.Driver
+ # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
+ # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
+ url: jdbc:mysql://xxxx:3306/ry-vue-blog?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+ username: root
+ password: root
+ # 从库数据源
+# slave:
+# lazy: true
+# type: ${spring.datasource.type}
+# driverClassName: com.mysql.cj.jdbc.Driver
+# url: jdbc:mysql://8.130.45.202:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+# username:
+# password:
+# oracle:
+# type: ${spring.datasource.type}
+# driverClassName: oracle.jdbc.OracleDriver
+# url: jdbc:oracle:thin:@//localhost:1521/XE
+# username: ROOT
+# password: root
+# hikari:
+# connectionTestQuery: SELECT 1 FROM DUAL
+# postgres:
+# type: ${spring.datasource.type}
+# driverClassName: org.postgresql.Driver
+# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
+# username: root
+# password: root
+# sqlserver:
+# type: ${spring.datasource.type}
+# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
+# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
+# username: SA
+# password: root
+ hikari:
+ # 最大连接池数量
+ maxPoolSize: 20
+ # 最小空闲线程数量
+ minIdle: 10
+ # 配置获取连接等待超时的时间
+ connectionTimeout: 10000
+ # 校验超时时间
+ validationTimeout: 5000
+ # 空闲连接存活最大时间,默认10分钟
+ idleTimeout: 60000
+ # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
+ maxLifetime: 900000
+ # 连接测试query(配置检测连接是否有效)
+ connectionTestQuery: SELECT 1
+
+--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
+spring:
+ redis:
+ # 地址
+ host: xxxx
+ # 端口,默认为6379
+ port: 6379
+ # 数据库索引
+ database: 0
+ # 密码(如没有密码请注释掉)
+ password: redis
+ # 连接超时时间
+ timeout: 10s
+ # 是否开启ssl
+ ssl: false
+ # mq配置
+ rabbitmq:
+ host: xxxx
+ port: 5672
+ username: guest
+ password: guest
+ listener:
+ simple:
+ retry:
+ enabled: true
+ max-attempts: 3 #最大重试次数
+ initial-interval: 3000 #重试间隔时间(单位毫秒)
+
+redisson:
+ # redis key前缀
+ keyPrefix:
+ # 线程池数量
+ threads: 16
+ # Netty线程池数量
+ nettyThreads: 32
+ # 单节点配置
+ singleServerConfig:
+ # 客户端名称
+ clientName: ${ruoyi.name}
+ # 最小空闲连接数
+ connectionMinimumIdleSize: 32
+ # 连接池大小
+ connectionPoolSize: 64
+ # 连接空闲超时,单位:毫秒
+ idleConnectionTimeout: 10000
+ # 命令等待超时,单位:毫秒
+ timeout: 3000
+ # 发布和订阅连接池大小
+ subscriptionConnectionPoolSize: 50
+
+--- # mail 邮件发送
+mail:
+ enabled: true
+ host: smtp.163.com
+ port: 465
+ # 是否需要用户名密码验证
+ auth: true
+ # 发送方,遵循RFC-822标准
+ from: 18835400919@163.com
+ # 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
+ user: 18835400919@163.com
+ # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
+ pass: xxxx
+ # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
+ starttlsEnable: true
+ # 使用SSL安全连接
+ sslEnable: true
+ # SMTP超时时长,单位毫秒,缺省值不超时
+ timeout: 0
+ # Socket连接超时值,单位毫秒,缺省值不超时
+ connectionTimeout: 0
+
+
+--- # sms 短信
+sms:
+ enabled: false
+ # 阿里云 dysmsapi.aliyuncs.com
+ # 腾讯云 sms.tencentcloudapi.com
+ endpoint: "dysmsapi.aliyuncs.com"
+ accessKeyId: xxxxxxx
+ accessKeySecret: xxxxxx
+ signName: 测试
+ # 腾讯专用
+ sdkAppId:
diff --git a/zhi-admin/src/main/resources/application.yml b/zhi-admin/src/main/resources/application.yml
new file mode 100644
index 0000000..1152069
--- /dev/null
+++ b/zhi-admin/src/main/resources/application.yml
@@ -0,0 +1,406 @@
+# 项目相关配置
+ruoyi:
+ # 名称
+ name: RuoYi-Vue-Plus
+ # 版本
+ version: ${zhi-vue-plus.version}
+ # 版权年份
+ copyrightYear: 2022
+ # 实例演示开关
+ demoEnabled: true
+ # 获取ip地址开关
+ addressEnabled: true
+ # 缓存懒加载
+ cacheLazy: false
+
+captcha:
+ # 页面 <参数设置> 可开启关闭 验证码校验
+ # 验证码类型 math 数组计算 char 字符验证
+ type: MATH
+ # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
+ category: CIRCLE
+ # 数字验证码位数
+ numberLength: 1
+ # 字符验证码长度
+ charLength: 4
+
+# 开发环境配置
+server:
+ # 服务器的HTTP端口,默认为8080
+ port: 8080
+ servlet:
+ # 应用的访问路径
+ context-path: /
+ # undertow 配置
+ undertow:
+ # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的
+ max-http-post-size: -1
+ # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
+ # 每块buffer的空间大小,越小的空间被利用越充分
+ buffer-size: 512
+ # 是否分配的直接内存
+ direct-buffers: true
+ threads:
+ # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
+ io: 8
+ # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
+ worker: 256
+
+# 日志配置
+logging:
+ level:
+ com.zhi: @logging.level@
+ org.springframework: warn
+ config: classpath:logback.xml
+
+# 用户配置
+user:
+ password:
+ # 密码最大错误次数
+ maxRetryCount: 5
+ # 密码锁定时间(默认10分钟)
+ lockTime: 10
+
+# Spring配置
+spring:
+ application:
+ name: ${ruoyi.name}
+ # 资源信息
+ messages:
+ # 国际化资源文件路径
+ basename: i18n/messages
+ profiles:
+ active: @profiles.active@
+ # 文件上传
+ servlet:
+ multipart:
+ # 单个文件大小
+ max-file-size: 10MB
+ # 设置总上传的文件大小
+ max-request-size: 20MB
+ # 服务模块
+ devtools:
+ restart:
+ # 热部署开关
+ enabled: true
+ jackson:
+ # 日期格式化
+ date-format: yyyy-MM-dd HH:mm:ss
+ serialization:
+ # 格式化输出
+ indent_output: false
+ # 忽略无法转换的对象
+ fail_on_empty_beans: false
+ deserialization:
+ # 允许对象忽略json中不存在的属性
+ fail_on_unknown_properties: false
+
+ # es配置 若搜索模式为mysql可删除
+ # 邮箱配置 在dev环境mail中配置邮箱信息,这里先注释!
+# mail:
+# host: smtp.qq.com
+# username: 2831826106@qq.com
+# password: xxxxxxxx
+# default-encoding: UTF-8
+# port: 587
+# properties:
+# mail:
+# smtp:
+# auth: true
+# socketFactory:
+# class: javax.net.ssl.SSLSocketFactory
+management:
+ health:
+ elasticsearch:
+ enabled: false
+
+
+# 搜索模式 可选 elasticsearch或mysql
+search:
+ mode: mysql
+
+easy-es:
+ enable: false # 是否开启EE自动配置 true同时需要取消注释EsSearchStrategyImpl这个类
+ address : 127.0.0.1:9200 #填你的es连接地址
+ # username: 有设置才填写,非必须
+ # password: 有设置才填写,非必须
+ db-config:
+ map-underscore-to-camel-case: false # 是否开启下划线转驼峰 默认为false
+
+
+# Sa-Token配置
+sa-token:
+ # token名称 (同时也是cookie名称)
+ token-name: Authorization
+ # token有效期 设为一天 (必定过期) 单位: 秒
+ timeout: 86400
+ # token临时有效期 (指定时间无操作就过期) 单位: 秒
+ activity-timeout: 1800
+ # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
+ is-concurrent: true
+ # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
+ is-share: false
+ # 是否尝试从header里读取token
+ is-read-header: true
+ # 是否尝试从cookie里读取token
+ is-read-cookie: false
+ # token前缀
+ token-prefix: "Bearer"
+ # jwt秘钥
+ jwt-secret-key: abcdefghijklmnopqrstuvwxyz
+
+# security配置
+security:
+ # 排除路径
+ excludes:
+ # 静态资源
+ - /*.html
+ - /**/*.html
+ - /**/*.css
+ - /**/*.js
+ # swagger 文档配置
+ - /favicon.ico
+ - /*/api-docs
+ - /*/api-docs/**
+ - /websocket/**
+ anonymous:
+ # WebSocket
+ - /websocket/**
+
+
+
+
+# MyBatisPlus配置
+# https://baomidou.com/config/
+mybatis-plus:
+ # 不支持多包, 如有需要可在注解配置 或 提升扫包等级
+ # 例如 com.**.**.mapper
+ mapperPackage: com.zhi.**.mapper
+ # 对应的 XML 文件位置
+ mapperLocations: classpath*:mapper/**/*Mapper.xml
+ # 实体扫描,多个package用逗号或者分号分隔
+ typeAliasesPackage: com.zhi.**.domain
+ # 启动时是否检查 MyBatis XML 文件的存在,默认不检查
+ checkConfigLocation: false
+ configuration:
+ # 自动驼峰命名规则(camel case)映射
+ mapUnderscoreToCamelCase: true
+ # MyBatis 自动映射策略
+ # NONE:不启用 PARTIAL:只对非嵌套 resultMap 自动映射 FULL:对所有 resultMap 自动映射
+ autoMappingBehavior: PARTIAL
+ # MyBatis 自动映射时未知列或未知属性处理策
+ # NONE:不做处理 WARNING:打印相关警告 FAILING:抛出异常和详细信息
+ autoMappingUnknownColumnBehavior: NONE
+ # 更详细的日志输出 会有性能损耗 org.apache.ibatis.logging.stdout.StdOutImpl
+ # 关闭日志记录 (可单纯使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
+ # 默认日志输出 org.apache.ibatis.logging.slf4j.Slf4jImpl
+ logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl
+ global-config:
+ # 是否打印 Logo banner
+ banner: true
+ dbConfig:
+ # 主键类型
+ # AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
+ idType: ASSIGN_ID
+ # 逻辑已删除值
+ logicDeleteValue: 2
+ # 逻辑未删除值
+ logicNotDeleteValue: 0
+ # 字段验证策略之 insert,在 insert 的时候的字段验证策略
+ # IGNORED 忽略 NOT_NULL 非NULL NOT_EMPTY 非空 DEFAULT 默认 NEVER 不加入 SQL
+ insertStrategy: NOT_NULL
+ # 字段验证策略之 update,在 update 的时候的字段验证策略
+ updateStrategy: NOT_NULL
+ # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
+ where-strategy: NOT_NULL
+
+# Swagger配置
+swagger:
+ # 是否开启swagger
+ enabled: true
+ info:
+ # 标题
+ title: '标题:${ruoyi.name}后台管理系统_接口文档'
+ # 描述
+ description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...'
+ # 版本
+ version: '版本号: ${zhi-vue-plus.version}'
+ # 作者信息
+ contact:
+ name: water-zhi
+ email: 2831826106@qq.com
+ url: https://gitee.com/JavaLionLi/RuoYi-Vue-Plus
+ components:
+ # 鉴权方式配置
+ security-schemes:
+ apiKey:
+ type: APIKEY
+ in: HEADER
+ name: ${sa-token.token-name}
+
+springdoc:
+ #这里定义了两个分组,可定义多个,也可以不定义
+ group-configs:
+ - group: 1.演示模块
+ packages-to-scan: com.zhi.demo
+ - group: 2.系统模块
+ packages-to-scan: com.zhi.web
+ - group: 3.代码生成模块
+ packages-to-scan: com.zhi.generator
+
+# 防止XSS攻击
+xss:
+ # 过滤开关
+ enabled: true
+ # 排除链接(多个用逗号分隔)
+ excludes: /system/notice
+ # 匹配链接
+ urlPatterns: /system/*,/monitor/*,/tool/*
+
+# 全局线程池相关配置
+thread-pool:
+ # 是否开启线程池
+ enabled: false
+ # 队列最大长度
+ queueCapacity: 128
+ # 线程池维护线程所允许的空闲时间
+ keepAliveSeconds: 300
+
+--- # 分布式锁 lock4j 全局配置
+lock4j:
+ # 获取分布式锁超时时间,默认为 3000 毫秒
+ acquire-timeout: 3000
+ # 分布式锁的超时时间,默认为 30 秒
+ expire: 30000
+
+
+justauth:
+ enabled: true
+ type:
+ QQ:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/qq/callback
+ union-id: false
+ WEIBO:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/weibo/callback
+ GITEE:
+ client-id: 81c260182bd4ab80d32aaea0e8c0635a58ff815fce6931229ef91d96e0df4889
+ client-secret: 101568b287227064875b90f8268b7598af84939479d0ef8ffeb45382f3b33a78
+ redirect-uri: http://127.0.0.1:8080/oauth/gitee/callback
+ DINGTALK:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/dingtalk/callback
+ BAIDU:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/baidu/callback
+ CSDN:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/csdn/callback
+ CODING:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/coding/callback
+ domain-prefix: xx
+ OSCHINA:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/oschina/callback
+ ALIPAY:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/alipay/callback
+ alipay-public-key: MIIB**************DAQAB
+ WECHAT_OPEN:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_open/callback
+ WECHAT_MP:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_mp/callback
+ WECHAT_ENTERPRISE:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_enterprise/callback
+ agent-id: 1000002
+ TAOBAO:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/taobao/callback
+ GOOGLE:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/google/callback
+ FACEBOOK:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/facebook/callback
+ DOUYIN:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/douyin/callback
+ LINKEDIN:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/linkedin/callback
+ MICROSOFT:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/microsoft/callback
+ MI:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/mi/callback
+ TOUTIAO:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/toutiao/callback
+ TEAMBITION:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/teambition/callback
+ RENREN:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/renren/callback
+ PINTEREST:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/pinterest/callback
+ STACK_OVERFLOW:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/stack_overflow/callback
+ stack-overflow-key: asd*********asd
+ HUAWEI:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/huawei/callback
+ KUJIALE:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/kujiale/callback
+ GITLAB:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/gitlab/callback
+ MEITUAN:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/meituan/callback
+ ELEME:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/eleme/callback
+ TWITTER:
+ client-id: 10**********6
+ client-secret: 1f7d08**********5b7**********29e
+ redirect-uri: http://oauth.xkcoding.com/demo/oauth/twitter/callback
+ cache:
+ type: default
diff --git a/zhi-admin/src/main/resources/banner.txt b/zhi-admin/src/main/resources/banner.txt
new file mode 100644
index 0000000..33fb0ed
--- /dev/null
+++ b/zhi-admin/src/main/resources/banner.txt
@@ -0,0 +1,19 @@
+Application Version: ${zhi-vue-plus.version}
+Spring Boot Version: ${spring-boot.version}
+ ______
+ L,. ',
+ \ ',_ F-16C In flight + external FuelTank
+ \ @ ',
+ \ ^~^ ',
+ \ NR ',
+ \___'98fw ',_ _..----.._
+ [______ "'==.I\_____________..--"<__\\_n@___4\,_
+ ,..-=T __ ____________ \/ "'" 0<== "'-+.._
+ I____|_____ }_>=========I>=**""''==-------------==- " | "'-.,___
+ [_____,.--'" ""--=<""-----=====+==--''""
+ ""'-=+..,,__,-----,_____ -=* |
+ |__ /-----'#------.,I_---------'"
+ """"'--..__ _.>
+ ""'''''""
+
+ -- by Water -之
diff --git a/zhi-admin/src/main/resources/i18n/messages.properties b/zhi-admin/src/main/resources/i18n/messages.properties
new file mode 100644
index 0000000..e1423a8
--- /dev/null
+++ b/zhi-admin/src/main/resources/i18n/messages.properties
@@ -0,0 +1,45 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=对不起, 您的账号:{0} 不存在.
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
+user.password.delete=对不起,您的账号:{0} 已被删除
+user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+user.logout.success=退出成功
+length.not.valid=长度必须在{min}到{max}个字符之间
+user.username.not.blank=用户名不能为空
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.username.length.valid=账户长度必须在{min}到{max}个字符之间
+user.password.not.blank=用户密码不能为空
+user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间
+user.password.not.valid=* 5-50个字符
+user.email.not.valid=邮箱格式错误
+user.phonenumber.not.blank=用户手机号不能为空
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.register.success=注册成功
+user.register.save.error=保存用户 {0} 失败,注册账号已存在
+user.register.error=注册失败,请联系系统管理人员
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小! 允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
+repeat.submit.message=不允许重复提交,请稍候再试
+rate.limiter.message=访问过于频繁,请稍候再试
+sms.code.not.blank=短信验证码不能为空
+sms.code.retry.limit.count=短信验证码输入错误{0}次
+sms.code.retry.limit.exceed=短信验证码输入错误{0}次,帐户锁定{0}分钟
+xcx.code.not.blank=小程序code不能为空
diff --git a/zhi-admin/src/main/resources/i18n/messages_en_US.properties b/zhi-admin/src/main/resources/i18n/messages_en_US.properties
new file mode 100644
index 0000000..04a4aa3
--- /dev/null
+++ b/zhi-admin/src/main/resources/i18n/messages_en_US.properties
@@ -0,0 +1,45 @@
+#错误消息
+not.null=* Required fill in
+user.jcaptcha.error=Captcha error
+user.jcaptcha.expire=Captcha invalid
+user.not.exists=Sorry, your account: {0} does not exist
+user.password.not.match=User does not exist/Password error
+user.password.retry.limit.count=Password input error {0} times
+user.password.retry.limit.exceed=Password input error {0} times, account locked for {1} minutes
+user.password.delete=Sorry, your account:{0} has been deleted
+user.blocked=Sorry, your account: {0} has been disabled. Please contact the administrator
+role.blocked=Role disabled,please contact administrators
+user.logout.success=Exit successful
+length.not.valid=The length must be between {min} and {max} characters
+user.username.not.blank=Username cannot be blank
+user.username.not.valid=* 2 to 20 chinese characters, letters, numbers or underscores, and must start with a non number
+user.username.length.valid=Account length must be between {min} and {max} characters
+user.password.not.blank=Password cannot be empty
+user.password.length.valid=Password length must be between {min} and {max} characters
+user.password.not.valid=* 5-50 characters
+user.email.not.valid=Mailbox format error
+user.phonenumber.not.blank=Phone number cannot be blank
+user.mobile.phone.number.not.valid=Phone number format error
+user.login.success=Login successful
+user.register.success=Register successful
+user.register.save.error=Failed to save user {0}, The registered account already exists
+user.register.error=Register failed, please contact system administrator
+user.notfound=Please login again
+user.forcelogout=The administrator is forced to exit,please login again
+user.unknown.error=Unknown error, please login again
+##文件上传消息
+upload.exceed.maxSize=The uploaded file size exceeds the limit file size! the maximum allowed file size is:{0}MB!
+upload.filename.exceed.length=The maximum length of uploaded file name is {0} characters
+##权限
+no.permission=You do not have permission to the data,please contact your administrator to add permissions [{0}]
+no.create.permission=You do not have permission to create data,please contact your administrator to add permissions [{0}]
+no.update.permission=You do not have permission to modify data,please contact your administrator to add permissions [{0}]
+no.delete.permission=You do not have permission to delete data,please contact your administrator to add permissions [{0}]
+no.export.permission=You do not have permission to export data,please contact your administrator to add permissions [{0}]
+no.view.permission=You do not have permission to view data,please contact your administrator to add permissions [{0}]
+repeat.submit.message=Repeat submit is not allowed, please try again later
+rate.limiter.message=Visit too frequently, please try again later
+sms.code.not.blank=Sms code cannot be blank
+sms.code.retry.limit.count=Sms code input error {0} times
+sms.code.retry.limit.exceed=Sms code input error {0} times, account locked for {0} minutes
+xcx.code.not.blank=Mini program code cannot be blank
diff --git a/zhi-admin/src/main/resources/i18n/messages_zh_CN.properties b/zhi-admin/src/main/resources/i18n/messages_zh_CN.properties
new file mode 100644
index 0000000..e1423a8
--- /dev/null
+++ b/zhi-admin/src/main/resources/i18n/messages_zh_CN.properties
@@ -0,0 +1,45 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=对不起, 您的账号:{0} 不存在.
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
+user.password.delete=对不起,您的账号:{0} 已被删除
+user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+user.logout.success=退出成功
+length.not.valid=长度必须在{min}到{max}个字符之间
+user.username.not.blank=用户名不能为空
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.username.length.valid=账户长度必须在{min}到{max}个字符之间
+user.password.not.blank=用户密码不能为空
+user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间
+user.password.not.valid=* 5-50个字符
+user.email.not.valid=邮箱格式错误
+user.phonenumber.not.blank=用户手机号不能为空
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.register.success=注册成功
+user.register.save.error=保存用户 {0} 失败,注册账号已存在
+user.register.error=注册失败,请联系系统管理人员
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小! 允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
+repeat.submit.message=不允许重复提交,请稍候再试
+rate.limiter.message=访问过于频繁,请稍候再试
+sms.code.not.blank=短信验证码不能为空
+sms.code.retry.limit.count=短信验证码输入错误{0}次
+sms.code.retry.limit.exceed=短信验证码输入错误{0}次,帐户锁定{0}分钟
+xcx.code.not.blank=小程序code不能为空
diff --git a/zhi-admin/src/main/resources/logback.xml b/zhi-admin/src/main/resources/logback.xml
new file mode 100644
index 0000000..40fa33b
--- /dev/null
+++ b/zhi-admin/src/main/resources/logback.xml
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+ ${console.log.pattern}
+ utf-8
+
+
+
+
+
+ ${log.path}/sys-console.log
+
+
+ ${log.path}/sys-console.%d{yyyy-MM-dd}.log
+
+ 1
+
+
+ ${log.pattern}
+ utf-8
+
+
+
+ INFO
+
+
+
+
+
+ ${log.path}/sys-info.log
+
+
+
+ ${log.path}/sys-info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/sys-error.log
+
+
+
+ ${log.path}/sys-error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+ 0
+
+ 512
+
+
+
+
+
+
+
+ 0
+
+ 512
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/zhi-admin/src/main/resources/spy.properties b/zhi-admin/src/main/resources/spy.properties
new file mode 100644
index 0000000..abbd893
--- /dev/null
+++ b/zhi-admin/src/main/resources/spy.properties
@@ -0,0 +1,28 @@
+# p6spy 性能分析插件配置文件
+modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
+# 自定义日志打印
+logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
+#日志输出到控制台
+appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
+# 使用日志系统记录 sql
+#appender=com.p6spy.engine.spy.appender.Slf4JLogger
+# 设置 p6spy driver 代理
+#deregisterdrivers=true
+# 取消JDBC URL前缀
+useprefix=true
+# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
+excludecategories=info,debug,result,commit,resultset
+# 日期格式
+dateformat=yyyy-MM-dd HH:mm:ss
+# SQL语句打印时间格式
+databaseDialectTimestampFormat=yyyy-MM-dd HH:mm:ss
+# 实际驱动可多个
+#driverlist=org.h2.Driver
+# 是否开启慢SQL记录
+outagedetection=true
+# 慢SQL记录标准 2 秒
+outagedetectioninterval=2
+# 是否过滤 Log
+filter=true
+# 过滤 Log 时所排除的 sql 关键字,以逗号分隔
+exclude=SELECT 1
diff --git a/zhi-blog-plus-master/LICENSE b/zhi-blog-plus-master/LICENSE
new file mode 100644
index 0000000..32b3071
--- /dev/null
+++ b/zhi-blog-plus-master/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2019 RuoYi-Vue-Plus
+
+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.
diff --git a/zhi-blog-plus-master/README.md b/zhi-blog-plus-master/README.md
new file mode 100644
index 0000000..7f19928
--- /dev/null
+++ b/zhi-blog-plus-master/README.md
@@ -0,0 +1,124 @@
+## 博客简介
+
+
+> 使用RuoYi-Vue-Plus 作为博客的后端框架
+
+> 项目代码、文档 均开源免费遵循开源协议在项目中保留开源协议文件即可
+
+### 系统演示功能暂未更新到最新代码,具体实现以最新代码效果为准
+### 系统演示出现bug等问题最新仓库代码已解决,请优先关注群内公告更新消息
+### 建议拉取代码后删除sys_oss中的全部代码,不然会影响文件管理页面的访问
+### :演示涉及到文件或者图片上传需要自行修改文件配置模块,写上自己的云端账密,使用后务必记住删除
+### : 演示模式三方登录逻辑暂未体现
+> 系统演示: 前台 http://water-zhi.cn 后台:http://admin.water-zhi.cn
+>
+> ## 部署博客的操作步骤文章与问题询问请进群:551275273
+
+## 业务功能
+
+| 功能 | 介绍 |
+|---|---|
+| 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置。 |
+| 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 |
+| 岗位管理 | 配置系统用户所属担任职务。 |
+| 菜单管理 | 配置系统菜单,操作权限,按钮权限标识等。 |
+| 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分。 |
+| 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护。 |
+| 参数管理 | 对系统动态配置常用参数。 |
+| 通知公告 | 系统通知公告信息发布维护。 |
+| 操作日志 | 系统正常操作日志记录和查询;系统异常信息日志记录和查询。 |
+| 登录日志 | 系统登录日志记录查询包含登录异常。 |
+| 文件管理 | 系统文件上传、下载等管理。 |
+| 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志。 |
+| 代码生成 | 前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 |
+| 系统接口 | 根据业务代码自动生成相关的api接口文档。 |
+| 服务监控 | 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等。 |
+| 缓存监控 | 对系统的缓存信息查询,命令统计等。 |
+| 在线构建器 | 拖动表单元素生成相应的HTML代码。 |
+| 连接池监视 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 |
+| 使用案例 | 系统的一些功能案例 |
+
+## 博客模块介绍
+
+| 包 | 介绍 |
+|--|---|
+| blogutils | 博客后台中通用的方法。 |
+| domain | 实体层 |
+| domain-bo | 前端后台管理系统给后端返回的数据(查询条件)。 |
+| domain-vo | 后端给前端后台管理系统返回的数据层。 |
+| dto | 后端给前端前台界面返回的数据 |
+| dto-vo | 前端的前台界面给后端返回的数据 |
+| domain-es | es索引对应查询的实体类 |
+
+## 博客特点:
+- 项目规范,属于企业级博客
+- 鉴权使用了sa-token极大的降低了与项目的耦合度,代替了spring-security
+- 标签与分类动态添加
+- 弹幕强留言
+- 文章推荐等功能
+- 多搜索模式
+- 使用just-auth集成三方登录,便于拓展
+- 前台参考"Hexo"的"Butterfly"设计
+- 后台根据ruoyi-vue-plus开发十分贴合企业级开发规范
+- 整合了easy_es mail等流行框架
+
+## 使用技术:
+### 前端:前端: vue + vuex + vue-router + axios + vuetify + element + echarts
+### 后端: SpringBoot + easy_es + nginx + docker + sa-token + Swagger2 + MyBatisPlus + Mysql + Redis + elasticsearch + RabbitMQ + MaxWell + Websocket
+
+
+## 存储:使用当前主流的三方云端,cos/oss/七牛等动态切换
+
+## 运行环境:服务器:至少1核2G(关闭es)
+
+
+## 加群与捐献 🐧群:551275273
+
+
+## 捐献作者
+开源博主创作不易!
+
+
+
+
+
+## 演示图例
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# 致敬:前端:风神 后端:LionLi+风神
\ No newline at end of file
diff --git a/zhi-common/pom.xml b/zhi-common/pom.xml
new file mode 100644
index 0000000..2ebb01a
--- /dev/null
+++ b/zhi-common/pom.xml
@@ -0,0 +1,233 @@
+
+
+
+ ruoyi-vue-plus
+ com.zhi
+ 4.4.0
+
+ 4.0.0
+
+ zhi-common
+
+
+ common通用工具
+
+
+
+
+
+
+ org.springframework
+ spring-context-support
+
+
+
+
+ org.springframework
+ spring-web
+
+
+
+
+ cn.dev33
+ sa-token-spring-boot-starter
+
+
+
+ cn.dev33
+ sa-token-jwt
+
+
+
+
+
+ org.apache.mahout
+ mahout-mr
+ 0.12.2
+
+
+ javax.servlet
+ servlet-api
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ slf4j-jcl
+
+
+ org.apache.lucene
+ lucene-core
+
+
+ org.apache.lucene
+ lucene-analyzers-common
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ jersey-client
+ com.sun.jersey
+
+
+ jersey-core
+ com.sun.jersey
+
+
+ jersey-apache-client4
+ com.sun.jersey.contribs
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+
+ org.apache.commons
+ commons-lang3
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+ com.alibaba
+ easyexcel
+
+
+
+
+ org.yaml
+ snakeyaml
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+
+
+ com.baomidou
+ mybatis-plus-extension
+
+
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+
+
+
+ cn.hutool
+ hutool-core
+
+
+
+ cn.hutool
+ hutool-http
+
+
+
+ cn.hutool
+ hutool-captcha
+
+
+
+ cn.hutool
+ hutool-jwt
+
+
+
+ cn.hutool
+ hutool-extra
+
+
+
+ com.sun.mail
+ jakarta.mail
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ org.springdoc
+ springdoc-openapi-webmvc-core
+
+
+
+ org.springdoc
+ springdoc-openapi-javadoc
+
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+
+
+
+
+ org.redisson
+ redisson-spring-boot-starter
+
+
+
+ com.baomidou
+ lock4j-redisson-spring-boot-starter
+
+
+
+
+ cn.easy-es
+ easy-es-boot-starter
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.76
+
+
+
+ eu.bitwalker
+ UserAgentUtils
+ 1.20
+
+
+
+
+
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/AccessLimit.java b/zhi-common/src/main/java/com/zhi/common/annotation/AccessLimit.java
new file mode 100644
index 0000000..96fe0c1
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/AccessLimit.java
@@ -0,0 +1,28 @@
+package com.zhi.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * @author hnz
+ * @date 2022/3/23 11:16
+ * @description redis接口限流
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface AccessLimit {
+
+ /**
+ * 单位时间(秒)
+ *
+ * @return int
+ */
+ int seconds();
+
+ /**
+ * 单位时间最大请求次数
+ *
+ * @return int
+ */
+ int maxCount();
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/CellMerge.java b/zhi-common/src/main/java/com/zhi/common/annotation/CellMerge.java
new file mode 100644
index 0000000..31cf57e
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/CellMerge.java
@@ -0,0 +1,24 @@
+package com.zhi.common.annotation;
+
+import com.zhi.common.excel.CellMergeStrategy;
+
+import java.lang.annotation.*;
+
+/**
+ * excel 列单元格合并(合并列相同项)
+ *
+ * 需搭配 {@link CellMergeStrategy} 策略使用
+ *
+ * @author Lion Li
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface CellMerge {
+
+ /**
+ * col index
+ */
+ int index() default -1;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/DataColumn.java b/zhi-common/src/main/java/com/zhi/common/annotation/DataColumn.java
new file mode 100644
index 0000000..bd7d0fa
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/DataColumn.java
@@ -0,0 +1,28 @@
+package com.zhi.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 数据权限
+ *
+ * 一个注解只能对应一个模板
+ *
+ * @author Lion Li
+ * @version 3.5.0
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DataColumn {
+
+ /**
+ * 占位符关键字
+ */
+ String[] key() default "deptName";
+
+ /**
+ * 占位符替换值
+ */
+ String[] value() default "dept_id";
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/DataPermission.java b/zhi-common/src/main/java/com/zhi/common/annotation/DataPermission.java
new file mode 100644
index 0000000..1b84299
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/DataPermission.java
@@ -0,0 +1,18 @@
+package com.zhi.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 数据权限组
+ *
+ * @author Lion Li
+ * @version 3.5.0
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DataPermission {
+
+ DataColumn[] value();
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/DictDataMapper.java b/zhi-common/src/main/java/com/zhi/common/annotation/DictDataMapper.java
new file mode 100644
index 0000000..6c28bd8
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/DictDataMapper.java
@@ -0,0 +1,27 @@
+package com.zhi.common.annotation;
+
+import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.zhi.common.jackson.DictDataJsonSerializer;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 字典数据映射注解
+ *
+ * @author itino
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD, ElementType.METHOD})
+@JacksonAnnotationsInside
+@JsonSerialize(using = DictDataJsonSerializer.class)
+public @interface DictDataMapper {
+
+ /**
+ * 设置字典的type值 (如: sys_user_sex)
+ */
+ String dictType() default "";
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/ExcelDictFormat.java b/zhi-common/src/main/java/com/zhi/common/annotation/ExcelDictFormat.java
new file mode 100644
index 0000000..7ae7ccc
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/ExcelDictFormat.java
@@ -0,0 +1,30 @@
+package com.zhi.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 字典格式化
+ *
+ * @author Lion Li
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface ExcelDictFormat {
+
+ /**
+ * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
+ */
+ String dictType() default "";
+
+ /**
+ * 读取内容转表达式 (如: 0=男,1=女,2=未知)
+ */
+ String readConverterExp() default "";
+
+ /**
+ * 分隔符,读取字符串组内容
+ */
+ String separator() default ",";
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/Log.java b/zhi-common/src/main/java/com/zhi/common/annotation/Log.java
new file mode 100644
index 0000000..c483a56
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/Log.java
@@ -0,0 +1,41 @@
+package com.zhi.common.annotation;
+
+import com.zhi.common.enums.BusinessType;
+import com.zhi.common.enums.OperatorType;
+
+import java.lang.annotation.*;
+
+/**
+ * 自定义操作日志记录注解
+ *
+ * @author ruoyi
+ */
+@Target({ElementType.PARAMETER, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Log {
+ /**
+ * 模块
+ */
+ String title() default "";
+
+ /**
+ * 功能
+ */
+ BusinessType businessType() default BusinessType.OTHER;
+
+ /**
+ * 操作人类别
+ */
+ OperatorType operatorType() default OperatorType.MANAGE;
+
+ /**
+ * 是否保存请求的参数
+ */
+ boolean isSaveRequestData() default true;
+
+ /**
+ * 是否保存响应的参数
+ */
+ boolean isSaveResponseData() default true;
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/RateLimiter.java b/zhi-common/src/main/java/com/zhi/common/annotation/RateLimiter.java
new file mode 100644
index 0000000..690799f
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/RateLimiter.java
@@ -0,0 +1,36 @@
+package com.zhi.common.annotation;
+
+import com.zhi.common.constant.CacheConstants;
+import com.zhi.common.enums.LimitType;
+
+import java.lang.annotation.*;
+
+/**
+ * 限流注解
+ *
+ * @author Lion Li
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface RateLimiter {
+ /**
+ * 限流key
+ */
+ String key() default CacheConstants.RATE_LIMIT_KEY;
+
+ /**
+ * 限流时间,单位秒
+ */
+ int time() default 60;
+
+ /**
+ * 限流次数
+ */
+ int count() default 100;
+
+ /**
+ * 限流类型
+ */
+ LimitType limitType() default LimitType.DEFAULT;
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/RepeatSubmit.java b/zhi-common/src/main/java/com/zhi/common/annotation/RepeatSubmit.java
new file mode 100644
index 0000000..52a6c3e
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/RepeatSubmit.java
@@ -0,0 +1,29 @@
+package com.zhi.common.annotation;
+
+import java.lang.annotation.*;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 自定义注解防止表单重复提交
+ *
+ * @author Lion Li
+ */
+@Inherited
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface RepeatSubmit {
+
+ /**
+ * 间隔时间(ms),小于此时间视为重复提交
+ */
+ int interval() default 5000;
+
+ TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
+
+ /**
+ * 提示消息 支持国际化 格式为 {code}
+ */
+ String message() default "{repeat.submit.message}";
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/Sensitive.java b/zhi-common/src/main/java/com/zhi/common/annotation/Sensitive.java
new file mode 100644
index 0000000..e1a89ae
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/Sensitive.java
@@ -0,0 +1,24 @@
+package com.zhi.common.annotation;
+
+import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.zhi.common.enums.SensitiveStrategy;
+import com.zhi.common.jackson.SensitiveJsonSerializer;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 数据脱敏注解
+ *
+ * @author zhujie
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+@JacksonAnnotationsInside
+@JsonSerialize(using = SensitiveJsonSerializer.class)
+public @interface Sensitive {
+ SensitiveStrategy strategy();
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/Translation.java b/zhi-common/src/main/java/com/zhi/common/annotation/Translation.java
new file mode 100644
index 0000000..4ecae70
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/Translation.java
@@ -0,0 +1,38 @@
+package com.zhi.common.annotation;
+import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.zhi.common.translation.handler.TranslationHandler;
+
+import java.lang.annotation.*;
+
+/**
+ * 通用翻译注解
+ *
+ * @author Lion Li
+ */
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD, ElementType.METHOD})
+@Documented
+@JacksonAnnotationsInside
+@JsonSerialize(using = TranslationHandler.class)
+public @interface Translation {
+
+ /**
+ * 类型 (需与实现类上的 {@link com.zhi.common.annotation.TranslationType} 注解type对应)
+ *
+ * 默认取当前字段的值 如果设置了 @{@link Translation#mapper()} 则取映射字段的值
+ */
+ String type();
+
+ /**
+ * 映射字段 (如果不为空则取此字段的值)
+ */
+ String mapper() default "";
+
+ /**
+ * 其他条件 例如: 字典type(sys_user_sex)
+ */
+ String other() default "";
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/annotation/TranslationType.java b/zhi-common/src/main/java/com/zhi/common/annotation/TranslationType.java
new file mode 100644
index 0000000..a012e8e
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/annotation/TranslationType.java
@@ -0,0 +1,21 @@
+package com.zhi.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 翻译类型注解 (标注到{@link com.zhi.common.translation.TranslationInterface} 的实现类)
+ *
+ * @author Lion Li
+ */
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+@Documented
+public @interface TranslationType {
+
+ /**
+ * 类型
+ */
+ String type();
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/captcha/UnsignedMathGenerator.java b/zhi-common/src/main/java/com/zhi/common/captcha/UnsignedMathGenerator.java
new file mode 100644
index 0000000..1a06bda
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/captcha/UnsignedMathGenerator.java
@@ -0,0 +1,85 @@
+package com.zhi.common.captcha;
+
+import cn.hutool.captcha.generator.CodeGenerator;
+import cn.hutool.core.math.Calculator;
+import cn.hutool.core.util.CharUtil;
+import cn.hutool.core.util.RandomUtil;
+import com.zhi.common.utils.StringUtils;
+
+/**
+ * 无符号计算生成器
+ *
+ * @author Lion Li
+ */
+public class UnsignedMathGenerator implements CodeGenerator {
+
+ private static final long serialVersionUID = -5514819971774091076L;
+
+ private static final String OPERATORS = "+-*";
+
+ /**
+ * 参与计算数字最大长度
+ */
+ private final int numberLength;
+
+ /**
+ * 构造
+ */
+ public UnsignedMathGenerator() {
+ this(2);
+ }
+
+ /**
+ * 构造
+ *
+ * @param numberLength 参与计算最大数字位数
+ */
+ public UnsignedMathGenerator(int numberLength) {
+ this.numberLength = numberLength;
+ }
+
+ @Override
+ public String generate() {
+ final int limit = getLimit();
+ int a = RandomUtil.randomInt(limit);
+ int b = RandomUtil.randomInt(limit);
+ String max = Integer.toString(Math.max(a,b));
+ String min = Integer.toString(Math.min(a,b));
+ max = StringUtils.rightPad(max, this.numberLength, CharUtil.SPACE);
+ min = StringUtils.rightPad(min, this.numberLength, CharUtil.SPACE);
+
+ return max + RandomUtil.randomChar(OPERATORS) + min + '=';
+ }
+
+ @Override
+ public boolean verify(String code, String userInputCode) {
+ int result;
+ try {
+ result = Integer.parseInt(userInputCode);
+ } catch (NumberFormatException e) {
+ // 用户输入非数字
+ return false;
+ }
+
+ final int calculateResult = (int) Calculator.conversion(code);
+ return result == calculateResult;
+ }
+
+ /**
+ * 获取验证码长度
+ *
+ * @return 验证码长度
+ */
+ public int getLength() {
+ return this.numberLength * 2 + 2;
+ }
+
+ /**
+ * 根据长度获取参与计算数字最大值
+ *
+ * @return 最大值
+ */
+ private int getLimit() {
+ return Integer.parseInt("1" + StringUtils.repeat('0', this.numberLength));
+ }
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/config/RuoYiConfig.java b/zhi-common/src/main/java/com/zhi/common/config/RuoYiConfig.java
new file mode 100644
index 0000000..e076216
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/config/RuoYiConfig.java
@@ -0,0 +1,54 @@
+package com.zhi.common.config;
+
+import lombok.Data;
+import lombok.Getter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 读取项目相关配置
+ *
+ * @author Lion Li
+ */
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "ruoyi")
+public class RuoYiConfig {
+
+ /**
+ * 项目名称
+ */
+ private String name;
+
+ /**
+ * 版本
+ */
+ private String version;
+
+ /**
+ * 版权年份
+ */
+ private String copyrightYear;
+
+ /**
+ * 实例演示开关
+ */
+ private boolean demoEnabled;
+
+ /**
+ * 缓存懒加载
+ */
+ private boolean cacheLazy;
+
+ /**
+ * 获取地址开关
+ */
+ @Getter
+ private static boolean addressEnabled;
+
+ public void setAddressEnabled(boolean addressEnabled) {
+ RuoYiConfig.addressEnabled = addressEnabled;
+ }
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/CacheConstants.java b/zhi-common/src/main/java/com/zhi/common/constant/CacheConstants.java
new file mode 100644
index 0000000..e2e39b0
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/CacheConstants.java
@@ -0,0 +1,49 @@
+package com.zhi.common.constant;
+
+/**
+ * 缓存的key 常量
+ *
+ * @author ruoyi
+ */
+public interface CacheConstants {
+
+ /**
+ * 登录用户 redis key
+ */
+ String LOGIN_TOKEN_KEY = "Authorization:login:token:";
+
+ /**
+ * 在线用户 redis key
+ */
+ String ONLINE_TOKEN_KEY = "online_tokens:";
+
+ /**
+ * 验证码 redis key
+ */
+ String CAPTCHA_CODE_KEY = "captcha_codes:";
+
+ /**
+ * 参数管理 cache key
+ */
+ String SYS_CONFIG_KEY = "sys_config:";
+
+ /**
+ * 字典管理 cache key
+ */
+ String SYS_DICT_KEY = "sys_dict:";
+
+ /**
+ * 防重提交 redis key
+ */
+ String REPEAT_SUBMIT_KEY = "repeat_submit:";
+
+ /**
+ * 限流 redis key
+ */
+ String RATE_LIMIT_KEY = "rate_limit:";
+
+ /**
+ * 登录账户密码错误次数 redis key
+ */
+ String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/CacheNames.java b/zhi-common/src/main/java/com/zhi/common/constant/CacheNames.java
new file mode 100644
index 0000000..c44d819
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/CacheNames.java
@@ -0,0 +1,58 @@
+package com.zhi.common.constant;
+
+/**
+ * 缓存组名称常量
+ *
+ * key 格式为 cacheNames#ttl#maxIdleTime#maxSize
+ *
+ * ttl 过期时间 如果设置为0则不过期 默认为0
+ * maxIdleTime 最大空闲时间 根据LRU算法清理空闲数据 如果设置为0则不检测 默认为0
+ * maxSize 组最大长度 根据LRU算法清理溢出数据 如果设置为0则无限长 默认为0
+ *
+ * 例子: test#60s、test#0#60s、test#0#1m#1000、test#1h#0#500
+ *
+ * @author Lion Li
+ */
+public interface CacheNames {
+
+ /**
+ * 演示案例
+ */
+ String DEMO_CACHE = "demo:cache#60s#10m#20";
+
+ /**
+ * 系统配置
+ */
+ String SYS_CONFIG = "sys_config";
+
+ /**
+ * 数据字典
+ */
+ String SYS_DICT = "sys_dict";
+
+ /**
+ * 用户账户
+ */
+ String SYS_USER_NAME = "sys_user_name#30d";
+
+ /**
+ * 部门
+ */
+ String SYS_DEPT = "sys_dept#30d";
+
+ /**
+ * OSS内容
+ */
+ String SYS_OSS = "sys_oss#30d";
+
+ /**
+ * OSS配置
+ */
+ String SYS_OSS_CONFIG = "sys_oss_config";
+
+ /**
+ * 在线用户
+ */
+ String ONLINE_TOKEN = "online_tokens";
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/Constants.java b/zhi-common/src/main/java/com/zhi/common/constant/Constants.java
new file mode 100644
index 0000000..93dee96
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/Constants.java
@@ -0,0 +1,93 @@
+package com.zhi.common.constant;
+
+/**
+ * 通用常量信息
+ *
+ * @author ruoyi
+ */
+public interface Constants {
+
+
+ /**
+ * 初始密码
+ */
+ String FIRSTPASSWORD = "123456";
+
+ /**
+ * 默认sys系统用户注册
+ */
+ String TYPE = "sys_user";
+
+
+ /**
+ * 默认注册用户头像
+ */
+ String AVATAR = "https://s1.ax1x.com/2023/01/15/pSQf91A.jpg";
+
+ /**
+ * UTF-8 字符集
+ */
+ String UTF8 = "UTF-8";
+
+ /**
+ * GBK 字符集
+ */
+ String GBK = "GBK";
+
+ /**
+ * www主域
+ */
+ String WWW = "www.";
+
+ /**
+ * http请求
+ */
+ String HTTP = "http://";
+
+ /**
+ * https请求
+ */
+ String HTTPS = "https://";
+
+ /**
+ * 通用成功标识
+ */
+ String SUCCESS = "0";
+
+ /**
+ * 通用失败标识
+ */
+ String FAIL = "1";
+
+ /**
+ * 登录成功
+ */
+ String LOGIN_SUCCESS = "Success";
+
+ /**
+ * 注销
+ */
+ String LOGOUT = "Logout";
+
+ /**
+ * 注册
+ */
+ String REGISTER = "Register";
+
+ /**
+ * 登录失败
+ */
+ String LOGIN_FAIL = "Error";
+
+ /**
+ * 验证码有效期(分钟)
+ */
+ Integer CAPTCHA_EXPIRATION = 2;
+
+ /**
+ * 令牌
+ */
+ String TOKEN = "token";
+
+}
+
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/GenConstants.java b/zhi-common/src/main/java/com/zhi/common/constant/GenConstants.java
new file mode 100644
index 0000000..0b065cc
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/GenConstants.java
@@ -0,0 +1,193 @@
+package com.zhi.common.constant;
+
+/**
+ * 代码生成通用常量
+ *
+ * @author ruoyi
+ */
+public interface GenConstants {
+ /**
+ * 单表(增删改查)
+ */
+ String TPL_CRUD = "crud";
+
+ /**
+ * 树表(增删改查)
+ */
+ String TPL_TREE = "tree";
+
+ /**
+ * 主子表(增删改查)
+ */
+ String TPL_SUB = "sub";
+
+ /**
+ * 树编码字段
+ */
+ String TREE_CODE = "treeCode";
+
+ /**
+ * 树父编码字段
+ */
+ String TREE_PARENT_CODE = "treeParentCode";
+
+ /**
+ * 树名称字段
+ */
+ String TREE_NAME = "treeName";
+
+ /**
+ * 上级菜单ID字段
+ */
+ String PARENT_MENU_ID = "parentMenuId";
+
+ /**
+ * 上级菜单名称字段
+ */
+ String PARENT_MENU_NAME = "parentMenuName";
+
+ /**
+ * 数据库字符串类型
+ */
+ String[] COLUMNTYPE_STR = {"char", "varchar", "nvarchar", "varchar2"};
+
+ /**
+ * 数据库文本类型
+ */
+ String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext"};
+
+ /**
+ * 数据库时间类型
+ */
+ String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"};
+
+ /**
+ * 数据库数字类型
+ */
+ String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer",
+ "bit", "bigint", "float", "double", "decimal"};
+
+ /**
+ * BO对象 不需要添加字段
+ */
+ String[] COLUMNNAME_NOT_ADD = {"create_by", "create_time", "del_flag", "update_by",
+ "update_time", "version"};
+
+ /**
+ * BO对象 不需要编辑字段
+ */
+ String[] COLUMNNAME_NOT_EDIT = {"create_by", "create_time", "del_flag", "update_by",
+ "update_time", "version"};
+
+ /**
+ * VO对象 不需要返回字段
+ */
+ String[] COLUMNNAME_NOT_LIST = {"create_by", "create_time", "del_flag", "update_by",
+ "update_time", "version"};
+
+ /**
+ * BO对象 不需要查询字段
+ */
+ String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by",
+ "update_time", "remark", "version"};
+
+ /**
+ * Entity基类字段
+ */
+ String[] BASE_ENTITY = {"createBy", "createTime", "updateBy", "updateTime"};
+
+ /**
+ * Tree基类字段
+ */
+ String[] TREE_ENTITY = {"parentName", "parentId", "children"};
+
+ /**
+ * 文本框
+ */
+ String HTML_INPUT = "input";
+
+ /**
+ * 文本域
+ */
+ String HTML_TEXTAREA = "textarea";
+
+ /**
+ * 下拉框
+ */
+ String HTML_SELECT = "select";
+
+ /**
+ * 单选框
+ */
+ String HTML_RADIO = "radio";
+
+ /**
+ * 复选框
+ */
+ String HTML_CHECKBOX = "checkbox";
+
+ /**
+ * 日期控件
+ */
+ String HTML_DATETIME = "datetime";
+
+ /**
+ * 图片上传控件
+ */
+ String HTML_IMAGE_UPLOAD = "imageUpload";
+
+ /**
+ * 文件上传控件
+ */
+ String HTML_FILE_UPLOAD = "fileUpload";
+
+ /**
+ * 富文本控件
+ */
+ String HTML_EDITOR = "editor";
+
+ /**
+ * 字符串类型
+ */
+ String TYPE_STRING = "String";
+
+ /**
+ * 整型
+ */
+ String TYPE_INTEGER = "Integer";
+
+ /**
+ * 长整型
+ */
+ String TYPE_LONG = "Long";
+
+ /**
+ * 浮点型
+ */
+ String TYPE_DOUBLE = "Double";
+
+ /**
+ * 高精度计算类型
+ */
+ String TYPE_BIGDECIMAL = "BigDecimal";
+
+ /**
+ * 时间类型
+ */
+ String TYPE_DATE = "Date";
+
+ /**
+ * 模糊查询
+ */
+ String QUERY_LIKE = "LIKE";
+
+ /**
+ * 相等查询
+ */
+ String QUERY_EQ = "EQ";
+
+ /**
+ * 需要
+ */
+ String REQUIRE = "1";
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/HttpStatus.java b/zhi-common/src/main/java/com/zhi/common/constant/HttpStatus.java
new file mode 100644
index 0000000..6a215cd
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/HttpStatus.java
@@ -0,0 +1,93 @@
+package com.zhi.common.constant;
+
+/**
+ * 返回状态码
+ *
+ * @author Lion Li
+ */
+public interface HttpStatus {
+ /**
+ * 操作成功
+ */
+ int SUCCESS = 200;
+
+ /**
+ * 对象创建成功
+ */
+ int CREATED = 201;
+
+ /**
+ * 请求已经被接受
+ */
+ int ACCEPTED = 202;
+
+ /**
+ * 操作已经执行成功,但是没有返回数据
+ */
+ int NO_CONTENT = 204;
+
+ /**
+ * 资源已被移除
+ */
+ int MOVED_PERM = 301;
+
+ /**
+ * 重定向
+ */
+ int SEE_OTHER = 303;
+
+ /**
+ * 资源没有被修改
+ */
+ int NOT_MODIFIED = 304;
+
+ /**
+ * 参数列表错误(缺少,格式不匹配)
+ */
+ int BAD_REQUEST = 400;
+
+ /**
+ * 未授权
+ */
+ int UNAUTHORIZED = 401;
+
+ /**
+ * 访问受限,授权过期
+ */
+ int FORBIDDEN = 403;
+
+ /**
+ * 资源,服务未找到
+ */
+ int NOT_FOUND = 404;
+
+ /**
+ * 不允许的http方法
+ */
+ int BAD_METHOD = 405;
+
+ /**
+ * 资源冲突,或者资源被锁
+ */
+ int CONFLICT = 409;
+
+ /**
+ * 不支持的数据,媒体类型
+ */
+ int UNSUPPORTED_TYPE = 415;
+
+ /**
+ * 系统内部错误
+ */
+ int ERROR = 500;
+
+ /**
+ * 接口未实现
+ */
+ int NOT_IMPLEMENTED = 501;
+
+ /**
+ * 系统警告消息
+ */
+ int WARN = 601;
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/TransConstant.java b/zhi-common/src/main/java/com/zhi/common/constant/TransConstant.java
new file mode 100644
index 0000000..d645c77
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/TransConstant.java
@@ -0,0 +1,30 @@
+package com.zhi.common.constant;
+
+/**
+ * 翻译常量
+ *
+ * @author Lion Li
+ */
+public interface TransConstant {
+
+ /**
+ * 用户id转账号
+ */
+ String USER_ID_TO_NAME = "user_id_to_name";
+
+ /**
+ * 部门id转名称
+ */
+ String DEPT_ID_TO_NAME = "dept_id_to_name";
+
+ /**
+ * 字典type转label
+ */
+ String DICT_TYPE_TO_LABEL = "dict_type_to_label";
+
+ /**
+ * ossId转url
+ */
+ String OSS_ID_TO_URL = "oss_id_to_url";
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/UserConstants.java b/zhi-common/src/main/java/com/zhi/common/constant/UserConstants.java
new file mode 100644
index 0000000..f7baa38
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/UserConstants.java
@@ -0,0 +1,138 @@
+package com.zhi.common.constant;
+
+/**
+ * 用户常量信息
+ *
+ * @author ruoyi
+ */
+public interface UserConstants {
+
+ /**
+ * 平台内系统用户的唯一标志
+ */
+ String SYS_USER = "SYS_USER";
+
+ /**
+ * 正常状态
+ */
+ String NORMAL = "0";
+
+ /**
+ * 异常状态
+ */
+ String EXCEPTION = "1";
+
+ /**
+ * 用户正常状态
+ */
+ String USER_NORMAL = "0";
+
+ /**
+ * 用户封禁状态
+ */
+ String USER_DISABLE = "1";
+
+ /**
+ * 角色正常状态
+ */
+ String ROLE_NORMAL = "0";
+
+ /**
+ * 角色封禁状态
+ */
+ String ROLE_DISABLE = "1";
+
+ /**
+ * 部门正常状态
+ */
+ String DEPT_NORMAL = "0";
+
+ /**
+ * 部门停用状态
+ */
+ String DEPT_DISABLE = "1";
+
+ /**
+ * 字典正常状态
+ */
+ String DICT_NORMAL = "0";
+
+ /**
+ * 是否为系统默认(是)
+ */
+ String YES = "Y";
+
+ /**
+ * 是否菜单外链(是)
+ */
+ String YES_FRAME = "0";
+
+ /**
+ * 是否菜单外链(否)
+ */
+ String NO_FRAME = "1";
+
+ /**
+ * 菜单正常状态
+ */
+ String MENU_NORMAL = "0";
+
+ /**
+ * 菜单停用状态
+ */
+ String MENU_DISABLE = "1";
+
+ /**
+ * 菜单类型(目录)
+ */
+ String TYPE_DIR = "M";
+
+ /**
+ * 菜单类型(菜单)
+ */
+ String TYPE_MENU = "C";
+
+ /**
+ * 菜单类型(按钮)
+ */
+ String TYPE_BUTTON = "F";
+
+ /**
+ * Layout组件标识
+ */
+ String LAYOUT = "Layout";
+
+ /**
+ * ParentView组件标识
+ */
+ String PARENT_VIEW = "ParentView";
+
+ /**
+ * InnerLink组件标识
+ */
+ String INNER_LINK = "InnerLink";
+
+ /**
+ * 校验返回结果码
+ */
+ String UNIQUE = "0";
+ String NOT_UNIQUE = "1";
+
+ /**
+ * 用户名长度限制
+ */
+ int USERNAME_MIN_LENGTH = 2;
+ int USERNAME_MAX_LENGTH = 20;
+
+ /**
+ * 密码长度限制
+ */
+ int PASSWORD_MIN_LENGTH = 5;
+ int PASSWORD_MAX_LENGTH = 20;
+
+ /**
+ * 管理员ID
+ */
+ Long ADMIN_ID = 1L;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/blog/CommonConst.java b/zhi-common/src/main/java/com/zhi/common/constant/blog/CommonConst.java
new file mode 100644
index 0000000..40c0de9
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/blog/CommonConst.java
@@ -0,0 +1,146 @@
+package com.zhi.common.constant.blog;
+
+
+/**
+ * 公共常量
+ *
+ * @author yezhiqiu
+ * @date 2021/07/27
+ */
+public class CommonConst {
+ /**
+ * 文章对应的type
+ */
+ public static final String ARTICLE_TYPE = "articleCommentStrategy";
+
+ public static final Integer ARTICLE_TYPE_VALUE = 1;
+
+ /**
+ * 友链对应的type
+ */
+ public static final String FRIENDLINK_TYPE = "friendLinkCommentStrategy";
+
+ public static final Integer FRIENDLINK_TYPE_VALUE = 2;
+
+ /**
+ * 说说对应的type
+ */
+ public static final String TALK_TYPE = "talkCommentStrategy";
+
+ public static final Integer TALK_TYPE_VALUE = 3;
+
+
+
+ /**
+ * 默认文章标签/分类
+ */
+ public static final String DEFAULTCATORTAG = "默认";
+
+ /**
+ * 默认文章标签/分类id
+ */
+
+ public static final Long DEFAULTCATORTAGID = Long.valueOf(1);
+
+ /**
+ * 已审核
+ */
+ public static final int STATE = 1;
+
+ /**
+ * 系统是
+ */
+ public static final String YES = "Y";
+
+
+ /**
+ * 系统否
+ */
+ public static final String NO = "N";
+
+ /**
+ * 对
+ */
+ public static final String ISTRUE = "true";
+
+ /**
+ * 否
+ */
+ public static final int FALSE = 0;
+
+ /**
+ * 是
+ */
+ public static final int TRUE = 1;
+
+ /**
+ * 高亮标签
+ */
+ public static final String PRE_TAG = "";
+
+ /**
+ * 高亮标签
+ */
+ public static final String POST_TAG = " ";
+
+ /**
+ * 当前页码
+ */
+ public static final String CURRENT = "current";
+
+ /**
+ * 页码条数
+ */
+ public static final String SIZE = "size";
+
+ /**
+ * 博主id
+ */
+ public static final Integer BLOGGER_ID = 1;
+
+ /**
+ * 默认条数
+ */
+ public static final String DEFAULT_SIZE = "10";
+
+ /**
+ * 默认用户昵称
+ */
+ public static final String DEFAULT_NICKNAME = "用户";
+
+ /**
+ * 浏览文章集合
+ */
+ public static String ARTICLE_SET = "articleSet";
+
+ /**
+ * 前端组件名
+ */
+ public static String COMPONENT = "Layout";
+
+ /**
+ * 省
+ */
+ public static final String PROVINCE = "省";
+
+ /**
+ * 市
+ */
+ public static final String CITY = "市";
+
+ /**
+ * 未知的
+ */
+ public static final String UNKNOWN = "未知";
+
+ /**
+ * JSON 格式
+ */
+ public static final String APPLICATION_JSON = "application/json;charset=utf-8";
+
+ /**
+ * 默认的配置id
+ */
+ public static final Integer DEFAULT_CONFIG_ID = 1;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/blog/MQPrefixConst.java b/zhi-common/src/main/java/com/zhi/common/constant/blog/MQPrefixConst.java
new file mode 100644
index 0000000..1bc86bd
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/blog/MQPrefixConst.java
@@ -0,0 +1,32 @@
+package com.zhi.common.constant.blog;
+
+/**
+ * mqprefix常量
+ * mq常量
+ *
+ * @author yezhiqiu
+ * @date 2021/07/28
+ */
+public class MQPrefixConst {
+
+ /**
+ * maxwell交换机
+ */
+ public static final String MAXWELL_EXCHANGE = "maxwell_exchange";
+
+ /**
+ * maxwell队列
+ */
+ public static final String MAXWELL_QUEUE = "maxwell_queue";
+
+ /**
+ * email交换机
+ */
+ public static final String EMAIL_EXCHANGE = "email_exchange";
+
+ /**
+ * 邮件队列
+ */
+ public static final String EMAIL_QUEUE = "email_queue";
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/constant/blog/RedisPrefixConst.java b/zhi-common/src/main/java/com/zhi/common/constant/blog/RedisPrefixConst.java
new file mode 100644
index 0000000..daa3873
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/constant/blog/RedisPrefixConst.java
@@ -0,0 +1,91 @@
+package com.zhi.common.constant.blog;
+
+/**
+ * redis常量
+ *
+ * @author yezhiqiu
+ * @date 2021/07/27
+ */
+public class RedisPrefixConst {
+
+ /**
+ * 验证码过期时间
+ */
+ public static final long CODE_EXPIRE_TIME = 15 * 60;
+
+ /**
+ * 验证码
+ */
+ public static final String USER_CODE_KEY = "code:";
+
+ /**
+ * 博客浏览量
+ */
+ public static final String BLOG_VIEWS_COUNT = "blog_views_count";
+
+ /**
+ * 文章浏览量
+ */
+ public static final String ARTICLE_VIEWS_COUNT = "article_views_count";
+
+ /**
+ * 文章点赞量
+ */
+ public static final String ARTICLE_LIKE_COUNT = "article_like_count";
+
+ /**
+ * 用户点赞文章
+ */
+ public static final String ARTICLE_USER_LIKE = "article_user_like:";
+
+ /**
+ * 说说点赞量
+ */
+ public static final String TALK_LIKE_COUNT = "talk_like_count";
+
+ /**
+ * 用户点赞说说
+ */
+ public static final String TALK_USER_LIKE = "talk_user_like:";
+
+ /**
+ * 评论点赞量
+ */
+ public static final String COMMENT_LIKE_COUNT = "comment_like_count";
+
+ /**
+ * 用户点赞评论
+ */
+ public static final String COMMENT_USER_LIKE = "comment_user_like:";
+
+ /**
+ * 网站配置
+ */
+ public static final String WEBSITE_CONFIG = "website_config";
+
+ /**
+ * 用户地区
+ */
+ public static final String USER_AREA = "user_area";
+
+ /**
+ * 访客地区
+ */
+ public static final String VISITOR_AREA = "visitor_area";
+
+ /**
+ * 页面封面
+ */
+ public static final String PAGE_COVER = "page_cover";
+
+ /**
+ * 关于我信息
+ */
+ public static final String ABOUT = "about";
+
+ /**
+ * 访客
+ */
+ public static final String UNIQUE_VISITOR = "unique_visitor";
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/convert/ExcelBigNumberConvert.java b/zhi-common/src/main/java/com/zhi/common/convert/ExcelBigNumberConvert.java
new file mode 100644
index 0000000..52e92af
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/convert/ExcelBigNumberConvert.java
@@ -0,0 +1,52 @@
+package com.zhi.common.convert;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.data.ReadCellData;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import lombok.extern.slf4j.Slf4j;
+
+import java.math.BigDecimal;
+
+/**
+ * 大数值转换
+ * Excel 数值长度位15位 大于15位的数值转换位字符串
+ *
+ * @author Lion Li
+ */
+@Slf4j
+public class ExcelBigNumberConvert implements Converter {
+
+ @Override
+ public Class supportJavaTypeKey() {
+ return Long.class;
+ }
+
+ @Override
+ public CellDataTypeEnum supportExcelTypeKey() {
+ return CellDataTypeEnum.STRING;
+ }
+
+ @Override
+ public Long convertToJavaData(ReadCellData> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+ return Convert.toLong(cellData.getData());
+ }
+
+ @Override
+ public WriteCellData convertToExcelData(Long object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+ if (ObjectUtil.isNotNull(object)) {
+ String str = Convert.toStr(object);
+ if (str.length() > 15) {
+ return new WriteCellData<>(str);
+ }
+ }
+ WriteCellData cellData = new WriteCellData<>(new BigDecimal(object));
+ cellData.setType(CellDataTypeEnum.NUMBER);
+ return cellData;
+ }
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/convert/ExcelDictConvert.java b/zhi-common/src/main/java/com/zhi/common/convert/ExcelDictConvert.java
new file mode 100644
index 0000000..71c2661
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/convert/ExcelDictConvert.java
@@ -0,0 +1,73 @@
+package com.zhi.common.convert;
+
+import cn.hutool.core.annotation.AnnotationUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.data.ReadCellData;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.zhi.common.annotation.ExcelDictFormat;
+import com.zhi.common.core.service.DictService;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.common.utils.poi.ExcelUtil;
+import com.zhi.common.utils.spring.SpringUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典格式化转换处理
+ *
+ * @author Lion Li
+ */
+@Slf4j
+public class ExcelDictConvert implements Converter {
+
+ @Override
+ public Class supportJavaTypeKey() {
+ return Object.class;
+ }
+
+ @Override
+ public CellDataTypeEnum supportExcelTypeKey() {
+ return null;
+ }
+
+ @Override
+ public Object convertToJavaData(ReadCellData> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+ ExcelDictFormat anno = getAnnotation(contentProperty.getField());
+ String type = anno.dictType();
+ String label = cellData.getStringValue();
+ String value;
+ if (StringUtils.isBlank(type)) {
+ value = ExcelUtil.reverseByExp(label, anno.readConverterExp(), anno.separator());
+ } else {
+ value = SpringUtils.getBean(DictService.class).getDictValue(type, label, anno.separator());
+ }
+ return Convert.convert(contentProperty.getField().getType(), value);
+ }
+
+ @Override
+ public WriteCellData convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+ if (ObjectUtil.isNull(object)) {
+ return new WriteCellData<>("");
+ }
+ ExcelDictFormat anno = getAnnotation(contentProperty.getField());
+ String type = anno.dictType();
+ String value = Convert.toStr(object);
+ String label;
+ if (StringUtils.isBlank(type)) {
+ label = ExcelUtil.convertByExp(value, anno.readConverterExp(), anno.separator());
+ } else {
+ label = SpringUtils.getBean(DictService.class).getDictLabel(type, value, anno.separator());
+ }
+ return new WriteCellData<>(label);
+ }
+
+ private ExcelDictFormat getAnnotation(Field field) {
+ return AnnotationUtil.getAnnotation(field, ExcelDictFormat.class);
+ }
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/controller/BaseController.java b/zhi-common/src/main/java/com/zhi/common/core/controller/BaseController.java
new file mode 100644
index 0000000..e1acdea
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/controller/BaseController.java
@@ -0,0 +1,69 @@
+package com.zhi.common.core.controller;
+
+import com.zhi.common.core.domain.R;
+import com.zhi.common.core.domain.model.LoginUser;
+import com.zhi.common.helper.LoginHelper;
+import com.zhi.common.utils.StringUtils;
+
+/**
+ * web层通用数据处理
+ *
+ * @author Lion Li
+ */
+public class BaseController {
+
+ /**
+ * 响应返回结果
+ *
+ * @param rows 影响行数
+ * @return 操作结果
+ */
+ protected R toAjax(int rows) {
+ return rows > 0 ? R.ok() : R.fail();
+ }
+
+ /**
+ * 响应返回结果
+ *
+ * @param result 结果
+ * @return 操作结果
+ */
+ protected R toAjax(boolean result) {
+ return result ? R.ok() : R.fail();
+ }
+
+ /**
+ * 页面跳转
+ */
+ public String redirect(String url) {
+ return StringUtils.format("redirect:{}", url);
+ }
+
+ /**
+ * 获取用户缓存信息
+ */
+ public LoginUser getLoginUser() {
+ return LoginHelper.getLoginUser();
+ }
+
+ /**
+ * 获取登录用户id
+ */
+ public Long getUserId() {
+ return LoginHelper.getUserId();
+ }
+
+ /**
+ * 获取登录部门id
+ */
+ public Long getDeptId() {
+ return LoginHelper.getDeptId();
+ }
+
+ /**
+ * 获取登录用户名
+ */
+ public String getUsername() {
+ return LoginHelper.getUsername();
+ }
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/BaseEntity.java b/zhi-common/src/main/java/com/zhi/common/core/domain/BaseEntity.java
new file mode 100644
index 0000000..7ef7726
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/BaseEntity.java
@@ -0,0 +1,63 @@
+package com.zhi.common.core.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Entity基类
+ *
+ * @author Lion Li
+ */
+
+@Data
+public class BaseEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 搜索值
+ */
+ @JsonIgnore
+ @TableField(exist = false)
+ private String searchValue;
+
+ /**
+ * 创建者
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private Date createTime;
+
+ /**
+ * 更新者
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date updateTime;
+
+ /**
+ * 请求参数
+ */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ @TableField(exist = false)
+ private Map params = new HashMap<>();
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/PageQuery.java b/zhi-common/src/main/java/com/zhi/common/core/domain/PageQuery.java
new file mode 100644
index 0000000..be20615
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/PageQuery.java
@@ -0,0 +1,112 @@
+package com.zhi.common.core.domain;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhi.common.exception.ServiceException;
+import com.zhi.common.utils.StringUtils;
+import com.zhi.common.utils.sql.SqlUtil;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 分页查询实体类
+ *
+ * @author Lion Li
+ */
+
+@Data
+public class PageQuery implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 分页大小
+ */
+ private Integer pageSize;
+
+ /**
+ * 当前页数
+ */
+ private Integer pageNum;
+
+ /**
+ * 排序列
+ */
+ private String orderByColumn;
+
+ /**
+ * 排序的方向desc或者asc
+ */
+ private String isAsc;
+
+ /**
+ * 当前记录起始索引 默认值
+ */
+ public static final int DEFAULT_PAGE_NUM = 1;
+
+ /**
+ * 每页显示记录数 默认值 默认查全部
+ */
+ public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;
+
+ public Page build() {
+ Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM);
+ Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE);
+ if (pageNum <= 0) {
+ pageNum = DEFAULT_PAGE_NUM;
+ }
+ Page page = new Page<>(pageNum, pageSize);
+ List orderItems = buildOrderItem();
+ if (CollUtil.isNotEmpty(orderItems)) {
+ page.addOrder(orderItems);
+ }
+ return page;
+ }
+
+ /**
+ * 构建排序
+ *
+ * 支持的用法如下:
+ * {isAsc:"asc",orderByColumn:"id"} order by id asc
+ * {isAsc:"asc",orderByColumn:"id,createTime"} order by id asc,create_time asc
+ * {isAsc:"desc",orderByColumn:"id,createTime"} order by id desc,create_time desc
+ * {isAsc:"asc,desc",orderByColumn:"id,createTime"} order by id asc,create_time desc
+ */
+ private List buildOrderItem() {
+ if (StringUtils.isBlank(orderByColumn) || StringUtils.isBlank(isAsc)) {
+ return null;
+ }
+ String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
+ orderBy = StringUtils.toUnderScoreCase(orderBy);
+
+ // 兼容前端排序类型
+ isAsc = StringUtils.replaceEach(isAsc, new String[]{"ascending", "descending"}, new String[]{"asc", "desc"});
+
+ String[] orderByArr = orderBy.split(",");
+ String[] isAscArr = isAsc.split(",");
+ if (isAscArr.length != 1 && isAscArr.length != orderByArr.length) {
+ throw new ServiceException("排序参数有误");
+ }
+
+ List list = new ArrayList<>();
+ // 每个字段各自排序
+ for (int i = 0; i < orderByArr.length; i++) {
+ String orderByStr = orderByArr[i];
+ String isAscStr = isAscArr.length == 1 ? isAscArr[0] : isAscArr[i];
+ if ("asc".equals(isAscStr)) {
+ list.add(OrderItem.asc(orderByStr));
+ } else if ("desc".equals(isAscStr)) {
+ list.add(OrderItem.desc(orderByStr));
+ } else {
+ throw new ServiceException("排序参数有误");
+ }
+ }
+ return list;
+ }
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/R.java b/zhi-common/src/main/java/com/zhi/common/core/domain/R.java
new file mode 100644
index 0000000..176af3f
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/R.java
@@ -0,0 +1,107 @@
+package com.zhi.common.core.domain;
+
+import com.zhi.common.constant.HttpStatus;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 响应信息主体
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class R implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 成功
+ */
+ public static final int SUCCESS = 200;
+
+ /**
+ * 失败
+ */
+ public static final int FAIL = 500;
+
+ private int code;
+
+ private String msg;
+
+ private T data;
+
+ public static R ok() {
+ return restResult(null, SUCCESS, "操作成功");
+ }
+
+ public static R ok(T data) {
+ return restResult(data, SUCCESS, "操作成功");
+ }
+
+ public static R ok(String msg) {
+ return restResult(null, SUCCESS, msg);
+ }
+
+ public static R ok(String msg, T data) {
+ return restResult(data, SUCCESS, msg);
+ }
+
+ public static R fail() {
+ return restResult(null, FAIL, "操作失败");
+ }
+
+ public static R fail(String msg) {
+ return restResult(null, FAIL, msg);
+ }
+
+ public static R fail(T data) {
+ return restResult(data, FAIL, "操作失败");
+ }
+
+ public static R fail(String msg, T data) {
+ return restResult(data, FAIL, msg);
+ }
+
+ public static R fail(int code, String msg) {
+ return restResult(null, code, msg);
+ }
+
+ /**
+ * 返回警告消息
+ *
+ * @param msg 返回内容
+ * @return 警告消息
+ */
+ public static R warn(String msg) {
+ return restResult(null, HttpStatus.WARN, msg);
+ }
+
+ /**
+ * 返回警告消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 警告消息
+ */
+ public static R warn(String msg, T data) {
+ return restResult(data, HttpStatus.WARN, msg);
+ }
+
+ private static R restResult(T data, int code, String msg) {
+ R r = new R<>();
+ r.setCode(code);
+ r.setData(data);
+ r.setMsg(msg);
+ return r;
+ }
+
+ public static Boolean isError(R ret) {
+ return !isSuccess(ret);
+ }
+
+ public static Boolean isSuccess(R ret) {
+ return R.SUCCESS == ret.getCode();
+ }
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/TreeEntity.java b/zhi-common/src/main/java/com/zhi/common/core/domain/TreeEntity.java
new file mode 100644
index 0000000..0a91872
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/TreeEntity.java
@@ -0,0 +1,39 @@
+package com.zhi.common.core.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tree基类
+ *
+ * @author Lion Li
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TreeEntity extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 父菜单名称
+ */
+ @TableField(exist = false)
+ private String parentName;
+
+ /**
+ * 父菜单ID
+ */
+ private Long parentId;
+
+ /**
+ * 子部门
+ */
+ @TableField(exist = false)
+ private List children = new ArrayList<>();
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/dto/OperLogDTO.java b/zhi-common/src/main/java/com/zhi/common/core/domain/dto/OperLogDTO.java
new file mode 100644
index 0000000..b9ea5c6
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/dto/OperLogDTO.java
@@ -0,0 +1,104 @@
+package com.zhi.common.core.domain.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 通用操作日志实体
+ *
+ * @author Lion Li
+ */
+
+@Data
+public class OperLogDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 日志主键
+ */
+ private Long operId;
+
+ /**
+ * 操作模块
+ */
+ private String title;
+
+ /**
+ * 业务类型(0其它 1新增 2修改 3删除)
+ */
+ private Integer businessType;
+
+ /**
+ * 业务类型数组
+ */
+ private Integer[] businessTypes;
+
+ /**
+ * 请求方法
+ */
+ private String method;
+
+ /**
+ * 请求方式
+ */
+ private String requestMethod;
+
+ /**
+ * 操作类别(0其它 1后台用户 2手机端用户)
+ */
+ private Integer operatorType;
+
+ /**
+ * 操作人员
+ */
+ private String operName;
+
+ /**
+ * 部门名称
+ */
+ private String deptName;
+
+ /**
+ * 请求url
+ */
+ private String operUrl;
+
+ /**
+ * 操作地址
+ */
+ private String operIp;
+
+ /**
+ * 操作地点
+ */
+ private String operLocation;
+
+ /**
+ * 请求参数
+ */
+ private String operParam;
+
+ /**
+ * 返回参数
+ */
+ private String jsonResult;
+
+ /**
+ * 操作状态(0正常 1异常)
+ */
+ private Integer status;
+
+ /**
+ * 错误消息
+ */
+ private String errorMsg;
+
+ /**
+ * 操作时间
+ */
+ private Date operTime;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/dto/RoleDTO.java b/zhi-common/src/main/java/com/zhi/common/core/domain/dto/RoleDTO.java
new file mode 100644
index 0000000..1d12586
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/dto/RoleDTO.java
@@ -0,0 +1,38 @@
+package com.zhi.common.core.domain.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 角色
+ *
+ * @author Lion Li
+ */
+
+@Data
+@NoArgsConstructor
+public class RoleDTO implements Serializable {
+
+ /**
+ * 角色ID
+ */
+ private Long roleId;
+
+ /**
+ * 角色名称
+ */
+ private String roleName;
+
+ /**
+ * 角色权限
+ */
+ private String roleKey;
+
+ /**
+ * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)
+ */
+ private String dataScope;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/dto/UserOnlineDTO.java b/zhi-common/src/main/java/com/zhi/common/core/domain/dto/UserOnlineDTO.java
new file mode 100644
index 0000000..430d4a3
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/dto/UserOnlineDTO.java
@@ -0,0 +1,60 @@
+package com.zhi.common.core.domain.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 当前在线会话
+ *
+ * @author ruoyi
+ */
+
+@Data
+@NoArgsConstructor
+public class UserOnlineDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 会话编号
+ */
+ private String tokenId;
+
+ /**
+ * 部门名称
+ */
+ private String deptName;
+
+ /**
+ * 用户名称
+ */
+ private String userName;
+
+ /**
+ * 登录IP地址
+ */
+ private String ipaddr;
+
+ /**
+ * 登录地址
+ */
+ private String loginLocation;
+
+ /**
+ * 浏览器类型
+ */
+ private String browser;
+
+ /**
+ * 操作系统
+ */
+ private String os;
+
+ /**
+ * 登录时间
+ */
+ private Long loginTime;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysDept.java b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysDept.java
new file mode 100644
index 0000000..d1974ec
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysDept.java
@@ -0,0 +1,80 @@
+package com.zhi.common.core.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhi.common.core.domain.TreeEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+/**
+ * 部门表 sys_dept
+ *
+ * @author Lion Li
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_dept")
+public class SysDept extends TreeEntity {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 部门ID
+ */
+ @TableId(value = "dept_id")
+ private Long deptId;
+
+ /**
+ * 部门名称
+ */
+ @NotBlank(message = "部门名称不能为空")
+ @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
+ private String deptName;
+
+ /**
+ * 显示顺序
+ */
+ @NotNull(message = "显示顺序不能为空")
+ private Integer orderNum;
+
+ /**
+ * 负责人
+ */
+ private String leader;
+
+ /**
+ * 联系电话
+ */
+ @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
+ private String phone;
+
+ /**
+ * 邮箱
+ */
+ @Email(message = "邮箱格式不正确")
+ @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+ private String email;
+
+ /**
+ * 部门状态:0正常,1停用
+ */
+ private String status;
+
+ /**
+ * 删除标志(0代表存在 2代表删除)
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 祖级列表
+ */
+ private String ancestors;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysDictData.java b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysDictData.java
new file mode 100644
index 0000000..803ac85
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysDictData.java
@@ -0,0 +1,100 @@
+package com.zhi.common.core.domain.entity;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhi.common.annotation.ExcelDictFormat;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.convert.ExcelDictConvert;
+import com.zhi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+/**
+ * 字典数据表 sys_dict_data
+ *
+ * @author Lion Li
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_dict_data")
+@ExcelIgnoreUnannotated
+public class SysDictData extends BaseEntity {
+
+ /**
+ * 字典编码
+ */
+ @ExcelProperty(value = "字典编码")
+ @TableId(value = "dict_code")
+ private Long dictCode;
+
+ /**
+ * 字典排序
+ */
+ @ExcelProperty(value = "字典排序")
+ private Integer dictSort;
+
+ /**
+ * 字典标签
+ */
+ @ExcelProperty(value = "字典标签")
+ @NotBlank(message = "字典标签不能为空")
+ @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符")
+ private String dictLabel;
+
+ /**
+ * 字典键值
+ */
+ @ExcelProperty(value = "字典键值")
+ @NotBlank(message = "字典键值不能为空")
+ @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
+ private String dictValue;
+
+ /**
+ * 字典类型
+ */
+ @ExcelProperty(value = "字典类型")
+ @NotBlank(message = "字典类型不能为空")
+ @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符")
+ private String dictType;
+
+ /**
+ * 样式属性(其他样式扩展)
+ */
+ @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
+ private String cssClass;
+
+ /**
+ * 表格字典样式
+ */
+ private String listClass;
+
+ /**
+ * 是否默认(Y是 N否)
+ */
+ @ExcelProperty(value = "是否默认", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_yes_no")
+ private String isDefault;
+
+ /**
+ * 状态(0正常 1停用)
+ */
+ @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_normal_disable")
+ private String status;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ public boolean getDefault() {
+ return UserConstants.YES.equals(this.isDefault);
+ }
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysDictType.java b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysDictType.java
new file mode 100644
index 0000000..5cfc4e5
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysDictType.java
@@ -0,0 +1,65 @@
+package com.zhi.common.core.domain.entity;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhi.common.annotation.ExcelDictFormat;
+import com.zhi.common.convert.ExcelDictConvert;
+import com.zhi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+
+/**
+ * 字典类型表 sys_dict_type
+ *
+ * @author Lion Li
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_dict_type")
+@ExcelIgnoreUnannotated
+public class SysDictType extends BaseEntity {
+
+ /**
+ * 字典主键
+ */
+ @ExcelProperty(value = "字典主键")
+ @TableId(value = "dict_id")
+ private Long dictId;
+
+ /**
+ * 字典名称
+ */
+ @ExcelProperty(value = "字典名称")
+ @NotBlank(message = "字典名称不能为空")
+ @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符")
+ private String dictName;
+
+ /**
+ * 字典类型
+ */
+ @ExcelProperty(value = "字典类型")
+ @NotBlank(message = "字典类型不能为空")
+ @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
+ @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)")
+ private String dictType;
+
+ /**
+ * 状态(0正常 1停用)
+ */
+ @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_normal_disable")
+ private String status;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysMenu.java b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysMenu.java
new file mode 100644
index 0000000..518ea3c
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysMenu.java
@@ -0,0 +1,104 @@
+package com.zhi.common.core.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.zhi.common.core.domain.TreeEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+/**
+ * 菜单权限表 sys_menu
+ *
+ * @author Lion Li
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_menu")
+public class SysMenu extends TreeEntity {
+
+ /**
+ * 菜单ID
+ */
+ @TableId(value = "menu_id")
+ private Long menuId;
+
+ /**
+ * 菜单名称
+ */
+ @NotBlank(message = "菜单名称不能为空")
+ @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
+ private String menuName;
+
+ /**
+ * 显示顺序
+ */
+ @NotNull(message = "显示顺序不能为空")
+ private Integer orderNum;
+
+ /**
+ * 路由地址
+ */
+ @Size(min = 0, max = 200, message = "路由地址不能超过200个字符")
+ private String path;
+
+ /**
+ * 组件路径
+ */
+ @Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
+ private String component;
+
+ /**
+ * 路由参数
+ */
+ private String queryParam;
+
+ /**
+ * 是否为外链(0是 1否)
+ */
+ private String isFrame;
+
+ /**
+ * 是否缓存(0缓存 1不缓存)
+ */
+ private String isCache;
+
+ /**
+ * 类型(M目录 C菜单 F按钮)
+ */
+ @NotBlank(message = "菜单类型不能为空")
+ private String menuType;
+
+ /**
+ * 显示状态(0显示 1隐藏)
+ */
+ private String visible;
+
+ /**
+ * 菜单状态(0正常 1停用)
+ */
+ private String status;
+
+ /**
+ * 权限字符串
+ */
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
+ private String perms;
+
+ /**
+ * 菜单图标
+ */
+ private String icon;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysRole.java b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysRole.java
new file mode 100644
index 0000000..73c4ee4
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysRole.java
@@ -0,0 +1,131 @@
+package com.zhi.common.core.domain.entity;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhi.common.annotation.ExcelDictFormat;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.convert.ExcelDictConvert;
+import com.zhi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.Set;
+
+/**
+ * 角色表 sys_role
+ *
+ * @author Lion Li
+ */
+
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_role")
+@ExcelIgnoreUnannotated
+public class SysRole extends BaseEntity {
+
+ /**
+ * 角色ID
+ */
+ @ExcelProperty(value = "角色序号")
+ @TableId(value = "role_id")
+ private Long roleId;
+
+ /**
+ * 角色名称
+ */
+ @ExcelProperty(value = "角色名称")
+ @NotBlank(message = "角色名称不能为空")
+ @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
+ private String roleName;
+
+ /**
+ * 角色权限
+ */
+ @ExcelProperty(value = "角色权限")
+ @NotBlank(message = "权限字符不能为空")
+ @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
+ private String roleKey;
+
+ /**
+ * 角色排序
+ */
+ @ExcelProperty(value = "角色排序")
+ @NotNull(message = "显示顺序不能为空")
+ private Integer roleSort;
+
+ /**
+ * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)
+ */
+ @ExcelProperty(value = "数据范围", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限")
+ private String dataScope;
+
+ /**
+ * 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示)
+ */
+ private Boolean menuCheckStrictly;
+
+ /**
+ * 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 )
+ */
+ private Boolean deptCheckStrictly;
+
+ /**
+ * 角色状态(0正常 1停用)
+ */
+ @ExcelProperty(value = "角色状态", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_normal_disable")
+ private String status;
+
+ /**
+ * 删除标志(0代表存在 2代表删除)
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 用户是否存在此角色标识 默认不存在
+ */
+ @TableField(exist = false)
+ private boolean flag = false;
+
+ /**
+ * 菜单组
+ */
+ @TableField(exist = false)
+ private Long[] menuIds;
+
+ /**
+ * 部门组(数据权限)
+ */
+ @TableField(exist = false)
+ private Long[] deptIds;
+
+ /**
+ * 角色菜单权限
+ */
+ @TableField(exist = false)
+ private Set permissions;
+
+ public SysRole(Long roleId) {
+ this.roleId = roleId;
+ }
+
+ public boolean isAdmin() {
+ return UserConstants.ADMIN_ID.equals(this.roleId);
+ }
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysUser.java b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysUser.java
new file mode 100644
index 0000000..9dbe361
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/entity/SysUser.java
@@ -0,0 +1,171 @@
+package com.zhi.common.core.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.zhi.common.annotation.Sensitive;
+import com.zhi.common.constant.UserConstants;
+import com.zhi.common.core.domain.BaseEntity;
+import com.zhi.common.enums.SensitiveStrategy;
+import com.zhi.common.xss.Xss;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 用户对象 sys_user
+ *
+ * @author Lion Li
+ */
+
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_user")
+public class SysUser extends BaseEntity {
+
+ /**
+ * 用户ID
+ */
+ @TableId(value = "user_id" ,type = IdType.AUTO)
+ private Long userId;
+
+ /**
+ * 部门ID
+ */
+ private Long deptId;
+
+ /**
+ * 用户账号
+ */
+ @Xss(message = "用户账号不能包含脚本字符")
+ @NotBlank(message = "用户账号不能为空")
+ @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
+ private String userName;
+
+ /**
+ * 用户昵称
+ */
+ @Xss(message = "用户昵称不能包含脚本字符")
+ @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
+ private String nickName;
+
+ /**
+ * 用户类型(sys_user系统用户)
+ */
+ private String userType;
+
+ /**
+ * 用户邮箱
+ */
+ @Sensitive(strategy = SensitiveStrategy.EMAIL)
+ @Email(message = "邮箱格式不正确")
+ @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+ private String email;
+
+ /**
+ * 手机号码
+ */
+ @Sensitive(strategy = SensitiveStrategy.PHONE)
+ private String phonenumber;
+
+ /**
+ * 用户性别
+ */
+ private String sex;
+
+ /**
+ * 用户头像
+ */
+ private String avatar;
+
+ /**
+ * 密码
+ */
+ @TableField(
+ insertStrategy = FieldStrategy.NOT_EMPTY,
+ updateStrategy = FieldStrategy.NOT_EMPTY,
+ whereStrategy = FieldStrategy.NOT_EMPTY
+ )
+ private String password;
+
+ /**
+ * 帐号状态(0正常 1停用)
+ */
+ private String status;
+
+ /**
+ * 删除标志(0代表存在 2代表删除)
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 最后登录IP
+ */
+ private String loginIp;
+
+ /**
+ * 最后登录时间
+ */
+ private Date loginDate;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 个人简介
+ */
+ private String intro;
+
+ /**
+ * 个人网站
+ */
+ private String webSite;
+
+ /**
+ * 部门对象
+ */
+ @TableField(exist = false)
+ private SysDept dept;
+
+ /**
+ * 角色对象
+ */
+ @TableField(exist = false)
+ private List roles;
+
+ /**
+ * 角色组
+ */
+ @TableField(exist = false)
+ private Long[] roleIds;
+
+ /**
+ * 岗位组
+ */
+ @TableField(exist = false)
+ private Long[] postIds;
+
+ /**
+ * 数据权限 当前角色ID
+ */
+ @TableField(exist = false)
+ private Long roleId;
+
+ public SysUser(Long userId) {
+ this.userId = userId;
+ }
+
+ public boolean isAdmin() {
+ return UserConstants.ADMIN_ID.equals(this.userId);
+ }
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/model/BlogLoginUser.java b/zhi-common/src/main/java/com/zhi/common/core/domain/model/BlogLoginUser.java
new file mode 100644
index 0000000..3eb7f91
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/model/BlogLoginUser.java
@@ -0,0 +1,54 @@
+package com.zhi.common.core.domain.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author ftz-lover
+ * @version 1.0
+ * @date 2023/1/15 13:07
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BlogLoginUser implements Serializable {
+
+ /**
+ * 用户id
+ */
+ private Long id;
+
+ /**
+ * 用户头像
+ */
+ private String avatar;
+
+ /**
+ * 用户邮件
+ */
+ private String email;
+
+ /**
+ * 用户ip
+ */
+ private String ipAddress;
+
+ /**
+ * 用户昵称
+ */
+ private String nickname;
+
+ /**
+ * 用户名
+ */
+ private String username;
+
+
+
+
+
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/model/LoginBody.java b/zhi-common/src/main/java/com/zhi/common/core/domain/model/LoginBody.java
new file mode 100644
index 0000000..6c3b8f5
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/model/LoginBody.java
@@ -0,0 +1,42 @@
+package com.zhi.common.core.domain.model;
+
+import com.zhi.common.constant.UserConstants;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 用户登录对象
+ *
+ * @author Lion Li
+ */
+
+@Data
+public class LoginBody {
+
+ /**
+ * 用户名
+ */
+ @NotBlank(message = "{user.username.not.blank}")
+ @Length(min = UserConstants.USERNAME_MIN_LENGTH, max = UserConstants.USERNAME_MAX_LENGTH, message = "{user.username.length.valid}")
+ private String username;
+
+ /**
+ * 用户密码
+ */
+ @NotBlank(message = "{user.password.not.blank}")
+ @Length(min = UserConstants.PASSWORD_MIN_LENGTH, max = UserConstants.PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
+ private String password;
+
+ /**
+ * 验证码
+ */
+ private String code;
+
+ /**
+ * 唯一标识
+ */
+ private String uuid;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/model/LoginUser.java b/zhi-common/src/main/java/com/zhi/common/core/domain/model/LoginUser.java
new file mode 100644
index 0000000..d814be4
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/model/LoginUser.java
@@ -0,0 +1,117 @@
+package com.zhi.common.core.domain.model;
+
+import com.zhi.common.core.domain.dto.RoleDTO;
+import com.zhi.common.helper.LoginHelper;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 登录用户身份权限
+ *
+ * @author Lion Li
+ */
+
+@Data
+@NoArgsConstructor
+public class LoginUser implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 用户ID
+ */
+ private Long userId;
+
+ /**
+ * 部门ID
+ */
+ private Long deptId;
+
+ /**
+ * 部门名
+ */
+ private String deptName;
+
+ /**
+ * 用户唯一标识
+ */
+ private String token;
+
+ /**
+ * 用户类型
+ */
+ private String userType;
+
+ /**
+ * 登录时间
+ */
+ private Long loginTime;
+
+ /**
+ * 过期时间
+ */
+ private Long expireTime;
+
+ /**
+ * 登录IP地址
+ */
+ private String ipaddr;
+
+ /**
+ * 登录地点
+ */
+ private String loginLocation;
+
+ /**
+ * 浏览器类型
+ */
+ private String browser;
+
+ /**
+ * 操作系统
+ */
+ private String os;
+
+ /**
+ * 菜单权限
+ */
+ private Set menuPermission;
+
+ /**
+ * 角色权限
+ */
+ private Set rolePermission;
+
+ /**
+ * 用户名
+ */
+ private String username;
+
+ /**
+ * 角色对象
+ */
+ private List roles;
+
+ /**
+ * 数据权限 当前角色ID
+ */
+ private Long roleId;
+
+ /**
+ * 获取登录id
+ */
+ public String getLoginId() {
+ if (userType == null) {
+ throw new IllegalArgumentException("用户类型不能为空");
+ }
+ if (userId == null) {
+ throw new IllegalArgumentException("用户ID不能为空");
+ }
+ return userType + LoginHelper.JOIN_CODE + userId;
+ }
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/model/RegisterBody.java b/zhi-common/src/main/java/com/zhi/common/core/domain/model/RegisterBody.java
new file mode 100644
index 0000000..c711d80
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/model/RegisterBody.java
@@ -0,0 +1,17 @@
+package com.zhi.common.core.domain.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 用户注册对象
+ *
+ * @author Lion Li
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class RegisterBody extends LoginBody {
+
+ private String userType;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/model/SmsLoginBody.java b/zhi-common/src/main/java/com/zhi/common/core/domain/model/SmsLoginBody.java
new file mode 100644
index 0000000..1639830
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/model/SmsLoginBody.java
@@ -0,0 +1,28 @@
+package com.zhi.common.core.domain.model;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 短信登录对象
+ *
+ * @author Lion Li
+ */
+
+@Data
+public class SmsLoginBody {
+
+ /**
+ * 用户名
+ */
+ @NotBlank(message = "{user.phonenumber.not.blank}")
+ private String phonenumber;
+
+ /**
+ * 用户密码
+ */
+ @NotBlank(message = "{sms.code.not.blank}")
+ private String smsCode;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/domain/model/XcxLoginUser.java b/zhi-common/src/main/java/com/zhi/common/core/domain/model/XcxLoginUser.java
new file mode 100644
index 0000000..09a7b86
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/domain/model/XcxLoginUser.java
@@ -0,0 +1,24 @@
+package com.zhi.common.core.domain.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * 小程序登录用户身份权限
+ *
+ * @author Lion Li
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+public class XcxLoginUser extends LoginUser {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * openid
+ */
+ private String openid;
+
+}
diff --git a/zhi-common/src/main/java/com/zhi/common/core/mapper/BaseMapperPlus.java b/zhi-common/src/main/java/com/zhi/common/core/mapper/BaseMapperPlus.java
new file mode 100644
index 0000000..08b4245
--- /dev/null
+++ b/zhi-common/src/main/java/com/zhi/common/core/mapper/BaseMapperPlus.java
@@ -0,0 +1,231 @@
+package com.zhi.common.core.mapper;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.enums.SqlMethod;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.zhi.common.utils.BeanCopyUtils;
+import org.apache.ibatis.binding.MapperMethod;
+import org.apache.ibatis.logging.Log;
+import org.apache.ibatis.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 自定义 Mapper 接口, 实现 自定义扩展
+ *
+ * @param mapper 泛型
+ * @param table 泛型
+ * @param vo 泛型
+ * @author Lion Li
+ * @since 2021-05-13
+ */
+@SuppressWarnings("unchecked")
+public interface BaseMapperPlus extends BaseMapper {
+
+ Log log = LogFactory.getLog(BaseMapperPlus.class);
+
+ int DEFAULT_BATCH_SIZE = 1000;
+
+ default Class currentVoClass() {
+ return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 2);
+ }
+
+ default Class currentModelClass() {
+ return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 1);
+ }
+
+ default Class currentMapperClass() {
+ return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 0);
+ }
+
+ default List selectList() {
+ return this.selectList(new QueryWrapper<>());
+ }
+
+ /**
+ * 批量插入
+ */
+ default boolean insertBatch(Collection entityList) {
+ return insertBatch(entityList, DEFAULT_BATCH_SIZE);
+ }
+
+ /**
+ * 批量更新
+ */
+ default boolean updateBatchById(Collection entityList) {
+ return updateBatchById(entityList, DEFAULT_BATCH_SIZE);
+ }
+
+ /**
+ * 批量插入或更新
+ */
+ default boolean insertOrUpdateBatch(Collection entityList) {
+ return insertOrUpdateBatch(entityList, DEFAULT_BATCH_SIZE);
+ }
+
+ /**
+ * 批量插入(包含限制条数)
+ */
+ default boolean insertBatch(Collection entityList, int batchSize) {
+ String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.INSERT_ONE);
+ return SqlHelper.executeBatch(this.currentModelClass(), log, entityList, batchSize,
+ (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
+ }
+
+ /**
+ * 批量更新(包含限制条数)
+ */
+ default boolean updateBatchById(Collection entityList, int batchSize) {
+ String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.UPDATE_BY_ID);
+ return SqlHelper.executeBatch(this.currentModelClass(), log, entityList, batchSize,
+ (sqlSession, entity) -> {
+ MapperMethod.ParamMap param = new MapperMethod.ParamMap<>();
+ param.put(Constants.ENTITY, entity);
+ sqlSession.update(sqlStatement, param);
+ });
+ }
+
+ /**
+ * 批量插入或更新(包含限制条数)
+ */
+ default boolean insertOrUpdateBatch(Collection entityList, int batchSize) {
+ TableInfo tableInfo = TableInfoHelper.getTableInfo(this.currentModelClass());
+ Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
+ String keyProperty = tableInfo.getKeyProperty();
+ Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
+ return SqlHelper.saveOrUpdateBatch(this.currentModelClass(), this.currentMapperClass(), log, entityList, batchSize, (sqlSession, entity) -> {
+ Object idVal = tableInfo.getPropertyValue(entity, keyProperty);
+ String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.SELECT_BY_ID);
+ return StringUtils.checkValNull(idVal)
+ || CollectionUtils.isEmpty(sqlSession.selectList(sqlStatement, entity));
+ }, (sqlSession, entity) -> {
+ MapperMethod.ParamMap param = new MapperMethod.ParamMap<>();
+ param.put(Constants.ENTITY, entity);
+ String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.UPDATE_BY_ID);
+ sqlSession.update(sqlStatement, param);
+ });
+ }
+
+ /**
+ * 插入或更新(包含限制条数)
+ */
+ default boolean insertOrUpdate(T entity) {
+ if (null != entity) {
+ TableInfo tableInfo = TableInfoHelper.getTableInfo(this.currentModelClass());
+ Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
+ String keyProperty = tableInfo.getKeyProperty();
+ Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
+ Object idVal = tableInfo.getPropertyValue(entity, tableInfo.getKeyProperty());
+ return StringUtils.checkValNull(idVal) || Objects.isNull(selectById((Serializable) idVal)) ? insert(entity) > 0 : updateById(entity) > 0;
+ }
+ return false;
+ }
+
+ default V selectVoById(Serializable id) {
+ return selectVoById(id, this.currentVoClass());
+ }
+
+ /**
+ * 根据 ID 查询
+ */
+ default C selectVoById(Serializable id, Class voClass) {
+ T obj = this.selectById(id);
+ if (ObjectUtil.isNull(obj)) {
+ return null;
+ }
+ return BeanCopyUtils.copy(obj, voClass);
+ }
+
+ default List selectVoBatchIds(Collection extends Serializable> idList) {
+ return selectVoBatchIds(idList, this.currentVoClass());
+ }
+
+ /**
+ * 查询(根据ID 批量查询)
+ */
+ default List selectVoBatchIds(Collection extends Serializable> idList, Class voClass) {
+ List