From fd9f99a3f9f4a1e110bfb44c24379146c9ea6cf3 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Mon, 7 Sep 2026 18:15:26 +0800 Subject: [PATCH] =?UTF-8?q?UI=20=E4=BF=AE=E5=A4=8D:=20=E5=9B=9E=E5=A4=8D?= =?UTF-8?q?=E9=A1=B5=EF=BC=88ReplyBar=EF=BC=89=E5=8A=A0=E5=BE=80=E8=BF=94?= =?UTF-8?q?=E9=A2=84=E7=AE=97=E9=85=8D=E7=BD=AE=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit jianf 反馈:回复页面/对话页面/发件页面无法配置对话预算。 - 发件页(ComposePage):已有 maxRounds 输入框 ✅ - 对话页(MailView 会话头部):已有 BudgetEditor ✅ - 回复页(ReplyBar):缺失 ← 本轮补上 ReplyBar 底部按钮区加预算徽标(点击展开编辑): - 显示 已用/上限 来回 或「预算不限」,用尽时红色 - 点击 → 数字输入 + 保存/取消 - 复用 useSessionStore.setBudget(同一会话) - 177 测试全过,已部署 --- web/src/components/MailView.tsx | 57 +++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/web/src/components/MailView.tsx b/web/src/components/MailView.tsx index 4cc5098..6dac534 100644 --- a/web/src/components/MailView.tsx +++ b/web/src/components/MailView.tsx @@ -676,6 +676,9 @@ function ReplyBar({ // 抄送默认收起:多数回复不需要它,常驻一行输入框只会挤掉正文空间。 // 原邮件带抄送时自动展开并预填 —— 「回复全部」是人在这种场景下的默认预期 const [ccOpen, setCcOpen] = useState(false); + const [budgetEditing, setBudgetEditing] = useState(false); + const [budgetBusy, setBudgetBusy] = useState(false); + const [maxRoundsDraft, setMaxRoundsDraft] = useState(''); const [attachments, setAttachments] = useState([]); const [busy, setBusy] = useState(false); const [error, setError] = useState(null); @@ -684,6 +687,8 @@ function ReplyBar({ const fetchSessions = useSessionStore(s => s.fetchSessions); const fetchContacts = useContactStore(s => s.fetchContacts); const selectSession = useSessionStore(s => s.selectSession); + const budget = useSessionStore(s => s.budget); + const setBudget = useSessionStore(s => s.setBudget); const me = useAuthStore(s => s.user?.username || ''); if (!replyTo) return null; @@ -774,6 +779,58 @@ function ReplyBar({
{error && {error}}
+ {budget && !budgetEditing && ( + + )} + {budget && budgetEditing && ( + + 预算 + setMaxRoundsDraft(e.target.value)} + inputMode="numeric" + placeholder="不限" + autoFocus + className="w-14 text-xs border border-gray-300 rounded px-1.5 py-0.5 focus:outline-none focus:ring-2 focus:ring-blue-100" + /> + + + + )}