ts-glitter 21.8.3 → 21.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-dialog.js +342 -100
  4. package/lowcode/backend-manager/bg-dialog.ts +432 -145
  5. package/lowcode/backend-manager/bg-widget.js +4 -4
  6. package/lowcode/backend-manager/bg-widget.ts +5 -5
  7. package/lowcode/cms-plugin/POS-setting.js +18 -6
  8. package/lowcode/cms-plugin/POS-setting.ts +22 -10
  9. package/lowcode/cms-plugin/pos-pages/payment-page.js +9 -2
  10. package/lowcode/cms-plugin/pos-pages/payment-page.ts +11 -3
  11. package/lowcode/cms-plugin/shopping-discount-setting.js +148 -92
  12. package/lowcode/cms-plugin/shopping-discount-setting.ts +162 -111
  13. package/lowcode/cms-plugin/shopping-product-stock.js +58 -45
  14. package/lowcode/cms-plugin/shopping-product-stock.ts +66 -49
  15. package/lowcode/cms-plugin/stock-stores.js +55 -0
  16. package/lowcode/cms-plugin/stock-stores.ts +59 -0
  17. package/lowcode/css/editor.css +8 -9
  18. package/lowcode/editor/basic-component.js +0 -10
  19. package/lowcode/editor/basic-component.ts +1 -11
  20. package/lowcode/glitter-base/route/article.js +50 -51
  21. package/lowcode/glitter-base/route/article.ts +102 -103
  22. package/lowcode/glitter-base/route/recommend.js +1 -0
  23. package/lowcode/glitter-base/route/recommend.ts +141 -123
  24. package/lowcode/glitterBundle/plugins/html-render.js +2 -0
  25. package/lowcode/glitterBundle/plugins/html-render.ts +1 -0
  26. package/lowcode/jspage/function-page/setting_editor.js +1 -1
  27. package/lowcode/jspage/function-page/setting_editor.ts +1 -1
  28. package/lowcode/jspage/function-page/tool-setting.js +0 -1
  29. package/lowcode/jspage/function-page/tool-setting.ts +0 -1
  30. package/lowcode/jspage/main.js +6 -1
  31. package/lowcode/jspage/main.ts +6 -1
  32. package/lowcode/modules/image-library-clone.ts +2 -0
  33. package/lowcode/modules/image-library.js +118 -155
  34. package/lowcode/modules/image-library.ts +134 -197
  35. package/lowcode/official_view_component/official/component.js +1 -1
  36. package/lowcode/official_view_component/official/component.ts +1 -1
  37. package/lowcode/public-components/banner/first-banner.js +85 -50
  38. package/lowcode/public-components/banner/first-banner.ts +96 -59
  39. package/lowcode/public-components/layout-plugin/social-links-01.js +19 -19
  40. package/lowcode/public-components/layout-plugin/social-links-01.ts +35 -35
  41. package/package.json +1 -1
  42. package/src/api-public/controllers/article.js +11 -0
  43. package/src/api-public/controllers/article.js.map +1 -1
  44. package/src/api-public/controllers/article.ts +13 -0
  45. package/src/api-public/controllers/recommend.js +1 -0
  46. package/src/api-public/controllers/recommend.js.map +1 -1
  47. package/src/api-public/controllers/recommend.ts +99 -89
  48. package/src/api-public/services/checkout-event.js +81 -43
  49. package/src/api-public/services/checkout-event.js.map +1 -1
  50. package/src/api-public/services/checkout-event.ts +93 -38
  51. package/src/api-public/services/post.js +7 -17
  52. package/src/api-public/services/post.js.map +1 -1
  53. package/src/api-public/services/recommend.d.ts +1 -0
  54. package/src/api-public/services/recommend.js +12 -2
  55. package/src/api-public/services/recommend.js.map +1 -1
  56. package/src/api-public/services/recommend.ts +375 -354
  57. package/src/api-public/services/shopping.d.ts +1 -0
  58. package/src/api-public/services/shopping.js +4 -2
  59. package/src/api-public/services/shopping.js.map +1 -1
  60. package/src/api-public/services/shopping.ts +7 -2
  61. package/src/services/saas-table-check.js +1 -1
  62. package/src/services/saas-table-check.js.map +1 -1
  63. package/src/services/saas-table-check.ts +1 -1
@@ -1,30 +1,37 @@
1
1
  import { GVC } from '../glitterBundle/GVController.js';
2
- import { EditorElem } from '../glitterBundle/plugins/editor-elem.js';
3
- import { PageSplit } from './splitPage.js';
4
- import { Tool } from '../modules/tool.js';
5
- import { ApiShop } from '../glitter-base/route/shopping.js';
6
- import { Article } from '../glitter-base/route/article.js';
7
- import { ApiUser } from '../glitter-base/route/user.js';
8
- import { ApiStock } from '../glitter-base/route/stock.js';
9
2
  import { ShareDialog } from '../glitterBundle/dialog/ShareDialog.js';
10
- import { Language, LanguageLocation } from '../glitter-base/global/language.js';
11
- import { FormModule } from '../cms-plugin/module/form-module.js';
12
- import { FormCheck } from '../cms-plugin/module/form-check.js';
13
- import { TableStorage } from '../cms-plugin/module/table-storage.js';
14
- import { ProductAi } from '../cms-plugin/ai-generator/product-ai.js';
15
- import { imageLibrary } from '../modules/image-library.js';
3
+ import { Tool } from '../modules/tool.js';
4
+ import { BgWidget } from './bg-widget.js';
16
5
  import { Animation } from '../glitterBundle/module/Animation.js';
6
+ import { Article } from '../glitter-base/route/article.js';
7
+ import { ApiRecommend } from '../glitter-base/route/recommend.js';
17
8
 
18
9
  const html = String.raw;
19
10
  const css = String.raw;
20
11
 
21
- export interface Option {
22
- key: string;
23
- value: string;
24
- note?: string;
25
- image?: string;
26
- icon?: string;
27
- }
12
+ export type ShopType = 'group' | 'recommend' | 'hidden' | 'onepage';
13
+
14
+ type ShopObject = { key: string; icon: string; title: string };
15
+
16
+ type OptionData = { key: string; name: string; realname: string };
17
+
18
+ type ViewControl = 'selected' | 'view';
19
+
20
+ type ViewModel = {
21
+ controllerId: string;
22
+ control: ViewControl;
23
+ mainId: string;
24
+ selectedId: string;
25
+ loading: Boolean;
26
+ pageType: ShopType;
27
+ searchType: 'title';
28
+ search: string;
29
+ orderString: string;
30
+ dataList: OptionData[];
31
+ filterList: { key: string; name: string }[];
32
+ postData: string[];
33
+ filterData: string[];
34
+ };
28
35
 
29
36
  export class BgDialog {
30
37
  gvc: GVC;
@@ -42,13 +49,21 @@ export class BgDialog {
42
49
  }
43
50
 
44
51
  private init() {
45
- this.gvc.addStyle(css`
52
+ this.gvc.addStyle(`
46
53
  .${this.prefix}_body {
47
54
  border-radius: 10px;
48
55
  background: #fff;
49
56
  overflow-y: auto;
50
- min-width: calc(100vw - 180px);
51
- max-width: calc(100vw - 20px);
57
+ ${
58
+ this.isMobile
59
+ ? `
60
+ width: calc(100vw - 20px);
61
+ `
62
+ : `
63
+ min-width: calc(100vw - 40%);
64
+ max-width: calc(100vw - 20px);
65
+ `
66
+ }
52
67
  }
53
68
 
54
69
  .${this.prefix}_header {
@@ -59,21 +74,29 @@ export class BgDialog {
59
74
  padding: 12px 20px;
60
75
  }
61
76
 
62
- .${this.prefix}_btn {
77
+ .${this.prefix}_main {
78
+ max-height: 540px;
79
+ border: 20px solid #fff;
80
+ gap: 0;
81
+ position: relative;
82
+ }
83
+
84
+ .${this.prefix}_triple_bar {
63
85
  display: flex;
64
- padding: 3.25px 18px;
65
- align-items: center;
66
- gap: 8px;
67
- border-radius: 10px;
86
+ flex-direction: column;
87
+ position: sticky;
88
+ top: 0;
89
+ background-color: #fff;
68
90
  }
69
91
 
70
- .${this.prefix}_save {
71
- background: #393939;
92
+ .${this.prefix}_param_bar {
93
+ display: flex;
94
+ margin-top: 8px;
95
+ gap: 10px;
72
96
  }
73
97
 
74
- .${this.prefix}_cancel {
75
- background: #fff;
76
- border: 1px solid #ddd;
98
+ .${this.prefix}_checkbox_container {
99
+ min-height: 353px;
77
100
  }
78
101
 
79
102
  .${this.prefix}_footer {
@@ -93,138 +116,402 @@ export class BgDialog {
93
116
  display: flex;
94
117
  align-items: center;
95
118
  justify-content: end;
96
- gap: 14px;
119
+ gap: ${this.isMobile ? 8 : 14}px;
97
120
  }
98
- `);
99
- }
100
121
 
101
- static select(obj: { gvc: GVC; default: string; options: Option[]; callback: (value: string) => void }) {
102
- return html` <select
103
- class="c_select c_select_w_100"
104
- onchange="${obj.gvc.event(e => {
105
- return obj.callback(e.value);
106
- })}"
107
- >
108
- ${obj.options
109
- .map(opt => {
110
- return html` <option class="c_select_option" value="${opt.key}" ${obj.default === opt.key ? 'selected' : ''}>
111
- ${opt.value}
112
- </option>`;
113
- })
114
- .join('')}
115
- ${obj.options.find(opt => obj.default === opt.key)
116
- ? ''
117
- : html`<option class="d-none" selected>請選擇項目</option>`}
118
- </select>`;
119
- }
122
+ .${this.prefix}_view_all {
123
+ color: #4d86db;
124
+ font-size: 16px;
125
+ font-weight: 400;
126
+ cursor: pointer;
127
+ overflow-wrap: break-word;
128
+ }
120
129
 
121
- save(event: string, text: string = '完成'): string {
122
- return html` <button class="btn ${this.prefix}_btn ${this.prefix}_save" type="button" onclick="${event}">
123
- <span class="tx_700_white">${text}</span>
124
- </button>`;
125
- }
130
+ .${this.prefix}_clear_all {
131
+ margin-right: 8px;
132
+ font-size: 16px;
133
+ text-decoration: underline;
134
+ cursor: pointer;
135
+ }
126
136
 
127
- cancal(event: string, text: string = '取消'): string {
128
- return html` <button class="btn ${this.prefix}_btn ${this.prefix}_cancel" type="button" onclick="${event}">
129
- <span class="tx_700">${text}</span>
130
- </button>`;
137
+ .${this.prefix}_icon {
138
+ width: 16px;
139
+ height: 16px;
140
+ margin-right: 8px;
141
+ text-align: center;
142
+ }
143
+ `);
131
144
  }
132
145
 
133
- viewAllSelect(event: string, text: string = '檢視已選取項目'): string {
134
- return html`<span
135
- style="color: #4D86DB; font-size: 16px; font-weight: 400; cursor:pointer; overflow-wrap: break-word;"
136
- onclick="${event}"
137
- >${text}</span
138
- >`;
146
+ viewAll(event: string, text: string = '檢視已選取項目'): string {
147
+ return html`<span class="${this.prefix}_view_all" onclick="${event}">${text}</span>`;
139
148
  }
140
149
 
141
150
  clearAll(event: string, text: string = '清除全部'): string {
142
- return html`<span style="margin-right: 8px; font-size: 16px; text-decoration: underline;" onclick="${event}"
143
- >${text}</span
144
- >`;
151
+ return html`<span class="${this.prefix}_clear_all" onclick="${event}">${text}</span>`;
152
+ }
153
+
154
+ shopTypeRecord(): Record<ShopType, ShopObject> {
155
+ return {
156
+ hidden: {
157
+ key: 'hidden',
158
+ icon: html`<i class="fa-solid fa-face-dotted ${this.prefix}_icon"></i>`,
159
+ title: '隱形賣場',
160
+ },
161
+ onepage: {
162
+ key: 'onepage',
163
+ icon: html`<i class="fa-regular fa-file ${this.prefix}_icon"></i>`,
164
+ title: '一頁商店',
165
+ },
166
+ group: {
167
+ key: 'group',
168
+ icon: html`<i class="fa-regular fa-puzzle-piece ${this.prefix}_icon"></i>`,
169
+ title: '拼團賣場',
170
+ },
171
+ recommend: {
172
+ key: 'recommend',
173
+ icon: html`<i class="fa-regular fa-share-nodes ${this.prefix}_icon"></i>`,
174
+ title: '分銷連結',
175
+ },
176
+ };
145
177
  }
146
178
 
147
- marketShop() {
179
+ marketShop(args: { def: string[]; callback: (postData: string[]) => void }) {
148
180
  const gvc = this.gvc;
149
181
  const glitter = this.glitter;
182
+ const dialog = new ShareDialog(glitter);
183
+
184
+ const vm: ViewModel = {
185
+ controllerId: glitter.getUUID(),
186
+ control: 'view' as ViewControl,
187
+ mainId: glitter.getUUID(),
188
+ selectedId: glitter.getUUID(),
189
+ loading: true,
190
+ pageType: 'hidden',
191
+ searchType: 'title',
192
+ search: '',
193
+ orderString: '',
194
+ dataList: [], // 所有資料陣列
195
+ filterList: [], // 搜尋結果陣列
196
+ postData: args.def, // 預計回調資料
197
+ filterData: [], // 與搜尋結果相關的預計回調資料
198
+ };
150
199
 
151
- const marketOptions = [
152
- { key: 'hidden', value: '隱形賣場' },
153
- { key: 'onepage', value: '一頁商店' },
154
- { key: 'group', value: '拼團賣場' },
155
- { key: 'recommend', value: '分銷連結' },
156
- ];
157
-
158
- return glitter.innerDialog(
159
- (gvc: GVC) => {
160
- const vm = {
161
- id: gvc.glitter.getUUID(),
162
- loading: false,
200
+ const marketOptions = Object.values(this.shopTypeRecord())
201
+ .filter(item => item.key !== 'group')
202
+ .map(item => {
203
+ return {
204
+ key: item.key,
205
+ value: item.title,
163
206
  };
207
+ });
164
208
 
165
- return html` <div class="${this.prefix}_body">
166
- ${gvc.bindView({
167
- bind: vm.id,
168
- view: () => {
169
- if (vm.loading) {
170
- return 'Loading';
171
- }
209
+ const searchTypeOptions = [{ key: 'title', value: '賣場名稱' }];
172
210
 
173
- return html` <div class="${this.prefix}_header">
174
- <div class="tx_700">產品列表</div>
175
- <div class="flex-fill"></div>
176
- </div>
177
- <div class="c_dialog">
178
- <div class="c_dialog_body">
179
- <div class="c_dialog_main" style="height: auto; max-height: 500px; gap: 24px;">
180
- ${BgDialog.select({
211
+ const resetPostData = () => {
212
+ vm.postData = [
213
+ ...new Set(
214
+ vm.postData
215
+ .filter(key => {
216
+ return !vm.filterList.some(item => item.key === key);
217
+ })
218
+ .concat(vm.filterData)
219
+ ),
220
+ ];
221
+ };
222
+
223
+ const selectedView = (gvc: GVC) => {
224
+ const selectedList = vm.dataList.filter(item => vm.postData.includes(item.key));
225
+
226
+ const bindView = gvc.bindView({
227
+ bind: vm.selectedId,
228
+ view: () => {
229
+ return html` <div class="${this.prefix}_header">
230
+ <div class="tx_700">賣場列表</div>
231
+ <div class="flex-fill"></div>
232
+ </div>
233
+ <div class="c_dialog">
234
+ <div class="c_dialog_body">
235
+ <div class="c_dialog_main ${this.prefix}_main">
236
+ <div class="${this.prefix}_triple_bar">
237
+ ${[
238
+ BgWidget.tripletCheckboxContainer(
181
239
  gvc,
182
- default: marketOptions[0].key,
183
- options: marketOptions,
184
- callback: value => {
185
- console.log(value);
186
- },
187
- })}
188
- </div>
189
- <div class="${this.prefix}_footer">
190
- <div class="${this.prefix}_footer_left">
191
- ${this.viewAllSelect(
192
- gvc.event(() => {
193
- console.log('viewAllSelect');
194
- }),
195
- '檢視已選商品(12)'
196
- )}
197
- </div>
198
- <div class="${this.prefix}_footer_right">
199
- ${[
200
- this.clearAll(
201
- gvc.event(() => {
202
- console.log('clearAll');
203
- })
204
- ),
205
- this.cancal(
206
- gvc.event(() => {
207
- console.log('cancal');
208
- })
209
- ),
210
- this.save(
211
- gvc.event(() => {
212
- console.log('save');
213
- })
214
- ),
215
- ].join('')}
216
- </div>
217
- </div>
240
+ '賣場名稱',
241
+ (() => {
242
+ if (vm.postData.length === 0) return -1;
243
+ return vm.postData.length === selectedList.length ? 1 : 0;
244
+ })(),
245
+ r => {
246
+ vm.postData = r === 1 ? selectedList.map(({ key }: { key: any }) => key) : [];
247
+ gvc.notifyDataChange(vm.selectedId);
248
+ }
249
+ ),
250
+ BgWidget.horizontalLine({ margin: 0.5 }),
251
+ ].join('')}
252
+ </div>
253
+ <div class="${this.prefix}_checkbox_container">
254
+ ${BgWidget.multiCheckboxContainer(gvc, selectedList, vm.postData, text => {
255
+ vm.postData = text;
256
+ gvc.notifyDataChange(vm.selectedId);
257
+ })}
258
+ </div>
259
+ </div>
260
+ <div class="${this.prefix}_footer">
261
+ <div class="${this.prefix}_footer_left">
262
+ ${this.viewAll(
263
+ gvc.event(() => {
264
+ gvc.closeDialog();
265
+ vm.control = 'view';
266
+ }),
267
+ '繼續選擇'
268
+ )}
269
+ </div>
270
+ <div class="${this.prefix}_footer_right">
271
+ ${[
272
+ this.clearAll(
273
+ gvc.event(() => {
274
+ if (vm.postData.length > 0) {
275
+ dialog.checkYesOrNot({
276
+ text: '確定要清除所有已選取的選項嗎?',
277
+ callback: bool => {
278
+ if (bool) {
279
+ vm.postData = [];
280
+ gvc.notifyDataChange(vm.selectedId);
281
+ }
282
+ },
283
+ });
284
+ }
285
+ }),
286
+ this.isMobile ? '全刪' : '清除全部'
287
+ ),
288
+ BgWidget.cancel(
289
+ gvc.event(() => {
290
+ gvc.closeDialog();
291
+ })
292
+ ),
293
+ BgWidget.save(
294
+ gvc.event(() => {
295
+ args.callback(vm.postData);
296
+ gvc.closeDialog();
297
+ }),
298
+ '完成'
299
+ ),
300
+ ].join('')}
218
301
  </div>
219
- </div>`;
302
+ </div>
303
+ </div>
304
+ </div>`;
305
+ },
306
+ });
307
+
308
+ return html`<div class="${this.prefix}_body">${bindView}</div>`;
309
+ };
310
+
311
+ const dialogView = (gvc: GVC) => {
312
+ const bindView = gvc.bindView({
313
+ bind: vm.mainId,
314
+ view: () => {
315
+ if (vm.loading) {
316
+ return html`<div class="my-4">${BgWidget.spinner()}</div>`;
317
+ }
318
+
319
+ vm.filterList = vm.dataList.filter(
320
+ item => item.key.includes(vm.pageType) && item.realname.includes(vm.search)
321
+ );
322
+ vm.filterData = vm.postData.filter(key => vm.filterList.find(item => item.key === key));
323
+
324
+ const pageTypeSelect = BgWidget.select({
325
+ gvc,
326
+ default: vm.pageType,
327
+ options: marketOptions,
328
+ callback: value => {
329
+ vm.pageType = value;
330
+ vm.search = '';
331
+ gvc.notifyDataChange(vm.mainId);
332
+ },
333
+ });
334
+
335
+ const searchTypeSelect = BgWidget.select({
336
+ gvc,
337
+ default: vm.searchType,
338
+ options: searchTypeOptions,
339
+ callback: value => {
340
+ vm.searchType = value;
341
+ gvc.notifyDataChange(vm.mainId);
220
342
  },
221
- })}
222
- </div>`;
343
+ style: 'max-width: 120px;',
344
+ });
345
+
346
+ const searchPlace = BgWidget.searchPlace(
347
+ gvc.event(e => {
348
+ vm.search = e.value;
349
+ gvc.notifyDataChange(vm.mainId);
350
+ }),
351
+ vm.search || '',
352
+ '搜尋賣場名稱',
353
+ '0',
354
+ '0'
355
+ );
356
+
357
+ return html` <div class="${this.prefix}_header">
358
+ <div class="tx_700">賣場列表</div>
359
+ <div class="flex-fill"></div>
360
+ </div>
361
+ <div class="c_dialog">
362
+ <div class="c_dialog_body">
363
+ <div class="c_dialog_main ${this.prefix}_main">
364
+ <div class="${this.prefix}_triple_bar">
365
+ ${this.isMobile
366
+ ? html` <div class="${this.prefix}_param_bar">${[pageTypeSelect, searchTypeSelect].join('')}</div>
367
+ <div class="w-100 mt-2">${searchPlace}</div>`
368
+ : html`${pageTypeSelect}
369
+ <div class="${this.prefix}_param_bar">
370
+ ${[searchTypeSelect, html`<div class="w-100">${searchPlace}</div>`].join('')}
371
+ </div>`}
372
+ ${[
373
+ BgWidget.mbContainer(12),
374
+ BgWidget.tripletCheckboxContainer(
375
+ gvc,
376
+ '賣場名稱',
377
+ (() => {
378
+ if (vm.filterData.length === 0) return -1;
379
+ return vm.filterData.length === vm.filterList.length ? 1 : 0;
380
+ })(),
381
+ r => {
382
+ vm.filterData = r === 1 ? vm.filterList.map(({ key }: { key: any }) => key) : [];
383
+ resetPostData();
384
+ gvc.notifyDataChange(vm.mainId);
385
+ }
386
+ ),
387
+ BgWidget.horizontalLine({ margin: 0.5 }),
388
+ ].join('')}
389
+ </div>
390
+ <div class="${this.prefix}_checkbox_container">
391
+ ${BgWidget.multiCheckboxContainer(gvc, vm.filterList, vm.filterData, text => {
392
+ vm.filterData = text;
393
+ resetPostData();
394
+ gvc.notifyDataChange(vm.mainId);
395
+ })}
396
+ </div>
397
+ </div>
398
+ <div class="${this.prefix}_footer">
399
+ <div class="${this.prefix}_footer_left">
400
+ ${this.viewAll(
401
+ gvc.event(() => {
402
+ if (vm.postData.length > 0) {
403
+ gvc.closeDialog();
404
+ vm.control = 'selected';
405
+ }
406
+ }),
407
+ this.isMobile ? `檢視(${vm.postData.length})` : `檢視已選賣場(${vm.postData.length})`
408
+ )}
409
+ </div>
410
+ <div class="${this.prefix}_footer_right">
411
+ ${[
412
+ this.clearAll(
413
+ gvc.event(() => {
414
+ if (vm.postData.length > 0) {
415
+ dialog.checkYesOrNot({
416
+ text: '確定要清除所有已選取的選項嗎?',
417
+ callback: bool => {
418
+ if (bool) {
419
+ vm.postData = [];
420
+ gvc.notifyDataChange(vm.mainId);
421
+ }
422
+ },
423
+ });
424
+ }
425
+ }),
426
+ this.isMobile ? '全刪' : '清除全部'
427
+ ),
428
+ BgWidget.cancel(
429
+ gvc.event(() => {
430
+ gvc.closeDialog();
431
+ })
432
+ ),
433
+ BgWidget.save(
434
+ gvc.event(() => {
435
+ args.callback(vm.postData);
436
+ gvc.closeDialog();
437
+ }),
438
+ '完成'
439
+ ),
440
+ ].join('')}
441
+ </div>
442
+ </div>
443
+ </div>
444
+ </div>`;
445
+ },
446
+ onCreate: () => {
447
+ if (vm.loading) {
448
+ vm.dataList = [];
449
+
450
+ Promise.all([
451
+ Article.get({
452
+ page: 0,
453
+ limit: 9999,
454
+ search: vm.search || undefined,
455
+ status: '0,1',
456
+ }),
457
+ ApiRecommend.getList({
458
+ page: 0,
459
+ limit: 9999,
460
+ data: {},
461
+ token: (window.parent as any).config.token,
462
+ }),
463
+ ]).then(dataArray => {
464
+ const [article, recommend] = dataArray;
465
+ const shopTypeRecord = this.shopTypeRecord();
466
+
467
+ if (Array.isArray(article.response?.data)) {
468
+ article.response.data.map((item: any) => {
469
+ if (['hidden', 'shopping'].includes(item.content.page_type)) {
470
+ const pageType = item.content.page_type === 'hidden' ? 'hidden' : 'onepage';
471
+
472
+ vm.dataList.push({
473
+ key: `${pageType}-${item.id}`,
474
+ name: `${shopTypeRecord[pageType].icon}${item.content.name}`,
475
+ realname: item.content.name,
476
+ });
477
+ }
478
+ });
479
+ }
480
+
481
+ if (Array.isArray(recommend.response?.data)) {
482
+ recommend.response.data.map((item: any) => {
483
+ vm.dataList.push({
484
+ key: `recommend-${item.id}`,
485
+ name: `${shopTypeRecord.recommend.icon}${item.content.title}`,
486
+ realname: item.content.title,
487
+ });
488
+ });
489
+ }
490
+
491
+ vm.loading = false;
492
+ gvc.notifyDataChange(vm.mainId);
493
+ });
494
+ }
495
+ },
496
+ });
497
+
498
+ return html`<div class="${this.prefix}_body">${bindView}</div>`;
499
+ };
500
+
501
+ return gvc.bindView({
502
+ bind: vm.controllerId,
503
+ dataList: [{ obj: vm, key: 'control' }],
504
+ view: () => {
505
+ switch (vm.control) {
506
+ case 'selected':
507
+ glitter.innerDialog(selectedView, glitter.getUUID(), { animation: Animation.fade });
508
+ break;
509
+ case 'view':
510
+ glitter.innerDialog(dialogView, glitter.getUUID(), { animation: Animation.fade });
511
+ break;
512
+ }
513
+ return '';
223
514
  },
224
- gvc.glitter.getUUID(),
225
- {
226
- animation: Animation.fade,
227
- }
228
- );
515
+ });
229
516
  }
230
517
  }
@@ -800,7 +800,7 @@ ${(_d = obj.default) !== null && _d !== void 0 ? _d : ''}</textarea
800
800
  >
801
801
  </div>`;
802
802
  }
803
- static searchPlace(event, vale, placeholder, margin, padding) {
803
+ static searchPlace(event, value, placeholder, margin, padding) {
804
804
  const defMargin = document.body.clientWidth > 768 ? '16px 0' : '8px 0';
805
805
  const defPadding = document.body.clientWidth > 768 ? '0 16px' : '0';
806
806
  return html `
@@ -816,7 +816,7 @@ ${(_d = obj.default) !== null && _d !== void 0 ? _d : ''}</textarea
816
816
  style="border-radius: 10px; border: 1px solid #DDD; padding-left: 50px;"
817
817
  placeholder="${placeholder}"
818
818
  onchange="${event}"
819
- value="${vale}"
819
+ value="${value}"
820
820
  />
821
821
  </div>
822
822
  </div>
@@ -2044,8 +2044,8 @@ ${(_d = obj.default) !== null && _d !== void 0 ? _d : ''}</textarea
2044
2044
  class="${trIndex === 0 ? ids.tr : ''} ${dd.find(d3 => d3.tooltip)
2045
2045
  ? 'tr-tooltip-container'
2046
2046
  : ''}"
2047
- onclick="${gvc.event(() => {
2048
- obj.rowClick && obj.rowClick(dd, trIndex);
2047
+ onclick="${gvc.event((e, event) => {
2048
+ obj.rowClick && obj.rowClick(dd, trIndex, e, event);
2049
2049
  })}"
2050
2050
  onmouseover="${gvc.event(() => {
2051
2051
  $(`#${ids.pencil}${trIndex}`).removeClass('d-none');