|
@@ -22,9 +22,11 @@ let page = 1
|
|
|
let rightPage = 1
|
|
|
let limit = 15
|
|
|
let searchType = ''
|
|
|
+const vxeRef = ref()
|
|
|
+const vxeRefRight = ref()
|
|
|
const selectedParentAsins = ref([])
|
|
|
-const singleSelect = ref([]) // 默认假设有更多数据
|
|
|
const hasMore = ref(true)
|
|
|
+const isScrollSelectAll = ref(false)
|
|
|
|
|
|
// 父ASIN表格配置
|
|
|
const gridOptions = <any>reactive({
|
|
@@ -51,45 +53,69 @@ const gridOptionsRight = <any>reactive({
|
|
|
data: [],
|
|
|
})
|
|
|
|
|
|
-// 全选事件
|
|
|
-function selectAllChangeEvent(table: any) {
|
|
|
- console.log('多选:', table)
|
|
|
- if (table.checked) {
|
|
|
- fetchSearchedItem(selectedParentAsins.value)
|
|
|
- } else {
|
|
|
- // 如果全选被取消,清空右侧数据或执行其他逻辑
|
|
|
- gridOptionsRight.data = []
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// 单选事件
|
|
|
-function selectChangeEvent(table: any) {
|
|
|
+// 左侧单选事件
|
|
|
+async function selectChangeEvent(table: any) {
|
|
|
if (table.checked) {
|
|
|
rightPage = 1 // 仅当有新的选中项时重置页码和数据
|
|
|
- singleSelect.value.splice(0)
|
|
|
- singleSelect.value.push(table.row.parentAsin)
|
|
|
+ selectedParentAsins.value.splice(0) // 移除旧的选中项
|
|
|
+ selectedParentAsins.value.push(table.row.parentAsin)
|
|
|
gridOptionsRight.data.splice(0) // 在加载新数据之前清空现有数据
|
|
|
- fetchSearchedItem(singleSelect.value)
|
|
|
+ await fetchSearchedItem(selectedParentAsins.value)
|
|
|
+ await vxeRefRight.value.setAllCheckboxRow(true)
|
|
|
+ // const data = vxeRefRight.value.getTableData()
|
|
|
+ getRightSelectedItem()
|
|
|
} else {
|
|
|
// 移除singleSelect.value中对应的parentAsin
|
|
|
- const index = singleSelect.value.indexOf(table.row.parentAsin)
|
|
|
+ const index = selectedParentAsins.value.indexOf(table.row.parentAsin)
|
|
|
if (index !== -1) {
|
|
|
- singleSelect.value.splice(index, 1)
|
|
|
+ selectedParentAsins.value.splice(index, 1)
|
|
|
}
|
|
|
// 从gridOptionsRight.data中移除对应的项
|
|
|
gridOptionsRight.data = gridOptionsRight.data.filter((item: any) => item.parentAsin !== table.row.parentAsin)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// 单元格点击事件处理函数
|
|
|
+// 左侧全选事件
|
|
|
+async function selectAllChangeEvent(table: any) {
|
|
|
+ // console.log('多选:', table)
|
|
|
+ if (table.checked) {
|
|
|
+ table.records.forEach((record: any) => {
|
|
|
+ selectedParentAsins.value.push(record.parentAsin)
|
|
|
+ isScrollSelectAll.value = true // 是否滚动全选
|
|
|
+ })
|
|
|
+ await fetchSearchedItem(selectedParentAsins.value)
|
|
|
+ await vxeRefRight.value.setAllCheckboxRow(true)
|
|
|
+ // const data = vxeRefRight.value.getTableData()
|
|
|
+ getRightSelectedItem()
|
|
|
+ } else {
|
|
|
+ // 如果全选被取消,清空右侧数据或执行其他逻辑
|
|
|
+ selectedParentAsins.value.splice(0)
|
|
|
+ gridOptionsRight.data.splice(0)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 单元格点击事件
|
|
|
function handleCellClick(table: any) {
|
|
|
rightPage = 1
|
|
|
- singleSelect.value.splice(0)
|
|
|
- singleSelect.value.push(table.row.parentAsin)
|
|
|
+ selectedParentAsins.value.splice(0)
|
|
|
+ selectedParentAsins.value.push(table.row.parentAsin)
|
|
|
gridOptionsRight.data.splice(0)
|
|
|
- fetchSearchedItem(singleSelect.value)
|
|
|
+ fetchSearchedItem(selectedParentAsins.value)
|
|
|
+}
|
|
|
+
|
|
|
+// 右侧表格单选事件
|
|
|
+function selectChangeRight(table: any) {
|
|
|
+ getRightSelectedItem()
|
|
|
}
|
|
|
|
|
|
+// 获取右侧表格选中的数据
|
|
|
+function getRightSelectedItem() {
|
|
|
+ const selectedData = vxeRefRight.value.getCheckboxRecords() // 获取右侧表格选中的数据
|
|
|
+ // console.log('selectedData', selectedData)
|
|
|
+ emitter.emit('PopoverFilterTable-tableData', selectedData)
|
|
|
+}
|
|
|
+
|
|
|
+// 获取父ASIN数据
|
|
|
async function fetchParentAsin() {
|
|
|
parentLoading.value = true
|
|
|
const body = {
|
|
@@ -132,20 +158,27 @@ async function fetchSearchedItem(parentAsin: Array<string>) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function handleScroll(event: any) {
|
|
|
+async function handleScroll(event: any) {
|
|
|
const target = event.$event.target
|
|
|
// 计算是否达到底部:容器高度 + 滚动顶部距离 >= 滚动内容的总高度
|
|
|
if (target.scrollHeight - (target.scrollTop + target.clientHeight) < 1) {
|
|
|
page += 1
|
|
|
- fetchParentAsin()
|
|
|
+ await fetchParentAsin()
|
|
|
+ if (isScrollSelectAll.value) {
|
|
|
+ await vxeRef.value.setAllCheckboxRow(true)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function handleRightScroll(event: any) {
|
|
|
+async function handleRightScroll(event: any) {
|
|
|
const target = event.$event.target
|
|
|
if (target.scrollHeight - (target.scrollTop + target.clientHeight) < 1 && hasMore.value) {
|
|
|
rightPage += 1 // 准备加载下一页
|
|
|
- fetchSearchedItem(singleSelect.value)
|
|
|
+ await fetchSearchedItem(selectedParentAsins.value)
|
|
|
+ await vxeRefRight.value.setAllCheckboxRow(true)
|
|
|
+ getRightSelectedItem()
|
|
|
+ // const data = vxeRef.value.getTableData()
|
|
|
+ // getRightSelectedItem(data)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -166,7 +199,6 @@ function updateGridColumnField() {
|
|
|
// 更改表头样式
|
|
|
function changeHeaderCellStyle() {
|
|
|
return {
|
|
|
- // backgroundColor: '#eef0f7',
|
|
|
padding: '3px',
|
|
|
}
|
|
|
}
|
|
@@ -179,6 +211,7 @@ onBeforeUnmount(() => {
|
|
|
<template>
|
|
|
<div class="flex">
|
|
|
<vxe-grid
|
|
|
+ ref="vxeRef"
|
|
|
v-loading="parentLoading"
|
|
|
v-bind="gridOptions"
|
|
|
:header-row-style="changeHeaderCellStyle"
|
|
@@ -222,9 +255,11 @@ onBeforeUnmount(() => {
|
|
|
</vxe-grid>
|
|
|
<!-- 右侧表格 -->
|
|
|
<vxe-grid
|
|
|
+ ref="vxeRefRight"
|
|
|
v-loading="rightLoading"
|
|
|
v-bind="gridOptionsRight"
|
|
|
:header-cell-style="changeHeaderCellStyle"
|
|
|
+ @checkbox-change="selectChangeRight"
|
|
|
class="mr-2 mb-2 mt-0 border rounded-br-md rounded-tr-md overflow-hidden w-0"
|
|
|
style="flex: 2 1 0; overflow: auto"
|
|
|
@scroll.native="handleRightScroll">
|