feat: 我的衣柜筛选

This commit is contained in:
2026-05-26 15:24:10 +08:00
parent dc6658e1dd
commit ec4c3bc81f
3 changed files with 147 additions and 97 deletions

View File

@@ -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 = () => {

View File

@@ -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>