Files
g3fo-recurring-investment/TASK_SUMMARY.md
T
justin a374bf0178 Enhance recurring investment features and UI components:
- Implement restrictions on the start date selection in the creation form to prevent past dates.
- Add order status display in the recent execution records for better visibility.
- Introduce system code mapping for order statuses, frequency types, and end types, ensuring multi-language support.
- Implement pagination for the investment plans list to improve performance and user experience.
- Update internationalization files to include new labels for order status and other UI elements.
- Document changes in `IMPACT_ANALYSIS.md` and `TASK_SUMMARY.md` for clarity on the updates.
2026-10-14 14:19:14 +08:00

15 KiB
Raw Blame History

TASK_SUMMARY

任务基本信息

  • 任务名称:实现定期投资页面(对齐 V5 demo)
  • 相关项目:schedule_invest_plan
  • 改动类型:功能新增

改动说明

  • 首页改为定期投资:我的计划列表、创建表单(资产晶片搜索、开始日期、金额、间隔、结束日期/期数)、注意事项、确认弹窗、终止计划。
  • 行为对齐 demo:必填校验、确认后再写入列表、新建状态为「已建立」、终止后状态为「已终止」。
  • 三语文案(zh-TW / zh-CN / en-US);语言与主题仍仅通过 URL lang/theme 控制。
  • 视觉令牌对齐 demo 青绿主色与涨跌语义色;移动端计划列表使用卡片。

影响与风险

  • 参见 IMPACT_ANALYSIS.md;无破坏性变更,风险低。
  • 计划数据仅存 Pinia 内存,刷新页面恢复为示例一条。

测试与验证

  • npm run build:通过。
  • 浏览器:创建/重设/确认/终止、校验失败提示、深浅色与语言切换。

后续事项

  • 对接真实计划查询/创建/终止 API(经 src/api/http.ts)。
  • 资产搜索已对接 getSimpleStockPage(交易所 → exchangeCodes);创建计划 API 待接。

补充:getSimpleStockPage 资产搜索

  • 交易所下拉选中后请求标的;exchangeCodes: [exchangeCode]。
  • 晶片搜索框防抖调用同一接口并传 searchName。
  • 映射字段含 productKey、productCodeUnique 等,便于后续创建计划入参。

补充:交易所与资产同一行

  • 创建表单在 md+ 将交易所与资产晶片各占 12 列并排;xs 仍上下堆叠。

补充(顶栏与表单控件样式)

  • 顶栏 AppHeader(含标题「投資計劃排期」)已从壳层移除。
  • Element Plus 日期、下拉框 hover/focus 边框与背景对齐项目主色与 --color-control-*(见 src/styles/element-plus-theme.scss)。

补充:Token、代理与服务端多语言

  • URL 参数 token 写入请求头 token(参考 Order-H5);路由跳转保留 query(含 token)。
  • 开发代理:/base/* → getAllList 等;/trade/* → schedule-investment/exchanges 等(目标 192.168.3.233,可改 .env.development)。
  • 有 token 时启动加载 getSystemI18nAllList;组件内用 useServiceI18n().si18n('I18N_ID') 解析服务端文案。
  • getScheduleInvestmentExchanges() 已封装,待业务页面对接。
  • npm run build 通过。

补充:创建表单交易所下拉

  • 在「資產」上方增加必填「交易所」下拉,接口 POST /api/admin/exchange/getSelectItemList;选项文案优先 nameI18nId + useServiceI18n。
  • 未选择交易所时资产晶片选择器禁用;切换交易所清空已选资产。
  • 开发环境新增 Vite 代理 /api。
  • 详见 IMPACT_ANALYSIS.md 本节补充。

补充:URL accountId / clientId

  • 入口 URL 需携带 clientId、accountId(与 token、lang、theme 同级 query)。
  • 示例:?token=xxx&clientId=2016410736418492416&accountId=2016410907965526016&lang=tw&theme=dark(详见 README.md)
  • 值仅存于 Pinia(来自 URL,不写 localStorage);useRouteWithPreferences().linkTo 会保留 query。
  • src/api/http.ts 对 POST 请求体自动合并 clientId、accountId(与 Order-H5 交易接口一致)。

补充:资产晶片单选与样式

  • AssetChipPicker 限制为单资产;高度、边框、占位色与交易所等 el-select/el-input 一致。
  • 未选交易所时禁用态显示 recurring.pleaseSelect,避免 disabled input 占位符发灰不一致。

补充:定期投资页文字加大

  • 区块标题 16px、表格表头与表单标签 13px、结束方式(日期/期数)按钮 15px。
  • 详见 IMPACT_ANALYSIS.md 本节补充。

补充:创建表单对齐接口字段

  • 新增投资类型(AMOUNT/QUANTITY)、订单价格类型、定投周期与执行日、交易时间偏移(0–240 分钟);提交时组装 ScheduleInvestmentCreateBody 并调用 createScheduleInvestmentPlan。
  • exchangeCode、资产 productCode、startDate、结束日期/期数与既有表单项对应;clientId/accountId 由 HTTP 拦截器注入。
  • 详见 IMPACT_ANALYSIS.md 本节补充。

补充:创建表单控件宽度统一

  • 平板及以上(≥768px)表单项控件宽度统一为列宽的 70%;移动端保持 100%。
  • 移除原 340px 上限,使 el-select、el-input、AssetChipPicker、日期与结束方式切换条一致。
  • 详见 IMPACT_ANALYSIS.md「创建表单控件宽度统一」补充。

补充:创建定投 API 路径

  • createScheduleInvestmentPlan 使用 POST /trade/schedule-investment/plan/create。
  • 请求体仍由 buildScheduleInvestmentCreateBody 生成;clientId / accountId 由 HTTP 拦截器合并。

补充:交易所下拉接口

  • 使用 POST /trade/schedule-investment/exchanges,字段 exchangeCode / nameI18nId / tradeDate。
  • 已移除 src/api/exchange.ts(原 getAllExchanges)。

补充:计划列表 plan/page

  • POST /trade/schedule-investment/plan/page,请求仅使用 current: 1、size: 50,其余筛选字段为空。
  • 列表字段映射 productCode、金额/数量、周期、状态 ACTIVE 等;创建成功后 loadPlans 刷新。
  • 终止计划仍为前端演示(待接终止接口)。

补充:限价 limitPrice

  • 订单价格类型为「限价」时展示限价输入,校验大于 0,创建请求携带 limitPrice;市价不传。

补充:创建计划产品名称

  • 选股时保留 engName / localName,创建 body 传 productEngName、productLocalName。

补充:资产选择展示 productCodeUnique

  • 下拉与晶片展示 1.HK(productCodeUnique),名称 trim 全角空格;去重键使用 productKey。

补充:投资类型与金额/数量合一控件

  • 移除独立「投资类型」切换行;左侧小下拉(按金额/按数量)与右侧输入同一输入框样式一行展示。

补充:结束类型合一控件

  • 「特定日期 / GTC / 期数」与结束日期或期数输入合并为 field-combo;无结束日期改为下拉项 endByGtc(endMode: none),不再使用独立勾选框;表单标签为「结束类型」;接口 endType 为 NO_END / END_DATE / COUNT。

补充:计划详情弹窗(2026-10-09)

  • 我的计划表格与移动卡片「操作」增加「详情」;请求 POST /trade/schedule-investment/plan/detail(planNo)。
  • 弹窗展示计划编号、交易所、产品、每次投资、订单价格、周期、偏移、起止、下次执行、进度、状态、创建时间、渠道;下方为最近执行记录表或空态。
  • 三语文案见 recurring.planDetail.*;详见 IMPACT_ANALYSIS.md 本节补充。
  • 详情弹窗隐藏渠道;交易所名称与创建表单下拉同源反显(exchangeSelectOptions)。
  • 产品名称按 lang 在 productLocalName / productEngName 间切换(详情与计划列表一致)。
  • 终止计划:el-dialog 确认 + 选填原因,接口 plan/terminate;成功提示并刷新列表(recurring.terminate* / cancelConfirm*)。

补充:预览下次执行(2026-10-09)

  • 创建表单「重设 / 繼續」之间增加「预览下次执行」;请求 POST /trade/schedule-investment/plan/next-execution(exchangeCode、frequencyType、frequencyDay、ctOffsetMinutes、可选 startDate)。
  • 弹窗展示周期日期、执行日期、执行时间、是否顺延、CT 偏移;文案见 recurring.previewNextExecution*。
  • 校验范围小于「继续」:不要求标的与金额;详见 IMPACT_ANALYSIS.md 本节补充。

补充:计划列表金额/数量展示(2026-10-09)

  • 移动计划卡片:investmentType === 'QUANTITY' 时 meta 标签为「数量」,否则为「金额」;数值逻辑不变。
  • 桌面计划列表表头 recurring.colAmount 改为「金额/数量」(三语与详情执行记录表头一致)。
  • 详见 IMPACT_ANALYSIS.md 本节补充。

补充:计划列表资产列省略与 Tooltip(2026-10-09)

  • 桌面计划表资产列固定约 220px,超出省略;el-tooltip 展示完整代码与名称。
  • 详见 IMPACT_ANALYSIS.md 本节补充。

补充:移动计划卡片操作按钮样式(2026-10-09)

  • 移动卡片「详情 / 终止」复用 detail-link、cancel-link,无边框纯文字;字号 15px、紧凑内边距(与桌面表操作一致)。
  • 详见 IMPACT_ANALYSIS.md 本节补充。

补充:清理脚手架示例(2026-10-09)

  • 删除:SampleChart.vue、HomeView.vue、AboutView.vue、investAssets.ts、默认 assets/*.svg。
  • 路由仅保留 /(定期投资);移除 echarts 与图表相关 CSS/i18n。
  • 金额输入 placeholder 国际化为 recurring.amountPlaceholder。
  • 验证:npm run build。

补充:README 与 URL lang 短码(2026-10-10)

  • 目标:完善 README.md;lang 查询参数文档与写入统一为 zh / tw / en(缺省 tw)。
  • 代码:resolveLocaleFromLangParam / localeToUrlLang;兼容读取 zh-CN、zh-TW、en-US。
  • 验证:npm run build;参见 IMPACT_ANALYSIS.md 本节补充。

补充:Vite 可局域网访问(2026-10-10)

  • vite.config.ts:server / preview 增加 host: true、allowedHosts: true。
  • README.md 开发节补充 Network 访问说明。

补充:CT 时间偏移下拉(2026-10-10)

  • 创建表单在选定交易所与资产后请求 POST /trade/schedule-investment/options/ct-time(productCode 与创建计划一致:productCodeUnique 或 code)。
  • 偏移字段改为 el-select(displayName / offsetMinutes);未选资产时禁用并提示先选交易所与资产。
  • 详见 IMPACT_ANALYSIS.md 本节补充;验证:npm run build。

补充:frequencyDay 回显归一化(2026-10-10)

  • 新增 src/utils/frequencyDay.ts,将接口 1/MONDAY/MON 等 weekly 值与带前导零的 monthly 值规范后用于列表与详情展示。
  • 创建/预览提交:WEEKLY 为 1–7,MONTHLY 为 1–31;DAILY 不传 frequencyDay。界面仍显示星期中文名。
  • 验证:npm run build;参见 IMPACT_ANALYSIS.md 对应补充。

补充:VITE_BASE_URL 子路径(2026-10-10)

  • vite.config.ts 将 VITE_BASE_URL 映射为 Vite base;新增 .env.production。
  • 开发/预览入口:/recurring-investment/。
  • 验证:npm run build。

补充:HTTP 不再全局注入 clientId / accountId(2026-10-10)

  • 移除 src/api/http.ts 对全部 POST 请求体的自动合并;仅 POST /trade/schedule-investment/plan/create 在 buildScheduleInvestmentCreateBody 中携带 URL 的 clientId、accountId。
  • 验证:npm run build;参见 IMPACT_ANALYSIS.md 对应补充。

补充:资产下拉滚动分页(2026-10-10)

  • getSimpleStockPage 每页 50 条;下拉触底 loadMore 追加,搜索仍防抖并重置页码。
  • 验证:npm run build;参见 IMPACT_ANALYSIS.md 对应补充。

补充:下次执行预览去掉执行时间(2026-10-10)

  • 预览弹窗移除 previewExecutionDateTime / executionDateTime 展示行。
  • 参见 IMPACT_ANALYSIS.md 对应补充。

补充:下次执行预览新接口字段与 loading(2026-10-12)

  • next-execution 响应改为 nextExecutionDate、nextExecutionTime;弹窗仅展示「下次执行日」「执行时间」。
  • 请求期间仅按钮 :loading;数据返回后再打开弹窗。
  • 参见 IMPACT_ANALYSIS.md 对应补充。

补充:创建计划使用 productCode(2026-10-12)

  • InvestAsset 区分 productCode(接口)与 productCodeUnique(展示);创建与 CT 选项请求提交 productCode(如 1)。
  • 参见 IMPACT_ANALYSIS.md 对应补充。

补充:计划详情执行记录去掉委托状态列(2026-10-12)

  • 详情弹窗「最近执行」表格移除「委托状态」列及 colOrderStatus 文案。
  • 参见 IMPACT_ANALYSIS.md 对应补充。

补充:计划详情执行记录成交三列(2026-10-13)

  • 移除「实际交易日」列;新增成交数量、成交金额、成交均价(filledQty / filledAmount / avgFilledPrice)。
  • 参见 IMPACT_ANALYSIS.md 对应补充。

补充:最近执行表响应式(2026-10-13)

  • 详情弹窗按断点加宽;移动端执行记录卡片列表,平板/桌面表格横滑 + 首列 sticky + 滑动提示。
  • 参见 IMPACT_ANALYSIS.md 对应补充。

补充:创建表单隐藏价格类型与 CT 偏移(2026-10-13)

  • 创建表单不展示「订单价格类型」「交易时间偏移」,固定市价;在投资金额/数量 hint 下增加市价说明 orderPriceTypeMarketHint。
  • 创建计划与 plan/next-execution 请求体 ctOffsetMinutes 传 null;预览校验文案改为「请先选择交易所与定投周期」。
  • 确认弹窗去掉 CT 偏移行;计划详情仍展示后端返回的偏移。
  • 详见 IMPACT_ANALYSIS.md 本节补充。

补充:开始日期禁选过去日 + 详情执行订单状态列(2026-10-14)

  • 创建表单「开始日期」日期选择器禁用今天之前的日期;提交校验同步拦截。
  • 计划详情「最近执行」表格与移动端卡片末列展示 orderStatus(订单状态)。
  • 参见 IMPACT_ANALYSIS.md 对应补充。

补充:订单状态系统码映射(2026-10-14)

  • 调用 POST /admin/systemCode/getByCodeTypeBatch 预加载 OrderStatus;orderStatus 按 codeValue 匹配 descriptionI18nId,经 useServiceI18n 展示多语言订单状态文案。
  • 涉及 api/systemCode.ts、stores/systemCode.ts、composables/useSystemCode.ts、RecurringInvestmentView.vue。
  • 验证:npm run build;详情「訂單狀態」列显示文案而非裸码值。

补充:定投周期系统码下拉(2026-10-14)

  • ScheduleInvestmentFrequencyType 批量加载后驱动创建表单「定投周期」下拉(按 sort 排序);列表/详情/确认预览统一 frequencyTypeLabel。
  • 接口不可用时回退本地 recurring.frequency.* 文案。
  • 详见 IMPACT_ANALYSIS.md 本节补充。

补充:结束类型系统码下拉(2026-10-14)

  • ScheduleInvestmentEndType 驱动创建表单结束类型下拉;NO_END→none、END_DATE→date、COUNT→count。
  • 列表/详情/确认预览的 GTC 等文案经 endTypeLabel 与系统码一致。
  • 详见 IMPACT_ANALYSIS.md 本节补充。

补充:我的计划列表分页(2026-10-14)

  • getScheduleInvestmentPlanPage 分页参数驱动列表;表格与移动端卡片共用 el-pagination(默认 10 条/页)。
  • 新建计划成功后刷新并回到第 1 页。
  • 详见 IMPACT_ANALYSIS.md 本节补充。