feat: 我的衣柜筛选
This commit is contained in:
@@ -97,6 +97,14 @@
|
||||
|
||||
import { debounce } from 'lodash-es'
|
||||
|
||||
interface Props {
|
||||
sortType?: number
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
sortType: 1
|
||||
})
|
||||
|
||||
const buyerId = useUserInfoStore().state.userInfo?.userId
|
||||
|
||||
interface FilterOption {
|
||||
@@ -131,6 +139,7 @@
|
||||
)
|
||||
|
||||
const dataList = ref([])
|
||||
const rawDataList = ref([]) // Store the original API data
|
||||
const dataListRef = ref<HTMLDivElement | null>(null)
|
||||
const assetsScrollRef = ref<HTMLDivElement | null>(null)
|
||||
const gridColumnCount = shallowRef(1)
|
||||
@@ -174,15 +183,18 @@
|
||||
|
||||
const content = res.content ?? []
|
||||
if (pageParams.page === 1) {
|
||||
dataList.value = content
|
||||
rawDataList.value = content
|
||||
} else {
|
||||
dataList.value = [...dataList.value, ...content]
|
||||
rawDataList.value = [...rawDataList.value, ...content]
|
||||
}
|
||||
|
||||
hasMoreAssets.value = content.length >= pageParams.size
|
||||
if (hasMoreAssets.value) {
|
||||
pageParams.page += 1
|
||||
}
|
||||
|
||||
// Apply sorting after fetching data
|
||||
applySorting()
|
||||
} finally {
|
||||
if (requestId === assetsRequestId.value) {
|
||||
isLoadingAssets.value = false
|
||||
@@ -190,6 +202,29 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Function to apply sorting based on sortType
|
||||
const applySorting = () => {
|
||||
if (props.sortType === 1) {
|
||||
// Date Added - use original API order
|
||||
dataList.value = [...rawDataList.value]
|
||||
} else if (props.sortType === 2) {
|
||||
// Selected First - sort by checked status
|
||||
dataList.value = [...rawDataList.value].sort((a, b) => {
|
||||
if (a.checked && !b.checked) return -1
|
||||
if (!a.checked && b.checked) return 1
|
||||
return 0
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Watch for sortType changes
|
||||
watch(
|
||||
() => props.sortType,
|
||||
() => {
|
||||
applySorting()
|
||||
}
|
||||
)
|
||||
|
||||
watch(
|
||||
() => filters,
|
||||
debounce(() => {
|
||||
@@ -269,12 +304,20 @@
|
||||
|
||||
const handleSelectItem = (item) => {
|
||||
item.checked = !item.checked
|
||||
// Re-apply sorting when selection changes and sortType is "Selected First"
|
||||
if (props.sortType === 2) {
|
||||
applySorting()
|
||||
}
|
||||
}
|
||||
|
||||
const handleSelectAll = (flag) => {
|
||||
dataList.value.forEach((item) => {
|
||||
item.checked = flag
|
||||
})
|
||||
// Re-apply sorting when selection changes and sortType is "Selected First"
|
||||
if (props.sortType === 2) {
|
||||
applySorting()
|
||||
}
|
||||
}
|
||||
|
||||
const handleDownloadSelected = () => {
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<component :is="activePanel" class="wardrobe-shell__panel" />
|
||||
<component :is="activePanel" class="wardrobe-shell__panel" :sort-type="activeSort" />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user