diff --git a/.gitignore b/.gitignore index 84a2a9c..7d7aae5 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,8 @@ deploy_output.txt deploy_remote.sh /tmp/ tools/dev-tunnel-run.ps1 + +# 其它 agent 工具的本地产物(不入库 —— 曾经 .workbuddy/ 被顺手提交进来过) +.workbuddy/ +.opencode/ +.codegraph/ diff --git a/.workbuddy/memory/2026-07-02.md b/.workbuddy/memory/2026-07-02.md deleted file mode 100644 index 601a670..0000000 --- a/.workbuddy/memory/2026-07-02.md +++ /dev/null @@ -1,6 +0,0 @@ -# 2026-07-02 工作日志 - -- **产品介绍页重做**:将 `deploy/landing/index.html` 从暗色科技风改为明亮风格单屏页面(左右分栏→全屏背景图融合) -- **生图技能创建**:创建了 `agnes-image` 用户级技能,使用 Agnes Image 2.1 Flash 模型(apihub.agnes-ai.com),无水印,支持文生图/图生图 -- **API Key 已内置在技能脚本中**:`sk-ib7i...M2z` -- **测试通过**:生成充电柜产品图成功,25秒出图 diff --git a/.workbuddy/memory/2026-07-07.md b/.workbuddy/memory/2026-07-07.md deleted file mode 100644 index c63f26f..0000000 --- a/.workbuddy/memory/2026-07-07.md +++ /dev/null @@ -1,32 +0,0 @@ -# 2026-07-07 Session Notes - -## 完成工作:安知充H5应用设计稿 — 修复全部7屏填充色问题 - -### 问题诊断 -- 用户反馈"位置都是乱的",截图验证发现所有7屏几乎全白/空白 -- 根因:上一轮重建时所有frame节点的 `fills: []` 为空(容器无背景色),只有text节点有fills所以能看到零星文字 -- batch_read 确认:用户卡片、菜单卡片、设备卡片、订单卡片、通道卡片等所有容器的 fills 均为空数组 - -### 修复操作(共6个batch_edit批次,约120+个U()操作) -1. **Batch 1 (23 ops)**: 7屏背景色(登录渐变+其余#f5f5f5) + 登录表单元素(输入框白底边框+渐变按钮) + 首页卡片(组织切换/筛选标签/统计行/设备卡×2) + TabBar×2 -2. **Batch 2 (10 ops)**: 设备列表卡×3 + 仓体详情卡片×3(状态/参数/记录) + 操作按钮×2(停止橙色/开门线框) + 订单卡×3 -3. **Batch 3 (8 ops)**: 设备详情-信息卡白色 + 开门按钮蓝色 + 板头×6(灰蓝色调) -4. **Batch 4 (22 ops)**: 通道卡1-12(板1-2): 白底圆角6px + 彩色状态条(绿/蓝/红/紫) -5. **Batch 5 (22 ops)**: 通道卡13-24(板3离线灰色 + 板4混合状态) -6. **Batch 6 (22 ops)**: 通道卡25-36(板5-6混合状态) -7. **我的页补完**: 用户卡片白底 + 头像蓝底#dbeafe + 菜单卡片白底 + 退出登录按钮(红字红边框) + 底部TabBar(SVG图标) - -### 关键技术发现 -- ardot batch_edit 中 Update 已有节点:`fills` 必须用 `[{type:"SOLID", color:{r,g,b}}]` 数组格式 -- `strokes` 必须用数组格式 `[{type:"SOLID", color:{r,g,b}, width:N}]` -- Insert 新节点时 `fill:"#FFF"` 简写可用,但 Update 时不可靠 - -### 颜色修正(用户反馈"颜色不对"后修复) -- 对照全部7个源文件的CSS,逐一修正了所有颜色 -- **登录页**: 输入框背景 #f8fafc(更正白色), 边框 #e2e8f0(更正#e5e7eb) -- **首页**: 组织切换器背景 #f3f4f6(更正白色), 筛选标签激活态 #2563eb蓝(更正#dbeafe浅蓝) -- **设备列表**: 状态徽章添加背景圆角#f0fdf4/#f9fafb -- **设备详情**: 在线状态徽章/DC/AC标签添加圆角背景#f0fdf4, 导航栏添加底部边框 -- **仓体详情**: 状态徽章添加圆角背景#eff6ff, 记录项添加底部边框 -- **订单**: 状态徽章添加圆角背景(正常#f0fdf4/异常#fef2f2/停止#fffbeb), 订单体添加顶部边框 -- 均用 `strokes: [{type:"SOLID", color:{r,g,b}, width:N}]` 数组格式设置边框 diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md deleted file mode 100644 index 52e1dd3..0000000 --- a/.workbuddy/memory/MEMORY.md +++ /dev/null @@ -1,17 +0,0 @@ -# 项目长期记忆 - -## 用户偏好 -- **产品介绍页风格**:偏好明亮/浅色风格,不要暗色科技风;单屏不滚动布局 -- **生图能力**:项目有 ImageGen 文生图工具可用,可用于生成产品渲染图等 -- **操作规则**:开发/修改程序前必须确认需求,不可自说自话操作;生产环境服务器文件和数据必须用户授权后才可动 - -## Ardot 设计稿经验(充电柜H5应用) -- **设计稿文件ID**: `701384244279693`("安知充H5应用设计稿") -- **7屏完整列表**: 登录(2:1004) 首页(2:1022) 设备详情(2:1094,高1260) 设备列表(2:1334) 仓体详情(2:1359) 订单(2:1411) 我的(2:1468) -- **关键教训 — frame fills 必须用数组格式**: `fills` 属性必须用 `[{type:"SOLID", color:{r,g,b}}]` RGB对象数组。`fill:"#FFF"` 十六进制简写在 batch_edit 的 Update 操作中对已有frame节点可能不生效(Insert 新节点时可用简写,Update 已有节点必须用数组格式) -- **strokes 必须用数组格式**: `strokes: [{type:"SOLID", color:{r,g,b}, width:N}]`,不是对象形式 -- **cornerRadius 必须是数字**: 不能传数组 -- **屏幕背景色**: tab页面 #f5f5f5,子页面(设备详情/列表/仓体详情) 也是 #f5f5f5;登录页用渐变 linear-gradient(135deg,#f0f4ff,#e0e7ff,#f0f9ff) -- **卡片统一白色**: 所有卡片/容器 #FFFFFF + 圆角 -- **颜色系统**: 主蓝#2563eb, 在线绿#16a34a(bg:#f0fdf4), 离线灰#9ca3af(bg:#f9fafb), 故障红#dc2626(bg:#fef2f2), 停止橙#f59e0b(bg:#fffbeb), 充电中蓝#2563eb(bg:#eff6ff), 满电紫#7c3aed -- **设备详情36仓**: 6板×6通道=36, 通道卡片白底+顶部3px彩色状态条(色条用RECTANGLE子节点fill表示状态色) diff --git a/AGENTS.md b/AGENTS.md index 43d2676..6287270 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -257,6 +257,13 @@ python test/schema_alignment_e2e.py --env prod --jwt-secret --yes-p ## 开发约束 +### 操作规则(用户明确要求,优先级高于便利性) + +- **开发/修改程序前必须先确认需求**,不可自说自话地动手; +- **生产环境服务器上的文件与数据,必须经用户授权后才可改动**; +- 产品介绍页(`deploy/landing/`)**偏好明亮/浅色风格、单屏不滚动布局**, + ⛔ 不要做成暗色科技风。 + ### 禁止操作 - **禁止修改设备与TCP服务的通信协议** — 设备端固件不可改,TCP 报文 JSON 格式、字段名、act 类型、签名机制(SHA256取8位)全部冻结;所有修复必须是服务端内部逻辑变更,设备侧零感知 diff --git a/docs/README.md b/docs/README.md index efa8543..49dcecf 100644 --- a/docs/README.md +++ b/docs/README.md @@ -87,7 +87,9 @@ ### compound-notes/ —— 经验沉淀 -单点问题的笔记(如某次 SQL 注入的成因与修法)。**参考性**内容, +单点问题的笔记:`2026-08-15-sql-injection-format-param-binding.md`(SQL 注入成因与修法)、 +`2026-07-ardot-batch-edit-属性写法.md`(设计稿批量编辑的属性坑)、 +`TEMPLATE.md`(新建笔记的模板)。**参考性**内容, 遇到同类问题时查;结论若上升为通用规范,应回写进 `AGENTS.md` 的「踩过的坑」。 ### ~~archive/~~ —— 已取消(2026-09-20) diff --git a/docs/compound-notes/2026-07-ardot-batch-edit-属性写法.md b/docs/compound-notes/2026-07-ardot-batch-edit-属性写法.md new file mode 100644 index 0000000..c6ac378 --- /dev/null +++ b/docs/compound-notes/2026-07-ardot-batch-edit-属性写法.md @@ -0,0 +1,31 @@ +# Ardot 设计稿 API 的坑(batch_edit) + +**日期**:2026-07(从误入库的工具记忆里抢救归位) +**场景**:用 Ardot 的 `batch_edit` 批量修改设计稿节点属性(充电柜 H5 应用设计稿, +文件 ID `701384244279693`)。 + +## 问题描述 + +批量改完 7 屏后,用户反馈"位置都是乱的",截图验证发现**所有 7 屏几乎全白/空白**: +容器节点没有任何背景色,只有 text 节点有 fills,所以只剩零星文字可见。 + +## 根因分析 + +上一轮重建时**所有 frame/容器节点的 `fills` 都写成了空数组 `[]`**。 +更关键的是:**给"已存在的节点"更新颜色时,十六进制简写 `fill:"#FFF"` 不生效** —— +它只在 **Insert 新节点**时可用;Update 已有节点必须写完整对象。 + +## 解决方案 + +| 属性 | 正确写法 | 错误写法 | +|------|---------|---------| +| `fills` | `[{type:"SOLID", color:{r,g,b}}]`(RGB 对象数组) | `fill:"#FFF"`(Update 时无效) | +| `strokes` | `[{type:"SOLID", color:{r,g,b}, width:N}]` | 写成对象形式 | +| `cornerRadius` | 数字 | 数组 | + +## 模式 / 反模式 + +- **模式**:批量改设计稿后,**用截图/渲染验证**,不要只看接口返回成功 —— + "操作成功但属性没生效"正是本次的表现(与后端"打印 ❌ 却 exit 0"是同一类信号缺失)。 +- **反模式**:把"同一属性在不同操作(Insert/Update)下语义不同"当理所当然; + 涉及此类差异时**先小范围试一个节点并肉眼确认**,再全量批处理。 diff --git a/docs/tech/小程序用户端.md b/docs/tech/小程序用户端.md index dcca5ae..0a5a417 100644 --- a/docs/tech/小程序用户端.md +++ b/docs/tech/小程序用户端.md @@ -166,3 +166,33 @@ const BASE_URL = '/api/pms' 2. **SVG 图标居中**:`.stat-chip svg { display: block; flex-shrink: 0 }` 用 CSS 统一控制尺寸,比内联属性更可靠 3. **内联 SVG + v-if**:Vue 3 支持在 `` 上用 `v-if` 条件渲染,适用于动态图标 4. **CSS 覆盖 SVG 尺寸**:用 `.xxx svg { width: Xpx; height: Xpx }` 统一控制图标大小,不在每个 `` 上写死 + +--- + +## 附:UI 设计规范(视觉口径,改动界面前必读) + +> 来源:H5 设计稿(Ardot 文件 ID `701384244279693`「安知充H5应用设计稿」,7 屏: +> 登录 / 首页 / 设备详情 / 设备列表 / 仓体详情 / 订单 / 我的)落地时沉淀的口径。 +> **改动任何页面配色或布局前先对照本节**,避免同一系统内出现两套视觉。 + +### 颜色系统(状态色 + 背景色成对使用) + +| 语义 | 主色 | 浅底 | +|------|------|------| +| 主色(品牌蓝) | `#2563eb` | `#eff6ff` | +| 在线 | `#16a34a` | `#f0fdf4` | +| 离线 | `#9ca3af` | `#f9fafb` | +| 故障 | `#dc2626` | `#fef2f2` | +| 停止 | `#f59e0b` | `#fffbeb` | +| 充电中 | `#2563eb` | `#eff6ff` | +| 满电 | `#7c3aed` | — | + +### 背景与容器 + +- 页面底色统一 `#f5f5f5`(**含 tab 页与子页面**:设备详情 / 设备列表 / 仓体详情); +- 登录页用渐变 `linear-gradient(135deg, #f0f4ff, #e0e7ff, #f0f9ff)`; +- **所有卡片/容器为白底 `#FFFFFF` + 圆角**。 + +### 设备详情(36 仓) + +- 布局为 **6 板 × 6 通道 = 36**;通道卡片白底 + **顶部 3px 彩色状态条**(色条取上表状态色)。 diff --git a/software/web/README.md b/software/web/README.md deleted file mode 100644 index d6af7e3..0000000 --- a/software/web/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# React + TypeScript + Vite - -This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules. - -Currently, two official plugins are available: - -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) - -## React Compiler - -The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). - -## Expanding the Oxlint configuration - -If you are developing a production application, we recommend enabling type-aware lint rules by installing `oxlint-tsgolint` and editing `.oxlintrc.json`: - -```json -{ - "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": ["react", "typescript", "oxc"], - "options": { - "typeAware": true - }, - "rules": { - "react/rules-of-hooks": "error", - "react/only-export-components": ["warn", { "allowConstantExport": true }] - } -} -``` - -See the [Oxlint rules documentation](https://oxc.rs/docs/guide/usage/linter/rules) for the full list of rules and categories.