136 lines
3.5 KiB
Vue
136 lines
3.5 KiB
Vue
|
<template>
|
|||
|
<view>
|
|||
|
<uni-easyinput @focus="open" v-model="selectText" placeholder="选择父级部门"></uni-easyinput>
|
|||
|
<next-tree ref="nextTreeRef" funcMode="radio" uiMode="popup" :selectParent="true" labelKey="depart_name"
|
|||
|
valueKey="_id" :multiple="false" :treeData="departTreeData" @confirm="onnodeclick" @change="onchange">
|
|||
|
</next-tree>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
<script>
|
|||
|
import {
|
|||
|
getJsonTree,
|
|||
|
groupBy
|
|||
|
} from "@/js_sdk/util/jsonData";
|
|||
|
import {
|
|||
|
saveDepartStore,
|
|||
|
saveDictItemStore,
|
|||
|
getDictItemStore,
|
|||
|
getDepartStore
|
|||
|
} from '@/js_sdk/util/dictTools.js';
|
|||
|
export default {
|
|||
|
data() {
|
|||
|
return {
|
|||
|
departTreeData: [],
|
|||
|
selectText: "",
|
|||
|
departID: "",
|
|||
|
selectIDs:[]
|
|||
|
|
|||
|
}
|
|||
|
},
|
|||
|
props: {
|
|||
|
selectID: {
|
|||
|
type: String,
|
|||
|
default: ""
|
|||
|
},
|
|||
|
},
|
|||
|
watch: {
|
|||
|
selectID: {
|
|||
|
immediate: true,
|
|||
|
deep: true,
|
|||
|
handler(val) {
|
|||
|
console.log(val)
|
|||
|
this.departTreeData = getDepartStore()
|
|||
|
this.selectIDs=[];
|
|||
|
this.selectIDs.push(val)
|
|||
|
this.echoDefault(this.selectIDs)
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
mounted() {
|
|||
|
this.departTreeData = getDepartStore()
|
|||
|
},
|
|||
|
onShow() {
|
|||
|
|
|||
|
},
|
|||
|
methods: {
|
|||
|
open() {
|
|||
|
this.departTreeData = getDepartStore();
|
|||
|
setTimeout(() => {
|
|||
|
this.$refs.nextTreeRef.showTree = true;
|
|||
|
}, 500)
|
|||
|
|
|||
|
},
|
|||
|
|
|||
|
echoDefault(selectIds) {
|
|||
|
this.checkedTreeData(this.departTreeData, selectIds)
|
|||
|
console.log('treeData的数据:', this.departTreeData)
|
|||
|
console.log('treeData的选中的:', selectIds)
|
|||
|
this.funcMode = 'checkbox'
|
|||
|
// this.$refs.nextTreeRef.showTree = true
|
|||
|
},
|
|||
|
checkedTreeData(treeData, selectIds) {
|
|||
|
// 注意 vue2当数据深嵌套时,如果没有在treeData里面初始化checked属性,那在改变数据的时候直接将checked属性赋值为true,这时候ui界面有可能不会更新,
|
|||
|
// 这时候建议使用this.$set去更新checked属性值,或者在初始化this.treeData的时候初始化checked属性
|
|||
|
(treeData || []).map(item => {
|
|||
|
if (selectIds.indexOf(item._id) !== -1) {
|
|||
|
console.log('v选中的:', item)
|
|||
|
this.selectText=item.depart_name
|
|||
|
this.$emit("change", selectIds[0], this.selectText)
|
|||
|
item.checked = true
|
|||
|
|
|||
|
} else {
|
|||
|
item.checked = false
|
|||
|
}
|
|||
|
if (item.children && item.children.length) {
|
|||
|
this.checkedTreeData(item.children, selectIds)
|
|||
|
}
|
|||
|
})
|
|||
|
},
|
|||
|
onchange(e) {
|
|||
|
console.log("xzzzz---" + JSON.stringify(e))
|
|||
|
let temp = this.getTreeName(e);
|
|||
|
this.selectText = temp.strName;
|
|||
|
let arrID = [];
|
|||
|
let departParentID = "";
|
|||
|
try {
|
|||
|
arrID = temp.strID.split('/')
|
|||
|
if (arrID.length > 1) {
|
|||
|
departParentID = arrID[arrID.length - 1]
|
|||
|
} else {
|
|||
|
departParentID = arrID[0]
|
|||
|
}
|
|||
|
|
|||
|
} catch (e) {
|
|||
|
//TODO handle the exception
|
|||
|
}
|
|||
|
console.log(departParentID, this.selectText)
|
|||
|
this.$emit("change", departParentID, this.selectText)
|
|||
|
},
|
|||
|
onnodeclick(e) {
|
|||
|
// this.selectText = JSON.stringify(this.getTreeName(e));
|
|||
|
// this.$emit("change",e[0]._id,this.selectText)
|
|||
|
},
|
|||
|
getTreeName(tree) {
|
|||
|
// console.log("e", tree)
|
|||
|
let treeParents = tree[0].parents
|
|||
|
var strName = "";
|
|||
|
var strID = "";
|
|||
|
if (treeParents.length > 0) {
|
|||
|
for (let i = 0; i < treeParents.length; i++) {
|
|||
|
strName = strName + treeParents[i].depart_name + "/";
|
|||
|
strID = strID + treeParents[i]._id + "/";
|
|||
|
}
|
|||
|
}
|
|||
|
strName = strName + tree[0].depart_name;
|
|||
|
strID = strID + tree[0]._id;
|
|||
|
|
|||
|
return {
|
|||
|
"strName": strName,
|
|||
|
"strID": strID
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|