From 78839ec83b089ed91ad00585748e78f1c724e570 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期五, 16 九月 2022 08:46:28 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/crm/system/controller/DeptController.java | 45 ++++
/dev/null | 102 ------------
src/main/java/com/zy/crm/manager/utils/NodeUtils.java | 17 ++
src/main/webapp/views/dept/dept.html | 295 ++++++++++++++++++++++++++++++++++--
4 files changed, 329 insertions(+), 130 deletions(-)
diff --git a/src/main/java/com/zy/crm/manager/utils/NodeUtils.java b/src/main/java/com/zy/crm/manager/utils/NodeUtils.java
index 0b0710b..6631d49 100644
--- a/src/main/java/com/zy/crm/manager/utils/NodeUtils.java
+++ b/src/main/java/com/zy/crm/manager/utils/NodeUtils.java
@@ -5,6 +5,8 @@
import com.zy.crm.manager.entity.Tag;
import com.zy.crm.manager.service.NodeService;
import com.zy.crm.manager.service.TagService;
+import com.zy.crm.system.entity.Dept;
+import com.zy.crm.system.service.DeptService;
/**
* Created by vincent on 2021/1/19
@@ -45,6 +47,21 @@
}
}
+ public void executePath(Dept dept) {
+ DeptService bean = SpringUtils.getBean(DeptService.class);
+ Dept parent = bean.selectById(dept.getParentId());
+ if (null != parent) {
+ path.insert(0, parent.getId()).insert(0,",");
+ pathName.insert(0, parent.getName()).insert(0,",");
+ if (parent.getParentId() != null) {
+ executePath(parent);
+ } else {
+ path.deleteCharAt(0);
+ pathName.deleteCharAt(0);
+ }
+ }
+ }
+
public void executePath(Long parentId) {
TagService bean = SpringUtils.getBean(TagService.class);
Tag parent = bean.selectById(parentId);
diff --git a/src/main/java/com/zy/crm/system/controller/DeptController.java b/src/main/java/com/zy/crm/system/controller/DeptController.java
index decd896..b753f51 100644
--- a/src/main/java/com/zy/crm/system/controller/DeptController.java
+++ b/src/main/java/com/zy/crm/system/controller/DeptController.java
@@ -12,11 +12,12 @@
import com.core.common.R;
import com.zy.crm.common.utils.ListUtils;
import com.zy.crm.common.utils.TreeUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
import com.zy.crm.common.web.BaseController;
+import com.zy.crm.manager.utils.NodeUtils;
import com.zy.crm.system.entity.Dept;
import com.zy.crm.system.service.DeptService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.*;
@@ -45,6 +46,7 @@
EntityWrapper<Dept> wrapper = new EntityWrapper<>();
excludeTrash(param);
convert(param, wrapper);
+ hostEq(wrapper);
if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} {
wrapper.orderBy("sort");
}
@@ -67,13 +69,27 @@
@RequestMapping(value = "/dept/add/auth")
@ManagerAuth
public R add(Dept dept) {
+ dept.setLevel(1);
+ if (dept.getParentId() == null || dept.getParentId() == 0) {
+ dept.setParentId(getOriginDept().getId());
+ }
+ Dept parent = deptService.selectById(dept.getParentId());
+ if (parent != null) {
+ dept.setParentName(parent.getName());
+ dept.setLevel(parent.getLevel() + 1);
+ }
+ // path
+ NodeUtils nodeUtils = new NodeUtils();
+ nodeUtils.executePath(dept);
+ dept.setHostId(getHostId());
+ dept.setPath(nodeUtils.path.toString());
+ dept.setNamePath(nodeUtils.pathName.toString());
+
dept.setCreateBy(getUserId());
dept.setCreateTime(new Date());
dept.setUpdateBy(getUserId());
dept.setUpdateTime(new Date());
- if (dept.getParentId() == null) {
- dept.setParentId(0L);
- }
+ dept.setStatus(1);
deptService.insert(dept);
return R.ok();
}
@@ -84,6 +100,23 @@
if (Cools.isEmpty(dept) || null==dept.getId()){
return R.error();
}
+ if (dept.getParentId() != null && dept.getParentId() > 0) {
+ if (dept.getParentId().equals(dept.getId())) {
+ return R.error("鏁版嵁閿欒");
+ }
+ Dept parent = deptService.selectById(dept.getParentId());
+ if (parent != null) {
+ dept.setParentName(parent.getName());
+ dept.setLevel(parent.getLevel() + 1);
+ }
+ }
+ // path
+ NodeUtils nodeUtils = new NodeUtils();
+ nodeUtils.executePath(dept);
+ dept.setPath(nodeUtils.path.toString());
+ dept.setNamePath(nodeUtils.pathName.toString());
+ dept.setUpdateBy(getUserId());
+ dept.setUpdateTime(new Date());
deptService.updateById(dept);
return R.ok();
}
@@ -139,7 +172,7 @@
@PostMapping(value = "/dept/tree/auth")
@ManagerAuth
public R tree(@RequestParam(required = false, defaultValue = "") String condition) throws IOException, ClassNotFoundException {
- ArrayList<Map> tree = treeUtils.getDeptTree(String.valueOf(getOriginDept().getId()), getHostId());
+ ArrayList<Map> tree = treeUtils.getDeptTree(String.valueOf(getDeptId()), getHostId());
// 娣辨嫹璐�
List<Map> result = ListUtils.deepCopy(tree);
if (!Cools.isEmpty(condition)) {
diff --git a/src/main/webapp/views/dept/dept.html b/src/main/webapp/views/dept/dept.html
index 663faab..ef03e88 100644
--- a/src/main/webapp/views/dept/dept.html
+++ b/src/main/webapp/views/dept/dept.html
@@ -9,28 +9,30 @@
<link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
<link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
<link rel="stylesheet" href="../../static/css/cool.css" media="all">
- <link rel="stylesheet" href="../../static/css/common.css" media="all">
<style>
- body {
- /*background-color: #F1F1F1;*/
- padding: 15px;
+ #detail {
+ padding: 25px 30px 0 0;
}
- .btn-edit {
- display: none;
- }
- .btn-del {
- display: none;
+ .ew-tree-table-box {
+ height: 100%;
}
</style>
</head>
<body>
-
-<!-- 鎼滅储鏍� -->
-
-<!-- 琛ㄦ牸 -->
-<div class="layui-form">
- <table class="layui-hide" id="dept" lay-filter="dept"></table>
+<!-- 姝f枃寮�濮� -->
+<div class="layui-fluid">
+ <div class="layui-card">
+ <div class="layui-card-body">
+ <!-- 鏁版嵁琛ㄦ牸 -->
+ <table id="dept"></table>
+ </div>
+ </div>
</div>
+
+<script type="text/html" id="operate">
+ <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+ <a class="layui-btn layui-btn-danger layui-btn-xs btn-del" lay-event="del">鍒犻櫎</a>
+</script>
<script type="text/html" id="statusTpl">
<span name="status"
{{# if( d.status === 0){ }}
@@ -40,21 +42,270 @@
{{# } }}
>{{d.status$}}</span>
</script>
-<!-- 琛ㄦ牸鎿嶄綔鍒� -->
-<script type="text/html" id="tbBar">
- <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
- <a class="layui-btn layui-btn-danger layui-btn-xs btn-del" lay-event="del">鍒犻櫎</a>
-</script>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+ <form id="detail" lay-filter="detail" class="layui-form">
+ <input name="id" type="hidden">
+ <input name="uuid" type="hidden">
+ <input name="path" type="hidden">
+ <input name="pathName" type="hidden">
+ <input name="img" type="hidden">
+ <input name="brief" type="hidden">
+ <input name="level" type="hidden">
+ <input name="count" type="hidden">
+ <input name="createTime$" type="hidden">
+ <input name="createBy" type="hidden">
+ <input name="updateTime$" type="hidden">
+ <input name="updateBy" type="hidden">
+ <div class="layui-row">
+
+ <div class="layui-col-md6">
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">涓婄骇閮ㄩ棬</label>
+ <div class="layui-input-block">
+ <div id="deptParentSel" class="ew-xmselect-tree"></div>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">绫诲瀷</label>
+ <div class="layui-input-block">
+ <select name="type" lay-vertype="tips">
+ <option value="">璇烽�夋嫨绫诲瀷</option>
+ <option value="0">鍏朵粬</option>
+ </select>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">璐熻矗浜�</label>
+ <div class="layui-input-block">
+ <input name="leading" placeholder="璇疯緭鍏ヨ礋璐d汉" class="layui-input">
+ </div>
+ </div>
+
+ </div>
+
+ <div class="layui-col-md6">
+
+ <div class="layui-form-item">
+ <label class="layui-form-label layui-form-required">褰掔被鍚嶇О</label>
+ <div class="layui-input-block">
+ <input name="name" placeholder="璇疯緭鍏ュ綊绫诲悕绉�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">鎺掑簭</label>
+ <div class="layui-input-block">
+ <input name="sort" placeholder="璇疯緭鍏ユ帓搴�" class="layui-input">
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">澶囨敞</label>
+ <div class="layui-input-block">
+ <input name="memo" placeholder="璇疯緭鍏ュ娉�" class="layui-input">
+ </div>
+ </div>
+
+ </div>
+ </div>
+ <hr class="layui-bg-gray">
+ <div class="layui-form-item text-right">
+ <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+ </div>
+ </form>
+</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
-<script type="text/javascript" src="../../static/js/dept/dept.js" charset="utf-8"></script>
-<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+<script>
+ layui.config({
+ base: baseUrl + "/static/layui/lay/modules/"
+ }).use(['form','treeTable', 'admin', 'xmSelect'], function() {
+ var $ = layui.jquery;
+ var layer = layui.layer;
+ var form = layui.form;
+ var admin = layui.admin;
+ var treeTable = layui.treeTable;
+ var xmSelect = layui.xmSelect;
+ var tbDataList = [];
+ var insTb = treeTable.render({
+ elem: '#dept',
+ url: baseUrl+'/dept/list/auth',
+ headers: {token: localStorage.getItem('token')},
+ height: 'full-200',
+ toolbar: ['<p>',
+ '<button lay-event="add" class="layui-btn layui-btn-sm icon-btn"><i class="layui-icon"></i>娣诲姞</button> ',
+ '<button lay-event="del" class="layui-btn layui-btn-sm layui-btn-danger icon-btn"><i class="layui-icon"></i>鍒犻櫎</button>',
+ '</p>'].join(''),
+ tree: {
+ iconIndex: 2, // 鎶樺彔鍥炬爣鏄剧ず鍦ㄧ鍑犲垪
+ isPidData: true, // 鏄惁鏄痠d銆乸id褰㈠紡鏁版嵁
+ idName: 'id', // id瀛楁鍚嶇О
+ pidName: 'parentId' // pid瀛楁鍚嶇О
+ },
+ cols: [[
+ {type: 'checkbox'}
+ ,{type: 'numbers'}
+ ,{field: 'name', align: 'left',title: '鍚嶇О', minWidth: 150}
+ // ,{field: 'uuid', align: 'center',title: '缂栧彿'}
+ ,{field: 'type$', align: 'center',title: '绫诲瀷'}
+ ,{field: 'leading', align: 'center',title: '璐熻矗浜�'}
+ ,{field: 'img', align: 'center',title: '鍥剧墖', hide: true}
+ // ,{field: 'brief', align: 'center',title: '绠�瑕佹弿杩�'}
+ // ,{field: 'count', align: 'center',title: '鏁伴噺'}
+ ,{field: 'sort', align: 'center',title: '鎺掑簭'}
+ ,{field: 'status$', align: 'center',title: '鐘舵��'}
+ ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+ ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳', hide: true}
+ ,{field: 'memo', align: 'center',title: '澶囨敞', hide: true}
+
+ ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+ ]],
+ done: function (data) {
+ $('.ew-tree-table-box').css('height', '100%');
+ insTb.expandAll();
+ tbDataList = data;
+ }
+ });
+
+ /* 琛ㄦ牸澶村伐鍏锋爮鐐瑰嚮浜嬩欢 */
+ treeTable.on('toolbar(dept)', function (obj) {
+ if (obj.event === 'add') { // 娣诲姞
+ showEditModel();
+ } else if (obj.event === 'del') { // 鍒犻櫎
+ var checkRows = insTb.checkStatus();
+ if (checkRows.length === 0) {
+ layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+ return;
+ }
+ var ids = checkRows.map(function (d) {
+ if (!d.LAY_INDETERMINATE) {
+ return d.id;
+ } else {
+ return null;
+ }
+ });
+ doDel({ids: ids});
+ }
+ });
+
+ /* 琛ㄦ牸鎿嶄綔鍒楃偣鍑讳簨浠� */
+ treeTable.on('tool(dept)', function (obj) {
+ if (obj.event === 'edit') { // 淇敼
+ showEditModel(obj.data);
+ } else if (obj.event === 'del') { // 鍒犻櫎
+ doDel(obj);
+ }
+ });
+
+ /* 鏄剧ず琛ㄥ崟寮圭獥 */
+ function showEditModel(mData) {
+ admin.open({
+ type: 1,
+ area: '600px',
+ title: (mData ? '淇敼' : '娣诲姞') + '閮ㄩ棬',
+ content: $('#editDialog').html(),
+ success: function (layero, dIndex) {
+ // 鍥炴樉琛ㄥ崟鏁版嵁
+ form.val('detail', mData);
+ // 琛ㄥ崟鎻愪氦浜嬩欢
+ form.on('submit(editSubmit)', function (data) {
+ data.field.parentId = insXmSel.getValue('valueStr');
+ var loadIndex = layer.load(2);
+ $.ajax({
+ url: baseUrl+"/dept/"+(mData?'update':'add')+"/auth",
+ headers: {'token': localStorage.getItem('token')},
+ data: data.field,
+ method: 'POST',
+ success: function (res) {
+ layer.close(loadIndex);
+ if (res.code === 200){
+ layer.close(dIndex);
+ layer.msg(res.msg, {icon: 1});
+ insTb.refresh();
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ }else {
+ layer.msg(res.msg, {icon: 2});
+ }
+ }
+ })
+ return false;
+ });
+ // 娓叉煋涓嬫媺鏍�
+ var insXmSel = xmSelect.render({
+ el: '#deptParentSel',
+ height: '250px',
+ data: insTb.options.data,
+ initValue: mData ? [mData.parentId] : [],
+ model: {label: {type: 'text'}},
+ prop: {
+ name: 'name',
+ value: 'id'
+ },
+ radio: true,
+ clickClose: true,
+ tree: {
+ show: true,
+ indent: 15,
+ strict: false,
+ expandedKeys: true
+ }
+ });
+ // 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
+ $(layero).children('.layui-layer-content').css('overflow', 'visible');
+ layui.form.render('select');
+ }
+ });
+ }
+
+ /* 鍒犻櫎 */
+ function doDel(obj) {
+ layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+ skin: 'layui-layer-admin',
+ shade: .1
+ }, function (i) {
+ layer.close(i);
+ var loadIndex = layer.load(2);
+ var ids;
+ if (obj.data) {
+ ids = [];
+ ids[0] = obj.data.id;
+ } else {
+ ids = obj.ids;
+ }
+ $.ajax({
+ url: baseUrl+"/dept/delete/auth",
+ headers: {'token': localStorage.getItem('token')},
+ data: {ids: ids},
+ method: 'POST',
+ success: function (res) {
+ layer.close(loadIndex);
+ if (res.code === 200){
+ layer.msg(res.msg, {icon: 1});
+ insTb.refresh();
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ } else {
+ layer.msg(res.msg, {icon: 2});
+ }
+ }
+ })
+ });
+ }
+
+ });
+</script>
</body>
</html>
diff --git a/src/main/webapp/views/dept/dept_detail.html b/src/main/webapp/views/dept/dept_detail.html
deleted file mode 100644
index d734fef..0000000
--- a/src/main/webapp/views/dept/dept_detail.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title></title>
- <meta name="renderer" content="webkit">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
- <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
- <link rel="stylesheet" href="../../static/css/cool.css" media="all">
- <link rel="stylesheet" href="../../static/css/common.css" media="all">
-</head>
-<body>
-
-<!-- 璇︽儏 -->
-<div id="data-detail" class="layer_self_wrap">
- <form id="detail" class="layui-form" style="text-align: center">
- <div class="layui-inline" style="width:80%;display: none">
- <label class="layui-form-label"><span class="not-null">*</span>閮ㄩ棬缂栧彿锛�</label>
- <div class="layui-input-inline">
- <input id="id" class="layui-input" type="text" onkeyup="check(this.id, 'dept')" lay-verify="number" >
- </div>
- </div>
- <div class="layui-inline" style="width:80%;">
- <label class="layui-form-label">鐖堕儴闂細</label>
- <div class="layui-input-inline cool-auto-complete">
- <input id="parentId" class="layui-input" type="text" style="display: none">
- <input id="deptName" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" onfocus=this.blur()>
- <div class="cool-auto-complete-window">
- <input class="cool-auto-complete-window-input" data-key="deptQuery" onkeyup="autoLoad(this.getAttribute('data-key'))">
- <select class="cool-auto-complete-window-select" data-key="deptQuerySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
- </select>
- </div>
- </div>
- </div>
- <div class="layui-inline" style="width:80%;">
- <label class="layui-form-label"><span class="not-null">*</span>閮ㄩ棬鍚嶇О锛�</label>
- <div class="layui-input-inline">
- <input id="name" class="layui-input" type="text" lay-verify="required" autocomplete="off">
- </div>
- </div>
- <div class="layui-inline" style="width:80%;">
- <label class="layui-form-label">璐� 璐� 浜猴細</label>
- <div class="layui-input-inline cool-auto-complete">
- <input id="leader" class="layui-input" type="text" lay-verify="number" style="display: none">
- <input id="leader$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" onfocus=this.blur()>
- <div class="cool-auto-complete-window">
- <input class="cool-auto-complete-window-input" data-key="userQueryByleader" onkeyup="autoLoad(this.getAttribute('data-key'))">
- <select class="cool-auto-complete-window-select" data-key="userQueryByleaderSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
- </select>
- </div>
- </div>
- </div>
- <div class="layui-inline" style="width:80%;">
- <label class="layui-form-label">鑱旂郴鐢佃瘽锛�</label>
- <div class="layui-input-inline">
- <input id="phone" class="layui-input" type="text" autocomplete="off">
- </div>
- </div>
- <div class="layui-inline" style="width:80%;">
- <label class="layui-form-label">閭��銆�绠憋細</label>
- <div class="layui-input-inline">
- <input id="email" class="layui-input" type="text" autocomplete="off">
- </div>
- </div>
- <div class="layui-inline" style="width:80%;">
- <label class="layui-form-label">閮ㄩ棬鐘舵�侊細</label>
- <div class="layui-input-inline">
- <select id="status">
- <option value="" style="display: none"></option>
- <option value="1">姝e父</option>
- <option value="0">鍋滅敤</option>
- </select>
- </div>
- </div>
- <div class="layui-inline" style="width:80%;">
- <label class="layui-form-label">鏄剧ず椤哄簭锛�</label>
- <div class="layui-input-inline">
- <input id="sort" class="layui-input" type="text" lay-verify="number" autocomplete="off">
- </div>
- </div>
- <hr class="layui-bg-gray">
-
- <div id="data-detail-btn" class="layui-btn-container layui-form-item">
- <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div>
- <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div>
- <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div>
- </div>
-
- <div id="prompt">
- 娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span>
- </div>
- </form>
-</div>
-</body>
-<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
-<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
-<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
-<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
-<script type="text/javascript" src="../../static/js/dept/dept.js" charset="utf-8"></script>
-</html>
-
--
Gitblit v1.9.1