优化: 清理无意义注释(走查编号前缀/过时历史标注/死代码注释)
This commit is contained in:
@@ -9,11 +9,11 @@ export function createIdeasStore() {
|
||||
/**
|
||||
* 加载灵感列表。
|
||||
*
|
||||
* F-260621-02:status/keyword/order_by 下沉后端 WHERE,取代前端 computed filter。
|
||||
* status/keyword/order_by 下沉后端 WHERE,取代前端 computed filter。
|
||||
* - 传 `query` → 多条件查询(状态/关键词/排序/分页)。
|
||||
* - 不传 → 全量(created_at DESC,等价旧行为)。
|
||||
*
|
||||
* WK-7:成功时清 state.error(load 后不残留旧错误),失败由 runWithCatch 置 error。
|
||||
* 成功时清 state.error(load 后不残留旧错误),失败由 runWithCatch 置 error。
|
||||
*/
|
||||
async function loadIdeas(query?: IdeaQuery) {
|
||||
state.error = null
|
||||
@@ -40,7 +40,7 @@ export function createIdeasStore() {
|
||||
}
|
||||
|
||||
async function deleteIdea(id: string): Promise<boolean> {
|
||||
// WK-7:返成功布尔(失败时 runWithCatch 已置 state.error),调用方据此保留选中态
|
||||
// 返成功布尔(失败时 runWithCatch 已置 state.error),调用方据此保留选中态
|
||||
const ok = await runWithCatch(state, t('ideas.err.deleteFailed'), async () => {
|
||||
await ideaApi.delete(id)
|
||||
state.ideas = state.ideas.filter(i => i.id !== id)
|
||||
@@ -57,7 +57,7 @@ export function createIdeasStore() {
|
||||
}
|
||||
|
||||
async function promoteIdea(id: string) {
|
||||
// WK-4:不再内部全量 loadIdeas(会把 store.ideas 冲成全集、冲掉当前筛选视图)。
|
||||
// 不再内部全量 loadIdeas(会把 store.ideas 冲成全集、冲掉当前筛选视图)。
|
||||
// 由视图(Ideas.vue promoteToProject)操作后按当前 buildIdeaQuery() 主动重载。
|
||||
return await ideaApi.promote(id)
|
||||
}
|
||||
@@ -65,7 +65,7 @@ export function createIdeasStore() {
|
||||
async function relateIdeas(subjectId: string, targetIds: string[]) {
|
||||
await runWithCatch(state, t('ideas.err.relateFailed'), async () => {
|
||||
await ideaApi.relateIdeas(subjectId, targetIds)
|
||||
// WK-4:后端原子更新受影响灵感,原全量 loadIdeas 会冲掉当前筛选视图;
|
||||
// 后端原子更新受影响灵感,原全量 loadIdeas 会冲掉当前筛选视图;
|
||||
// 改由视图(Ideas.vue onUpdateRelated)按当前 query 重载。
|
||||
})
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import { state, clearError } from './state'
|
||||
export function createProjectsStore() {
|
||||
/**
|
||||
* 加载未删除项目。
|
||||
* F-260621-02:可选 query 透传(关键词/排序/分页)。不传 = 当前全量行为(向后兼容)。
|
||||
* 可选 query 透传(关键词/排序/分页)。不传 = 当前全量行为(向后兼容)。
|
||||
*/
|
||||
async function loadProjects(query?: ProjectQuery) {
|
||||
state.loading = true
|
||||
|
||||
@@ -6,14 +6,14 @@ import { state } from './state'
|
||||
|
||||
/** 任务 CRUD 子 store(共享全局 state) */
|
||||
export function createTasksStore() {
|
||||
// WK-10:并发 loadTasks 竞态守卫(快速切筛选/搜索防旧响应晚到覆盖新结果,
|
||||
// 并发 loadTasks 竞态守卫(快速切筛选/搜索防旧响应晚到覆盖新结果,
|
||||
// 对齐 knowledge store 的 _itemsSeq 模式)。旧请求的失败也不污染当前视图。
|
||||
let _tasksSeq = 0
|
||||
|
||||
/**
|
||||
* 加载任务列表。
|
||||
*
|
||||
* **双签名向后兼容**(F-260621-02):
|
||||
* **双签名向后兼容**
|
||||
* - `loadTasks(projectId?)`:旧签名,仅项目过滤(等价 `loadTasks({ project_id: projectId })`)。
|
||||
* - `loadTasks(query?)`:新签名,多条件(status/keyword/...)走后端 WHERE。
|
||||
*
|
||||
@@ -58,7 +58,7 @@ export function createTasksStore() {
|
||||
}
|
||||
|
||||
async function deleteTask(id: string): Promise<boolean> {
|
||||
// WK-13:返成功布尔(失败时 runWithCatch 已置 state.error),快捷删除据此 toast 反馈
|
||||
// 返成功布尔(失败时 runWithCatch 已置 state.error),快捷删除据此 toast 反馈
|
||||
const ok = await runWithCatch(state, t('tasks.err.deleteFailed'), async () => {
|
||||
// 后端已级联软删子任务(delete_task 返回 { ok, cascaded });
|
||||
// 本地同步移除父任务 + 其直接子任务(1 级嵌套,防悬挂 parent_id)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { t } from '@/i18n/i18n-helpers'
|
||||
import type { NodeStatus, WorkflowEventPayload } from '@/api/types'
|
||||
import { state, _eventUnlisten, setEventUnlisten } from './state'
|
||||
|
||||
// B-41: 工作流进度共享推导。liveEvents 已全局收集所有 workflow-event,
|
||||
// 工作流进度共享推导。liveEvents 已全局收集所有 workflow-event,
|
||||
// 此处按 execution_id 重放派生节点状态/进度,供 TaskDetail/ProjectDetail 同源使用,
|
||||
// 替代各自维护一份 onEvent 累加状态(单事实源,并发工作流互不干扰)。
|
||||
export interface WorkflowProgress {
|
||||
@@ -74,7 +74,7 @@ function deriveWorkflowProgress(
|
||||
return { nodeStatuses, runningNode, doneCount, totalNodes, result }
|
||||
}
|
||||
|
||||
// B-03b-R10(⑦ 互斥): 审批响应/取消 IPC 进行中标记(模块级单例,createWorkflowStore 每会话只跑一次)。
|
||||
// b-R10(⑦ 互斥): 审批响应/取消 IPC 进行中标记(模块级单例,createWorkflowStore 每会话只跑一次)。
|
||||
// 防双击/连点在同一轮 IPC 未返回前发起第二次(后端无幂等键,第二次会重复消费 Request 触发
|
||||
// "node already completed" 类报错)。store 层守卫优于按钮 disabled: 共享单例 state,跨调用方统一。
|
||||
let _approvalInFlight = false
|
||||
@@ -112,18 +112,18 @@ export function createWorkflowStore() {
|
||||
if (_eventUnlisten) return _eventUnlisten
|
||||
const unlisten = await workflowApi.onEvent((payload) => {
|
||||
try {
|
||||
// 固时间戳(FR-C1):formattedEvents computed 重算时用事件发生时刻,非当前时刻
|
||||
// 固时间戳formattedEvents computed 重算时用事件发生时刻,非当前时刻
|
||||
state.liveEvents.push({ ...payload, _ts: Date.now() })
|
||||
// 限长(FR-R3):防 liveEvents 无限增长撑爆内存,保留最近 200 条
|
||||
// 限长防 liveEvents 无限增长撑爆内存,保留最近 200 条
|
||||
if (state.liveEvents.length > 200) {
|
||||
state.liveEvents.splice(0, state.liveEvents.length - 200)
|
||||
}
|
||||
// 处理人工审批请求
|
||||
// WorkflowEvent serde tag=type rename_all=snake_case → type='human_approval_request',字段扁平(无 data 包装)(B-03b-R7)
|
||||
// WorkflowEvent serde tag=type rename_all=snake_case → type='human_approval_request',字段扁平(无 data 包装)(b-R7)
|
||||
if (payload.event?.type === 'human_approval_request') {
|
||||
state.pendingApproval = payload.event as unknown as typeof state.pendingApproval
|
||||
}
|
||||
// B-03b-R10(⑤ 终态不清): 工作流走到终态(completed/failed)或审批节点被取消时,
|
||||
// b-R10(⑤ 终态不清): 工作流走到终态(completed/failed)或审批节点被取消时,
|
||||
// 若 pendingApproval 仍属于本次 execution,说明该审批未经 approve/cancel 正常路径关闭
|
||||
// (上游节点失败/工作流被整体取消/用户「稍后」关闭弹窗但 state 仍残留),清掉陈旧态
|
||||
// 避免下次进 ProjectDetail 时 watch immediate 误判仍有待审批。
|
||||
@@ -150,7 +150,7 @@ export function createWorkflowStore() {
|
||||
}
|
||||
|
||||
/**
|
||||
* B-41: 按 execution_id 派生工作流进度(读全局 liveEvents,响应式)。
|
||||
* 按 execution_id 派生工作流进度(读全局 liveEvents,响应式)。
|
||||
* 供 TaskDetail(自身推进的 execId)/ ProjectDetail(最近一次执行)共用同源状态。
|
||||
*/
|
||||
function workflowProgress(execId: string | null): WorkflowProgress {
|
||||
@@ -165,25 +165,25 @@ export function createWorkflowStore() {
|
||||
* - 多选(select_type='multiple'):decisions 透传全量。
|
||||
*
|
||||
* CR-11⑪:签名保持 approveHumanApproval(decisions: string[], comment?)。
|
||||
* F-260615-01: decisions/select_type 透传,与后端 IPC 签名对齐。
|
||||
* decisions/select_type 透传,与后端 IPC 签名对齐。
|
||||
*/
|
||||
async function approveHumanApproval(
|
||||
decisions: string[],
|
||||
comment?: string,
|
||||
) {
|
||||
if (!state.pendingApproval) return
|
||||
// B-03b-R10(⑦ 互斥): 上一轮 IPC 未返回,忽略重复点击(连点/双击)
|
||||
// b-R10(⑦ 互斥): 上一轮 IPC 未返回,忽略重复点击(连点/双击)
|
||||
if (_approvalInFlight) return
|
||||
_approvalInFlight = true
|
||||
const selectType = state.pendingApproval.select_type ?? 'single'
|
||||
// CR-260615-18:删死逻辑三元(原 selectType 多/单分支返回值相同)
|
||||
// 删死逻辑三元(原 selectType 多/单分支返回值相同)
|
||||
// 单选取首项(后端 decision 单值);多选 decision 取首项占位(后端按 decisions 走)
|
||||
const decision = decisions[0] ?? ''
|
||||
|
||||
try {
|
||||
// R-PD-5: 透传 options 闭环后端校验(options 非空时 decision 必须 ∈ options,否则 IPC 报错)。
|
||||
// 透传 options 闭环后端校验(options 非空时 decision 必须 ∈ options,否则 IPC 报错)。
|
||||
// options 来自已收到的 HumanApprovalRequest 事件 payload(IPC 无法访问节点 config)。
|
||||
// B-260615-34:snake_case 由 api 层对齐后端 workflow.rs:211
|
||||
// snake_case 由 api 层对齐后端 workflow.rs:211
|
||||
await workflowApi.approveHumanApproval({
|
||||
execution_id: state.pendingApproval.execution_id,
|
||||
node_id: state.pendingApproval.node_id,
|
||||
@@ -200,7 +200,7 @@ export function createWorkflowStore() {
|
||||
console.error('审批失败:', error)
|
||||
state.error = error?.toString() ?? t('projects.err.approveFailed')
|
||||
} finally {
|
||||
// B-03b-R10(⑦ 互斥): 无论成功/失败,IPC 已返回,释放重入锁
|
||||
// b-R10(⑦ 互斥): 无论成功/失败,IPC 已返回,释放重入锁
|
||||
_approvalInFlight = false
|
||||
}
|
||||
}
|
||||
@@ -208,7 +208,7 @@ export function createWorkflowStore() {
|
||||
/** 取消当前待审批节点(调 cancel_workflow_node IPC 置节点 Cancelled) */
|
||||
async function cancelHumanApproval() {
|
||||
if (!state.pendingApproval) return
|
||||
// B-03b-R10(⑦ 互斥): 上一轮 IPC 未返回,忽略重复点击
|
||||
// b-R10(⑦ 互斥): 上一轮 IPC 未返回,忽略重复点击
|
||||
if (_approvalInFlight) return
|
||||
_approvalInFlight = true
|
||||
|
||||
@@ -223,7 +223,7 @@ export function createWorkflowStore() {
|
||||
console.error('取消审批失败:', error)
|
||||
state.error = error?.toString() ?? t('projects.err.cancelFailed')
|
||||
} finally {
|
||||
// B-03b-R10(⑦ 互斥): 无论成功/失败,IPC 已返回,释放重入锁
|
||||
// b-R10(⑦ 互斥): 无论成功/失败,IPC 已返回,释放重入锁
|
||||
_approvalInFlight = false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user