|
|
@@ -19,7 +19,7 @@
|
|
|
@current-change="onSelect"
|
|
|
@selection-change="onSelectionChange"
|
|
|
>
|
|
|
- <el-table-column v-if="multiple" type="selection" width="42" />
|
|
|
+ <el-table-column v-if="multiple" type="selection" width="42" :reserve-selection="true" />
|
|
|
<el-table-column v-else width="50">
|
|
|
<template slot-scope="{ row }">
|
|
|
<el-radio :value="selectedId" :label="row.id" @change="onSelect(row)"> </el-radio>
|
|
|
@@ -105,7 +105,8 @@ export default {
|
|
|
pageSize: 20,
|
|
|
query: { keyword: '', page: 1 },
|
|
|
selectedProduct: null,
|
|
|
- picked: []
|
|
|
+ picked: [],
|
|
|
+ _pickedMap: {}
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
@@ -121,6 +122,7 @@ export default {
|
|
|
this.query.page = 1
|
|
|
this.selectedProduct = this.multiple ? null : (this.selected || null)
|
|
|
// 多选:用 selected 预填 picked,load() 后对已选行回勾
|
|
|
+ if (this.multiple) this._pickedMap = {}
|
|
|
this.picked = this.multiple ? ((this.selected || []).slice()) : []
|
|
|
this.search()
|
|
|
},
|
|
|
@@ -155,10 +157,13 @@ export default {
|
|
|
},
|
|
|
restoreSelection() {
|
|
|
if (!this.multiple || !this.$refs.table) return
|
|
|
- const preset = this.picked.slice()
|
|
|
- this.picked = []
|
|
|
+ if (!Object.keys(this._pickedMap || {}).length && this.picked.length) {
|
|
|
+ const map = {}
|
|
|
+ this.picked.forEach(p => { map[p.childProductId || p.id] = p })
|
|
|
+ this._pickedMap = map
|
|
|
+ }
|
|
|
this.list.forEach(row => {
|
|
|
- const p = preset.find(x => (x.childProductId || x.id) === row.id)
|
|
|
+ const p = this._pickedMap && this._pickedMap[row.id]
|
|
|
if (p) {
|
|
|
this.$set(row, '_childSkuId', p.childSkuId || null)
|
|
|
this.$set(row, '_quantity', p.quantity || 1)
|
|
|
@@ -167,7 +172,15 @@ export default {
|
|
|
})
|
|
|
},
|
|
|
onSelectionChange(rows) {
|
|
|
- this.picked = rows || []
|
|
|
+ const pageIds = new Set((this.list || []).map(r => r.id))
|
|
|
+ const map = {}
|
|
|
+ // 保留非当前页的选中(翻页时 selection-change 只回报当前页)
|
|
|
+ Object.entries(this._pickedMap || {}).forEach(([id, r]) => {
|
|
|
+ if (!pageIds.has(Number(id))) map[id] = r
|
|
|
+ })
|
|
|
+ ;(rows || []).forEach(r => { map[r.id] = r })
|
|
|
+ this._pickedMap = map
|
|
|
+ this.picked = Object.values(map)
|
|
|
},
|
|
|
onSelect(row) {
|
|
|
if (row && !this.multiple) this.selectedProduct = row
|
|
|
@@ -203,6 +216,7 @@ export default {
|
|
|
handleClose() {
|
|
|
this.selectedProduct = null
|
|
|
this.picked = []
|
|
|
+ this._pickedMap = {}
|
|
|
}
|
|
|
}
|
|
|
}
|