mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	发布 4.0.1
This commit is contained in:
		
							
								
								
									
										13
									
								
								.gitee/ISSUE_TEMPLATE.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.gitee/ISSUE_TEMPLATE.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
### 使用版本
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 问题描述
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 希望结果
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 重现步骤
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 报错信息(截图为主 请勿发混乱格式)
 | 
			
		||||
							
								
								
									
										7
									
								
								.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
### 更改目的 解决了什么问题
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 描述 做了哪些改动
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 测试 都做了哪些测试(未经过测试不采纳)
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/blob/master/LICENSE)
 | 
			
		||||
[](https://www.jetbrains.com/?from=RuoYi-Vue-Plus)
 | 
			
		||||
<br>
 | 
			
		||||
[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
 | 
			
		||||
[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
 | 
			
		||||
[]()
 | 
			
		||||
[]()
 | 
			
		||||
[]()
 | 
			
		||||
@@ -84,7 +84,7 @@
 | 
			
		||||
 | 
			
		||||
## 捐献作者
 | 
			
		||||
作者为兼职做开源,平时还需要工作,如果帮到了您可以请作者吃个盒饭  
 | 
			
		||||
<img src="https://images.gitee.com/uploads/images/2021/0525/101654_451e4523_1766278.jpeg" width="300px" height="450px" />
 | 
			
		||||
<img src="https://images.gitee.com/uploads/images/2022/0218/213734_b1b8197f_1766278.jpeg" width="300px" height="450px" />
 | 
			
		||||
<img src="https://images.gitee.com/uploads/images/2021/0525/101713_3d18b119_1766278.jpeg" width="300px" height="450px" />
 | 
			
		||||
 | 
			
		||||
## 业务功能
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								pom.xml
									
									
									
									
									
								
							@@ -6,15 +6,15 @@
 | 
			
		||||
 | 
			
		||||
    <groupId>com.ruoyi</groupId>
 | 
			
		||||
    <artifactId>ruoyi-vue-plus</artifactId>
 | 
			
		||||
    <version>4.0.0</version>
 | 
			
		||||
    <version>4.0.1</version>
 | 
			
		||||
 | 
			
		||||
    <name>RuoYi-Vue-Plus</name>
 | 
			
		||||
    <url>https://gitee.com/JavaLionLi/RuoYi-Vue-Plus</url>
 | 
			
		||||
    <description>RuoYi-Vue-Plus后台管理系统</description>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <ruoyi-vue-plus.version>4.0.0</ruoyi-vue-plus.version>
 | 
			
		||||
        <spring-boot.version>2.6.3</spring-boot.version>
 | 
			
		||||
        <ruoyi-vue-plus.version>4.0.1</ruoyi-vue-plus.version>
 | 
			
		||||
        <spring-boot.version>2.6.4</spring-boot.version>
 | 
			
		||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
			
		||||
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 | 
			
		||||
        <java.version>1.8</java.version>
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
        <satoken.version>1.29.0</satoken.version>
 | 
			
		||||
        <mybatis-plus.version>3.5.1</mybatis-plus.version>
 | 
			
		||||
        <p6spy.version>3.9.1</p6spy.version>
 | 
			
		||||
        <hutool.version>5.7.20</hutool.version>
 | 
			
		||||
        <hutool.version>5.7.21</hutool.version>
 | 
			
		||||
        <okhttp.version>4.9.2</okhttp.version>
 | 
			
		||||
        <spring-boot-admin.version>2.6.2</spring-boot-admin.version>
 | 
			
		||||
        <redisson.version>3.16.8</redisson.version>
 | 
			
		||||
@@ -42,10 +42,10 @@
 | 
			
		||||
        <jaxb.version>3.0.1</jaxb.version>
 | 
			
		||||
 | 
			
		||||
        <!-- OSS 配置 -->
 | 
			
		||||
        <qiniu.version>7.9.2</qiniu.version>
 | 
			
		||||
        <qiniu.version>7.9.3</qiniu.version>
 | 
			
		||||
        <aliyun.oss.version>3.14.0</aliyun.oss.version>
 | 
			
		||||
        <qcloud.cos.version>5.6.68</qcloud.cos.version>
 | 
			
		||||
        <minio.version>8.3.5</minio.version>
 | 
			
		||||
        <minio.version>8.3.7</minio.version>
 | 
			
		||||
 | 
			
		||||
        <!-- docker 配置 -->
 | 
			
		||||
        <docker.registry.url>localhost</docker.registry.url>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>ruoyi-vue-plus</artifactId>
 | 
			
		||||
        <groupId>com.ruoyi</groupId>
 | 
			
		||||
        <version>4.0.0</version>
 | 
			
		||||
        <version>4.0.1</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
    <artifactId>ruoyi-extend</artifactId>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>ruoyi-extend</artifactId>
 | 
			
		||||
        <groupId>com.ruoyi</groupId>
 | 
			
		||||
        <version>4.0.0</version>
 | 
			
		||||
        <version>4.0.1</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
    <packaging>jar</packaging>
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>ruoyi-extend</artifactId>
 | 
			
		||||
        <groupId>com.ruoyi</groupId>
 | 
			
		||||
        <version>4.0.0</version>
 | 
			
		||||
        <version>4.0.1</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <artifactId>ruoyi-xxl-job-admin</artifactId>
 | 
			
		||||
    <packaging>jar</packaging>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "ruoyi-vue-plus",
 | 
			
		||||
  "version": "4.0.0",
 | 
			
		||||
  "version": "4.0.1",
 | 
			
		||||
  "description": "RuoYi-Vue-Plus后台管理系统",
 | 
			
		||||
  "author": "LionLi",
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="upload-file">
 | 
			
		||||
    <el-upload
 | 
			
		||||
      multiple
 | 
			
		||||
      :action="uploadFileUrl"
 | 
			
		||||
      :before-upload="handleBeforeUpload"
 | 
			
		||||
      :file-list="fileList"
 | 
			
		||||
@@ -69,6 +70,8 @@ export default {
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      number: 0,
 | 
			
		||||
      uploadList: [],
 | 
			
		||||
      baseUrl: process.env.VUE_APP_BASE_API,
 | 
			
		||||
      uploadFileUrl: process.env.VUE_APP_BASE_API + "/system/oss/upload", // 上传的图片服务器地址
 | 
			
		||||
      headers: {
 | 
			
		||||
@@ -122,7 +125,7 @@ export default {
 | 
			
		||||
          return false;
 | 
			
		||||
        });
 | 
			
		||||
        if (!isTypeOk) {
 | 
			
		||||
          this.$message.error(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);
 | 
			
		||||
          this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
@@ -130,29 +133,37 @@ export default {
 | 
			
		||||
      if (this.fileSize) {
 | 
			
		||||
        const isLt = file.size / 1024 / 1024 < this.fileSize;
 | 
			
		||||
        if (!isLt) {
 | 
			
		||||
          this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`);
 | 
			
		||||
          this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`);
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      this.$modal.loading("正在上传文件,请稍候...");
 | 
			
		||||
      this.number++;
 | 
			
		||||
      return true;
 | 
			
		||||
    },
 | 
			
		||||
    // 文件个数超出
 | 
			
		||||
    handleExceed() {
 | 
			
		||||
      this.$message.error(`上传文件数量不能超过 ${this.limit} 个!`);
 | 
			
		||||
      this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
 | 
			
		||||
    },
 | 
			
		||||
    // 上传失败
 | 
			
		||||
    handleUploadError(err) {
 | 
			
		||||
      this.$message.error("上传失败, 请重试");
 | 
			
		||||
      this.$modal.msgError("上传图片失败,请重试");
 | 
			
		||||
      this.$modal.closeLoading()
 | 
			
		||||
    },
 | 
			
		||||
    // 上传成功回调
 | 
			
		||||
    handleUploadSuccess(res, file) {
 | 
			
		||||
      if (res.code === 200) {
 | 
			
		||||
        this.$message.success("上传成功");
 | 
			
		||||
        this.fileList.push({ name: res.data.fileName, url: res.data.url });
 | 
			
		||||
        this.$emit("input", this.listToString(this.fileList));
 | 
			
		||||
        this.uploadList.push({ name: res.data.fileName, url: res.data.url });
 | 
			
		||||
        if (this.uploadList.length === this.number) {
 | 
			
		||||
          this.fileList = this.fileList.concat(this.uploadList);
 | 
			
		||||
          this.uploadList = [];
 | 
			
		||||
          this.number = 0;
 | 
			
		||||
          this.$emit("input", this.listToString(this.fileList));
 | 
			
		||||
          this.$modal.closeLoading();
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.error(res.msg);
 | 
			
		||||
        this.loading.close();
 | 
			
		||||
        this.$modal.msgError(res.msg);
 | 
			
		||||
        this.$modal.closeLoading();
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 删除文件
 | 
			
		||||
@@ -163,7 +174,7 @@ export default {
 | 
			
		||||
    // 获取文件名称
 | 
			
		||||
    getFileName(name) {
 | 
			
		||||
      if (name.lastIndexOf("/") > -1) {
 | 
			
		||||
        return name.slice(name.lastIndexOf("/") + 1).toLowerCase();
 | 
			
		||||
        return name.slice(name.lastIndexOf("/") + 1);
 | 
			
		||||
      } else {
 | 
			
		||||
        return "";
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="component-upload-image">
 | 
			
		||||
    <el-upload
 | 
			
		||||
      multiple
 | 
			
		||||
      :action="uploadImgUrl"
 | 
			
		||||
      list-type="picture-card"
 | 
			
		||||
      :on-success="handleUploadSuccess"
 | 
			
		||||
@@ -18,7 +19,7 @@
 | 
			
		||||
    >
 | 
			
		||||
      <i class="el-icon-plus"></i>
 | 
			
		||||
    </el-upload>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    <!-- 上传提示 -->
 | 
			
		||||
    <div class="el-upload__tip" slot="tip" v-if="showTip">
 | 
			
		||||
      请上传
 | 
			
		||||
@@ -70,6 +71,8 @@ export default {
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      number: 0,
 | 
			
		||||
      uploadList: [],
 | 
			
		||||
      dialogImageUrl: "",
 | 
			
		||||
      dialogVisible: false,
 | 
			
		||||
      hideUpload: false,
 | 
			
		||||
@@ -121,12 +124,17 @@ export default {
 | 
			
		||||
    // 上传成功回调
 | 
			
		||||
    handleUploadSuccess(res) {
 | 
			
		||||
      if (res.code == 200) {
 | 
			
		||||
        this.fileList.push({ name: res.data.fileName, url: res.data.url });
 | 
			
		||||
        this.$emit("input", this.listToString(this.fileList));
 | 
			
		||||
        this.loading.close();
 | 
			
		||||
        this.uploadList.push({ name: res.data.fileName, url: res.data.url });
 | 
			
		||||
        if (this.uploadList.length === this.number) {
 | 
			
		||||
          this.fileList = this.fileList.concat(this.uploadList);
 | 
			
		||||
          this.uploadList = [];
 | 
			
		||||
          this.number = 0;
 | 
			
		||||
          this.$emit("input", this.listToString(this.fileList));
 | 
			
		||||
          this.$modal.closeLoading();
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.error(res.msg);
 | 
			
		||||
        this.loading.close();
 | 
			
		||||
        this.$modal.msgError(res.msg);
 | 
			
		||||
        this.$modal.closeLoading();
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 上传前loading加载
 | 
			
		||||
@@ -147,35 +155,27 @@ export default {
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!isImg) {
 | 
			
		||||
        this.$message.error(
 | 
			
		||||
          `文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`
 | 
			
		||||
        );
 | 
			
		||||
        this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`);
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
      if (this.fileSize) {
 | 
			
		||||
        const isLt = file.size / 1024 / 1024 < this.fileSize;
 | 
			
		||||
        if (!isLt) {
 | 
			
		||||
          this.$message.error(`上传头像图片大小不能超过 ${this.fileSize} MB!`);
 | 
			
		||||
          this.$modal.msgError(`上传头像图片大小不能超过 ${this.fileSize} MB!`);
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      this.loading = this.$loading({
 | 
			
		||||
        lock: true,
 | 
			
		||||
        text: "上传中",
 | 
			
		||||
        background: "rgba(0, 0, 0, 0.7)",
 | 
			
		||||
      });
 | 
			
		||||
      this.$modal.loading("正在上传图片,请稍候...");
 | 
			
		||||
      this.number++;
 | 
			
		||||
    },
 | 
			
		||||
    // 文件个数超出
 | 
			
		||||
    handleExceed() {
 | 
			
		||||
      this.$message.error(`上传文件数量不能超过 ${this.limit} 个!`);
 | 
			
		||||
      this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
 | 
			
		||||
    },
 | 
			
		||||
    // 上传失败
 | 
			
		||||
    handleUploadError(res) {
 | 
			
		||||
      this.$message({
 | 
			
		||||
        type: "error",
 | 
			
		||||
        message: "上传失败",
 | 
			
		||||
      });
 | 
			
		||||
      this.loading.close();
 | 
			
		||||
      this.$modal.msgError("上传图片失败,请重试");
 | 
			
		||||
      this.$modal.closeLoading();
 | 
			
		||||
    },
 | 
			
		||||
    // 预览
 | 
			
		||||
    handlePictureCardPreview(file) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div :class="{'hidden':hidden}" class="pagination-container">
 | 
			
		||||
    <el-pagination
 | 
			
		||||
      v-if="pageShow"
 | 
			
		||||
      :background="background"
 | 
			
		||||
      :current-page.sync="currentPage"
 | 
			
		||||
      :page-size.sync="pageSize"
 | 
			
		||||
@@ -64,7 +63,6 @@ export default {
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      pageShow: true
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
@@ -88,10 +86,7 @@ export default {
 | 
			
		||||
  methods: {
 | 
			
		||||
    handleSizeChange(val) {
 | 
			
		||||
      if (this.currentPage * val > this.total) {
 | 
			
		||||
        this.pageShow = false;
 | 
			
		||||
        this.$nextTick(() => {
 | 
			
		||||
          this.pageShow = true
 | 
			
		||||
        })
 | 
			
		||||
        this.currentPage = 1
 | 
			
		||||
      }
 | 
			
		||||
      this.$emit('pagination', { page: this.currentPage, limit: val })
 | 
			
		||||
      if (this.autoScroll) {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ 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 })
 | 
			
		||||
 | 
			
		||||
@@ -19,8 +20,10 @@ router.beforeEach((to, from, next) => {
 | 
			
		||||
      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) // 动态添加可访问路由表
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import { saveAs } from 'file-saver'
 | 
			
		||||
 | 
			
		||||
let downloadLoadingInstance;
 | 
			
		||||
// 是否显示重新登录
 | 
			
		||||
let isReloginShow;
 | 
			
		||||
export let isRelogin = { show: false };
 | 
			
		||||
 | 
			
		||||
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 | 
			
		||||
// 对应国际化资源文件后缀
 | 
			
		||||
@@ -78,23 +78,20 @@ service.interceptors.response.use(res => {
 | 
			
		||||
      return res.data
 | 
			
		||||
    }
 | 
			
		||||
    if (code === 401) {
 | 
			
		||||
      if (!isReloginShow) {
 | 
			
		||||
        isReloginShow = true;
 | 
			
		||||
      if (!isRelogin.show) {
 | 
			
		||||
        isRelogin.show = true;
 | 
			
		||||
        MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
 | 
			
		||||
          confirmButtonText: '重新登录',
 | 
			
		||||
          cancelButtonText: '取消',
 | 
			
		||||
          type: 'warning'
 | 
			
		||||
        }
 | 
			
		||||
      ).then(() => {
 | 
			
		||||
        isReloginShow = false;
 | 
			
		||||
        isRelogin.show = false;
 | 
			
		||||
        store.dispatch('LogOut').then(() => {
 | 
			
		||||
          // 如果是登录页面不需要重新加载
 | 
			
		||||
          if (window.location.hash.indexOf("#/login") != 0) {
 | 
			
		||||
            location.href = process.env.VUE_APP_CONTEXT_PATH + "index";
 | 
			
		||||
          }
 | 
			
		||||
          location.href = process.env.VUE_APP_CONTEXT_PATH + "index";
 | 
			
		||||
        })
 | 
			
		||||
      }).catch(() => {
 | 
			
		||||
        isReloginShow = false;
 | 
			
		||||
        isRelogin.show = false;
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
      return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,9 @@ export function addDateRange(params, dateRange, propName) {
 | 
			
		||||
 | 
			
		||||
// 回显数据字典 
 | 
			
		||||
export function selectDictLabel(datas, value) {
 | 
			
		||||
  if (value === undefined) {
 | 
			
		||||
    return "";
 | 
			
		||||
  }
 | 
			
		||||
  var actions = [];
 | 
			
		||||
  Object.keys(datas).some((key) => {
 | 
			
		||||
    if (datas[key].value == ('' + value)) {
 | 
			
		||||
@@ -77,23 +80,31 @@ export function selectDictLabel(datas, value) {
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
  if (actions.length === 0) {
 | 
			
		||||
    actions.push(value);
 | 
			
		||||
  }
 | 
			
		||||
  return actions.join('');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 回显数据字典(字符串数组)
 | 
			
		||||
export function selectDictLabels(datas, value, separator) {
 | 
			
		||||
  if(value === undefined) {
 | 
			
		||||
  if (value === undefined) {
 | 
			
		||||
    return "";
 | 
			
		||||
  }
 | 
			
		||||
  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);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -101,6 +101,29 @@
 | 
			
		||||
            <span>更新日志</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <el-collapse accordion>
 | 
			
		||||
            <el-collapse-item title="v4.0.1 - 2022-03-01">
 | 
			
		||||
              <ol>
 | 
			
		||||
                <li>update 图片上传 文件上传 支持并发上传</li>
 | 
			
		||||
                <li>update 组件ImageUpload支持多图同时选择上传</li>
 | 
			
		||||
                <li>udpate 组件fileUpload支持多文件同时选择上传</li>
 | 
			
		||||
                <li>update springboot 2.6.3 => 2.6.4</li>
 | 
			
		||||
                <li>update hutool 5.7.20 => 5.7.21</li>
 | 
			
		||||
                <li>update qiniu 7.9.2 => 7.9.3</li>
 | 
			
		||||
                <li>update minio 8.3.5 => 8.3.7</li>
 | 
			
		||||
                <li>update 优化 R 默认返回 msg</li>
 | 
			
		||||
                <li>update 增加 用户注册 用户类型默认值</li>
 | 
			
		||||
                <li>update 增加用户登出日志</li>
 | 
			
		||||
                <li>update 更新 多用户多设备的注释说明</li>
 | 
			
		||||
                <li>update 优化 是否为管理员的判断</li>
 | 
			
		||||
                <li>update 优化 页面若未匹配到字典标签则返回原字典值</li>
 | 
			
		||||
                <li>update 调整用户登录 将日志调整到最后 防止获取不到用户警告</li>
 | 
			
		||||
                <li>update 优化随机数生成方式 避免容易生成两个相同随机数的问题</li>
 | 
			
		||||
                <li>fix 修复代码生成 基于路径生成 路径为空问题</li>
 | 
			
		||||
                <li>fix 恢复误删 @Async 注解线程池配置类</li>
 | 
			
		||||
                <li>fix 修复 minio 适配 https 导致的问题</li>
 | 
			
		||||
                <li>fix 修复分页组件请求两次问题</li>
 | 
			
		||||
              </ol>
 | 
			
		||||
            </el-collapse-item>
 | 
			
		||||
            <el-collapse-item title="v4.0.0 - 2022-02-18">
 | 
			
		||||
              <ol>
 | 
			
		||||
                <li>[重大更新] 重写项目整体结构 数据处理下沉至Mapper符合MVC规范 减少循环依赖</li>
 | 
			
		||||
@@ -708,7 +731,7 @@ export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      // 版本号
 | 
			
		||||
      version: "4.0.0",
 | 
			
		||||
      version: "4.0.1",
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,8 @@ export default {
 | 
			
		||||
        password: "",
 | 
			
		||||
        confirmPassword: "",
 | 
			
		||||
        code: "",
 | 
			
		||||
        uuid: ""
 | 
			
		||||
        uuid: "",
 | 
			
		||||
        user_type: "sys_user"
 | 
			
		||||
      },
 | 
			
		||||
      registerRules: {
 | 
			
		||||
        username: [
 | 
			
		||||
 
 | 
			
		||||
@@ -206,7 +206,7 @@ export default {
 | 
			
		||||
        email: [
 | 
			
		||||
          {
 | 
			
		||||
            type: "email",
 | 
			
		||||
            message: "'请输入正确的邮箱地址",
 | 
			
		||||
            message: "请输入正确的邮箱地址",
 | 
			
		||||
            trigger: ["blur", "change"]
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
 
 | 
			
		||||
@@ -78,7 +78,7 @@
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
 | 
			
		||||
        <template slot-scope="scope">
 | 
			
		||||
          <el-button 
 | 
			
		||||
          <el-button
 | 
			
		||||
            size="mini"
 | 
			
		||||
            type="text"
 | 
			
		||||
            icon="el-icon-edit"
 | 
			
		||||
@@ -199,7 +199,7 @@
 | 
			
		||||
            <el-form-item>
 | 
			
		||||
              <el-input v-model="form.perms" placeholder="请输入权限标识" maxlength="100" />
 | 
			
		||||
              <span slot="label">
 | 
			
		||||
                <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasPermi('system:user:list')`)" placement="top">
 | 
			
		||||
                <el-tooltip content="控制器中定义的权限字符,如:@SaCheckPermission('system:user:list')" placement="top">
 | 
			
		||||
                <i class="el-icon-question"></i>
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
                权限字符
 | 
			
		||||
 
 | 
			
		||||
@@ -135,7 +135,7 @@
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item label="公告类型" prop="noticeType">
 | 
			
		||||
              <el-select v-model="form.noticeType" placeholder="请选择">
 | 
			
		||||
              <el-select v-model="form.noticeType" placeholder="请选择公告类型">
 | 
			
		||||
                <el-option
 | 
			
		||||
                  v-for="dict in dict.type.sys_notice_type"
 | 
			
		||||
                  :key="dict.value"
 | 
			
		||||
 
 | 
			
		||||
@@ -248,7 +248,7 @@
 | 
			
		||||
        <el-row>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item label="用户性别">
 | 
			
		||||
              <el-select v-model="form.sex" placeholder="请选择">
 | 
			
		||||
              <el-select v-model="form.sex" placeholder="请选择性别">
 | 
			
		||||
                <el-option
 | 
			
		||||
                  v-for="dict in dict.type.sys_user_sex"
 | 
			
		||||
                  :key="dict.value"
 | 
			
		||||
@@ -273,7 +273,7 @@
 | 
			
		||||
        <el-row>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item label="岗位">
 | 
			
		||||
              <el-select v-model="form.postIds" multiple placeholder="请选择">
 | 
			
		||||
              <el-select v-model="form.postIds" multiple placeholder="请选择岗位">
 | 
			
		||||
                <el-option
 | 
			
		||||
                  v-for="item in postOptions"
 | 
			
		||||
                  :key="item.postId"
 | 
			
		||||
@@ -286,7 +286,7 @@
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item label="角色">
 | 
			
		||||
              <el-select v-model="form.roleIds" multiple placeholder="请选择">
 | 
			
		||||
              <el-select v-model="form.roleIds" multiple placeholder="请选择角色">
 | 
			
		||||
                <el-option
 | 
			
		||||
                  v-for="item in roleOptions"
 | 
			
		||||
                  :key="item.roleId"
 | 
			
		||||
@@ -443,7 +443,7 @@ export default {
 | 
			
		||||
        email: [
 | 
			
		||||
          {
 | 
			
		||||
            type: "email",
 | 
			
		||||
            message: "'请输入正确的邮箱地址",
 | 
			
		||||
            message: "请输入正确的邮箱地址",
 | 
			
		||||
            trigger: ["blur", "change"]
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ export default {
 | 
			
		||||
          { required: true, message: "邮箱地址不能为空", trigger: "blur" },
 | 
			
		||||
          {
 | 
			
		||||
            type: "email",
 | 
			
		||||
            message: "'请输入正确的邮箱地址",
 | 
			
		||||
            message: "请输入正确的邮箱地址",
 | 
			
		||||
            trigger: ["blur", "change"]
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>ruoyi-vue-plus</artifactId>
 | 
			
		||||
        <groupId>com.ruoyi</groupId>
 | 
			
		||||
        <version>4.0.0</version>
 | 
			
		||||
        <version>4.0.1</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
    <packaging>jar</packaging>
 | 
			
		||||
 
 | 
			
		||||
@@ -41,14 +41,14 @@ public class UnsignedMathGenerator implements CodeGenerator {
 | 
			
		||||
    @Override
 | 
			
		||||
    public String generate() {
 | 
			
		||||
        final int limit = getLimit();
 | 
			
		||||
        int min = RandomUtil.randomInt(limit);
 | 
			
		||||
        int max = RandomUtil.randomInt(min, limit);
 | 
			
		||||
        String number1 = Integer.toString(max);
 | 
			
		||||
        String number2 = Integer.toString(min);
 | 
			
		||||
        number1 = StringUtils.rightPad(number1, this.numberLength, CharUtil.SPACE);
 | 
			
		||||
        number2 = StringUtils.rightPad(number2, this.numberLength, CharUtil.SPACE);
 | 
			
		||||
        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 number1 + RandomUtil.randomChar(OPERATORS) + number2 + '=';
 | 
			
		||||
        return max + RandomUtil.randomChar(OPERATORS) + min + '=';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -109,4 +109,10 @@ public interface UserConstants {
 | 
			
		||||
     */
 | 
			
		||||
    int PASSWORD_MIN_LENGTH = 5;
 | 
			
		||||
    int PASSWORD_MAX_LENGTH = 20;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 管理员ID
 | 
			
		||||
     */
 | 
			
		||||
    Long ADMIN_ID = 1L;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -38,11 +38,11 @@ public class R<T> implements Serializable {
 | 
			
		||||
    private T data;
 | 
			
		||||
 | 
			
		||||
    public static <T> R<T> ok() {
 | 
			
		||||
        return restResult(null, SUCCESS, null);
 | 
			
		||||
        return restResult(null, SUCCESS, "操作成功");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static <T> R<T> ok(T data) {
 | 
			
		||||
        return restResult(data, SUCCESS, null);
 | 
			
		||||
        return restResult(data, SUCCESS, "操作成功");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static <T> R<T> ok(String msg) {
 | 
			
		||||
@@ -54,7 +54,7 @@ public class R<T> implements Serializable {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static <T> R<T> fail() {
 | 
			
		||||
        return restResult(null, FAIL, null);
 | 
			
		||||
        return restResult(null, FAIL, "操作失败");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static <T> R<T> fail(String msg) {
 | 
			
		||||
@@ -62,7 +62,7 @@ public class R<T> implements Serializable {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static <T> R<T> fail(T data) {
 | 
			
		||||
        return restResult(data, FAIL, null);
 | 
			
		||||
        return restResult(data, FAIL, "操作失败");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static <T> R<T> fail(String msg, T data) {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableLogic;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import com.ruoyi.common.annotation.ExcelDictFormat;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.convert.ExcelDictConvert;
 | 
			
		||||
import com.ruoyi.common.core.domain.BaseEntity;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
@@ -132,11 +133,7 @@ public class SysRole extends BaseEntity {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "是否管理员")
 | 
			
		||||
    public boolean isAdmin() {
 | 
			
		||||
        return isAdmin(this.roleId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isAdmin(Long roleId) {
 | 
			
		||||
        return roleId != null && 1L == roleId;
 | 
			
		||||
        return UserConstants.ADMIN_ID.equals(this.roleId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.*;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonProperty;
 | 
			
		||||
import com.ruoyi.common.annotation.Sensitive;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.BaseEntity;
 | 
			
		||||
import com.ruoyi.common.enums.SensitiveStrategy;
 | 
			
		||||
import com.ruoyi.common.xss.Xss;
 | 
			
		||||
@@ -185,11 +186,7 @@ public class SysUser extends BaseEntity {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "是否管理员")
 | 
			
		||||
    public boolean isAdmin() {
 | 
			
		||||
        return isAdmin(this.userId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isAdmin(Long userId) {
 | 
			
		||||
        return userId != null && 1L == userId;
 | 
			
		||||
        return UserConstants.ADMIN_ID.equals(this.userId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package com.ruoyi.common.helper;
 | 
			
		||||
 | 
			
		||||
import cn.dev33.satoken.stp.StpUtil;
 | 
			
		||||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.ruoyi.common.enums.DeviceType;
 | 
			
		||||
import com.ruoyi.common.enums.UserType;
 | 
			
		||||
@@ -12,7 +13,13 @@ import lombok.NoArgsConstructor;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 登录鉴权助手
 | 
			
		||||
 * 为适配多端登录而封装
 | 
			
		||||
 * 
 | 
			
		||||
 * user_type 为 用户类型 同一个用户表 可以有多种用户类型 例如 pc,app
 | 
			
		||||
 * deivce 为 设备类型 同一个用户类型 可以有 多种设备类型 例如 web,ios
 | 
			
		||||
 * 可以组成 用户类型与设备类型多对多的 权限灵活控制
 | 
			
		||||
 *
 | 
			
		||||
 * 多用户体系 针对 多种用户类型 但权限控制不一致
 | 
			
		||||
 * 可以组成 多用户类型表与多设备类型 分别控制权限
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li
 | 
			
		||||
 */
 | 
			
		||||
@@ -26,7 +33,6 @@ public class LoginHelper {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录系统
 | 
			
		||||
     * 针对两套用户体系
 | 
			
		||||
     *
 | 
			
		||||
     * @param loginUser 登录用户信息
 | 
			
		||||
     */
 | 
			
		||||
@@ -38,7 +44,7 @@ public class LoginHelper {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录系统 基于 设备类型
 | 
			
		||||
     * 针对一套用户体系
 | 
			
		||||
     * 针对相同用户体系不同设备
 | 
			
		||||
     *
 | 
			
		||||
     * @param loginUser 登录用户信息
 | 
			
		||||
     */
 | 
			
		||||
@@ -125,12 +131,11 @@ public class LoginHelper {
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public static boolean isAdmin(Long userId) {
 | 
			
		||||
        return userId != null && 1L == userId;
 | 
			
		||||
        return UserConstants.ADMIN_ID.equals(userId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isAdmin() {
 | 
			
		||||
        Long userId = getUserId();
 | 
			
		||||
        return userId != null && 1L == userId;
 | 
			
		||||
        return isAdmin(getUserId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,11 @@ import org.apache.commons.lang3.time.DateFormatUtils;
 | 
			
		||||
import java.lang.management.ManagementFactory;
 | 
			
		||||
import java.text.ParseException;
 | 
			
		||||
import java.text.SimpleDateFormat;
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.time.LocalTime;
 | 
			
		||||
import java.time.ZoneId;
 | 
			
		||||
import java.time.ZonedDateTime;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -116,6 +121,14 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
 | 
			
		||||
        return new Date(time);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算相差天数
 | 
			
		||||
     */
 | 
			
		||||
    public static int differentDaysByMillisecond(Date date1, Date date2)
 | 
			
		||||
    {
 | 
			
		||||
        return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算两个时间差
 | 
			
		||||
     */
 | 
			
		||||
@@ -136,4 +149,21 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
 | 
			
		||||
        // long sec = diff % nd % nh % nm / ns;
 | 
			
		||||
        return day + "天" + hour + "小时" + min + "分钟";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 增加 LocalDateTime ==> Date
 | 
			
		||||
     */
 | 
			
		||||
    public static Date toDate(LocalDateTime temporalAccessor) {
 | 
			
		||||
        ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
 | 
			
		||||
        return Date.from(zdt.toInstant());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 增加 LocalDate ==> Date
 | 
			
		||||
     */
 | 
			
		||||
    public static Date toDate(LocalDate temporalAccessor) {
 | 
			
		||||
        LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
 | 
			
		||||
        ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
 | 
			
		||||
        return Date.from(zdt.toInstant());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
 | 
			
		||||
     * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br>
 | 
			
		||||
     * 例:<br>
 | 
			
		||||
     * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b<br>
 | 
			
		||||
     * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
 | 
			
		||||
     * 转义{}: format("this is \\{} for {}", "a", "b") -> this is {} for a<br>
 | 
			
		||||
     * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
 | 
			
		||||
     *
 | 
			
		||||
     * @param template 文本模板,被替换的部分用 {} 表示
 | 
			
		||||
@@ -231,4 +231,43 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
 | 
			
		||||
        return matcher.match(pattern, url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 数字左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 最后size个字符。
 | 
			
		||||
     *
 | 
			
		||||
     * @param num 数字对象
 | 
			
		||||
     * @param size 字符串指定长度
 | 
			
		||||
     * @return 返回数字的字符串格式,该字符串为指定长度。
 | 
			
		||||
     */
 | 
			
		||||
    public static final String padl(final Number num, final int size) {
 | 
			
		||||
        return padl(num.toString(), size, '0');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 字符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。
 | 
			
		||||
     *
 | 
			
		||||
     * @param s 原始字符串
 | 
			
		||||
     * @param size 字符串指定长度
 | 
			
		||||
     * @param c 用于补齐的字符
 | 
			
		||||
     * @return 返回指定长度的字符串,由原字符串左补齐或截取得到。
 | 
			
		||||
     */
 | 
			
		||||
    public static final String padl(final String s, final int size, final char c) {
 | 
			
		||||
        final StringBuilder sb = new StringBuilder(size);
 | 
			
		||||
        if (s != null) {
 | 
			
		||||
            final int len = s.length();
 | 
			
		||||
            if (s.length() <= size) {
 | 
			
		||||
                for (int i = size - len; i > 0; i--) {
 | 
			
		||||
                    sb.append(c);
 | 
			
		||||
                }
 | 
			
		||||
                sb.append(s);
 | 
			
		||||
            } else {
 | 
			
		||||
                return s.substring(len - size, len);
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            for (int i = size; i > 0; i--) {
 | 
			
		||||
                sb.append(c);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return sb.toString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,6 @@ public class FileUtils extends FileUtil {
 | 
			
		||||
     *
 | 
			
		||||
     * @param response     响应对象
 | 
			
		||||
     * @param realFileName 真实文件名
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException {
 | 
			
		||||
        String percentEncodedFileName = percentEncode(realFileName);
 | 
			
		||||
@@ -35,7 +34,6 @@ public class FileUtils extends FileUtil {
 | 
			
		||||
            .append("utf-8''")
 | 
			
		||||
            .append(percentEncodedFileName);
 | 
			
		||||
 | 
			
		||||
        response.addHeader("Access-Control-Allow-Origin", "*");
 | 
			
		||||
        response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename");
 | 
			
		||||
        response.setHeader("Content-disposition", contentDispositionValue.toString());
 | 
			
		||||
        response.setHeader("download-filename", percentEncodedFileName);
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,54 @@
 | 
			
		||||
package com.ruoyi.framework.config;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.util.ArrayUtil;
 | 
			
		||||
import com.ruoyi.common.exception.ServiceException;
 | 
			
		||||
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Qualifier;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.scheduling.annotation.AsyncConfigurerSupport;
 | 
			
		||||
import org.springframework.scheduling.annotation.EnableAsync;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.concurrent.Executor;
 | 
			
		||||
import java.util.concurrent.ScheduledExecutorService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 异步配置
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li
 | 
			
		||||
 */
 | 
			
		||||
@EnableAsync
 | 
			
		||||
@Configuration
 | 
			
		||||
public class AsyncConfig extends AsyncConfigurerSupport {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    @Qualifier("scheduledExecutorService")
 | 
			
		||||
    private ScheduledExecutorService scheduledExecutorService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 自定义 @Async 注解使用系统线程池
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public Executor getAsyncExecutor() {
 | 
			
		||||
        return scheduledExecutorService;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 异步执行异常处理
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
 | 
			
		||||
        return (throwable, method, objects) -> {
 | 
			
		||||
            throwable.printStackTrace();
 | 
			
		||||
            StringBuilder sb = new StringBuilder();
 | 
			
		||||
            sb.append("Exception message - ").append(throwable.getMessage())
 | 
			
		||||
                .append(", Method name - ").append(method.getName());
 | 
			
		||||
            if (ArrayUtil.isNotEmpty(objects)) {
 | 
			
		||||
                sb.append(", Parameter value - ").append(Arrays.toString(objects));
 | 
			
		||||
            }
 | 
			
		||||
            throw new ServiceException(sb.toString());
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -79,7 +79,7 @@ public class PlusDataPermissionHandler {
 | 
			
		||||
            DataPermissionHelper.setVariable("user", currentUser);
 | 
			
		||||
        }
 | 
			
		||||
        // 如果是超级管理员,则不过滤数据
 | 
			
		||||
        if (ObjectUtil.isNull(currentUser) || LoginHelper.isAdmin(currentUser.getUserId())) {
 | 
			
		||||
        if (LoginHelper.isAdmin()) {
 | 
			
		||||
            return where;
 | 
			
		||||
        }
 | 
			
		||||
        String dataFilterSql = buildDataFilter(dataColumns, isSelect);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,6 @@
 | 
			
		||||
package com.ruoyi.generator.domain;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableField;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableId;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.*;
 | 
			
		||||
import com.ruoyi.common.constant.GenConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.BaseEntity;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
@@ -102,6 +100,7 @@ public class GenTable extends BaseEntity {
 | 
			
		||||
    /**
 | 
			
		||||
     * 生成路径(不填默认项目路径)
 | 
			
		||||
     */
 | 
			
		||||
    @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
 | 
			
		||||
    private String genPath;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -244,14 +244,28 @@ public class VelocityUtils {
 | 
			
		||||
    public static String getDicts(GenTable genTable) {
 | 
			
		||||
        List<GenTableColumn> columns = genTable.getColumns();
 | 
			
		||||
        Set<String> dicts = new HashSet<String>();
 | 
			
		||||
        addDicts(dicts, columns);
 | 
			
		||||
        if (ObjectUtil.isNotNull(genTable.getSubTable())) {
 | 
			
		||||
            List<GenTableColumn> subColumns = genTable.getSubTable().getColumns();
 | 
			
		||||
            addDicts(dicts, subColumns);
 | 
			
		||||
        }
 | 
			
		||||
        return StringUtils.join(dicts, ", ");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 添加字典列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param dicts 字典列表
 | 
			
		||||
     * @param columns 列集合
 | 
			
		||||
     */
 | 
			
		||||
    public static void addDicts(Set<String> dicts, List<GenTableColumn> columns) {
 | 
			
		||||
        for (GenTableColumn column : columns) {
 | 
			
		||||
            if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny(
 | 
			
		||||
                column.getHtmlType(),
 | 
			
		||||
                new String[]{GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX})) {
 | 
			
		||||
                new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) {
 | 
			
		||||
                dicts.add("'" + column.getDictType() + "'");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return StringUtils.join(dicts, ", ");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -87,16 +87,19 @@ public class SysLoginService {
 | 
			
		||||
 | 
			
		||||
        // 登录成功 清空错误次数
 | 
			
		||||
        RedisUtils.deleteObject(Constants.LOGIN_ERROR + username);
 | 
			
		||||
        asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request);
 | 
			
		||||
        recordLoginInfo(user.getUserId(), username);
 | 
			
		||||
 | 
			
		||||
        LoginUser loginUser = buildLoginUser(user);
 | 
			
		||||
 | 
			
		||||
        // 生成token
 | 
			
		||||
        LoginHelper.loginByDevice(loginUser, DeviceType.PC);
 | 
			
		||||
 | 
			
		||||
        asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request);
 | 
			
		||||
        recordLoginInfo(user.getUserId(), username);
 | 
			
		||||
        return StpUtil.getTokenValue();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void logout(String loginName) {
 | 
			
		||||
        asyncService.recordLogininfor(loginName, Constants.LOGOUT, MessageUtils.message("user.logout.success"), ServletUtils.getRequest());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 校验验证码
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -152,7 +152,7 @@ public class SysDeptServiceImpl implements ISysDeptService {
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void checkDeptDataScope(Long deptId) {
 | 
			
		||||
        if (!SysUser.isAdmin(LoginHelper.getUserId())) {
 | 
			
		||||
        if (!LoginHelper.isAdmin()) {
 | 
			
		||||
            SysDept dept = new SysDept();
 | 
			
		||||
            dept.setDeptId(deptId);
 | 
			
		||||
            List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept);
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,6 @@ import com.ruoyi.common.constant.Constants;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysMenu;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysRole;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.helper.LoginHelper;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.utils.TreeBuildUtils;
 | 
			
		||||
@@ -58,7 +57,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
 | 
			
		||||
    public List<SysMenu> selectMenuList(SysMenu menu, Long userId) {
 | 
			
		||||
        List<SysMenu> menuList = null;
 | 
			
		||||
        // 管理员显示所有菜单信息
 | 
			
		||||
        if (SysUser.isAdmin(userId)) {
 | 
			
		||||
        if (LoginHelper.isAdmin(userId)) {
 | 
			
		||||
            menuList = baseMapper.selectList(new LambdaQueryWrapper<SysMenu>()
 | 
			
		||||
                .like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName())
 | 
			
		||||
                .eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible())
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.PageQuery;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysRole;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.exception.ServiceException;
 | 
			
		||||
import com.ruoyi.common.helper.LoginHelper;
 | 
			
		||||
@@ -181,7 +180,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void checkRoleDataScope(Long roleId) {
 | 
			
		||||
        if (!SysUser.isAdmin(LoginHelper.getUserId())) {
 | 
			
		||||
        if (!LoginHelper.isAdmin()) {
 | 
			
		||||
            SysRole role = new SysRole();
 | 
			
		||||
            role.setRoleId(roleId);
 | 
			
		||||
            List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role);
 | 
			
		||||
 
 | 
			
		||||
@@ -206,7 +206,7 @@ public class SysUserServiceImpl implements ISysUserService {
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void checkUserDataScope(Long userId) {
 | 
			
		||||
        if (!SysUser.isAdmin(LoginHelper.getUserId())) {
 | 
			
		||||
        if (!LoginHelper.isAdmin()) {
 | 
			
		||||
            SysUser user = new SysUser();
 | 
			
		||||
            user.setUserId(userId);
 | 
			
		||||
            List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
 | 
			
		||||
 
 | 
			
		||||
@@ -65,6 +65,7 @@ public class SysLoginController {
 | 
			
		||||
    public R<Void> logout() {
 | 
			
		||||
        try {
 | 
			
		||||
            StpUtil.logout();
 | 
			
		||||
            loginService.logout(LoginHelper.getUsername());
 | 
			
		||||
        } catch (NotLoginException e) {
 | 
			
		||||
        }
 | 
			
		||||
        return R.ok("退出成功");
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import cn.hutool.http.HttpException;
 | 
			
		||||
import cn.hutool.http.HttpUtil;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.annotation.RepeatSubmit;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.PageQuery;
 | 
			
		||||
import com.ruoyi.common.core.domain.R;
 | 
			
		||||
@@ -70,7 +69,6 @@ public class SysOssController extends BaseController {
 | 
			
		||||
    })
 | 
			
		||||
    @SaCheckPermission("system:oss:upload")
 | 
			
		||||
    @Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
 | 
			
		||||
    @RepeatSubmit
 | 
			
		||||
    @PostMapping("/upload")
 | 
			
		||||
    public R<Map<String, String>> upload(@RequestPart("file") MultipartFile file) {
 | 
			
		||||
        if (ObjectUtil.isNull(file)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@ import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.excel.ExcelResult;
 | 
			
		||||
import com.ruoyi.common.helper.LoginHelper;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.system.domain.vo.SysUserExportVo;
 | 
			
		||||
@@ -109,7 +110,7 @@ public class SysUserController extends BaseController {
 | 
			
		||||
        userService.checkUserDataScope(userId);
 | 
			
		||||
        Map<String, Object> ajax = new HashMap<>();
 | 
			
		||||
        List<SysRole> roles = roleService.selectRoleAll();
 | 
			
		||||
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
 | 
			
		||||
        ajax.put("roles", LoginHelper.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
 | 
			
		||||
        ajax.put("posts", postService.selectPostAll());
 | 
			
		||||
        if (ObjectUtil.isNotNull(userId)) {
 | 
			
		||||
            SysUser sysUser = userService.selectUserById(userId);
 | 
			
		||||
@@ -213,7 +214,7 @@ public class SysUserController extends BaseController {
 | 
			
		||||
        List<SysRole> roles = roleService.selectRolesByUserId(userId);
 | 
			
		||||
        Map<String, Object> ajax = new HashMap<>();
 | 
			
		||||
        ajax.put("user", user);
 | 
			
		||||
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
 | 
			
		||||
        ajax.put("roles", LoginHelper.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
 | 
			
		||||
        return R.ok(ajax);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询${functionName}列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param ${className} ${functionName}
 | 
			
		||||
     * @param bo ${functionName}
 | 
			
		||||
     * @return ${functionName}
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -62,7 +62,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询${functionName}列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param ${className} ${functionName}
 | 
			
		||||
     * @param bo ${functionName}
 | 
			
		||||
     * @return ${functionName}
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -101,7 +101,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增${functionName}
 | 
			
		||||
     *
 | 
			
		||||
     * @param ${className} ${functionName}
 | 
			
		||||
     * @param bo ${functionName}
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -119,7 +119,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改${functionName}
 | 
			
		||||
     *
 | 
			
		||||
     * @param ${className} ${functionName}
 | 
			
		||||
     * @param bo ${functionName}
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -306,7 +306,7 @@ export default {
 | 
			
		||||
      queryParams: {
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if($column.query)
 | 
			
		||||
        $column.javaField: null#if($foreach.count != $columns.size()),#end
 | 
			
		||||
        $column.javaField: undefined#if($foreach.count != $columns.size()),#end
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
      },
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@
 | 
			
		||||
          v-model="queryParams.${column.javaField}"
 | 
			
		||||
          type="date"
 | 
			
		||||
          value-format="yyyy-MM-dd"
 | 
			
		||||
          placeholder="选择${comment}">
 | 
			
		||||
          placeholder="请选择${comment}">
 | 
			
		||||
        </el-date-picker>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
 | 
			
		||||
@@ -268,7 +268,7 @@
 | 
			
		||||
            v-model="form.${field}"
 | 
			
		||||
            type="datetime"
 | 
			
		||||
            value-format="yyyy-MM-dd HH:mm:ss"
 | 
			
		||||
            placeholder="选择${comment}">
 | 
			
		||||
            placeholder="请选择${comment}">
 | 
			
		||||
          </el-date-picker>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
#elseif($column.htmlType == "textarea")
 | 
			
		||||
@@ -300,12 +300,39 @@
 | 
			
		||||
#set($comment=$column.columnComment)
 | 
			
		||||
#end
 | 
			
		||||
#if($column.pk || $javaField == ${subTableFkclassName})
 | 
			
		||||
#elseif($column.list && "" != $javaField)
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}">
 | 
			
		||||
#elseif($column.list && $column.htmlType == "input")
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}" width="150">
 | 
			
		||||
            <template slot-scope="scope">
 | 
			
		||||
              <el-input v-model="scope.row.$javaField" placeholder="请输入$comment" />
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
#elseif($column.list && $column.htmlType == "datetime")
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}" width="240">
 | 
			
		||||
            <template slot-scope="scope">
 | 
			
		||||
              <el-date-picker clearable v-model="scope.row.$javaField" type="date" value-format="yyyy-MM-dd" placeholder="请选择$comment" />
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType)
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}" width="150">
 | 
			
		||||
            <template slot-scope="scope">
 | 
			
		||||
              <el-select v-model="scope.row.$javaField" placeholder="请选择$comment">
 | 
			
		||||
                <el-option
 | 
			
		||||
                  v-for="dict in dict.type.$column.dictType"
 | 
			
		||||
                  :key="dict.value"
 | 
			
		||||
                  :label="dict.label"
 | 
			
		||||
                  :value="dict.value"
 | 
			
		||||
                ></el-option>
 | 
			
		||||
              </el-select>
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType)
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}" width="150">
 | 
			
		||||
            <template slot-scope="scope">
 | 
			
		||||
              <el-select v-model="scope.row.$javaField" placeholder="请选择$comment">
 | 
			
		||||
                <el-option label="请选择字典生成" value="" />
 | 
			
		||||
              </el-select>
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
        </el-table>
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
          v-model="queryParams.${column.javaField}"
 | 
			
		||||
          type="date"
 | 
			
		||||
          value-format="YYYY-MM-DD"
 | 
			
		||||
          placeholder="选择${comment}">
 | 
			
		||||
          placeholder="请选择${comment}">
 | 
			
		||||
        </el-date-picker>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
 | 
			
		||||
@@ -259,7 +259,7 @@
 | 
			
		||||
            v-model="form.${field}"
 | 
			
		||||
            type="datetime"
 | 
			
		||||
            value-format="YYYY-MM-DD HH:mm:ss"
 | 
			
		||||
            placeholder="选择${comment}">
 | 
			
		||||
            placeholder="请选择${comment}">
 | 
			
		||||
          </el-date-picker>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
#elseif($column.htmlType == "textarea")
 | 
			
		||||
@@ -291,12 +291,44 @@
 | 
			
		||||
#set($comment=$column.columnComment)
 | 
			
		||||
#end
 | 
			
		||||
#if($column.pk || $javaField == ${subTableFkclassName})
 | 
			
		||||
#elseif($column.list && "" != $javaField)
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}">
 | 
			
		||||
#elseif($column.list && $column.htmlType == "input")
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}" width="150">
 | 
			
		||||
            <template #default="scope">
 | 
			
		||||
              <el-input v-model="scope.row.$javaField" placeholder="请输入$comment" />
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
#elseif($column.list && $column.htmlType == "datetime")
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}" width="240">
 | 
			
		||||
            <template #default="scope">
 | 
			
		||||
              <el-date-picker clearable
 | 
			
		||||
                v-model="scope.row.$javaField"
 | 
			
		||||
                type="date"
 | 
			
		||||
                value-format="YYYY-MM-DD"
 | 
			
		||||
                placeholder="请选择$comment">
 | 
			
		||||
              </el-date-picker>
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType)
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}" width="150">
 | 
			
		||||
            <template #default="scope">
 | 
			
		||||
              <el-select v-model="scope.row.$javaField" placeholder="请选择$comment">
 | 
			
		||||
                <el-option
 | 
			
		||||
                  v-for="dict in $column.dictType"
 | 
			
		||||
                  :key="dict.value"
 | 
			
		||||
                  :label="dict.label"
 | 
			
		||||
                  :value="dict.value"
 | 
			
		||||
                ></el-option>
 | 
			
		||||
              </el-select>
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType)
 | 
			
		||||
          <el-table-column label="$comment" prop="${javaField}" width="150">
 | 
			
		||||
            <template #default="scope">
 | 
			
		||||
              <el-select v-model="scope.row.$javaField" placeholder="请选择$comment">
 | 
			
		||||
                <el-option label="请选择字典生成" value="" />
 | 
			
		||||
              </el-select>
 | 
			
		||||
            </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
        </el-table>
 | 
			
		||||
 
 | 
			
		||||
@@ -89,12 +89,14 @@ services:
 | 
			
		||||
      MINIO_ACCESS_KEY: ruoyi
 | 
			
		||||
      # 管理后台密码,最小8个字符
 | 
			
		||||
      MINIO_SECRET_KEY: ruoyi123
 | 
			
		||||
      # https需要指定域名
 | 
			
		||||
      MINIO_SERVER_URL: ""
 | 
			
		||||
    volumes:
 | 
			
		||||
      # 映射当前目录下的data目录至容器内/data目录
 | 
			
		||||
      - /docker/minio/data:/data
 | 
			
		||||
      # 映射配置目录
 | 
			
		||||
      - /docker/minio/config:/root/.minio/
 | 
			
		||||
    command: server --console-address ':9001' /data  # 指定容器中的目录 /data
 | 
			
		||||
    command: server --address ':9000' --console-address ':9001' /data  # 指定容器中的目录 /data
 | 
			
		||||
    privileged: true
 | 
			
		||||
    restart: always
 | 
			
		||||
    networks:
 | 
			
		||||
@@ -102,7 +104,7 @@ services:
 | 
			
		||||
        ipv4_address: 172.30.0.54
 | 
			
		||||
 | 
			
		||||
  ruoyi-server1:
 | 
			
		||||
    image: ruoyi/ruoyi-server:4.0.0
 | 
			
		||||
    image: ruoyi/ruoyi-server:4.0.1
 | 
			
		||||
    container_name: ruoyi-server1
 | 
			
		||||
    environment:
 | 
			
		||||
      # 时区上海
 | 
			
		||||
@@ -117,7 +119,7 @@ services:
 | 
			
		||||
        ipv4_address: 172.30.0.60
 | 
			
		||||
 | 
			
		||||
  ruoyi-server2:
 | 
			
		||||
    image: "ruoyi/ruoyi-server:4.0.0"
 | 
			
		||||
    image: "ruoyi/ruoyi-server:4.0.1"
 | 
			
		||||
    container_name: ruoyi-server2
 | 
			
		||||
    environment:
 | 
			
		||||
      # 时区上海
 | 
			
		||||
@@ -132,7 +134,7 @@ services:
 | 
			
		||||
        ipv4_address: 172.30.0.61
 | 
			
		||||
 | 
			
		||||
  ruoyi-monitor-admin:
 | 
			
		||||
    image: ruoyi/ruoyi-monitor-admin:4.0.0
 | 
			
		||||
    image: ruoyi/ruoyi-monitor-admin:4.0.1
 | 
			
		||||
    container_name: ruoyi-monitor-admin
 | 
			
		||||
    environment:
 | 
			
		||||
      # 时区上海
 | 
			
		||||
@@ -147,7 +149,7 @@ services:
 | 
			
		||||
        ipv4_address: 172.30.0.90
 | 
			
		||||
 | 
			
		||||
  ruoyi-xxl-job-admin:
 | 
			
		||||
    image: ruoyi/ruoyi-xxl-job-admin:4.0.0
 | 
			
		||||
    image: ruoyi/ruoyi-xxl-job-admin:4.0.1
 | 
			
		||||
    container_name: ruoyi-xxl-job-admin
 | 
			
		||||
    environment:
 | 
			
		||||
      # 时区上海
 | 
			
		||||
 
 | 
			
		||||
@@ -1,686 +0,0 @@
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 1、部门表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_dept;
 | 
			
		||||
create table sys_dept (
 | 
			
		||||
  dept_id           bigint(20)      not null auto_increment    comment '部门id',
 | 
			
		||||
  parent_id         bigint(20)      default 0                  comment '父部门id',
 | 
			
		||||
  ancestors         varchar(50)     default ''                 comment '祖级列表',
 | 
			
		||||
  dept_name         varchar(30)     default ''                 comment '部门名称',
 | 
			
		||||
  order_num         int(4)          default 0                  comment '显示顺序',
 | 
			
		||||
  leader            varchar(20)     default null               comment '负责人',
 | 
			
		||||
  phone             varchar(11)     default null               comment '联系电话',
 | 
			
		||||
  email             varchar(50)     default null               comment '邮箱',
 | 
			
		||||
  status            char(1)         default '0'                comment '部门状态(0正常 1停用)',
 | 
			
		||||
  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time 	    datetime                                   comment '创建时间',
 | 
			
		||||
  update_by         varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time       datetime                                   comment '更新时间',
 | 
			
		||||
  primary key (dept_id)
 | 
			
		||||
) engine=innodb auto_increment=200 comment = '部门表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-部门表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_dept values(100,  0,   '0',          '若依科技',   0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
insert into sys_dept values(101,  100, '0,100',      '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
insert into sys_dept values(102,  100, '0,100',      '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
insert into sys_dept values(103,  101, '0,100,101',  '研发部门',   1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
insert into sys_dept values(104,  101, '0,100,101',  '市场部门',   2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
insert into sys_dept values(105,  101, '0,100,101',  '测试部门',   3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
insert into sys_dept values(106,  101, '0,100,101',  '财务部门',   4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
insert into sys_dept values(107,  101, '0,100,101',  '运维部门',   5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
insert into sys_dept values(108,  102, '0,100,102',  '市场部门',   1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
insert into sys_dept values(109,  102, '0,100,102',  '财务部门',   2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 2、用户信息表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_user;
 | 
			
		||||
create table sys_user (
 | 
			
		||||
  user_id           bigint(20)      not null auto_increment    comment '用户ID',
 | 
			
		||||
  dept_id           bigint(20)      default null               comment '部门ID',
 | 
			
		||||
  user_name         varchar(30)     not null                   comment '用户账号',
 | 
			
		||||
  nick_name         varchar(30)     not null                   comment '用户昵称',
 | 
			
		||||
  user_type         varchar(2)      default '00'               comment '用户类型(00系统用户)',
 | 
			
		||||
  email             varchar(50)     default ''                 comment '用户邮箱',
 | 
			
		||||
  phonenumber       varchar(11)     default ''                 comment '手机号码',
 | 
			
		||||
  sex               char(1)         default '0'                comment '用户性别(0男 1女 2未知)',
 | 
			
		||||
  avatar            varchar(100)    default ''                 comment '头像地址',
 | 
			
		||||
  password          varchar(100)    default ''                 comment '密码',
 | 
			
		||||
  status            char(1)         default '0'                comment '帐号状态(0正常 1停用)',
 | 
			
		||||
  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
 | 
			
		||||
  login_ip          varchar(128)    default ''                 comment '最后登录IP',
 | 
			
		||||
  login_date        datetime                                   comment '最后登录时间',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time       datetime                                   comment '创建时间',
 | 
			
		||||
  update_by         varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time       datetime                                   comment '更新时间',
 | 
			
		||||
  remark            varchar(500)    default null               comment '备注',
 | 
			
		||||
  primary key (user_id)
 | 
			
		||||
) engine=innodb auto_increment=100 comment = '用户信息表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-用户信息表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_user values(1,  103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员');
 | 
			
		||||
insert into sys_user values(2,  105, 'ry',    '若依', '00', 'ry@qq.com',  '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 3、岗位信息表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_post;
 | 
			
		||||
create table sys_post
 | 
			
		||||
(
 | 
			
		||||
  post_id       bigint(20)      not null auto_increment    comment '岗位ID',
 | 
			
		||||
  post_code     varchar(64)     not null                   comment '岗位编码',
 | 
			
		||||
  post_name     varchar(50)     not null                   comment '岗位名称',
 | 
			
		||||
  post_sort     int(4)          not null                   comment '显示顺序',
 | 
			
		||||
  status        char(1)         not null                   comment '状态(0正常 1停用)',
 | 
			
		||||
  create_by     varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time   datetime                                   comment '创建时间',
 | 
			
		||||
  update_by     varchar(64)     default ''			       comment '更新者',
 | 
			
		||||
  update_time   datetime                                   comment '更新时间',
 | 
			
		||||
  remark        varchar(500)    default null               comment '备注',
 | 
			
		||||
  primary key (post_id)
 | 
			
		||||
) engine=innodb comment = '岗位信息表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-岗位信息表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_post values(1, 'ceo',  '董事长',    1, '0', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_post values(2, 'se',   '项目经理',  2, '0', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_post values(3, 'hr',   '人力资源',  3, '0', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_post values(4, 'user', '普通员工',  4, '0', 'admin', sysdate(), '', null, '');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 4、角色信息表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_role;
 | 
			
		||||
create table sys_role (
 | 
			
		||||
  role_id              bigint(20)      not null auto_increment    comment '角色ID',
 | 
			
		||||
  role_name            varchar(30)     not null                   comment '角色名称',
 | 
			
		||||
  role_key             varchar(100)    not null                   comment '角色权限字符串',
 | 
			
		||||
  role_sort            int(4)          not null                   comment '显示顺序',
 | 
			
		||||
  data_scope           char(1)         default '1'                comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
 | 
			
		||||
  menu_check_strictly  tinyint(1)      default 1                  comment '菜单树选择项是否关联显示',
 | 
			
		||||
  dept_check_strictly  tinyint(1)      default 1                  comment '部门树选择项是否关联显示',
 | 
			
		||||
  status               char(1)         not null                   comment '角色状态(0正常 1停用)',
 | 
			
		||||
  del_flag             char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
 | 
			
		||||
  create_by            varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time          datetime                                   comment '创建时间',
 | 
			
		||||
  update_by            varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time          datetime                                   comment '更新时间',
 | 
			
		||||
  remark               varchar(500)    default null               comment '备注',
 | 
			
		||||
  primary key (role_id)
 | 
			
		||||
) engine=innodb auto_increment=100 comment = '角色信息表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-角色信息表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_role values('1', '超级管理员',  'admin',  1, 1, 1, 1, '0', '0', 'admin', sysdate(), '', null, '超级管理员');
 | 
			
		||||
insert into sys_role values('2', '普通角色',    'common', 2, 2, 1, 1, '0', '0', 'admin', sysdate(), '', null, '普通角色');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 5、菜单权限表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_menu;
 | 
			
		||||
create table sys_menu (
 | 
			
		||||
  menu_id           bigint(20)      not null auto_increment    comment '菜单ID',
 | 
			
		||||
  menu_name         varchar(50)     not null                   comment '菜单名称',
 | 
			
		||||
  parent_id         bigint(20)      default 0                  comment '父菜单ID',
 | 
			
		||||
  order_num         int(4)          default 0                  comment '显示顺序',
 | 
			
		||||
  path              varchar(200)    default ''                 comment '路由地址',
 | 
			
		||||
  component         varchar(255)    default null               comment '组件路径',
 | 
			
		||||
  query             varchar(255)    default null               comment '路由参数',
 | 
			
		||||
  is_frame          int(1)          default 1                  comment '是否为外链(0是 1否)',
 | 
			
		||||
  is_cache          int(1)          default 0                  comment '是否缓存(0缓存 1不缓存)',
 | 
			
		||||
  menu_type         char(1)         default ''                 comment '菜单类型(M目录 C菜单 F按钮)',
 | 
			
		||||
  visible           char(1)         default 0                  comment '菜单状态(0显示 1隐藏)',
 | 
			
		||||
  status            char(1)         default 0                  comment '菜单状态(0正常 1停用)',
 | 
			
		||||
  perms             varchar(100)    default null               comment '权限标识',
 | 
			
		||||
  icon              varchar(100)    default '#'                comment '菜单图标',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time       datetime                                   comment '创建时间',
 | 
			
		||||
  update_by         varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time       datetime                                   comment '更新时间',
 | 
			
		||||
  remark            varchar(500)    default ''                 comment '备注',
 | 
			
		||||
  primary key (menu_id)
 | 
			
		||||
) engine=innodb auto_increment=2000 comment = '菜单权限表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-菜单信息表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 一级菜单
 | 
			
		||||
insert into sys_menu values('1', '系统管理', '0', '1', 'system',           null, '', 1, 0, 'M', '0', '0', '', 'system',   'admin', sysdate(), '', null, '系统管理目录');
 | 
			
		||||
insert into sys_menu values('2', '系统监控', '0', '2', 'monitor',          null, '', 1, 0, 'M', '0', '0', '', 'monitor',  'admin', sysdate(), '', null, '系统监控目录');
 | 
			
		||||
insert into sys_menu values('3', '系统工具', '0', '3', 'tool',             null, '', 1, 0, 'M', '0', '0', '', 'tool',     'admin', sysdate(), '', null, '系统工具目录');
 | 
			
		||||
insert into sys_menu values('4', 'PLUS官网', '0', '4', 'https://gitee.com/JavaLionLi/RuoYi-Vue-Plus', null, '', 0, 0, 'M', '0', '0', '', 'guide',    'admin', sysdate(), '', null, 'RuoYi-Vue-Plus官网地址');
 | 
			
		||||
-- 二级菜单
 | 
			
		||||
insert into sys_menu values('100',  '用户管理', '1',   '1', 'user',       'system/user/index',        '', 1, 0, 'C', '0', '0', 'system:user:list',        'user',          'admin', sysdate(), '', null, '用户管理菜单');
 | 
			
		||||
insert into sys_menu values('101',  '角色管理', '1',   '2', 'role',       'system/role/index',        '', 1, 0, 'C', '0', '0', 'system:role:list',        'peoples',       'admin', sysdate(), '', null, '角色管理菜单');
 | 
			
		||||
insert into sys_menu values('102',  '菜单管理', '1',   '3', 'menu',       'system/menu/index',        '', 1, 0, 'C', '0', '0', 'system:menu:list',        'tree-table',    'admin', sysdate(), '', null, '菜单管理菜单');
 | 
			
		||||
insert into sys_menu values('103',  '部门管理', '1',   '4', 'dept',       'system/dept/index',        '', 1, 0, 'C', '0', '0', 'system:dept:list',        'tree',          'admin', sysdate(), '', null, '部门管理菜单');
 | 
			
		||||
insert into sys_menu values('104',  '岗位管理', '1',   '5', 'post',       'system/post/index',        '', 1, 0, 'C', '0', '0', 'system:post:list',        'post',          'admin', sysdate(), '', null, '岗位管理菜单');
 | 
			
		||||
insert into sys_menu values('105',  '字典管理', '1',   '6', 'dict',       'system/dict/index',        '', 1, 0, 'C', '0', '0', 'system:dict:list',        'dict',          'admin', sysdate(), '', null, '字典管理菜单');
 | 
			
		||||
insert into sys_menu values('106',  '参数设置', '1',   '7', 'config',     'system/config/index',      '', 1, 0, 'C', '0', '0', 'system:config:list',      'edit',          'admin', sysdate(), '', null, '参数设置菜单');
 | 
			
		||||
insert into sys_menu values('107',  '通知公告', '1',   '8', 'notice',     'system/notice/index',      '', 1, 0, 'C', '0', '0', 'system:notice:list',      'message',       'admin', sysdate(), '', null, '通知公告菜单');
 | 
			
		||||
insert into sys_menu values('108',  '日志管理', '1',   '9', 'log',        '',                         '', 1, 0, 'M', '0', '0', '',                        'log',           'admin', sysdate(), '', null, '日志管理菜单');
 | 
			
		||||
insert into sys_menu values('109',  '在线用户', '2',   '1', 'online',     'monitor/online/index',     '', 1, 0, 'C', '0', '0', 'monitor:online:list',     'online',        'admin', sysdate(), '', null, '在线用户菜单');
 | 
			
		||||
insert into sys_menu values('111',  '数据监控', '2',   '3', 'druid',      'monitor/druid/index',      '', 1, 0, 'C', '0', '0', 'monitor:druid:list',      'druid',         'admin', sysdate(), '', null, '数据监控菜单');
 | 
			
		||||
insert into sys_menu values('113',  '缓存监控', '2',   '5', 'cache',      'monitor/cache/index',      '', 1, 0, 'C', '0', '0', 'monitor:cache:list',      'redis',         'admin', sysdate(), '', null, '缓存监控菜单');
 | 
			
		||||
insert into sys_menu values('114',  '表单构建', '3',   '1', 'build',      'tool/build/index',         '', 1, 0, 'C', '0', '0', 'tool:build:list',         'build',         'admin', sysdate(), '', null, '表单构建菜单');
 | 
			
		||||
insert into sys_menu values('115',  '代码生成', '3',   '2', 'gen',        'tool/gen/index',           '', 1, 0, 'C', '0', '0', 'tool:gen:list',           'code',          'admin', sysdate(), '', null, '代码生成菜单');
 | 
			
		||||
insert into sys_menu values('116',  '系统接口', '3',   '3', 'swagger',    'tool/swagger/index',       '', 1, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',       'admin', sysdate(), '', null, '系统接口菜单');
 | 
			
		||||
-- springboot-admin监控
 | 
			
		||||
insert into sys_menu values('117',  'Admin监控', '2',  '5', 'Admin',      'monitor/admin/index',      '', 1, 0, 'C', '0', '0', 'monitor:admin:list',      'dashboard',     'admin', sysdate(), '', null, 'Admin监控菜单');
 | 
			
		||||
-- oss菜单
 | 
			
		||||
insert into sys_menu values('118',  '文件管理', '1', '10', 'oss', 'system/oss/index', '', 1, 0, 'C', '0', '0', 'system:oss:list', 'upload', 'admin', sysdate(), '', null, '文件管理菜单');
 | 
			
		||||
-- xxl-job-admin控制台
 | 
			
		||||
insert into sys_menu values('120',  '任务调度中心', '2',  '5', 'XxlJob',      'monitor/xxljob/index',      '', 1, 0, 'C', '0', '0', 'monitor:xxljob:list',      'job',     'admin', sysdate(), '', 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', sysdate(), '', null, '操作日志菜单');
 | 
			
		||||
insert into sys_menu values('501',  '登录日志', '108', '2', 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor',    'admin', sysdate(), '', null, '登录日志菜单');
 | 
			
		||||
-- 用户管理按钮
 | 
			
		||||
insert into sys_menu values('1001', '用户查询', '100', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:query',          '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1002', '用户新增', '100', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:add',            '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1003', '用户修改', '100', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit',           '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1004', '用户删除', '100', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1005', '用户导出', '100', '5',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:export',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1006', '用户导入', '100', '6',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:import',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1007', '重置密码', '100', '7',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd',       '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 角色管理按钮
 | 
			
		||||
insert into sys_menu values('1008', '角色查询', '101', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:query',          '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1009', '角色新增', '101', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:add',            '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1010', '角色修改', '101', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit',           '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1011', '角色删除', '101', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1012', '角色导出', '101', '5',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:export',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 菜单管理按钮
 | 
			
		||||
insert into sys_menu values('1013', '菜单查询', '102', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query',          '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1014', '菜单新增', '102', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add',            '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1015', '菜单修改', '102', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit',           '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1016', '菜单删除', '102', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 部门管理按钮
 | 
			
		||||
insert into sys_menu values('1017', '部门查询', '103', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query',          '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1018', '部门新增', '103', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add',            '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1019', '部门修改', '103', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit',           '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1020', '部门删除', '103', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 岗位管理按钮
 | 
			
		||||
insert into sys_menu values('1021', '岗位查询', '104', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:query',          '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1022', '岗位新增', '104', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:add',            '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1023', '岗位修改', '104', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit',           '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1024', '岗位删除', '104', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1025', '岗位导出', '104', '5',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:export',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 字典管理按钮
 | 
			
		||||
insert into sys_menu values('1026', '字典查询', '105', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:query',          '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1027', '字典新增', '105', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:add',            '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1028', '字典修改', '105', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit',           '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1029', '字典删除', '105', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1030', '字典导出', '105', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:export',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 参数设置按钮
 | 
			
		||||
insert into sys_menu values('1031', '参数查询', '106', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:query',        '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1032', '参数新增', '106', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:add',          '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1033', '参数修改', '106', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:edit',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1034', '参数删除', '106', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:remove',       '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1035', '参数导出', '106', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:export',       '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 通知公告按钮
 | 
			
		||||
insert into sys_menu values('1036', '公告查询', '107', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:query',        '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1037', '公告新增', '107', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:add',          '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1038', '公告修改', '107', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1039', '公告删除', '107', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove',       '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 操作日志按钮
 | 
			
		||||
insert into sys_menu values('1040', '操作查询', '500', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query',      '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1041', '操作删除', '500', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove',     '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1042', '日志导出', '500', '4', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export',     '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 登录日志按钮
 | 
			
		||||
insert into sys_menu values('1043', '登录查询', '501', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query',   '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1044', '登录删除', '501', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove',  '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1045', '日志导出', '501', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export',  '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 在线用户按钮
 | 
			
		||||
insert into sys_menu values('1046', '在线查询', '109', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query',       '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1047', '批量强退', '109', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1048', '单条强退', '109', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- 代码生成按钮
 | 
			
		||||
insert into sys_menu values('1055', '生成查询', '115', '1', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query',             '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1056', '生成修改', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit',              '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1057', '生成删除', '115', '3', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove',            '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1058', '导入代码', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import',            '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1059', '预览代码', '115', '4', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview',           '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1060', '生成代码', '115', '5', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code',              '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
-- oss相关按钮
 | 
			
		||||
insert into sys_menu values('1600', '文件查询', '118', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:query',        '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1601', '文件上传', '118', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:upload',       '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1602', '文件下载', '118', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:download',     '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1603', '文件删除', '118', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:remove',       '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1604', '配置添加', '118', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:add',          '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
insert into sys_menu values('1605', '配置编辑', '118', '6', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:edit',         '#', 'admin', sysdate(), '', null, '');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 6、用户和角色关联表  用户N-1角色
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
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)
 | 
			
		||||
) engine=innodb comment = '用户和角色关联表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-用户和角色关联表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_user_role values ('1', '1');
 | 
			
		||||
insert into sys_user_role values ('2', '2');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 7、角色和菜单关联表  角色1-N菜单
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
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)
 | 
			
		||||
) engine=innodb comment = '角色和菜单关联表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-角色和菜单关联表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_role_menu values ('2', '1');
 | 
			
		||||
insert into sys_role_menu values ('2', '2');
 | 
			
		||||
insert into sys_role_menu values ('2', '3');
 | 
			
		||||
insert into sys_role_menu values ('2', '4');
 | 
			
		||||
insert into sys_role_menu values ('2', '100');
 | 
			
		||||
insert into sys_role_menu values ('2', '101');
 | 
			
		||||
insert into sys_role_menu values ('2', '102');
 | 
			
		||||
insert into sys_role_menu values ('2', '103');
 | 
			
		||||
insert into sys_role_menu values ('2', '104');
 | 
			
		||||
insert into sys_role_menu values ('2', '105');
 | 
			
		||||
insert into sys_role_menu values ('2', '106');
 | 
			
		||||
insert into sys_role_menu values ('2', '107');
 | 
			
		||||
insert into sys_role_menu values ('2', '108');
 | 
			
		||||
insert into sys_role_menu values ('2', '109');
 | 
			
		||||
insert into sys_role_menu values ('2', '110');
 | 
			
		||||
insert into sys_role_menu values ('2', '111');
 | 
			
		||||
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', '116');
 | 
			
		||||
insert into sys_role_menu values ('2', '500');
 | 
			
		||||
insert into sys_role_menu values ('2', '501');
 | 
			
		||||
insert into sys_role_menu values ('2', '1000');
 | 
			
		||||
insert into sys_role_menu values ('2', '1001');
 | 
			
		||||
insert into sys_role_menu values ('2', '1002');
 | 
			
		||||
insert into sys_role_menu values ('2', '1003');
 | 
			
		||||
insert into sys_role_menu values ('2', '1004');
 | 
			
		||||
insert into sys_role_menu values ('2', '1005');
 | 
			
		||||
insert into sys_role_menu values ('2', '1006');
 | 
			
		||||
insert into sys_role_menu values ('2', '1007');
 | 
			
		||||
insert into sys_role_menu values ('2', '1008');
 | 
			
		||||
insert into sys_role_menu values ('2', '1009');
 | 
			
		||||
insert into sys_role_menu values ('2', '1010');
 | 
			
		||||
insert into sys_role_menu values ('2', '1011');
 | 
			
		||||
insert into sys_role_menu values ('2', '1012');
 | 
			
		||||
insert into sys_role_menu values ('2', '1013');
 | 
			
		||||
insert into sys_role_menu values ('2', '1014');
 | 
			
		||||
insert into sys_role_menu values ('2', '1015');
 | 
			
		||||
insert into sys_role_menu values ('2', '1016');
 | 
			
		||||
insert into sys_role_menu values ('2', '1017');
 | 
			
		||||
insert into sys_role_menu values ('2', '1018');
 | 
			
		||||
insert into sys_role_menu values ('2', '1019');
 | 
			
		||||
insert into sys_role_menu values ('2', '1020');
 | 
			
		||||
insert into sys_role_menu values ('2', '1021');
 | 
			
		||||
insert into sys_role_menu values ('2', '1022');
 | 
			
		||||
insert into sys_role_menu values ('2', '1023');
 | 
			
		||||
insert into sys_role_menu values ('2', '1024');
 | 
			
		||||
insert into sys_role_menu values ('2', '1025');
 | 
			
		||||
insert into sys_role_menu values ('2', '1026');
 | 
			
		||||
insert into sys_role_menu values ('2', '1027');
 | 
			
		||||
insert into sys_role_menu values ('2', '1028');
 | 
			
		||||
insert into sys_role_menu values ('2', '1029');
 | 
			
		||||
insert into sys_role_menu values ('2', '1030');
 | 
			
		||||
insert into sys_role_menu values ('2', '1031');
 | 
			
		||||
insert into sys_role_menu values ('2', '1032');
 | 
			
		||||
insert into sys_role_menu values ('2', '1033');
 | 
			
		||||
insert into sys_role_menu values ('2', '1034');
 | 
			
		||||
insert into sys_role_menu values ('2', '1035');
 | 
			
		||||
insert into sys_role_menu values ('2', '1036');
 | 
			
		||||
insert into sys_role_menu values ('2', '1037');
 | 
			
		||||
insert into sys_role_menu values ('2', '1038');
 | 
			
		||||
insert into sys_role_menu values ('2', '1039');
 | 
			
		||||
insert into sys_role_menu values ('2', '1040');
 | 
			
		||||
insert into sys_role_menu values ('2', '1041');
 | 
			
		||||
insert into sys_role_menu values ('2', '1042');
 | 
			
		||||
insert into sys_role_menu values ('2', '1043');
 | 
			
		||||
insert into sys_role_menu values ('2', '1044');
 | 
			
		||||
insert into sys_role_menu values ('2', '1045');
 | 
			
		||||
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');
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 8、角色和部门关联表  角色1-N部门
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
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)
 | 
			
		||||
) engine=innodb comment = '角色和部门关联表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-角色和部门关联表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_role_dept values ('2', '100');
 | 
			
		||||
insert into sys_role_dept values ('2', '101');
 | 
			
		||||
insert into sys_role_dept values ('2', '105');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 9、用户与岗位关联表  用户1-N岗位
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
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)
 | 
			
		||||
) engine=innodb comment = '用户与岗位关联表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-用户与岗位关联表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_user_post values ('1', '1');
 | 
			
		||||
insert into sys_user_post values ('2', '2');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 10、操作日志记录
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_oper_log;
 | 
			
		||||
create table sys_oper_log (
 | 
			
		||||
  oper_id           bigint(20)      not null auto_increment    comment '日志主键',
 | 
			
		||||
  title             varchar(50)     default ''                 comment '模块标题',
 | 
			
		||||
  business_type     int(2)          default 0                  comment '业务类型(0其它 1新增 2修改 3删除)',
 | 
			
		||||
  method            varchar(100)    default ''                 comment '方法名称',
 | 
			
		||||
  request_method    varchar(10)     default ''                 comment '请求方式',
 | 
			
		||||
  operator_type     int(1)          default 0                  comment '操作类别(0其它 1后台用户 2手机端用户)',
 | 
			
		||||
  oper_name         varchar(50)     default ''                 comment '操作人员',
 | 
			
		||||
  dept_name         varchar(50)     default ''                 comment '部门名称',
 | 
			
		||||
  oper_url          varchar(255)    default ''                 comment '请求URL',
 | 
			
		||||
  oper_ip           varchar(128)    default ''                 comment '主机地址',
 | 
			
		||||
  oper_location     varchar(255)    default ''                 comment '操作地点',
 | 
			
		||||
  oper_param        varchar(2000)   default ''                 comment '请求参数',
 | 
			
		||||
  json_result       varchar(2000)   default ''                 comment '返回参数',
 | 
			
		||||
  status            int(1)          default 0                  comment '操作状态(0正常 1异常)',
 | 
			
		||||
  error_msg         varchar(2000)   default ''                 comment '错误消息',
 | 
			
		||||
  oper_time         datetime                                   comment '操作时间',
 | 
			
		||||
  primary key (oper_id)
 | 
			
		||||
) engine=innodb auto_increment=100 comment = '操作日志记录';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 11、字典类型表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_dict_type;
 | 
			
		||||
create table sys_dict_type
 | 
			
		||||
(
 | 
			
		||||
  dict_id          bigint(20)      not null auto_increment    comment '字典主键',
 | 
			
		||||
  dict_name        varchar(100)    default ''                 comment '字典名称',
 | 
			
		||||
  dict_type        varchar(100)    default ''                 comment '字典类型',
 | 
			
		||||
  status           char(1)         default '0'                comment '状态(0正常 1停用)',
 | 
			
		||||
  create_by        varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time      datetime                                   comment '创建时间',
 | 
			
		||||
  update_by        varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time      datetime                                   comment '更新时间',
 | 
			
		||||
  remark           varchar(500)    default null               comment '备注',
 | 
			
		||||
  primary key (dict_id),
 | 
			
		||||
  unique (dict_type)
 | 
			
		||||
) engine=innodb auto_increment=100 comment = '字典类型表';
 | 
			
		||||
 | 
			
		||||
insert into sys_dict_type values(1,  '用户性别', 'sys_user_sex',        '0', 'admin', sysdate(), '', null, '用户性别列表');
 | 
			
		||||
insert into sys_dict_type values(2,  '菜单状态', 'sys_show_hide',       '0', 'admin', sysdate(), '', null, '菜单状态列表');
 | 
			
		||||
insert into sys_dict_type values(3,  '系统开关', 'sys_normal_disable',  '0', 'admin', sysdate(), '', null, '系统开关列表');
 | 
			
		||||
insert into sys_dict_type values(6,  '系统是否', 'sys_yes_no',          '0', 'admin', sysdate(), '', null, '系统是否列表');
 | 
			
		||||
insert into sys_dict_type values(7,  '通知类型', 'sys_notice_type',     '0', 'admin', sysdate(), '', null, '通知类型列表');
 | 
			
		||||
insert into sys_dict_type values(8,  '通知状态', 'sys_notice_status',   '0', 'admin', sysdate(), '', null, '通知状态列表');
 | 
			
		||||
insert into sys_dict_type values(9,  '操作类型', 'sys_oper_type',       '0', 'admin', sysdate(), '', null, '操作类型列表');
 | 
			
		||||
insert into sys_dict_type values(10, '系统状态', 'sys_common_status',   '0', 'admin', sysdate(), '', null, '登录状态列表');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 12、字典数据表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_dict_data;
 | 
			
		||||
create table sys_dict_data
 | 
			
		||||
(
 | 
			
		||||
  dict_code        bigint(20)      not null auto_increment    comment '字典编码',
 | 
			
		||||
  dict_sort        int(4)          default 0                  comment '字典排序',
 | 
			
		||||
  dict_label       varchar(100)    default ''                 comment '字典标签',
 | 
			
		||||
  dict_value       varchar(100)    default ''                 comment '字典键值',
 | 
			
		||||
  dict_type        varchar(100)    default ''                 comment '字典类型',
 | 
			
		||||
  css_class        varchar(100)    default null               comment '样式属性(其他样式扩展)',
 | 
			
		||||
  list_class       varchar(100)    default null               comment '表格回显样式',
 | 
			
		||||
  is_default       char(1)         default 'N'                comment '是否默认(Y是 N否)',
 | 
			
		||||
  status           char(1)         default '0'                comment '状态(0正常 1停用)',
 | 
			
		||||
  create_by        varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time      datetime                                   comment '创建时间',
 | 
			
		||||
  update_by        varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time      datetime                                   comment '更新时间',
 | 
			
		||||
  remark           varchar(500)    default null               comment '备注',
 | 
			
		||||
  primary key (dict_code)
 | 
			
		||||
) engine=innodb auto_increment=100 comment = '字典数据表';
 | 
			
		||||
 | 
			
		||||
insert into sys_dict_data values(1,  1,  '男',       '0',       'sys_user_sex',        '',   '',        'Y', '0', 'admin', sysdate(), '', null, '性别男');
 | 
			
		||||
insert into sys_dict_data values(2,  2,  '女',       '1',       'sys_user_sex',        '',   '',        'N', '0', 'admin', sysdate(), '', null, '性别女');
 | 
			
		||||
insert into sys_dict_data values(3,  3,  '未知',     '2',       'sys_user_sex',        '',   '',        'N', '0', 'admin', sysdate(), '', null, '性别未知');
 | 
			
		||||
insert into sys_dict_data values(4,  1,  '显示',     '0',       'sys_show_hide',       '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '显示菜单');
 | 
			
		||||
insert into sys_dict_data values(5,  2,  '隐藏',     '1',       'sys_show_hide',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '隐藏菜单');
 | 
			
		||||
insert into sys_dict_data values(6,  1,  '正常',     '0',       'sys_normal_disable',  '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
 | 
			
		||||
insert into sys_dict_data values(7,  2,  '停用',     '1',       'sys_normal_disable',  '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '停用状态');
 | 
			
		||||
insert into sys_dict_data values(12, 1,  '是',       'Y',       'sys_yes_no',          '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '系统默认是');
 | 
			
		||||
insert into sys_dict_data values(13, 2,  '否',       'N',       'sys_yes_no',          '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '系统默认否');
 | 
			
		||||
insert into sys_dict_data values(14, 1,  '通知',     '1',       'sys_notice_type',     '',   'warning', 'Y', '0', 'admin', sysdate(), '', null, '通知');
 | 
			
		||||
insert into sys_dict_data values(15, 2,  '公告',     '2',       'sys_notice_type',     '',   'success', 'N', '0', 'admin', sysdate(), '', null, '公告');
 | 
			
		||||
insert into sys_dict_data values(16, 1,  '正常',     '0',       'sys_notice_status',   '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
 | 
			
		||||
insert into sys_dict_data values(17, 2,  '关闭',     '1',       'sys_notice_status',   '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '关闭状态');
 | 
			
		||||
insert into sys_dict_data values(18, 1,  '新增',     '1',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate(), '', null, '新增操作');
 | 
			
		||||
insert into sys_dict_data values(19, 2,  '修改',     '2',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate(), '', null, '修改操作');
 | 
			
		||||
insert into sys_dict_data values(20, 3,  '删除',     '3',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '删除操作');
 | 
			
		||||
insert into sys_dict_data values(21, 4,  '授权',     '4',       'sys_oper_type',       '',   'primary', 'N', '0', 'admin', sysdate(), '', null, '授权操作');
 | 
			
		||||
insert into sys_dict_data values(22, 5,  '导出',     '5',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate(), '', null, '导出操作');
 | 
			
		||||
insert into sys_dict_data values(23, 6,  '导入',     '6',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate(), '', null, '导入操作');
 | 
			
		||||
insert into sys_dict_data values(24, 7,  '强退',     '7',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '强退操作');
 | 
			
		||||
insert into sys_dict_data values(25, 8,  '生成代码', '8',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate(), '', null, '生成操作');
 | 
			
		||||
insert into sys_dict_data values(26, 9,  '清空数据', '9',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '清空操作');
 | 
			
		||||
insert into sys_dict_data values(27, 1,  '成功',     '0',       'sys_common_status',   '',   'primary', 'N', '0', 'admin', sysdate(), '', null, '正常状态');
 | 
			
		||||
insert into sys_dict_data values(28, 2,  '失败',     '1',       'sys_common_status',   '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '停用状态');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 13、参数配置表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_config;
 | 
			
		||||
create table sys_config (
 | 
			
		||||
  config_id         int(5)          not null auto_increment    comment '参数主键',
 | 
			
		||||
  config_name       varchar(100)    default ''                 comment '参数名称',
 | 
			
		||||
  config_key        varchar(100)    default ''                 comment '参数键名',
 | 
			
		||||
  config_value      varchar(500)    default ''                 comment '参数键值',
 | 
			
		||||
  config_type       char(1)         default 'N'                comment '系统内置(Y是 N否)',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time       datetime                                   comment '创建时间',
 | 
			
		||||
  update_by         varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time       datetime                                   comment '更新时间',
 | 
			
		||||
  remark            varchar(500)    default null               comment '备注',
 | 
			
		||||
  primary key (config_id)
 | 
			
		||||
) engine=innodb auto_increment=100 comment = '参数配置表';
 | 
			
		||||
 | 
			
		||||
insert into sys_config values(1, '主框架页-默认皮肤样式名称',     'sys.index.skinName',            'skin-blue',     'Y', 'admin', sysdate(), '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' );
 | 
			
		||||
insert into sys_config values(2, '用户管理-账号初始密码',         'sys.user.initPassword',         '123456',        'Y', 'admin', sysdate(), '', null, '初始化密码 123456' );
 | 
			
		||||
insert into sys_config values(3, '主框架页-侧边栏主题',           'sys.index.sideTheme',           'theme-dark',    'Y', 'admin', sysdate(), '', null, '深色主题theme-dark,浅色主题theme-light' );
 | 
			
		||||
insert into sys_config values(4, '账号自助-验证码开关',           'sys.account.captchaOnOff',      'true',          'Y', 'admin', sysdate(), '', null, '是否开启验证码功能(true开启,false关闭)');
 | 
			
		||||
insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser',      'false',         'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)');
 | 
			
		||||
insert into sys_config values(11, 'OSS预览列表资源开关', 'sys.oss.previewListResource', 'true', 'Y', 'admin', sysdate(), '', null, 'true:开启, false:关闭');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 14、系统访问记录
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_logininfor;
 | 
			
		||||
create table sys_logininfor (
 | 
			
		||||
  info_id        bigint(20)     not null auto_increment   comment '访问ID',
 | 
			
		||||
  user_name      varchar(50)    default ''                comment '用户账号',
 | 
			
		||||
  ipaddr         varchar(128)   default ''                comment '登录IP地址',
 | 
			
		||||
  login_location varchar(255)   default ''                comment '登录地点',
 | 
			
		||||
  browser        varchar(50)    default ''                comment '浏览器类型',
 | 
			
		||||
  os             varchar(50)    default ''                comment '操作系统',
 | 
			
		||||
  status         char(1)        default '0'               comment '登录状态(0成功 1失败)',
 | 
			
		||||
  msg            varchar(255)   default ''                comment '提示消息',
 | 
			
		||||
  login_time     datetime                                 comment '访问时间',
 | 
			
		||||
  primary key (info_id)
 | 
			
		||||
) engine=innodb auto_increment=100 comment = '系统访问记录';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 17、通知公告表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_notice;
 | 
			
		||||
create table sys_notice (
 | 
			
		||||
  notice_id         int(4)          not null auto_increment    comment '公告ID',
 | 
			
		||||
  notice_title      varchar(50)     not null                   comment '公告标题',
 | 
			
		||||
  notice_type       char(1)         not null                   comment '公告类型(1通知 2公告)',
 | 
			
		||||
  notice_content    longblob        default null               comment '公告内容',
 | 
			
		||||
  status            char(1)         default '0'                comment '公告状态(0正常 1关闭)',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time       datetime                                   comment '创建时间',
 | 
			
		||||
  update_by         varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time       datetime                                   comment '更新时间',
 | 
			
		||||
  remark            varchar(255)    default null               comment '备注',
 | 
			
		||||
  primary key (notice_id)
 | 
			
		||||
) engine=innodb auto_increment=10 comment = '通知公告表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 初始化-公告信息表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_notice values('1', '温馨提醒:2018-07-01 新版本发布啦', '2', '新版本内容', '0', 'admin', sysdate(), '', null, '管理员');
 | 
			
		||||
insert into sys_notice values('2', '维护通知:2018-07-01 系统凌晨维护', '1', '维护内容',   '0', 'admin', sysdate(), '', null, '管理员');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 18、代码生成业务表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists gen_table;
 | 
			
		||||
create table gen_table (
 | 
			
		||||
  table_id          bigint(20)      not null auto_increment    comment '编号',
 | 
			
		||||
  table_name        varchar(200)    default ''                 comment '表名称',
 | 
			
		||||
  table_comment     varchar(500)    default ''                 comment '表描述',
 | 
			
		||||
  sub_table_name    varchar(64)     default null               comment '关联子表的表名',
 | 
			
		||||
  sub_table_fk_name varchar(64)     default null               comment '子表关联的外键名',
 | 
			
		||||
  class_name        varchar(100)    default ''                 comment '实体类名称',
 | 
			
		||||
  tpl_category      varchar(200)    default 'crud'             comment '使用的模板(crud单表操作 tree树表操作)',
 | 
			
		||||
  package_name      varchar(100)                               comment '生成包路径',
 | 
			
		||||
  module_name       varchar(30)                                comment '生成模块名',
 | 
			
		||||
  business_name     varchar(30)                                comment '生成业务名',
 | 
			
		||||
  function_name     varchar(50)                                comment '生成功能名',
 | 
			
		||||
  function_author   varchar(50)                                comment '生成功能作者',
 | 
			
		||||
  gen_type          char(1)         default '0'                comment '生成代码方式(0zip压缩包 1自定义路径)',
 | 
			
		||||
  gen_path          varchar(200)    default '/'                comment '生成路径(不填默认项目路径)',
 | 
			
		||||
  options           varchar(1000)                              comment '其它生成选项',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time 	    datetime                                   comment '创建时间',
 | 
			
		||||
  update_by         varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time       datetime                                   comment '更新时间',
 | 
			
		||||
  remark            varchar(500)    default null               comment '备注',
 | 
			
		||||
  primary key (table_id)
 | 
			
		||||
) engine=innodb auto_increment=1 comment = '代码生成业务表';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- 19、代码生成业务表字段
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists gen_table_column;
 | 
			
		||||
create table gen_table_column (
 | 
			
		||||
  column_id         bigint(20)      not null auto_increment    comment '编号',
 | 
			
		||||
  table_id          varchar(64)                                comment '归属表编号',
 | 
			
		||||
  column_name       varchar(200)                               comment '列名称',
 | 
			
		||||
  column_comment    varchar(500)                               comment '列描述',
 | 
			
		||||
  column_type       varchar(100)                               comment '列类型',
 | 
			
		||||
  java_type         varchar(500)                               comment 'JAVA类型',
 | 
			
		||||
  java_field        varchar(200)                               comment 'JAVA字段名',
 | 
			
		||||
  is_pk             char(1)                                    comment '是否主键(1是)',
 | 
			
		||||
  is_increment      char(1)                                    comment '是否自增(1是)',
 | 
			
		||||
  is_required       char(1)                                    comment '是否必填(1是)',
 | 
			
		||||
  is_insert         char(1)                                    comment '是否为插入字段(1是)',
 | 
			
		||||
  is_edit           char(1)                                    comment '是否编辑字段(1是)',
 | 
			
		||||
  is_list           char(1)                                    comment '是否列表字段(1是)',
 | 
			
		||||
  is_query          char(1)                                    comment '是否查询字段(1是)',
 | 
			
		||||
  query_type        varchar(200)    default 'EQ'               comment '查询方式(等于、不等于、大于、小于、范围)',
 | 
			
		||||
  html_type         varchar(200)                               comment '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
 | 
			
		||||
  dict_type         varchar(200)    default ''                 comment '字典类型',
 | 
			
		||||
  sort              int                                        comment '排序',
 | 
			
		||||
  create_by         varchar(64)     default ''                 comment '创建者',
 | 
			
		||||
  create_time 	    datetime                                   comment '创建时间',
 | 
			
		||||
  update_by         varchar(64)     default ''                 comment '更新者',
 | 
			
		||||
  update_time       datetime                                   comment '更新时间',
 | 
			
		||||
  primary key (column_id)
 | 
			
		||||
) engine=innodb auto_increment=1 comment = '代码生成业务表字段';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- OSS对象存储表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_oss;
 | 
			
		||||
create table sys_oss (
 | 
			
		||||
  oss_id          bigint(20)   not null auto_increment    comment '对象存储主键',
 | 
			
		||||
  file_name       varchar(255) not null default ''        comment '文件名',
 | 
			
		||||
  original_name   varchar(255) not null default ''        comment '原名',
 | 
			
		||||
  file_suffix     varchar(10)  not null default ''        comment '文件后缀名',
 | 
			
		||||
  url              varchar(500) not null                   comment 'URL地址',
 | 
			
		||||
  create_time     datetime              default null      comment '创建时间',
 | 
			
		||||
  create_by       varchar(64)           default ''        comment '上传人',
 | 
			
		||||
  update_time     datetime              default null      comment '更新时间',
 | 
			
		||||
  update_by       varchar(64)           default ''        comment '更新人',
 | 
			
		||||
  service         varchar(10)  not null default 'minio'   comment '服务商',
 | 
			
		||||
  primary key (oss_id)
 | 
			
		||||
) engine=innodb comment ='OSS对象存储表';
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
-- OSS对象存储动态配置表
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
drop table if exists sys_oss_config;
 | 
			
		||||
create table sys_oss_config (
 | 
			
		||||
  oss_config_id   bigint(20)   not null auto_increment comment '主建',
 | 
			
		||||
  config_key      varchar(255)  not null default ''     comment '配置key',
 | 
			
		||||
  access_key      varchar(255)            default ''    comment 'accessKey',
 | 
			
		||||
  secret_key      varchar(255)            default ''    comment '秘钥',
 | 
			
		||||
  bucket_name     varchar(255)            default ''    comment '桶名称',
 | 
			
		||||
  prefix           varchar(255)           default ''     comment '前缀',
 | 
			
		||||
  endpoint         varchar(255)           default ''     comment '访问站点',
 | 
			
		||||
  is_https         char(1)                default 'N'    comment '是否https(Y=是,N=否)',
 | 
			
		||||
  region           varchar(255)           default ''     comment '域',
 | 
			
		||||
  status           char(1)                default '1'    comment '状态(0=正常,1=停用)',
 | 
			
		||||
  ext1             varchar(255)           default ''      comment '扩展字段',
 | 
			
		||||
  create_by       varchar(64)             default ''     comment '创建者',
 | 
			
		||||
  create_time     datetime                default null   comment '创建时间',
 | 
			
		||||
  update_by       varchar(64)             default ''      comment '更新者',
 | 
			
		||||
  update_time     datetime                default null    comment '更新时间',
 | 
			
		||||
  remark           varchar(500)           default null    comment '备注',
 | 
			
		||||
  primary key (oss_config_id)
 | 
			
		||||
) engine=innodb comment='对象存储配置表';
 | 
			
		||||
 | 
			
		||||
insert into sys_oss_config values (1, 'minio',  'ruoyi',            'ruoyi123',        'ruoyi',             '', 'http://localhost:9000',                'N', '',            '0', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
 | 
			
		||||
insert into sys_oss_config values (2, 'qiniu',  'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://XXX.XXXX.com',                  'N', 'z0',          '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
 | 
			
		||||
insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://oss-cn-beijing.aliyuncs.com',   'N', '',            '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
 | 
			
		||||
insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi-1250000000',  '', 'http://cos.ap-beijing.myqcloud.com',   'N', 'ap-beijing',  '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
 | 
			
		||||
@@ -66,7 +66,7 @@ create table sys_user (
 | 
			
		||||
-- 初始化-用户信息表数据
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
insert into sys_user values(1,  103, 'admin', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员');
 | 
			
		||||
insert into sys_user values(2,  105, 'lionli', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com',  '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员');
 | 
			
		||||
insert into sys_user values(2,  105, 'lionli', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@qq.com',  '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user