From 52ffefd06e59cbd56c1a919972866592379cfed2 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期四, 21 九月 2023 11:27:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue |  460 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 413 insertions(+), 47 deletions(-)

diff --git a/Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue b/Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
index 1f1b519..65775e1 100644
--- a/Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
+++ b/Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
@@ -1,71 +1,437 @@
 <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="options.width|| '80%'"
+               :height="options.height|| 'auto'">
+      <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"
+                 @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>
+        <el-button @click="visible=false">鍙� 娑�</el-button>
+        <el-button @click="setValue" type="primary">纭� 瀹�</el-button>
+      </div>
+    </el-dialog>
+
+    <avue-input v-model="text" :disabled="disabled" :placeholder="title" @click="!disabled && (visible=true)"></avue-input>
+  </div>
 </template>
 
 <script>
+import { validatenull } from "@/util/validate";
+import {getList,getLazyList,getTableDefinedUrl} from "@/api/refer/table";
 export default {
   name: "vciWebReferTable",
-  props:["options","value"],
+  props:["referConfig","value","text","title","disabled"],
   data() {
     return {
-      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: {
-        label: 'name',
-        value: 'oid'
+        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: this.referConfig.options.data?this.referConfig.options.data.length :0
+      },
+      data:this.referConfig.options.data || [],
+      selectionList: [],
+      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,
+        reserveSelection:true,
+        dialogClickModal: false,
+        highlightCurrentRow: true,
+        rowKey:'oid',
+        rowParentKey:'parentSaleProduct',
+        column: []
       }
     };
   },
+  created() {
+    this.getParams();
+  },
+  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
+    }else if(!validatenull(this.referConfig.options.tableConfig.limit)){
+      this.page.pageSize=this.referConfig.options.tableConfig.limit
+    }
+    this.$nextTick(() => {
+      this.$refs.referCrud.doLayout()
+    })
+  },
+
+  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.initSort) {
+        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) {
+          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 => {
+          console.log('result',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){
+                  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
+                }
+              })
+            }
+            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( '娌℃湁瀹氫箟鍙傜収鐨勮〃鏍奸厤缃�');
+        }
+        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') {
+              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,
+                formatter:formatter,
+                sortable:item.sort,
+                hide:item.hidden,
+                search: this.options.tableConfig.queryColumns.some(qItem=>{
+                  return qItem.field==item.field
+                })
+              }
+            }
+          })
+        }
+        if(this.options.isTreeGrid){
+          //琛ㄦ牸鏍戝姞涓婇厤缃�
+        }
+      }
+      this.params=paramsData;
+    },
+    setValue(){
+      if(this.selectionList.length==0){
+        this.$message.warning( '娌℃湁閫夋嫨鏁版嵁');
+        return false;
+      }else if(this.selectionList.length>1 && !this.isMuti){
+        this.$message.warning( '姣忔鍙兘閫夋嫨涓�鏉℃暟鎹�');
+        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((_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 {
+          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((_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{
+          let itemText=item[_that.props.label];
+          if(itemText==undefined || itemText == null){
+            itemText=item['data'][_that.props.label]
+          }
+          text.push(itemText);
+        }
       })
+      let mapFields =this.referConfig.fieldMap || {};
+      try {
+        if(!validatenull(this.options.mapFields)){
+          mapFields =Object.assign(this.referConfig.fieldMap,JSON.parse(this.options.mapFields)) ;
+        }
+      }catch (e) {
+
+      }
+      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,fieldMap:mapFields});
+      this.visible=false;
+    },
+    searchReset() {
+      this.query = {};
+      this.onLoad(this.page);
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page);
+      done();
+    },
+    currentChange(currentPage){
+      this.page.currentPage = currentPage;
+    },
+    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) {
+        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={}) {
+      if(this.url){
+        this.loading = true;
+        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;
+        });
+      }
+
     }
   }
 }
 </script>
 
 <style scoped>
-
+.valueInfo{
+  float: left;
+  border: 1px solid #E9E7E7;
+  display: inline-block;
+  vertical-align: middle;
+  padding: 9px 15px;
+  line-height: 1;
+}
 </style>

--
Gitblit v1.9.3