| | |
| | | :label="bar.label" |
| | | :options="selectOptions[bar.name]" |
| | | :value="filterRes[bar.name]" |
| | | :onChange="evt=>handleChange(bar.name, evt)" |
| | | :onChange="evt=>handleBarChange(bar.name, evt)" |
| | | /> |
| | | </view> |
| | | <view |
| | | class="c-filter-more" |
| | | :class="itemsChanged?'on':''" |
| | | v-if="items && items.length > 0" |
| | | @tap="evt => drawerShow=true" |
| | | >更多筛选 »</view> |
| | | @tap="evt => handleOpen()" |
| | | > |
| | | <text>更多筛选 </text> |
| | | <text class="arrow">»</text> |
| | | </view> |
| | | <AtDrawer |
| | | class="c-filter-drawer" |
| | | mask |
| | | right |
| | | :show="drawerShow" |
| | | :onClose="evt => drawerShow=false" |
| | | :onClose="evt => handleFinish()" |
| | | > |
| | | <scroll-view |
| | | class="c-filter-drawer-list" |
| | |
| | | :label="item.label" |
| | | :options="selectOptions[item.name]" |
| | | :value="filterRes[item.name]" |
| | | :onChange="evt=>handleChange(item.name, evt)" |
| | | :onChange="evt=>handleItemChange(item.name, evt)" |
| | | /> |
| | | <CFilterDateRange |
| | | v-if="item.type==='dateRange'" |
| | | type="item" |
| | | :label="item.label" |
| | | :value="filterRes[item.name]" |
| | | :onChange="evt=>handleChange(item.name, evt)" |
| | | :onChange="evt=>handleItemChange(item.name, evt)" |
| | | /> |
| | | </view> |
| | | </scroll-view> |
| | | <view class="c-filter-drawer-btn"> |
| | | 重置 完成 |
| | | <AtButton |
| | | type="primary" |
| | | :circle="false" |
| | | :onClick="evt => handleClean()" |
| | | >重置</AtButton> |
| | | <AtButton |
| | | type="primary" |
| | | :circle="false" |
| | | :onClick="evt => handleFinish()" |
| | | >完成</AtButton> |
| | | </view> |
| | | </AtDrawer> |
| | | </view> |
| | |
| | | |
| | | <script> |
| | | import Taro from '@tarojs/taro'; |
| | | import { AtDrawer } from 'taro-ui-vue'; |
| | | import { AtDrawer, AtButton } from 'taro-ui-vue'; |
| | | import CFilterSelect from './CFilterSelect'; |
| | | import CFilterDateRange from './CFilterDateRange'; |
| | | import './cFilter.scss'; |
| | |
| | | name: 'CFilter', |
| | | components: { |
| | | AtDrawer, |
| | | AtButton, |
| | | CFilterSelect, |
| | | CFilterDateRange, |
| | | }, |
| | |
| | | return { |
| | | filterRes: {}, |
| | | drawerShow: false, |
| | | itemsChanged: false, |
| | | }; |
| | | }, |
| | | methods: { |
| | | handleChange(name, value) { |
| | | handleOpen() { |
| | | this.drawerShow = true; |
| | | }, |
| | | handleBarChange(name, value) { |
| | | this.$set(this.filterRes, name, value); |
| | | this.onChange(this.filterRes); |
| | | }, |
| | | handleItemChange(name, value) { |
| | | this.handleBarChange(name, value); |
| | | if (value || typeof value !== 'undefined') { |
| | | this.itemsChanged = true; |
| | | } else { |
| | | let valuehas = false; |
| | | for (let item of items) { |
| | | if ( |
| | | this.filterRes[item.name] || |
| | | typeof this.filterRes[item.name] !== 'undefined' |
| | | ) { |
| | | valuehas = true; |
| | | break; |
| | | } |
| | | } |
| | | this.itemsChanged = valuehas; |
| | | } |
| | | }, |
| | | handleClean() { |
| | | Object.keys(this.filterRes).forEach(key => { |
| | | this.filterRes[key] = [][0]; |
| | | }); |
| | | this.itemsChanged = false; |
| | | this.onChange(this.filterRes); |
| | | }, |
| | | handleFinish() { |
| | | this.drawerShow = false; |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |