fix: remove mailbox selector empty slot
Docker Release / Check web and api (push) Waiting to run
Docker Release / Resolve release tag (push) Blocked by required conditions
Docker Release / Build and publish all-in-one (push) Blocked by required conditions
Docker Release / Build and publish api (push) Blocked by required conditions
Docker Release / Build and publish web (push) Blocked by required conditions
Docker Release / Build and publish dovecot (push) Blocked by required conditions
Docker Release / Build and publish postfix (push) Blocked by required conditions
Docker Release / Build and publish rspamd (push) Blocked by required conditions
Docker Release / Create GitHub release (push) Blocked by required conditions
Docker Release / Check web and api (push) Waiting to run
Docker Release / Resolve release tag (push) Blocked by required conditions
Docker Release / Build and publish all-in-one (push) Blocked by required conditions
Docker Release / Build and publish api (push) Blocked by required conditions
Docker Release / Build and publish web (push) Blocked by required conditions
Docker Release / Build and publish dovecot (push) Blocked by required conditions
Docker Release / Build and publish postfix (push) Blocked by required conditions
Docker Release / Build and publish rspamd (push) Blocked by required conditions
Docker Release / Create GitHub release (push) Blocked by required conditions
This commit is contained in:
@@ -0,0 +1,14 @@
|
|||||||
|
## 本次更新
|
||||||
|
|
||||||
|
### 修复邮箱选择器右侧空白
|
||||||
|
|
||||||
|
- “全部邮箱”状态下移除复制按钮的永久空白占位,选择器恢复为整行宽度。
|
||||||
|
- 选择具体邮箱时,复制按钮覆盖显示在选择器右侧,不再挤压或缩窄选择器。
|
||||||
|
- 下拉箭头、未读数量和复制按钮保持独立位置,长邮箱地址仍会正确截断。
|
||||||
|
|
||||||
|
### 验证
|
||||||
|
|
||||||
|
- 已通过前端 TypeScript 检查、shadcn/ui 检查和生产构建。
|
||||||
|
- 已在桌面端和 390×844 移动端验证“全部邮箱”与具体邮箱两种状态,无横向溢出或控制台错误。
|
||||||
|
|
||||||
|
**完整更新日志**:[v1.2.14...v1.2.15](https://github.com/zxyszx/NewSzxcn-Email/compare/v1.2.14...v1.2.15)
|
||||||
@@ -1223,7 +1223,7 @@ export function MailPage() {
|
|||||||
onLanguageChange={setLanguage}
|
onLanguageChange={setLanguage}
|
||||||
onSettings={openSettings}
|
onSettings={openSettings}
|
||||||
/>
|
/>
|
||||||
<div className={cn("mt-2 gap-1.5", sidebarCollapsed ? "flex justify-center" : "grid grid-cols-[minmax(0,1fr)_2rem]")}>
|
<div className={cn("relative mt-2", sidebarCollapsed && "flex justify-center")}>
|
||||||
<MailboxSwitcher
|
<MailboxSwitcher
|
||||||
collapsed={sidebarCollapsed}
|
collapsed={sidebarCollapsed}
|
||||||
mailboxes={mailboxList.data?.items || []}
|
mailboxes={mailboxList.data?.items || []}
|
||||||
@@ -1231,14 +1231,15 @@ export function MailPage() {
|
|||||||
selectedMailboxId={selectedMailboxId}
|
selectedMailboxId={selectedMailboxId}
|
||||||
selectedMailbox={selectedMailbox}
|
selectedMailbox={selectedMailbox}
|
||||||
unreadCount={mailboxUnreadCount}
|
unreadCount={mailboxUnreadCount}
|
||||||
|
hasCopyAction={showMailboxCopy}
|
||||||
onSelect={switchMailbox}
|
onSelect={switchMailbox}
|
||||||
/>
|
/>
|
||||||
{!sidebarCollapsed && (
|
{!sidebarCollapsed && showMailboxCopy && (
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
variant="outline"
|
variant="ghost"
|
||||||
size="icon"
|
size="icon"
|
||||||
className={cn("h-8 w-8 shrink-0 rounded-md bg-background shadow-none hover:bg-background", !showMailboxCopy && "pointer-events-none invisible")}
|
className="absolute right-1 top-1 h-6 w-6 rounded-sm text-muted-foreground shadow-none hover:bg-accent hover:text-foreground"
|
||||||
onClick={copyCurrentMailbox}
|
onClick={copyCurrentMailbox}
|
||||||
disabled={!selectedMailbox}
|
disabled={!selectedMailbox}
|
||||||
aria-label="复制邮箱地址"
|
aria-label="复制邮箱地址"
|
||||||
@@ -3258,7 +3259,7 @@ function UnreadBadge({ count, tone = "danger" }: { count?: number; tone?: "dange
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function MailboxSwitcher({ collapsed, mailboxes, loading, selectedMailboxId, selectedMailbox, unreadCount, onSelect }: { collapsed: boolean; mailboxes: Mailbox[]; loading: boolean; selectedMailboxId: string; selectedMailbox?: Mailbox; unreadCount: number; onSelect: (mailboxId: string) => void }) {
|
function MailboxSwitcher({ collapsed, mailboxes, loading, selectedMailboxId, selectedMailbox, unreadCount, hasCopyAction, onSelect }: { collapsed: boolean; mailboxes: Mailbox[]; loading: boolean; selectedMailboxId: string; selectedMailbox?: Mailbox; unreadCount: number; hasCopyAction: boolean; onSelect: (mailboxId: string) => void }) {
|
||||||
const [mailboxQuery, setMailboxQuery] = React.useState("")
|
const [mailboxQuery, setMailboxQuery] = React.useState("")
|
||||||
const isAllSelected = selectedMailboxId === "all"
|
const isAllSelected = selectedMailboxId === "all"
|
||||||
const mailboxUnavailable = loading || mailboxes.length === 0
|
const mailboxUnavailable = loading || mailboxes.length === 0
|
||||||
@@ -3276,7 +3277,7 @@ function MailboxSwitcher({ collapsed, mailboxes, loading, selectedMailboxId, sel
|
|||||||
return (
|
return (
|
||||||
<DropdownMenu onOpenChange={(open) => { if (!open) setMailboxQuery("") }}>
|
<DropdownMenu onOpenChange={(open) => { if (!open) setMailboxQuery("") }}>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<Button disabled={mailboxUnavailable} variant="outline" className={cn("h-8 min-w-0 flex-1 justify-start gap-1.5 overflow-hidden rounded-md border-input bg-background px-2 text-left font-normal shadow-none hover:bg-background", collapsed && "w-8 flex-none justify-center px-0")} title={displayAddress}>
|
<Button disabled={mailboxUnavailable} variant="outline" className={cn("h-8 w-full min-w-0 justify-start gap-1.5 overflow-hidden rounded-md border-input bg-background px-2 text-left font-normal shadow-none hover:bg-background", hasCopyAction && !collapsed && "pr-9", collapsed && "w-8 flex-none justify-center px-0")} title={displayAddress}>
|
||||||
<Mail className="h-3.5 w-3.5 shrink-0 text-muted-foreground" />
|
<Mail className="h-3.5 w-3.5 shrink-0 text-muted-foreground" />
|
||||||
{!collapsed && (
|
{!collapsed && (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
| NSX-20260804-001 | 2026-08-04 | 已完成 | 前端主责;后端、邮件核心协作 | 全部邮箱批量移动到自定义文件夹失败 | S2 | v1.2.14 | 随 v1.2.14 发布 |
|
| NSX-20260804-001 | 2026-08-04 | 已完成 | 前端主责;后端、邮件核心协作 | 全部邮箱批量移动到自定义文件夹失败 | S2 | v1.2.14 | 随 v1.2.14 发布 |
|
||||||
| NSX-20260804-002 | 2026-08-04 | 已完成 | 前端/UI/响应式布局 | 邮箱选择器展开后宽度变窄 | S3 | v1.2.14 | 随 v1.2.14 发布 |
|
| NSX-20260804-002 | 2026-08-04 | 已完成 | 前端/UI/响应式布局 | 邮箱选择器展开后宽度变窄 | S3 | v1.2.14 | 随 v1.2.14 发布 |
|
||||||
| NSX-20260805-003 | 2026-08-05 | 已完成 | 前端/UI/布局稳定性 | 邮箱页与设置页侧栏宽度/边框位置不一致 | S3 | v1.2.14 | 随 v1.2.14 发布 |
|
| NSX-20260805-003 | 2026-08-05 | 已完成 | 前端/UI/布局稳定性 | 邮箱页与设置页侧栏宽度/边框位置不一致 | S3 | v1.2.14 | 随 v1.2.14 发布 |
|
||||||
|
| NSX-20260806-004 | 2026-08-06 | 已完成 | 前端/UI/响应式布局 | “全部邮箱”选择器右侧存在复制按钮空白占位 | S3 | v1.2.15 | 随 v1.2.15 发布 |
|
||||||
|
|
||||||
## NSX-20260804-001
|
## NSX-20260804-001
|
||||||
|
|
||||||
@@ -174,3 +175,26 @@
|
|||||||
| 2026-08-05 | 用户新增“邮箱页与设置页侧栏宽度/边框位置不一致”待处理问题,要求只登记并纳入即将确认的批次方案,现在不要修改。 |
|
| 2026-08-05 | 用户新增“邮箱页与设置页侧栏宽度/边框位置不一致”待处理问题,要求只登记并纳入即将确认的批次方案,现在不要修改。 |
|
||||||
| 2026-08-05 | 项目总控建立唯一问题编号 NSX-20260805-003,状态设为待处理。 |
|
| 2026-08-05 | 项目总控建立唯一问题编号 NSX-20260805-003,状态设为待处理。 |
|
||||||
| 2026-08-05 | 用户确认本批继续实施;已统一应用壳层侧栏宽度变量,状态流转为待验收。 |
|
| 2026-08-05 | 用户确认本批继续实施;已统一应用壳层侧栏宽度变量,状态流转为待验收。 |
|
||||||
|
|
||||||
|
## NSX-20260806-004
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
| --- | --- |
|
||||||
|
| 编号 | NSX-20260806-004 |
|
||||||
|
| 日期 | 2026-08-06 |
|
||||||
|
| 状态 | 已完成 |
|
||||||
|
| 模块 | 前端/UI/响应式布局 |
|
||||||
|
| 现象 | “全部邮箱”状态没有复制按钮,但选择器右侧仍永久保留一列空白区域,箭头与侧栏边框之间出现明显空块。 |
|
||||||
|
| 截图 | `/var/folders/wg/mx262rx107b8j614sq2mnmy00000gn/T/codex-clipboard-ae8ada7f-ba00-4036-9103-8cb76b9496a2.png`;`/var/folders/wg/mx262rx107b8j614sq2mnmy00000gn/T/codex-clipboard-80fb1ec3-9e98-4159-a8fb-b79a0b0e9a32.png` |
|
||||||
|
| 根因 | 为避免具体邮箱状态出现复制按钮时选择器缩窄,旧实现始终保留 32px 复制按钮网格列;“全部邮箱”状态只是隐藏按钮,没有释放占位。 |
|
||||||
|
| 实现 | 选择器改为始终占满整行;只有具体邮箱状态才显示覆盖式复制按钮,并在选择器内容区预留图标空间。 |
|
||||||
|
| 目标版本 | v1.2.15 |
|
||||||
|
| 测试结果 | 前端 check/build 通过;1280px 桌面端选择器宽度在两种状态下均为 263px;390×844 移动端侧栏选择器宽度均为 294px,页面无横向溢出;控制台无错误或警告。 |
|
||||||
|
| 发布状态 | 随 v1.2.15 发布。 |
|
||||||
|
|
||||||
|
### 历史
|
||||||
|
|
||||||
|
| 时间 | 记录 |
|
||||||
|
| --- | --- |
|
||||||
|
| 2026-08-06 | 用户反馈“全部邮箱”右侧存在空白块并要求修改。 |
|
||||||
|
| 2026-08-06 | 已移除永久占位列,改为具体邮箱状态覆盖显示复制按钮,状态流转为待验收。 |
|
||||||
|
|||||||
Reference in New Issue
Block a user