WebApp【公共组件库】@前端(For Git Submodule)
Tevin
2021-04-01 9b862fc16ff20fdb92b997a10ed2e7f223841fc7
更改筛选组件数据传递模式
2 files modified
44 ■■■■■ changed files
plugins/filter/CFilter.vue 12 ●●●●● patch | view | raw | blame | history
plugins/filter/CFilterSelect.vue 32 ●●●●● patch | view | raw | blame | history
plugins/filter/CFilter.vue
@@ -14,6 +14,7 @@
                type="bar"
                :label="bar.label"
                :options="selectOptions[bar.name]"
                :value="filterRes[bar.name]"
                :onChange="evt=>handleChange(bar.name, evt)"
            />
        </view>
@@ -43,6 +44,7 @@
                        type="item"
                        :label="item.label"
                        :options="selectOptions[item.name]"
                        :value="filterRes[item.name]"
                        :onChange="evt=>handleChange(item.name, evt)"
                    />
                </view>
@@ -78,18 +80,14 @@
    },
    data() {
        return {
            filters: {},
            filterRes: {},
            drawerShow: false,
        };
    },
    methods: {
        handleChange(name, value) {
            if (typeof value === 'undefined') {
                delete this.filters[name];
            } else {
                this.filters[name] = value;
            }
            this.onChange(this.filters);
            this.$set(this.filterRes, name, value);
            this.onChange(this.filterRes);
        },
    },
};
plugins/filter/CFilterSelect.vue
@@ -26,7 +26,7 @@
                    {{label}}:
                </view>
                <view :class="selected ? 'value':'empty'">
                    {{selected ? options2[selectIndex].name : ('请选择' + label)}}
                    {{selected ? options2[current].name : ('请选择' + label)}}
                </view>
                <view class='at-icon at-icon-chevron-down' />
            </view>
@@ -43,27 +43,39 @@
        type: String,
        label: String,
        options: Array,
        value: null,
        onChange: Function,
    },
    data() {
        return {
            selectIndex: 0,
            selected: false,
        };
        return {};
    },
    computed: {
        options2() {
            return [{ name: '- 取消选择 -' }, ...this.options];
        },
        current() {
            for (let i = 0, item; (item = this.options2[i]); i++) {
                if (this.value === item.value) {
                    return i;
                }
            }
            return -1;
        },
        selected() {
            for (let item of this.options) {
                if (this.value === item.value) {
                    return true;
                }
            }
            return false;
        },
    },
    methods: {
        handleChange(index) {
            this.selectIndex = Number(index);
            if (this.selectIndex > 0) {
                this.selected = true;
                this.onChange(this.options2[this.selectIndex].value);
            const selectIndex = Number(index);
            if (selectIndex > 0) {
                this.onChange(this.options2[selectIndex].value);
            } else {
                this.selected = false;
                this.onChange();
            }
        },