From 92539ee52a0c6de54520e7acd6c7234538282f66 Mon Sep 17 00:00:00 2001 From: value <z1292839451@163.com> Date: 星期三, 15 五月 2024 14:04:56 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/components/view/person-manage.vue | 346 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 302 insertions(+), 44 deletions(-) diff --git a/src/components/view/person-manage.vue b/src/components/view/person-manage.vue index 3ed6d9c..1361188 100644 --- a/src/components/view/person-manage.vue +++ b/src/components/view/person-manage.vue @@ -1,4 +1,44 @@ <style scoped> + .person_manage{ + padding: 20px 0; + display: flex; + } + .left { + width: 270px; + height: calc(100% - 40px); + background-color: white; + padding: 15px; + } + .el-tree{ + height: calc(100% - 37px); + overflow-y: auto; + } + + .custom-tree-node { + width: 100%; + line-height: 32px; + } + + .custom-tree-node .el-icon-delete { + color: #3A7BFA; + opacity: 0; + font-size: 18px; + } + + .custom-tree-node:hover .el-icon-delete { + opacity: 1; + } + + .node_i { + color: orange; + font-size: 18px; + } + + .right { + margin-left: 5px; + width: calc(100% - 305px); + height: calc(100% - 40px); + } .title { height: 60px; line-height: 60px; @@ -6,33 +46,31 @@ .search { background-color: #fff; - height: 80px; + height: 60px; display: flex; align-items: center; } .search_thing { - width: 350px; + width: 250px; display: flex; align-items: center; } .search_label { - width: 110px; + width: 90px; font-size: 14px; text-align: right; } .search_input { - width: calc(100% - 110px); + width: calc(100% - 90px); } .table { - margin-top: 10px; + margin-top: 4px; background-color: #fff; - width: calc(100% - 40px); - height: calc(100% - 60px - 80px - 10px - 40px); - padding: 20px; + height: calc(100% - 44px); } </style> <style> @@ -47,44 +85,111 @@ <template> <div class="person_manage"> - <div> - <el-row class="title"> - <el-col :span="12" style="padding-left: 20px;">鐢ㄦ埛绠$悊</el-col> - <el-col :span="12" style="text-align: right;"> - <el-button size="medium" type="primary" @click="opeaAdd" v-if="addPower">鏂板鐢ㄦ埛</el-button> + <!-- <el-row class="title"> + <el-col :span="12" style="padding-left: 20px;">鐢ㄦ埛绠$悊</el-col> + <el-col :span="12" style="text-align: right;"> + + </el-col> + </el-row> --> + <div class="left"> + <el-row> + <el-col :span="20"> + <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�" suffix-icon="el-icon-search" v-model="search" size="small" + style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter"></el-input> + </el-col> + <el-col :span="4" style="text-align: center;line-height: 30px;" v-if="addPower"> + <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="handleAdd"></el-button> </el-col> </el-row> - </div> - <div class="search"> - <div class="search_thing"> - <div class="search_label">鐢ㄦ埛鍚嶏細</div> - <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable - v-model="componentData.entity.name" @keyup.enter.native="refreshTable()"></el-input></div> - </div> - <div class="search_thing"> - <div class="search_label">璐﹀彿鐘舵�侊細</div> - <div class="search_input"> - <el-select size="small" v-model="componentData.entity.state" style="width: 100%;"> - <el-option label="鍏ㄩ儴" :value="null"></el-option> - <el-option label="鍚敤" :value="1"></el-option> - <el-option label="鍋滅敤" :value="0"></el-option> - </el-select> + <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'name' }" node-key="id" + :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" + @node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false" + :default-expanded-keys="expandedKeys" + :default-checked-keys="[1]"> + <div class="custom-tree-node" slot-scope="{ node, data }"> + <el-row style="width: 100%;"> + <el-col :span="21" :class="{sort:node.level>3}"> + <span><i + :class="`node_i ${data.children != undefined&&data.children.length>0 ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> + {{ data.name }}</span> + </el-col> + <el-col :span="2" style="text-align: right;" v-if="delStandardTree&&node.level>1"> + <el-button type="text" size="mini" @click.stop="remove(node, data)"> + <i class="el-icon-delete"></i> + </el-button> + </el-col> + </el-row> </div> + </el-tree> + </div> + <div class="right"> + <div class="search"> + <div class="search_thing"> + <div class="search_label">鐢ㄦ埛鍚嶏細</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="componentData.entity.name" @keyup.enter.native="refreshTable()"></el-input></div> + </div> + <div class="search_thing"> + <div class="search_label">璐﹀彿鐘舵�侊細</div> + <div class="search_input"> + <el-select size="small" v-model="componentData.entity.state" style="width: 100%;"> + <el-option label="鍏ㄩ儴" :value="null"></el-option> + <el-option label="鍚敤" :value="1"></el-option> + <el-option label="鍋滅敤" :value="0"></el-option> + </el-select> + </div> + </div> + <div class="search_thing"> + <div class="search_label">鍏徃鍚嶇О锛�</div> + <div class="search_input"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.company" @keyup.enter.native="refreshTable()"></el-input> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + <div class="search_thing"> + <el-button size="small" type="primary" @click="openthirdParty">鑾峰彇涓夋柟浜哄憳</el-button> + <el-button size="small" type="primary" @click="opeaAdd" v-if="addPower">鏂板鐢ㄦ埛</el-button> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable" :url="$api.user.selectUserList" :upUrl="$api.user.updateUser" :componentData="componentData" :key="upIndex" @upUser="upUser"/> + </div> + </div> + <el-dialog title="鏋舵瀯鏂板" :visible.sync="addDia" width="400px"> + <div class="body"> + <el-row style="line-height: 50px;"> + <el-col :span="6" style="text-align: right;"> + <span class="required-span">* </span>鏋舵瀯鍚嶇О锛� + </el-col> + <el-col :span="16" :offset="1"> + <el-input v-model="addOb.name" placeholder="璇疯緭鍏ユ灦鏋勫悕绉�" clearable size="small"></el-input> + </el-col> + </el-row> </div> - <div class="search_thing"> - <div class="search_label">鍏徃鍚嶇О锛�</div> - <div class="search_input"> - <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.company" @keyup.enter.native="refreshTable()"></el-input> - </div> - </div> - <div class="search_thing" style="padding-left: 30px;"> - <el-button size="small" @click="refresh()">閲� 缃�</el-button> - <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> - </div> - </div> - <div class="table"> - <ValueTable ref="ValueTable" :url="$api.user.selectUserList" :upUrl="$api.user.updateUser" :componentData="componentData" :key="upIndex" @upUser="upUser"/> - </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="addDia = false">鍙� 娑�</el-button> + <el-button type="primary" @click="addStandardTree" :loading="addLoad">纭� 瀹�</el-button> + </span> + </el-dialog> + <el-dialog title="娣诲姞涓夋柟浜哄憳" :visible.sync="addthirdParty" width="400px"> + <div class="body"> + <el-tree + :data="datathirdParty" + show-checkbox + node-key="id" + :default-expanded-keys="[2, 3]" + :default-checked-keys="[5]" + :props="defaultProps"> + </el-tree> + <span slot="footer" style="padding-left: 200px"> + <el-button @click="addthirdParty = false" size="mini">鍙� 娑�</el-button> + <el-button type="primary" @click="" :loading="addLoad" size="mini">纭� 瀹�</el-button> + </span> + </div> + </el-dialog> </div> </template> @@ -96,6 +201,46 @@ }, data() { return { + datathirdParty:[{ + id: 1, + label: '涓�绾� 1', + children: [{ + id: 4, + label: '浜岀骇 1-1', + children: [{ + id: 9, + label: '涓夌骇 1-1-1' + }, { + id: 10, + label: '涓夌骇 1-1-2' + }] + }] + }, { + id: 2, + label: '涓�绾� 2', + children: [{ + id: 5, + label: '浜岀骇 2-1' + }, { + id: 6, + label: '浜岀骇 2-2' + }] + }, { + id: 3, + label: '涓�绾� 3', + children: [{ + id: 7, + label: '浜岀骇 3-1' + }, { + id: 8, + label: '浜岀骇 3-2' + }] + }], + defaultProps: { + children: 'children', + label: 'label' + }, + addthirdParty:false, componentData: { entity: { name: null, @@ -169,7 +314,19 @@ entityCopy: {}, upIndex: 0, addDia: false, - addPower: true + addPower: true, + delStandardTree:true, + addDia0:false, + addOb:{ + fatherId:'', + name:'', + }, + search: null, + list: [], + selectTree: '', + treeLoad:false, + expandedKeys: [], + addLoad:false, } }, mounted() { @@ -179,6 +336,10 @@ this.getPower() }, methods: { + openthirdParty(){ + this.addthirdParty=true; + + }, refreshTable() { this.$refs['ValueTable'].selectList() }, @@ -237,7 +398,104 @@ this.componentData.do.splice(0, 1) } this.addPower = add - } + }, + handleAdd(){ + if(this.addOb.fatherId){ + this.addDia0 = true; + }else{ + this.$message.error('璇烽�夋嫨涓�涓灦鏋勫眰绾�') + } + }, + searchFilter() { + this.$refs.tree.filter(this.search) + }, + filterNode(value, data) { + if (!value) return true; + return data.name.indexOf(value) !== -1; + }, + handleNodeClick(val, node, el) { //鏍戠殑鍊� + this.selectTree = '' + this.getNodeParent(node) + this.selectTree = this.selectTree.replace(' - ', '') + let data = this.selectTree.split(' - ') + let data2 = '' + for (let index = data.length - 1; index >= 0; index--) { + data2 += " - " + data[index] + } + this.selectTree = data2.replace(' - ', '') + this.addOb.fatherId = val.id; + this.componentData.entity.departId = val.id; + this.refreshTable() + }, + nodeOpen(data, node, el) { + $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened') + }, + nodeClose(data, node, el) { + $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder') + }, + getNodeParent(val) { + if (val.parent != null) { + this.selectTree += ' - ' + val.label + this.getNodeParent(val.parent) + } + }, + remove(node, data) { + this.$confirm("鏄惁鍒犻櫎璇ュ眰绾�", "鎻愮ず", { + type: "error" + }).then(() => { + this.treeLoad = true + this.$axios.post(this.$api.department.delDepartment, { + id: data.id + }).then(res => { + if (res.code == 201) return + this.$message.success('宸插垹闄�') + this.selectTreeList() + }) + }).catch(e => {}) + }, + selectTreeList() { + this.treeLoad = true + this.$axios.get(this.$api.department.selectDepartment).then(res => { + this.list = res.data + this.list.forEach(a => { + a.children.forEach(b => { + b.children.forEach(c => { + this.expandedKeys.push(c.id) + }) + }) + }) + this.treeLoad = false + this.componentData.entity.departId = this.list[0].id; + this.selectTree = '鍏ㄩ儴' + this.refreshTable() + }) + }, + addStandardTree() { + if (this.addOb.name == null || this.addOb.factory == '') { + this.$message.error('鏋勬灦鍚嶇О鏄繀濉」') + return + } + this.addLoad = true + this.$axios.post(this.$api.department.addDepartment, this.addOb, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + if (res.code === 201) { + this.addLoad = false + return + } + this.$message.success('娣诲姞鎴愬姛') + this.addDia0 = false + this.selectTreeList() + this.addLoad = false + this.addOb.name = '' + this.addOb.fatherId = '' + }).catch(e => { + this.addDia0 = false + this.addLoad = false + }) + }, } } </script> -- Gitblit v1.9.3