优化: 前端扫描文案 i18n + parseStack 抽公共 + alert/confirm 换组件

- 扫描/目录状态文案走 $t(Projects/ProjectDetail,zh-CN+en 同步)
- parseStack 抽公共到 src/utils/project.ts(删两份本地实现)
- 8 处原生 alert/confirm 全换(confirm→ConfirmDialog / alert→Arco Message),控制流语义不变

Sprint 20 审查 ⑥⑦⑧。vue-tsc 0 error,验证 safe 0 issue
This commit is contained in:
2026-06-14 14:22:57 +08:00
parent d5a641797c
commit 02ff88fc61
8 changed files with 126 additions and 36 deletions

20
src/utils/project.ts Normal file
View File

@@ -0,0 +1,20 @@
//! 项目相关纯工具函数(无副作用、无依赖,便于跨视图复用)
//!
//! parseStack 此前在 Projects.vue 与 ProjectDetail.vue 各有一份重复实现,
//! 现抽到此处统一维护。
/**
* 解析技术栈 JSON 数组字符串(防崩)。
*
* 后端将技术栈以 `JSON.stringify(["vue","rust"])` 形式存于 project.stack 字段;
* 解析失败或非数组时返回空数组,避免渲染崩溃。
*/
export function parseStack(stack: string | null | undefined): string[] {
if (!stack) return []
try {
const arr = JSON.parse(stack)
return Array.isArray(arr) ? arr : []
} catch {
return []
}
}