diff --git a/PROGRESS.md b/PROGRESS.md index c96f75b..8495ffb 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -23,6 +23,7 @@ ### 2026-06-05 +- **改密码弹框样式修复**:`#chpw-modal` 原先没专属 CSS,`.card` 只继承公共骨架(背景+圆角+阴影),缺 padding/width/表单整形 → 卡片被撑到近全宽、无内边距很素。改为复用「选入文件」弹框(`#src-picker-modal`)的头/体/脚分隔布局:标题区底部分隔线、表单内容包进 `.body`(内边距 16/18)、按钮区顶部分隔线右对齐,`.card` 收到 400px + flex column,input focus 红框高亮。纯 CSS/HTML 结构调整,无对外行为变化(不动 DESIGN/RUN)。 - **run_python 过程脚本约定 `/scripts/`**:确认现状是模型生成的 `.py` 直接落 task_dir 根(系统提示只说"只写到 task_dir",无 scripts/ 分层),过程脚本和交付产物(.docx/.pptx/spec)混在一起。定调:**模型显式写文件再 `script_path` 跑的过程脚本** → `/scripts/`(可见/持久/可重跑,`WriteTool` 自动建父目录);**inline `code` 匿名片段** → 维持临时用后即焚(host 走系统 temp、docker 走 `.zcbot_tmp//` dotfile 隐藏+删,均不动)——不持久化到 scripts/,免把目录污染成匿名垃圾堆。改 `core/agent_builder.py` 系统提示工作目录段加一条 scripts/ 引导(>~15 行/要迭代/出产物用文件,短抛弃代码才内联)+ `tools/run_python.py` 的 tool description / `script_path` 参数说明同步。inline 执行逻辑两后端均未改。tests `test_run_python_script_path` / `test_executor_docker` 全过(2 skip 为 Linux-only)。 - **新增 `standard` skill(国标/行标/团标起草)**:联网核实市面无可直接复用的"写标准文件本身"的 skill(搜到的 technical-proposal GB/T 8567、official-document GB/T 9704 都是相邻品类——投标书/公文,非标准),据 GB/T 1.1—2020 自建。覆盖三层级(国标 GB·T / 行标 JC·T / 团标 T/,重点对接 **CSTM → T/CSTM**,材料试验团标对口建材院检测方向)× 两体裁骨架(试验方法 GB/T 20001.4 + 产品标准)。文件:`SKILL.md`(阶段化:定层级体裁→八条 spec→逐章段段卡→自检渲染)+ 3 references(`gbt_1_1_structure` 要素骨架/必备可选/规范性资料性/封面前言套话、`standard_levels` 选型+CSTM 体系立项、`drafting_rules` 能愿动词应宜可能/不可考核词过滤/指标量化闭环/术语规则/引用真实性+§8 自检清单)+ 4 templates(spec/test_method/product_standard/编制说明)。**渲染复用 proposal `render_docx.py`+`render_diagrams.py`**(兄弟 skill `../proposal/scripts/`,同 patent 范式);冒烟测过表格/中文渲染正常。**坑**:proposal `quality_check.py` 按申报书固定章节名查"缺章节",对标准全是误报且无跳过开关→阶段三不用机检,改 drafting_rules §8 人工 12 条清单(与 patent self_check 同思路)。产出是结构合规草稿 docx,正式报批再灌官方 TCS/CSTM 模板做版式精修。 - **dev 页加"改密码"功能 + 文件面板"选入"按钮文字改图标(防换行)**:① 自助改密码——`web/auth.py::change_password(user_id, old, new)`(验旧密码 → 新密码 ≥6 → bcrypt 重哈希写回,错误归一到现成 `UserCreateError` code 体系 `wrong_password/no_password/weak_password/user_not_found`,不为此新开异常类),`POST /v1/auth/change_password` 挂 `Depends(require_user)`(user_id 取自 JWT 不信前端,旧密码错/无密码→403、弱→400、行没了→401)。前端顶栏「退出登录」左侧加「改密码」按钮(`#hd-chpw`,并入 embed 隐藏规则——embed 模式不显示)+ 一个复用 `.modal` 骨架的弹框(旧/新/确认三项,前端先验长度+两次一致再提交,成功 `alert` 提示不登出,401 走 `logout()`)。否决"点用户名展开菜单"(多写菜单逻辑不划算)。② `#btn-src-pick` 的文字 `选入…` 改单字符图标 `⊕`(和旁边 `⬆ ↻ ›` 同款单色字形,`title` 保留"选入"语义)——原中文文字在窄面板偶发换行。 diff --git a/web/static/dev.html b/web/static/dev.html index 5be6a15..3930d15 100644 --- a/web/static/dev.html +++ b/web/static/dev.html @@ -121,7 +121,7 @@ transition: var(--t); } #login input:hover { background: #fff; } - #login input:focus, #admin-modal input:focus { + #login input:focus, #admin-modal input:focus, #chpw-modal input:focus { outline: none; background: #fff; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(192,57,43,.12); } @@ -174,6 +174,29 @@ #admin-modal .err { color: var(--accent); font-size: 12px; margin-top: 10px; min-height: 1em; } #admin-modal .actions { margin-top: 14px; display: flex; gap: 8px; justify-content: flex-end; } + /* ───── change-password modal(复用选入文件的头/体/脚分隔布局)───── */ + #chpw-modal { z-index: 110; } + #chpw-modal .card { width: 400px; display: flex; flex-direction: column; } + #chpw-modal h3 { + margin: 0; padding: 14px 18px; font-size: 16px; + border-bottom: 1px solid var(--border); + } + #chpw-modal .body { padding: 16px 18px; } + #chpw-modal label { + display: block; margin-top: 12px; margin-bottom: 4px; + font-size: 12px; color: var(--muted); + } + #chpw-modal .body > label:first-child { margin-top: 0; } + #chpw-modal input { + width: 100%; padding: 8px 10px; border-radius: var(--r-md); + border: 1px solid var(--border); background: #fafafa; + } + #chpw-modal .err { color: var(--accent); font-size: 12px; margin-top: 10px; min-height: 1em; } + #chpw-modal .actions { + padding: 12px 18px; border-top: 1px solid var(--border); + display: flex; gap: 8px; justify-content: flex-end; + } + /* ───── 3-pane layout ───── */ #app { display: none; height: 100vh; } #app.ready { @@ -881,13 +904,15 @@