From 73d4022530530be074c48a978ff6d489134bc8e4 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Fri, 02 Apr 2021 11:00:01 +0800 Subject: [PATCH] 完善筛选组件与无限滚动组件 --- plugins/infiniteScroll/cInfiniteScroll.scss | 2 plugins/filter/CFilterSelect.vue | 11 ++++- plugins/filter/CFilter.vue | 33 +++++++++++----- plugins/infiniteScroll/CInfiniteScroll.vue | 17 ++++++-- 4 files changed, 45 insertions(+), 18 deletions(-) diff --git a/plugins/filter/CFilter.vue b/plugins/filter/CFilter.vue index 51b0e7c..b02de13 100644 --- a/plugins/filter/CFilter.vue +++ b/plugins/filter/CFilter.vue @@ -20,7 +20,7 @@ </view> <view class="c-filter-more" - :class="itemsChanged?'on':''" + :class="itemsFilled?'on':''" v-if="items && items.length > 0" @tap="evt => handleOpen()" > @@ -105,6 +105,9 @@ return { filterRes: {}, drawerShow: false, + // 面板项有已选 + itemsFilled: false, + // 本次打开是否有改变 itemsChanged: false, }; }, @@ -117,32 +120,40 @@ this.onChange(this.filterRes); }, handleItemChange(name, value) { - this.handleBarChange(name, value); - if (value || typeof value !== 'undefined') { - this.itemsChanged = true; - } else { + console.log(name, value); + this.$set(this.filterRes, name, value); + this.itemsChanged = true; + // 如果变化值不为空 + if (typeof value !== 'undefined') { + this.itemsFilled = true; + } + // 为空是检查所有面板值是否为空 + else { let valuehas = false; - for (let item of items) { - if ( - this.filterRes[item.name] || - typeof this.filterRes[item.name] !== 'undefined' - ) { + for (let item of this.items) { + if (typeof this.filterRes[item.name] !== 'undefined') { valuehas = true; break; } } - this.itemsChanged = valuehas; + this.itemsFilled = valuehas; } }, handleClean() { Object.keys(this.filterRes).forEach(key => { this.filterRes[key] = [][0]; }); + this.itemsFilled = false; this.itemsChanged = false; this.onChange(this.filterRes); }, handleFinish() { this.drawerShow = false; + // 有项目改变时,发送变化 + if (this.itemsChanged) { + this.itemsChanged = false; + this.onChange(this.filterRes); + } }, }, }; diff --git a/plugins/filter/CFilterSelect.vue b/plugins/filter/CFilterSelect.vue index fbbe7ff..2a80ff5 100644 --- a/plugins/filter/CFilterSelect.vue +++ b/plugins/filter/CFilterSelect.vue @@ -16,6 +16,7 @@ mode="selector" range-key="name" :range="options2" + :value="current" @change="evt=>handleChange(evt.detail.value)" > <view class="content"> @@ -42,7 +43,10 @@ props: { type: String, label: String, - options: Array, + options: { + type: Array, + default: [], + }, value: null, onChange: Function, }, @@ -59,9 +63,12 @@ return i; } } - return -1; + return 0; }, selected() { + if (typeof this.value === 'undefined') { + return false; + } for (let item of this.options) { if (this.value === item.value) { return true; diff --git a/plugins/infiniteScroll/CInfiniteScroll.vue b/plugins/infiniteScroll/CInfiniteScroll.vue index 19504bd..9792580 100644 --- a/plugins/infiniteScroll/CInfiniteScroll.vue +++ b/plugins/infiniteScroll/CInfiniteScroll.vue @@ -35,12 +35,16 @@ </view> </view> </view> - <slot /> + <view class="c-infinite-content"> + <slot /> + </view> <view class="c-infinite-bottom"> <view class="c-infinite-loading" - v-if="loading" - >加载中,请稍后...</view> + v-if="!ending" + > + <text v-show="loading">加载中,请稍后...</text> + </view> <view v-if="ending"> <text class="c-infinite-ended" @@ -73,7 +77,7 @@ // 发起加载页面数据回调 // 参数 { // current: 当前页页码, - // next: 需要到达的页面页码, + // next: 需要加载的页面页码, // success: 当加载成功后页面调用, 回传参数 { pageTotal: 当前翻页总页数 } // fail: 加载失败后页面调用 // } @@ -288,6 +292,11 @@ } } }, + refresh() { + this.ending = false; + this.current = 0; + this.hanldeLoadMore(); + }, }, mounted() { // 开启自动初始化 diff --git a/plugins/infiniteScroll/cInfiniteScroll.scss b/plugins/infiniteScroll/cInfiniteScroll.scss index 797defb..41e7f5d 100644 --- a/plugins/infiniteScroll/cInfiniteScroll.scss +++ b/plugins/infiniteScroll/cInfiniteScroll.scss @@ -31,7 +31,6 @@ .text { vertical-align: middle; } - background-color: #fcfcfc; } .tips { .text:nth-child(3) { @@ -60,6 +59,7 @@ } } .c-infinite-bottom { + padding-bottom: 20px; text-align: center; .c-infinite-loading { height: 94px; -- Gitblit v1.9.1