diff --git a/README.md b/README.md
index d0401152..d484cf8d 100644
--- a/README.md
+++ b/README.md
@@ -110,4 +110,4 @@
## 若依前后端分离交流群
-QQ群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) 点击按钮入群。
\ No newline at end of file
+QQ群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) 点击按钮入群。
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index f7280e97..89327e66 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,14 +18,14 @@
UTF-8
1.8
3.1.1
- 1.2.14
+ 1.2.15
1.21
3.0.0
- 2.3.2
+ 2.3.3
2.2.2
1.4.5
- 2.0.16
- 6.3.0
+ 2.0.20
+ 6.3.2
2.11.0
1.4
3.2.2
@@ -146,7 +146,7 @@
- com.github.penggle
+ pro.fessional
kaptcha
${kaptcha.version}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
deleted file mode 100644
index e901fedd..00000000
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.ruoyi.web.controller.tool;
-
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import com.ruoyi.common.core.controller.BaseController;
-
-/**
- * swagger 接口
- *
- * @author ruoyi
- */
-@Controller
-@RequestMapping("/tool/swagger")
-public class SwaggerController extends BaseController
-{
- @PreAuthorize("@ss.hasPermi('tool:swagger:view')")
- @GetMapping()
- public String index()
- {
- return redirect("/swagger-ui.html");
- }
-}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
index 87fa40fc..f4ba2934 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
@@ -138,5 +138,5 @@ public class Constants
* 定时任务违规的字符
*/
public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
- "org.springframework", "org.apache", "com.ruoyi.common.utils.file" };
+ "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config" };
}
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
index 0f693ff6..54b68ad4 100644
--- a/ruoyi-framework/pom.xml
+++ b/ruoyi-framework/pom.xml
@@ -37,7 +37,7 @@
- com.github.penggle
+ pro.fessional
kaptcha
diff --git a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
index 9d29acee..b7fdb62d 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
@@ -187,11 +187,11 @@
#elseif($column.htmlType == "imageUpload")
-
+
#elseif($column.htmlType == "fileUpload")
-
+
#elseif($column.htmlType == "editor")
@@ -205,8 +205,11 @@
v-for="dict in dict.type.${dictType}"
:key="dict.value"
:label="dict.label"
- #if($column.javaType == "Integer" || $column.javaType == "Long"):value="parseInt(dict.value)"#else:value="dict.value"#end
-
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+ :value="parseInt(dict.value)"
+#else
+ :value="dict.value"
+#end
>
@@ -217,7 +220,7 @@
#elseif($column.htmlType == "checkbox" && "" != $dictType)
-
+
#elseif($column.htmlType == "checkbox" && $dictType)
-
+
请选择字典生成
#elseif($column.htmlType == "radio" && "" != $dictType)
-
+
{{dict.label}}
#elseif($column.htmlType == "radio" && $dictType)
-
+
请选择字典生成
@@ -335,7 +341,7 @@ export default {
#set($comment=$column.columnComment)
#end
$column.javaField: [
- { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select")"change"#else"blur"#end }
+ { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
]#if($foreach.count != $columns.size()),#end
#end
#end
@@ -398,10 +404,7 @@ export default {
reset() {
this.form = {
#foreach ($column in $columns)
-#if($column.htmlType == "radio")
- $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($foreach.count != $columns.size()),#end
-
-#elseif($column.htmlType == "checkbox")
+#if($column.htmlType == "checkbox")
$column.javaField: []#if($foreach.count != $columns.size()),#end
#else
$column.javaField: null#if($foreach.count != $columns.size()),#end
diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
index 8daa05ec..70ff30dd 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
@@ -198,11 +198,11 @@
#elseif($column.htmlType == "imageUpload")
-
+
#elseif($column.htmlType == "fileUpload")
-
+
#elseif($column.htmlType == "editor")
@@ -216,8 +216,11 @@
v-for="dict in dict.type.${dictType}"
:key="dict.value"
:label="dict.label"
- #if($column.javaType == "Integer" || $column.javaType == "Long"):value="parseInt(dict.value)"#else:value="dict.value"#end
-
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+ :value="parseInt(dict.value)"
+#else
+ :value="dict.value"
+#end
>
@@ -228,7 +231,7 @@
#elseif($column.htmlType == "checkbox" && "" != $dictType)
-
+
#elseif($column.htmlType == "checkbox" && $dictType)
-
+
请选择字典生成
#elseif($column.htmlType == "radio" && "" != $dictType)
-
+
{{dict.label}}
#elseif($column.htmlType == "radio" && $dictType)
-
+
请选择字典生成
@@ -412,7 +418,7 @@ export default {
#set($comment=$column.columnComment)
#end
$column.javaField: [
- { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select")"change"#else"blur"#end }
+ { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
]#if($foreach.count != $columns.size()),#end
#end
#end
@@ -456,9 +462,7 @@ export default {
reset() {
this.form = {
#foreach ($column in $columns)
-#if($column.htmlType == "radio")
- $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($foreach.count != $columns.size()),#end
-#elseif($column.htmlType == "checkbox")
+#if($column.htmlType == "checkbox")
$column.javaField: []#if($foreach.count != $columns.size()),#end
#else
$column.javaField: null#if($foreach.count != $columns.size()),#end
diff --git a/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
index 1294525e..405d7d6a 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
@@ -166,6 +166,7 @@
value-key="${treeCode}"
placeholder="请选择${comment}"
check-strictly
+ :render-after-expand="false"
/>
#elseif($column.htmlType == "input")
@@ -173,11 +174,11 @@
#elseif($column.htmlType == "imageUpload")
-
+
#elseif($column.htmlType == "fileUpload")
-
+
#elseif($column.htmlType == "editor")
@@ -191,8 +192,11 @@
v-for="dict in ${dictType}"
:key="dict.value"
:label="dict.label"
- #if($column.javaType == "Integer" || $column.javaType == "Long"):value="parseInt(dict.value)"#else:value="dict.value"#end
-
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+ :value="parseInt(dict.value)"
+#else
+ :value="dict.value"
+#end
>
@@ -203,7 +207,7 @@
#elseif($column.htmlType == "checkbox" && "" != $dictType)
-
+
#elseif($column.htmlType == "checkbox" && $dictType)
-
+
请选择字典生成
#elseif($column.htmlType == "radio" && "" != $dictType)
-
+
{{dict.label}}
#elseif($column.htmlType == "radio" && $dictType)
-
+
请选择字典生成
@@ -307,7 +314,7 @@ const data = reactive({
#set($comment=$column.columnComment)
#end
$column.javaField: [
- { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select")"change"#else"blur"#end }
+ { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
]#if($foreach.count != $columns.size()),#end
#end
#end
@@ -360,10 +367,7 @@ function cancel() {
function reset() {
form.value = {
#foreach ($column in $columns)
-#if($column.htmlType == "radio")
- $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($foreach.count != $columns.size()),#end
-
-#elseif($column.htmlType == "checkbox")
+#if($column.htmlType == "checkbox")
$column.javaField: []#if($foreach.count != $columns.size()),#end
#else
$column.javaField: null#if($foreach.count != $columns.size()),#end
diff --git a/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
index 8fae4493..8b25665a 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
@@ -181,11 +181,11 @@
#elseif($column.htmlType == "imageUpload")
-
+
#elseif($column.htmlType == "fileUpload")
-
+
#elseif($column.htmlType == "editor")
@@ -199,8 +199,11 @@
v-for="dict in ${dictType}"
:key="dict.value"
:label="dict.label"
- #if($column.javaType == "Integer" || $column.javaType == "Long"):value="parseInt(dict.value)"#else:value="dict.value"#end
-
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+ :value="parseInt(dict.value)"
+#else
+ :value="dict.value"
+#end
>
@@ -211,7 +214,7 @@
#elseif($column.htmlType == "checkbox" && "" != $dictType)
-
+
#elseif($column.htmlType == "checkbox" && $dictType)
-
+
请选择字典生成
#elseif($column.htmlType == "radio" && "" != $dictType)
-
+
{{dict.label}}
#elseif($column.htmlType == "radio" && $dictType)
-
+
请选择字典生成
@@ -388,7 +394,7 @@ const data = reactive({
#set($comment=$column.columnComment)
#end
$column.javaField: [
- { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select")"change"#else"blur"#end }
+ { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
]#if($foreach.count != $columns.size()),#end
#end
#end
@@ -432,9 +438,7 @@ function cancel() {
function reset() {
form.value = {
#foreach ($column in $columns)
-#if($column.htmlType == "radio")
- $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($foreach.count != $columns.size()),#end
-#elseif($column.htmlType == "checkbox")
+#if($column.htmlType == "checkbox")
$column.javaField: []#if($foreach.count != $columns.size()),#end
#else
$column.javaField: null#if($foreach.count != $columns.size()),#end
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index 1aa456f0..41423884 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -71,11 +71,7 @@ public class SysDeptServiceImpl implements ISysDeptService
public List buildDeptTree(List depts)
{
List returnList = new ArrayList();
- List tempList = new ArrayList();
- for (SysDept dept : depts)
- {
- tempList.add(dept.getDeptId());
- }
+ List tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
for (SysDept dept : depts)
{
// 如果是顶级节点, 遍历该父节点的所有子节点
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
index 481a9ec9..a85c3506 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -223,11 +223,7 @@ public class SysMenuServiceImpl implements ISysMenuService
public List buildMenuTree(List menus)
{
List returnList = new ArrayList();
- List tempList = new ArrayList();
- for (SysMenu dept : menus)
- {
- tempList.add(dept.getMenuId());
- }
+ List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
for (Iterator iterator = menus.iterator(); iterator.hasNext();)
{
SysMenu menu = (SysMenu) iterator.next();
@@ -479,8 +475,8 @@ public class SysMenuServiceImpl implements ISysMenuService
/**
* 递归列表
*
- * @param list
- * @param t
+ * @param list 分类表
+ * @param t 子节点
*/
private void recursionFn(List list, SysMenu t)
{
@@ -525,7 +521,7 @@ public class SysMenuServiceImpl implements ISysMenuService
/**
* 内链域名特殊字符替换
*
- * @return
+ * @return 替换后的内链域名
*/
public String innerLinkReplaceEach(String path)
{
diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json
index 06c1fc03..190bf2f1 100644
--- a/ruoyi-ui/package.json
+++ b/ruoyi-ui/package.json
@@ -40,7 +40,7 @@
"axios": "0.24.0",
"clipboard": "2.0.8",
"core-js": "3.25.3",
- "echarts": "4.9.0",
+ "echarts": "5.4.0",
"element-ui": "2.15.10",
"file-saver": "2.0.5",
"fuse.js": "6.4.3",
diff --git a/ruoyi-ui/src/assets/styles/ruoyi.scss b/ruoyi-ui/src/assets/styles/ruoyi.scss
index 2b63c847..db8c29ba 100644
--- a/ruoyi-ui/src/assets/styles/ruoyi.scss
+++ b/ruoyi-ui/src/assets/styles/ruoyi.scss
@@ -60,6 +60,10 @@
color: inherit;
}
+.el-message-box__status + .el-message-box__message{
+ word-break: break-word;
+}
+
.el-dialog:not(.is-fullscreen) {
margin-top: 6vh !important;
}
diff --git a/ruoyi-ui/src/components/HeaderSearch/index.vue b/ruoyi-ui/src/components/HeaderSearch/index.vue
index 09311842..6e9b72f0 100644
--- a/ruoyi-ui/src/components/HeaderSearch/index.vue
+++ b/ruoyi-ui/src/components/HeaderSearch/index.vue
@@ -90,7 +90,6 @@ export default {
threshold: 0.4,
location: 0,
distance: 100,
- maxPatternLength: 32,
minMatchCharLength: 1,
keys: [{
name: 'title',
diff --git a/ruoyi-ui/src/components/RightPanel/index.vue b/ruoyi-ui/src/components/RightPanel/index.vue
index 42b5a6be..25ce3f81 100644
--- a/ruoyi-ui/src/components/RightPanel/index.vue
+++ b/ruoyi-ui/src/components/RightPanel/index.vue
@@ -39,7 +39,6 @@ export default {
}
},
mounted() {
- this.insertToBody()
this.addEventClick()
},
beforeDestroy() {
@@ -56,11 +55,6 @@ export default {
this.show = false
window.removeEventListener('click', this.closeSidebar)
}
- },
- insertToBody() {
- const elx = this.$refs.rightPanel
- const body = document.querySelector('body')
- body.insertBefore(elx, body.firstChild)
}
}
}
diff --git a/ruoyi-ui/src/plugins/download.js b/ruoyi-ui/src/plugins/download.js
index 86e20311..a3bb8c4f 100644
--- a/ruoyi-ui/src/plugins/download.js
+++ b/ruoyi-ui/src/plugins/download.js
@@ -9,7 +9,7 @@ const baseURL = process.env.VUE_APP_BASE_API
export default {
name(name, isDelete = true) {
- var url = baseURL + "/common/download?fileName=" + encodeURI(name) + "&delete=" + isDelete
+ var url = baseURL + "/common/download?fileName=" + encodeURIComponent(name) + "&delete=" + isDelete
axios({
method: 'get',
url: url,
@@ -19,14 +19,14 @@ export default {
const isLogin = await blobValidate(res.data);
if (isLogin) {
const blob = new Blob([res.data])
- this.saveAs(blob, decodeURI(res.headers['download-filename']))
+ this.saveAs(blob, decodeURIComponent(res.headers['download-filename']))
} else {
this.printErrMsg(res.data);
}
})
},
resource(resource) {
- var url = baseURL + "/common/download/resource?resource=" + encodeURI(resource);
+ var url = baseURL + "/common/download/resource?resource=" + encodeURIComponent(resource);
axios({
method: 'get',
url: url,
@@ -36,7 +36,7 @@ export default {
const isLogin = await blobValidate(res.data);
if (isLogin) {
const blob = new Blob([res.data])
- this.saveAs(blob, decodeURI(res.headers['download-filename']))
+ this.saveAs(blob, decodeURIComponent(res.headers['download-filename']))
} else {
this.printErrMsg(res.data);
}
diff --git a/ruoyi-ui/src/views/dashboard/BarChart.vue b/ruoyi-ui/src/views/dashboard/BarChart.vue
index 6b464e1c..5be49bca 100644
--- a/ruoyi-ui/src/views/dashboard/BarChart.vue
+++ b/ruoyi-ui/src/views/dashboard/BarChart.vue
@@ -3,7 +3,7 @@