@posx/core 5.5.392 → 5.5.395

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CLAUDE.md +23 -23
  2. package/LICENSE +21 -21
  3. package/README.md +85 -85
  4. package/build/index.d.ts +6 -0
  5. package/build/index.js +1 -1
  6. package/jest.config.cjs +36 -36
  7. package/jest.setup.cjs +80 -80
  8. package/memo/technical-docs/01_ARCHITECTURE.md +147 -0
  9. package/memo/technical-docs/02_CORE_BUSINESS.md +292 -0
  10. package/memo/technical-docs/03_UI_COMPONENTS.md +59 -0
  11. package/memo/technical-docs/04_VIEWS.md +82 -0
  12. package/memo/technical-docs/05_DATA_LAYER.md +375 -0
  13. package/memo/technical-docs/06_CROSS_PLATFORM.md +246 -0
  14. package/memo/technical-docs/07_SIMILARITY_INDEX.md +195 -0
  15. package/memo/technical-docs/CHECKPOINT.md +46 -0
  16. package/memo/technical-docs/PROJECT_OVERVIEW.md +122 -0
  17. package/memo/technical-docs/TECHNICAL_DOCS_PLAN.md +77 -0
  18. package/package.json +1 -1
  19. package/package.publish.json +121 -120
  20. package/tsdown.config.ts +21 -21
  21. package/vite.config.ts +86 -86
  22. package/dev/.stfolder/syncthing-folder-9a95b7.txt +0 -5
  23. package/dev/98894488.xlsx +0 -0
  24. package/dev/HappyThaiSembawang.csv +0 -336
  25. package/dev/KB/create-new-model.md +0 -34
  26. package/dev/KB/markdown-lint.md +0 -14
  27. package/dev/KB/readmefirst.md +0 -6
  28. package/dev/Merchants/HappyThaiSembawang.csv +0 -400
  29. package/dev/Merchants/HappyThaiSembawang.xlsx +0 -0
  30. package/dev/Product_Import_Template.xlsx +0 -0
  31. package/dev/XPOS Invoice Module.pdf +0 -232
  32. package/dev/harbor-harness-deployment.md +0 -78
  33. package/dev/nginx-harbor-harness.conf +0 -84
  34. package/dev/test-logs/2026-02.md +0 -5
  35. package/dev//344/272/247/345/223/201/345/257/274/345/205/245/346/250/241/346/235/277.xlsx +0 -0
@@ -0,0 +1,246 @@
1
+ # 06 - 跨平台能力
2
+
3
+ > AI 上下文索引:Capacitor、Electron、ESC/POS、打印机、Socket、字符编码
4
+
5
+ ## 跨平台概述
6
+
7
+ 本库支持多平台运行:Web、Electron、Capacitor (iOS/Android)
8
+
9
+ ## 1. Capacitor 插件
10
+
11
+ **依赖:** `@capacitor/core@5.4.2`, `@awesome-cordova-plugins/network-interface@6.6.0`
12
+
13
+ ### 网络接口
14
+
15
+ **位置:** `src/services/printer.service.ts`
16
+
17
+ ```typescript
18
+ import { NetworkInterface } from '@awesome-cordova-plugins/network-interface';
19
+
20
+ // 获取 WiFi IP 地址
21
+ const ipAddress: NetworkInfo = await NetworkInterface.getWiFiIPAddress();
22
+ ```
23
+
24
+ **用途:**
25
+ - 检测设备 WiFi IP
26
+ - 计算子网掩码
27
+ - 扫描子网发现打印机
28
+
29
+ ## 2. Electron 集成
30
+
31
+ ### 类型定义
32
+
33
+ **位置:** `src/libs/electron.d.ts`
34
+
35
+ ```typescript
36
+ interface Window {
37
+ electronSocket: {
38
+ open: (host: string, port: number) => Promise<boolean>;
39
+ write: (data: number[]) => Promise<boolean>;
40
+ close: () => Promise<boolean>;
41
+ shutdownWrite: () => Promise<boolean>;
42
+ onData: (callback) => void;
43
+ onClose: (callback) => void;
44
+ onError: (callback) => void;
45
+ onEvent: (callback) => () => void;
46
+ };
47
+ }
48
+ ```
49
+
50
+ ### Socket 桥接
51
+
52
+ **位置:** `src/libs/electron.socket.ts`
53
+
54
+ **状态机:**
55
+ ```
56
+ CLOSED (0) → OPENING (1) → OPENED (2) → CLOSING (3)
57
+ ```
58
+
59
+ **回调系统:**
60
+ ```typescript
61
+ public onData: ((data: Uint8Array) => void) | null = null;
62
+ public onClose: ((hadError: boolean) => void) | null = null;
63
+ public onError: ((error: string) => void) | null = null;
64
+ ```
65
+
66
+ **方法:**
67
+ - `open(host, port, success?, error?)` - 建立连接
68
+ - `write(data, success?, error?)` - 发送数据
69
+ - `close(success?, error?)` - 关闭连接
70
+
71
+ **初始化:**
72
+ ```typescript
73
+ // service.factory.ts
74
+ ElectronSocket.setWindow(win);
75
+ ```
76
+
77
+ ## 3. 打印机硬件
78
+
79
+ ### ESC/POS 实现
80
+
81
+ **位置:** `src/libs/escpos.printer.ts`
82
+
83
+ **Socket 抽象:**
84
+ ```typescript
85
+ function getSocket(): any {
86
+ return typeof Socket === 'undefined' ? new ElectronSocket() : new Socket();
87
+ }
88
+ ```
89
+
90
+ ### 连接类型
91
+
92
+ ```typescript
93
+ enum PrinterConnections {
94
+ USB,
95
+ WINDOWS_DRIVER,
96
+ ETHERNET, // 主要用于网络打印机
97
+ BLUETOOTH,
98
+ BUILTIN
99
+ }
100
+ ```
101
+
102
+ ### 打印协议
103
+
104
+ ```typescript
105
+ enum PrinterProtocols {
106
+ ESCPOS, // 收据打印机、厨显
107
+ TSPL // 标签打印机
108
+ }
109
+ ```
110
+
111
+ ### 打印操作
112
+
113
+ | 方法 | 功能 |
114
+ |------|------|
115
+ | `testPrint(template)` | 测试打印 |
116
+ | `connect(ip, port, timeout)` | TCP 连接 |
117
+ | `write(resultByte, timeout)` | 发送命令 |
118
+ | `interpret(template)` | 编码打印命令 |
119
+
120
+ ### 高级打印功能
121
+
122
+ - 自定义字体大小
123
+ - 表格 (列宽计算)
124
+ - QR 码 & 条形码
125
+ - 图片 (多种抖动算法)
126
+ - 钱箱控制
127
+ - 文本换行
128
+
129
+ ### 字符编码支持
130
+
131
+ **位置:** `src/libs/viscii.encoding.ts`
132
+
133
+ ```typescript
134
+ enum Codepages {
135
+ SimplifiedChinese = 'cp936',
136
+ TraditionalChinese = 'cp950',
137
+ Japanese = 'shiftjis',
138
+ Vietnamese = 'windows1258',
139
+ // ... 20+ 国际编码
140
+ }
141
+ ```
142
+
143
+ **越南语 VISCII:**
144
+ - UTF-8 到 VISCII 转换
145
+ - 100+ 越南语字符映射
146
+ - 不支持字符回退到 ASCII
147
+
148
+ ## 4. 打印机服务
149
+
150
+ **位置:** `src/services/printer.service.ts`
151
+
152
+ ### 网络发现
153
+
154
+ ```typescript
155
+ searchPrinters(refresh: boolean, port: number): Promise<string[]>
156
+ ```
157
+
158
+ **流程:**
159
+ 1. 获取设备 WiFi IP
160
+ 2. 计算子网掩码
161
+ 3. TCP 扫描端口 1-254
162
+ 4. 缓存结果到本地数据库
163
+
164
+ ### 设备管理
165
+
166
+ - `getPhysicalPrintersFromNode()` - 查询连接的打印机
167
+ - `getUnpairedNode()` - 发现未配对节点
168
+ - `pairNode(nodeUid)` - 配对设备
169
+
170
+ ### 打印机配置
171
+
172
+ ```typescript
173
+ interface IPrinter {
174
+ device_uid: string;
175
+ type: PrinterType; // Receipt, Kitchen, Kiosk, Label
176
+ protocol: PrinterProtocols; // ESCPOS, TSPL
177
+ connection_type: PrinterConnections;
178
+ driver_printer_name: string;
179
+ ip_address?: string;
180
+ print_sequence?: number;
181
+ retries: number;
182
+ print_times: number;
183
+ }
184
+ ```
185
+
186
+ ### 打印任务队列
187
+
188
+ ```typescript
189
+ interface IPrintJob {
190
+ printer_uid: string;
191
+ connection_type: PrinterConnections;
192
+ protocol: PrinterProtocols;
193
+ device_uid_to_print: string;
194
+ save_only: boolean;
195
+ status: PrintJobStatus; // queued, printed, failed, expired
196
+ }
197
+ ```
198
+
199
+ ## 5. 离线支持
200
+
201
+ ### Dexie 集成
202
+
203
+ - **离线优先架构** 使用 IndexedDB
204
+ - 28 个数据库版本,自动迁移
205
+ - 打印机、打印任务、配置等表
206
+ - 离线时支持打印队列
207
+
208
+ ## 6. 未实现功能
209
+
210
+ | 功能 | 状态 |
211
+ |------|------|
212
+ | CodePush | 未实现 |
213
+ | 热更新 | 未实现 |
214
+ | 动态 Bundle 加载 | 未实现 |
215
+
216
+ 更新通过标准应用商店渠道处理。
217
+
218
+ ## 能力汇总
219
+
220
+ | 能力 | 实现 | 状态 |
221
+ |------|------|------|
222
+ | Capacitor | v5.4.2 - 网络插件 | ✅ 活跃 |
223
+ | Electron | IPC Socket 桥接 | ✅ 活跃 |
224
+ | 原生桥接 | ElectronSocket 抽象 | ✅ 活跃 |
225
+ | 打印协议 | ESC/POS, TSPL | ✅ 活跃 |
226
+ | 设备检测 | Cordova NetworkInterface | ✅ 活跃 |
227
+ | 字符编码 | VISCII, UTF-8, 20+ 编码 | ✅ 活跃 |
228
+ | 离线支持 | Dexie IndexedDB | ✅ 活跃 |
229
+ | CodePush | - | ❌ 未实现 |
230
+
231
+ ## 关键文件
232
+
233
+ | 文件 | 行数 | 职责 |
234
+ |------|------|------|
235
+ | `src/libs/electron.socket.ts` | 93 | 跨平台核心 |
236
+ | `src/libs/escpos.printer.ts` | 563 | 打印机硬件 |
237
+ | `src/services/printer.service.ts` | 200+ | 网络检测 |
238
+ | `src/types/printer.type.ts` | 325+ | 配置类型 |
239
+ | `src/libs/viscii.encoding.ts` | 55 | 编码支持 |
240
+ | `src/service.factory.ts` | 175 | 服务设置 |
241
+
242
+ ## 相关文档
243
+
244
+ - [01_ARCHITECTURE.md](./01_ARCHITECTURE.md) - 整体架构
245
+ - [02_CORE_BUSINESS.md](./02_CORE_BUSINESS.md) - 核心业务 (打印部分)
246
+ - [05_DATA_LAYER.md](./05_DATA_LAYER.md) - 数据层
@@ -0,0 +1,195 @@
1
+ # 07 - 相似性索引
2
+
3
+ > AI 上下文索引:功能对照、服务模式、代码复用、架构模式
4
+
5
+ ## 服务层模式对照
6
+
7
+ ### 基础服务模式
8
+
9
+ 所有领域服务继承相同的基础架构:
10
+
11
+ | 模式 | 基类 | 特点 |
12
+ |------|------|------|
13
+ | 本地服务 | AppLocalService | 仅本地 CRUD,无远程调用 |
14
+ | 远程服务 | AppRemoteService | CRUD + API 同步 |
15
+ | 计算服务 | InvoiceBaseService | 复杂业务计算 |
16
+
17
+ ### 服务对照表
18
+
19
+ | 服务 | 基类 | CRUD | API 同步 | 特殊功能 |
20
+ |------|------|------|---------|---------|
21
+ | ItemService | AppRemoteService | ✓ | ✓ | 条码搜索 |
22
+ | CategoryService | AppRemoteService | ✓ | ✓ | 序列排序 |
23
+ | SectionService | AppRemoteService | ✓ | ✓ | 序列排序 |
24
+ | SectionItemService | AppRemoteService | ✓ | ✓ | 桌位管理 |
25
+ | InvoiceService | 多层继承 | ✓ | ✓ | 计算引擎 |
26
+ | EmployeeService | AppRemoteService | ✓ | ✓ | 密码哈希 |
27
+ | ConfigService | AppRemoteService | ✓ | ✓ | 配置验证 |
28
+ | PrinterService | AppRemoteService | ✓ | ✓ | 网络发现 |
29
+ | PrintJobService | AppRemoteService | ✓ | ✓ | 队列管理 |
30
+ | ReportService | AppRemoteService | ✓ | ✓ | 聚合计算 |
31
+
32
+ ## 数据模型模式
33
+
34
+ ### 基础模型继承
35
+
36
+ ```
37
+ IAppCoreModel
38
+
39
+ └── IAppBaseModel (+ name)
40
+
41
+ └── IAppExtraModel (+ description)
42
+ ```
43
+
44
+ ### 模型对照
45
+
46
+ | 模型 | 基类 | 额外字段 | 软删除 |
47
+ |------|------|---------|--------|
48
+ | Item | IAppExtraModel | barcode, codename, price | ✓ |
49
+ | Category | IAppBaseModel | sequence | ✓ |
50
+ | Section | IAppBaseModel | sequence | ✓ |
51
+ | Invoice | IAppCoreModel | status, type, lines | ✓ |
52
+ | Employee | IAppCoreModel | password, role_uid | ✓ |
53
+ | Printer | IAppBaseModel | ip_address, type | ✓ |
54
+ | PrintJob | IAppCoreModel | status, template | ✓ |
55
+
56
+ ## 功能模式对照
57
+
58
+ ### CRUD 操作模式
59
+
60
+ 所有服务共享统一的 CRUD 模式:
61
+
62
+ ```typescript
63
+ // 创建
64
+ await service.saveOne(entity);
65
+
66
+ // 读取
67
+ await service.getOne(uid);
68
+ await service.getAll();
69
+ await service.getMany(params, options);
70
+
71
+ // 更新
72
+ await service.updateOne(id, changes);
73
+
74
+ // 删除
75
+ await service.deleteOne(entity); // 软删除
76
+ await service.hardDeleteOne(entity); // 硬删除
77
+ ```
78
+
79
+ ### 序列排序模式
80
+
81
+ 以下实体共享序列排序功能:
82
+
83
+ | 实体 | 索引字段 | 用途 |
84
+ |------|---------|------|
85
+ | Item | sequence | 商品排序 |
86
+ | Category | sequence | 分类排序 |
87
+ | Section | sequence | 区域排序 |
88
+ | SectionItem | sequence | 桌位排序 |
89
+ | PaymentMethod | sequence | 支付方式排序 |
90
+
91
+ ### 状态管理模式
92
+
93
+ **发票状态:**
94
+ ```
95
+ Open → OnHold → Paying → Paid/Void
96
+ ```
97
+
98
+ **班次状态:**
99
+ ```
100
+ Open → Closed
101
+ ```
102
+
103
+ **打印任务状态:**
104
+ ```
105
+ queued → printing → printed/failed/expired
106
+ ```
107
+
108
+ ## 打印相关对照
109
+
110
+ ### 打印机类型对照
111
+
112
+ | 类型 | 用途 | 模板 | 协议 |
113
+ |------|------|------|------|
114
+ | ReceiptPrinter | 收据 | 收据模板 | ESC/POS |
115
+ | KitchenPrinter | 厨房 | 厨房模板 | ESC/POS |
116
+ | LabelPrinter | 标签 | 标签模板 | TSPL |
117
+ | KioskPrinter | 自助 | 收据模板 | ESC/POS |
118
+ | OrderPrinter | 订单 | 订单模板 | ESC/POS |
119
+
120
+ ### 连接类型对照
121
+
122
+ | 类型 | 平台 | 用途 |
123
+ |------|------|------|
124
+ | ETHERNET | 全平台 | 网络打印机 |
125
+ | USB | Electron | USB 打印机 |
126
+ | BLUETOOTH | Mobile | 蓝牙打印机 |
127
+ | WINDOWS_DRIVER | Windows | 系统驱动 |
128
+
129
+ ## 计算模式对照
130
+
131
+ ### 金额计算流程
132
+
133
+ | 阶段 | 方法 | 输入 | 输出 |
134
+ |------|------|------|------|
135
+ | 行计算 | calculateLines() | 行项 | 行小计 |
136
+ | 折扣 | calculateDiscount() | 小计 | 折扣后金额 |
137
+ | 服务费 | calculateServiceCharge() | 小计 | +服务费 |
138
+ | 税费 | calculateTax() | 金额 | +税费 |
139
+ | 舍入 | calculateRounding() | 总计 | 舍入后总计 |
140
+
141
+ ### 折扣计算流程对照
142
+
143
+ | CalcFlow | 应用时机 | 用例 |
144
+ |----------|---------|------|
145
+ | AfterSubtotal | 小计后 | 一般折扣 |
146
+ | AfterServiceCharge | 服务费后 | 会员折扣 |
147
+ | AfterGrandTotal | 总计后 | 现金折扣 |
148
+
149
+ ## 复用指南
150
+
151
+ ### 添加新服务
152
+
153
+ 1. 创建类型定义 `src/types/xxx.type.ts`
154
+ 2. 继承 `AppRemoteService<T>`
155
+ 3. 在 `serviceProvider` Map 注册
156
+ 4. 在 `dbSchemas` 添加表结构
157
+
158
+ ### 添加新模型
159
+
160
+ 1. 继承 `IAppBaseModel` 或 `IAppCoreModel`
161
+ 2. 定义 UID 前缀
162
+ 3. 实现类继承 `AppBaseModel`
163
+
164
+ ### 添加新打印模板
165
+
166
+ 1. 在 `configs/` 添加 JSON 模板
167
+ 2. 定义 Handlebars 模板内容
168
+ 3. 注册到 PrintTemplateService
169
+
170
+ ## 文件对照
171
+
172
+ ### 服务文件
173
+
174
+ | 文件 | 服务数量 | 复杂度 |
175
+ |------|---------|--------|
176
+ | app.service.ts | 16 | 高 |
177
+ | invoice.service.ts | 3 (继承链) | 非常高 |
178
+ | printer.service.ts | 1 | 中 |
179
+ | ods.service.ts | 1 | 低 |
180
+ | abstract.service.ts | 3 (基类) | 中 |
181
+
182
+ ### 类型文件
183
+
184
+ | 文件 | 接口数量 | 行数 |
185
+ |------|---------|------|
186
+ | invoice.type.ts | 15+ | ~540 |
187
+ | config.type.ts | 20+ | ~760 |
188
+ | product.type.ts | 10+ | ~600 |
189
+ | printer.type.ts | 8+ | ~350 |
190
+
191
+ ## 相关文档
192
+
193
+ - [01_ARCHITECTURE.md](./01_ARCHITECTURE.md) - 整体架构
194
+ - [02_CORE_BUSINESS.md](./02_CORE_BUSINESS.md) - 核心业务
195
+ - [05_DATA_LAYER.md](./05_DATA_LAYER.md) - 数据层
@@ -0,0 +1,46 @@
1
+ # 文档检查点
2
+
3
+ ## 当前基准
4
+
5
+ | 项目 | 值 |
6
+ |------|---|
7
+ | 分支 | develop |
8
+ | Commit | `59212b4da4c2850861bf04bf35f2cf34246b3a2b` |
9
+ | 短 Hash | `59212b4` |
10
+ | 时间 | 2026-01-20 16:18:57 +0800 |
11
+ | 消息 | 5.5.388 |
12
+
13
+ ## 文档完成状态
14
+
15
+ | 文档 | 状态 | 日期 |
16
+ |------|------|------|
17
+ | PROJECT_OVERVIEW.md | ✅ 完成 | 2026-01-22 |
18
+ | 01_ARCHITECTURE.md | ✅ 完成 | 2026-01-22 |
19
+ | 02_CORE_BUSINESS.md | ✅ 完成 | 2026-01-22 |
20
+ | 03_UI_COMPONENTS.md | ✅ 完成 | 2026-01-22 |
21
+ | 04_VIEWS.md | ✅ 完成 | 2026-01-22 |
22
+ | 05_DATA_LAYER.md | ✅ 完成 | 2026-01-22 |
23
+ | 06_CROSS_PLATFORM.md | ✅ 完成 | 2026-01-22 |
24
+ | 07_SIMILARITY_INDEX.md | ✅ 完成 | 2026-01-22 |
25
+ | TECHNICAL_DOCS_PLAN.md | ✅ 完成 | 2026-01-22 |
26
+
27
+ ## 后续更新
28
+
29
+ 当代码有重大变更时,可以从此 commit 对比差异,更新相关文档:
30
+
31
+ ```bash
32
+ git diff 59212b4..HEAD --stat
33
+ git diff 59212b4..HEAD --name-only
34
+ ```
35
+
36
+ ### 变更分类指南
37
+
38
+ | 变更路径 | 影响文档 |
39
+ |---------|---------|
40
+ | `src/service.factory.ts` | 01_ARCHITECTURE.md, 05_DATA_LAYER.md |
41
+ | `src/services/*.ts` | 02_CORE_BUSINESS.md |
42
+ | `src/types/*.ts` | 05_DATA_LAYER.md, 07_SIMILARITY_INDEX.md |
43
+ | `src/libs/electron*.ts` | 06_CROSS_PLATFORM.md |
44
+ | `src/libs/escpos*.ts` | 06_CROSS_PLATFORM.md |
45
+ | `src/utils/*.ts` | 05_DATA_LAYER.md |
46
+ | `package.json` (依赖) | PROJECT_OVERVIEW.md |
@@ -0,0 +1,122 @@
1
+ # XPOS Core - 项目总览
2
+
3
+ > AI 上下文索引:POS系统、核心库、TypeScript、Dexie、服务工厂、发票计算、打印服务
4
+
5
+ ## 项目定位
6
+
7
+ **名称:** `@posx/core`
8
+ **版本:** 5.5.388
9
+ **定位:** POSX 核心业务库 - 为 POS 系统提供核心功能的 TypeScript 库
10
+
11
+ ## 技术栈
12
+
13
+ | 类型 | 技术 | 版本 |
14
+ |------|------|------|
15
+ | 语言 | TypeScript | 5.6.3 |
16
+ | 构建工具 | tsdown | 0.16.1 |
17
+ | 二次构建 | Vite | 5.4.11 |
18
+ | 代码混淆 | vite-plugin-bundle-obfuscator | 1.8.0 |
19
+ | 测试框架 | Jest + Vitest | 30.2.0 / 2.1.0 |
20
+ | 数据库 | Dexie (IndexedDB) | 3.2.4 |
21
+ | HTTP | Axios | 1.5.1 |
22
+ | 实时通信 | SignalR | 7.0.11 |
23
+ | 跨平台 | Capacitor + Cordova | 5.4.2 / 6.6.0 |
24
+
25
+ ## 核心依赖
26
+
27
+ - **数据处理:** lodash, dayjs, uuid, nanoid
28
+ - **加密:** bcryptjs, crypto-js
29
+ - **验证:** zod, ajv
30
+ - **导出:** xlsx
31
+ - **打印:** esc-pos-encoder-ionic
32
+ - **模板:** handlebars
33
+
34
+ ## 项目结构
35
+
36
+ ```
37
+ xpos-core/
38
+ ├── src/ # 源代码
39
+ │ ├── index.ts # 主入口 (barrel exports)
40
+ │ ├── service.factory.ts # 服务工厂 (依赖注入)
41
+ │ ├── services/ # 核心服务
42
+ │ │ ├── abstract.service.ts # 基础服务接口
43
+ │ │ ├── app.service.ts # 应用服务 (1800+ 行)
44
+ │ │ ├── invoice.service.ts # 发票服务 (2800+ 行)
45
+ │ │ ├── printer.service.ts # 打印服务
46
+ │ │ ├── ods.service.ts # 订单显示服务
47
+ │ │ └── misc.service.ts # 杂项工具
48
+ │ ├── types/ # 类型定义 (23 文件)
49
+ │ ├── utils/ # 工具函数 (6 文件)
50
+ │ ├── libs/ # 库抽象 (5 文件)
51
+ │ ├── helpers/ # 辅助函数 (3 文件)
52
+ │ └── test/ # 测试文件
53
+ ├── configs/ # 打印模板 (31 JSON)
54
+ ├── scripts/ # 构建脚本 (8 文件)
55
+ ├── build/ # 编译输出
56
+ └── docs/ # TypeDoc 文档
57
+ ```
58
+
59
+ ## 服务架构
60
+
61
+ ### 服务工厂
62
+
63
+ `ServiceFactory` 提供依赖注入,管理 18 个核心服务:
64
+
65
+ | 服务 | 职责 |
66
+ |------|------|
67
+ | ItemService | 商品管理 |
68
+ | CategoryService | 分类管理 |
69
+ | SectionService | 区域管理 |
70
+ | SectionItemService | 桌位管理 |
71
+ | InvoiceService | 发票计算与生命周期 |
72
+ | EmployeeService | 员工认证与管理 |
73
+ | PaymentMethodService | 支付方式 |
74
+ | ConfigService | 配置管理 |
75
+ | PrinterService | 打印机管理 |
76
+ | PrintJobService | 打印任务队列 |
77
+ | PrintTemplateService | 打印模板 |
78
+ | ShiftService | 班次管理 |
79
+ | TillService | 收银机管理 |
80
+ | ReportService | 报表服务 |
81
+ | EmployeeRoleService | 角色权限 |
82
+ | OrderDisplayService | 厨显系统 |
83
+ | StorageService | 通用存储 |
84
+ | MenuService | 菜单管理 |
85
+
86
+ ## 数据管理
87
+
88
+ - **本地存储:** Dexie (IndexedDB) - 28 张表
89
+ - **远程同步:** REST API + SignalR
90
+ - **查询过滤:** 自定义 FindOptions (Include, In, Between, Not, Raw)
91
+
92
+ ## 业务实体
93
+
94
+ 核心管理 15+ 业务实体:
95
+ - 商品/产品/分类
96
+ - 客户/优惠券
97
+ - 员工/角色
98
+ - 发票/支付
99
+ - 打印机/打印任务
100
+ - 班次/收银机
101
+ - 报表/存储/菜单
102
+
103
+ ## 构建流程
104
+
105
+ ```bash
106
+ npm run build # tsdown 主构建
107
+ npm run build:dts # 类型声明
108
+ npm run build:demo # Vite 演示构建
109
+ npm run test # Jest 单元测试
110
+ npm run docs # TypeDoc 文档
111
+ ```
112
+
113
+ **输出:**
114
+ - ESM Bundle: `build/index.js` (混淆)
115
+ - 类型声明: `build/index.d.ts`
116
+
117
+ ## 相关文档
118
+
119
+ - [01_ARCHITECTURE.md](./01_ARCHITECTURE.md) - 整体架构
120
+ - [02_CORE_BUSINESS.md](./02_CORE_BUSINESS.md) - 核心业务
121
+ - [05_DATA_LAYER.md](./05_DATA_LAYER.md) - 数据层
122
+ - [06_CROSS_PLATFORM.md](./06_CROSS_PLATFORM.md) - 跨平台
@@ -0,0 +1,77 @@
1
+ # 技术文档计划
2
+
3
+ ## 文档结构
4
+
5
+ ```
6
+ memo/technical-docs/
7
+ ├── PROJECT_OVERVIEW.md # 项目总览
8
+ ├── 01_ARCHITECTURE.md # 整体架构
9
+ ├── 02_CORE_BUSINESS.md # 核心业务逻辑
10
+ ├── 03_UI_COMPONENTS.md # UI 组件 (本项目为库,无 UI)
11
+ ├── 04_VIEWS.md # 页面实现 (本项目为库,无页面)
12
+ ├── 05_DATA_LAYER.md # 数据层
13
+ ├── 06_CROSS_PLATFORM.md # 跨平台能力
14
+ ├── 07_SIMILARITY_INDEX.md # 相似性索引
15
+ ├── CHECKPOINT.md # 检查点
16
+ └── TECHNICAL_DOCS_PLAN.md # 本文档
17
+ ```
18
+
19
+ ## 文档用途
20
+
21
+ | 文档 | 目标读者 | 主要内容 |
22
+ |------|---------|---------|
23
+ | PROJECT_OVERVIEW | 新成员 | 项目定位、技术栈、结构概览 |
24
+ | 01_ARCHITECTURE | 架构师 | 服务工厂、数据库架构、事件驱动 |
25
+ | 02_CORE_BUSINESS | 开发者 | 发票计算、支付、打印、同步 |
26
+ | 03_UI_COMPONENTS | - | 说明本项目无 UI 组件 |
27
+ | 04_VIEWS | - | 说明本项目无页面 |
28
+ | 05_DATA_LAYER | 后端开发 | Dexie、API、类型系统 |
29
+ | 06_CROSS_PLATFORM | 移动开发 | Capacitor、Electron、打印机 |
30
+ | 07_SIMILARITY_INDEX | 全体 | 模式对照、复用指南 |
31
+
32
+ ## 更新策略
33
+
34
+ ### 触发条件
35
+
36
+ 1. **版本发布时** - 检查 CHECKPOINT,对比差异
37
+ 2. **重大变更后** - 影响架构的变更需更新文档
38
+ 3. **定期审查** - 每月检查文档准确性
39
+
40
+ ### 更新流程
41
+
42
+ ```bash
43
+ # 1. 检查变更范围
44
+ git diff <checkpoint_commit>..HEAD --name-only
45
+
46
+ # 2. 根据变更分类确定需更新的文档
47
+ # 参考 CHECKPOINT.md 中的变更分类指南
48
+
49
+ # 3. 更新相关文档
50
+
51
+ # 4. 更新 CHECKPOINT.md 中的 commit 信息
52
+ ```
53
+
54
+ ## 编写规范
55
+
56
+ ### 格式要求
57
+
58
+ 1. **标题** - 使用 `#` 层次结构
59
+ 2. **AI 索引** - 每篇开头添加关键词
60
+ 3. **表格** - 优先使用表格展示结构化信息
61
+ 4. **代码** - 仅在关键处展示代码片段
62
+ 5. **路径** - 包含文件路径便于定位
63
+ 6. **交叉引用** - 文档间使用相对链接
64
+
65
+ ### 语言规范
66
+
67
+ - 技术术语使用英文
68
+ - 描述性文字使用中文
69
+ - 优化 AI 阅读理解
70
+
71
+ ## 项目特点说明
72
+
73
+ 本项目 `@posx/core` 是 TypeScript 核心库,不是前端应用:
74
+
75
+ - **无 UI 组件** - 03_UI_COMPONENTS.md 仅说明类型定义
76
+ - **无页面视图** - 04_VIEWS.md 仅说明服务架构
77
+ - **重点文档** - 01, 02, 05, 06 是核心文档
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@posx/core",
3
- "version": "5.5.392",
3
+ "version": "5.5.395",
4
4
  "description": "POSX core libraries",
5
5
  "main": "./build/index.js",
6
6
  "author": "Steven Lee",