Explorar o código

修复值来源组件因分页导致的label异常问题

luoaoxuan hai 1 ano
pai
achega
2c4e5b2fb1
Modificáronse 1 ficheiros con 33 adicións e 2 borrados
  1. 33 2
      src/business/platform/data/templaterender/link-data/index.vue

+ 33 - 2
src/business/platform/data/templaterender/link-data/index.vue

@@ -404,6 +404,26 @@ export default {
                 this.loadTreeData()
             }
         },
+        /**
+         * 初始化的时候  将选中的数据移动到最前面 防止因为分页找不到对应的label
+         */
+        handleData (data = []) {
+            if (data.length === 0 || !this.selectData) return data
+            const newData = JSON.parse(JSON.stringify(data)) // 深拷贝避免缓存数据被修改
+            const selectiton = this.multiple ? this.selectData : [this.selectData]
+            // 将n条数据与前n条数据做交换
+            for (let i = 0; i < selectiton.length; i++) {
+                const item = selectiton[i]
+                const index = newData.findIndex(i => i[this.valueKey] === item)
+                if (index > -1 && index !== i) {
+                    const temp = newData[index]
+                    newData[index] = newData[i]
+                    newData[i] = temp
+                }
+                // console.log(JSON.parse(JSON.stringify(newData)))
+            }
+            return newData
+        },
         loadTreeData (init = false) {
             if (init) {
                 this.listData = []
@@ -444,13 +464,24 @@ export default {
             }).then(response => {
                 this.showEmptyText = this.emptyText
                 const responseData = response.data
-                const data = responseData.dataResult || []
+                let data = responseData.dataResult || []
+
+                // 当多选的数据大于分页数时 动态调整分页容量
+                if (this.multiple && this.selectData.length > this.pagination.limit) {
+                    this.pagination.limit = Math.ceil(this.selectData.length / 10) * 10
+                    this.defaultPagination.limit = this.pagination.limit
+                }
+                data = this.handleData(data, init)
 
                 if (this.structure === 'list') {
                     // 处理分页
                     this.handlerPagination(JSON.parse(JSON.stringify(this.defaultPagination)))
                     this.pagination.count = data.length
-                    this.selectDataOptions = data.slice(this.pagination.page - 1, this.pagination.limit)
+
+                    this.selectDataOptions = []
+                    this.$nextTick(() => {
+                        this.selectDataOptions = data.slice(this.pagination.page - 1, this.pagination.limit)
+                    })
 
                     this.treeData = data
                 } else {