部门管理支持批量保存排序
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package com.ruoyi.web.controller.system;
|
package com.ruoyi.web.controller.system;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
@@ -110,6 +111,19 @@ public class SysDeptController extends BaseController
|
|||||||
return toAjax(deptService.updateDept(dept));
|
return toAjax(deptService.updateDept(dept));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存部门排序
|
||||||
|
*/
|
||||||
|
@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();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除部门
|
* 删除部门
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -108,6 +108,13 @@ public interface SysDeptMapper
|
|||||||
*/
|
*/
|
||||||
public int updateDeptChildren(@Param("depts") List<SysDept> depts);
|
public int updateDeptChildren(@Param("depts") List<SysDept> depts);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存部门排序
|
||||||
|
*
|
||||||
|
* @param dept 部门信息
|
||||||
|
*/
|
||||||
|
public void updateDeptSort(SysDept dept);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除部门管理信息
|
* 删除部门管理信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -114,6 +114,14 @@ public interface ISysDeptService
|
|||||||
*/
|
*/
|
||||||
public int updateDept(SysDept dept);
|
public int updateDept(SysDept dept);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存部门排序
|
||||||
|
*
|
||||||
|
* @param deptIds 部门ID数组
|
||||||
|
* @param orderNums 排序数组
|
||||||
|
*/
|
||||||
|
public void updateDeptSort(String[] deptIds, String[] orderNums);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除部门管理信息
|
* 删除部门管理信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import java.util.List;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import com.ruoyi.common.annotation.DataScope;
|
import com.ruoyi.common.annotation.DataScope;
|
||||||
import com.ruoyi.common.constant.UserConstants;
|
import com.ruoyi.common.constant.UserConstants;
|
||||||
import com.ruoyi.common.core.domain.TreeSelect;
|
import com.ruoyi.common.core.domain.TreeSelect;
|
||||||
@@ -280,6 +281,32 @@ public class SysDeptServiceImpl implements ISysDeptService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存部门排序
|
||||||
|
*
|
||||||
|
* @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("保存排序异常,请联系管理员");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除部门管理信息
|
* 删除部门管理信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -152,8 +152,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</foreach>
|
</foreach>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<update id="updateDeptSort" parameterType="SysDept">
|
||||||
|
update sys_dept set order_num = #{orderNum} where dept_id = #{deptId}
|
||||||
|
</update>
|
||||||
|
|
||||||
<delete id="deleteDeptById" parameterType="Long">
|
<delete id="deleteDeptById" parameterType="Long">
|
||||||
update sys_dept set del_flag = '2' where dept_id = #{deptId}
|
update sys_dept set del_flag = '2' where dept_id = #{deptId}
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -43,6 +43,15 @@ export function updateDept(data) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 保存部门排序
|
||||||
|
export function updateDeptSort(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/dept/updateSort',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 删除部门
|
// 删除部门
|
||||||
export function delDept(deptId) {
|
export function delDept(deptId) {
|
||||||
return request({
|
return request({
|
||||||
|
|||||||
@@ -36,6 +36,16 @@
|
|||||||
v-hasPermi="['system:dept:add']"
|
v-hasPermi="['system:dept:add']"
|
||||||
>新增</el-button>
|
>新增</el-button>
|
||||||
</el-col>
|
</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-col :span="1.5">
|
||||||
<el-button
|
<el-button
|
||||||
type="info"
|
type="info"
|
||||||
@@ -57,7 +67,11 @@
|
|||||||
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
||||||
>
|
>
|
||||||
<el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
|
<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">
|
<el-table-column prop="status" label="状态" width="100">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
|
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
|
||||||
@@ -158,7 +172,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<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 Treeselect from "@riophae/vue-treeselect"
|
||||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
|
||||||
|
|
||||||
@@ -184,6 +198,8 @@ export default {
|
|||||||
isExpandAll: true,
|
isExpandAll: true,
|
||||||
// 重新渲染表格状态
|
// 重新渲染表格状态
|
||||||
refreshTable: true,
|
refreshTable: true,
|
||||||
|
// 记录原始排序,用于对比变更
|
||||||
|
originalOrders: {},
|
||||||
// 查询参数
|
// 查询参数
|
||||||
queryParams: {
|
queryParams: {
|
||||||
deptName: undefined,
|
deptName: undefined,
|
||||||
@@ -228,6 +244,8 @@ export default {
|
|||||||
this.loading = true
|
this.loading = true
|
||||||
listDept(this.queryParams).then(response => {
|
listDept(this.queryParams).then(response => {
|
||||||
this.deptList = this.handleTree(response.data, "deptId")
|
this.deptList = this.handleTree(response.data, "deptId")
|
||||||
|
// 记录原始排序值
|
||||||
|
this.recordOriginalOrders(this.deptList)
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -326,6 +344,40 @@ export default {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
/** 递归记录原始排序 */
|
||||||
|
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) {
|
handleDelete(row) {
|
||||||
this.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?').then(function() {
|
this.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?').then(function() {
|
||||||
|
|||||||
Reference in New Issue
Block a user