| | |
| | | */ |
| | | |
| | | <template> |
| | | <view class="c-filter"> |
| | | <view |
| | | class="c-filter" |
| | | ref="filter" |
| | | > |
| | | <view |
| | | class="c-filter-bar" |
| | | v-if="bar" |
| | |
| | | v-if="bar.type==='select'" |
| | | type="bar" |
| | | :label="bar.label" |
| | | :options="selectOptions[bar.name]" |
| | | :options="selectOptions[bar.name] || []" |
| | | :cancelable="bar.cancelable" |
| | | :value="filterRes[bar.name]" |
| | | :onChange="evt=>handleBarChange(bar.name, evt)" |
| | | /> |
| | | <CFilterDateRange |
| | | v-if="bar.type==='dateRange'" |
| | | type="bar" |
| | | :label="bar.label" |
| | | :value="filterRes[bar.name]" |
| | | :onChange="evt=>handleBarChange(bar.name, evt)" |
| | | /> |
| | |
| | | <text>更多筛选 </text> |
| | | <text class="arrow">»</text> |
| | | </view> |
| | | <AtDrawer |
| | | <CDrawer |
| | | class="c-filter-drawer" |
| | | mask |
| | | right |
| | | :show="drawerShow" |
| | | :onClose="evt => handleFinish()" |
| | | > |
| | |
| | | > |
| | | <view |
| | | class="box" |
| | | v-for="(item,index) of items" |
| | | v-for="(item,index) in items" |
| | | :key="index" |
| | | > |
| | | <CFilterSelect |
| | | v-if="item.type==='select'" |
| | | type="item" |
| | | :label="item.label" |
| | | :options="selectOptions[item.name]" |
| | | :options="selectOptions[item.name] || []" |
| | | :value="filterRes[item.name]" |
| | | :onChange="evt=>handleItemChange(item.name, evt)" |
| | | /> |
| | | <CFilterDateRange |
| | | v-if="item.type==='dateRange'" |
| | | type="item" |
| | | :label="item.label" |
| | | :value="filterRes[item.name]" |
| | | :onChange="evt=>handleItemChange(item.name, evt)" |
| | | /> |
| | | <CFilterSwitchRadio |
| | | v-if="item.type==='switchRadio'" |
| | | type="item" |
| | | :label="item.label" |
| | | :value="filterRes[item.name]" |
| | | :onChange="evt=>handleItemChange(item.name, evt)" |
| | | /> |
| | | <CFilterInput |
| | | v-if="item.type==='input'" |
| | | type="item" |
| | | :label="item.label" |
| | | :value="filterRes[item.name]" |
| | |
| | | :onClick="evt => handleFinish()" |
| | | >完成</AtButton> |
| | | </view> |
| | | </AtDrawer> |
| | | </CDrawer> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import Taro from '@tarojs/taro'; |
| | | import { $ } from '@tarojs/extend'; |
| | | import { AtDrawer, AtButton } from 'taro-ui-vue'; |
| | | import { CDrawer } from '@components/layout/drawer'; |
| | | import CFilterSelect from './CFilterSelect'; |
| | | import CFilterDateRange from './CFilterDateRange'; |
| | | import CFilterSwitchRadio from './CFilterSwitchRadio'; |
| | | import CFilterInput from './CFilterInput'; |
| | | import './cFilter.scss'; |
| | | |
| | | export default { |
| | |
| | | AtButton, |
| | | CFilterSelect, |
| | | CFilterDateRange, |
| | | CFilterSwitchRadio, |
| | | CFilterInput, |
| | | CDrawer, |
| | | }, |
| | | props: { |
| | | filterData: { type: Object, default: () => {} }, |
| | | // 筛选横条项目 |
| | | bar: Object, |
| | | bar: { type: Object, default: () => {} }, |
| | | // 筛选展开层项目列表 |
| | | items: Array, |
| | | items: { type: Array, default: () => [] }, |
| | | // 各个项目的选项列表 |
| | | selectOptions: Object, |
| | | selectOptions: { type: Object, default: () => {} }, |
| | | // 筛选变化时的回调 |
| | | onChange: Function, |
| | | }, |
| | | data() { |
| | | return { |
| | | filterRes: {}, |
| | | filterRes: this.filterData || {}, |
| | | // 抽屉显示隐藏 |
| | | drawerShow: false, |
| | | // 面板项有已选 |
| | | itemsFilled: false, |
| | |
| | | this.onChange(this.filterRes); |
| | | }, |
| | | handleItemChange(name, value) { |
| | | console.log(name, value); |
| | | this.$set(this.filterRes, name, value); |
| | | this.itemsChanged = true; |
| | | // 如果变化值不为空 |
| | |
| | | }, |
| | | handleClean() { |
| | | Object.keys(this.filterRes).forEach(key => { |
| | | // 如果不能取消,跳过 |
| | | if (key === this.bar.name && this.bar.cancelable === false) { |
| | | return; |
| | | } |
| | | for (let item of this.items) { |
| | | if (key === item.name && item.cancelable === false) { |
| | | return; |
| | | } |
| | | } |
| | | // 清除值 |
| | | this.filterRes[key] = [][0]; |
| | | }); |
| | | this.itemsFilled = false; |
| | |
| | | } |
| | | }, |
| | | }, |
| | | mounted() { |
| | | $(this.$refs.filter).parent().css({ transform: 'translate(0,0);' }); |
| | | }, |
| | | }; |
| | | </script> |