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") 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 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 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 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> </mapper> 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({ 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() {