From 0025941824828944cd28a9b24d38af61db62fc7e Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: Sat, 21 Mar 2026 22:41:49 +0800
Subject: [PATCH] 保存排序添加编辑权限
---
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java | 27 +++++++++
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml | 6 +
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java | 8 ++
ruoyi-ui/src/api/system/dept.js | 9 +++
ruoyi-ui/src/views/system/dept/index.vue | 56 ++++++++++++++++++
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java | 7 ++
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java | 15 +++++
7 files changed, 125 insertions(+), 3 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java
index 54deb3f..97cb935 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.controller;
import java.util.List;
+import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -112,6 +113,20 @@
}
/**
+ * 保存部门排序
+ */
+ @RequiresPermissions("system:dept:edit")
+ @Log(title = "保存部门排序", businessType = BusinessType.UPDATE)
+ @PutMapping("/updateSort")
+ public AjaxResult updateSort(@RequestBody Map<String, String> params)
+ {
+ String[] deptIds = params.get("deptIds").split(",");
+ String[] orderNums = params.get("orderNums").split(",");
+ deptService.updateDeptSort(deptIds, orderNums);
+ return success();
+ }
+
+ /**
* 删除部门
*/
@RequiresPermissions("system:dept:remove")
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
index 803b879..11ac693 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
@@ -109,6 +109,13 @@
public int updateDeptChildren(@Param("depts") List<SysDept> depts);
/**
+ * 保存部门排序
+ *
+ * @param dept 部门信息
+ */
+ public void updateDeptSort(SysDept dept);
+
+ /**
* 删除部门管理信息
*
* @param deptId 部门ID
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
index 2d45ac3..6092564 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
@@ -115,6 +115,14 @@
public int updateDept(SysDept dept);
/**
+ * 保存部门排序
+ *
+ * @param deptIds 部门ID数组
+ * @param orderNums 排序数组
+ */
+ public void updateDeptSort(String[] deptIds, String[] orderNums);
+
+ /**
* 删除部门管理信息
*
* @param deptId 部门ID
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index 72aa8bb..8a01479 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -6,6 +6,7 @@
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.text.Convert;
@@ -281,6 +282,32 @@
}
/**
+ * 保存部门排序
+ *
+ * @param deptIds 部门ID数组
+ * @param orderNums 排序数组
+ */
+ @Override
+ @Transactional
+ public void updateDeptSort(String[] deptIds, String[] orderNums)
+ {
+ try
+ {
+ for (int i = 0; i < deptIds.length; i++)
+ {
+ SysDept dept = new SysDept();
+ dept.setDeptId(Convert.toLong(deptIds[i]));
+ dept.setOrderNum(Convert.toInt(orderNums[i]));
+ deptMapper.updateDeptSort(dept);
+ }
+ }
+ catch (Exception e)
+ {
+ throw new ServiceException("保存排序异常,请联系管理员");
+ }
+ }
+
+ /**
* 删除部门管理信息
*
* @param deptId 部门ID
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index 000166e..eaddf0d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -150,8 +150,12 @@
</foreach>
</update>
+ <update id="updateDeptSort" parameterType="SysDept">
+ update sys_dept set order_num = #{orderNum} where dept_id = #{deptId}
+ </update>
+
<delete id="deleteDeptById" parameterType="Long">
update sys_dept set del_flag = '2' where dept_id = #{deptId}
</delete>
-</mapper>
\ No newline at end of file
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-ui/src/api/system/dept.js b/ruoyi-ui/src/api/system/dept.js
index 9ca6966..b9ac75e 100644
--- a/ruoyi-ui/src/api/system/dept.js
+++ b/ruoyi-ui/src/api/system/dept.js
@@ -43,6 +43,15 @@
})
}
+// 保存部门排序
+export function updateDeptSort(data) {
+ return request({
+ url: '/system/dept/updateSort',
+ method: 'put',
+ data: data
+ })
+}
+
// 删除部门
export function delDept(deptId) {
return request({
diff --git a/ruoyi-ui/src/views/system/dept/index.vue b/ruoyi-ui/src/views/system/dept/index.vue
index 99c840d..a8d63f3 100644
--- a/ruoyi-ui/src/views/system/dept/index.vue
+++ b/ruoyi-ui/src/views/system/dept/index.vue
@@ -38,6 +38,16 @@
</el-col>
<el-col :span="1.5">
<el-button
+ type="warning"
+ plain
+ icon="el-icon-check"
+ size="mini"
+ @click="handleSaveSort"
+ v-hasPermi="['system:dept:edit']"
+ >保存排序</el-button>
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
type="info"
plain
icon="el-icon-sort"
@@ -57,7 +67,11 @@
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
- <el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
+ <el-table-column prop="orderNum" label="排序" width="200">
+ <template slot-scope="scope">
+ <el-input-number v-model="scope.row.orderNum" controls-position="right" :min="0" size="mini" style="width: 88px" />
+ </template>
+ </el-table-column>
<el-table-column prop="status" label="状态" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
@@ -158,7 +172,7 @@
</template>
<script>
-import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept"
+import { listDept, getDept, delDept, addDept, updateDept, updateDeptSort, listDeptExcludeChild } from "@/api/system/dept"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
@@ -184,6 +198,8 @@
isExpandAll: true,
// 重新渲染表格状态
refreshTable: true,
+ // 记录原始排序,用于对比变更
+ originalOrders: {},
// 查询参数
queryParams: {
deptName: undefined,
@@ -228,6 +244,8 @@
this.loading = true
listDept(this.queryParams).then(response => {
this.deptList = this.handleTree(response.data, "deptId")
+ // 记录原始排序值
+ this.recordOriginalOrders(this.deptList)
this.loading = false
})
},
@@ -326,6 +344,40 @@
}
})
},
+ /** 递归记录原始排序 */
+ recordOriginalOrders(list) {
+ list.forEach(item => {
+ this.originalOrders[item.deptId] = item.orderNum
+ if (item.children && item.children.length) {
+ this.recordOriginalOrders(item.children)
+ }
+ })
+ },
+ /** 保存排序 */
+ handleSaveSort() {
+ const changedDeptIds = []
+ const changedOrderNums = []
+ const collectChanged = (list) => {
+ list.forEach(item => {
+ if (String(this.originalOrders[item.deptId]) !== String(item.orderNum)) {
+ changedDeptIds.push(item.deptId)
+ changedOrderNums.push(item.orderNum)
+ }
+ if (item.children && item.children.length) {
+ collectChanged(item.children)
+ }
+ })
+ }
+ collectChanged(this.deptList)
+ if (changedDeptIds.length === 0) {
+ this.$modal.msgWarning("未检测到排序修改")
+ return
+ }
+ updateDeptSort({ deptIds: changedDeptIds.join(","), orderNums: changedOrderNums.join(",") }).then(() => {
+ this.$modal.msgSuccess("排序保存成功")
+ this.recordOriginalOrders(this.deptList)
+ })
+ },
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?').then(function() {
--
Gitblit v1.9.3