feat(client): 抽屉+设置页加退出登录入口;酒行信息显示微信号
- 左侧抽屉底部、系统设置页底部各加「退出登录」按钮(窄屏顶栏菜单 不便时也能退出;登出后路由 redirect 自动跳 /login) - 酒行信息 tab 补显示「微信号」行(模型/编辑弹窗早已支持 wechat_id, 仅只读展示遗漏) 121 测试通过。todo #54 #55。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -78,6 +78,28 @@ class _SettingsScreenState extends ConsumerState<SettingsScreen> {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
// 退出登录(常驻底部;登出后路由 redirect 自动跳 /login)
|
||||||
|
const Divider(height: 1),
|
||||||
|
SafeArea(
|
||||||
|
top: false,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.fromLTRB(16, 8, 16, 12),
|
||||||
|
child: SizedBox(
|
||||||
|
width: double.infinity,
|
||||||
|
child: OutlinedButton.icon(
|
||||||
|
onPressed: () =>
|
||||||
|
ref.read(authStateProvider.notifier).logout(),
|
||||||
|
icon: const Icon(Icons.logout, size: 18),
|
||||||
|
label: const Text('退出登录'),
|
||||||
|
style: OutlinedButton.styleFrom(
|
||||||
|
foregroundColor: AppTheme.danger,
|
||||||
|
side: const BorderSide(color: AppTheme.danger),
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 12),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -154,6 +176,10 @@ class _SettingsScreenState extends ConsumerState<SettingsScreen> {
|
|||||||
label: '负责人',
|
label: '负责人',
|
||||||
value:
|
value:
|
||||||
shop.managerName.isNotEmpty ? shop.managerName : '—'),
|
shop.managerName.isNotEmpty ? shop.managerName : '—'),
|
||||||
|
const Divider(height: 16),
|
||||||
|
_ShopInfoRow(
|
||||||
|
label: '微信号',
|
||||||
|
value: shop.wechatId.isNotEmpty ? shop.wechatId : '—'),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -142,6 +142,19 @@ class _AppShellState extends ConsumerState<AppShell> {
|
|||||||
}).toList(),
|
}).toList(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
// 退出登录(抽屉底部常驻,窄屏顶栏菜单不便时也能退出)
|
||||||
|
const Divider(height: 1, color: Colors.white24),
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.logout, color: Colors.white70),
|
||||||
|
title: const Text('退出登录',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white, fontWeight: FontWeight.w500)),
|
||||||
|
onTap: () {
|
||||||
|
Navigator.pop(context); // 关闭抽屉
|
||||||
|
ref.read(authStateProvider.notifier).logout();
|
||||||
|
context.go('/login');
|
||||||
|
},
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
+59
-3
@@ -223,10 +223,10 @@ ul.todo-list { list-style: none; margin: 0; padding: 0; }
|
|||||||
<h1>酒库管理系统 — 项目 TODO</h1>
|
<h1>酒库管理系统 — 项目 TODO</h1>
|
||||||
<div class="header-meta">生成于 2026-06-16 · 真相源 todo/todo.json</div>
|
<div class="header-meta">生成于 2026-06-16 · 真相源 todo/todo.json</div>
|
||||||
<div class="stats">
|
<div class="stats">
|
||||||
<div class="stat-pill"><strong>49</strong>全部</div>
|
<div class="stat-pill"><strong>51</strong>全部</div>
|
||||||
<div class="stat-pill"><strong>1</strong>待开始</div>
|
<div class="stat-pill"><strong>1</strong>待开始</div>
|
||||||
<div class="stat-pill"><strong>0</strong>开发中</div>
|
<div class="stat-pill"><strong>0</strong>开发中</div>
|
||||||
<div class="stat-pill"><strong>34</strong>待验收</div>
|
<div class="stat-pill"><strong>36</strong>待验收</div>
|
||||||
<div class="stat-pill"><strong>14</strong>已验收</div>
|
<div class="stat-pill"><strong>14</strong>已验收</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -318,7 +318,7 @@ ul.todo-list { list-style: none; margin: 0; padding: 0; }
|
|||||||
</div>
|
</div>
|
||||||
<div class="section-block" id="section-done">
|
<div class="section-block" id="section-done">
|
||||||
<div class="section-title st-done" data-toggle="done">
|
<div class="section-title st-done" data-toggle="done">
|
||||||
🔍 待验收 <span class="s-count">34</span>
|
🔍 待验收 <span class="s-count">36</span>
|
||||||
<span class="s-arrow">▴ 收起</span>
|
<span class="s-arrow">▴ 收起</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="section-list-wrap " id="list-wrap-done">
|
<div class="section-list-wrap " id="list-wrap-done">
|
||||||
@@ -875,6 +875,62 @@ ul.todo-list { list-style: none; margin: 0; padding: 0; }
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card-footer">
|
||||||
|
<div class="tag-row"></div>
|
||||||
|
<div class="item-meta">
|
||||||
|
<span class="meta-date">🕐 2026-06-16</span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="todo-card s-done"
|
||||||
|
data-id="54"
|
||||||
|
data-level="mid"
|
||||||
|
data-status="done"
|
||||||
|
data-tier=""
|
||||||
|
data-tags="">
|
||||||
|
<div class="card-header">
|
||||||
|
<span class="item-title">左侧抽屉+系统设置页加退出登录按钮</span>
|
||||||
|
<div class="card-badges">
|
||||||
|
<span class="tag status-badge s-done">待验收</span>
|
||||||
|
<span class="tag t-high">重要</span>
|
||||||
|
|
||||||
|
|
||||||
|
<button class="reject-btn" data-id="54" data-title="左侧抽屉+系统设置页加退出登录按钮">拒绝验收</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card-footer">
|
||||||
|
<div class="tag-row"></div>
|
||||||
|
<div class="item-meta">
|
||||||
|
<span class="meta-date">🕐 2026-06-16</span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="todo-card s-done"
|
||||||
|
data-id="55"
|
||||||
|
data-level="mid"
|
||||||
|
data-status="done"
|
||||||
|
data-tier=""
|
||||||
|
data-tags="">
|
||||||
|
<div class="card-header">
|
||||||
|
<span class="item-title">酒行信息显示微信号</span>
|
||||||
|
<div class="card-badges">
|
||||||
|
<span class="tag status-badge s-done">待验收</span>
|
||||||
|
<span class="tag t-high">重要</span>
|
||||||
|
|
||||||
|
|
||||||
|
<button class="reject-btn" data-id="55" data-title="酒行信息显示微信号">拒绝验收</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<div class="tag-row"></div>
|
<div class="tag-row"></div>
|
||||||
<div class="item-meta">
|
<div class="item-meta">
|
||||||
|
|||||||
+28
-2
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"meta": {
|
"meta": {
|
||||||
"title": "酒库管理系统 — 项目 TODO",
|
"title": "酒库管理系统 — 项目 TODO",
|
||||||
"updated_at": "2026-06-16T14:20:07.674Z"
|
"updated_at": "2026-06-16T14:26:17.800Z"
|
||||||
},
|
},
|
||||||
"seq": 53,
|
"seq": 55,
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
@@ -842,6 +842,32 @@
|
|||||||
"done": false,
|
"done": false,
|
||||||
"completed_at": null,
|
"completed_at": null,
|
||||||
"version": null
|
"version": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 54,
|
||||||
|
"title": "左侧抽屉+系统设置页加退出登录按钮",
|
||||||
|
"desc": null,
|
||||||
|
"level": "mid",
|
||||||
|
"tier": null,
|
||||||
|
"tags": [],
|
||||||
|
"status": "done",
|
||||||
|
"created_at": "2026-06-16T14:26:00.681Z",
|
||||||
|
"done": false,
|
||||||
|
"completed_at": null,
|
||||||
|
"version": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 55,
|
||||||
|
"title": "酒行信息显示微信号",
|
||||||
|
"desc": null,
|
||||||
|
"level": "mid",
|
||||||
|
"tier": null,
|
||||||
|
"tags": [],
|
||||||
|
"status": "done",
|
||||||
|
"created_at": "2026-06-16T14:26:00.735Z",
|
||||||
|
"done": false,
|
||||||
|
"completed_at": null,
|
||||||
|
"version": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user