|
@@ -1,136 +1,254 @@
|
|
<template>
|
|
<template>
|
|
<div class="ent_depart">
|
|
<div class="ent_depart">
|
|
<header class="ent_depart_header">
|
|
<header class="ent_depart_header">
|
|
- <h4>杭州琴月文创娱乐有限公司</h4> <span>已认证</span>
|
|
|
|
|
|
+ <h4>{{companyData.department}}</h4> <span>已认证</span>
|
|
</header>
|
|
</header>
|
|
<div class="ent_depart_screen">
|
|
<div class="ent_depart_screen">
|
|
- <button @click="addDepart">添加部门</button>
|
|
|
|
- <button class="del_btn">删除</button>
|
|
|
|
|
|
+ <button @click="addDepart('add')">添加部门</button>
|
|
|
|
+ <button class="del_btn" :disabled="selectDepart.length == 0" :class="{btnActive:selectDepart.length > 0}" @click="delDepart('all')">删除</button>
|
|
</div>
|
|
</div>
|
|
<div class="ent_depart_table">
|
|
<div class="ent_depart_table">
|
|
<h4><strong>公司/部⻔名称</strong><strong>管理员</strong><strong>人数</strong><strong>编辑</strong></h4>
|
|
<h4><strong>公司/部⻔名称</strong><strong>管理员</strong><strong>人数</strong><strong>编辑</strong></h4>
|
|
<ul>
|
|
<ul>
|
|
- <li>
|
|
|
|
- <span>公司/部⻔名称</span><span>管理员</span><span>人数</span><span>编辑</span>
|
|
|
|
|
|
+ <li v-if="companyMsg">
|
|
|
|
+ <span>{{ companyData.department }}</span><span>{{ companyMsg.role }}</span><span>{{ companyMsg.num }}</span><span style="cursor: pointer;" v-if="companyMsg.role">编辑</span>
|
|
</li>
|
|
</li>
|
|
</ul>
|
|
</ul>
|
|
<el-tree
|
|
<el-tree
|
|
- :data="data"
|
|
|
|
- show-checkbox
|
|
|
|
- accordion
|
|
|
|
- :indent="50"
|
|
|
|
- node-key="id">
|
|
|
|
- <span class="custom-tree-node" slot-scope="{ node }">
|
|
|
|
|
|
+ :data="data"
|
|
|
|
+ show-checkbox
|
|
|
|
+ accordion
|
|
|
|
+ @node-expand="getChildrenNode"
|
|
|
|
+ @check-change="allSelectNode"
|
|
|
|
+ :indent="50"
|
|
|
|
+ ref="tree"
|
|
|
|
+ node-key="id">
|
|
|
|
+ <span class="custom-tree-node" slot-scope="{ node,data }">
|
|
<span>{{ node.label }}</span>
|
|
<span>{{ node.label }}</span>
|
|
- <span>管理员</span><span>人数</span><span>编辑</span>
|
|
|
|
|
|
+ <span>{{ data.aname || "--" }}</span><span>{{ data.user_count }}</span><span @click.stop="addDepart('edit',data)">编辑</span>
|
|
</span>
|
|
</span>
|
|
</el-tree>
|
|
</el-tree>
|
|
</div>
|
|
</div>
|
|
- <el-drawer
|
|
|
|
- :withHeader="false"
|
|
|
|
- :modal="false"
|
|
|
|
- size="600px"
|
|
|
|
- :show-close="false"
|
|
|
|
- :visible.sync="drawer"
|
|
|
|
- :direction="direction">
|
|
|
|
- <div class="drawer_content">
|
|
|
|
|
|
+ <!-- 添加部门 -->
|
|
|
|
+ <add-drawer ref="addDrewer" v-if="whichPart === 'add'">
|
|
|
|
+ <template slot="formItem">
|
|
<h2>添加部门</h2>
|
|
<h2>添加部门</h2>
|
|
<h4>部门信息</h4>
|
|
<h4>部门信息</h4>
|
|
- <el-form :model="ruleForm" ref="ruleForm" label-width="120px" class="demo-ruleForm">
|
|
|
|
- <el-form-item label="部门名称 :" prop="name"
|
|
|
|
- :rules="[{ required: true, message: '请输入部门名称', trigger: 'blur' }]">
|
|
|
|
|
|
+ <div class="items">
|
|
|
|
+ <label class="required">
|
|
|
|
+ <span><i>*</i> 部门名称:</span>
|
|
<el-input v-model="ruleForm.name" placeholder="请输入部门名称"></el-input>
|
|
<el-input v-model="ruleForm.name" placeholder="请输入部门名称"></el-input>
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="上级部门 :" prop="name"
|
|
|
|
- :rules="[{ required: true, message: '请选择上级部门', trigger: 'blur' }]">
|
|
|
|
- <el-input v-model="ruleForm.superior" readonly placeholder="请选择上级部门" @click="alert(1)"></el-input>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="设置管理员 :" prop="name">
|
|
|
|
- <el-input v-model="ruleForm.user" placeholder="请选择管理员"></el-input>
|
|
|
|
- </el-form-item>
|
|
|
|
- </el-form>
|
|
|
|
- <el-dialog
|
|
|
|
- title="提示"
|
|
|
|
- :visible.sync="centerDialogVisible"
|
|
|
|
- width="30%"
|
|
|
|
- center>
|
|
|
|
- <span>需要注意的是内容是默认不居中的</span>
|
|
|
|
- <span slot="footer" class="dialog-footer">
|
|
|
|
- <el-button @click="centerDialogVisible = false">取 消</el-button>
|
|
|
|
- <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
|
|
|
|
- </span>
|
|
|
|
- </el-dialog>
|
|
|
|
- <div class="btns">
|
|
|
|
- <button class="save" @click="saveDepart">保存</button>
|
|
|
|
- <button class="cancle" @click="drawer=false">取消</button>
|
|
|
|
|
|
+ </label>
|
|
|
|
+ <label class="required">
|
|
|
|
+ <span><i>*</i>上级部门:</span>
|
|
|
|
+ <el-input v-model="departMsg.name" placeholder="请选择上级部门" readonly @focus="chooseDepartFc"></el-input>
|
|
|
|
+ </label>
|
|
|
|
+ <label>
|
|
|
|
+ <span>设置管理员:</span>
|
|
|
|
+ <el-input v-model="userMsg.name" placeholder="请选择管理员" readonly @focus="chooseUserFc"></el-input>
|
|
|
|
+ </label>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- </el-drawer>
|
|
|
|
|
|
+ </template>
|
|
|
|
+ <template slot="deleteBtn">
|
|
|
|
+ <button class="save" @click="saveDepart">保存</button>
|
|
|
|
+ </template>
|
|
|
|
+
|
|
|
|
+ </add-drawer>
|
|
|
|
+
|
|
|
|
+ <!-- 编辑部门 -->
|
|
|
|
+ <add-drawer ref="addDrewer" v-if="whichPart === 'edit'">
|
|
|
|
+ <template slot="formItem">
|
|
|
|
+ <h2>编辑部门</h2>
|
|
|
|
+ <h4>部门信息</h4>
|
|
|
|
+ <div class="items">
|
|
|
|
+ <label class="required">
|
|
|
|
+ <span><i>*</i> 部门名称:</span>
|
|
|
|
+ <el-input v-model="ruleForm.name" placeholder="请输入部门名称"></el-input>
|
|
|
|
+ </label>
|
|
|
|
+ <label class="required">
|
|
|
|
+ <span><i>*</i>上级部门:</span>
|
|
|
|
+ <el-input v-model="departMsg.name" placeholder="请选择上级部门" readonly @focus="chooseDepartFc"></el-input>
|
|
|
|
+ </label>
|
|
|
|
+
|
|
|
|
+ <label>
|
|
|
|
+ <span>设置管理员:</span>
|
|
|
|
+ <el-input v-model="userMsg.name" placeholder="请选择管理员"></el-input>
|
|
|
|
+ </label>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <template slot="tips"><p class="tips">删除部门的同时,部门内部的人员也会删除</p></template>
|
|
|
|
+ <template slot="deleteBtn">
|
|
|
|
+ <button class="save" @click="saveDepart">保存</button>
|
|
|
|
+ <button class="del" @click="delDepart('single')">删除</button>
|
|
|
|
+ </template>
|
|
|
|
+ </add-drawer>
|
|
|
|
+ <!-- 删除弹窗 -->
|
|
|
|
+ <del-popup></del-popup>
|
|
|
|
+
|
|
|
|
+ <!-- //选择人员 -->
|
|
|
|
+ <choose-user ref="selectUser"></choose-user>
|
|
|
|
+
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
-import { entinfo } from '@/api/api';
|
|
|
|
|
|
+import { entinfo,componyList,addDepartInter,departDetail,departUpdata , delDepartInter} from '@/api/api';
|
|
|
|
+import addDrawer from "./addDrawer";
|
|
|
|
+import delPopup from "./del"
|
|
|
|
+import chooseUser from "./chooseUser"
|
|
export default {
|
|
export default {
|
|
|
|
+ components:{
|
|
|
|
+ addDrawer,delPopup,chooseUser
|
|
|
|
+ },
|
|
data() {
|
|
data() {
|
|
- const data = [{
|
|
|
|
- id: 1,
|
|
|
|
- label: '一级 1',
|
|
|
|
- }, {
|
|
|
|
- id: 2,
|
|
|
|
- label: '一级 2',
|
|
|
|
- children: [{
|
|
|
|
- id: 5,
|
|
|
|
- label: '二级 2-1'
|
|
|
|
- }, {
|
|
|
|
- id: 6,
|
|
|
|
- label: '二级 2-2',
|
|
|
|
- children:[
|
|
|
|
- {
|
|
|
|
- id:10,
|
|
|
|
- label:"三级",
|
|
|
|
- children:[{
|
|
|
|
- id:11,
|
|
|
|
- label:'四级'
|
|
|
|
- }]
|
|
|
|
- }
|
|
|
|
- ]
|
|
|
|
- }]
|
|
|
|
- }, {
|
|
|
|
- id: 3,
|
|
|
|
- label: '一级 3',
|
|
|
|
- children: [{
|
|
|
|
- id: 7,
|
|
|
|
- label: '二级 3-1'
|
|
|
|
- }, {
|
|
|
|
- id: 8,
|
|
|
|
- label: '二级 3-2'
|
|
|
|
- }]
|
|
|
|
- }];
|
|
|
|
return {
|
|
return {
|
|
- data: JSON.parse(JSON.stringify(data)),
|
|
|
|
- drawer: false,
|
|
|
|
- centerDialogVisible:false,
|
|
|
|
- direction: 'rtl',
|
|
|
|
|
|
+ data: [],
|
|
ruleForm: {
|
|
ruleForm: {
|
|
name: '',
|
|
name: '',
|
|
- superior:'',
|
|
|
|
- user:''
|
|
|
|
},
|
|
},
|
|
- }
|
|
|
|
|
|
+ companyData:{},
|
|
|
|
+ whichPart:'add',//add: 添加 edit: 编辑
|
|
|
|
+ currentId:'',
|
|
|
|
+ selectDepart:[],
|
|
|
|
+ }
|
|
},
|
|
},
|
|
created() {
|
|
created() {
|
|
- entinfo().then(res => {
|
|
|
|
-
|
|
|
|
- })
|
|
|
|
|
|
+ entinfo().then(res => {});
|
|
|
|
+ this.getOutData();
|
|
|
|
+ },
|
|
|
|
+ computed:{
|
|
|
|
+ companyMsg:function(){
|
|
|
|
+ let newObj ={role:'',num:''};
|
|
|
|
+ this.companyData.persons && this.companyData.persons.forEach((v,i) =>{
|
|
|
|
+ if(v.role){
|
|
|
|
+ newObj.role = v.name;
|
|
|
|
+ newObj.num = this.companyData.quota;
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ return newObj
|
|
|
|
+ },
|
|
|
|
+ departMsg:function(){
|
|
|
|
+ if(this.$store.state.chooseDepart){
|
|
|
|
+ return this.$store.state.chooseDepart
|
|
|
|
+ }else{
|
|
|
|
+ return {name:''}
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ userMsg:function(){
|
|
|
|
+ if(this.$store.state.chooseUser){
|
|
|
|
+ return this.$store.state.chooseUser
|
|
|
|
+ }else{
|
|
|
|
+ return {name:''}
|
|
|
|
+ }
|
|
|
|
+ }
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
- addDepart(){
|
|
|
|
- this.drawer = true;
|
|
|
|
|
|
+ //dom tree 外层部门数据
|
|
|
|
+ getOutData(){
|
|
|
|
+ componyList({id:2608}).then(res =>{
|
|
|
|
+ this.companyData = res.data;
|
|
|
|
+ let arr = this.dataHandling(this.companyData.departments)
|
|
|
|
+ this.data = JSON.parse(JSON.stringify(arr));
|
|
|
|
+ this.$store.commit('departListFun', this.companyData);
|
|
|
|
+ })
|
|
},
|
|
},
|
|
|
|
+ //数据结构处理
|
|
|
|
+ dataHandling(list){
|
|
|
|
+ let arr = [];
|
|
|
|
+ list.map((el,i) =>{
|
|
|
|
+ arr.push({
|
|
|
|
+ id:el.id,
|
|
|
|
+ label:el.name,
|
|
|
|
+ user_count:el.user_count ,
|
|
|
|
+ aname:el.aname,
|
|
|
|
+ })
|
|
|
|
+ if(el.dept_count>0){
|
|
|
|
+ arr[i] = Object.assign({children:[{}]},arr[i])
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ return arr;
|
|
|
|
+ },
|
|
|
|
+ //获取被选择的节点
|
|
|
|
+ allSelectNode(){
|
|
|
|
+ this.selectDepart = this.$refs.tree.getCheckedNodes();
|
|
|
|
+ },
|
|
|
|
+ //添加、编辑部门
|
|
|
|
+ addDepart(status,val){
|
|
|
|
+ this.whichPart = status;
|
|
|
|
+ this.$refs.addDrewer.openDrawer();
|
|
|
|
+ if(status === 'edit'){
|
|
|
|
+ this.currentId = val.id;
|
|
|
|
+ departDetail({id:val.id}).then(res =>{
|
|
|
|
+ this.ruleForm.name = res.data.name;
|
|
|
|
+ this.departMsg.name = res.data.pname;
|
|
|
|
+ this.departMsg.id = res.data.pid;
|
|
|
|
+ this.userMsg.name = res.data.aname;
|
|
|
|
+ this.userMsg.id = res.data.aid;
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ //添加部门保存
|
|
saveDepart(){
|
|
saveDepart(){
|
|
- this.drawer = false;
|
|
|
|
- }
|
|
|
|
|
|
+ console.log(this.departMsg)
|
|
|
|
+ if(this.whichPart === "add"){
|
|
|
|
+ addDepartInter({name:this.ruleForm.name,pid:this.departMsg.id,aid:this.userMsg.id}).then(res =>{
|
|
|
|
+ if(res.error_code == 0){
|
|
|
|
+ this.$refs.addDrewer.drawer = false;
|
|
|
|
+ this.getOutData();
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }else{
|
|
|
|
+ departUpdata({name:this.ruleForm.name,pid:this.departMsg.id,aid:this.userMsg.id,id:this.currentId}).then(res =>{
|
|
|
|
+ if(res.error_code == 0){
|
|
|
|
+ this.$refs.addDrewer.drawer = false;
|
|
|
|
+ this.getOutData();
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+ //删除部门
|
|
|
|
+ delDepart(status){
|
|
|
|
+ // status all:d多选删除 single:编辑单个删除
|
|
|
|
+ let delId = ''
|
|
|
|
+ if(status === 'all'){
|
|
|
|
+ this.selectDepart.forEach((v,i) =>{
|
|
|
|
+ if(v.id){
|
|
|
|
+ if(i === 0){
|
|
|
|
+ delId += `${v.id}`
|
|
|
|
+ }else{
|
|
|
|
+ delId += `,${v.id}`
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }else{
|
|
|
|
+ delId = this.currentId;
|
|
|
|
+ }
|
|
|
|
+ delDepartInter({id:delId}).then(res =>{
|
|
|
|
+ if(res.data.status == 1){
|
|
|
|
+ this.getOutData();
|
|
|
|
+ this.$message({ message: '删除成功',type: 'success'});
|
|
|
|
+ }else{
|
|
|
|
+ this.$message({message: '删除失败',type: 'warning'});
|
|
|
|
+ }
|
|
|
|
+ this.$refs.addDrewer.drawer = false;
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ //选则上级部门
|
|
|
|
+ chooseDepartFc(){
|
|
|
|
+ this.$refs.addDrewer.findCompont();
|
|
|
|
+ },
|
|
|
|
+ //选择管理员
|
|
|
|
+ chooseUserFc(){
|
|
|
|
+ this.$refs.selectUser.centerDialogVisible = true;
|
|
|
|
+ },
|
|
|
|
+ //获取子级部门
|
|
|
|
+ getChildrenNode(data) {
|
|
|
|
+ componyList({id:data.id}).then(res =>{
|
|
|
|
+ let arr = this.dataHandling(res.data.departments);
|
|
|
|
+ this.$set(data, 'children', arr);
|
|
|
|
+ })
|
|
|
|
+ },
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</script>
|
|
@@ -180,6 +298,10 @@ export default {
|
|
.del_btn{
|
|
.del_btn{
|
|
margin-right: auto;
|
|
margin-right: auto;
|
|
color: #AAAAAA;
|
|
color: #AAAAAA;
|
|
|
|
+ &.btnActive{
|
|
|
|
+ color: $light_color;
|
|
|
|
+ border: 1px solid $light_color;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
&_table{
|
|
&_table{
|
|
@@ -279,62 +401,7 @@ export default {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- .drawer_content{
|
|
|
|
- position: relative;
|
|
|
|
- height: 100%;
|
|
|
|
- h2{
|
|
|
|
- height: 80px;
|
|
|
|
- line-height: 80px;
|
|
|
|
- font-size: 20px;
|
|
|
|
- text-align: left;
|
|
|
|
- padding: 0 30px;
|
|
|
|
- box-shadow: inset 0px -1px 0px rgba(0, 0, 0, 0.05);
|
|
|
|
- }
|
|
|
|
- h4{
|
|
|
|
- height: 40px;
|
|
|
|
- line-height: 40px;
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: $light_color;
|
|
|
|
- background: rgba(29, 186, 207, 0.05);
|
|
|
|
- margin: 20px 60px;
|
|
|
|
- border-radius: 4px;
|
|
|
|
- text-align: left;
|
|
|
|
- text-indent: 16px;
|
|
|
|
- }
|
|
|
|
- .el-form{
|
|
|
|
- padding: 0 60px 0;
|
|
|
|
- }
|
|
|
|
- .btns{
|
|
|
|
- height: 100px;
|
|
|
|
- width: 100%;
|
|
|
|
- box-shadow: 0px -8px 8px rgba(0, 0, 0, 0.05);
|
|
|
|
- position: absolute;
|
|
|
|
- bottom: 0;
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- button{
|
|
|
|
- width: 132px;
|
|
|
|
- height: 36px;
|
|
|
|
- background: transparent;
|
|
|
|
- border-radius: 6px;
|
|
|
|
- margin: 0 20px;
|
|
|
|
- font-size: 16px;
|
|
|
|
- &:active{
|
|
|
|
- opacity: 0.8;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- .save{
|
|
|
|
- border: 1px solid $light_color;
|
|
|
|
- color: $light_color;
|
|
|
|
- }
|
|
|
|
- .cancle{
|
|
|
|
- border: 1px solid #e0e0e0;
|
|
|
|
- color: $normal_color;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
</style>
|
|
</style>
|