Files
opc-manager/VERSION_LOG.md
mac 9b6257ff19 v1.1.0-beta: 安全/性能/架构优化 + 账号管理后台 + 视图切换
## 安全与性能
- .env 环境变量、debug=False、except 改 mysql.connector.Error+logging
- attach_common 批量 IN 查询消除 N+1
- 批量 esc() XSS 转义

## 架构
- app.js 拆分为 7 模块 + admin.js
- .form-ctrl 统一表单控件

## 经营管理
- 字段改名:客户名称→项目名称、销售人员→商务负责人
- 必填:项目名称/商务负责人/经营负责人/签约月份/签约金额>0
- 视图切换:确收/毛利 ↔ 回款/费用

## 重点工作与台账
- 统计卡片样式与经营管理统一
- 任务状态简化 3 态
- 优先级点击切换、右键菜单(重命名/副本)
- 修复新建任务绑定错误项目 bug

## 用户体系
- 新增工作台:MCN·无界、无界·无界
- 新增账号:mcn/wuji
- 账号管理后台(admin 限定)
- sidebar 顶部头像+显示名,点击弹菜单
- sidebar sticky 定位

## 其他
- 登录页样式优化(参考 UOC 平台)
- 首页财务趋势拆 3 图
- 业务方案标准资料库双 Tab
2026-06-23 15:54:03 +08:00

109 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OPC Manager Version Log
## v1.1.0-beta — 2026-06-23
- **安全**.env 环境变量管理SECRET_KEY/DB、debug=False、except 改 mysql.connector.Error + logging
- **性能**attach_common 批量 IN 查询消除 N+1、monthly_finance 预解析 budget_data
- **XSS**:批量添加 esc() 转义 21 处用户可控字段
- **架构**app.js 拆分为 7 个模块utils/home/projects/proposals/products/finance/drawer+ admin.js
- **表单统一**.form-ctrl 统一所有输入控件(替代 drawer-value/fin-input/inline-form 等)
- **首页**:移除风险提醒卡片;财务趋势拆为 3 图(签约趋势/确收毛利/回款费用)
- **业务方案**:标准资料库 + 其他资料双 Tab标准 7 项自动初始化;标准资料支持评论
- **经营管理**
- 字段改名:客户名称→项目名称、销售人员→商务负责人
- 必填约束:项目名称/商务负责人/经营负责人/签约月份/签约金额>0
- 新增经营负责人字段;移除转移功能,新增删除项目
- 视图切换:确收/毛利 ↔ 回款/费用
- **重点工作与台账**
- 统计卡片样式与经营管理统一(无图标)
- 视图切换 + 新增任务按钮移到卡片外右对齐
- 任务状态简化为 3 态(未开始/进行中/已结束)
- 优先级点击切换、项目右键菜单(重命名/创建副本)
- 新建任务绑定当前选中项目(修复新建到错误项目的 bug
- 任务详情抽屉改为创建到 document.body避免 innerHTML 清除)
- **用户体系**
- 新增工作台MCN·无界、无界·无界
- 新增账号mcn/mcn123、wuji/wuji123
- 账号管理后台admin 限定):增删改查账号 + 工作台权限分配
- sidebar 顶部用户头像(首字母)+ 显示名,点击弹菜单(账号管理/退出)
- sidebar sticky 定位,滚动时不消失
- **登录页**:参考 UOC 业务管理平台样式优化(图标 logo、密码显隐、loading 态、回车提交)
- **初始化**:启动自动修正任务状态空值/done→进行中等非法值
## v1.0.1-beta — 2026-06-22
- 数据库迁移SQLite → MySQL 9.6,适配占位符/类型/游标
- 用户体系:管理员 + OPC负责人角色工作台权限隔离登录鉴权
- 经营管理:状态改为已签约/流程中/待签约三类,签约月份列可编辑,财务指标卡片(确收/毛利/回款/费用/现金流)
- 重点工作与台账:阶段排序固定化+折叠分组,任务拖拽手柄与状态互换位置,关闭抽屉自动刷新,首次进入自动选第一个项目
- 产品迭代统一表格去平台tab状态点击循环切换日期改为 date 选择器,新增版本改用右侧抽屉
- 左侧工作台/顶部 tab 记忆恢复,跨工作台转移功能
- 近期动态修复 tenant 归属
## v1.2.0 — 2026-06-15
- 业务机会 + 运营管理合并为「重点项目」Tab统一表格展示
- 新增项目任务追踪:按阶段分组展示里程碑/执行项/负责人/截止日/卡点
- 新增 `project_tasks` 表,抽屉内展示项目时间线
## v1.1.0 — 2026-06-15
- 首页指标升级:增加已签约合同总额、合同流程中金额、年度/Q2 累计确收、年度/Q2 累计毛利、已签约未执行
- 运营表格增加「金额」列
- 产品研发增加「平台」字段(真研/科普/关爱),支持平台筛选
## v1.0.7 — 2026-06-04
- 修复新增表单 async 后 `event.currentTarget` 丢失导致页面不刷新(影响所有新增按钮)
- `createResource` 改用预存 form 引用 + try/catch 错误提示
## v1.0.6 — 2026-06-04
- 修复财务 Tab Chart 无限堆积renderChartOn 缺少旧 chart 销毁 + state 跟踪
- 财务图表容器加固定高度300px避免 resize 循环
## v1.0.5 — 2026-06-04
- "销售管理" Tab 改为"业务机会""目标客户"字段统一改为"业务机会"
## v1.0.4 — 2026-06-04
- CDN 全量本地化Tailwind / Chart.js / Squire / Lucide 下载到 `static/vendor/`,不再依赖外部 CDN
## v1.0.3 — 2026-06-04
- CDN 脚本加 `defer` + `preconnect`:解决 Chart.js / Squire / Lucide 同步加载阻塞页面渲染
## v1.0.2 — 2026-05-30
- 新增 Codex Skill`opc-manager`,说"打开 OPC 工作台"即可在任意上下文启动
## v1.0.1 — 2026-05-30
- 将 data/opc.sqlite 加入 .gitignore避免运行时数据库被误提交
## v1.0.0 — 2026-05-30
**首次正式发布**
### Features
- 首页概览7 项关键指标卡片4 列自动换行)、财务趋势图、风险提醒、近期动态
- 销售管理:客户表格 + 抽屉详情(字段失焦自动保存)
- 业务方案:版本表格 + 抽屉(文件上传/预览/下载/删除)
- 运营管理:项目表格(业务机会/已签约执行分类筛选)+ 抽屉
- 产品研发:版本表格 + 抽屉
- 财务管理:月度收入/毛利/成本/净利曲线图 + 明细表
### Interactions
- 所有抽屉Plane 风格紧凑布局720px、字段失焦自动保存、状态指示
- 评论区Squire 富文本编辑器(加粗/斜体/下划线/删除线/无序列表/有序列表/引用/撤销/重做)
- 评论支持删除,带确认弹窗
- 评论内容保留 HTML 格式(加粗、列表等)
- 图标库Lucide
### Tech Stack
- Backend: Flask + SQLite
- Frontend: Vanilla JS + Tailwind CSS CDN
- Editor: Squire (Fastmail)
- Charts: Chart.js
- Icons: Lucide
### Fixes
- 首页财务图表空白问题:固定容器高度 140px + maintainAspectRatio: false
- 首页指标卡片布局grid-cols-7 → grid-cols-4 自动换行
- 风险提醒文字竖排grid-cols-2 等宽布局 + break-words
- 评论区工具栏按钮无效onclick → onmousedown 防止焦点丢失
- 格式 toggle 无效hasFormat 检测 + removeBold/removeItalic
- 列表按钮无效Squire API 替代 Trix
- 评论内容格式丢失encodeURIComponent 编码 + decodeURIComponent 渲染
- 列表显示无标记list-style: revert 覆盖 Tailwind reset