diff --git a/frontendNew/MIGRATION_PLAN.md b/frontendNew/MIGRATION_PLAN.md new file mode 100644 index 00000000..cdff3bed --- /dev/null +++ b/frontendNew/MIGRATION_PLAN.md @@ -0,0 +1,60 @@ +# frontend -> frontendNew 迁移计划(执行中) + +## 目标 + +- 以 frontendNew 为主线承接 dcalc 核心能力。 +- 已完成的 equipment 作为基线,不重做主体,仅做一致性优化。 +- 当前优先迁移 Skill、Forge、Result,策略为“核心功能优先,视觉后置”。 +- 迁移期间保持 frontend 与 frontendNew 双端并行可用。 + +## 当前状态 + +- 已完成:`Character/EquipmentDictionary` 主体迁移并接入路由。 +- 进行中:`Character/Skill`、`Character/Forge` 从占位页向可编辑页迁移。 +- 新启动:`Character/Result` 结果面板接入与自动计算链路。 + +## 分阶段计划 + +### Phase 1 - 共享链路打通 + +1. 统一 Character 页角色加载、配置变更监听、结果自动计算触发。 +2. 将结果面板并入 Character 页面,形成“配置 + 结果”并行布局。 +3. 统一配置持久化触发点,保障刷新后状态可恢复。 + +### Phase 2 - Skill MVP + +1. 完成技能列表、搜索、基础 VP/UP 配置回写。 +2. 先确保写入 `configStore.config.skills`,后补复杂交互约束。 +3. 目标:可参与结果计算。 + +### Phase 3 - Forge MVP + +1. 子模块优先级:Equipments > Avatars > Oaths > Emblems/Jades/Sundry。 +2. 每个子模块完成即验证配置回写和计算结果联动。 +3. 目标:关键打造项可编辑并进入计算。 + +### Phase 4 - Result MVP + +1. 展示基础属性、套装/誓约信息、技能伤害列表。 +2. 支持伤害排序和基准设定/清空。 +3. 第二轮补技能次数编辑、Buffer 细分、高级对比。 + +### Phase 5 - 一致性优化与回归 + +1. 统一加载态/空态/错误态文案。 +2. 双端同角色同配置结果比对,输出差异清单。 +3. 阻塞级问题清零后进入主用切换。 + +## 验收标准 + +1. 路由可用:`/dcalc/character/:alter/equipment|skill|forge`。 +2. 数据可用:Skill 与 Forge 配置改动能触发结果刷新。 +3. 结果可用:Result 面板稳定展示基础属性与技能伤害。 +4. 持久化可用:刷新后配置不丢失。 +5. 双端可比对:关键字段(伤害、套装、核心属性)一致。 + +## 本次提交范围(已执行) + +1. 新增本计划文档。 +2. 新增 Result MVP 组件并接入 Character 页面。 +3. 在 Character 页面接入配置变更自动计算与离开页面自动保存。 diff --git a/frontendNew/src/pages/Dcalc/Character/Forge/index.vue b/frontendNew/src/pages/Dcalc/Character/Forge/index.vue index d8908fe5..5304d24a 100644 --- a/frontendNew/src/pages/Dcalc/Character/Forge/index.vue +++ b/frontendNew/src/pages/Dcalc/Character/Forge/index.vue @@ -1,13 +1,55 @@ diff --git a/frontendNew/src/pages/Dcalc/Character/Index.vue b/frontendNew/src/pages/Dcalc/Character/Index.vue index 4c92d007..41bc8f4f 100644 --- a/frontendNew/src/pages/Dcalc/Character/Index.vue +++ b/frontendNew/src/pages/Dcalc/Character/Index.vue @@ -1,5 +1,5 @@ diff --git a/frontendNew/src/pages/Dcalc/Character/Result/Index.vue b/frontendNew/src/pages/Dcalc/Character/Result/Index.vue new file mode 100644 index 00000000..ffac9cf5 --- /dev/null +++ b/frontendNew/src/pages/Dcalc/Character/Result/Index.vue @@ -0,0 +1,208 @@ + + + diff --git a/frontendNew/src/pages/Dcalc/Character/Skill/img/awake_50.png b/frontendNew/src/pages/Dcalc/Character/Skill/img/awake_50.png new file mode 100644 index 00000000..9bb5df99 Binary files /dev/null and b/frontendNew/src/pages/Dcalc/Character/Skill/img/awake_50.png differ diff --git a/frontendNew/src/pages/Dcalc/Character/Skill/img/awake_85.png b/frontendNew/src/pages/Dcalc/Character/Skill/img/awake_85.png new file mode 100644 index 00000000..b54882dc Binary files /dev/null and b/frontendNew/src/pages/Dcalc/Character/Skill/img/awake_85.png differ diff --git a/frontendNew/src/pages/Dcalc/Character/Skill/img/skill.png b/frontendNew/src/pages/Dcalc/Character/Skill/img/skill.png new file mode 100644 index 00000000..a49422b3 Binary files /dev/null and b/frontendNew/src/pages/Dcalc/Character/Skill/img/skill.png differ diff --git a/frontendNew/src/pages/Dcalc/Character/Skill/img/skillActive.png b/frontendNew/src/pages/Dcalc/Character/Skill/img/skillActive.png new file mode 100644 index 00000000..32d80df5 Binary files /dev/null and b/frontendNew/src/pages/Dcalc/Character/Skill/img/skillActive.png differ diff --git a/frontendNew/src/pages/Dcalc/Character/Skill/img/up_1.png b/frontendNew/src/pages/Dcalc/Character/Skill/img/up_1.png new file mode 100644 index 00000000..3ee58261 Binary files /dev/null and b/frontendNew/src/pages/Dcalc/Character/Skill/img/up_1.png differ diff --git a/frontendNew/src/pages/Dcalc/Character/Skill/img/up_2.png b/frontendNew/src/pages/Dcalc/Character/Skill/img/up_2.png new file mode 100644 index 00000000..86c62218 Binary files /dev/null and b/frontendNew/src/pages/Dcalc/Character/Skill/img/up_2.png differ diff --git a/frontendNew/src/pages/Dcalc/Character/Skill/img/vp_1.png b/frontendNew/src/pages/Dcalc/Character/Skill/img/vp_1.png new file mode 100644 index 00000000..afda59f9 Binary files /dev/null and b/frontendNew/src/pages/Dcalc/Character/Skill/img/vp_1.png differ diff --git a/frontendNew/src/pages/Dcalc/Character/Skill/img/vp_2.png b/frontendNew/src/pages/Dcalc/Character/Skill/img/vp_2.png new file mode 100644 index 00000000..a345f1b9 Binary files /dev/null and b/frontendNew/src/pages/Dcalc/Character/Skill/img/vp_2.png differ diff --git a/frontendNew/src/pages/Dcalc/Character/Skill/index.vue b/frontendNew/src/pages/Dcalc/Character/Skill/index.vue index c2e31f59..f2da1dbd 100644 --- a/frontendNew/src/pages/Dcalc/Character/Skill/index.vue +++ b/frontendNew/src/pages/Dcalc/Character/Skill/index.vue @@ -1,54 +1,685 @@ + + diff --git a/frontendNew/src/stores/config.ts b/frontendNew/src/stores/config.ts index d2df4eb9..45ef2f4d 100644 --- a/frontendNew/src/stores/config.ts +++ b/frontendNew/src/stores/config.ts @@ -16,8 +16,6 @@ import type { IResultSkillCount } from "@/api/calc/type"; // | '魔法石' // | '武器', - - export interface IConfigEquip { id: string; reinforce: number; @@ -76,6 +74,13 @@ export interface IConfig { emblems: Record; } +export interface IChangeSourceLog { + id: number; + source: string; + detail: string; + time: string; +} + const defaultEqusConfig = { id: "", reinforce: 0, @@ -127,6 +132,7 @@ export const useConfigStore = defineStore("configStore", () => { }); const skillCountConfig = ref([]); + const changeSourceLogs = ref([]); const loadConfig = () => { const infoStore = useInfoStore(); @@ -263,6 +269,20 @@ export const useConfigStore = defineStore("configStore", () => { } }; + const pushChangeSource = (source: string, detail: string) => { + const next: IChangeSourceLog = { + id: Date.now() + Math.floor(Math.random() * 1000), + source, + detail, + time: new Date().toLocaleTimeString("zh-CN", { hour12: false }), + }; + changeSourceLogs.value = [next, ...changeSourceLogs.value].slice(0, 30); + }; + + const clearChangeSource = () => { + changeSourceLogs.value = []; + }; + const result = useAsyncState( () => { return calc(); @@ -289,5 +309,8 @@ export const useConfigStore = defineStore("configStore", () => { defaultAvatarConfig, defaultOathConfig, defaultEmblemConfig, + changeSourceLogs, + pushChangeSource, + clearChangeSource, }; });