const orguserselect = { props:{ width:{//宽度 required:false, type: Number, default:0, }, placeholder:{ required:false, type: String, default:'', }, defaultheckeds:{//默认选中 required:false, type: Array, default:[], }, defaultexpanded:{//默认打开 required:false, type: Array, default:[], }, defaultdata:{//默认显示 required:true, type: Array, default:[], }, defaulttype:{ required:true, type: String, default:'', }, defaultcheckedtype:{//默认选择类型 required:false, type: Array, default:['unlimit','organization','default','user'], }, isunlimit:{ required:false, type: Boolean, default:true, }, }, template: ` `, data: function() { return { popovervisible:false, popoverwidth:'', Inputbox:{ height:30, data:[], showclose:false, }, Tree:{ checkeds:[], expanded:[], props:{ children: 'children', label: 'text', isLeaf:'leaf' }, }, }; }, watch:{ 'Inputbox.data':{ handler(val){ var self = this; self.handleInputboxHeight(); }, deep:true }, }, created() { var self = this; if(this.defaultheckeds && this.defaultheckeds.length){ this.Tree.checkeds = this.defaultheckeds; } if(this.defaultexpanded && this.defaultexpanded.length){ this.Tree.expanded = this.defaultexpanded; } if(this.defaultdata && this.defaultdata.length){ var defaultdata = JSON.parse(JSON.stringify(this.defaultdata)); this.Inputbox.data = defaultdata; } }, methods:{ InputboxDelete(data){ let self = this; let id = data.id; let checkedData = []; if(self.$refs['orgusertree_'+this.defaulttype]){ checkedData = self.$refs['orgusertree_'+this.defaulttype].getCheckedKeys(); if(checkedData.length){ if(data.type == 'user'){ for (let index = 0; index < checkedData.length; index++) { const element = checkedData[index]; if(typeof element == 'string'){ let fid = parseInt(element.slice(element.lastIndexOf('_') + 1)); if(fid == parseInt(id)){ self.$refs['orgusertree_'+this.defaulttype].setChecked(element); } } } }else{ self.$refs['orgusertree_'+this.defaulttype].setChecked(id); } } } let index = this.Inputbox.data.findIndex(function(item){ return item.type == data.type && item.id == id; }); if(index > -1){ this.Inputbox.data.splice(index,1); } this.$nextTick(() => { if(self.$refs['orgusertree_'+this.defaulttype]){ checkedData = self.$refs['orgusertree_'+this.defaulttype].getCheckedKeys(); this.Tree.checkeds = checkedData; }else{ if(data.type == 'organization'){ let index = this.Tree.checkeds.findIndex(function(item){ return item == id; }); if(index > -1){ this.Tree.checkeds.splice(index,1); } } } this.handleEmitChange(); }); }, TreeNotChecked(node){ if(node){ if(node.childNodes && node.childNodes.length){ var len = node.childNodes.length; for(var i in node.childNodes){ var item = node.childNodes[i]; item.checked = false; if(item.childNodes && item.childNodes.length){ this.TreeNotChecked(item.childNodes); } } } } }, TreeChange(data, node){ var self = this; var checkedNodes = node.checkedNodes; var checkedKeys = node.checkedKeys; var newcheckedNodes = []; var arr = []; var checkeds = []; var index_unlimit = checkedKeys.indexOf('unlimit'); if(data.type == 'unlimit' && index_unlimit>-1){ self.$refs['orgusertree_'+this.defaulttype].setCheckedKeys(['unlimit']); newcheckedNodes.push({ type:data.type, id:data.id, text:data.label }); checkeds.push('unlimit'); }else{ if(index_unlimit>-1){ self.$refs['orgusertree_'+this.defaulttype].setChecked('unlimit',false); } for (let index = 0; index < checkedNodes.length; index++) { const item = checkedNodes[index]; if(item.type == 'unlimit'){ continue; } var id = item.id; if(item.pid){ // if(checkedKeys.indexOf(item.pid)<0){ if(item.type == 'user'){ id = parseInt(id.slice(id.lastIndexOf('_') + 1)); } newcheckedNodes.push({ type:item.type, id:id, text:item.label }); // } }else{ newcheckedNodes.push({ type:item.type, id:id, text:item.label }); } if(checkeds.indexOf(item.id)<0){ checkeds.push(item.id); } } } let storageid = []; if(newcheckedNodes.length){ for (let index = 0; index < newcheckedNodes.length; index++) { const element = newcheckedNodes[index]; if(element.type == 'user'){ if(storageid.indexOf(element.id)<0){ storageid.push(element.id); arr.push(element); } }else{ arr.push(element); } } } this.Tree.checkeds = checkeds; this.Inputbox.data = arr; this.handleEmitChange(); }, async TreeLoadNode(node, resolve){ const self = this; var param = {}; if (node.level === 0) { param['id'] = '#'; }else{ param['id'] = node.data.id; } var res = await axios.post('index.php?mod=pichome&op=orgtree&do=orgtree',param); if(res == 'intercept'){ return false; } var json = res.data; var data = []; var checkeddata = []; if (node.level === 0 && this.isunlimit) { data.push({ text:'任何人', label:'任何人', id:'unlimit', leaf:true, type:'unlimit', disabled:this.defaultcheckedtype.indexOf('unlimit')<0 }); } for (let index = 0; index < json.length; index++) { const item = json[index]; if (node.level>0) { item['pid'] = node.data.id; }else{ item['pid'] = 0; } if(item.type == 'user'){ item['leaf'] = true; let curr = self.Inputbox.data.find(function(current){ return current.type == 'user' && current.id == item['id']; }); item['id'] = param['id']+'_uid_'+item['id']; if(curr){ checkeddata.push(item['id']); this.Tree.checkeds.push(item['id']) } }else if(item.type == 'organization'){ item['id'] = parseInt(item['id']); item['leaf'] = false; }else{ item['leaf'] = false; } item['children'] = []; item['disabled'] = this.defaultcheckedtype.indexOf(item.type)<0; data.push(item); } resolve(data); this.$nextTick(function(){ if(self.$refs['orgusertree_'+this.defaulttype] && checkeddata.length){ for (let index = 0; index < checkeddata.length; index++) { const element = checkeddata[index]; self.$refs['orgusertree_'+this.defaulttype].setChecked(element,true); } } }); }, PopoverShow(){ var self = this; self.$nextTick(function(){ if(!self.Inputbox.data.length){ self.$refs['orgusertree_'+this.defaulttype].setCheckedKeys([]); } }); document.addEventListener('click', this.handleClickOutside); if(self.$refs['slot-cascader'].closest('.el-drawer')){ self.$refs['slot-cascader'].closest('.el-drawer').addEventListener('click', this.handleClickOutside) } }, handleClickOutside(event) { const self = this; if (self.$refs['slot-cascader'].contains(event.target)) return; this.PopoverHide(); }, PopoverHide(val){ const self = this; document.removeEventListener('click', this.handleClickOutside) if(self.$refs['slot-cascader'].closest('.el-drawer')){ self.$refs['slot-cascader'].closest('.el-drawer').removeEventListener('click', this.handleClickOutside) } this.popovervisible = false; }, handleEmitChange(){ var self = this; self.$emit('change',this.Inputbox.data); }, handleWindowResize(){ var self = this; if(self.$refs['slot-cascader']){ var w = self.$refs['slot-cascader'].clientWidth; this.popoverwidth = w; } }, handleInputboxHeight(){ var self = this; self.$nextTick(function(){ if(self.$refs.cascader_tags){ var clientHeight = self.$refs.cascader_tags.clientHeight; self.Inputbox.height = clientHeight+6; } self.handleWindowResize(); }); }, deleteEmpty(e){ var self = this; if(self.popovervisible){ self.$refs['orgusertree_'+this.defaulttype].setCheckedKeys([]); } this.Inputbox.data = []; self.Inputbox.height = 34; this.handleEmitChange(); } }, mounted() { var self = this; window.addEventListener('resize', self.handleInputboxHeight); }, beforeRouteLeave() { }, };