疯狂的狮子li
2022-02-24 568e2a9337a77187d856962077ef28e3a907cfd3
Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev

 Conflicts:
 pom.xml
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java
 ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
 ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
 ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
 ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
 ruoyi-ui/src/components/Pagination/index.vue
 ruoyi-ui/src/permission.js
 ruoyi-ui/src/utils/request.js
 ruoyi-ui/src/views/monitor/job/index.vue
 ruoyi-ui/src/views/monitor/server/index.vue
 ruoyi-ui/src/views/system/user/index.vue
 ruoyi-ui/src/views/system/user/profile/userInfo.vue
已修改11个文件
143 ■■■■ 文件已修改
ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/vue/index.vue.vm 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/components/Pagination/index.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/permission.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/utils/request.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/utils/ruoyi.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/system/dept/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/system/notice/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/system/user/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/system/user/profile/userInfo.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
@@ -244,14 +244,28 @@
    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, ", ");
    }
    /**
ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
@@ -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>
ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
@@ -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>
ruoyi-ui/src/components/Pagination/index.vue
@@ -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 @@
  },
  data() {
    return {
      pageShow: true
    };
  },
  computed: {
@@ -88,10 +86,7 @@
  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) {
ruoyi-ui/src/permission.js
@@ -4,6 +4,7 @@
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 @@
      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) // 动态添加可访问路由表
ruoyi-ui/src/utils/request.js
@@ -9,7 +9,7 @@
let downloadLoadingInstance;
// 是否显示重新登录
let isReloginShow;
export let isRelogin = { show: false };
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 对应国际化资源文件后缀
@@ -78,23 +78,20 @@
      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('无效的会话,或者会话已过期,请重新登录。')
ruoyi-ui/src/utils/ruoyi.js
@@ -70,6 +70,9 @@
// 回显数据字典 
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 @@
      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);
}
ruoyi-ui/src/views/system/dept/index.vue
@@ -206,7 +206,7 @@
        email: [
          {
            type: "email",
            message: "'请输入正确的邮箱地址",
            message: "请输入正确的邮箱地址",
            trigger: ["blur", "change"]
          }
        ],
ruoyi-ui/src/views/system/notice/index.vue
@@ -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"
ruoyi-ui/src/views/system/user/index.vue
@@ -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"
ruoyi-ui/src/views/system/user/profile/userInfo.vue
@@ -42,7 +42,7 @@
          { required: true, message: "邮箱地址不能为空", trigger: "blur" },
          {
            type: "email",
            message: "'请输入正确的邮箱地址",
            message: "请输入正确的邮箱地址",
            trigger: ["blur", "change"]
          }
        ],