RuoYi
2026-03-21 0025941824828944cd28a9b24d38af61db62fc7e
保存排序添加编辑权限
7 files modified
126 ■■■■■ changed files
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java 15 ●●●●● patch | view | raw | blame | history
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java 7 ●●●●● patch | view | raw | blame | history
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java 8 ●●●●● patch | view | raw | blame | history
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java 27 ●●●●● patch | view | raw | blame | history
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml 4 ●●●● patch | view | raw | blame | history
ruoyi-ui/src/api/system/dept.js 9 ●●●●● patch | view | raw | blame | history
ruoyi-ui/src/views/system/dept/index.vue 56 ●●●●● patch | view | raw | blame | history
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,6 +150,10 @@
        </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>
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() {