WebApp【公共组件库】@前端(For Git Submodule)
Tevin
2021-03-31 e72677f19b20b3b5e51de881078861e972e717e0
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
85
86
87
88
89
90
91
92
93
94
/**
 * CFilter - 页面筛选
 * @author Tevin
 */
 
<template>
    <view class="c-filter">
        <view
            class="c-filter-bar"
            v-if="bar"
        >
            <CFilterSelect
                v-if="!bar.type || bar.type==='select'"
                type="bar"
                :label="bar.label"
                :options="bar.options"
                :onChange="evt=>handleChange(bar.name, evt)"
            />
        </view>
        <view
            class="c-filter-more"
            v-if="items && items.length > 0"
            @tap="evt => drawerShow=true"
        >更多筛选 »</view>
        <AtDrawer
            class="c-filter-drawer"
            mask
            right
            :show="drawerShow"
            :onClose="evt => drawerShow=false"
        >
            <scroll-view
                class="c-filter-drawer-list"
                :scrollY="true"
            >
                <view
                    class="box"
                    v-for="(item,index) of items"
                    :key="index"
                >
                    <CFilterSelect
                        v-if="!item.type || item.type==='select'"
                        type="item"
                        :label="item.label"
                        :options="item.options"
                        :onChange="evt=>handleChange(item.name, evt)"
                    />
                </view>
            </scroll-view>
            <view class="c-filter-drawer-btn">
                重置 完成
            </view>
        </AtDrawer>
    </view>
</template>
 
<script>
import Taro from '@tarojs/taro';
import { AtDrawer } from 'taro-ui-vue';
import CFilterSelect from './CFilterSelect';
import './cFilter.scss';
 
export default {
    name: 'CFilter',
    components: {
        AtDrawer,
        CFilterSelect,
    },
    props: {
        // 筛选横条
        bar: Object,
        // 展开层筛选项目列表
        items: Array,
        // 筛选变化时的回调
        onChange: Function,
    },
    data() {
        return {
            filters: {},
            drawerShow: false,
        };
    },
    methods: {
        handleChange(name, value) {
            if (typeof value === 'undefined') {
                delete this.filters[name];
            } else {
                this.filters[name] = value;
            }
            this.onChange(this.filters);
        },
    },
};
</script>