@chenchaolong/plugin-trade-compliance-workbench 1.0.0 → 1.0.2

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 (194) hide show
  1. package/README.md +46 -1
  2. package/dist/assets/branding/yuneec-logo.png +0 -0
  3. package/dist/assets/templates/CI.xlsx +0 -0
  4. package/dist/assets/templates/CUSTOMS_DECLARATION.xlsx +0 -0
  5. package/dist/assets/templates/PI.xlsx +0 -0
  6. package/dist/assets/templates/PL.xlsx +0 -0
  7. package/dist/index.d.ts +14 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/lib/adapters/file-storage.d.ts +4 -2
  10. package/dist/lib/adapters/file-storage.d.ts.map +1 -1
  11. package/dist/lib/adapters/file-storage.js +25 -10
  12. package/dist/lib/adapters/file-storage.js.map +1 -1
  13. package/dist/lib/adapters/hsbianma.provider.d.ts +1 -0
  14. package/dist/lib/adapters/hsbianma.provider.d.ts.map +1 -1
  15. package/dist/lib/adapters/hsbianma.provider.js +32 -3
  16. package/dist/lib/adapters/hsbianma.provider.js.map +1 -1
  17. package/dist/lib/adapters/translation.provider.d.ts +3 -0
  18. package/dist/lib/adapters/translation.provider.d.ts.map +1 -1
  19. package/dist/lib/adapters/translation.provider.js +15 -6
  20. package/dist/lib/adapters/translation.provider.js.map +1 -1
  21. package/dist/lib/constants.d.ts +3 -2
  22. package/dist/lib/constants.d.ts.map +1 -1
  23. package/dist/lib/constants.js +3 -2
  24. package/dist/lib/constants.js.map +1 -1
  25. package/dist/lib/demo-data.definitions.d.ts +28 -0
  26. package/dist/lib/demo-data.definitions.d.ts.map +1 -0
  27. package/dist/lib/demo-data.definitions.js +236 -0
  28. package/dist/lib/demo-data.definitions.js.map +1 -0
  29. package/dist/lib/demo-data.entity.d.ts +9 -0
  30. package/dist/lib/demo-data.entity.d.ts.map +1 -0
  31. package/dist/lib/demo-data.entity.js +24 -0
  32. package/dist/lib/demo-data.entity.js.map +1 -0
  33. package/dist/lib/demo-data.ids.d.ts +4 -0
  34. package/dist/lib/demo-data.ids.d.ts.map +1 -0
  35. package/dist/lib/demo-data.ids.js +19 -0
  36. package/dist/lib/demo-data.ids.js.map +1 -0
  37. package/dist/lib/demo-data.service.d.ts +26 -0
  38. package/dist/lib/demo-data.service.d.ts.map +1 -0
  39. package/dist/lib/demo-data.service.js +124 -0
  40. package/dist/lib/demo-data.service.js.map +1 -0
  41. package/dist/lib/domain/default-settings.d.ts +1 -0
  42. package/dist/lib/domain/default-settings.d.ts.map +1 -1
  43. package/dist/lib/domain/default-settings.js +1 -0
  44. package/dist/lib/domain/default-settings.js.map +1 -1
  45. package/dist/lib/domain/risk-notice.d.ts +59 -0
  46. package/dist/lib/domain/risk-notice.d.ts.map +1 -0
  47. package/dist/lib/domain/risk-notice.js +30 -0
  48. package/dist/lib/domain/risk-notice.js.map +1 -0
  49. package/dist/lib/entities/catalog.entity.d.ts.map +1 -1
  50. package/dist/lib/entities/catalog.entity.js +4 -2
  51. package/dist/lib/entities/catalog.entity.js.map +1 -1
  52. package/dist/lib/entities/customer.entity.d.ts +9 -2
  53. package/dist/lib/entities/customer.entity.d.ts.map +1 -1
  54. package/dist/lib/entities/customer.entity.js +29 -1
  55. package/dist/lib/entities/customer.entity.js.map +1 -1
  56. package/dist/lib/entities/index.d.ts +2 -2
  57. package/dist/lib/entities/index.d.ts.map +1 -1
  58. package/dist/lib/entities/index.js +2 -2
  59. package/dist/lib/entities/index.js.map +1 -1
  60. package/dist/lib/entities/procurement.entity.d.ts +6 -4
  61. package/dist/lib/entities/procurement.entity.d.ts.map +1 -1
  62. package/dist/lib/entities/procurement.entity.js +9 -1
  63. package/dist/lib/entities/procurement.entity.js.map +1 -1
  64. package/dist/lib/entities/settings.entity.d.ts +12 -2
  65. package/dist/lib/entities/settings.entity.d.ts.map +1 -1
  66. package/dist/lib/entities/settings.entity.js +40 -0
  67. package/dist/lib/entities/settings.entity.js.map +1 -1
  68. package/dist/lib/entities/shared.entity.d.ts +10 -5
  69. package/dist/lib/entities/shared.entity.d.ts.map +1 -1
  70. package/dist/lib/entities/shared.entity.js +22 -1
  71. package/dist/lib/entities/shared.entity.js.map +1 -1
  72. package/dist/lib/remote-components/trade-compliance-workbench/app.css +1 -0
  73. package/dist/lib/remote-components/trade-compliance-workbench/app.js +63 -277
  74. package/dist/lib/remote-ui/analytics-contracts.d.ts +106 -0
  75. package/dist/lib/remote-ui/analytics-contracts.d.ts.map +1 -0
  76. package/dist/lib/remote-ui/analytics-contracts.js +4 -0
  77. package/dist/lib/remote-ui/analytics-contracts.js.map +1 -0
  78. package/dist/lib/remote-ui/app-source.d.ts +2 -0
  79. package/dist/lib/remote-ui/app-source.d.ts.map +1 -0
  80. package/dist/lib/remote-ui/app-source.js +753 -0
  81. package/dist/lib/remote-ui/app-source.js.map +1 -0
  82. package/dist/lib/remote-ui/bridge.d.ts +36 -0
  83. package/dist/lib/remote-ui/bridge.d.ts.map +1 -0
  84. package/dist/lib/remote-ui/bridge.js +159 -0
  85. package/dist/lib/remote-ui/bridge.js.map +1 -0
  86. package/dist/lib/remote-ui/components/data-grid.d.ts +34 -0
  87. package/dist/lib/remote-ui/components/data-grid.d.ts.map +1 -0
  88. package/dist/lib/remote-ui/components/data-grid.js +59 -0
  89. package/dist/lib/remote-ui/components/data-grid.js.map +1 -0
  90. package/dist/lib/remote-ui/components/forms.d.ts +63 -0
  91. package/dist/lib/remote-ui/components/forms.d.ts.map +1 -0
  92. package/dist/lib/remote-ui/components/forms.js +117 -0
  93. package/dist/lib/remote-ui/components/forms.js.map +1 -0
  94. package/dist/lib/remote-ui/components/layout.d.ts +34 -0
  95. package/dist/lib/remote-ui/components/layout.d.ts.map +1 -0
  96. package/dist/lib/remote-ui/components/layout.js +89 -0
  97. package/dist/lib/remote-ui/components/layout.js.map +1 -0
  98. package/dist/lib/remote-ui/contract-import.d.ts +82 -0
  99. package/dist/lib/remote-ui/contract-import.d.ts.map +1 -0
  100. package/dist/lib/remote-ui/contract-import.js +102 -0
  101. package/dist/lib/remote-ui/contract-import.js.map +1 -0
  102. package/dist/lib/remote-ui/contracts.d.ts +257 -0
  103. package/dist/lib/remote-ui/contracts.d.ts.map +1 -0
  104. package/dist/lib/remote-ui/contracts.js +12 -0
  105. package/dist/lib/remote-ui/contracts.js.map +1 -0
  106. package/dist/lib/remote-ui/customer-contract-contracts.d.ts +227 -0
  107. package/dist/lib/remote-ui/customer-contract-contracts.d.ts.map +1 -0
  108. package/dist/lib/remote-ui/customer-contract-contracts.js +10 -0
  109. package/dist/lib/remote-ui/customer-contract-contracts.js.map +1 -0
  110. package/dist/lib/remote-ui/model.d.ts +31 -0
  111. package/dist/lib/remote-ui/model.d.ts.map +1 -0
  112. package/dist/lib/remote-ui/model.js +248 -0
  113. package/dist/lib/remote-ui/model.js.map +1 -0
  114. package/dist/lib/remote-ui/pages/analytics.d.ts +12 -0
  115. package/dist/lib/remote-ui/pages/analytics.d.ts.map +1 -0
  116. package/dist/lib/remote-ui/pages/analytics.js +123 -0
  117. package/dist/lib/remote-ui/pages/analytics.js.map +1 -0
  118. package/dist/lib/remote-ui/pages/catalogs.d.ts +225 -0
  119. package/dist/lib/remote-ui/pages/catalogs.d.ts.map +1 -0
  120. package/dist/lib/remote-ui/pages/catalogs.js +572 -0
  121. package/dist/lib/remote-ui/pages/catalogs.js.map +1 -0
  122. package/dist/lib/remote-ui/pages/contracts.d.ts +80 -0
  123. package/dist/lib/remote-ui/pages/contracts.d.ts.map +1 -0
  124. package/dist/lib/remote-ui/pages/contracts.js +396 -0
  125. package/dist/lib/remote-ui/pages/contracts.js.map +1 -0
  126. package/dist/lib/remote-ui/pages/files.d.ts +31 -0
  127. package/dist/lib/remote-ui/pages/files.d.ts.map +1 -0
  128. package/dist/lib/remote-ui/pages/files.js +64 -0
  129. package/dist/lib/remote-ui/pages/files.js.map +1 -0
  130. package/dist/lib/remote-ui/pages/home.d.ts +71 -0
  131. package/dist/lib/remote-ui/pages/home.d.ts.map +1 -0
  132. package/dist/lib/remote-ui/pages/home.js +136 -0
  133. package/dist/lib/remote-ui/pages/home.js.map +1 -0
  134. package/dist/lib/remote-ui/pages/procurement.d.ts +36 -0
  135. package/dist/lib/remote-ui/pages/procurement.d.ts.map +1 -0
  136. package/dist/lib/remote-ui/pages/procurement.js +370 -0
  137. package/dist/lib/remote-ui/pages/procurement.js.map +1 -0
  138. package/dist/lib/remote-ui/pages/sales.d.ts +12 -0
  139. package/dist/lib/remote-ui/pages/sales.d.ts.map +1 -0
  140. package/dist/lib/remote-ui/pages/sales.js +106 -0
  141. package/dist/lib/remote-ui/pages/sales.js.map +1 -0
  142. package/dist/lib/remote-ui/pages/settings.d.ts +34 -0
  143. package/dist/lib/remote-ui/pages/settings.d.ts.map +1 -0
  144. package/dist/lib/remote-ui/pages/settings.js +259 -0
  145. package/dist/lib/remote-ui/pages/settings.js.map +1 -0
  146. package/dist/lib/remote-ui/procurement-contracts.d.ts +177 -0
  147. package/dist/lib/remote-ui/procurement-contracts.d.ts.map +1 -0
  148. package/dist/lib/remote-ui/procurement-contracts.js +2 -0
  149. package/dist/lib/remote-ui/procurement-contracts.js.map +1 -0
  150. package/dist/lib/remote-ui/sales-contracts.d.ts +133 -0
  151. package/dist/lib/remote-ui/sales-contracts.d.ts.map +1 -0
  152. package/dist/lib/remote-ui/sales-contracts.js +2 -0
  153. package/dist/lib/remote-ui/sales-contracts.js.map +1 -0
  154. package/dist/lib/remote-ui/settings-contracts.d.ts +114 -0
  155. package/dist/lib/remote-ui/settings-contracts.d.ts.map +1 -0
  156. package/dist/lib/remote-ui/settings-contracts.js +6 -0
  157. package/dist/lib/remote-ui/settings-contracts.js.map +1 -0
  158. package/dist/lib/remote-ui/upload-policy.d.ts +18 -0
  159. package/dist/lib/remote-ui/upload-policy.d.ts.map +1 -0
  160. package/dist/lib/remote-ui/upload-policy.js +56 -0
  161. package/dist/lib/remote-ui/upload-policy.js.map +1 -0
  162. package/dist/lib/runtime-validation.d.ts +61 -0
  163. package/dist/lib/runtime-validation.d.ts.map +1 -0
  164. package/dist/lib/runtime-validation.js +243 -0
  165. package/dist/lib/runtime-validation.js.map +1 -0
  166. package/dist/lib/sales-file.service.d.ts +54 -6
  167. package/dist/lib/sales-file.service.d.ts.map +1 -1
  168. package/dist/lib/sales-file.service.js +278 -33
  169. package/dist/lib/sales-file.service.js.map +1 -1
  170. package/dist/lib/trade-compliance.config.d.ts +32 -0
  171. package/dist/lib/trade-compliance.config.d.ts.map +1 -1
  172. package/dist/lib/trade-compliance.config.js +16 -4
  173. package/dist/lib/trade-compliance.config.js.map +1 -1
  174. package/dist/lib/types.d.ts +253 -1
  175. package/dist/lib/types.d.ts.map +1 -1
  176. package/dist/lib/types.js +24 -0
  177. package/dist/lib/types.js.map +1 -1
  178. package/dist/lib/workbench-view.provider.d.ts +675 -38
  179. package/dist/lib/workbench-view.provider.d.ts.map +1 -1
  180. package/dist/lib/workbench-view.provider.js +411 -40
  181. package/dist/lib/workbench-view.provider.js.map +1 -1
  182. package/dist/lib/workbench.middleware.d.ts +70 -19
  183. package/dist/lib/workbench.middleware.d.ts.map +1 -1
  184. package/dist/lib/workbench.middleware.js +5 -1
  185. package/dist/lib/workbench.middleware.js.map +1 -1
  186. package/dist/lib/workbench.plugin.d.ts.map +1 -1
  187. package/dist/lib/workbench.plugin.js +6 -4
  188. package/dist/lib/workbench.plugin.js.map +1 -1
  189. package/dist/lib/workbench.service.d.ts +629 -48
  190. package/dist/lib/workbench.service.d.ts.map +1 -1
  191. package/dist/lib/workbench.service.js +1818 -300
  192. package/dist/lib/workbench.service.js.map +1 -1
  193. package/package.json +15 -4
  194. package/scripts/seed-demo-data.mjs +138 -0
@@ -0,0 +1,248 @@
1
+ import { DEFAULT_UPLOAD_POLICY, normalizeUploadPolicy } from './upload-policy.js';
2
+ const collection = () => ({ items: [] });
3
+ export function emptyWorkbenchData() {
4
+ return {
5
+ uploadPolicy: { ...DEFAULT_UPLOAD_POLICY },
6
+ dashboard: {},
7
+ controlledGoods: collection(),
8
+ controlledBatches: collection(),
9
+ sanctionedCompanies: collection(),
10
+ sanctionBatches: collection(),
11
+ suppliers: collection(),
12
+ purchaseOrders: collection(),
13
+ purchaseLines: collection(),
14
+ customers: collection(),
15
+ customerContracts: collection(),
16
+ derivedSalesOrders: [],
17
+ salesCustomers: collection(),
18
+ salesOrders: collection(),
19
+ salesLines: collection(),
20
+ salesFileOrders: collection(),
21
+ generatedFiles: collection(),
22
+ settings: {
23
+ risk: { content: '', revision: 0 },
24
+ company: { logoFileId: null, companyNameZh: null, companyNameEn: null, unifiedSocialCreditCode: null, addressZh: null, addressEn: null, phone: null, email: null, revision: 0 },
25
+ banks: [],
26
+ profit: { status: 'UNCONFIGURED', ruleVersion: 'COMPLIANCE_V1', minimumOrderProfitRate: '0.05', exchangeCostMinimum: '5', exchangeCostMaximum: '8', revision: 0 },
27
+ rates: []
28
+ },
29
+ analytics: { mode: 'PURCHASE', currentYear: Number(new Intl.DateTimeFormat('en-US', { timeZone: 'Asia/Shanghai', year: 'numeric' }).format(new Date())), dimension: 'SUPPLIER', metrics: { orderTotalCny: '0.00', paidCny: '0.00', unpaidCny: '0.00', refundedCny: '0.00', unrefundedCny: '0.00' }, top5: [], details: { items: [], page: 1, pageSize: 20, total: 0, pageCount: 1 } },
30
+ importTasks: collection()
31
+ };
32
+ }
33
+ export function normalizeWorkbenchData(value) {
34
+ const root = asRecord(unwrapResponse(value));
35
+ const source = asRecord(root.summary ?? root);
36
+ const fallback = emptyWorkbenchData();
37
+ return {
38
+ ...fallback,
39
+ ...source,
40
+ uploadPolicy: normalizeUploadPolicy(source.uploadPolicy),
41
+ controlledGoods: normalizeCollection(source.controlledGoods),
42
+ controlledBatches: normalizeCollection(source.controlledBatches),
43
+ sanctionedCompanies: normalizeCollection(source.sanctionedCompanies),
44
+ sanctionBatches: normalizeCollection(source.sanctionBatches),
45
+ suppliers: normalizeCollection(source.suppliers),
46
+ purchaseOrders: normalizeCollection(source.purchaseOrders),
47
+ purchaseLines: normalizeCollection(source.purchaseLines),
48
+ customers: normalizeCollection(source.customers),
49
+ customerContracts: normalizeCollection(source.customerContracts),
50
+ derivedSalesOrders: Array.isArray(source.derivedSalesOrders) ? source.derivedSalesOrders : [],
51
+ salesCustomers: normalizeCollection(source.salesCustomers),
52
+ salesOrders: normalizeCollection(source.salesOrders),
53
+ salesLines: normalizeCollection(source.salesLines),
54
+ salesFileOrders: normalizeCollection(source.salesFileOrders),
55
+ generatedFiles: normalizeCollection(source.generatedFiles),
56
+ settings: normalizeSettings(source.settings),
57
+ importTasks: normalizeCollection(source.importTasks),
58
+ dashboard: asRecord(source.dashboard),
59
+ analytics: normalizeAnalytics(source.analytics)
60
+ };
61
+ }
62
+ export function applyFilters(rows, filters, mappings) {
63
+ const active = Object.entries(filters).filter(([, value]) => hasFilterValue(value));
64
+ if (!active.length)
65
+ return [...rows];
66
+ return rows.filter((row) => active.every(([key, filter]) => {
67
+ const mapping = mappings[key];
68
+ if (!mapping)
69
+ return true;
70
+ const value = readValue(row, mapping.accessor);
71
+ if (mapping.type === 'range')
72
+ return isRange(filter) && matchesRange(value, filter);
73
+ if (mapping.type === 'exact')
74
+ return value === filter;
75
+ return !isRange(filter) && normalizeText(value).includes(normalizeText(filter));
76
+ }));
77
+ }
78
+ export function paginate(rows, requestedPage = 1, requestedPageSize = 20) {
79
+ const pageSize = Number.isFinite(requestedPageSize) && requestedPageSize > 0 ? Math.floor(requestedPageSize) : 20;
80
+ const total = rows.length;
81
+ const pageCount = Math.max(1, Math.ceil(total / pageSize));
82
+ const page = Math.min(pageCount, Math.max(1, Number.isFinite(requestedPage) ? Math.floor(requestedPage) : 1));
83
+ const start = (page - 1) * pageSize;
84
+ return { items: rows.slice(start, start + pageSize), page, pageSize, total, pageCount };
85
+ }
86
+ export function createLatestRequestGate() {
87
+ let latestRequestId = 0;
88
+ const activeRequests = new Set();
89
+ return {
90
+ begin() {
91
+ const requestId = ++latestRequestId;
92
+ activeRequests.add(requestId);
93
+ return requestId;
94
+ },
95
+ isLatest(requestId) {
96
+ return requestId === latestRequestId;
97
+ },
98
+ commit(requestId) {
99
+ return requestId === latestRequestId;
100
+ },
101
+ finish(requestId) {
102
+ activeRequests.delete(requestId);
103
+ },
104
+ activeCount() {
105
+ return activeRequests.size;
106
+ }
107
+ };
108
+ }
109
+ export function createLatestCommittedRequest(initial) {
110
+ let latestRequestId = 0;
111
+ let committedValue = initial;
112
+ const activeRequests = new Set();
113
+ const candidates = new Map();
114
+ return {
115
+ begin(candidate) {
116
+ const requestId = ++latestRequestId;
117
+ activeRequests.add(requestId);
118
+ candidates.set(requestId, candidate);
119
+ return requestId;
120
+ },
121
+ isLatest(requestId) { return requestId === latestRequestId; },
122
+ commit(requestId) {
123
+ if (requestId !== latestRequestId)
124
+ return false;
125
+ const candidate = candidates.get(requestId);
126
+ if (candidate === undefined)
127
+ return false;
128
+ committedValue = candidate;
129
+ return true;
130
+ },
131
+ finish(requestId) {
132
+ activeRequests.delete(requestId);
133
+ candidates.delete(requestId);
134
+ },
135
+ activeCount() { return activeRequests.size; },
136
+ committed() { return committedValue; }
137
+ };
138
+ }
139
+ export function createBlobUrlOwner(revoke = url => URL.revokeObjectURL(url)) {
140
+ const slots = new Map();
141
+ const release = (url) => { if (url?.startsWith('blob:'))
142
+ revoke(url); };
143
+ return {
144
+ replace(slot, url) {
145
+ const previous = slots.get(slot);
146
+ if (previous !== url)
147
+ release(previous);
148
+ slots.set(slot, url);
149
+ return url;
150
+ },
151
+ clear(slot) {
152
+ release(slots.get(slot));
153
+ slots.delete(slot);
154
+ },
155
+ current(slot) { return slots.get(slot) ?? null; },
156
+ dispose() {
157
+ for (const url of slots.values())
158
+ release(url);
159
+ slots.clear();
160
+ }
161
+ };
162
+ }
163
+ export function routeDataRequest(route, page = 1, pageSize = 20, filters = {}) {
164
+ if (route.type === 'procurement' && route.level === 'suppliers')
165
+ return { page, pageSize, parameters: { collection: 'suppliers', filters } };
166
+ if (route.type === 'procurement' && route.level === 'orders')
167
+ return { page, pageSize, parameters: { collection: 'purchaseOrders', supplierId: route.supplierId, filters } };
168
+ if (route.type === 'procurement' && route.level === 'lines')
169
+ return { page, pageSize, parameters: { collection: 'purchaseLines', purchaseOrderId: route.orderId, filters } };
170
+ if (route.type === 'page' && route.page === 'customer-contract-review')
171
+ return { page, pageSize, parameters: { collection: 'customerContracts', filters } };
172
+ if (route.type === 'sales' && route.level === 'customers')
173
+ return { page, pageSize, parameters: { collection: 'salesCustomers', filters } };
174
+ if (route.type === 'sales' && route.level === 'orders')
175
+ return { page, pageSize, parameters: { collection: 'salesOrders', customerId: route.customerId, filters } };
176
+ if (route.type === 'sales' && route.level === 'lines')
177
+ return { page, pageSize, parameters: { collection: 'salesLines', customerId: route.customerId, orderKey: route.orderKey, filters } };
178
+ if (route.type === 'page' && route.page === 'sales-files')
179
+ return { page, pageSize, parameters: { collection: 'salesFileOrders', filters } };
180
+ if (route.type === 'page' && route.page === 'analytics') {
181
+ const mode = filters.mode === 'SALES' ? 'SALES' : 'PURCHASE';
182
+ const dimension = filters.dimension === 'PRODUCT' ? 'PRODUCT' : mode === 'SALES' ? 'CUSTOMER' : 'SUPPLIER';
183
+ const { mode: _mode, dimension: _dimension, ...analyticsFilters } = filters;
184
+ return { page, pageSize, parameters: { collection: 'analytics', mode, dimension, filters: analyticsFilters } };
185
+ }
186
+ if (route.type === 'page' && route.page === 'settings')
187
+ return { page, pageSize, parameters: { collection: 'settings' } };
188
+ return null;
189
+ }
190
+ export function unwrapResponse(value) {
191
+ const record = asRecord(value);
192
+ if ('payload' in record)
193
+ return record.payload;
194
+ if ('data' in record)
195
+ return record.data;
196
+ if ('result' in record)
197
+ return record.result;
198
+ return value;
199
+ }
200
+ function normalizeCollection(value) {
201
+ const source = asRecord(value);
202
+ return { ...source, items: Array.isArray(source.items) ? source.items : [] };
203
+ }
204
+ function normalizeSettings(value) {
205
+ const source = asRecord(value);
206
+ const fallback = emptyWorkbenchData().settings;
207
+ return { ...fallback, ...source, risk: { ...fallback.risk, ...asRecord(source.risk) }, company: { ...fallback.company, ...asRecord(source.company) }, profit: { ...fallback.profit, ...asRecord(source.profit) }, banks: Array.isArray(source.banks) ? source.banks : [], rates: Array.isArray(source.rates) ? source.rates : [] };
208
+ }
209
+ function normalizeAnalytics(value) {
210
+ const source = asRecord(value);
211
+ const fallback = emptyWorkbenchData().analytics;
212
+ return { ...fallback, ...source, metrics: asRecord(source.metrics), top5: Array.isArray(source.top5) ? source.top5 : [], details: { ...fallback.details, ...asRecord(source.details), items: Array.isArray(asRecord(source.details).items) ? asRecord(source.details).items : [] } };
213
+ }
214
+ function asRecord(value) {
215
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
216
+ }
217
+ function hasFilterValue(value) {
218
+ if (isRange(value))
219
+ return hasScalar(value.from) || hasScalar(value.to);
220
+ return hasScalar(value);
221
+ }
222
+ function hasScalar(value) {
223
+ return value !== null && value !== undefined && String(value).trim() !== '';
224
+ }
225
+ function isRange(value) {
226
+ return Boolean(value && typeof value === 'object' && !Array.isArray(value));
227
+ }
228
+ function matchesRange(value, range) {
229
+ if (!hasScalar(value))
230
+ return false;
231
+ const comparable = comparableValue(value);
232
+ const from = hasScalar(range.from) ? comparableValue(range.from) : null;
233
+ const to = hasScalar(range.to) ? comparableValue(range.to) : null;
234
+ return (from === null || comparable >= from) && (to === null || comparable <= to);
235
+ }
236
+ function comparableValue(value) {
237
+ const numeric = Number(value);
238
+ return Number.isFinite(numeric) && String(value).trim() !== '' ? numeric : normalizeText(value);
239
+ }
240
+ function normalizeText(value) {
241
+ if (Array.isArray(value))
242
+ return value.map(normalizeText).join(' ');
243
+ return String(value ?? '').trim().toLocaleLowerCase();
244
+ }
245
+ function readValue(row, accessor) {
246
+ return typeof accessor === 'function' ? accessor(row) : row[accessor];
247
+ }
248
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/lib/remote-ui/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { AnalyticsData, AnalyticsDetailRow, AnalyticsExportRequest, AnalyticsProductLine, AnalyticsQuery } from '../analytics-contracts.js';
2
+ export type AnalyticsPageProps = {
3
+ data: AnalyticsData;
4
+ committedQuery?: AnalyticsQuery;
5
+ busy: boolean;
6
+ error: string | null;
7
+ onQuery: (query: AnalyticsQuery) => void | Promise<void>;
8
+ onExportXlsx?: (request: AnalyticsExportRequest) => void | Promise<void>;
9
+ };
10
+ export declare function AnalyticsPage({ data, committedQuery, busy, error, onQuery, onExportXlsx }: AnalyticsPageProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function aggregateProductAnalytics(lines: readonly AnalyticsProductLine[]): AnalyticsDetailRow[];
12
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-ui/pages/analytics.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAsB,sBAAsB,EAAmC,oBAAoB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAGrM,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,aAAa,CAAA;IACnB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzE,CAAA;AAeD,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,kBAAkB,2CA6C7G;AAkFD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,GAAG,kBAAkB,EAAE,CAYtG"}
@@ -0,0 +1,123 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Decimal } from 'decimal.js';
3
+ import React from 'react';
4
+ import { DataGrid, FilterPanel, RiskNotice } from '../components/data-grid.js';
5
+ const purchaseFilters = [
6
+ { type: 'date-range', key: 'orderDate', label: '下单日期' },
7
+ { type: 'text', key: 'supplier', label: '供应商' },
8
+ { type: 'text', key: 'productName', label: '商品名称' },
9
+ { type: 'text', key: 'hsCode', label: '海关编码' }
10
+ ];
11
+ const salesFilters = [
12
+ { type: 'date-range', key: 'orderDate', label: '下单日期' },
13
+ { type: 'text', key: 'customer', label: '客户' },
14
+ { type: 'text', key: 'productName', label: '商品名称' },
15
+ { type: 'text', key: 'hsCode', label: '海关编码' }
16
+ ];
17
+ export function AnalyticsPage({ data, committedQuery, busy, error, onQuery, onExportXlsx }) {
18
+ const fallbackQuery = React.useMemo(() => queryFromData(data), [data.mode, data.dimension, data.details.page, data.details.pageSize]);
19
+ const committed = committedQuery ?? fallbackQuery;
20
+ const [mode, setMode] = React.useState(committed.mode);
21
+ const [dimension, setDimension] = React.useState(committed.dimension);
22
+ const [filters, setFilters] = React.useState(() => filterStateFromQuery(committed));
23
+ React.useEffect(() => {
24
+ setMode(committed.mode);
25
+ setDimension(committed.dimension);
26
+ setFilters(filterStateFromQuery(committed));
27
+ }, [committed]);
28
+ const dimensions = mode === 'PURCHASE' ? [['SUPPLIER', '供应商'], ['PRODUCT', '商品名称']] : [['CUSTOMER', '客户'], ['PRODUCT', '商品名称']];
29
+ const typedFilters = toAnalyticsFilters(filters);
30
+ const queryFor = (nextMode, nextDimension, page, nextFilters) => nextMode === 'PURCHASE'
31
+ ? { mode: nextMode, dimension: nextDimension === 'SUPPLIER' ? 'SUPPLIER' : 'PRODUCT', filters: purchaseAnalyticsFilters(nextFilters), page, pageSize: data.details.pageSize || 20 }
32
+ : { mode: nextMode, dimension: nextDimension === 'CUSTOMER' ? 'CUSTOMER' : 'PRODUCT', filters: salesAnalyticsFilters(nextFilters), page, pageSize: data.details.pageSize || 20 };
33
+ const runQuery = (page = 1, nextMode = mode, nextDimension = dimension) => onQuery(queryFor(nextMode, nextDimension, page, typedFilters));
34
+ const switchMode = (nextMode) => {
35
+ const nextDimension = nextMode === 'PURCHASE' ? 'SUPPLIER' : 'CUSTOMER';
36
+ void onQuery(queryFor(nextMode, nextDimension, 1, {}));
37
+ };
38
+ const switchDimension = (nextDimension) => { void runQuery(1, mode, nextDimension); };
39
+ const productDimension = dimension === 'PRODUCT';
40
+ return _jsxs("section", { className: "tcw-analytics-page", "aria-label": "\u6570\u636E\u5206\u6790", children: [_jsxs("div", { className: "tcw-page-tabs", role: "tablist", "aria-label": "\u5206\u6790\u7C7B\u578B", children: [_jsx("button", { type: "button", role: "tab", "aria-selected": mode === 'PURCHASE', onClick: () => switchMode('PURCHASE'), children: "\u91C7\u8D2D\u5206\u6790" }), _jsx("button", { type: "button", role: "tab", "aria-selected": mode === 'SALES', onClick: () => switchMode('SALES'), children: "\u9500\u552E\u5206\u6790" })] }), _jsxs("div", { className: "tcw-analytics-year", children: [data.currentYear, " \u5E74\u5EA6 \u00B7 Asia/Shanghai"] }), _jsx(FilterPanel, { definitions: mode === 'PURCHASE' ? purchaseFilters : salesFilters, values: filters, onChange: (key, value) => setFilters(current => ({ ...current, [key]: value })), onQuery: () => void runQuery(), onReset: () => { setFilters({}); void onQuery(queryFor(mode, dimension, 1, {})); } }), _jsxs("div", { className: "tcw-analytics-toolbar", children: [_jsx("div", { className: "tcw-segmented-control", role: "group", "aria-label": "\u7EDF\u8BA1\u7EF4\u5EA6", children: dimensions.map(([value, label]) => _jsx("button", { type: "button", "aria-pressed": dimension === value, onClick: () => switchDimension(value), children: label }, value)) }), _jsxs("div", { className: "tcw-analytics-switches", children: [mode === 'PURCHASE' && _jsxs(_Fragment, { children: [_jsx(Toggle, { label: "\u672A\u4ED8\u6B3E", checked: 'unpaidOnly' in typedFilters && typedFilters.unpaidOnly === true, onChange: checked => setFilters(current => ({ ...current, unpaidOnly: checked ? 'true' : '' })) }), _jsx(Toggle, { label: "\u672A\u9000\u7A0E", checked: 'unrefundedOnly' in typedFilters && typedFilters.unrefundedOnly === true, onChange: checked => setFilters(current => ({ ...current, unrefundedOnly: checked ? 'true' : '' })) })] }), mode === 'SALES' && _jsx(Toggle, { label: "\u672A\u6536\u6B3E", checked: 'unreceivedOnly' in typedFilters && typedFilters.unreceivedOnly === true, onChange: checked => setFilters(current => ({ ...current, unreceivedOnly: checked ? 'true' : '' })) })] }), onExportXlsx && _jsxs("button", { type: "button", className: "tcw-button tcw-button--secondary", onClick: () => { const request = queryFor(mode, dimension, 1, typedFilters); void onExportXlsx(request.mode === 'PURCHASE' ? { mode: request.mode, dimension: request.dimension, filters: request.filters, format: 'XLSX' } : { mode: request.mode, dimension: request.dimension, filters: request.filters, format: 'XLSX' }); }, children: [_jsx("i", { className: "ri-file-excel-2-line", "aria-hidden": "true" }), "\u5BFC\u51FA XLSX"] })] }), error && _jsx(RiskNotice, { children: error }), busy && _jsxs("div", { className: "tcw-inline-loading", role: "status", children: [_jsx("span", { className: "tcw-spinner", "aria-hidden": "true" }), "\u6570\u636E\u52A0\u8F7D\u4E2D"] }), _jsx(MetricGrid, { data: data, productDimension: productDimension }), _jsx(TopFive, { items: data.top5 }), _jsx(DataGrid, { columns: detailColumns(mode, dimension), rows: data.details.items, rowKey: "key", pagination: data.details, onPageChange: page => void runQuery(page), emptyText: "\u6682\u65E0\u5206\u6790\u660E\u7EC6" })] });
41
+ }
42
+ function Toggle({ label, checked, onChange }) {
43
+ return _jsxs("label", { className: "tcw-toggle", children: [_jsx("input", { type: "checkbox", checked: checked, onChange: event => onChange(event.target.checked) }), _jsx("span", { children: label })] });
44
+ }
45
+ function MetricGrid({ data, productDimension }) {
46
+ const metrics = data.metrics;
47
+ const entries = productDimension
48
+ ? [['明细金额', metrics.orderTotalCny]]
49
+ : data.mode === 'PURCHASE'
50
+ ? [['订单总额', metrics.orderTotalCny], ['已付款', metrics.paidCny], ['未付款', metrics.unpaidCny], ['已退税', metrics.refundedCny], ['未退税', metrics.unrefundedCny]]
51
+ : [['订单总额', metrics.orderTotalCny], ['已收款', metrics.receivedCny], ['未收款', metrics.unreceivedCny]];
52
+ return _jsx("div", { className: "tcw-metric-grid", children: entries.map(([label, value]) => _jsxs("article", { children: [_jsx("span", { children: label }), _jsxs("strong", { title: `${value ?? '0.00'} CNY`, children: [money(value), " CNY"] })] }, label)) });
53
+ }
54
+ function TopFive({ items }) {
55
+ return _jsxs("section", { className: "tcw-sales-top", children: [_jsx("strong", { children: "\u91D1\u989D TOP5" }), items.length ? _jsx("ol", { children: items.map(item => _jsxs("li", { children: [_jsx("span", { title: item.label, children: item.label }), _jsxs("b", { children: [money(item.amountCny), " CNY"] })] }, item.key)) }) : _jsx("small", { children: "\u5F53\u524D\u7B5B\u9009\u6761\u4EF6\u4E0B\u6682\u65E0\u6392\u540D\u6570\u636E" })] });
56
+ }
57
+ function detailColumns(mode, dimension) {
58
+ const columns = [
59
+ { type: 'ellipsis', key: 'label', header: dimensionLabel(dimension), width: 220, maxWidth: 220 },
60
+ { type: 'text', key: 'orderCount', header: '订单数', width: 100, align: 'right' }
61
+ ];
62
+ if (dimension === 'PRODUCT')
63
+ columns.push({ type: 'text', key: 'productQuantity', header: '商品数量', width: 120, align: 'right' });
64
+ columns.push({ type: 'text', key: 'amountCny', header: dimension === 'PRODUCT' ? '商品明细金额 CNY' : '订单总额 CNY', width: 160, align: 'right', format: money });
65
+ if (dimension !== 'PRODUCT' && mode === 'PURCHASE')
66
+ columns.push({ type: 'text', key: 'paidCny', header: '已付款 CNY', width: 140, align: 'right', format: money }, { type: 'text', key: 'unpaidCny', header: '未付款 CNY', width: 140, align: 'right', format: money }, { type: 'text', key: 'refundedCny', header: '已退税 CNY', width: 140, align: 'right', format: money }, { type: 'text', key: 'unrefundedCny', header: '未退税 CNY', width: 140, align: 'right', format: money });
67
+ if (dimension !== 'PRODUCT' && mode === 'SALES')
68
+ columns.push({ type: 'text', key: 'receivedCny', header: '已收款 CNY', width: 140, align: 'right', format: money }, { type: 'text', key: 'unreceivedCny', header: '未收款 CNY', width: 140, align: 'right', format: money });
69
+ return columns;
70
+ }
71
+ function dimensionLabel(dimension) { return dimension === 'SUPPLIER' ? '供应商' : dimension === 'CUSTOMER' ? '客户' : '商品名称'; }
72
+ function money(value) { const number = Number(value ?? 0); return Number.isFinite(number) ? number.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) : '0.00'; }
73
+ function toAnalyticsFilters(filters) {
74
+ const date = filters.orderDate && typeof filters.orderDate === 'object' ? filters.orderDate : undefined;
75
+ return {
76
+ ...(date ? { orderDate: { from: stringOrUndefined(date.from), to: stringOrUndefined(date.to) } } : {}),
77
+ ...textFilter(filters, 'supplier'), ...textFilter(filters, 'customer'), ...textFilter(filters, 'productName'), ...textFilter(filters, 'hsCode'),
78
+ ...(filters.unpaidOnly === 'true' ? { unpaidOnly: true } : {}),
79
+ ...(filters.unrefundedOnly === 'true' ? { unrefundedOnly: true } : {}),
80
+ ...(filters.unreceivedOnly === 'true' ? { unreceivedOnly: true } : {})
81
+ };
82
+ }
83
+ function purchaseAnalyticsFilters(filters) {
84
+ return { ...('orderDate' in filters && filters.orderDate ? { orderDate: filters.orderDate } : {}), ...('supplier' in filters && filters.supplier ? { supplier: filters.supplier } : {}), ...textAnalyticsFilters(filters), ...('unpaidOnly' in filters && filters.unpaidOnly ? { unpaidOnly: true } : {}), ...('unrefundedOnly' in filters && filters.unrefundedOnly ? { unrefundedOnly: true } : {}) };
85
+ }
86
+ function salesAnalyticsFilters(filters) {
87
+ return { ...('orderDate' in filters && filters.orderDate ? { orderDate: filters.orderDate } : {}), ...('customer' in filters && filters.customer ? { customer: filters.customer } : {}), ...textAnalyticsFilters(filters), ...('unreceivedOnly' in filters && filters.unreceivedOnly ? { unreceivedOnly: true } : {}) };
88
+ }
89
+ function textAnalyticsFilters(filters) { return { ...(filters.productName ? { productName: filters.productName } : {}), ...(filters.hsCode ? { hsCode: filters.hsCode } : {}) }; }
90
+ function textFilter(filters, key) { const value = stringOrUndefined(filters[key]); return value ? { [key]: value } : {}; }
91
+ function stringOrUndefined(value) { const text = String(value ?? '').trim(); return text || undefined; }
92
+ function queryFromData(data) {
93
+ return data.mode === 'PURCHASE'
94
+ ? { mode: 'PURCHASE', dimension: data.dimension === 'PRODUCT' ? 'PRODUCT' : 'SUPPLIER', filters: {}, page: data.details.page, pageSize: data.details.pageSize }
95
+ : { mode: 'SALES', dimension: data.dimension === 'PRODUCT' ? 'PRODUCT' : 'CUSTOMER', filters: {}, page: data.details.page, pageSize: data.details.pageSize };
96
+ }
97
+ function filterStateFromQuery(query) {
98
+ const filters = query.filters;
99
+ return {
100
+ ...(filters.orderDate ? { orderDate: filters.orderDate } : {}),
101
+ ...('supplier' in filters && filters.supplier ? { supplier: filters.supplier } : {}),
102
+ ...('customer' in filters && filters.customer ? { customer: filters.customer } : {}),
103
+ ...(filters.productName ? { productName: filters.productName } : {}),
104
+ ...(filters.hsCode ? { hsCode: filters.hsCode } : {}),
105
+ ...('unpaidOnly' in filters && filters.unpaidOnly ? { unpaidOnly: 'true' } : {}),
106
+ ...('unrefundedOnly' in filters && filters.unrefundedOnly ? { unrefundedOnly: 'true' } : {}),
107
+ ...('unreceivedOnly' in filters && filters.unreceivedOnly ? { unreceivedOnly: 'true' } : {})
108
+ };
109
+ }
110
+ export function aggregateProductAnalytics(lines) {
111
+ const groups = new Map();
112
+ for (const line of lines) {
113
+ const label = line.productName.trim();
114
+ const key = label.toLocaleLowerCase();
115
+ const group = groups.get(key) ?? { label, orders: new Set(), quantity: new Decimal(0), amount: new Decimal(0) };
116
+ group.orders.add(line.orderId);
117
+ group.quantity = group.quantity.plus(line.quantity);
118
+ group.amount = group.amount.plus(line.amountCny);
119
+ groups.set(key, group);
120
+ }
121
+ return [...groups.entries()].sort(([keyA, a], [keyB, b]) => b.amount.cmp(a.amount) || keyA.localeCompare(keyB)).map(([key, group]) => ({ key, label: group.label, orderCount: group.orders.size, productQuantity: group.quantity.toString(), amountCny: group.amount.toFixed(2) }));
122
+ }
123
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../../src/lib/remote-ui/pages/analytics.tsx"],"names":[],"mappings":"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"}