田源
2023-09-18 a216d2503641b1d2ae6d4a2defa870470f2737bb
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
@@ -5,7 +5,8 @@
               :visible.sync="visible"
               top="0"
               class="avue-dialog avue-dialog--top"
               :width="referConfig.options.width|| '80%'">
               :width="options.width|| '80%'"
               :height="options.height|| 'auto'">
      <avue-crud :option="option"
                 :table-loading="loading"
                 :data="data"
@@ -15,19 +16,23 @@
                 @search-change="searchChange"
                 @search-reset="searchReset"
                 @selection-change="selectionChange"
                 @row-click="rowClick"
                 @current-change="currentChange"
                 @size-change="sizeChange"
                 @refresh-change="refreshChange"
                 @on-load="onLoad">
        <template slot="icon" slot-scope="scope">
          <i :class="scope.row.icon" style="font-size:24px"></i>
        </template>
      </avue-crud>
      <div class="avue-dialog__footer">
        <div class="avue-dialog__footer--left valueInfo">{{ valueInfo }}</div>
        <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 v-model="text" :disabled="disabled" :placeholder="title" @click="!disabled && (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>
@@ -38,11 +43,11 @@
import {getList,getLazyList,getTableDefinedUrl} from "@/api/refer/table";
export default {
  name: "vciWebReferTable",
  props:["referConfig","value","text","title"],
  props:["referConfig","value","text","title","disabled"],
  data() {
    return {
      visible: false,
      options: this.referConfig.options,
      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',
@@ -56,16 +61,10 @@
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
        total: this.referConfig.options.data?this.referConfig.options.data.length :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,
@@ -78,19 +77,30 @@
        border: true,
        index: true,
        selection: true,
        reserveSelection:true,
        dialogClickModal: false,
        highlightCurrentRow: true,
        rowKey:'oid',
        rowParentKey:'parentSaleProduct',
        column: []
      }
    };
  },
  created() {
    this.getParams();
    console.log('referConfig:')
    console.log(this.referConfig)
  },
  mounted() {
    if(this.referConfig.options.page){
      this.page.pageSize=this.referConfig.options.tableConfig.page.limit || this.referConfig.options.tableConfig.page.pageSize;
      this.page.currentPage=this.referConfig.options.tableConfig.page.page || this.referConfig.options.tableConfig.page.currentPage;
    }else if(!validatenull(this.referConfig.options.limit)){
      this.page.pageSize=this.referConfig.options.limit
    }
    this.$nextTick(() => {
      this.$refs.referCrud.doLayout()
    })
  },
  computed:{
    valueInfo:function (){
      return this.text ? ("已设置的值为[" + this.text + "]"): '未设置值'
@@ -124,6 +134,12 @@
        queryParams['order'] = this.options.initSort.type;//方法
        queryParams['sort'] = this.options.initSort.field;//字段
      }
      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) {
@@ -155,6 +171,7 @@
      if(this.options.displayTable){
        //说明是使用平台的表格
        getTableDefinedUrl({btmType:(this.options.referBo||this.options.referType),code:this.options.displayTable,isMuti:this.isMuti},this.tableDefinedUrl).then(result => {
          console.log('result',result)
          if(result.success){
            var queryScheme = result.querySchema;
            if(!validatenull(queryScheme) && validatenull(this.options.queryScheme)){
@@ -190,11 +207,16 @@
                    message: "请输入" + item.field,
                    trigger: "blur"
                  }];
                  /*item.formatter=function(d,thisItem){
                    var vciWebComboxStore = layui.vciWebComboxStore;
                    return vciWebComboxStore.getComboxText(thisItem.enumCode,d[thisItem.field]);
                  };*/
                }
                item.formatter=function(d){
                  if(d[item.field]!=undefined){
                    return d[item.field]
                  }else if(d.data[item.field] !=undefined){
                    return d.data[item.field]
                  }else {
                    return ''
                  }
                };
                return {
                  ...item,
                  label: item.title,
@@ -223,7 +245,6 @@
        if(!tableConfig){
          this.$message.error( '没有定义参照的表格配置');
        }
        this.page.pageSize=tableConfig.page.limit || 10;
        if(!paramsData){
          paramsData = {
            currentUserReferModelKey:this.options.currentUserReferModelKey,
@@ -237,11 +258,30 @@
          //说明传递了的
          this.option.column= this.options.tableConfig.cols.map(item => {
            if (item.field != 'LAY_TABLE_INDEX' && item.field != 'LAY_CHECKED') {
              let formatter=item.template || item.templet;
              if(typeof formatter == "string" && formatter !=''){
                formatter=eval("(" + formatter + ")")
              }else{
                formatter=function (d){
                  if(d[item.field]!=undefined){
                    return d[item.field]
                  }else if(d.data[item.field] !=undefined){
                    return d.data[item.field]
                  }else {
                    return ''
                  }
                }
              }
              return {
                ...item,
                label: item.title,
                prop: item.field,
                search: true
                formatter:formatter,
                sortable:item.sort,
                hide:item.hidden,
                search: this.options.tableConfig.queryColumns.some(qItem=>{
                  return qItem.field==item.field
                })
              }
            }
          })
@@ -254,10 +294,10 @@
    },
    setValue(){
      if(this.selectionList.length==0){
        this.$message.error( '没有选择数据');
        this.$message.warning( '没有选择数据');
        return false;
      }else if(this.selectionList.length>1 && !this.isMuti){
        this.$message.error( '每次只能选择一条数据');
        this.$message.warning( '每次只能选择一条数据');
        return false;
      }
@@ -269,25 +309,41 @@
      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:' '));
          valueFieldArray.forEach((_itemField,_indexField)=>{
            let itemValue=item[_itemField];
            if(itemValue==undefined || itemValue == null){
              itemValue=item['data'][_itemField]
            }
            value.push( itemValue + (_that.referConfig.valueSep?_that.referConfig.valueSep:' '));
          })
        }else {
          value.push(item[_that.props.value]);
          let itemValue=item[_that.props.value];
          if(itemValue==undefined || itemValue == null){
            itemValue=item['data'][_that.props.value]
          }
          value.push(itemValue);
        }
        if(isMutiRaw) {
          var rawFieldArray = _that.props.label.split(",");
          rawFieldArray.forEach((_indexField,_itemField)=>{
            text.push(item[_itemField] + (_that.referConfig.textSep?_that.referConfig.textSep:' ')) ;
          rawFieldArray.forEach((_itemField,_indexField)=>{
            let itemText=item[_itemField];
            if(itemText==undefined || itemText == null){
              itemText=item['data'][_itemField]
            }
            text.push(itemText + (_that.referConfig.textSep?_that.referConfig.textSep:' ')) ;
          })
        }else{
          text.push(item[_that.props.label]);
          let itemText=item[_that.props.label];
          if(itemText==undefined || itemText == null){
            itemText=item['data'][_that.props.label]
          }
          text.push(itemText);
        }
      })
      let mapFields =Object.assign(this.referConfig.fieldMap,JSON.parse(this.options.mapFields)) ;
      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.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.selectionList,fieldMap:mapFields});
      this.visible=false;
    },
    searchReset() {
@@ -297,7 +353,7 @@
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
      this.onLoad(this.page);
      done();
    },
    currentChange(currentPage){
@@ -305,6 +361,11 @@
    },
    sizeChange(pageSize){
      this.page.pageSize = pageSize;
    },
    rowClick (row) {
      this.$refs.referCrud.toggleSelection();
      this.$refs.referCrud.toggleRowSelection(row); //选中当前行
      this.selectionList=[row]
    },
    selectionChange(list) {
      if (!this.isMuti && list.length > 1) {
@@ -320,15 +381,35 @@
    refreshChange() {
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = this.params) {
    onLoad(page, 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;
        var query={}
        if (this.query) {
          for (var key in this.query) {
            query['conditionMap["' + key + '"]'] = this.query[key];
          }
        }
        getList(Object.assign(params,this.params,this.query, query),page.currentPage, page.pageSize, this.url).then(res => {
          let data=[]
          if(res.data.records){
            data = res.data.records
            this.page.total=res.data.total ;
          }else{
            data = res.data.data.records;
            this.page.total=res.data.data.total;
          }
          this.data=data.map(item => {
            item.data=item.data || {}
            return {
              ...item
            }
          })
          this.loading = false;
          this.selectionClear();
        }).catch(error=>{
          this.$message.error(error);
          this.loading = false;
        });
      }