wangting
2023-06-12 3f5ffa69d5316c17a37de310bdea027523186064
修改参照组件
已修改4个文件
已添加2个文件
812 ■■■■ 文件已修改
Source/UBCS-WEB/src/api/refer/table.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue 295 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue 368 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/refer/table.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
import request from "@/router/axios";
export const getList = (params,page, limit, url) => {
  return request({
    url: url,
    method: 'get',
    params: {
      ...params,
      page,
      limit,
    }
  })
}
export const getLazyList = (params,url) => {
  return request({
    url: url,
    method: 'get',
    params: {
      ...params
    }
  })
}
export const getTableDefinedUrl = (params,url) => {
  return request({
    url: url,
    method: 'get',
    params: {
      ...params
    }
  })
}
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
@@ -558,7 +558,7 @@
          maxlength: formItem.maxlength,
          filterable: true,
          referConfig:formItem.type=='refer'?{
            title:formItem.text,
            title:formItem.text ,
            showField:formItem.showField || formItem.field,
            field: formItem.field,
            placeholder: formItem.inputTip,
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue
@@ -1,14 +1,13 @@
<template>
  <vciWebReferTree v-if="refertype=='tree'" @setValue="setValue" :value="value" :text="text" :referConfig="referConfig"></vciWebReferTree>
  <vciWebReferTable v-else-if="refertype=='table'" @setValue="setValue" :value="value" :text="text" :referConfig="referConfig"></vciWebReferTable>
  <vciWebReferDefalut v-else  @setValue="setValue" :value="value" :text="text" :referConfig="referConfig"></vciWebReferDefalut>
  <vciWebReferTree v-if="refertype=='tree'" @setValue="setValue" :value="value" :text="text" :title="title" :referConfig="referConfig"></vciWebReferTree>
  <vciWebReferTable v-else-if="refertype=='table'" @setValue="setValue" :value="value" :text="text" :title="title" :referConfig="referConfig"></vciWebReferTable>
  <vciWebReferDefalut v-else  @setValue="setValue" :value="value" :text="text" :title="title" :referConfig="referConfig"></vciWebReferDefalut>
</template>
<script>
import vciWebReferTree from "./vciWebReferTree.vue";
import vciWebReferTable from "./vciWebReferTable.vue";
import vciWebReferDefalut from "./vciWebReferTable.vue";
import {validatenull} from "@/util/validate";
import vciWebReferDefalut from "./vciWebReferDefalut.vue";
export default {
  name: "vciWebRefer",
  props: ["referConfig","value","text"],
@@ -16,20 +15,17 @@
  data() {
    return {
      refertype: this.referConfig.options.type,
      isMuti: ("true" == this.referConfig.options.isMuti || this.referConfig.options.isMuti == true || this.referConfig.options.muti == true) ? true : false,
      emitData:{}
      emitData:{},
      title:''
    };
  },
  created() {
  created() {},
  mounted() {
    var title = this.referConfig.title || '';
    title = title.replace(":", "");
    if (title) {
      title = validatenull(this.referConfig.title) ? ('为【' + title + '】选取值') : this.referConfig.title;
    } else {
      title = validatenull(this.referConfig.title) ? ('为【' + this.referConfig.showField + '】选取值') : this.referConfig.title;
    }
    this.referConfig.title = title;
    this.referConfig.isMuti = this.isMuti;
    title = title ? ('为【' + title + '】选取值') : ('为【' + this.referConfig.showField + '】选取值');
    this.title=title;
  },
  methods: {
    setValue(value) {
@@ -42,12 +38,12 @@
      deep: true,
      immediate: true,
      handler(newV) {
        if(newV.isTreeMuti){
          //树参照多选,text没有值,在这里处理text的值
        }
        this.$emit("setReferValue", newV);
      },
    }
  },
  mounted() {
  }
}
</script>
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,295 @@
<template>
  <div>
    <el-dialog :title="title"
               v-dialogDrag append-to-body="true"
               :visible.sync="visible"
               top="0"
               class="avue-dialog avue-dialog--top"
               :width="referConfig.options.width|| '80%'">
      <avue-crud :option="option"
                 :table-loading="loading"
                 :data="data"
                 :page.sync="page"
                 v-model="value"
                 ref="referDefalutCrud"
                 @search-change="searchChange"
                 @search-reset="searchReset"
                 @selection-change="selectionChange"
                 @current-change="currentChange"
                 @size-change="sizeChange"
                 @refresh-change="refreshChange"
                 @on-load="onLoad">
      </avue-crud>
      <div class="avue-dialog__footer">
        <div class="avue-dialog__footer--left valueInfo">{{ valueInfo }}</div>
        <el-button @click="visible=false">取 æ¶ˆ</el-button>
        <el-button @click="setValue" type="primary">ç¡® å®š</el-button>
      </div>
    </el-dialog>
    <avue-input v-model="text" :placeholder="title" @click="visible=true"></avue-input>
    <!--<avue-input-table ref="referTable"  :props="props"  :column="column" :on-load="onLoad" v-model="value"  :placeholder="title" ></avue-input-table>
  -->
  </div>
</template>
<script>
import { validatenull } from "@/util/validate";
import {getList,getLazyList,getTableDefinedUrl} from "@/api/refer/table";
export default {
  name: "vciWebReferDefalut",
  props:["referConfig","value","text","title"],
  data() {
    return {
      visible: false,
      options: this.referConfig.options,
      isMuti: ("true" == this.referConfig.options.isMuti || this.referConfig.options.isMuti == true || this.referConfig.options.muti == true) ? true : false,
      props: {
        value: this.referConfig.valueField || this.referConfig.options.valueField || 'oid',
        label: this.referConfig.textField || this.referConfig.options.textField || "name"
      },
      url: this.referConfig.options.url || '/api/ubcs-code/mdmEngineController/defaultReferDataGrid',
      tableDefinedUrl:'',//平台表格地址
      copyParam: ['referBo', 'textField', 'valueField', 'displayTable', 'whereSql',  'queryScheme'],
      query: {},
      loading: false,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
      },
      data:this.referConfig.options.data || [],
      selectionList: [],
      objTree: {//用于表格树,目前还没加上使用
        keyId: 'oid',//树形id字段名称
        keyPid: 'parentSaleProduct',//树形父id字段名称
        title: 'id',//以树形式显示的字段
        defaultShow: false//默认折叠
      },
      option: {
        addBtn: false,
        height: this.referConfig.options.height ? this.referConfig.options.height : 475,
        calcHeight: 30,
        tip: false,
        menu:false,
        searchShow: true,
        searchMenuSpan: 6,
        searchLabelWidth: 90,
        border: true,
        index: true,
        selection: true,
        dialogClickModal: false,
        highlightCurrentRow: true,
        column: []
      }
    };
  },
  created() {
    this.getParams();
    console.log('referConfig:')
    console.log(this.referConfig)
  },
  mounted() {
  },
  computed:{
    valueInfo:function (){
      return this.text ? ("已设置的值为[" + this.text + "]"): '未设置值'
    }
  },
  methods: {
    getParams:function () {
      var queryParams = {};
      if (this.options.extraParams) {
        queryParams = this.options.extraParams;
      }
      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.where) {
        for (var key in this.options.where) {
          queryParams['conditionMap["' + key + '"]'] = this.options.where[key];//新
        }
      }
      for (var i = 0; i < this.copyParam.length; i++) {
        queryParams[this.copyParam[i]] = this.options[this.copyParam[i]];
      }
      queryParams["isMuti"] = this.isMuti;
      queryParams.muti = this.isMuti;
      if (!queryParams['referBo']) {
        queryParams['referBo'] = this.options['referBo'] || this.options['referType'];
      }
      queryParams['referType'] = queryParams['referBo']
      if (this.options.remoteSort && this.options.initSort) {
        queryParams['order'] = this.options.initSort.type;//方法
        queryParams['sort'] = this.options.initSort.field;//字段
      }
      if (this.options.conditionParams) {
        //说明是扩展属性
        for (var key in this.options.conditionParams) {
          queryParams['conditionMap["' + key + '"]'] = this.options.conditionParams[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];//新的方式
        }
      }
      var paramsData = {};
      //为了处理单引号和双引号的
      if (queryParams) {
        for (var key in queryParams) {
          paramsData[key.replace(/"/g, "'")] = queryParams[key];
        }
      }
      if (!this.options.tableConfig || !this.options.tableConfig.cols || this.options.tableConfig.cols.length == 0) {
        this.option.column = [{
          prop: 'id',
          label: '英文名称',
          sort: true,
          width: 150,
          search: true
        }, {
          prop: 'name',
          label: '中文名称',
          sort: true,
          width: 150,
          search: true
        }, {
          prop: 'description',
          label: '描述',
          width: 250
        }, {
          prop: 'secretGradeText',
          label: '密级',
          width: 60,
          hidden: (!this.controllerSecret)
        }];
      } else {
        this.option.column = this.options.tableConfig.cols.map(item => {
          if (item.field != 'LAY_TABLE_INDEX' && item.field != 'LAY_CHECKED') {
            return {
              ...item,
              label: item.title,
              prop: item.field,
              search: true
            }
          }
        })
      }
      if (!paramsData) {
        paramsData = {
          currentUserReferModelKey: this.options.currentUserReferModelKey,
          currentUserReferMethodKey: this.options.currentUserReferMethodKey
        };
      } else {
        paramsData['currentUserReferModelKey'] = this.options.currentUserReferModelKey;
        paramsData['currentUserReferMethodKey'] = this.options.currentUserReferMethodKey;
      }
      this.params = paramsData;
    },
    setValue(){
      if(this.selectionList.length==0){
        this.$message.error( '没有选择数据');
        return false;
      }else if(this.selectionList.length>1 && !this.isMuti){
        this.$message.error( '每次只能选择一条数据');
        return false;
      }
      var value = [];
      var text = [];
      var isMutiValue = (this.props.value.indexOf(",")>-1);
      var isMutiRaw = (this.props.label.indexOf(",")>-1);
      var _that=this
      this.selectionList.forEach((item,_index) =>{
        if(isMutiValue){
          var valueFieldArray = _that.props.value.split(",");
          valueFieldArray.forEach((_indexField,_itemField)=>{
            value.push( item[_itemField] + (_that.referConfig.valueSep?_that.referConfig.valueSep:' '));
          })
        }else {
          value.push(item[_that.props.value]);
        }
        if(isMutiRaw) {
          var rawFieldArray = _that.props.label.split(",");
          rawFieldArray.forEach((_indexField,_itemField)=>{
            text.push(item[_itemField] + (_that.referConfig.textSep?_that.referConfig.textSep:' ')) ;
          })
        }else{
          text.push(item[_that.props.label]);
        }
      })
      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,rawData:this.selectionList});
      this.visible=false;
    },
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
      done();
    },
    currentChange(currentPage){
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize){
      this.page.pageSize = pageSize;
    },
    selectionChange(list) {
      if (!this.isMuti && list.length > 1) {
        const nowVal = list.shift();
        this.$refs.referCrud.toggleRowSelection(nowVal, false);
      }
      this.selectionList = list
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.referCrud.toggleSelection();
    },
    refreshChange() {
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = this.params) {
      if(this.url){
        this.loading = true;
        getList(Object.assign(params, this.query),page.currentPage, page.pageSize, this.url).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      }
    }
  }
}
</script>
<style scoped>
.valueInfo{
  float: left;
  border: 1px solid #E9E7E7;
  display: inline-block;
  vertical-align: middle;
  padding: 9px 15px;
  line-height: 1;
}
</style>
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
@@ -1,71 +1,349 @@
<template>
  <avue-input-table :props="props"  :column="column" :on-load="onLoad" v-model="value"  :placeholder="placeholder" ></avue-input-table>
  <div>
    <el-dialog :title="title"
               v-dialogDrag append-to-body="true"
               :visible.sync="visible"
               top="0"
               class="avue-dialog avue-dialog--top"
               :width="referConfig.options.width|| '80%'">
      <avue-crud :option="option"
                 :table-loading="loading"
                 :data="data"
                 :page.sync="page"
                 v-model="value"
                 ref="referCrud"
                 @search-change="searchChange"
                 @search-reset="searchReset"
                 @selection-change="selectionChange"
                 @current-change="currentChange"
                 @size-change="sizeChange"
                 @refresh-change="refreshChange"
                 @on-load="onLoad">
      </avue-crud>
      <div class="avue-dialog__footer">
        <div class="avue-dialog__footer--left valueInfo">{{ valueInfo }}</div>
        <el-button @click="visible=false">取 æ¶ˆ</el-button>
        <el-button @click="setValue" type="primary">ç¡® å®š</el-button>
      </div>
    </el-dialog>
    <avue-input v-model="text" :placeholder="title" @click="visible=true"></avue-input>
    <!--<avue-input-table ref="referTable"  :props="props"  :column="column" :on-load="onLoad" v-model="value"  :placeholder="title" ></avue-input-table>
  -->
  </div>
</template>
<script>
import { validatenull } from "@/util/validate";
import {getList,getLazyList,getTableDefinedUrl} from "@/api/refer/table";
export default {
  name: "vciWebReferTable",
  props:["referConfig","value"],
  props:["referConfig","value","text","title"],
  data() {
    return {
      placeholder:this.referConfig.placeholder || '请选择数据',
      column:{
        children:{
          border: true,
          column: [{
            label: '姓名',
            width: 120,
            search:true,
            prop: 'name'
          }, {
            label: '性别',
            search:true,
            prop: 'sex'
          }],
        },
      },
      visible: false,
      options: this.referConfig.options,
      isMuti: ("true" == this.referConfig.options.isMuti || this.referConfig.options.isMuti == true || this.referConfig.options.muti == true) ? true : false,
      props: {
        value: this.referConfig.valueField || this.referConfig.options.valueField || 'oid',
        label: this.referConfig.textField || this.referConfig.options.textField || "name"
      },
      url: this.referConfig.options.url || '/api/ubcs-code/mdmEngineController/defaultReferDataGrid',
      tableDefinedUrl:'',//平台表格地址
      copyParam: ['referBo', 'textField', 'valueField', 'displayTable', 'whereSql',  'queryScheme'],
      query: {},
      loading: false,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
      },
      data:this.referConfig.options.data || [],
      selectionList: [],
      objTree: {//用于表格树,目前还没加上使用
        keyId: 'oid',//树形id字段名称
        keyPid: 'parentSaleProduct',//树形父id字段名称
        title: 'id',//以树形式显示的字段
        defaultShow: false//默认折叠
      },
      option: {
        addBtn: false,
        height: this.referConfig.options.height ? this.referConfig.options.height : 475,
        calcHeight: 30,
        tip: false,
        menu:false,
        searchShow: true,
        searchMenuSpan: 6,
        searchLabelWidth: 90,
        border: true,
        index: true,
        selection: true,
        dialogClickModal: false,
        highlightCurrentRow: true,
        column: []
      }
    };
  },
  created() {
    this.getParams();
    console.log('referConfig:')
    console.log(this.referConfig)
  },
  mounted() {
  },
  computed:{
    valueInfo:function (){
      return this.text ? ("已设置的值为[" + this.text + "]"): '未设置值'
    }
  },
  methods: {
    onLoad({page, value, data}, callback) {
      //首次加载去查询对应的值
      if (value) {
        this.$message.success('首次查询' + value)
        callback({
          id: '0',
          name: '张三',
          sex: '男'
        })
        return
    getParams:function (){
      var queryParams = {};
      if(this.options.extraParams){
        queryParams = this.options.extraParams;
      }
      if (data) {
        this.$message.success('搜索查询参数' + JSON.stringify(data))
      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 (page) {
        this.$message.success('分页参数' + JSON.stringify(page))
      if(this.options.where ) {
        for (var key in this.options.where) {
          queryParams['conditionMap["' + key + '"]'] = this.options.where[key];//新
        }
      }
      //分页查询信息
      callback({
        total: 2,
        data: [{
          id: '0',
          name: '张三',
          sex: '男'
        }, {
          id: '1',
          name: '李四',
          sex: '女'
        }]
      for(var i= 0 ; i < this.copyParam.length ; i ++){
        queryParams[this.copyParam[i]] = this.options[this.copyParam[i]];
      }
      queryParams["isMuti"]=this.isMuti;
      queryParams.muti =this.isMuti;
      if(!queryParams['referBo']){
        queryParams['referBo'] = this.options['referBo'] || this.options['referType'];
      }
      queryParams['referType']= queryParams['referBo']
      if (this.options.remoteSort && this.options.initSort) {
        queryParams['order'] = this.options.initSort.type;//方法
        queryParams['sort'] = this.options.initSort.field;//字段
      }
      if (this.options.conditionParams) {
        //说明是扩展属性
        for (var key in this.options.conditionParams) {
          queryParams['conditionMap["' + key + '"]'] = this.options.conditionParams[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];//新的方式
        }
      }
      var paramsData = {};
      //为了处理单引号和双引号的
      if(queryParams){
        for (var key in queryParams){
          paramsData[key.replace(/"/g, "'")] = queryParams[key];
        }
      }
      if(this.options.displayTable){
        //说明是使用平台的表格
        getTableDefinedUrl({btmType:(this.options.referBo||this.options.referType),code:this.options.displayTable,isMuti:this.isMuti},this.tableDefinedUrl).then(result => {
          if(result.success){
            var queryScheme = result.querySchema;
            if(!validatenull(queryScheme) && validatenull(this.options.queryScheme)){
              this.options.queryScheme = queryScheme;
            }
            paramsData['queryScheme'] = this.options.queryScheme;
            if(result.showIndex){
              this.option.index = true;
            }
            if(result.showCheckbox){
              this.option.selection = true
            }
            var referColumn = "";
            if(result.columns){
              this.option.column= result.columns.map(item => {
                if(item.field.indexOf(".")>-1){
                  referColumn += item.field + ",";
                  item.field = item.field.replace(".","_");
                }
                if(!validatenull(item.enumCode)) {
                  //是枚举的内容
                  item.type = 'select';
                  item.dicUrl = "/api/ubcs-omd/enum/dictionary?code=" + item.enumCode;
                  item.dicData = item.enumMap;
                  item.dataType = "String";
                  item.search = true;
                  item.props = {
                    label: "itemName",
                    value: "itemValue"
                  };
                  item.rules = [{
                    required: true,
                    message: "请输入" + item.field,
                    trigger: "blur"
                  }];
                  /*item.formatter=function(d,thisItem){
                    var vciWebComboxStore = layui.vciWebComboxStore;
                    return vciWebComboxStore.getComboxText(thisItem.enumCode,d[thisItem.field]);
                  };*/
                }
                return {
                  ...item,
                  label: item.title,
                  prop: item.field,
                  search: true
                }
              })
            }
            paramsData['referColumn'] = referColumn;
            if(result.limit>0){
              this.page.pageSize = result.limit;
              this.page.currentPage=1
            }
            if(this.options.isTreeGrid){
              //表格树加上配置
            }
            this.params=paramsData;
          }else{
            this.$message.error(result.msg);
          }
        });
      }else{
        //说明是自定义的表格
        var tableConfig = this.options.tableConfig;
        if(!tableConfig){
          this.$message.error( '没有定义参照的表格配置');
        }
        this.page.pageSize=tableConfig.page.limit || 10;
        if(!paramsData){
          paramsData = {
            currentUserReferModelKey:this.options.currentUserReferModelKey,
            currentUserReferMethodKey:this.options.currentUserReferMethodKey
          };
        }else{
          paramsData['currentUserReferModelKey'] = this.options.currentUserReferModelKey;
          paramsData['currentUserReferMethodKey'] = this.options.currentUserReferMethodKey;
        }
        if(this.options.tableConfig && this.options.tableConfig.cols && this.options.tableConfig.cols.length>0) {
          //说明传递了的
          this.option.column= this.options.tableConfig.cols.map(item => {
            if (item.field != 'LAY_TABLE_INDEX' && item.field != 'LAY_CHECKED') {
              return {
                ...item,
                label: item.title,
                prop: item.field,
                search: true
              }
            }
          })
        }
        if(this.options.isTreeGrid){
          //表格树加上配置
        }
      }
      this.params=paramsData;
    },
    setValue(){
      if(this.selectionList.length==0){
        this.$message.error( '没有选择数据');
        return false;
      }else if(this.selectionList.length>1 && !this.isMuti){
        this.$message.error( '每次只能选择一条数据');
        return false;
      }
      var value = [];
      var text = [];
      var isMutiValue = (this.props.value.indexOf(",")>-1);
      var isMutiRaw = (this.props.label.indexOf(",")>-1);
      var _that=this
      this.selectionList.forEach((item,_index) =>{
        if(isMutiValue){
          var valueFieldArray = _that.props.value.split(",");
          valueFieldArray.forEach((_indexField,_itemField)=>{
            value.push( item[_itemField] + (_that.referConfig.valueSep?_that.referConfig.valueSep:' '));
          })
        }else {
          value.push(item[_that.props.value]);
        }
        if(isMutiRaw) {
          var rawFieldArray = _that.props.label.split(",");
          rawFieldArray.forEach((_indexField,_itemField)=>{
            text.push(item[_itemField] + (_that.referConfig.textSep?_that.referConfig.textSep:' ')) ;
          })
        }else{
          text.push(item[_that.props.label]);
        }
      })
      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,rawData:this.selectionList});
      this.visible=false;
    },
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
      done();
    },
    currentChange(currentPage){
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize){
      this.page.pageSize = pageSize;
    },
    selectionChange(list) {
      if (!this.isMuti && list.length > 1) {
        const nowVal = list.shift();
        this.$refs.referCrud.toggleRowSelection(nowVal, false);
      }
      this.selectionList = list
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.referCrud.toggleSelection();
    },
    refreshChange() {
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = this.params) {
      if(this.url){
        this.loading = true;
        getList(Object.assign(params, this.query),page.currentPage, page.pageSize, this.url).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      }
    }
  }
}
</script>
<style scoped>
.valueInfo{
  float: left;
  border: 1px solid #E9E7E7;
  display: inline-block;
  vertical-align: middle;
  padding: 9px 15px;
  line-height: 1;
}
</style>
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue
@@ -1,27 +1,31 @@
<template>
  <avue-input-tree ref="referTree" :props="props" :lazy="lazy" :tree-load="treeLoad" :node-click="nodeClick" :leaf-only="!referConfig.onlyLeaf" :multiple="isMuti" v-model="value" :placeholder="placeholder" :dic="treeData"></avue-input-tree>
  <avue-input-tree ref="referTree" :props="props" :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"],
  props:["referConfig","value","text","title"],
  data() {
    return {
      options: this.referConfig.options,
      lazy: this.referConfig.options.loadType == 'node',
      isMuti: this.referConfig.isMuti,
      placeholder: this.referConfig.placeholder || '请选择内容',
      isMuti:("true" == this.referConfig.options.isMuti || this.referConfig.options.isMuti == true || this.referConfig.options.muti == true) ? true : false,
      props: {
        value: this.referConfig.valueField || this.referConfig.options.valueField || 'oid',
        label: this.referConfig.textField || this.referConfig.options.textField || "name"
        //value:"value",
        //label:"title"
        value: 'oid',
        label: "name"
      },
      treeUrl: this.referConfig.options.url || '/api/ubcs-code/codeClassify/treeCodeClassify',
      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'},
@@ -42,6 +46,7 @@
      }
    }
  },
  computed:{},
  methods: {
    getParams:function (){
      var queryParams = {};
@@ -56,10 +61,10 @@
        }
      }
      queryParams['referBo'] = this.options['referBo'] || this.options['referType'];
      queryParams['referType']= queryParams['referBo']
      queryParams['selectAllLevel'] = (this.options.loadType == this.loadType.all?true:false);//true时后台会报错
      if(queryParams.isMuti =="true"){
        queryParams.muti =true;
      }
      queryParams.muti =this.isMuti;
      if(queryParams.isQueryAllColumn =="true"){
        queryParams.isQueryAllColumn = true;
      }
@@ -143,12 +148,54 @@
        }))
      });
    },
    nodeClick(data){
      //不要用watch监听value值,会找不到text
      this.value=data[this.props.value];
      this.text=data[this.props.label];
      this.currentNode=data;
      this.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.currentNode});
    nodeClick(data, node, nodeComp){
      if(!this.isMuti) {
        //不要用watch监听value值,会找不到text
        this.value = data[this.config.valueField];
        this.text = data[this.config.textField];
        this.currentNode = data;
        this.$emit("setValue", {
          field: this.referConfig.field,
          showField: this.referConfig.showField,
          value: this.value,
          text: this.text,
          rawData: [this.currentNode]
        });
      }
     },
    checked:(checkedNode, checkedData)=> {
      debugger;
      /*
      * this用时始终要报错,只能先注释
      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[this.config.valueField] || item[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[textFieldArray[i]] || item[textFieldArray[i]])
            tempRaw.push(t);
          }
        }
        text.push(tempRaw.join(textSep));
      }
      this.value = value.join(',');
      this.text = text.join(',')*/
      this.value=checkedData.checkedKeys;
      this.$emit("setValue", {
        field: this.referConfig.field,
        showField: this.referConfig.showField,
        value: this.value,
        text: this.text,
        isTreeMuti:true,
        rawData: checkedData.checkedNodes
      });
    }
  },
  watch:{