各角色工作台支持批量保存常用入口和业务员看板;AI 简报改成单行横幅避免锁死滑动;仓库/提现/对账等列表统一下拉刷新,并补代付码弹窗。 Co-authored-by: Cursor <cursoragent@cursor.com>
63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
/**
|
||
* 列表/看板下拉刷新:自定义导航用 scroll-view refresher,整页滚动用 onPullDownRefresh。
|
||
* 页面需实现 reload();请求结束务必调 finishRefresh(),否则转圈不收起。
|
||
* 最短转圈 400ms:接口太快时微信 refresher 动画来不及展开,看起来像「下拉没反应」。
|
||
*/
|
||
const MIN_REFRESH_MS = 400
|
||
|
||
export default {
|
||
data() {
|
||
return {
|
||
isRefreshing: false,
|
||
}
|
||
},
|
||
methods: {
|
||
/**
|
||
* 统一走 reload();若返回 Promise 则在 finally 收起转圈
|
||
*/
|
||
runPullRefresh() {
|
||
this.isRefreshing = true
|
||
const started = Date.now()
|
||
const done = () => {
|
||
const wait = Math.max(0, MIN_REFRESH_MS - (Date.now() - started))
|
||
setTimeout(() => this.finishRefresh(), wait)
|
||
}
|
||
if (typeof this.reload !== 'function') {
|
||
done()
|
||
return
|
||
}
|
||
try {
|
||
const ret = this.reload()
|
||
if (ret && typeof ret.then === 'function') {
|
||
ret.finally(done)
|
||
} else {
|
||
this.$nextTick(done)
|
||
}
|
||
} catch (e) {
|
||
done()
|
||
}
|
||
},
|
||
/**
|
||
* scroll-view 下拉:先亮转圈再重拉当前列表
|
||
*/
|
||
onRefresherRefresh() {
|
||
this.runPullRefresh()
|
||
},
|
||
/**
|
||
* 整页原生下拉:重拉后必须 stop,否则系统转圈卡住
|
||
*/
|
||
onPullDownRefresh() {
|
||
this.runPullRefresh()
|
||
},
|
||
/**
|
||
* 请求 finally 里关掉两种转圈
|
||
*/
|
||
finishRefresh() {
|
||
this.isRefreshing = false
|
||
try {
|
||
uni.stopPullDownRefresh()
|
||
} catch (e) { /* 未开启原生下拉时忽略 */ }
|
||
},
|
||
},
|
||
}
|