Files
cn-rdms-web/src/views/workbench/composables/use-workbench-worklog-signal.ts

35 lines
1.4 KiB
TypeScript
Raw Normal View History

2026-06-22 20:47:20 +08:00
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: () => {} });
}