@chenchaolong/plugin-trade-compliance-workbench 1.0.1 → 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.
- package/README.md +46 -1
- package/dist/assets/branding/yuneec-logo.png +0 -0
- package/dist/assets/templates/CI.xlsx +0 -0
- package/dist/assets/templates/CUSTOMS_DECLARATION.xlsx +0 -0
- package/dist/assets/templates/PI.xlsx +0 -0
- package/dist/assets/templates/PL.xlsx +0 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/adapters/file-storage.d.ts +4 -2
- package/dist/lib/adapters/file-storage.d.ts.map +1 -1
- package/dist/lib/adapters/file-storage.js +25 -10
- package/dist/lib/adapters/file-storage.js.map +1 -1
- package/dist/lib/adapters/hsbianma.provider.d.ts +1 -0
- package/dist/lib/adapters/hsbianma.provider.d.ts.map +1 -1
- package/dist/lib/adapters/hsbianma.provider.js +32 -3
- package/dist/lib/adapters/hsbianma.provider.js.map +1 -1
- package/dist/lib/adapters/translation.provider.d.ts +3 -0
- package/dist/lib/adapters/translation.provider.d.ts.map +1 -1
- package/dist/lib/adapters/translation.provider.js +15 -6
- package/dist/lib/adapters/translation.provider.js.map +1 -1
- package/dist/lib/constants.d.ts +1 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +1 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/demo-data.definitions.d.ts +28 -0
- package/dist/lib/demo-data.definitions.d.ts.map +1 -0
- package/dist/lib/demo-data.definitions.js +236 -0
- package/dist/lib/demo-data.definitions.js.map +1 -0
- package/dist/lib/demo-data.entity.d.ts +9 -0
- package/dist/lib/demo-data.entity.d.ts.map +1 -0
- package/dist/lib/demo-data.entity.js +24 -0
- package/dist/lib/demo-data.entity.js.map +1 -0
- package/dist/lib/demo-data.ids.d.ts +4 -0
- package/dist/lib/demo-data.ids.d.ts.map +1 -0
- package/dist/lib/demo-data.ids.js +19 -0
- package/dist/lib/demo-data.ids.js.map +1 -0
- package/dist/lib/demo-data.service.d.ts +26 -0
- package/dist/lib/demo-data.service.d.ts.map +1 -0
- package/dist/lib/demo-data.service.js +124 -0
- package/dist/lib/demo-data.service.js.map +1 -0
- package/dist/lib/domain/default-settings.d.ts +1 -0
- package/dist/lib/domain/default-settings.d.ts.map +1 -1
- package/dist/lib/domain/default-settings.js +1 -0
- package/dist/lib/domain/default-settings.js.map +1 -1
- package/dist/lib/domain/risk-notice.d.ts +59 -0
- package/dist/lib/domain/risk-notice.d.ts.map +1 -0
- package/dist/lib/domain/risk-notice.js +30 -0
- package/dist/lib/domain/risk-notice.js.map +1 -0
- package/dist/lib/entities/catalog.entity.d.ts.map +1 -1
- package/dist/lib/entities/catalog.entity.js +4 -2
- package/dist/lib/entities/catalog.entity.js.map +1 -1
- package/dist/lib/entities/customer.entity.d.ts +9 -2
- package/dist/lib/entities/customer.entity.d.ts.map +1 -1
- package/dist/lib/entities/customer.entity.js +29 -1
- package/dist/lib/entities/customer.entity.js.map +1 -1
- package/dist/lib/entities/index.d.ts +2 -2
- package/dist/lib/entities/index.d.ts.map +1 -1
- package/dist/lib/entities/index.js +2 -2
- package/dist/lib/entities/index.js.map +1 -1
- package/dist/lib/entities/procurement.entity.d.ts +6 -4
- package/dist/lib/entities/procurement.entity.d.ts.map +1 -1
- package/dist/lib/entities/procurement.entity.js +9 -1
- package/dist/lib/entities/procurement.entity.js.map +1 -1
- package/dist/lib/entities/settings.entity.d.ts +12 -2
- package/dist/lib/entities/settings.entity.d.ts.map +1 -1
- package/dist/lib/entities/settings.entity.js +40 -0
- package/dist/lib/entities/settings.entity.js.map +1 -1
- package/dist/lib/entities/shared.entity.d.ts +10 -5
- package/dist/lib/entities/shared.entity.d.ts.map +1 -1
- package/dist/lib/entities/shared.entity.js +22 -1
- package/dist/lib/entities/shared.entity.js.map +1 -1
- package/dist/lib/remote-components/trade-compliance-workbench/app.css +1 -0
- package/dist/lib/remote-components/trade-compliance-workbench/app.js +63 -277
- package/dist/lib/remote-ui/analytics-contracts.d.ts +106 -0
- package/dist/lib/remote-ui/analytics-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/analytics-contracts.js +4 -0
- package/dist/lib/remote-ui/analytics-contracts.js.map +1 -0
- package/dist/lib/remote-ui/app-source.d.ts +2 -0
- package/dist/lib/remote-ui/app-source.d.ts.map +1 -0
- package/dist/lib/remote-ui/app-source.js +753 -0
- package/dist/lib/remote-ui/app-source.js.map +1 -0
- package/dist/lib/remote-ui/bridge.d.ts +36 -0
- package/dist/lib/remote-ui/bridge.d.ts.map +1 -0
- package/dist/lib/remote-ui/bridge.js +159 -0
- package/dist/lib/remote-ui/bridge.js.map +1 -0
- package/dist/lib/remote-ui/components/data-grid.d.ts +34 -0
- package/dist/lib/remote-ui/components/data-grid.d.ts.map +1 -0
- package/dist/lib/remote-ui/components/data-grid.js +59 -0
- package/dist/lib/remote-ui/components/data-grid.js.map +1 -0
- package/dist/lib/remote-ui/components/forms.d.ts +63 -0
- package/dist/lib/remote-ui/components/forms.d.ts.map +1 -0
- package/dist/lib/remote-ui/components/forms.js +117 -0
- package/dist/lib/remote-ui/components/forms.js.map +1 -0
- package/dist/lib/remote-ui/components/layout.d.ts +34 -0
- package/dist/lib/remote-ui/components/layout.d.ts.map +1 -0
- package/dist/lib/remote-ui/components/layout.js +89 -0
- package/dist/lib/remote-ui/components/layout.js.map +1 -0
- package/dist/lib/remote-ui/contract-import.d.ts +82 -0
- package/dist/lib/remote-ui/contract-import.d.ts.map +1 -0
- package/dist/lib/remote-ui/contract-import.js +102 -0
- package/dist/lib/remote-ui/contract-import.js.map +1 -0
- package/dist/lib/remote-ui/contracts.d.ts +257 -0
- package/dist/lib/remote-ui/contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/contracts.js +12 -0
- package/dist/lib/remote-ui/contracts.js.map +1 -0
- package/dist/lib/remote-ui/customer-contract-contracts.d.ts +227 -0
- package/dist/lib/remote-ui/customer-contract-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/customer-contract-contracts.js +10 -0
- package/dist/lib/remote-ui/customer-contract-contracts.js.map +1 -0
- package/dist/lib/remote-ui/model.d.ts +31 -0
- package/dist/lib/remote-ui/model.d.ts.map +1 -0
- package/dist/lib/remote-ui/model.js +248 -0
- package/dist/lib/remote-ui/model.js.map +1 -0
- package/dist/lib/remote-ui/pages/analytics.d.ts +12 -0
- package/dist/lib/remote-ui/pages/analytics.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/analytics.js +123 -0
- package/dist/lib/remote-ui/pages/analytics.js.map +1 -0
- package/dist/lib/remote-ui/pages/catalogs.d.ts +225 -0
- package/dist/lib/remote-ui/pages/catalogs.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/catalogs.js +572 -0
- package/dist/lib/remote-ui/pages/catalogs.js.map +1 -0
- package/dist/lib/remote-ui/pages/contracts.d.ts +80 -0
- package/dist/lib/remote-ui/pages/contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/contracts.js +396 -0
- package/dist/lib/remote-ui/pages/contracts.js.map +1 -0
- package/dist/lib/remote-ui/pages/files.d.ts +31 -0
- package/dist/lib/remote-ui/pages/files.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/files.js +64 -0
- package/dist/lib/remote-ui/pages/files.js.map +1 -0
- package/dist/lib/remote-ui/pages/home.d.ts +71 -0
- package/dist/lib/remote-ui/pages/home.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/home.js +136 -0
- package/dist/lib/remote-ui/pages/home.js.map +1 -0
- package/dist/lib/remote-ui/pages/procurement.d.ts +36 -0
- package/dist/lib/remote-ui/pages/procurement.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/procurement.js +370 -0
- package/dist/lib/remote-ui/pages/procurement.js.map +1 -0
- package/dist/lib/remote-ui/pages/sales.d.ts +12 -0
- package/dist/lib/remote-ui/pages/sales.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/sales.js +106 -0
- package/dist/lib/remote-ui/pages/sales.js.map +1 -0
- package/dist/lib/remote-ui/pages/settings.d.ts +34 -0
- package/dist/lib/remote-ui/pages/settings.d.ts.map +1 -0
- package/dist/lib/remote-ui/pages/settings.js +259 -0
- package/dist/lib/remote-ui/pages/settings.js.map +1 -0
- package/dist/lib/remote-ui/procurement-contracts.d.ts +177 -0
- package/dist/lib/remote-ui/procurement-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/procurement-contracts.js +2 -0
- package/dist/lib/remote-ui/procurement-contracts.js.map +1 -0
- package/dist/lib/remote-ui/sales-contracts.d.ts +133 -0
- package/dist/lib/remote-ui/sales-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/sales-contracts.js +2 -0
- package/dist/lib/remote-ui/sales-contracts.js.map +1 -0
- package/dist/lib/remote-ui/settings-contracts.d.ts +114 -0
- package/dist/lib/remote-ui/settings-contracts.d.ts.map +1 -0
- package/dist/lib/remote-ui/settings-contracts.js +6 -0
- package/dist/lib/remote-ui/settings-contracts.js.map +1 -0
- package/dist/lib/remote-ui/upload-policy.d.ts +18 -0
- package/dist/lib/remote-ui/upload-policy.d.ts.map +1 -0
- package/dist/lib/remote-ui/upload-policy.js +56 -0
- package/dist/lib/remote-ui/upload-policy.js.map +1 -0
- package/dist/lib/runtime-validation.d.ts +61 -0
- package/dist/lib/runtime-validation.d.ts.map +1 -0
- package/dist/lib/runtime-validation.js +243 -0
- package/dist/lib/runtime-validation.js.map +1 -0
- package/dist/lib/sales-file.service.d.ts +54 -6
- package/dist/lib/sales-file.service.d.ts.map +1 -1
- package/dist/lib/sales-file.service.js +278 -33
- package/dist/lib/sales-file.service.js.map +1 -1
- package/dist/lib/trade-compliance.config.d.ts +32 -0
- package/dist/lib/trade-compliance.config.d.ts.map +1 -1
- package/dist/lib/trade-compliance.config.js +16 -4
- package/dist/lib/trade-compliance.config.js.map +1 -1
- package/dist/lib/types.d.ts +253 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +24 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/workbench-view.provider.d.ts +675 -38
- package/dist/lib/workbench-view.provider.d.ts.map +1 -1
- package/dist/lib/workbench-view.provider.js +411 -40
- package/dist/lib/workbench-view.provider.js.map +1 -1
- package/dist/lib/workbench.middleware.d.ts +70 -19
- package/dist/lib/workbench.middleware.d.ts.map +1 -1
- package/dist/lib/workbench.middleware.js +5 -1
- package/dist/lib/workbench.middleware.js.map +1 -1
- package/dist/lib/workbench.plugin.d.ts.map +1 -1
- package/dist/lib/workbench.plugin.js +6 -4
- package/dist/lib/workbench.plugin.js.map +1 -1
- package/dist/lib/workbench.service.d.ts +629 -48
- package/dist/lib/workbench.service.d.ts.map +1 -1
- package/dist/lib/workbench.service.js +1818 -300
- package/dist/lib/workbench.service.js.map +1 -1
- package/package.json +15 -4
- 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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"}
|