31 lines
973 B
TypeScript
31 lines
973 B
TypeScript
import { ref } from 'vue';
|
||
|
||
/**
|
||
* 工作台 widget 统一刷新:卡片右上角刷新按钮触发,转 loading + 执行加载动作,并发期内忽略重复点击。
|
||
*
|
||
* - 已接真实接口的 widget:传入 loader(内部 await 拉取并回填数据)。
|
||
* - 尚未接接口的 mock widget:不传 loader,转一拍 loading 给出可感知反馈;接口接通后补 loader 即自动生效。
|
||
*/
|
||
export function useWorkbenchRefresh(loader?: () => Promise<void> | void) {
|
||
const loading = ref(false);
|
||
|
||
async function refresh() {
|
||
if (loading.value) return;
|
||
loading.value = true;
|
||
try {
|
||
if (loader) {
|
||
await loader();
|
||
} else {
|
||
// 占位:mock widget 无真实数据源,转一拍 loading;接口接通后传入 loader 替代
|
||
await new Promise<void>(resolve => {
|
||
setTimeout(resolve, 400);
|
||
});
|
||
}
|
||
} finally {
|
||
loading.value = false;
|
||
}
|
||
}
|
||
|
||
return { loading, refresh };
|
||
}
|