# ASH **Repository Path**: liao_java/ash ## Basic Information - **Project Name**: ASH - **Description**: 持仓管理(Apex Dashboard) - **Primary Language**: HTML - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-26 - **Last Updated**: 2026-08-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 持仓看板 股票持仓可视化看板,支持数据导入导出、实时编辑、排序等功能。 ## 版本历史 ### v38 (盈亏趋势折线图) - 盈亏趋势升级为 SVG 折线图:平滑连接各记录点,红/绿渐变面积填充(盈利在上、亏损在下) - 零轴虚线参考线 + ±1/2 刻度网格线与数值标签,鼠标悬停数据点显示日期与盈亏 - 自动稀疏日期标签(最多约 8 个),多记录时避免拥挤 ### v37 (列宽拖拽调整) - 表头列宽可拖拽调整,双击列头右侧分隔线重置默认宽度 - 自定义列宽持久化到本地配置,刷新后保留 ### v36 (右键菜单 + 连续编辑) - 表格行右键菜单:编辑现价/备注与加仓/复制本行信息/清仓删除,自动避让屏幕边缘 - 连续编辑:表格内 Enter 保存并跳下一行、Shift+Enter 跳上一行,Tab/Shift+Tab 跳列 - 桌面提醒:目标价/止损价触发时发送系统通知,抽屉可开关 ### v35 (盈亏趋势 + 快照对比) - 盈亏趋势:每次更新现价自动记录总盈亏,分析面板「盈亏趋势」柱状图展示走势 - 同天去重:一天内多次更新现价只更新当天记录,最多保留 60 条 - 趋势概览:显示当前盈亏、期间变化额与变化率,支持一键清空 - 快照对比:方案库快照新增「对比」按钮,展示仍持有/新增/清仓三组差异及盈亏变化 - 每页行数:分页器可切换 10/20/50 条每页,偏好持久化 - 批量改行业:多选后一键为选中持仓设置行业标签 - 追加导入:导入预览可选「追加」(按名称去重跳过重名)或「覆盖」 - 自动快照:每次数据变更自动按天留存(同天去重、最多 30 条),支持对比/加载 - 排序持久化:列表排序状态保存到配置,刷新后保持 - 日志导出:分析面板变更记录可导出 CSV - 行业点击筛选:点击分析面板行业行/条即按该行业过滤搜索 - 批量复制:多选后可一键复制所选持仓文本到剪贴板 - 空态引导:无数据时显示导入格式与添加入口提示 - 备注弹窗信息卡:头部展示标的现价/成本/股数/盈亏速览 - 紧凑行距:抽屉可切换紧凑表格行距(持久化) - 搜索历史一键清空 - 市值列:现价×股数计算,可排序、可隐藏 - 价格徽章常显:目标价/止损价始终显示,触达时高亮变色 - 汇总卡片点击复制:点总市值/盈亏/持仓数即复制数字 - Home/End 快捷键:跳转列表首页/末页 - 方案对比:方案库条目也可与当前持仓对比差异 - 现价涨跌箭头:现价高于/低于成本时显示红▲/绿▼ - 筛选计数:搜索时汇总卡片显示「筛选 N/共 M 只」 - 清仓记录:删除/批量删除自动留存(胜率、合计盈亏、可导出 CSV) - 布局修复:工具全开时表格不再压扁——容器横向滚动 + 名称/复选/拖拽列固定(CSS 变量动态偏移) - 整体放大:表格铺满容器均分列宽(table-layout:fixed),无横向滚动条,单元格不换行截断 - 精简头部:移除与设置抽屉重复的主题切换按钮 - 复制持仓按钮归入功能模块,可在设置抽屉开关显隐 - 单页不显示分页器(≤10 只时界面更简洁) - 全屏优化:移除残留 sticky 左列与阴影竖线(斑马纹不再断裂)、搜索框限宽不拉满、数字列按内容分配宽度避免挤压、表头/单元格/汇总数字全屏放大 - 抽屉重新设计:🎛️ 图标区分表格「⚙️ 列」、卡片化分组(外观/功能模块/表格/数据/关于)、头部吸顶、功能开关两列网格、新增「列显示」勾选与「每页条数」设置入口、ESC 关闭抽屉、版本号动态显示 - 精简列选择:移除表格右上角「⚙️ 列」按钮与对应功能开关,抽屉「表格」组「列显示」成为列显隐唯一入口 - 修复列顺序:取消再勾选列后表格列序不再乱(渲染恒按字段定义顺序,不再依赖勾选次序) - 极简白板风格:总览去 accent 竖条与阴影、数字放大间距加大;列表去阴影/斑马纹/盈亏红绿边条、排序图标仅排序或悬停时显示 - 表格加宽:普通模式容器 920→1080px,表头/单元格水平内边距 14→12px,消除列名省略号截断 - 总览均衡:三数值列均分居中,替代首尾对齐,消除大间距空旷感 - 设置入口弱化:浮动球移至右下角(桌面/手机统一),默认半透明低存在感,hover 变清晰,不打扰「总览+列表」主视觉 - 抽屉动画升级:位移改用 transform(GPU 加速)+ 先快后缓的 cubic-bezier(.16,1,.3,1),遮罩 opacity/visibility 淡入淡出(含 backdrop-blur 过渡) - 桌面提醒:抽屉「外观」新增开关,目标价/止损触发时除 ⚠️ 标题外推送浏览器系统通知(新触发去重、关闭提醒即停) - 目标价/止损提醒时页面标题加 ⚠️ 前缀(后台标签页可见) ### v34 (收益率列 + 收益分布 + 加仓摊薄 + 整体调价) - 收益率列:表格新增「收益率」列,自动计算并红绿着色,支持排序 - 收益分布:分析面板新增「收益分布」tab,按盈亏区间条形图展示 - 加仓摊薄:备注弹窗新增补仓区,输入股数+价格自动重算成本(含实时预览) - 整体调价:批量更新价格弹窗新增「整体调整」,按百分比或固定值调整全部现价 - 固定首列:横向滚动时标的名称列粘性固定 - 导出当前视图:搜索筛选后导出/复制 CSV/JSON 仅含过滤结果 - 最后更新时间:摘要卡显示数据最近保存时间(持久化) - 行业分布可视化:分析面板行业占比条形图 - 三态排序:点列头 升序→降序→恢复默认仓位排序 - 较上次盈亏:现价更新时自动记录前值,表格显示自上次更新以来的盈亏变化 - CSV 导出含收益率列,gen_data.py 同步生成 - 新列自动迁移:老用户可见列自动补上收益率列 ### v33 (搜索历史 + 拖拽排序 + 功能开关 + 批量更新) - 搜索历史:搜索框获焦显示最近5条查询,支持删除单条 - 拖拽排序:表格行拖拽调整持仓顺序 - 功能模块开关:搜索栏/快捷添加/盈亏提醒/多选操作/备注/标签/拖拽(抽屉内7个toggle) - 合并摘要卡片:总市值+总盈亏单卡三列布局 - 批量更新价格:粘贴名称+价格列表一键更新 - 点击持仓名查看详情:单击打开备注编辑器 - 备份含模板、导入恢复模板 - 变更日志清空按钮 - CSV导入自动识别列头 - 持仓数量显示在页面标题 - 分析面板新增平均仓位 - 排序列高亮背景 - 空状态CTA按钮(添加/导入) - 全屏模式表格表头粘性定位 - 多选键盘导航修复(分页定位) - 侧栏标签与拖拽独立开关 - `esc()` 增加单引号转义防XSS - check.py 增强:数据变更检查 + 硬编码localStorage key + 注入检测 - AGENTS.md 新增功能测试清单 + 排版规范 ### v32 (全新架构) - 从零重新设计,模块化架构:App/Snapshot/Template/Analysis/Importer/Backup/Alerts/Log/Drawer/Theme/Editor/QuickAdd/Batch/Position/Note/ColMenu/Keys - 全新 UI:紧凑摘要条 + 干净表格 + 集成工具栏 - 单一数据流:`App.commit()` → persist → compute → render - CSS 精简:25%(v31 31%),变量命名更短更紧凑 - 代码行数 2803→1370(-51%),体积 100KB→70KB(-30%) - 所有 v31 功能完整保留 ### v31 (代码质量重构) - 修复备份/恢复 localStorage key 不匹配(`colPrefs`→`visibleCols`,`snapshots`→`positionSnapshots`) - 修复 `matchMedia` 系统主题监听读取过期 `theme` key - 移除 6 个废弃函数(`toggleTheme`/`updateThemeIcon`/`toggleSchemePanel`/`toggleLog`/`toggleMore`/`checkWelcome`) - 移除 80+ 行废弃 CSS(`.theme-toggle`/`.snapshot-*`/`.analysis-toggle`/`.more-section`/`.card .sub`) - 移除 welcome overlay 死代码 - 移除冗余 density 工具栏按钮(已纳入抽屉) - 提取 `downloadBlob()` 工具函数,消除 4 处重复 Blob 下载模式 - 提取 `openPanel()`/`closePanel()` 工具函数,统一 modal 管理 - 合并重复 checkbox CSS 选择器 - `saveNote()` 改用 `commit()` 统一流程 - 清理 `activeSnapshot` 残留变量 - check.py 新增 `setTheme` 识别 - 代码行数 3020→2798(-222 行),体积 107KB→100KB ### v30 (功能面板 + 统一配置) - 右上角悬浮小球 ⚙️,点击展开右侧抽屉面板 - 功能模块开关:快捷添加/盈亏提醒/快照方案/更多分析 - 外观设置:主题三态切换 + 紧凑模式 - 数据工具:快照/方案/导入导出/备份恢复 - 统一配置系统 `appConfig` → localStorage,替代零散 key - 旧版本 `theme`/`density` 配置自动迁移
历史版本 (v1-v29) - **v29 (快捷添加持仓)**: ➕ 按钮或 Ctrl+N 快捷添加单个持仓,内联表单,Enter 提交 Esc 取消 - **v28 (安全修复)**: 新增 `esc()` 工具函数,修复全部 XSS 注入点 - **v27 (代码优化)**: 提取 `commit()` 统一保存+计算+渲染流程 - **v26 (首次使用引导)**: 欢迎面板介绍核心操作,快捷键帮助面板 - **v25 (方案库统一)**: 快照和模板合并为「方案库」统一管理 - **v24 (无刷新恢复)**: 备份恢复动态重新加载所有数据 - **v23 (数据迁移)**: 数据结构增加 `_schema` 版本号,支持跨版本字段迁移 - **v22 (数据统计增强)**: 加权平均成本,收益率标准差,市值中位数 - **v21 (多持仓模板)**: 保存当前持仓为命名模板,最多 20 个 - **v20 (资产配置饼图)**: 纯 CSS conic-gradient 饼图,可视化持仓占比 - **v19 (变更日志)**: 记录编辑/删除/导入/模板操作,含操作时间戳 - **v18 (行业标签)**: 每个持仓可添加行业标签,分析面板新增行业分布汇总 - **v17 (一键备份恢复)**: 导出全部数据为 JSON 文件,含版本号和时间戳 - **v16 (盈亏提醒)**: 设置目标价和止损价,表格显示「目标」「止损」徽章 - **v15 (持仓备注)**: 每个持仓可添加文字备注,📝 图标编辑 - **v14 (紧凑视图)**: 表格密度切换:宽松 / 紧凑,📏 按钮一键切换 - **v13 (系统主题跟随)**: 自动跟随系统 `prefers-color-scheme`,三态切换 - **v12 (数据快照)**: 保存/恢复持仓快照(localStorage),快照命名 - **v11 (剪贴板导出)**: 一键复制持仓表格为文本,格式化对齐输出 - **v10 (列显示控制)**: 显示/隐藏任意列,用户偏好持久化 - **v9 (批量操作)**: 复选框多选,批量删除/导出,全选/取消全选 - **v8 (编辑增强)**: 行内编辑实时校验,Ctrl+Z 撤销(最多50步) - **v7 (打印优化)**: 完整打印样式(A4 横向),隐藏交互元素 - **v6 (导出增强)**: JSON 导出(含汇总信息),CSV 增加盈亏/仓位列 - **v5 (导入增强)**: 导入前预览表格,支持 Tab 分隔符 - **v4 (排序可视化)**: 表头排序箭头指示(↑↓),当前排序列高亮 - **v3 (移动端优化)**: 表格横向滚动,触摸友好按钮尺寸 (44px) - **v2 (暗色主题)**: CSS 变量主题系统(`data-theme="dark"`),🌓 一键切换 - **v1 (初始版本)**: 基础持仓展示,CSV 导入导出,双击编辑,搜索过滤
## 功能特性 | 类别 | 功能 | |------|------| | **数据管理** | CSV/JSON 导入导出,剪贴板复制,数据快照,一键备份恢复,多持仓模板 | | **实时编辑** | 双击编辑 + 实时校验 + 撤销(Ctrl+Z) | | **批量操作** | 复选框多选,批量删除/导出,全选/取消全选 | | **可视化** | 红涨绿跌,排序箭头,持仓分析,资产配置饼图 | | **标签** | 行业标签分类,按标签汇总 | | **备注** | 每行可添加文字备注 | | **盈亏提醒** | 目标价/止损价到价提示 | | **主题** | 亮色/暗色/跟随系统,持久化 | | **视图** | 宽松/紧凑密度切换 | | **搜索过滤** | 实时搜索 + 历史记录 | | **列控制** | 显示/隐藏任意列 | | **日志** | 操作变更记录(最近 50 条) | | **键盘** | 快捷键导航 + 帮助面板 | | **响应式** | 桌面 + 移动端 | | **打印** | 优化打印样式 | ## 使用方法 1. 直接在浏览器中打开 `v38.html` 2. 点击「➕ 添加持仓」或「📥 导入」添加数据 3. 双击表格数字编辑,单击标的名称查看备注,双击名称清仓 4. 使用搜索框查找标的(含行业/代码匹配),搜索历史自动保存 5. 点击 ⚙️ 打开设置抽屉:切换主题、全屏模式、功能开关、批量更新价格 6. 快捷键:`/` 搜索、`Ctrl+N` 添加、`Ctrl+Z` 撤销、`Ctrl+D` 切换主题 7. 点击「💾 保存快照」保存持仓状态,「📋 保存方案」复用组合 8. 点击「📦 备份」导出全部数据(含快照/模板),「📂 恢复」导入备份 ## 开发 - 所有代码内嵌在 HTML 文件中,无外部依赖 - 检查工具: `python tool/check.py`(静态检查) - 冒烟测试: `python tool/smoke.py`(Node + jsdom 运行时验证) - 一键验证: `python tool/verify.py`(check + smoke) - 版本管理: `python tool/bump.py next`(自动更新 README) - 测试数据: `python tool/gen_data.py 20`(生成随机持仓 CSV 到 data/) - 本地测试: `python tool/serve.py` ### 目录结构 ``` ASH/ ├── v1.html # 初始版本(只读) ├── v38.html # 最新版本 ├── tool/ # 开发工具 │ ├── bump.py # 版本号管理 + README 自动更新 │ ├── check.py # 静态代码检查 │ ├── smoke.py # 运行时冒烟测试(Node + jsdom) │ ├── smoke.js # 冒烟测试脚本本体 │ ├── verify.py # 一键验证(check + smoke) │ ├── gen_data.py # 随机测试数据生成器 │ └── serve.py # 本地服务 ├── data/ # 生成的测试数据(gitignored) ├── his/ # 历史归档 (v1-v32) ├── AGENTS.md # 项目规则 └── README.md # 本文件 ``` ## 许可证 本项目仅供个人学习使用。