- 新增 useToast composable: 消除 AiChat/Settings/Projects 4处 toast 重复 统一默认3000ms(Projects原4000ms为操作类提示保留参数覆盖) - 新增 utils/json.ts parseJsonArray: 消除 parseStack/parseTags/ModuleNode 3处JSON字符串数组解析重复 - 新增 utils/html.ts escapeHtml: 消除 useMarkdown/FilePreview 2处重复 - ProjectDetail score-bar 内联三元改用 scoreTier(消除最后一处阈值硬编码) - ConversationSidebar 删除 formatTime 透传包装(直接用 formatRelative) - 清理死代码: parseTs/stringifyError/ErrorSink/_Unused 改私有或删除 wrapNakedDiff 改私有(无外部 import) - ModuleNode shortPath 改名 truncatedPath(与 useToolCard.shortPath 语义不同)
17 lines
592 B
TypeScript
17 lines
592 B
TypeScript
//! 项目相关纯工具函数(无副作用、无依赖,便于跨视图复用)
|
|
//!
|
|
//! parseStack 此前在 Projects.vue 与 ProjectDetail.vue 各有一份重复实现,
|
|
//! 现抽到此处统一维护。
|
|
|
|
import { parseJsonArray } from './json'
|
|
|
|
/**
|
|
* 解析技术栈 JSON 数组字符串(防崩)。
|
|
*
|
|
* 后端将技术栈以 `JSON.stringify(["vue","rust"])` 形式存于 project.stack 字段;
|
|
* 解析失败或非数组时返回空数组,避免渲染崩溃。
|
|
*/
|
|
export function parseStack(stack: string | null | undefined): string[] {
|
|
return parseJsonArray(stack)
|
|
}
|