style(projects): 微调

This commit is contained in:
2026-06-22 20:47:20 +08:00
parent 4a7f54b0ed
commit b1d52b852f
4 changed files with 51 additions and 8 deletions

View File

@@ -0,0 +1,34 @@
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: () => {} });
}