Files
cn-rdms-web/src/views/workbench/composables/use-workbench-worklog-signal.ts
2026-06-22 20:47:20 +08:00

35 lines
1.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { type InjectionKey, type Ref, inject, provide, ref } from 'vue';
interface WorkbenchWorklogSignal {
/** 递增版本号:工时类 widget watch 它触发重拉 */
revision: Ref<number>;
/** 任一 widget 内联填报/修改工时后调用,广播给同一工作台内的工时类 widget */
notify: () => void;
}
const WORKBENCH_WORKLOG_SIGNAL: InjectionKey<WorkbenchWorklogSignal> = Symbol('workbench-worklog-signal');
/**
* 工作台内联填报工时的跨 widget 刷新信号。
*
* todo 面板等 widget 可在工作台路由内弹层填报工时,不触发工作台 keepAlive 的 onActivated
* 「我的工时」widget 因此停在旧数据。用 provide/inject 在工作台根广播一个版本号,
* 填报方 notify、展示方 watch revision 重拉,作用域限定在工作台子树、不进全局 store。
*/
export function provideWorkbenchWorklogSignal(): WorkbenchWorklogSignal {
const revision = ref(0);
const signal: WorkbenchWorklogSignal = {
revision,
notify: () => {
revision.value += 1;
}
};
provide(WORKBENCH_WORKLOG_SIGNAL, signal);
return signal;
}
/** widget 内消费notify 上报变更、revision 供 watch 重拉;脱离工作台根时退化为无操作 */
export function useWorkbenchWorklogSignal(): WorkbenchWorklogSignal {
return inject(WORKBENCH_WORKLOG_SIGNAL, { revision: ref(0), notify: () => {} });
}