ts-glitter 16.4.2 → 16.4.3
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/lowcode/Entry.js +3 -3
- package/lowcode/Entry.ts +3 -3
- package/lowcode/cms-plugin/module/order-setting.js +20 -2
- package/lowcode/cms-plugin/module/order-setting.ts +19 -2
- package/lowcode/cms-plugin/module/product-excel.js +32 -27
- package/lowcode/cms-plugin/module/product-excel.ts +40 -32
- package/lowcode/cms-plugin/module/product-setting.js +21 -5
- package/lowcode/cms-plugin/module/product-setting.ts +21 -5
- package/lowcode/cms-plugin/shopping-product-setting.ts +0 -1
- package/lowcode/cms-plugin/stock-history.js +1467 -540
- package/lowcode/cms-plugin/stock-history.ts +1530 -556
- package/lowcode/css/editor.css +8 -2
- package/lowcode/glitter-base/route/stock.js +1 -0
- package/lowcode/glitter-base/route/stock.ts +11 -2
- package/lowcode/jspage/function-page/setting_editor.ts +8 -0
- package/package.json +1 -1
- package/src/api-public/controllers/index.js +5 -0
- package/src/api-public/controllers/index.js.map +1 -1
- package/src/api-public/controllers/index.ts +5 -0
- package/src/api-public/controllers/shopee.d.ts +3 -0
- package/src/api-public/controllers/shopee.js +8 -0
- package/src/api-public/controllers/shopee.js.map +1 -0
- package/src/api-public/controllers/shopee.ts +45 -0
- package/src/api-public/controllers/stock.js +1 -0
- package/src/api-public/controllers/stock.js.map +1 -1
- package/src/api-public/controllers/stock.ts +1 -0
- package/src/api-public/services/ai-pointes.js.map +1 -1
- package/src/api-public/services/fake-data-model/fake-order.js.map +1 -1
- package/src/api-public/services/fake-data-model/fake-product.js.map +1 -1
- package/src/api-public/services/shopee.d.ts +7 -0
- package/src/api-public/services/shopee.js +19 -0
- package/src/api-public/services/shopee.js.map +1 -0
- package/src/api-public/services/shopee.ts +37 -0
- package/src/api-public/services/shopping.js +16 -2
- package/src/api-public/services/shopping.js.map +1 -1
- package/src/api-public/services/shopping.ts +23 -2
- package/src/api-public/services/sms-pointes.js.map +1 -1
- package/src/api-public/services/stock.d.ts +10 -1
- package/src/api-public/services/stock.js +136 -7
- package/src/api-public/services/stock.js.map +1 -1
- package/src/api-public/services/stock.ts +174 -17
- package/src/api-public/services/wallet.js.map +1 -1
- package/src/config.d.ts +2 -0
- package/src/config.js +2 -0
- package/src/config.js.map +1 -1
- package/src/config.ts +2 -0
- package/src/modules/tool.d.ts +1 -0
- package/src/modules/tool.js +12 -1
- package/src/modules/tool.js.map +1 -1
- package/src/modules/tool.ts +13 -114
- package/src/services/saas-table-check.js +2 -2
- package/src/services/saas-table-check.js.map +1 -1
|
@@ -8,46 +8,78 @@ import { ApiShop } from '../glitter-base/route/shopping.js';
|
|
|
8
8
|
import { ApiStock } from '../glitter-base/route/stock.js';
|
|
9
9
|
import { StockStores } from './stock-stores.js';
|
|
10
10
|
import { StockVendors } from './stock-vendors.js';
|
|
11
|
+
import { CheckInput } from '../modules/checkInput.js';
|
|
11
12
|
const html = String.raw;
|
|
12
13
|
const typeConfig = {
|
|
13
14
|
restocking: {
|
|
14
15
|
name: '進貨',
|
|
16
|
+
status: {
|
|
17
|
+
0: {
|
|
18
|
+
title: '已完成',
|
|
19
|
+
badge: 'info',
|
|
20
|
+
},
|
|
21
|
+
1: {
|
|
22
|
+
title: '已補貨',
|
|
23
|
+
badge: 'info',
|
|
24
|
+
},
|
|
25
|
+
2: {
|
|
26
|
+
title: '待進貨',
|
|
27
|
+
badge: 'warning',
|
|
28
|
+
},
|
|
29
|
+
3: {
|
|
30
|
+
title: '核對中',
|
|
31
|
+
badge: 'warning',
|
|
32
|
+
},
|
|
33
|
+
4: {
|
|
34
|
+
title: '已暫停',
|
|
35
|
+
badge: 'normal',
|
|
36
|
+
},
|
|
37
|
+
5: {
|
|
38
|
+
title: '待補貨',
|
|
39
|
+
badge: 'notify',
|
|
40
|
+
},
|
|
41
|
+
6: {
|
|
42
|
+
title: '已取消',
|
|
43
|
+
badge: 'notify',
|
|
44
|
+
},
|
|
45
|
+
},
|
|
15
46
|
},
|
|
16
47
|
transfer: {
|
|
17
48
|
name: '調撥',
|
|
49
|
+
status: {
|
|
50
|
+
0: {
|
|
51
|
+
title: '已完成',
|
|
52
|
+
badge: 'info',
|
|
53
|
+
},
|
|
54
|
+
1: {
|
|
55
|
+
title: '已補貨',
|
|
56
|
+
badge: 'info',
|
|
57
|
+
},
|
|
58
|
+
2: {
|
|
59
|
+
title: '待調撥',
|
|
60
|
+
badge: 'warning',
|
|
61
|
+
},
|
|
62
|
+
3: {
|
|
63
|
+
title: '核對中',
|
|
64
|
+
badge: 'warning',
|
|
65
|
+
},
|
|
66
|
+
4: {
|
|
67
|
+
title: '已暫停',
|
|
68
|
+
badge: 'normal',
|
|
69
|
+
},
|
|
70
|
+
5: {
|
|
71
|
+
title: '待補貨',
|
|
72
|
+
badge: 'notify',
|
|
73
|
+
},
|
|
74
|
+
6: {
|
|
75
|
+
title: '已取消',
|
|
76
|
+
badge: 'notify',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
18
79
|
},
|
|
19
80
|
checking: {
|
|
20
81
|
name: '盤點',
|
|
21
|
-
|
|
22
|
-
};
|
|
23
|
-
const statusConfig = {
|
|
24
|
-
0: {
|
|
25
|
-
title: '已完成',
|
|
26
|
-
badge: 'info',
|
|
27
|
-
},
|
|
28
|
-
1: {
|
|
29
|
-
title: '已補貨',
|
|
30
|
-
badge: 'info',
|
|
31
|
-
},
|
|
32
|
-
2: {
|
|
33
|
-
title: '待進貨',
|
|
34
|
-
badge: 'warning',
|
|
35
|
-
},
|
|
36
|
-
3: {
|
|
37
|
-
title: '核對中',
|
|
38
|
-
badge: 'warning',
|
|
39
|
-
},
|
|
40
|
-
4: {
|
|
41
|
-
title: '已暫停',
|
|
42
|
-
badge: 'normal',
|
|
43
|
-
},
|
|
44
|
-
5: {
|
|
45
|
-
title: '待補貨',
|
|
46
|
-
badge: 'notify',
|
|
47
|
-
},
|
|
48
|
-
6: {
|
|
49
|
-
title: '已取消',
|
|
50
|
-
badge: 'notify',
|
|
82
|
+
status: {},
|
|
51
83
|
},
|
|
52
84
|
};
|
|
53
85
|
export class StockHistory {
|
|
@@ -68,6 +100,7 @@ export class StockHistory {
|
|
|
68
100
|
check_according: 'all',
|
|
69
101
|
note: '',
|
|
70
102
|
product_list: [],
|
|
103
|
+
changeLogs: [],
|
|
71
104
|
},
|
|
72
105
|
};
|
|
73
106
|
};
|
|
@@ -96,7 +129,29 @@ export class StockHistory {
|
|
|
96
129
|
return this.checkList(gvc, vm);
|
|
97
130
|
}
|
|
98
131
|
if (vm.view === 'replace') {
|
|
99
|
-
|
|
132
|
+
const glitter = gvc.glitter;
|
|
133
|
+
const dialog = new ShareDialog(glitter);
|
|
134
|
+
dialog.dataLoading({ visible: true });
|
|
135
|
+
return new Promise((resolve) => {
|
|
136
|
+
ApiStock.getStockHistory({
|
|
137
|
+
page: 0,
|
|
138
|
+
limit: 1,
|
|
139
|
+
order_id: vm.data.order_id,
|
|
140
|
+
search: '',
|
|
141
|
+
type: vm.data.type,
|
|
142
|
+
}).then((r) => {
|
|
143
|
+
if (r.result && r.response.data[0]) {
|
|
144
|
+
resolve(r.response.data[0]);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
resolve(emptyData());
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}).then((data) => {
|
|
151
|
+
dialog.dataLoading({ visible: false });
|
|
152
|
+
vm.data = data;
|
|
153
|
+
return this.replaceOrder(gvc, vm);
|
|
154
|
+
});
|
|
100
155
|
}
|
|
101
156
|
if (vm.view === 'create') {
|
|
102
157
|
vm.data = emptyData();
|
|
@@ -113,38 +168,84 @@ export class StockHistory {
|
|
|
113
168
|
let vmi = undefined;
|
|
114
169
|
function getDatalist() {
|
|
115
170
|
return vm.dataList.map((dd) => {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
171
|
+
switch (dd.type) {
|
|
172
|
+
case 'restocking':
|
|
173
|
+
return [
|
|
174
|
+
{
|
|
175
|
+
key: `${typeData.name}單編號`,
|
|
176
|
+
value: `<span class="fs-7">${dd.order_id}</span>`,
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
key: `${typeData.name}日期`,
|
|
180
|
+
value: `<span class="fs-7">${dd.created_time}</span>`,
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
key: '庫存點名稱',
|
|
184
|
+
value: html `<span class="fs-7"
|
|
185
|
+
>${(() => {
|
|
186
|
+
const store = vm.storeList.find((s) => s.id === dd.content.store_in);
|
|
187
|
+
return store ? store.name : '';
|
|
188
|
+
})()}</span
|
|
189
|
+
>`,
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
key: '總金額',
|
|
193
|
+
value: `<span class="fs-7">$ ${(dd.content.total_price || 0).toLocaleString()}</span>`,
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
key: '供應商',
|
|
197
|
+
value: html `<span class="fs-7"
|
|
198
|
+
>${(() => {
|
|
199
|
+
const vendor = vm.vendorList.find((v) => v.id === dd.content.vendor);
|
|
200
|
+
return vendor ? vendor.name : '';
|
|
201
|
+
})()}</span
|
|
202
|
+
>`,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
key: `${typeData.name}狀態`,
|
|
206
|
+
value: `<span class="fs-7">${StockHistory.getStatusBadge(dd.type, dd.status)}</span>`,
|
|
207
|
+
},
|
|
208
|
+
];
|
|
209
|
+
case 'transfer':
|
|
210
|
+
return [
|
|
211
|
+
{
|
|
212
|
+
key: `${typeData.name}單編號`,
|
|
213
|
+
value: `<span class="fs-7">${dd.order_id}</span>`,
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
key: `${typeData.name}日期`,
|
|
217
|
+
value: `<span class="fs-7">${dd.created_time}</span>`,
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
key: '調出庫存點',
|
|
221
|
+
value: html `<span class="fs-7"
|
|
222
|
+
>${(() => {
|
|
223
|
+
const store = vm.storeList.find((s) => s.id === dd.content.store_out);
|
|
224
|
+
return store ? store.name : '';
|
|
225
|
+
})()}</span
|
|
226
|
+
>`,
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
key: '調入庫存點',
|
|
230
|
+
value: html `<span class="fs-7"
|
|
231
|
+
>${(() => {
|
|
232
|
+
const store = vm.storeList.find((s) => s.id === dd.content.store_in);
|
|
233
|
+
return store ? store.name : '';
|
|
234
|
+
})()}</span
|
|
235
|
+
>`,
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
key: '備註',
|
|
239
|
+
value: `<span class="fs-7">${dd.content.note}</span>`,
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
key: `${typeData.name}狀態`,
|
|
243
|
+
value: `<span class="fs-7">${StockHistory.getStatusBadge(dd.type, dd.status)}</span>`,
|
|
244
|
+
},
|
|
245
|
+
];
|
|
246
|
+
case 'checking':
|
|
247
|
+
return [];
|
|
248
|
+
}
|
|
148
249
|
});
|
|
149
250
|
}
|
|
150
251
|
return BgWidget.container(html ` <div class="title-container">
|
|
@@ -252,13 +353,13 @@ export class StockHistory {
|
|
|
252
353
|
iconId: glitter.getUUID(),
|
|
253
354
|
type: 'all',
|
|
254
355
|
};
|
|
255
|
-
function
|
|
356
|
+
function checkSpecTable(page, limit) {
|
|
256
357
|
const x = (page - 1) * limit;
|
|
257
358
|
const specs = vm.data.content.product_list.slice(x, x + limit);
|
|
258
359
|
return specs.map((dd, index) => {
|
|
259
|
-
var _a, _b, _c;
|
|
360
|
+
var _a, _b, _c, _d, _e;
|
|
260
361
|
const realData = vm.data.content.product_list[x + index];
|
|
261
|
-
|
|
362
|
+
const startArr = [
|
|
262
363
|
{
|
|
263
364
|
key: '商品',
|
|
264
365
|
value: `<span class="fs-7">${dd.title || '-'}</span>`,
|
|
@@ -275,32 +376,8 @@ export class StockHistory {
|
|
|
275
376
|
key: '商品條碼',
|
|
276
377
|
value: `<span class="fs-7">${dd.sku || '-'}</span>`,
|
|
277
378
|
},
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
value: `<span class="fs-7">${(_a = dd.transfer_count) !== null && _a !== void 0 ? _a : 0}</span>`,
|
|
281
|
-
},
|
|
282
|
-
{
|
|
283
|
-
key: '實際到貨數量',
|
|
284
|
-
value: html ` <div style="width: 100px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
285
|
-
<input
|
|
286
|
-
class="form-control"
|
|
287
|
-
type="number"
|
|
288
|
-
min="0"
|
|
289
|
-
style="border-radius: 10px; border: 1px solid #DDD; padding-left: 18px;"
|
|
290
|
-
onchange="${gvc.event((e) => {
|
|
291
|
-
let n = parseInt(e.value, 10);
|
|
292
|
-
if (n < 0) {
|
|
293
|
-
n = 0;
|
|
294
|
-
e.value = n;
|
|
295
|
-
}
|
|
296
|
-
realData.recent_count = isNaN(n) ? undefined : n;
|
|
297
|
-
gvc.notifyDataChange(cvm.buttonsId);
|
|
298
|
-
gvc.notifyDataChange(`${cvm.iconId}${index}`);
|
|
299
|
-
})}"
|
|
300
|
-
value="${(_b = dd.recent_count) !== null && _b !== void 0 ? _b : ''}"
|
|
301
|
-
/>
|
|
302
|
-
</div>`,
|
|
303
|
-
},
|
|
379
|
+
];
|
|
380
|
+
const endArr = [
|
|
304
381
|
{
|
|
305
382
|
key: '備註',
|
|
306
383
|
value: html ` <div style="width: 120px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
@@ -311,7 +388,7 @@ export class StockHistory {
|
|
|
311
388
|
onchange="${gvc.event((e) => {
|
|
312
389
|
realData.note = e.value;
|
|
313
390
|
})}"
|
|
314
|
-
value="${(
|
|
391
|
+
value="${(_a = dd.note) !== null && _a !== void 0 ? _a : ''}"
|
|
315
392
|
/>
|
|
316
393
|
</div>`,
|
|
317
394
|
},
|
|
@@ -323,24 +400,87 @@ export class StockHistory {
|
|
|
323
400
|
if (realData.recent_count === undefined) {
|
|
324
401
|
return '';
|
|
325
402
|
}
|
|
326
|
-
if (realData.transfer_count
|
|
327
|
-
return html `<i class="fa-solid fa-circle-check"></i>`;
|
|
328
|
-
}
|
|
329
|
-
if (realData.transfer_count !== realData.recent_count) {
|
|
403
|
+
if (realData.transfer_count > realData.recent_count) {
|
|
330
404
|
return html `<i class="fa-light fa-circle-exclamation"></i>`;
|
|
331
405
|
}
|
|
332
|
-
return
|
|
406
|
+
return html `<i class="fa-solid fa-circle-check"></i>`;
|
|
333
407
|
},
|
|
334
408
|
}),
|
|
335
409
|
},
|
|
336
410
|
];
|
|
411
|
+
switch (vm.data.type) {
|
|
412
|
+
case 'restocking':
|
|
413
|
+
return [
|
|
414
|
+
...startArr,
|
|
415
|
+
{
|
|
416
|
+
key: '原定進貨數量',
|
|
417
|
+
value: `<span class="fs-7">${(_b = dd.transfer_count) !== null && _b !== void 0 ? _b : 0}</span>`,
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
key: '實際到貨數量',
|
|
421
|
+
value: html ` <div style="width: 100px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
422
|
+
<input
|
|
423
|
+
class="form-control"
|
|
424
|
+
type="number"
|
|
425
|
+
min="0"
|
|
426
|
+
style="border-radius: 10px; border: 1px solid #DDD; padding-left: 18px;"
|
|
427
|
+
onchange="${gvc.event((e) => {
|
|
428
|
+
let n = parseInt(e.value, 10);
|
|
429
|
+
if (n < 0) {
|
|
430
|
+
n = 0;
|
|
431
|
+
e.value = n;
|
|
432
|
+
}
|
|
433
|
+
realData.recent_count = isNaN(n) ? undefined : n;
|
|
434
|
+
gvc.notifyDataChange(cvm.buttonsId);
|
|
435
|
+
gvc.notifyDataChange(`${cvm.iconId}${index}`);
|
|
436
|
+
})}"
|
|
437
|
+
value="${(_c = dd.recent_count) !== null && _c !== void 0 ? _c : ''}"
|
|
438
|
+
/>
|
|
439
|
+
</div>`,
|
|
440
|
+
},
|
|
441
|
+
...endArr,
|
|
442
|
+
];
|
|
443
|
+
case 'transfer':
|
|
444
|
+
return [
|
|
445
|
+
...startArr,
|
|
446
|
+
{
|
|
447
|
+
key: '原定調入數量',
|
|
448
|
+
value: `<span class="fs-7">${(_d = dd.transfer_count) !== null && _d !== void 0 ? _d : 0}</span>`,
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
key: '實際調入數量',
|
|
452
|
+
value: html ` <div style="width: 100px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
453
|
+
<input
|
|
454
|
+
class="form-control"
|
|
455
|
+
type="number"
|
|
456
|
+
min="0"
|
|
457
|
+
style="border-radius: 10px; border: 1px solid #DDD; padding-left: 18px;"
|
|
458
|
+
onchange="${gvc.event((e) => {
|
|
459
|
+
let n = parseInt(e.value, 10);
|
|
460
|
+
if (n < 0) {
|
|
461
|
+
n = 0;
|
|
462
|
+
e.value = n;
|
|
463
|
+
}
|
|
464
|
+
realData.recent_count = isNaN(n) ? undefined : n;
|
|
465
|
+
gvc.notifyDataChange(cvm.buttonsId);
|
|
466
|
+
gvc.notifyDataChange(`${cvm.iconId}${index}`);
|
|
467
|
+
})}"
|
|
468
|
+
value="${(_e = dd.recent_count) !== null && _e !== void 0 ? _e : ''}"
|
|
469
|
+
/>
|
|
470
|
+
</div>`,
|
|
471
|
+
},
|
|
472
|
+
...endArr,
|
|
473
|
+
];
|
|
474
|
+
case 'checking':
|
|
475
|
+
return [...startArr, ...endArr];
|
|
476
|
+
}
|
|
337
477
|
});
|
|
338
478
|
}
|
|
339
479
|
return BgWidget.container(html `
|
|
340
480
|
<div class="title-container">
|
|
341
481
|
${BgWidget.goBack(gvc.event(() => {
|
|
342
482
|
vm.view = 'replace';
|
|
343
|
-
}))}${BgWidget.title(
|
|
483
|
+
}))}${BgWidget.title(`${typeData.name}核對`)}
|
|
344
484
|
<div class="flex-fill"></div>
|
|
345
485
|
</div>
|
|
346
486
|
<div class="title-container">
|
|
@@ -417,7 +557,7 @@ export class StockHistory {
|
|
|
417
557
|
vm.data.content.product_list = response;
|
|
418
558
|
vmi.pageSize = Math.ceil(response.length / limit);
|
|
419
559
|
vmi.originalData = response;
|
|
420
|
-
vmi.tableData =
|
|
560
|
+
vmi.tableData = checkSpecTable(vmi.page, limit);
|
|
421
561
|
vmi.loading = false;
|
|
422
562
|
vmi.callback();
|
|
423
563
|
});
|
|
@@ -439,237 +579,381 @@ export class StockHistory {
|
|
|
439
579
|
})}
|
|
440
580
|
`);
|
|
441
581
|
}
|
|
442
|
-
static
|
|
582
|
+
static getFormStructure(gvc, vm) {
|
|
443
583
|
const glitter = gvc.glitter;
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
value: item.name,
|
|
513
|
-
note: item.address,
|
|
514
|
-
};
|
|
515
|
-
}),
|
|
516
|
-
showNote: BgWidget.grayNote((() => {
|
|
517
|
-
const d = dataList.find((item) => {
|
|
518
|
-
return item.id === vm.data.content.vendor;
|
|
584
|
+
switch (vm.type) {
|
|
585
|
+
case 'restocking':
|
|
586
|
+
return [
|
|
587
|
+
html `<div class="row">
|
|
588
|
+
<div class="col-12 col-md-6">
|
|
589
|
+
<div class="tx_normal">供應商</div>
|
|
590
|
+
${BgWidget.mbContainer(8)}
|
|
591
|
+
${gvc.bindView((() => {
|
|
592
|
+
const id = glitter.getUUID();
|
|
593
|
+
let dataList = [];
|
|
594
|
+
let loading = true;
|
|
595
|
+
return {
|
|
596
|
+
bind: id,
|
|
597
|
+
view: () => {
|
|
598
|
+
var _a;
|
|
599
|
+
if (loading) {
|
|
600
|
+
return BgWidget.spinner({
|
|
601
|
+
container: { style: 'margin-top: 0;' },
|
|
602
|
+
circle: { visible: false },
|
|
603
|
+
});
|
|
604
|
+
}
|
|
605
|
+
else {
|
|
606
|
+
return BgWidget.selectOptionAndClickEvent({
|
|
607
|
+
gvc: gvc,
|
|
608
|
+
default: (_a = vm.data.content.vendor) !== null && _a !== void 0 ? _a : '',
|
|
609
|
+
options: dataList.map((item) => {
|
|
610
|
+
return {
|
|
611
|
+
key: item.id,
|
|
612
|
+
value: item.name,
|
|
613
|
+
note: item.address,
|
|
614
|
+
};
|
|
615
|
+
}),
|
|
616
|
+
showNote: BgWidget.grayNote((() => {
|
|
617
|
+
const d = dataList.find((item) => {
|
|
618
|
+
return item.id === vm.data.content.vendor;
|
|
619
|
+
});
|
|
620
|
+
return d ? d.address : '';
|
|
621
|
+
})(), 'margin: 0 4px;'),
|
|
622
|
+
callback: (data) => {
|
|
623
|
+
vm.data.content.vendor = data ? data.key : '';
|
|
624
|
+
gvc.notifyDataChange(id);
|
|
625
|
+
},
|
|
626
|
+
clickElement: {
|
|
627
|
+
html: html `<div>新增供應商</div>
|
|
628
|
+
<div>
|
|
629
|
+
<i class="fa-solid fa-plus ps-2" style="font-size: 16px; height: 14px; width: 14px;"></i>
|
|
630
|
+
</div>`,
|
|
631
|
+
event: (gvc2) => {
|
|
632
|
+
const newVendorData = StockVendors.emptyData();
|
|
633
|
+
BgWidget.settingDialog({
|
|
634
|
+
gvc: gvc2,
|
|
635
|
+
title: '新增供應點',
|
|
636
|
+
innerHTML: (gvc2) => {
|
|
637
|
+
return StockHistory.vendorForm(gvc2, newVendorData);
|
|
638
|
+
},
|
|
639
|
+
footer_html: (gvc2) => {
|
|
640
|
+
return `${BgWidget.cancel(gvc2.event(() => {
|
|
641
|
+
gvc2.closeDialog();
|
|
642
|
+
}))}
|
|
643
|
+
${BgWidget.save(gvc2.event(() => {
|
|
644
|
+
StockVendors.verifyStoreForm(glitter, 'create', newVendorData, (response) => {
|
|
645
|
+
gvc2.closeDialog();
|
|
646
|
+
vm.data.content.vendor = response.id;
|
|
647
|
+
loading = true;
|
|
648
|
+
gvc.notifyDataChange(id);
|
|
649
|
+
});
|
|
650
|
+
}), '完成')}`;
|
|
651
|
+
},
|
|
519
652
|
});
|
|
520
|
-
return d ? d.address : '';
|
|
521
|
-
})(), 'margin: 0 4px;'),
|
|
522
|
-
callback: (data) => {
|
|
523
|
-
vm.data.content.vendor = data ? data.key : '';
|
|
524
|
-
gvc.notifyDataChange(id);
|
|
525
653
|
},
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
654
|
+
},
|
|
655
|
+
});
|
|
656
|
+
}
|
|
657
|
+
},
|
|
658
|
+
divCreate: {},
|
|
659
|
+
onCreate: () => {
|
|
660
|
+
if (loading) {
|
|
661
|
+
ApiUser.getPublicConfig('vendor_manager', 'manager').then((dd) => {
|
|
662
|
+
if (dd.result && dd.response.value) {
|
|
663
|
+
dataList = dd.response.value.list;
|
|
664
|
+
}
|
|
665
|
+
loading = false;
|
|
666
|
+
gvc.notifyDataChange(id);
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
},
|
|
670
|
+
};
|
|
671
|
+
})())}
|
|
672
|
+
</div>
|
|
673
|
+
<div class="col-12 col-md-6">
|
|
674
|
+
<div class="tx_normal">庫存點</div>
|
|
675
|
+
${BgWidget.mbContainer(8)}
|
|
676
|
+
${gvc.bindView((() => {
|
|
677
|
+
const id = glitter.getUUID();
|
|
678
|
+
let dataList = [];
|
|
679
|
+
let loading = true;
|
|
680
|
+
return {
|
|
681
|
+
bind: id,
|
|
682
|
+
view: () => {
|
|
683
|
+
var _a;
|
|
684
|
+
if (loading) {
|
|
685
|
+
return BgWidget.spinner({
|
|
686
|
+
container: { style: 'margin-top: 0;' },
|
|
687
|
+
circle: { visible: false },
|
|
688
|
+
});
|
|
689
|
+
}
|
|
690
|
+
else {
|
|
691
|
+
return BgWidget.selectOptionAndClickEvent({
|
|
692
|
+
gvc: gvc,
|
|
693
|
+
default: (_a = vm.data.content.store_in) !== null && _a !== void 0 ? _a : '',
|
|
694
|
+
options: dataList.map((item) => {
|
|
695
|
+
return {
|
|
696
|
+
key: item.id,
|
|
697
|
+
value: item.name,
|
|
698
|
+
note: item.address,
|
|
699
|
+
};
|
|
700
|
+
}),
|
|
701
|
+
showNote: BgWidget.grayNote((() => {
|
|
702
|
+
const d = dataList.find((item) => {
|
|
703
|
+
return item.id === vm.data.content.store_in;
|
|
704
|
+
});
|
|
705
|
+
return d ? d.address : '';
|
|
706
|
+
})(), 'margin: 0 4px;'),
|
|
707
|
+
callback: (data) => {
|
|
708
|
+
vm.data.content.store_in = data ? data.key : '';
|
|
709
|
+
gvc.notifyDataChange(id);
|
|
710
|
+
},
|
|
711
|
+
clickElement: {
|
|
712
|
+
html: html `<div>新增庫存點</div>
|
|
713
|
+
<div>
|
|
714
|
+
<i class="fa-solid fa-plus ps-2" style="font-size: 16px; height: 14px; width: 14px;"></i>
|
|
715
|
+
</div>`,
|
|
716
|
+
event: (gvc2) => {
|
|
717
|
+
const newStoreData = StockStores.emptyData();
|
|
718
|
+
BgWidget.settingDialog({
|
|
719
|
+
gvc: gvc2,
|
|
720
|
+
title: '新增庫存點',
|
|
721
|
+
innerHTML: (gvc2) => {
|
|
722
|
+
return StockHistory.storeForm(gvc2, newStoreData);
|
|
723
|
+
},
|
|
724
|
+
footer_html: (gvc2) => {
|
|
725
|
+
return `${BgWidget.cancel(gvc2.event(() => {
|
|
726
|
+
gvc2.closeDialog();
|
|
727
|
+
}))}
|
|
728
|
+
${BgWidget.save(gvc2.event(() => {
|
|
729
|
+
StockStores.verifyStoreForm(glitter, 'create', newStoreData, (response) => {
|
|
541
730
|
gvc2.closeDialog();
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
});
|
|
550
|
-
}), '完成')}`;
|
|
551
|
-
},
|
|
552
|
-
});
|
|
553
|
-
},
|
|
731
|
+
vm.data.content.store_in = response.id;
|
|
732
|
+
loading = true;
|
|
733
|
+
gvc.notifyDataChange(id);
|
|
734
|
+
});
|
|
735
|
+
}), '完成')}`;
|
|
736
|
+
},
|
|
737
|
+
});
|
|
554
738
|
},
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
739
|
+
},
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
},
|
|
743
|
+
divCreate: {},
|
|
744
|
+
onCreate: () => {
|
|
745
|
+
if (loading) {
|
|
746
|
+
ApiUser.getPublicConfig('store_manager', 'manager').then((dd) => {
|
|
747
|
+
if (dd.result && dd.response.value) {
|
|
748
|
+
dataList = dd.response.value.list;
|
|
749
|
+
}
|
|
750
|
+
loading = false;
|
|
751
|
+
gvc.notifyDataChange(id);
|
|
752
|
+
});
|
|
753
|
+
}
|
|
754
|
+
},
|
|
755
|
+
};
|
|
756
|
+
})())}
|
|
757
|
+
</div>
|
|
758
|
+
</div> `,
|
|
759
|
+
];
|
|
760
|
+
case 'transfer':
|
|
761
|
+
return [
|
|
762
|
+
html `<div class="row">
|
|
763
|
+
<div class="col-12 col-md-6">
|
|
764
|
+
<div class="tx_normal">調出庫存點</div>
|
|
765
|
+
${BgWidget.mbContainer(8)}
|
|
766
|
+
${gvc.bindView((() => {
|
|
767
|
+
const id = glitter.getUUID();
|
|
768
|
+
let dataList = [];
|
|
769
|
+
let loading = true;
|
|
770
|
+
return {
|
|
771
|
+
bind: id,
|
|
772
|
+
view: () => {
|
|
773
|
+
var _a;
|
|
774
|
+
if (loading) {
|
|
775
|
+
return BgWidget.spinner({
|
|
776
|
+
container: { style: 'margin-top: 0;' },
|
|
777
|
+
circle: { visible: false },
|
|
778
|
+
});
|
|
779
|
+
}
|
|
780
|
+
else {
|
|
781
|
+
return BgWidget.selectOptionAndClickEvent({
|
|
782
|
+
gvc: gvc,
|
|
783
|
+
default: (_a = vm.data.content.store_out) !== null && _a !== void 0 ? _a : '',
|
|
784
|
+
options: dataList.map((item) => {
|
|
785
|
+
return {
|
|
786
|
+
key: item.id,
|
|
787
|
+
value: item.name,
|
|
788
|
+
note: item.address,
|
|
789
|
+
};
|
|
790
|
+
}),
|
|
791
|
+
showNote: BgWidget.grayNote((() => {
|
|
792
|
+
const d = dataList.find((item) => {
|
|
793
|
+
return item.id === vm.data.content.store_out;
|
|
794
|
+
});
|
|
795
|
+
return d ? d.address : '';
|
|
796
|
+
})(), 'margin: 0 4px;'),
|
|
797
|
+
callback: (data) => {
|
|
798
|
+
vm.data.content.store_out = data ? data.key : '';
|
|
566
799
|
gvc.notifyDataChange(id);
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
options: dataList.map((item) => {
|
|
595
|
-
return {
|
|
596
|
-
key: item.id,
|
|
597
|
-
value: item.name,
|
|
598
|
-
note: item.address,
|
|
599
|
-
};
|
|
600
|
-
}),
|
|
601
|
-
showNote: BgWidget.grayNote((() => {
|
|
602
|
-
const d = dataList.find((item) => {
|
|
603
|
-
return item.id === vm.data.content.store_in;
|
|
800
|
+
},
|
|
801
|
+
clickElement: {
|
|
802
|
+
html: html `<div>新增庫存點</div>
|
|
803
|
+
<div>
|
|
804
|
+
<i class="fa-solid fa-plus ps-2" style="font-size: 16px; height: 14px; width: 14px;"></i>
|
|
805
|
+
</div>`,
|
|
806
|
+
event: (gvc2) => {
|
|
807
|
+
const newStoreData = StockStores.emptyData();
|
|
808
|
+
BgWidget.settingDialog({
|
|
809
|
+
gvc: gvc2,
|
|
810
|
+
title: '新增庫存點',
|
|
811
|
+
innerHTML: (gvc2) => {
|
|
812
|
+
return StockHistory.storeForm(gvc2, newStoreData);
|
|
813
|
+
},
|
|
814
|
+
footer_html: (gvc2) => {
|
|
815
|
+
return `${BgWidget.cancel(gvc2.event(() => {
|
|
816
|
+
gvc2.closeDialog();
|
|
817
|
+
}))}
|
|
818
|
+
${BgWidget.save(gvc2.event(() => {
|
|
819
|
+
StockStores.verifyStoreForm(glitter, 'create', newStoreData, (response) => {
|
|
820
|
+
gvc2.closeDialog();
|
|
821
|
+
vm.data.content.store_out = response.id;
|
|
822
|
+
loading = true;
|
|
823
|
+
gvc.notifyDataChange(id);
|
|
824
|
+
});
|
|
825
|
+
}), '完成')}`;
|
|
826
|
+
},
|
|
604
827
|
});
|
|
605
|
-
return d ? d.address : '';
|
|
606
|
-
})(), 'margin: 0 4px;'),
|
|
607
|
-
callback: (data) => {
|
|
608
|
-
vm.data.content.store_in = data ? data.key : '';
|
|
609
|
-
gvc.notifyDataChange(id);
|
|
610
828
|
},
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
829
|
+
},
|
|
830
|
+
});
|
|
831
|
+
}
|
|
832
|
+
},
|
|
833
|
+
divCreate: {},
|
|
834
|
+
onCreate: () => {
|
|
835
|
+
if (loading) {
|
|
836
|
+
ApiUser.getPublicConfig('store_manager', 'manager').then((dd) => {
|
|
837
|
+
if (dd.result && dd.response.value) {
|
|
838
|
+
dataList = dd.response.value.list;
|
|
839
|
+
}
|
|
840
|
+
loading = false;
|
|
841
|
+
gvc.notifyDataChange(id);
|
|
842
|
+
});
|
|
843
|
+
}
|
|
844
|
+
},
|
|
845
|
+
};
|
|
846
|
+
})())}
|
|
847
|
+
</div>
|
|
848
|
+
<div class="col-12 col-md-6">
|
|
849
|
+
<div class="tx_normal">調入庫存點</div>
|
|
850
|
+
${BgWidget.mbContainer(8)}
|
|
851
|
+
${gvc.bindView((() => {
|
|
852
|
+
const id = glitter.getUUID();
|
|
853
|
+
let dataList = [];
|
|
854
|
+
let loading = true;
|
|
855
|
+
return {
|
|
856
|
+
bind: id,
|
|
857
|
+
view: () => {
|
|
858
|
+
var _a;
|
|
859
|
+
if (loading) {
|
|
860
|
+
return BgWidget.spinner({
|
|
861
|
+
container: { style: 'margin-top: 0;' },
|
|
862
|
+
circle: { visible: false },
|
|
863
|
+
});
|
|
864
|
+
}
|
|
865
|
+
else {
|
|
866
|
+
return BgWidget.selectOptionAndClickEvent({
|
|
867
|
+
gvc: gvc,
|
|
868
|
+
default: (_a = vm.data.content.store_in) !== null && _a !== void 0 ? _a : '',
|
|
869
|
+
options: dataList.map((item) => {
|
|
870
|
+
return {
|
|
871
|
+
key: item.id,
|
|
872
|
+
value: item.name,
|
|
873
|
+
note: item.address,
|
|
874
|
+
};
|
|
875
|
+
}),
|
|
876
|
+
showNote: BgWidget.grayNote((() => {
|
|
877
|
+
const d = dataList.find((item) => {
|
|
878
|
+
return item.id === vm.data.content.store_in;
|
|
879
|
+
});
|
|
880
|
+
return d ? d.address : '';
|
|
881
|
+
})(), 'margin: 0 4px;'),
|
|
882
|
+
callback: (data) => {
|
|
883
|
+
vm.data.content.store_in = data ? data.key : '';
|
|
884
|
+
gvc.notifyDataChange(id);
|
|
885
|
+
},
|
|
886
|
+
clickElement: {
|
|
887
|
+
html: html `<div>新增庫存點</div>
|
|
888
|
+
<div>
|
|
889
|
+
<i class="fa-solid fa-plus ps-2" style="font-size: 16px; height: 14px; width: 14px;"></i>
|
|
890
|
+
</div>`,
|
|
891
|
+
event: (gvc2) => {
|
|
892
|
+
const newStoreData = StockStores.emptyData();
|
|
893
|
+
BgWidget.settingDialog({
|
|
894
|
+
gvc: gvc2,
|
|
895
|
+
title: '新增庫存點',
|
|
896
|
+
innerHTML: (gvc2) => {
|
|
897
|
+
return StockHistory.storeForm(gvc2, newStoreData);
|
|
898
|
+
},
|
|
899
|
+
footer_html: (gvc2) => {
|
|
900
|
+
return `${BgWidget.cancel(gvc2.event(() => {
|
|
901
|
+
gvc2.closeDialog();
|
|
902
|
+
}))}
|
|
903
|
+
${BgWidget.save(gvc2.event(() => {
|
|
904
|
+
StockStores.verifyStoreForm(glitter, 'create', newStoreData, (response) => {
|
|
626
905
|
gvc2.closeDialog();
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
});
|
|
635
|
-
}), '完成')}`;
|
|
636
|
-
},
|
|
637
|
-
});
|
|
638
|
-
},
|
|
906
|
+
vm.data.content.store_in = response.id;
|
|
907
|
+
loading = true;
|
|
908
|
+
gvc.notifyDataChange(id);
|
|
909
|
+
});
|
|
910
|
+
}), '完成')}`;
|
|
911
|
+
},
|
|
912
|
+
});
|
|
639
913
|
},
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
</div>
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
return [];
|
|
664
|
-
}
|
|
914
|
+
},
|
|
915
|
+
});
|
|
916
|
+
}
|
|
917
|
+
},
|
|
918
|
+
divCreate: {},
|
|
919
|
+
onCreate: () => {
|
|
920
|
+
if (loading) {
|
|
921
|
+
ApiUser.getPublicConfig('store_manager', 'manager').then((dd) => {
|
|
922
|
+
if (dd.result && dd.response.value) {
|
|
923
|
+
dataList = dd.response.value.list;
|
|
924
|
+
}
|
|
925
|
+
loading = false;
|
|
926
|
+
gvc.notifyDataChange(id);
|
|
927
|
+
});
|
|
928
|
+
}
|
|
929
|
+
},
|
|
930
|
+
};
|
|
931
|
+
})())}
|
|
932
|
+
</div>
|
|
933
|
+
</div> `,
|
|
934
|
+
];
|
|
935
|
+
case 'checking':
|
|
936
|
+
return [];
|
|
665
937
|
}
|
|
938
|
+
}
|
|
939
|
+
static createOrder(gvc, vm) {
|
|
940
|
+
const glitter = gvc.glitter;
|
|
941
|
+
const dialog = new ShareDialog(glitter);
|
|
942
|
+
const typeData = typeConfig[vm.type];
|
|
943
|
+
const dvm = {
|
|
944
|
+
id: glitter.getUUID(),
|
|
945
|
+
tableId: glitter.getUUID(),
|
|
946
|
+
totalId: glitter.getUUID(),
|
|
947
|
+
variantIds: [],
|
|
948
|
+
tableLoading: true,
|
|
949
|
+
};
|
|
666
950
|
function specDatalist(page, limit) {
|
|
667
951
|
const x = (page - 1) * limit;
|
|
668
952
|
const specs = vm.data.content.product_list.slice(x, x + limit);
|
|
669
953
|
return specs.map((dd, index) => {
|
|
670
|
-
var _a, _b, _c;
|
|
954
|
+
var _a, _b, _c, _d;
|
|
671
955
|
const realData = vm.data.content.product_list[x + index];
|
|
672
|
-
|
|
956
|
+
const startArr = [
|
|
673
957
|
{
|
|
674
958
|
key: '商品',
|
|
675
959
|
value: `<span class="fs-7">${dd.title || '-'}</span>`,
|
|
@@ -682,61 +966,8 @@ export class StockHistory {
|
|
|
682
966
|
key: '存貨單位(SKU)',
|
|
683
967
|
value: `<span class="fs-7">${dd.sku || '-'}</span>`,
|
|
684
968
|
},
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
value: html ` <div style="width: 100px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
688
|
-
<input
|
|
689
|
-
class="form-control"
|
|
690
|
-
type="number"
|
|
691
|
-
min="0"
|
|
692
|
-
style="border-radius: 10px; border: 1px solid #DDD; padding-left: 18px;"
|
|
693
|
-
onchange="${gvc.event((e) => {
|
|
694
|
-
let n = parseInt(e.value, 10);
|
|
695
|
-
if (n < 0) {
|
|
696
|
-
n = 0;
|
|
697
|
-
e.value = n;
|
|
698
|
-
}
|
|
699
|
-
realData.cost = n;
|
|
700
|
-
gvc.notifyDataChange(`subtotoal_${index}`);
|
|
701
|
-
})}"
|
|
702
|
-
value="${(_a = dd.cost) !== null && _a !== void 0 ? _a : 0}"
|
|
703
|
-
/>
|
|
704
|
-
</div>`,
|
|
705
|
-
},
|
|
706
|
-
{
|
|
707
|
-
key: '數量',
|
|
708
|
-
value: html ` <div style="width: 100px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
709
|
-
<input
|
|
710
|
-
class="form-control"
|
|
711
|
-
type="number"
|
|
712
|
-
min="0"
|
|
713
|
-
style="border-radius: 10px; border: 1px solid #DDD; padding-left: 18px;"
|
|
714
|
-
onchange="${gvc.event((e) => {
|
|
715
|
-
let n = parseInt(e.value, 10);
|
|
716
|
-
if (n < 0) {
|
|
717
|
-
n = 0;
|
|
718
|
-
e.value = n;
|
|
719
|
-
}
|
|
720
|
-
realData.transfer_count = n;
|
|
721
|
-
gvc.notifyDataChange(`subtotoal_${index}`);
|
|
722
|
-
})}"
|
|
723
|
-
value="${(_b = dd.transfer_count) !== null && _b !== void 0 ? _b : 0}"
|
|
724
|
-
/>
|
|
725
|
-
</div>`,
|
|
726
|
-
},
|
|
727
|
-
{
|
|
728
|
-
key: '小計',
|
|
729
|
-
value: gvc.bindView({
|
|
730
|
-
bind: `subtotoal_${index}`,
|
|
731
|
-
view: () => {
|
|
732
|
-
const subtotal = dd.cost * dd.transfer_count;
|
|
733
|
-
return html `<span class="fs-7">$ ${subtotal.toLocaleString()}</span>`;
|
|
734
|
-
},
|
|
735
|
-
onCreate: () => {
|
|
736
|
-
gvc.notifyDataChange(dvm.totalId);
|
|
737
|
-
},
|
|
738
|
-
}),
|
|
739
|
-
},
|
|
969
|
+
];
|
|
970
|
+
const endArr = [
|
|
740
971
|
{
|
|
741
972
|
key: '備註',
|
|
742
973
|
value: html ` <div style="width: 120px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
@@ -747,11 +978,105 @@ export class StockHistory {
|
|
|
747
978
|
onchange="${gvc.event((e) => {
|
|
748
979
|
realData.note = e.value;
|
|
749
980
|
})}"
|
|
750
|
-
value="${(
|
|
981
|
+
value="${(_a = dd.note) !== null && _a !== void 0 ? _a : ''}"
|
|
751
982
|
/>
|
|
752
983
|
</div>`,
|
|
753
984
|
},
|
|
754
985
|
];
|
|
986
|
+
switch (vm.data.type) {
|
|
987
|
+
case 'restocking':
|
|
988
|
+
return [
|
|
989
|
+
...startArr,
|
|
990
|
+
{
|
|
991
|
+
key: '進貨成本',
|
|
992
|
+
value: html ` <div style="width: 100px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
993
|
+
<input
|
|
994
|
+
class="form-control"
|
|
995
|
+
type="number"
|
|
996
|
+
min="0"
|
|
997
|
+
style="border-radius: 10px; border: 1px solid #DDD; padding-left: 18px;"
|
|
998
|
+
onchange="${gvc.event((e) => {
|
|
999
|
+
let n = parseInt(e.value, 10);
|
|
1000
|
+
if (n < 0) {
|
|
1001
|
+
n = 0;
|
|
1002
|
+
e.value = n;
|
|
1003
|
+
}
|
|
1004
|
+
realData.cost = n;
|
|
1005
|
+
gvc.notifyDataChange(`subtotoal_${index}`);
|
|
1006
|
+
})}"
|
|
1007
|
+
value="${(_b = dd.cost) !== null && _b !== void 0 ? _b : 0}"
|
|
1008
|
+
/>
|
|
1009
|
+
</div>`,
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
key: '數量',
|
|
1013
|
+
value: html ` <div style="width: 100px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
1014
|
+
<input
|
|
1015
|
+
class="form-control"
|
|
1016
|
+
type="number"
|
|
1017
|
+
min="0"
|
|
1018
|
+
style="border-radius: 10px; border: 1px solid #DDD; padding-left: 18px;"
|
|
1019
|
+
onchange="${gvc.event((e) => {
|
|
1020
|
+
let n = parseInt(e.value, 10);
|
|
1021
|
+
if (n < 0) {
|
|
1022
|
+
n = 0;
|
|
1023
|
+
e.value = n;
|
|
1024
|
+
}
|
|
1025
|
+
realData.transfer_count = n;
|
|
1026
|
+
gvc.notifyDataChange(`subtotoal_${index}`);
|
|
1027
|
+
})}"
|
|
1028
|
+
value="${(_c = dd.transfer_count) !== null && _c !== void 0 ? _c : 0}"
|
|
1029
|
+
/>
|
|
1030
|
+
</div>`,
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
key: '小計',
|
|
1034
|
+
value: gvc.bindView({
|
|
1035
|
+
bind: `subtotoal_${index}`,
|
|
1036
|
+
view: () => {
|
|
1037
|
+
const subtotal = dd.cost * dd.transfer_count;
|
|
1038
|
+
return html `<span class="fs-7">$ ${subtotal.toLocaleString()}</span>`;
|
|
1039
|
+
},
|
|
1040
|
+
onCreate: () => {
|
|
1041
|
+
gvc.notifyDataChange(dvm.totalId);
|
|
1042
|
+
},
|
|
1043
|
+
}),
|
|
1044
|
+
},
|
|
1045
|
+
...endArr,
|
|
1046
|
+
];
|
|
1047
|
+
case 'transfer':
|
|
1048
|
+
return [
|
|
1049
|
+
...startArr,
|
|
1050
|
+
{
|
|
1051
|
+
key: '來源庫存數量',
|
|
1052
|
+
value: 'unknown',
|
|
1053
|
+
},
|
|
1054
|
+
{
|
|
1055
|
+
key: '調入數量',
|
|
1056
|
+
value: html ` <div style="width: 100px" onclick="${gvc.event((e, event) => event.stopPropagation())}">
|
|
1057
|
+
<input
|
|
1058
|
+
class="form-control"
|
|
1059
|
+
type="number"
|
|
1060
|
+
min="0"
|
|
1061
|
+
style="border-radius: 10px; border: 1px solid #DDD; padding-left: 18px;"
|
|
1062
|
+
onchange="${gvc.event((e) => {
|
|
1063
|
+
let n = parseInt(e.value, 10);
|
|
1064
|
+
if (n < 0) {
|
|
1065
|
+
n = 0;
|
|
1066
|
+
e.value = n;
|
|
1067
|
+
}
|
|
1068
|
+
realData.transfer_count = n;
|
|
1069
|
+
gvc.notifyDataChange(`subtotoal_${index}`);
|
|
1070
|
+
})}"
|
|
1071
|
+
value="${(_d = dd.transfer_count) !== null && _d !== void 0 ? _d : 0}"
|
|
1072
|
+
/>
|
|
1073
|
+
</div>`,
|
|
1074
|
+
},
|
|
1075
|
+
...endArr,
|
|
1076
|
+
];
|
|
1077
|
+
case 'checking':
|
|
1078
|
+
return [...startArr, ...endArr];
|
|
1079
|
+
}
|
|
755
1080
|
});
|
|
756
1081
|
}
|
|
757
1082
|
return BgWidget.container([
|
|
@@ -768,16 +1093,45 @@ export class StockHistory {
|
|
|
768
1093
|
return {
|
|
769
1094
|
bind: dvm.id,
|
|
770
1095
|
view: () => {
|
|
771
|
-
var _a;
|
|
1096
|
+
var _a, _b;
|
|
772
1097
|
return [
|
|
773
1098
|
BgWidget.mainCard([
|
|
774
1099
|
html ` <div class="tx_700">${typeData.name}單資料</div>`,
|
|
775
|
-
|
|
1100
|
+
html ` <div class="row">
|
|
1101
|
+
<div class="col-12 col-md-6">
|
|
1102
|
+
<div class="tx_normal">${typeData.name}編號</div>
|
|
1103
|
+
${BgWidget.mbContainer(8)}
|
|
1104
|
+
${BgWidget.editeInput({
|
|
1105
|
+
gvc: gvc,
|
|
1106
|
+
title: '',
|
|
1107
|
+
default: vm.data.order_id || '系統將自動產生流水號',
|
|
1108
|
+
placeHolder: '',
|
|
1109
|
+
callback: () => { },
|
|
1110
|
+
readonly: true,
|
|
1111
|
+
})}
|
|
1112
|
+
</div>
|
|
1113
|
+
${document.body.clientWidth > 768 ? '' : BgWidget.mbContainer(18)}
|
|
1114
|
+
<div class="col-12 col-md-6">
|
|
1115
|
+
<div class="tx_normal">${typeData.name}日期</div>
|
|
1116
|
+
${BgWidget.mbContainer(8)}
|
|
1117
|
+
${BgWidget.editeInput({
|
|
1118
|
+
gvc: gvc,
|
|
1119
|
+
title: '',
|
|
1120
|
+
type: 'date',
|
|
1121
|
+
default: (_a = vm.data.created_time) !== null && _a !== void 0 ? _a : '',
|
|
1122
|
+
placeHolder: `請輸入${typeData.name}日期`,
|
|
1123
|
+
callback: (text) => {
|
|
1124
|
+
vm.data.created_time = text;
|
|
1125
|
+
},
|
|
1126
|
+
})}
|
|
1127
|
+
</div>
|
|
1128
|
+
</div>`,
|
|
1129
|
+
...this.getFormStructure(gvc, vm),
|
|
776
1130
|
html ` <div class="tx_normal">備註</div>
|
|
777
1131
|
${EditorElem.editeText({
|
|
778
1132
|
gvc: gvc,
|
|
779
1133
|
title: '',
|
|
780
|
-
default: (
|
|
1134
|
+
default: (_b = vm.data.content.note) !== null && _b !== void 0 ? _b : '',
|
|
781
1135
|
placeHolder: '請輸入備註',
|
|
782
1136
|
callback: (text) => {
|
|
783
1137
|
vm.data.content.note = text;
|
|
@@ -786,7 +1140,7 @@ export class StockHistory {
|
|
|
786
1140
|
].join(BgWidget.mbContainer(18))),
|
|
787
1141
|
BgWidget.mainCard([
|
|
788
1142
|
html `
|
|
789
|
-
<div class="tx_700"
|
|
1143
|
+
<div class="tx_700">${typeData.name}商品</div>
|
|
790
1144
|
${BgWidget.mbContainer(18)}
|
|
791
1145
|
${gvc.bindView({
|
|
792
1146
|
bind: dvm.tableId,
|
|
@@ -797,61 +1151,111 @@ export class StockHistory {
|
|
|
797
1151
|
});
|
|
798
1152
|
dvm.tableLoading = false;
|
|
799
1153
|
}
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
1154
|
+
switch (vm.data.type) {
|
|
1155
|
+
case 'restocking':
|
|
1156
|
+
return [
|
|
1157
|
+
BgWidget.tableV3({
|
|
1158
|
+
gvc: gvc,
|
|
1159
|
+
getData: (vd) => {
|
|
1160
|
+
vmi = vd;
|
|
1161
|
+
const limit = 99999;
|
|
1162
|
+
this.setVariantList(dvm.variantIds, vm.data, (response) => {
|
|
1163
|
+
vm.data.content.product_list = response;
|
|
1164
|
+
vmi.pageSize = Math.ceil(response.length / limit);
|
|
1165
|
+
vmi.originalData = response;
|
|
1166
|
+
vmi.tableData = specDatalist(vmi.page, limit);
|
|
1167
|
+
vmi.loading = false;
|
|
1168
|
+
vmi.callback();
|
|
1169
|
+
});
|
|
1170
|
+
},
|
|
1171
|
+
rowClick: () => { },
|
|
1172
|
+
filter: [],
|
|
1173
|
+
hiddenPageSplit: true,
|
|
1174
|
+
}),
|
|
1175
|
+
html `<div
|
|
1176
|
+
class="w-100 d-flex align-items-center justify-content-center cursor_pointer"
|
|
1177
|
+
style="color: #36B; font-size: 16px; font-weight: 400;"
|
|
1178
|
+
onclick="${gvc.event(() => {
|
|
1179
|
+
BgWidget.variantDialog({
|
|
1180
|
+
gvc,
|
|
1181
|
+
title: '搜尋商品',
|
|
1182
|
+
default: dvm.variantIds,
|
|
1183
|
+
callback: (resultData) => {
|
|
1184
|
+
dvm.variantIds = resultData;
|
|
1185
|
+
gvc.notifyDataChange(dvm.tableId);
|
|
1186
|
+
},
|
|
1187
|
+
});
|
|
1188
|
+
})}"
|
|
1189
|
+
>
|
|
1190
|
+
<div>新增${typeData.name}商品</div>
|
|
1191
|
+
<div>
|
|
1192
|
+
<i class="fa-solid fa-plus ps-2" style="font-size: 16px; height: 14px; width: 14px;"></i>
|
|
1193
|
+
</div>
|
|
1194
|
+
</div>`,
|
|
1195
|
+
BgWidget.horizontalLine({ margin: 1.75 }),
|
|
1196
|
+
gvc.bindView({
|
|
1197
|
+
bind: dvm.totalId,
|
|
1198
|
+
view: () => {
|
|
1199
|
+
const total = vm.data.content.product_list.reduce((sum, item) => {
|
|
1200
|
+
return sum + item.cost * item.transfer_count;
|
|
1201
|
+
}, 0);
|
|
1202
|
+
return html ` <div class="flex-fill"></div>
|
|
1203
|
+
<div class="d-flex justify-content-between tx_700" style="width: 200px;">
|
|
1204
|
+
<div>進貨總成本</div>
|
|
1205
|
+
<div>$ ${total.toLocaleString()}</div>
|
|
1206
|
+
</div>`;
|
|
1207
|
+
},
|
|
1208
|
+
divCreate: { class: 'd-flex w-100' },
|
|
1209
|
+
}),
|
|
1210
|
+
].join('');
|
|
1211
|
+
case 'transfer':
|
|
1212
|
+
return [
|
|
1213
|
+
BgWidget.tableV3({
|
|
1214
|
+
gvc: gvc,
|
|
1215
|
+
getData: (vd) => {
|
|
1216
|
+
vmi = vd;
|
|
1217
|
+
const limit = 99999;
|
|
1218
|
+
this.setVariantList(dvm.variantIds, vm.data, (response) => {
|
|
1219
|
+
vm.data.content.product_list = response;
|
|
1220
|
+
vmi.pageSize = Math.ceil(response.length / limit);
|
|
1221
|
+
vmi.originalData = response;
|
|
1222
|
+
vmi.tableData = specDatalist(vmi.page, limit);
|
|
1223
|
+
vmi.loading = false;
|
|
1224
|
+
vmi.callback();
|
|
1225
|
+
});
|
|
1226
|
+
},
|
|
1227
|
+
rowClick: () => { },
|
|
1228
|
+
filter: [],
|
|
1229
|
+
hiddenPageSplit: true,
|
|
1230
|
+
}),
|
|
1231
|
+
html `<div
|
|
1232
|
+
class="w-100 d-flex align-items-center justify-content-center cursor_pointer"
|
|
1233
|
+
style="color: #36B; font-size: 16px; font-weight: 400;"
|
|
1234
|
+
onclick="${gvc.event(() => {
|
|
1235
|
+
if (CheckInput.isEmpty(vm.data.content.store_out)) {
|
|
1236
|
+
dialog.errorMessage({ text: '請先選擇「調出庫存點」' });
|
|
1237
|
+
return;
|
|
1238
|
+
}
|
|
1239
|
+
BgWidget.variantDialog({
|
|
1240
|
+
gvc,
|
|
1241
|
+
title: '搜尋商品',
|
|
1242
|
+
default: dvm.variantIds,
|
|
1243
|
+
callback: (resultData) => {
|
|
1244
|
+
dvm.variantIds = resultData;
|
|
1245
|
+
gvc.notifyDataChange(dvm.tableId);
|
|
1246
|
+
},
|
|
1247
|
+
});
|
|
1248
|
+
})}"
|
|
1249
|
+
>
|
|
1250
|
+
<div>新增${typeData.name}商品</div>
|
|
1251
|
+
<div>
|
|
1252
|
+
<i class="fa-solid fa-plus ps-2" style="font-size: 16px; height: 14px; width: 14px;"></i>
|
|
1253
|
+
</div>
|
|
1254
|
+
</div>`,
|
|
1255
|
+
].join('');
|
|
1256
|
+
case 'checking':
|
|
1257
|
+
return ['全部商品', '特定分類', '特定商品'].join('');
|
|
1258
|
+
}
|
|
855
1259
|
},
|
|
856
1260
|
})}
|
|
857
1261
|
`,
|
|
@@ -868,6 +1272,38 @@ export class StockHistory {
|
|
|
868
1272
|
vm.view = 'mainList';
|
|
869
1273
|
}))}
|
|
870
1274
|
${BgWidget.save(gvc.event(() => {
|
|
1275
|
+
if (CheckInput.isEmpty(vm.data.created_time)) {
|
|
1276
|
+
dialog.errorMessage({ text: `請輸入${typeData.name}時間` });
|
|
1277
|
+
return;
|
|
1278
|
+
}
|
|
1279
|
+
if (vm.data.type === 'restocking') {
|
|
1280
|
+
if (CheckInput.isEmpty(vm.data.content.vendor)) {
|
|
1281
|
+
dialog.errorMessage({ text: '請輸入供應商' });
|
|
1282
|
+
return;
|
|
1283
|
+
}
|
|
1284
|
+
if (CheckInput.isEmpty(vm.data.content.store_in)) {
|
|
1285
|
+
dialog.errorMessage({ text: '請輸入庫存點' });
|
|
1286
|
+
return;
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1289
|
+
if (vm.data.type === 'transfer') {
|
|
1290
|
+
if (CheckInput.isEmpty(vm.data.content.store_out)) {
|
|
1291
|
+
dialog.errorMessage({ text: '請輸入調出庫存點' });
|
|
1292
|
+
return;
|
|
1293
|
+
}
|
|
1294
|
+
if (CheckInput.isEmpty(vm.data.content.store_in)) {
|
|
1295
|
+
dialog.errorMessage({ text: '請輸入調入庫存點' });
|
|
1296
|
+
return;
|
|
1297
|
+
}
|
|
1298
|
+
if (vm.data.content.store_in === vm.data.content.store_out) {
|
|
1299
|
+
dialog.errorMessage({ text: '調出與調入的庫存點不可相同' });
|
|
1300
|
+
return;
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
if (vm.data.content.product_list.length === 0) {
|
|
1304
|
+
dialog.errorMessage({ text: `請新增${typeData.name}商品` });
|
|
1305
|
+
return;
|
|
1306
|
+
}
|
|
871
1307
|
dialog.dataLoading({ visible: true });
|
|
872
1308
|
if (vm.data.id === '') {
|
|
873
1309
|
ApiStock.postStockHistory(vm.data).then((r) => {
|
|
@@ -897,29 +1333,34 @@ export class StockHistory {
|
|
|
897
1333
|
</div>`,
|
|
898
1334
|
].join('<div class="my-2"></div>'));
|
|
899
1335
|
}
|
|
900
|
-
static
|
|
901
|
-
const
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
1336
|
+
static restockingDetailTable(json) {
|
|
1337
|
+
const x = (json.page - 1) * json.limit;
|
|
1338
|
+
return json.list.slice(x, x + json.limit).map((dd) => {
|
|
1339
|
+
var _a, _b, _c;
|
|
1340
|
+
const startArr = [
|
|
1341
|
+
{
|
|
1342
|
+
key: '商品',
|
|
1343
|
+
value: `<span class="fs-7">${dd.title || '-'}</span>`,
|
|
1344
|
+
},
|
|
1345
|
+
{
|
|
1346
|
+
key: '規格',
|
|
1347
|
+
value: `<span class="fs-7">${dd.spec}</span>`,
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
key: '存貨單位(SKU)',
|
|
1351
|
+
value: `<span class="fs-7">${dd.sku || '-'}</span>`,
|
|
1352
|
+
},
|
|
1353
|
+
];
|
|
1354
|
+
const endArr = [
|
|
1355
|
+
{
|
|
1356
|
+
key: '備註',
|
|
1357
|
+
value: `<span class="fs-7">${dd.note || '-'}</span>`,
|
|
1358
|
+
},
|
|
1359
|
+
];
|
|
1360
|
+
switch (json.type) {
|
|
1361
|
+
case 'nonDetails':
|
|
910
1362
|
return [
|
|
911
|
-
|
|
912
|
-
key: '商品',
|
|
913
|
-
value: `<span class="fs-7">${dd.title || '-'}</span>`,
|
|
914
|
-
},
|
|
915
|
-
{
|
|
916
|
-
key: '規格',
|
|
917
|
-
value: `<span class="fs-7">${dd.spec}</span>`,
|
|
918
|
-
},
|
|
919
|
-
{
|
|
920
|
-
key: '存貨單位(SKU)',
|
|
921
|
-
value: `<span class="fs-7">${dd.sku || '-'}</span>`,
|
|
922
|
-
},
|
|
1363
|
+
...startArr,
|
|
923
1364
|
{
|
|
924
1365
|
key: '進貨成本',
|
|
925
1366
|
value: `<span class="fs-7">${dd.cost || '-'}</span>`,
|
|
@@ -935,26 +1376,11 @@ export class StockHistory {
|
|
|
935
1376
|
return html `<span class="fs-7">$ ${subtotal.toLocaleString()}</span>`;
|
|
936
1377
|
})(),
|
|
937
1378
|
},
|
|
938
|
-
|
|
939
|
-
key: '備註',
|
|
940
|
-
value: `<span class="fs-7">${dd.note || '-'}</span>`,
|
|
941
|
-
},
|
|
1379
|
+
...endArr,
|
|
942
1380
|
];
|
|
943
|
-
|
|
944
|
-
else {
|
|
1381
|
+
case 'details':
|
|
945
1382
|
return [
|
|
946
|
-
|
|
947
|
-
key: '商品',
|
|
948
|
-
value: `<span class="fs-7">${dd.title || '-'}</span>`,
|
|
949
|
-
},
|
|
950
|
-
{
|
|
951
|
-
key: '規格',
|
|
952
|
-
value: `<span class="fs-7">${dd.spec}</span>`,
|
|
953
|
-
},
|
|
954
|
-
{
|
|
955
|
-
key: '存貨單位(SKU)',
|
|
956
|
-
value: `<span class="fs-7">${dd.sku || '-'}</span>`,
|
|
957
|
-
},
|
|
1383
|
+
...startArr,
|
|
958
1384
|
{
|
|
959
1385
|
key: '進貨成本',
|
|
960
1386
|
value: `<span class="fs-7">${dd.cost || '-'}</span>`,
|
|
@@ -1002,21 +1428,176 @@ export class StockHistory {
|
|
|
1002
1428
|
return html `<span class="fs-7">$ ${subtotal.toLocaleString()}</span>`;
|
|
1003
1429
|
})(),
|
|
1004
1430
|
},
|
|
1431
|
+
...endArr,
|
|
1432
|
+
];
|
|
1433
|
+
case 'logs':
|
|
1434
|
+
return [
|
|
1435
|
+
...startArr,
|
|
1436
|
+
{
|
|
1437
|
+
key: `原訂進貨數量`,
|
|
1438
|
+
value: `<span class="fs-7">${dd.transfer_count || '-'}</span>`,
|
|
1439
|
+
},
|
|
1440
|
+
{
|
|
1441
|
+
key: '實際進貨數量',
|
|
1442
|
+
value: `<span class="fs-7">${((_a = dd.recent_count) !== null && _a !== void 0 ? _a : 0) - ((_b = dd.replenishment_count) !== null && _b !== void 0 ? _b : 0)}</span>`,
|
|
1443
|
+
},
|
|
1444
|
+
{
|
|
1445
|
+
key: '差異數量',
|
|
1446
|
+
value: (() => {
|
|
1447
|
+
var _a;
|
|
1448
|
+
if (dd.recent_count === undefined) {
|
|
1449
|
+
return html `<span class="fs-7">-</span>`;
|
|
1450
|
+
}
|
|
1451
|
+
const n = dd.recent_count - dd.transfer_count - ((_a = dd.replenishment_count) !== null && _a !== void 0 ? _a : 0);
|
|
1452
|
+
if (n === 0) {
|
|
1453
|
+
return html `<span class="fs-7">0</span>`;
|
|
1454
|
+
}
|
|
1455
|
+
else if (n < 0) {
|
|
1456
|
+
return html `<span class="fs-7 tc_danger">${n}</span>`;
|
|
1457
|
+
}
|
|
1458
|
+
else if (dd.recent_count > dd.transfer_count) {
|
|
1459
|
+
return html `<span class="fs-7 tc_success">+${n}</span>`;
|
|
1460
|
+
}
|
|
1461
|
+
})(),
|
|
1462
|
+
},
|
|
1005
1463
|
{
|
|
1006
|
-
key: '
|
|
1007
|
-
value: `<span class="fs-7"
|
|
1464
|
+
key: '此次補貨數量',
|
|
1465
|
+
value: dd.replenishment_count ? html `<span class="fs-7 tc_success">+${(_c = dd.replenishment_count) !== null && _c !== void 0 ? _c : 0}</span>` : html `<span class="fs-7">-</span>`,
|
|
1008
1466
|
},
|
|
1467
|
+
...endArr,
|
|
1009
1468
|
];
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1469
|
+
}
|
|
1470
|
+
});
|
|
1471
|
+
}
|
|
1472
|
+
static transferDetailTable(json) {
|
|
1473
|
+
const x = (json.page - 1) * json.limit;
|
|
1474
|
+
return json.list.slice(x, x + json.limit).map((dd) => {
|
|
1475
|
+
var _a, _b, _c;
|
|
1476
|
+
const startArr = [
|
|
1477
|
+
{
|
|
1478
|
+
key: '商品',
|
|
1479
|
+
value: `<span class="fs-7">${dd.title || '-'}</span>`,
|
|
1480
|
+
},
|
|
1481
|
+
{
|
|
1482
|
+
key: '規格',
|
|
1483
|
+
value: `<span class="fs-7">${dd.spec}</span>`,
|
|
1484
|
+
},
|
|
1485
|
+
{
|
|
1486
|
+
key: '存貨單位(SKU)',
|
|
1487
|
+
value: `<span class="fs-7">${dd.sku || '-'}</span>`,
|
|
1488
|
+
},
|
|
1489
|
+
];
|
|
1490
|
+
const endArr = [
|
|
1491
|
+
{
|
|
1492
|
+
key: '備註',
|
|
1493
|
+
value: `<span class="fs-7">${dd.note || '-'}</span>`,
|
|
1494
|
+
},
|
|
1495
|
+
];
|
|
1496
|
+
switch (json.type) {
|
|
1497
|
+
case 'nonDetails':
|
|
1498
|
+
return [
|
|
1499
|
+
...startArr,
|
|
1500
|
+
{
|
|
1501
|
+
key: '來源庫存數量',
|
|
1502
|
+
value: `<span class="fs-7">unknown1</span>`,
|
|
1503
|
+
},
|
|
1504
|
+
{
|
|
1505
|
+
key: '預計調入數量',
|
|
1506
|
+
value: `<span class="fs-7">${dd.transfer_count || '-'}</span>`,
|
|
1507
|
+
},
|
|
1508
|
+
...endArr,
|
|
1509
|
+
];
|
|
1510
|
+
case 'details':
|
|
1511
|
+
return [
|
|
1512
|
+
...startArr,
|
|
1513
|
+
{
|
|
1514
|
+
key: '來源庫存數量',
|
|
1515
|
+
value: `<span class="fs-7">unknown1</span>`,
|
|
1516
|
+
},
|
|
1517
|
+
{
|
|
1518
|
+
key: '原訂調入數量',
|
|
1519
|
+
value: `<span class="fs-7">${dd.transfer_count || '-'}</span>`,
|
|
1520
|
+
},
|
|
1521
|
+
{
|
|
1522
|
+
key: '實際調入數量',
|
|
1523
|
+
value: `<span class="fs-7">${dd.recent_count || '-'}</span>`,
|
|
1524
|
+
},
|
|
1525
|
+
{
|
|
1526
|
+
key: '差異數量',
|
|
1527
|
+
value: (() => {
|
|
1528
|
+
if (dd.recent_count === undefined) {
|
|
1529
|
+
return html `<span class="fs-7">-</span>`;
|
|
1530
|
+
}
|
|
1531
|
+
const n = dd.recent_count - dd.transfer_count;
|
|
1532
|
+
if (n === 0) {
|
|
1533
|
+
return html `<span class="fs-7">0</span>`;
|
|
1534
|
+
}
|
|
1535
|
+
else if (n < 0) {
|
|
1536
|
+
return html `<span class="fs-7 tc_danger">${n}</span>`;
|
|
1537
|
+
}
|
|
1538
|
+
else if (dd.recent_count > dd.transfer_count) {
|
|
1539
|
+
return html `<span class="fs-7 tc_success">+${n}</span>`;
|
|
1540
|
+
}
|
|
1541
|
+
})(),
|
|
1542
|
+
},
|
|
1543
|
+
...endArr,
|
|
1544
|
+
];
|
|
1545
|
+
case 'logs':
|
|
1546
|
+
return [
|
|
1547
|
+
...startArr,
|
|
1548
|
+
{
|
|
1549
|
+
key: '原訂調入數量',
|
|
1550
|
+
value: `<span class="fs-7">${dd.transfer_count || '-'}</span>`,
|
|
1551
|
+
},
|
|
1552
|
+
{
|
|
1553
|
+
key: '實際調入數量',
|
|
1554
|
+
value: `<span class="fs-7">${((_a = dd.recent_count) !== null && _a !== void 0 ? _a : 0) - ((_b = dd.replenishment_count) !== null && _b !== void 0 ? _b : 0)}</span>`,
|
|
1555
|
+
},
|
|
1556
|
+
{
|
|
1557
|
+
key: '差異數量',
|
|
1558
|
+
value: (() => {
|
|
1559
|
+
var _a;
|
|
1560
|
+
if (dd.recent_count === undefined) {
|
|
1561
|
+
return html `<span class="fs-7">-</span>`;
|
|
1562
|
+
}
|
|
1563
|
+
const n = dd.recent_count - dd.transfer_count - ((_a = dd.replenishment_count) !== null && _a !== void 0 ? _a : 0);
|
|
1564
|
+
if (n === 0) {
|
|
1565
|
+
return html `<span class="fs-7">0</span>`;
|
|
1566
|
+
}
|
|
1567
|
+
else if (n < 0) {
|
|
1568
|
+
return html `<span class="fs-7 tc_danger">${n}</span>`;
|
|
1569
|
+
}
|
|
1570
|
+
else if (dd.recent_count > dd.transfer_count) {
|
|
1571
|
+
return html `<span class="fs-7 tc_success">+${n}</span>`;
|
|
1572
|
+
}
|
|
1573
|
+
})(),
|
|
1574
|
+
},
|
|
1575
|
+
{
|
|
1576
|
+
key: '此次補貨數量',
|
|
1577
|
+
value: dd.replenishment_count ? html `<span class="fs-7 tc_success">+${(_c = dd.replenishment_count) !== null && _c !== void 0 ? _c : 0}</span>` : html `<span class="fs-7">-</span>`,
|
|
1578
|
+
},
|
|
1579
|
+
...endArr,
|
|
1580
|
+
];
|
|
1581
|
+
}
|
|
1582
|
+
});
|
|
1583
|
+
}
|
|
1584
|
+
static replaceOrder(gvc, vm) {
|
|
1585
|
+
const typeData = typeConfig[vm.type];
|
|
1586
|
+
let vmi = undefined;
|
|
1587
|
+
const transfer_total = vm.data.content.product_list.reduce((sum, item) => {
|
|
1588
|
+
return sum + item.cost * item.transfer_count;
|
|
1589
|
+
}, 0);
|
|
1590
|
+
const recent_total = vm.data.content.product_list.reduce((sum, item) => {
|
|
1591
|
+
var _a;
|
|
1592
|
+
return sum + item.cost * ((_a = item.recent_count) !== null && _a !== void 0 ? _a : 0);
|
|
1593
|
+
}, 0);
|
|
1013
1594
|
return BgWidget.container([
|
|
1014
1595
|
html ` <div class="title-container">
|
|
1015
1596
|
${BgWidget.goBack(gvc.event(() => {
|
|
1016
1597
|
vm.view = 'mainList';
|
|
1017
1598
|
}))}
|
|
1018
1599
|
<div>${BgWidget.title(vm.data.order_id)}</div>
|
|
1019
|
-
<span class="
|
|
1600
|
+
<span class="mt-1 ms-2 fs-7">${StockHistory.getStatusBadge(vm.data.type, vm.data.status)}</span>
|
|
1020
1601
|
</div>
|
|
1021
1602
|
<div class="flex-fill"></div>`,
|
|
1022
1603
|
html ` <div class="d-flex justify-content-center ${document.body.clientWidth < 768 ? 'flex-column' : ''}" style="gap: 24px">
|
|
@@ -1024,11 +1605,18 @@ export class StockHistory {
|
|
|
1024
1605
|
BgWidget.mainCard([
|
|
1025
1606
|
html ` <div class="tx_700">${typeData.name}單資料</div>`,
|
|
1026
1607
|
BgWidget.horizontalLine({ margin: 0 }),
|
|
1027
|
-
html `
|
|
1608
|
+
html `
|
|
1609
|
+
<div class="d-flex flex-wrap" style="gap: 18px 0;">
|
|
1610
|
+
${this.getContentHTML(gvc, vm.data, {
|
|
1611
|
+
transfer_total,
|
|
1612
|
+
recent_total,
|
|
1613
|
+
})}
|
|
1614
|
+
</div>
|
|
1615
|
+
`,
|
|
1028
1616
|
].join(BgWidget.mbContainer(18))),
|
|
1029
1617
|
BgWidget.mainCard([
|
|
1030
1618
|
html `
|
|
1031
|
-
<div class="tx_700"
|
|
1619
|
+
<div class="tx_700">${typeData.name}商品</div>
|
|
1032
1620
|
${BgWidget.mbContainer(18)}
|
|
1033
1621
|
${[
|
|
1034
1622
|
BgWidget.tableV3({
|
|
@@ -1042,7 +1630,46 @@ export class StockHistory {
|
|
|
1042
1630
|
vm.data.content.product_list = response;
|
|
1043
1631
|
vmi.pageSize = Math.ceil(response.length / limit);
|
|
1044
1632
|
vmi.originalData = response;
|
|
1045
|
-
|
|
1633
|
+
switch (vm.data.type) {
|
|
1634
|
+
case 'restocking':
|
|
1635
|
+
if ([0, 1, 2].includes(vm.data.status)) {
|
|
1636
|
+
vmi.tableData = this.restockingDetailTable({
|
|
1637
|
+
type: 'nonDetails',
|
|
1638
|
+
list: vm.data.content.product_list,
|
|
1639
|
+
page: vmi.page,
|
|
1640
|
+
limit,
|
|
1641
|
+
});
|
|
1642
|
+
}
|
|
1643
|
+
else {
|
|
1644
|
+
vmi.tableData = this.restockingDetailTable({
|
|
1645
|
+
type: 'details',
|
|
1646
|
+
list: vm.data.content.product_list,
|
|
1647
|
+
page: vmi.page,
|
|
1648
|
+
limit,
|
|
1649
|
+
});
|
|
1650
|
+
}
|
|
1651
|
+
break;
|
|
1652
|
+
case 'transfer':
|
|
1653
|
+
if ([0, 1, 2].includes(vm.data.status)) {
|
|
1654
|
+
vmi.tableData = this.transferDetailTable({
|
|
1655
|
+
type: 'nonDetails',
|
|
1656
|
+
list: vm.data.content.product_list,
|
|
1657
|
+
page: vmi.page,
|
|
1658
|
+
limit,
|
|
1659
|
+
});
|
|
1660
|
+
}
|
|
1661
|
+
else {
|
|
1662
|
+
vmi.tableData = this.transferDetailTable({
|
|
1663
|
+
type: 'details',
|
|
1664
|
+
list: vm.data.content.product_list,
|
|
1665
|
+
page: vmi.page,
|
|
1666
|
+
limit,
|
|
1667
|
+
});
|
|
1668
|
+
}
|
|
1669
|
+
break;
|
|
1670
|
+
case 'checking':
|
|
1671
|
+
break;
|
|
1672
|
+
}
|
|
1046
1673
|
vmi.loading = false;
|
|
1047
1674
|
vmi.callback();
|
|
1048
1675
|
});
|
|
@@ -1051,23 +1678,99 @@ export class StockHistory {
|
|
|
1051
1678
|
filter: [],
|
|
1052
1679
|
hiddenPageSplit: true,
|
|
1053
1680
|
}),
|
|
1054
|
-
BgWidget.horizontalLine({ margin: 1.75 }),
|
|
1055
1681
|
(() => {
|
|
1056
|
-
|
|
1057
|
-
return
|
|
1058
|
-
}
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
<div
|
|
1063
|
-
<div
|
|
1064
|
-
|
|
1065
|
-
|
|
1682
|
+
if (vm.data.type !== 'restocking') {
|
|
1683
|
+
return '';
|
|
1684
|
+
}
|
|
1685
|
+
const priceHTML = (obj) => {
|
|
1686
|
+
var _a, _b;
|
|
1687
|
+
return html `<div class="d-flex w-100 mb-2">
|
|
1688
|
+
<div class="flex-fill"></div>
|
|
1689
|
+
<div class="d-flex justify-content-between" style="width: 250px;">
|
|
1690
|
+
<div class="${(_a = obj.className) !== null && _a !== void 0 ? _a : ''}">${obj.name}</div>
|
|
1691
|
+
${obj.incompletion
|
|
1692
|
+
? html `<div style="color: #8D8D8D">商品尚未核對完成</div>`
|
|
1693
|
+
: html `<div class="${(_b = obj.className) !== null && _b !== void 0 ? _b : ''}">$ ${obj.price.toLocaleString()}</div>`}
|
|
1694
|
+
</div>
|
|
1695
|
+
</div>`;
|
|
1696
|
+
};
|
|
1697
|
+
return [
|
|
1698
|
+
BgWidget.horizontalLine({ margin: 1.75 }),
|
|
1699
|
+
priceHTML({
|
|
1700
|
+
name: '原訂總成本',
|
|
1701
|
+
price: transfer_total,
|
|
1702
|
+
}),
|
|
1703
|
+
priceHTML({
|
|
1704
|
+
name: '實際總成本',
|
|
1705
|
+
price: recent_total,
|
|
1706
|
+
className: 'tx_700',
|
|
1707
|
+
incompletion: vm.data.status === 4,
|
|
1708
|
+
}),
|
|
1709
|
+
priceHTML({
|
|
1710
|
+
name: '差異金額',
|
|
1711
|
+
price: transfer_total - recent_total,
|
|
1712
|
+
className: 'tx_700',
|
|
1713
|
+
incompletion: vm.data.status === 4,
|
|
1714
|
+
}),
|
|
1715
|
+
].join('');
|
|
1066
1716
|
})(),
|
|
1067
1717
|
].join('')}
|
|
1068
1718
|
`,
|
|
1069
1719
|
].join(BgWidget.mbContainer(18))),
|
|
1070
|
-
BgWidget.mainCard([
|
|
1720
|
+
BgWidget.mainCard([
|
|
1721
|
+
html ` <div class="tx_700">${typeData.name}紀錄</div>`,
|
|
1722
|
+
vm.data.content.changeLogs
|
|
1723
|
+
.sort((a, b) => {
|
|
1724
|
+
return a.time > b.time ? -1 : 1;
|
|
1725
|
+
})
|
|
1726
|
+
.map((log) => {
|
|
1727
|
+
return html `<div class="d-flex justify-content-between align-items-center mt-2">
|
|
1728
|
+
<div class="d-flex align-items-center">
|
|
1729
|
+
<div class="me-3">${log.time}</div>
|
|
1730
|
+
<div class="me-1">${log.text}</div>
|
|
1731
|
+
${log.status === 1 || log.status === 5
|
|
1732
|
+
? html `<i
|
|
1733
|
+
class="fa-thin fa-square-list cursor_pointer"
|
|
1734
|
+
onclick="${gvc.event(() => {
|
|
1735
|
+
BgWidget.dialog({
|
|
1736
|
+
gvc,
|
|
1737
|
+
title: `${typeData.name}紀錄`,
|
|
1738
|
+
width: 1000,
|
|
1739
|
+
innerHTML: (gvc) => {
|
|
1740
|
+
return BgWidget.tableV3({
|
|
1741
|
+
gvc: gvc,
|
|
1742
|
+
getData: (vd) => {
|
|
1743
|
+
var _a;
|
|
1744
|
+
vmi = vd;
|
|
1745
|
+
const limit = 99999;
|
|
1746
|
+
this.getVariantInfo((_a = log.product_list) !== null && _a !== void 0 ? _a : [], (response) => {
|
|
1747
|
+
vmi.pageSize = Math.ceil(response.length / limit);
|
|
1748
|
+
vmi.originalData = response;
|
|
1749
|
+
vmi.tableData = this.restockingDetailTable({
|
|
1750
|
+
type: 'logs',
|
|
1751
|
+
list: response,
|
|
1752
|
+
page: vmi.page,
|
|
1753
|
+
limit,
|
|
1754
|
+
});
|
|
1755
|
+
vmi.loading = false;
|
|
1756
|
+
vmi.callback();
|
|
1757
|
+
});
|
|
1758
|
+
},
|
|
1759
|
+
rowClick: () => { },
|
|
1760
|
+
filter: [],
|
|
1761
|
+
hiddenPageSplit: true,
|
|
1762
|
+
});
|
|
1763
|
+
},
|
|
1764
|
+
});
|
|
1765
|
+
})}"
|
|
1766
|
+
></i>`
|
|
1767
|
+
: ''}
|
|
1768
|
+
</div>
|
|
1769
|
+
<div>${log.user}</div>
|
|
1770
|
+
</div>`;
|
|
1771
|
+
})
|
|
1772
|
+
.join(''),
|
|
1773
|
+
].join(BgWidget.mbContainer(18))),
|
|
1071
1774
|
].join(BgWidget.mbContainer(18)))}
|
|
1072
1775
|
</div>`,
|
|
1073
1776
|
BgWidget.mbContainer(240),
|
|
@@ -1204,8 +1907,8 @@ export class StockHistory {
|
|
|
1204
1907
|
].join('')}
|
|
1205
1908
|
</div>`;
|
|
1206
1909
|
}
|
|
1207
|
-
static getStatusBadge(status) {
|
|
1208
|
-
const statusData =
|
|
1910
|
+
static getStatusBadge(type, status) {
|
|
1911
|
+
const statusData = typeConfig[type].status[status];
|
|
1209
1912
|
switch (statusData.badge) {
|
|
1210
1913
|
case 'info':
|
|
1211
1914
|
return BgWidget.infoInsignia(statusData.title);
|
|
@@ -1219,7 +1922,7 @@ export class StockHistory {
|
|
|
1219
1922
|
return statusData.title;
|
|
1220
1923
|
}
|
|
1221
1924
|
}
|
|
1222
|
-
static getContentHTML(gvc, data) {
|
|
1925
|
+
static getContentHTML(gvc, data, obj) {
|
|
1223
1926
|
const glitter = gvc.glitter;
|
|
1224
1927
|
const vm = {
|
|
1225
1928
|
id: glitter.getUUID(),
|
|
@@ -1228,6 +1931,7 @@ export class StockHistory {
|
|
|
1228
1931
|
storeList: [],
|
|
1229
1932
|
vendorList: [],
|
|
1230
1933
|
};
|
|
1934
|
+
const typeData = typeConfig[data.type];
|
|
1231
1935
|
return gvc.bindView({
|
|
1232
1936
|
bind: vm.id,
|
|
1233
1937
|
view: () => {
|
|
@@ -1239,21 +1943,71 @@ export class StockHistory {
|
|
|
1239
1943
|
});
|
|
1240
1944
|
}
|
|
1241
1945
|
else {
|
|
1242
|
-
const total = vm.data.content.product_list.reduce((sum, item) => {
|
|
1243
|
-
return sum + item.cost * item.transfer_count;
|
|
1244
|
-
}, 0);
|
|
1245
1946
|
const vendor = vm.vendorList.find((v) => v.id === vm.data.content.vendor);
|
|
1246
|
-
const
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
{
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
{
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1947
|
+
const storeIn = vm.storeList.find((s) => s.id === vm.data.content.store_in);
|
|
1948
|
+
const storeOut = vm.storeList.find((s) => s.id === vm.data.content.store_out);
|
|
1949
|
+
const startArr = [
|
|
1950
|
+
{
|
|
1951
|
+
title: `${typeData.name}單編號`,
|
|
1952
|
+
value: vm.data.order_id,
|
|
1953
|
+
},
|
|
1954
|
+
{
|
|
1955
|
+
title: `${typeData.name}日期`,
|
|
1956
|
+
value: vm.data.created_time,
|
|
1957
|
+
},
|
|
1958
|
+
{
|
|
1959
|
+
title: `${typeData.name}單狀態`,
|
|
1960
|
+
value: typeConfig[vm.data.type].status[vm.data.status].title,
|
|
1961
|
+
},
|
|
1962
|
+
];
|
|
1963
|
+
const endArr = [
|
|
1964
|
+
{
|
|
1965
|
+
title: '備註',
|
|
1966
|
+
value: (_a = vm.data.content.note) !== null && _a !== void 0 ? _a : '',
|
|
1967
|
+
width: 40,
|
|
1968
|
+
},
|
|
1969
|
+
];
|
|
1970
|
+
const arr = (() => {
|
|
1971
|
+
switch (data.type) {
|
|
1972
|
+
case 'restocking':
|
|
1973
|
+
return [
|
|
1974
|
+
...startArr,
|
|
1975
|
+
{
|
|
1976
|
+
title: '供應商',
|
|
1977
|
+
value: vendor ? vendor.name : '',
|
|
1978
|
+
},
|
|
1979
|
+
{
|
|
1980
|
+
title: '庫存點',
|
|
1981
|
+
value: storeIn ? storeIn.name : '',
|
|
1982
|
+
},
|
|
1983
|
+
{
|
|
1984
|
+
title: '原定總成本 / 實際總成本',
|
|
1985
|
+
value: `$${obj.transfer_total.toLocaleString()} / $${obj.recent_total.toLocaleString()}`,
|
|
1986
|
+
},
|
|
1987
|
+
{
|
|
1988
|
+
title: '差異金額',
|
|
1989
|
+
value: `$${(obj.transfer_total - obj.recent_total).toLocaleString()}`,
|
|
1990
|
+
},
|
|
1991
|
+
...endArr,
|
|
1992
|
+
];
|
|
1993
|
+
case 'transfer':
|
|
1994
|
+
return [
|
|
1995
|
+
...startArr,
|
|
1996
|
+
{
|
|
1997
|
+
title: '調出庫存點',
|
|
1998
|
+
value: storeOut ? storeOut.name : '',
|
|
1999
|
+
},
|
|
2000
|
+
{
|
|
2001
|
+
title: '調出庫入點',
|
|
2002
|
+
value: storeIn ? storeIn.name : '',
|
|
2003
|
+
},
|
|
2004
|
+
...endArr,
|
|
2005
|
+
];
|
|
2006
|
+
case 'checking':
|
|
2007
|
+
return [...startArr, ...endArr];
|
|
2008
|
+
}
|
|
2009
|
+
})();
|
|
2010
|
+
return arr
|
|
1257
2011
|
.map((item) => {
|
|
1258
2012
|
var _a;
|
|
1259
2013
|
return html `<div style="${document.body.clientWidth > 768 ? `width: ${(_a = item.width) !== null && _a !== void 0 ? _a : 20}%;` : ''}">
|
|
@@ -1287,6 +2041,7 @@ export class StockHistory {
|
|
|
1287
2041
|
static getButtonBar(gvc, vm) {
|
|
1288
2042
|
const glitter = gvc.glitter;
|
|
1289
2043
|
const dialog = new ShareDialog(glitter);
|
|
2044
|
+
const typeData = typeConfig[vm.data.type];
|
|
1290
2045
|
const buttonList = [
|
|
1291
2046
|
BgWidget.cancel(gvc.event(() => {
|
|
1292
2047
|
if (vm.view === 'replace') {
|
|
@@ -1297,55 +2052,203 @@ export class StockHistory {
|
|
|
1297
2052
|
}
|
|
1298
2053
|
}), '返回'),
|
|
1299
2054
|
];
|
|
1300
|
-
function updateData(status) {
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
2055
|
+
function updateData(status, warningText) {
|
|
2056
|
+
dialog.warningMessage({
|
|
2057
|
+
callback: (bool) => {
|
|
2058
|
+
if (bool) {
|
|
2059
|
+
vm.data.status = status;
|
|
2060
|
+
ApiStock.putStockHistory(vm.data).then((r) => {
|
|
2061
|
+
dialog.dataLoading({ visible: false });
|
|
2062
|
+
if (r.result && r.response) {
|
|
2063
|
+
dialog.successMessage({ text: '更新成功' });
|
|
2064
|
+
setTimeout(() => {
|
|
2065
|
+
vm.view = 'replace';
|
|
2066
|
+
}, 700);
|
|
2067
|
+
}
|
|
2068
|
+
else {
|
|
2069
|
+
dialog.successMessage({ text: '更新失敗' });
|
|
2070
|
+
}
|
|
2071
|
+
});
|
|
2072
|
+
}
|
|
2073
|
+
},
|
|
2074
|
+
text: warningText && warningText.length > 0 ? warningText : `確定要更新此${typeData.name}單?`,
|
|
1313
2075
|
});
|
|
1314
2076
|
}
|
|
1315
2077
|
function deleteData() {
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
2078
|
+
dialog.warningMessage({
|
|
2079
|
+
callback: (bool) => {
|
|
2080
|
+
if (bool) {
|
|
2081
|
+
ApiStock.deleteStockHistory(vm.data).then((r) => {
|
|
2082
|
+
dialog.dataLoading({ visible: false });
|
|
2083
|
+
if (r.result && r.response) {
|
|
2084
|
+
dialog.successMessage({ text: '刪除成功' });
|
|
2085
|
+
setTimeout(() => {
|
|
2086
|
+
vm.view = 'mainList';
|
|
2087
|
+
}, 700);
|
|
2088
|
+
}
|
|
2089
|
+
else {
|
|
2090
|
+
dialog.successMessage({ text: '刪除失敗' });
|
|
2091
|
+
}
|
|
2092
|
+
});
|
|
2093
|
+
}
|
|
2094
|
+
},
|
|
2095
|
+
text: (() => {
|
|
2096
|
+
switch (vm.data.type) {
|
|
2097
|
+
case 'restocking':
|
|
2098
|
+
return html `
|
|
2099
|
+
<div class="my-2">
|
|
2100
|
+
<div class="tx_normal">刪除${typeData.name}單後將無法復原,${typeData.name}記錄將被移除,且不會</div>
|
|
2101
|
+
<div class="tx_normal">對現有庫存數量產生影響。確定要刪除此${typeData.name}單嗎?</div>
|
|
2102
|
+
${BgWidget.mbContainer(8)}
|
|
2103
|
+
<div class="tx_gray_14">※提醒您,請確認${typeData.name}單貨品是否已到貨,若已到貨,請先進</div>
|
|
2104
|
+
<div class="tx_gray_14">行核對,確保庫存正確,避免退貨單扣除尚未新增的庫存。</div>
|
|
2105
|
+
</div>
|
|
2106
|
+
`;
|
|
2107
|
+
case 'transfer':
|
|
2108
|
+
return html `
|
|
2109
|
+
<div class="my-2">
|
|
2110
|
+
<div class="tx_normal">刪除調撥單後將無法復原,調撥記錄將被移除,且不會</div>
|
|
2111
|
+
<div class="tx_normal">對現有庫存數量產生影響。確定要刪除此調撥單嗎?</div>
|
|
2112
|
+
${BgWidget.mbContainer(8)}
|
|
2113
|
+
<div class="tx_gray_14">※提醒您,請確認調撥單貨品是否已到貨,若已到貨,請先進</div>
|
|
2114
|
+
<div class="tx_gray_14">行核對,避免退還原庫存點時,扣除尚未新增的庫存。</div>
|
|
2115
|
+
</div>
|
|
2116
|
+
`;
|
|
2117
|
+
case 'checking':
|
|
2118
|
+
return html `
|
|
2119
|
+
<div class="my-2">
|
|
2120
|
+
<div class="tx_normal">刪除盤點單後將無法復原,確定要刪除此調撥單嗎?</div>
|
|
2121
|
+
</div>
|
|
2122
|
+
`;
|
|
2123
|
+
}
|
|
2124
|
+
})(),
|
|
1327
2125
|
});
|
|
1328
2126
|
}
|
|
1329
2127
|
if (vm.view === 'replace') {
|
|
1330
2128
|
if ([2].includes(vm.data.status)) {
|
|
1331
2129
|
buttonList.push(BgWidget.danger(gvc.event(() => {
|
|
1332
2130
|
deleteData();
|
|
1333
|
-
}),
|
|
2131
|
+
}), `刪除${typeData.name}單`));
|
|
1334
2132
|
}
|
|
1335
2133
|
if ([5].includes(vm.data.status)) {
|
|
1336
|
-
buttonList.push(BgWidget.grayButton(gvc.event(() => {
|
|
1337
|
-
updateData(
|
|
1338
|
-
|
|
2134
|
+
buttonList.push(BgWidget.grayButton(`完成${typeData.name}}`, gvc.event(() => {
|
|
2135
|
+
updateData(0, (() => {
|
|
2136
|
+
switch (vm.data.type) {
|
|
2137
|
+
case 'restocking':
|
|
2138
|
+
return html `
|
|
2139
|
+
<div class="my-2">
|
|
2140
|
+
<div class="tx_normal">目前${typeData.name}的商品數量與原訂數量存在差異,</div>
|
|
2141
|
+
<div class="tx_normal">確定要完成${typeData.name}嗎?</div>
|
|
2142
|
+
${BgWidget.mbContainer(8)}
|
|
2143
|
+
<div class="tx_gray_14">※完成${typeData.name}後,此${typeData.name}單將被標記為已完成,</div>
|
|
2144
|
+
<div class="tx_gray_14">後續無法再進行補貨操作。</div>
|
|
2145
|
+
</div>
|
|
2146
|
+
`;
|
|
2147
|
+
case 'transfer':
|
|
2148
|
+
return html `
|
|
2149
|
+
<div class="my-2">
|
|
2150
|
+
<div class="tx_normal">目前調撥的商品數量與原訂數量存在差異,</div>
|
|
2151
|
+
<div class="tx_normal">確定要完成調撥嗎?</div>
|
|
2152
|
+
${BgWidget.mbContainer(8)}
|
|
2153
|
+
<div class="tx_gray_14">※完成調撥後,此調撥單將被標記為已完成,</div>
|
|
2154
|
+
<div class="tx_gray_14">後續無法再進行補貨操作。</div>
|
|
2155
|
+
</div>
|
|
2156
|
+
`;
|
|
2157
|
+
case 'checking':
|
|
2158
|
+
return html `finished check`;
|
|
2159
|
+
}
|
|
2160
|
+
})());
|
|
2161
|
+
})));
|
|
1339
2162
|
}
|
|
1340
2163
|
if ([0, 1, 4, 5].includes(vm.data.status)) {
|
|
2164
|
+
const text = (() => {
|
|
2165
|
+
switch (vm.data.status) {
|
|
2166
|
+
case 4:
|
|
2167
|
+
switch (vm.data.type) {
|
|
2168
|
+
case 'restocking':
|
|
2169
|
+
case 'transfer':
|
|
2170
|
+
return html `
|
|
2171
|
+
<div class="my-2">
|
|
2172
|
+
<div class="tx_normal">${typeData.name}單目前處於「已暫停」狀態,請完成所有商品數量的</div>
|
|
2173
|
+
<div class="tx_normal">核對,確認庫存數據無誤後再進行取消操作。</div>
|
|
2174
|
+
</div>
|
|
2175
|
+
`;
|
|
2176
|
+
case 'checking':
|
|
2177
|
+
return '';
|
|
2178
|
+
}
|
|
2179
|
+
case 5:
|
|
2180
|
+
switch (vm.data.type) {
|
|
2181
|
+
case 'restocking':
|
|
2182
|
+
return html `
|
|
2183
|
+
<div class="my-2">
|
|
2184
|
+
<div class="tx_normal">取消後將無法再修正,確定要取消此${typeData.name}單嗎?</div>
|
|
2185
|
+
${BgWidget.mbContainer(8)}
|
|
2186
|
+
<div class="tx_gray_14">※請確認商品是否已補貨,若已補貨但尚未核對,</div>
|
|
2187
|
+
<div class="tx_gray_14">取消${typeData.name}單可能會導致庫存數據不正確。</div>
|
|
2188
|
+
${BgWidget.mbContainer(8)}
|
|
2189
|
+
<div class="tx_gray_14">※取消後請新增「${typeData.name}退回單」,並退還商品與發票。</div>
|
|
2190
|
+
</div>
|
|
2191
|
+
`;
|
|
2192
|
+
case 'transfer':
|
|
2193
|
+
return html `
|
|
2194
|
+
<div class="my-2">
|
|
2195
|
+
<div class="tx_normal">取消後將無法再修正,確定要取消此${typeData.name}單嗎?</div>
|
|
2196
|
+
${BgWidget.mbContainer(8)}
|
|
2197
|
+
<div class="tx_gray_14">※請確認商品是否已補貨,若已補貨但尚未核對,</div>
|
|
2198
|
+
<div class="tx_gray_14">取消${typeData.name}單可能會導致庫存數據不正確。</div>
|
|
2199
|
+
${BgWidget.mbContainer(8)}
|
|
2200
|
+
<div class="tx_gray_14">※取消後請新增全新的「調撥單」,並退還商品。</div>
|
|
2201
|
+
</div>
|
|
2202
|
+
`;
|
|
2203
|
+
case 'checking':
|
|
2204
|
+
return html `
|
|
2205
|
+
<div class="my-2">
|
|
2206
|
+
<div class="tx_normal">取消後將無法再修正,確定要取消此${typeData.name}單嗎?</div>
|
|
2207
|
+
${BgWidget.mbContainer(8)}
|
|
2208
|
+
<div class="tx_gray_14">※提醒您,此盤點單存在數量差異,請確認該差異是否無需更新至庫存。</div>
|
|
2209
|
+
</div>
|
|
2210
|
+
`;
|
|
2211
|
+
}
|
|
2212
|
+
default:
|
|
2213
|
+
switch (vm.data.type) {
|
|
2214
|
+
case 'restocking':
|
|
2215
|
+
return html `
|
|
2216
|
+
<div class="my-2">
|
|
2217
|
+
<div class="tx_normal">取消後將無法復原,確定要取消此${typeData.name}單嗎?</div>
|
|
2218
|
+
${BgWidget.mbContainer(8)}
|
|
2219
|
+
<div class="tx_gray_14">※提醒您,取消${typeData.name}單後,請新增「${typeData.name}退回單」並將</div>
|
|
2220
|
+
<div class="tx_gray_14">商品及發票一併退還給供應商,確保退貨流程完整。</div>
|
|
2221
|
+
</div>
|
|
2222
|
+
`;
|
|
2223
|
+
case 'transfer':
|
|
2224
|
+
return html `
|
|
2225
|
+
<div class="my-2">
|
|
2226
|
+
<div class="tx_normal">取消後將無法復原,確定要取消此${typeData.name}單嗎?</div>
|
|
2227
|
+
${BgWidget.mbContainer(8)}
|
|
2228
|
+
<div class="tx_gray_14">※提醒您,取消後請新增一張全新的「調撥單」,將商</div>
|
|
2229
|
+
<div class="tx_gray_14">品調回原庫存點,以確保庫存準確且流程完整。</div>
|
|
2230
|
+
</div>
|
|
2231
|
+
`;
|
|
2232
|
+
case 'checking':
|
|
2233
|
+
return html `
|
|
2234
|
+
<div class="my-2">
|
|
2235
|
+
<div class="tx_normal">取消後將無法復原,確定要取消此${typeData.name}單嗎?</div>
|
|
2236
|
+
${BgWidget.mbContainer(8)}
|
|
2237
|
+
<div class="tx_gray_14">※提醒您,若盤點單已提交且存在數量差異,系統將回</div>
|
|
2238
|
+
<div class="tx_gray_14">復至調整前的庫存狀態。</div>
|
|
2239
|
+
</div>
|
|
2240
|
+
`;
|
|
2241
|
+
}
|
|
2242
|
+
}
|
|
2243
|
+
})();
|
|
1341
2244
|
buttonList.push(BgWidget.danger(gvc.event(() => {
|
|
1342
|
-
updateData(6);
|
|
1343
|
-
}),
|
|
2245
|
+
updateData(6, text);
|
|
2246
|
+
}), `取消${typeData.name}單`));
|
|
1344
2247
|
}
|
|
1345
2248
|
if ([2, 4, 5].includes(vm.data.status)) {
|
|
1346
2249
|
buttonList.push(BgWidget.save(gvc.event(() => {
|
|
1347
2250
|
vm.view = 'checkList';
|
|
1348
|
-
}),
|
|
2251
|
+
}), `${typeData.name}核對`));
|
|
1349
2252
|
}
|
|
1350
2253
|
}
|
|
1351
2254
|
if (vm.view === 'checkList') {
|
|
@@ -1353,7 +2256,7 @@ export class StockHistory {
|
|
|
1353
2256
|
return typeof item.recent_count === 'number' && !isNaN(item.recent_count);
|
|
1354
2257
|
});
|
|
1355
2258
|
const isEqual = vm.data.content.product_list.every((item) => {
|
|
1356
|
-
return typeof item.recent_count === 'number' && !isNaN(item.recent_count) && item.recent_count
|
|
2259
|
+
return typeof item.recent_count === 'number' && !isNaN(item.recent_count) && item.recent_count >= item.transfer_count;
|
|
1357
2260
|
});
|
|
1358
2261
|
buttonList.push(BgWidget.cancel(gvc.event(() => {
|
|
1359
2262
|
if (isEqual) {
|
|
@@ -1425,5 +2328,29 @@ export class StockHistory {
|
|
|
1425
2328
|
callback(product_list);
|
|
1426
2329
|
});
|
|
1427
2330
|
}
|
|
2331
|
+
static getVariantInfo(dataList, callback) {
|
|
2332
|
+
ApiShop.getVariants({
|
|
2333
|
+
page: 0,
|
|
2334
|
+
limit: 99999,
|
|
2335
|
+
id_list: dataList.map((item) => item.variant_id).join(','),
|
|
2336
|
+
productType: 'all',
|
|
2337
|
+
}).then((r) => {
|
|
2338
|
+
let product_list = [];
|
|
2339
|
+
if (r.result && r.response.data) {
|
|
2340
|
+
r.response.data.forEach((item) => {
|
|
2341
|
+
const origin = dataList.find((o) => {
|
|
2342
|
+
return o.variant_id === item.id;
|
|
2343
|
+
});
|
|
2344
|
+
const title = item.product_content.title;
|
|
2345
|
+
const spec = item.variant_content.spec;
|
|
2346
|
+
const sku = item.variant_content.sku;
|
|
2347
|
+
if (origin) {
|
|
2348
|
+
product_list.push(Object.assign(Object.assign({}, origin), { title: title, spec: spec && spec.length > 0 ? spec.join('/') : '單一規格', sku: sku !== null && sku !== void 0 ? sku : '' }));
|
|
2349
|
+
}
|
|
2350
|
+
});
|
|
2351
|
+
}
|
|
2352
|
+
callback(product_list);
|
|
2353
|
+
});
|
|
2354
|
+
}
|
|
1428
2355
|
}
|
|
1429
2356
|
window.glitter.setModule(import.meta.url, StockHistory);
|