feat(client): 出入库列表按原型重建(KPI/详情抽屉/详细搜索/工具栏/选中复制/窗口尺寸)

- 列表重建:KPI 卡、状态+时间列、操作改眼睛开右侧详情抽屉、重置右置
- 详情抽屉(order_detail_drawer) 100% 还原原型 + SelectionArea 可选中复制
- 详细搜索弹窗:ComboSearchField/滚轮日期、字段重构、白底盒子按钮
- 工具栏:搜索框×清除+占位精简、供应商/客户下拉取全部、状态菜单收窄
- 加载不白屏(半透明遮罩)、输入框与下拉等高、windows/macOS 默认窗口尺寸调大

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-07-02 08:48:01 +08:00
parent 998bbab546
commit a3a722689e
42 changed files with 3689 additions and 1961 deletions
@@ -39,6 +39,10 @@ class SearchableOptionField extends StatelessWidget {
final bool isRequired;
final bool isDense;
/// 带框样式(OutlineInputBorder);默认 false 沿用主题下划线。
/// 详细搜索等「表单里与文本框并列」的场景传 true,视觉统一为带框。
final bool bordered;
/// 可选:搜索无匹配时「新增到基础数据」。回调收到当前关键字(用户可在确认框里改),
/// 创建成功返回新选项 id(自动选中),失败/取消返回 null。为空则不显示新增入口。
final Future<int?> Function(String keyword)? onCreate;
@@ -55,6 +59,7 @@ class SearchableOptionField extends StatelessWidget {
required this.onChanged,
this.isRequired = false,
this.isDense = true,
this.bordered = false,
this.onCreate,
this.onSearch,
});
@@ -96,6 +101,7 @@ class SearchableOptionField extends StatelessWidget {
child: InputDecorator(
decoration: InputDecoration(
isDense: isDense,
border: bordered ? const OutlineInputBorder() : null,
errorText: state.errorText,
suffixIcon: selected
? GestureDetector(