<template>
|
<avue-input-tree ref="referTree" :props="props" :disabled="disabled" :lazy="lazy" :tree-load="treeLoad" :node-click="nodeClick" :checked="checked" :leaf-only="referConfig.onlyLeaf" :multiple="isMuti" v-model="value" :placeholder="title" :dic="treeData"></avue-input-tree>
|
</template>
|
|
<script>
|
import {getTree,getLazyTree} from "@/api/refer/tree";
|
import {validatenull} from "@/util/validate";
|
|
export default {
|
name: "vciWebReferTree",
|
props:["referConfig","value","text","title","disabled"],
|
data() {
|
return {
|
options: this.referConfig.options,
|
lazy: this.referConfig.options.loadType == 'node',
|
isMuti:("true" == this.referConfig.options.isMuti || this.referConfig.options.isMuti == true || this.referConfig.options.muti == true) ? true : false,
|
props: {
|
value: 'oid',
|
label: "name"
|
},
|
config:{
|
valueField: this.referConfig.valueField || this.referConfig.options.valueField || 'oid',
|
textField:this.referConfig.textField || this.referConfig.options.textField || "name",
|
textSep:this.referConfig.textSep || ' '
|
},
|
treeUrl: this.referConfig.options.url || '/api/ubcs-code/mdmEngineController/defaultReferTree',
|
treeData: [],
|
selectionList: [],
|
currentNode:{},
|
params: {},
|
loadType: {'all': 'all', 'node': 'node'},
|
copyParam: ['btmType', 'lnType', 'toBtmType', 'textField', 'valueField', 'parentFieldName', 'parentValue', 'sort', 'order', 'isDirection', 'whereSql', 'isMuti', 'queryScheme', 'isQueryAllColumn', 'queryColumn', 'split', 'loadType', 'onlyLeaf', 'onlyLeafText', 'parentUsedField']
|
}
|
},
|
created() {
|
this.getParams();
|
// console.log('referConfig:')
|
// console.log(this.referConfig)
|
},
|
mounted() {
|
if(!this.lazy){
|
if(this.options.data){//如果是固定数据的情况下
|
this.treeData=this.options.data
|
}else{
|
this.getTree()
|
}
|
}
|
},
|
computed:{},
|
methods: {
|
getParams:function (){
|
var queryParams = {};
|
if(this.options.extraParams){
|
queryParams = this.options.extraParams;
|
}
|
for(var i= 0 ; i < this.copyParam.length ; i ++){
|
if(this.copyParam[i] == "btmType") {
|
queryParams[this.copyParam[i]] = this.options['referBo'] || this.options['referType'];
|
}else if(this.copyParam[i] in this.options){
|
queryParams[this.copyParam[i]] = this.options[this.copyParam[i]];
|
}
|
}
|
queryParams['referBo'] = this.options['referBo'] || this.options['referType'];
|
queryParams['referType']= queryParams['referBo']
|
queryParams['selectAllLevel'] = (this.options.loadType == this.loadType.all?true:false);//true时后台会报错
|
|
queryParams.muti =this.isMuti;
|
if(queryParams.isQueryAllColumn =="true"){
|
queryParams.isQueryAllColumn = true;
|
}
|
if(this.options.useFormKey && this.options.formValues){
|
//使用表单上的字段来过滤
|
queryParams['conditionMap["' + (this.options.paramForFormKey?this.options.paramForFormKey:this.options.useFormKey) + '"]'] = this.options.formValues[this.options.useFormKey];
|
}
|
if (!this.options.loadType) {
|
this.options.loadType = this.loadType.node;
|
}
|
queryParams['queryAllLevel'] = this.options.loadType == this.loadType.node? false : true;//默认逐级展开
|
queryParams['loadType'] = this.options.loadType;
|
queryParams['multipleSelect'] = this.isMuti;
|
queryParams['isMuti'] = queryParams['multipleSelect'];
|
if (this.options.remoteSort && this.options.initSort) {
|
queryParams['order'] = this.options.initSort.type;//方法
|
queryParams['sort'] = this.options.initSort.field;//字段
|
}
|
if (this.options.rootParams) {
|
for (var key in this.options.rootParams) {
|
queryParams[key] = this.options.rootParams[key];
|
}
|
}
|
if(this.options.sortField){
|
queryParams['sort'] = this.options.sortField;//字段
|
}
|
if(this.options.sortType){
|
queryParams['order'] = this.options.sortType;//方法
|
}
|
if (this.options.conditionParams) {
|
//说明是扩展属性
|
for (var key in this.options.conditionParams) {
|
queryParams['conditionMap["' + key + '"]'] = this.options.conditionParams[key];//新的方式
|
}
|
}
|
if(this.options.where ) {
|
for (var key in this.options.where) {
|
queryParams['conditionMap["' + key + '"]'] = this.options.where[key];//新
|
}
|
}
|
if (this.options.treeExtandParams) {
|
//说明是扩展属性
|
for (var key in this.options.treeExtandParams) {
|
queryParams['extandParamsMap["' + key + '"]'] = this.options.treeExtandParams[key];//新的方式
|
}
|
}
|
if (this.options.sourceDataParams) {
|
//说明是扩展属性
|
for (var key in this.options.sourceDataParams) {
|
if (key && key.constructor === Object) return;
|
queryParams['sourceData["' + key + '"]'] = this.options.sourceDataParams[key];//新的方式
|
}
|
}
|
if (this.options.replaceParams) {
|
//说明是扩展属性
|
for (var key in this.options.replaceParams) {
|
if (key && key.constructor === Object) return;
|
queryParams['replaceMap["' + key + '"]'] = this.options.replaceParams[key];//新的方式
|
}
|
}
|
queryParams['parentValue']='\\IN(SELECT oid from PL_CODE_CLASSIFY where id =\'hesuanfenlei\')'
|
this.params=queryParams;
|
|
},
|
getTree() {
|
getTree(this.params, this.treeUrl).then(res => {
|
res.data.map(item => {
|
if (!item.attribute) {
|
item.attribute = {
|
data: {}
|
}
|
} else {
|
item.attribute.data = item.attribute.data || {}
|
}
|
return {
|
...item,
|
leaf: !item.hasChildren
|
}
|
})
|
this.treeData = res.data
|
})
|
},
|
treeLoad: function (treeNode, resolve) {
|
const parentOid = (treeNode.level === 0) ? 0 : treeNode.data.oid;
|
this.params.parentOid=parentOid.indexOf('@vcitreesep@') > -1 ? parentOid.split('@vcitreesep@')[1] : parentOid;
|
this.params.parentValue=this.params.parentOid;
|
this.params.parentBtmName=treeNode.data.attributes.btmName || treeNode.data.attributes.btmname;
|
this.params.parentBtmType=this.params.parentBtmName;
|
|
if (this.options.rootParams && treeNode.level !== 0) {
|
for (var key in this.options.rootParams) {
|
delete this.params[key]
|
}
|
}
|
getLazyTree(this.params,this.treeUrl).then(res => {
|
resolve(res.data.data.map(item => {
|
if(!item.attribute){
|
item.attribute={
|
data:{}
|
}
|
}else{
|
item.attribute.data=item.attribute.data || {}
|
}
|
return {
|
...item,
|
leaf: !item.hasChildren
|
}
|
}))
|
});
|
},
|
nodeClick(data, node, nodeComp){
|
if(!this.isMuti) {
|
this.setValue({checkedNodes:[data]})
|
}
|
},
|
checked(checkedNode, checkedData) {
|
this.setValue(checkedData)
|
},
|
setValue:function (checkedData){
|
var value = [];
|
var text = [];
|
const textSep =this.config.textSep;
|
for(var j =0;j<checkedData.checkedNodes.length;j++){
|
const item=checkedData.checkedNodes[j];
|
var v=this.config.valueField.indexOf("attribute.")>=0?(item.attributes[this.config.valueField.replace("attribute.","")] || item.attributes.data[this.config.valueField.replace("attribute.","")]):(item.attributes[this.config.valueField] || item[this.config.valueField] || item.attributes.data[this.config.valueField])
|
value.push(v);
|
var tempRaw = [];
|
var textFieldArray = this.config.textField.split(",");
|
for (var i = 0; i < textFieldArray.length; i++) {//显示的字段可能有多个
|
if (!validatenull(textFieldArray[i])) {
|
var t=textFieldArray[i].indexOf("attribute.")>=0?(item.attributes[textFieldArray[i].replace("attribute.","")] ||item.attributes.data[textFieldArray[i].replace("attribute.","")]):(item.attributes[textFieldArray[i]] || item[textFieldArray[i]] || item.attributes.data[textFieldArray[i]])
|
tempRaw.push(t);
|
}
|
}
|
text.push(tempRaw.join(textSep));
|
}
|
this.value = value.join(',');
|
this.text = text.join(',')
|
this.$emit("setValue", {
|
field: this.referConfig.field,
|
showField: this.referConfig.showField,
|
value: this.value,
|
text: this.text || '',
|
isTreeMuti:this.isMuti,
|
rawData: checkedData.checkedNodes,
|
fieldMap:this.referConfig.fieldMap
|
});
|
}
|
},
|
watch:{}
|
}
|
</script>
|
|
<style scoped>
|
|
</style>
|