wangzhibo
4 天以前 10595d8632f959d0954d1939243196f4eed02372
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<template>
    <cl-page>
        <view class="page">
            <cl-sticky>
                <!-- 搜索栏 -->
                <cl-topbar :border="false" :show-back="false" :ref="setRefs('topbar')" with-mp>
                    <cl-search
                        v-model="keyWord"
                        placeholder="搜索商品名称"
                        @search="refresh({ page: 1 })"
                    >
                        <template #prepend>
                            <cl-icon name="arrow-left" size="22px" @tap="refs.topbar?.back" />
                        </template>
                    </cl-search>
                </cl-topbar>
 
                <!-- 筛选栏 -->
                <filter-bar @search="refresh" />
            </cl-sticky>
 
            <!-- 商品列表 -->
            <view class="list">
                <cl-waterfall :ref="setRefs('list')" :column="2">
                    <template #default="{ list }">
                        <cl-waterfall-column v-for="(columns, index) in list" :key="index">
                            <goods-item :item="item" v-for="item in columns" :key="item.id" />
                        </cl-waterfall-column>
                    </template>
                </cl-waterfall>
            </view>
        </view>
    </cl-page>
</template>
 
<script lang="ts" setup>
import { ref } from "vue";
import { onReady } from "@dcloudio/uni-app";
import { useCool, usePager } from "/@/cool";
import GoodsItem from "/@/components/goods/item.vue";
import FilterBar from "./components/filter-bar.vue";
 
const { router, service, refs, setRefs } = useCool();
const { onRefresh, onData } = usePager();
 
const keyWord = ref("");
 
// 获取列表
function refresh(params?: any) {
    const { data, next } = onRefresh(params);
 
    onData((list) => {
        if (data.page == 1) {
            refs.list.refresh(list);
        } else {
            refs.list.append(list);
        }
    });
 
    return next(
        service.goods.info.page({
            ...data,
            keyWord: keyWord.value,
        }),
    );
}
 
onReady(() => {
    keyWord.value = router.query.keyWord || "";
    refresh({ order: "sortNum", sort: "desc", ...router.query });
});
 
defineExpose({
    refresh,
});
</script>
 
<style lang="scss" scoped>
.page {
    .list {
        padding: 24rpx 14rpx;
    }
}
</style>