feat(client): 库存三态 UI——抽屉挂售 switch + 三态徽章/筛选/已售 KPI 卡
- 新组件 DsSwitch(原型 atoms .switch 对照,L1 已登记:38×22 pill,on=primary) - 商品抽屉状态行:三态徽章后跟挂售 switch(在售⇄库存 即时生效,已售只读, readonly 禁用),桌面 drawer / 移动 sheet 同组件 - 列表状态列/卡片徽章三态化(在售绿/库存蓝/已售灰,icons BADGE_ICON 补两词); 状态筛选改「全部/在售/库存/已售」走服务端;预警缺货退出状态维度由数量染色承担 - KPI 第四卡「缺货预警」→「已售」(sold_count,点击筛选已售) - 原型同步:atoms/index 登记 switch 与 b-库存/b-已售、inventory 两屏三态数据、 抽屉状态行 switch;12 道 ds 闸 + L1 同源闸全过 - golden 重录 ×9(三态徽章 + 已售卡形态) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
|
Before Width: | Height: | Size: 420 KiB After Width: | Height: | Size: 416 KiB |
|
Before Width: | Height: | Size: 414 KiB After Width: | Height: | Size: 410 KiB |
|
Before Width: | Height: | Size: 422 KiB After Width: | Height: | Size: 417 KiB |
|
Before Width: | Height: | Size: 213 KiB After Width: | Height: | Size: 210 KiB |
|
Before Width: | Height: | Size: 209 KiB After Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 215 KiB After Width: | Height: | Size: 213 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 142 KiB |
@@ -27,6 +27,7 @@ const _items = [
|
||||
id: 1,
|
||||
productId: 1,
|
||||
quantity: 128,
|
||||
status: 'on_sale',
|
||||
productCode: 'MT-FT-500',
|
||||
productName: '茅台 飞天 53°',
|
||||
series: '飞天',
|
||||
@@ -153,6 +154,7 @@ const _items = [
|
||||
id: 8,
|
||||
productId: 8,
|
||||
quantity: 0,
|
||||
status: 'sold',
|
||||
productCode: 'FJ-QH20-500',
|
||||
productName: '汾酒 青花 20',
|
||||
series: '青花20',
|
||||
@@ -249,6 +251,7 @@ List<Override> _overrides() => [
|
||||
stockValue: 2640000,
|
||||
inStockQty: 18920,
|
||||
shortageCount: 17,
|
||||
soldCount: 17,
|
||||
warningCount: 6,
|
||||
// 月初快照 → 环比 ▲2.3% / ▲1.1% / ▼0.6%(对齐原型示例文案)
|
||||
lastMonthSku: 1255,
|
||||
|
||||
@@ -22,6 +22,7 @@ const _items = [
|
||||
id: 1,
|
||||
productId: 1,
|
||||
quantity: 128,
|
||||
status: 'on_sale',
|
||||
productCode: 'MT-FT-500',
|
||||
productName: '茅台 飞天 53°',
|
||||
series: '飞天',
|
||||
@@ -76,6 +77,7 @@ const _items = [
|
||||
id: 8,
|
||||
productId: 8,
|
||||
quantity: 0,
|
||||
status: 'sold',
|
||||
productCode: 'FJ-QH20-500',
|
||||
productName: '汾酒 青花 20',
|
||||
series: '青花20',
|
||||
@@ -172,6 +174,7 @@ List<Override> _overrides() => [
|
||||
stockValue: 2640000,
|
||||
inStockQty: 18920,
|
||||
shortageCount: 17,
|
||||
soldCount: 17,
|
||||
warningCount: 6,
|
||||
lastMonthSku: 1255,
|
||||
lastMonthValue: 2611276,
|
||||
|
||||
@@ -51,6 +51,7 @@ class _FakeInvRepo implements InventoryRepository {
|
||||
String? code,
|
||||
List<String>? series,
|
||||
List<String>? spec,
|
||||
String? status,
|
||||
int page = 1,
|
||||
int pageSize = 50,
|
||||
}) async =>
|
||||
|
||||
@@ -99,6 +99,7 @@ class _FakeInventoryRepository extends InventoryRepository {
|
||||
String? code,
|
||||
List<String>? series,
|
||||
List<String>? spec,
|
||||
String? status,
|
||||
int page = 1,
|
||||
int pageSize = 50,
|
||||
}) async {
|
||||
|
||||