Quellcode durchsuchen

修复搜索框的bug。

yangzhijie vor 4 Jahren
Ursprung
Commit
26c1cd6d11

+ 8 - 0
packages/info/src/InfoWindow.vue

@@ -9,6 +9,7 @@
       :is-search-widget="isSearchWidget"
       :parent-model-data="parentModelData"
       :model-data="modelData"
+      :multiple="multiple"
       @data-selected="dataSelected"
       @delete-selected="deleteSelected"
     />
@@ -59,6 +60,13 @@ export default {
       type: String,
       default: null,
     },
+    /**
+     * 是否多选
+     */
+    'multiple': {
+      type: Boolean,
+      default: false,
+    },
   },
 
   emits: ['dataSelected', 'valueChanged', 'deleteSelected'],

+ 1 - 0
packages/info/src/MultiSearchWidget.vue

@@ -38,6 +38,7 @@
           :is-search-widget="true"
           :model-data="modelData"
           :info-window-no="infoWindowNo"
+          :multiple="true"
           @data-selected="dataSelected"
           @delete-selected="deleteSelected"
         />

+ 115 - 116
packages/info/src/QueryPage.vue

@@ -237,6 +237,13 @@ export default {
       type: Object,
       default: null,
     },
+    /**
+     * 是否多选
+     */
+    'multiple': {
+      type: Boolean,
+      default: false,
+    },
   },
 
   emits: ['dataSelected'],
@@ -247,7 +254,6 @@ export default {
       infoWindowDto: {},
       queryResult: {},
       infoWindowData: {},
-      selectedModelDatas: [],	// 当前界面的选择项 (multiple)
       pagination: {
         total: 0,
         per_page: Common.pageSize,    // required
@@ -297,49 +303,36 @@ export default {
       var _self = this;
       if (_self.multipleSelect) {
         if (_self.isSelectAll) {
-          _self.selectedModelDatas.splice(0, _self.selectedModelDatas.length);
           if (val) {
             _self.infoWindowData.dataList.forEach(function (item) {
               item.select = true;
-              _self.selectedModelDatas.push(item);
             });
           }
         } else {
           _self.infoWindowData.dataList.forEach(function (item) {
             item.select = false;
           });
-          _self.selectedModelDatas = [];
         }
       } else {
         _self.isSelectAll = false;
       }
     },
 
-    /**
-         * 路由发生改变
-         */
-    $route: function (to, from) {
-      var _self = this;
-      _self.infoWindowData = {};
-    },
-
-    /**
-         * 选择的数据发生改变
-         */
-    // selectedModelDatas: function(to, from){
-    // 	var _self = this;
-    // 	if(!_self.multipleSelect){
-    // 		if(to.length > 1){
-    // 			_self.selectedModelDatas.splice(0, to.length - 1);
-    // 		}
-    // 	}
+    // /**
+    //  * 路由发生改变
+    //  */
+    // $route: function (to, from) {
+    //   var _self = this;
+    //   _self.infoWindowData = {};
     // },
 
-    /**
-         * fieldValue发生改变
-         */
-    fieldValue: function (to, from) {
-      this.reSelectedNode(to);
+
+
+    multiple: {
+      handler: function(newValue, oldValue){
+        this.multipleSelect = newValue;
+      },
+      immediate: true,
     },
   },
 
@@ -478,13 +471,10 @@ export default {
         data: JSON.stringify(_self.infoQueryParam),
         success: function (data) {
           _self.loading=false;
-          data.dataList.forEach(function (item) {
-            item.select = false;
-          });
+          
+          _self.setSelectedFlag(data);
           _self.infoWindowData = data;
-          _self.selectedModelDatas.splice(0, _self.selectedModelDatas.length);
 
-          _self.reSelectedNode(_self.fieldValue);
           _self.pagination.total = data.totalSize;
           _self.pagination.last_page = Math.ceil(data.totalSize / data.range.length);
 
@@ -497,6 +487,25 @@ export default {
       });
     },
 
+    /**
+     * 设置数据是否被已经被选中。
+     */
+    setSelectedFlag: function(data){
+      let _self = this;
+      let selectedIds = _self.fieldValue.ids;
+      let selectedId = _self.fieldValue.id;
+
+      data.dataList.forEach(function (item) {
+        if(selectedIds !== undefined && selectedIds.indexOf(item.id) >= 0){
+          item.select = true;
+        }else if(selectedId !== undefined && selectedId == item.id){
+          item.select = true;
+        }else{
+          item.select = false;
+        }
+      });
+    },
+
     queryInfoWindowDataSimple: function () {
       var _self = this;
       if (_self.$refs.loading) {
@@ -517,14 +526,9 @@ export default {
           if (_self.$refs.loading) {
             _self.loading=false;
           }
-          data.dataList.forEach(function (item) {
-            item.select = false;
-          });
+          _self.setSelectedFlag(data);
           _self.infoWindowData = data;
 
-          _self.selectedModelDatas.splice(0, _self.selectedModelDatas.length);
-
-          _self.reSelectedNode(_self.fieldValue);
           _self.pagination.total = data.totalSize;
           _self.pagination.last_page = Math.ceil(data.totalSize / data.range.length);
 
@@ -547,25 +551,13 @@ export default {
     },
 
     /**
-         * 选择/取消选择表格行中的复选框事件
-         */
+     * 选择/取消选择表格行中的复选框事件
+     */
     selectNodeForSearch: function (modelData) {
       var _self = this;
-      if ((_self.fieldValue != undefined) && (_self.fieldValue.fieldType == 'ManyToManyKey')) {
-        // CRUD-ManyToManySetBoxEditor多选搜索框-多选
-
-      } else if ((_self.fieldValue != undefined) && (_self.fieldValue.displayType == 'MultiSearchBoxEditor')) {
-        // 多选
-
-      } else if ((_self.fieldValue != undefined) && (_self.fieldValue.fieldType == 'Key')) {
-        // 单选
-        // 清空选择项
-        _self.selectedModelDatas.splice(0, _self.selectedModelDatas.length);
-      }
+      
       var currentStatus = modelData.select;
-      var index = _self.selectedModelDatas.indexOf(modelData);
       if (!_self.multipleSelect) {
-        _self.selectedModelDatas = [];
         _self.infoWindowData.dataList.forEach(function (item) {
           item.select = false;
         });
@@ -573,21 +565,29 @@ export default {
 
       modelData.select = !currentStatus;
 
-      if (index < 0) {
-        _self.selectedModelDatas.push(modelData);
+      if (modelData.select === true) {
         _self.$emit('dataSelected', modelData);
       } else {
-        _self.selectedModelDatas.splice(index, 1);
         _self.$emit('deleteSelected', modelData);
       }
     },
 
     /**
-         * 获取选择的数据
-         */
+     * 获取选择的数据
+     */
     getSelectedModelDatas: function (data) {
       var _self = this;
-      return _self.selectedModelDatas;
+      var tempSelectedModelDatas = [];
+      
+      if(_self.infoWindowData != null && _self.infoWindowData.dataList != null){
+        _self.infoWindowData.dataList.forEach(function (item) {
+          if(item.select == true){
+            tempSelectedModelDatas.push(item);
+          }
+        });
+      }
+
+      return tempSelectedModelDatas;
     },
 
     /**
@@ -626,6 +626,7 @@ export default {
         return;
       }
 
+      let tempSelectedModelDatas = _self.getSelectedModelDatas();
       if (infoButton.htmlWindowNo != null && infoButton.htmlWindowNo.length > 0) {
         HtmlWindowResource.uniqueByNo(infoButton.htmlWindowNo).then(htmlWindowDto => {
           if (htmlWindowDto != undefined) {
@@ -641,13 +642,13 @@ export default {
                   htmlWindowUrl = htmlWindowUrl.replace('{URL}', Common.getRedirectUrl(''));
                   console.log('{' + htmlWindowUrl + '}地址');
                 } else if (tempResult == '{RecordId}') {
-                  if (_self.selectedModelDatas.length == 0) {
+                  if (tempSelectedModelDatas.length == 0) {
                     Notify.error('错误', '未选择可操作的数据', true);
                     return;
                   }
                   htmlWindowUrl = htmlWindowUrl.replace('{RecordId}', _self.getFirstSelectRecordId());
                 } else if (tempResult == '{RecordIds}') {
-                  if (_self.selectedModelDatas.length == 0) {
+                  if (tempSelectedModelDatas.length == 0) {
                     Notify.error('错误', '未选择可操作的数据', true);
                     return;
                   }
@@ -657,10 +658,10 @@ export default {
                 } else if (tempResult == '{infoWindowNo}') {
                   htmlWindowUrl = htmlWindowUrl.replace('{infoWindowNo}', _self.infoWindowDto.no);
                 } else {
-                  if (_self.selectedModelDatas.length == 0) {
+                  if (tempSelectedModelDatas.length == 0) {
                     Notify.error('错误', '未选择可操作的数据', true);
                     return;
-                  } else if (_self.selectedModelDatas.length > 1) {
+                  } else if (tempSelectedModelDatas.length > 1) {
                     Notify.error('错误', '请选择一条数据', true);
                     return;
                   }
@@ -693,19 +694,33 @@ export default {
                                 + '&token=' + Common.getToken();
               window.open(downloadUrl);
             } else {
-              // if (_self.selectedModelDatas.length == 0) {
-              // Notify.error("错误", "未选择可操作的数据", true);
-              // return;
-              // }
-              localStorage.setItem(_self.uuid, JSON.stringify(_self.selectedModelDatas));
-
-              var routeDate = {
-                path: customerWindowRouteUrl,
-                query: {
-                  'uuid': _self.uuid,
-                },
-              };
-              _self.$router.push(routeDate);
+              if (tempSelectedModelDatas.length > 0) {
+                let userStorageDtos = [
+                  {
+                    key: _self.uuid,
+                    value: JSON.stringify(tempSelectedModelDatas),
+                  },
+                ];
+
+                // 组装查询条件,然后放到后台数据库当中
+                UserStorageResource.uploadUserStorage(userStorageDtos).then(successData => {
+                  _self.$router.push({
+                    path: customerWindowRouteUrl,
+                    query: {
+                      'uuid': _self.uuid,
+                    },
+                  });
+                }, errorData => {
+                  Common.processException(errorData);
+                });
+              }else{
+                _self.$router.push({
+                  path: customerWindowRouteUrl,
+                  query: {
+                    'uuid': _self.uuid,
+                  },
+                });
+              }
             }
           }
         }, errorData => {
@@ -789,24 +804,31 @@ export default {
 
 
     /**
-         * 获取选择数据的Id集合
-         */
+     * 获取选择数据的Id集合
+     */
     getSelectedRecordIds: function () {
       var _self = this;
       var recordIds = [];
-      _self.selectedModelDatas.forEach(function (selectedModelData) {
-        recordIds.push(selectedModelData.id);
-      });
+      
+      if(_self.infoWindowData != null && _self.infoWindowData.dataList != null){
+        _self.infoWindowData.dataList.forEach(function (item) {
+          if(item.select == true){
+            recordIds.push(item.id);
+          }
+        });
+      }
+
       return recordIds;
     },
 
     /**
-         * 获取选中的第一个数据的Id
-         */
+     * 获取选中的第一个数据的Id
+     */
     getFirstSelectRecordId: function () {
       var _self = this;
-      if (_self.selectedModelDatas.length > 0) {
-        return _self.selectedModelDatas[0].id;
+      let recordIds = _self.getSelectedRecordIds();
+      if (recordIds.length > 0) {
+        return recordIds[0];
       }
       return undefined;
     },
@@ -816,11 +838,16 @@ export default {
          */
     getFirstSelectModelDataFieldValue: function (name) {
       var _self = this;
-      if (_self.selectedModelDatas.length > 0) {
-        if (_self.selectedModelDatas[0].data[name] != undefined) {
-          return _self.selectedModelDatas[0].data[name].displayValue[0];
+
+      if(_self.infoWindowData != null && _self.infoWindowData.dataList != null){
+        for(let i = 0; i < _self.infoWindowData.dataList.length; i ++){
+          let item = _self.infoWindowData.dataList[i];
+          if(item.select == true){
+            return item.data[name].displayValue[0];
+          }
         }
       }
+
       return undefined;
     },
 
@@ -854,34 +881,6 @@ export default {
       _self.sortStyle = _self.sortStyle == ' ASC' ? ' DESC' : ' ASC';
     },
 
-    /**
-         * 重新加载数据以后,重新计算当前界面的选择项
-         */
-    reSelectedNode: function (fieldValue) {
-      if (!fieldValue) {
-        return;
-      }
-      var _self = this;
-      var ids = [];
-      if (fieldValue.displayType == 'MultiSearchBoxEditor') {
-        ids = fieldValue.ids;
-      } else if (fieldValue.fieldType == 'ManyToManyKey') {
-        ids = fieldValue.ids;
-      } else if (fieldValue.fieldType == 'Key') {
-        ids.push(fieldValue.id);
-      } else {
-        return;
-      }
-
-      _self.selectedModelDatas.splice(0, _self.selectedModelDatas.length);
-      if (this.infoWindowData && this.infoWindowData.dataList) {
-        this.infoWindowData.dataList.forEach(function (node) {
-          if (ids.indexOf(node.id) > -1) {
-            _self.selectedModelDatas.push(node);
-          }
-        });
-      }
-    },