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
| | |
| | | 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, ", "); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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") |
| | |
| | | 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") |
| | |
| | | #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> |
| | |
| | | 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") |
| | |
| | | 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") |
| | |
| | | #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> |
| | |
| | | <template> |
| | | <div :class="{'hidden':hidden}" class="pagination-container"> |
| | | <el-pagination |
| | | v-if="pageShow" |
| | | :background="background" |
| | | :current-page.sync="currentPage" |
| | | :page-size.sync="pageSize" |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | pageShow: true |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | 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) { |
| | |
| | | import NProgress from 'nprogress' |
| | | import 'nprogress/nprogress.css' |
| | | import { getToken } from '@/utils/auth' |
| | | import { isRelogin } from '@/utils/request' |
| | | |
| | | NProgress.configure({ showSpinner: false }) |
| | | |
| | |
| | | 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) // 动态添加可访问路由表 |
| | |
| | | |
| | | let downloadLoadingInstance; |
| | | // 是否显示重新登录 |
| | | let isReloginShow; |
| | | export let isRelogin = { show: false }; |
| | | |
| | | axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' |
| | | // 对应国际化资源文件后缀 |
| | |
| | | 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('无效的会话,或者会话已过期,请重新登录。') |
| | |
| | | |
| | | // 回显数据字典 |
| | | export function selectDictLabel(datas, value) { |
| | | if (value === undefined) { |
| | | return ""; |
| | | } |
| | | var actions = []; |
| | | Object.keys(datas).some((key) => { |
| | | if (datas[key].value == ('' + 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); |
| | | } |
| | |
| | | email: [ |
| | | { |
| | | type: "email", |
| | | message: "'请输入正确的邮箱地址", |
| | | message: "请输入正确的邮箱地址", |
| | | trigger: ["blur", "change"] |
| | | } |
| | | ], |
| | |
| | | </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" |
| | |
| | | <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" |
| | |
| | | <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" |
| | |
| | | </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" |
| | |
| | | { required: true, message: "邮箱地址不能为空", trigger: "blur" }, |
| | | { |
| | | type: "email", |
| | | message: "'请输入正确的邮箱地址", |
| | | message: "请输入正确的邮箱地址", |
| | | trigger: ["blur", "change"] |
| | | } |
| | | ], |