ts-glitter 13.8.54 → 13.8.56

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 (40) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-blog.js +59 -106
  4. package/lowcode/backend-manager/bg-blog.ts +38 -84
  5. package/lowcode/backend-manager/bg-product.js +5 -5
  6. package/lowcode/backend-manager/bg-product.ts +6 -6
  7. package/lowcode/cms-plugin/ai-message.js +34 -29
  8. package/lowcode/cms-plugin/ai-message.ts +75 -47
  9. package/lowcode/cms-plugin/shopping-product-setting.js +1 -1
  10. package/lowcode/cms-plugin/shopping-product-setting.ts +1 -1
  11. package/lowcode/cms-plugin/shopping-product-stock.js +3 -2
  12. package/lowcode/cms-plugin/shopping-product-stock.ts +4 -2
  13. package/lowcode/editor/ai-editor.js +379 -0
  14. package/lowcode/editor/ai-editor.ts +389 -0
  15. package/lowcode/glitter-base/route/ai-chat.js +12 -0
  16. package/lowcode/glitter-base/route/ai-chat.ts +15 -0
  17. package/lowcode/glitter-base/route/shopping.js +1 -0
  18. package/lowcode/glitter-base/route/shopping.ts +2 -0
  19. package/lowcode/glitterBundle/html-component/custom-style.js +1 -0
  20. package/lowcode/glitterBundle/html-component/custom-style.ts +1 -0
  21. package/lowcode/glitterBundle/html-component/render-value.js +1 -1
  22. package/lowcode/glitterBundle/html-component/render-value.ts +1 -1
  23. package/lowcode/glitterBundle/plugins/editor-elem.js +1 -1
  24. package/lowcode/glitterBundle/plugins/editor-elem.ts +1 -1
  25. package/lowcode/jspage/editor.js +1 -1
  26. package/lowcode/jspage/editor.ts +1 -1
  27. package/lowcode/official_view_component/official/component.ts +1 -5
  28. package/package.json +1 -1
  29. package/src/api-public/controllers/shop.js +1 -0
  30. package/src/api-public/controllers/shop.js.map +1 -1
  31. package/src/api-public/controllers/shop.ts +1 -0
  32. package/src/api-public/services/ai-robot.js +2 -1
  33. package/src/api-public/services/ai-robot.js.map +1 -1
  34. package/src/api-public/services/ai-robot.ts +2 -1
  35. package/src/api-public/services/shopping.d.ts +1 -0
  36. package/src/api-public/services/shopping.js +8 -0
  37. package/src/api-public/services/shopping.js.map +1 -1
  38. package/src/api-public/services/shopping.ts +9 -0
  39. package/w6ppvcb8yb.json +0 -1
  40. package/wvyrnrgo2g.json +0 -1
package/lowcode/Entry.js CHANGED
@@ -64,7 +64,7 @@ export class Entry {
64
64
  }
65
65
  window.renderClock = (_a = window.renderClock) !== null && _a !== void 0 ? _a : clockF();
66
66
  console.log(`Entry-time:`, window.renderClock.stop());
67
- glitter.share.editerVersion = 'V_13.8.54';
67
+ glitter.share.editerVersion = 'V_13.8.56';
68
68
  glitter.share.start = new Date();
69
69
  const vm = {
70
70
  appConfig: [],
package/lowcode/Entry.ts CHANGED
@@ -64,7 +64,7 @@ export class Entry {
64
64
  }
65
65
  (window as any).renderClock = (window as any).renderClock ?? clockF();
66
66
  console.log(`Entry-time:`, (window as any).renderClock.stop());
67
- glitter.share.editerVersion = 'V_13.8.54';
67
+ glitter.share.editerVersion = 'V_13.8.56';
68
68
  glitter.share.start = new Date();
69
69
  const vm: {
70
70
  appConfig: any;
@@ -11,7 +11,6 @@ import { EditorElem } from '../glitterBundle/plugins/editor-elem.js';
11
11
  import { BgWidget } from './bg-widget.js';
12
12
  import { ApiUser } from '../glitter-base/route/user.js';
13
13
  import { ShareDialog } from '../glitterBundle/dialog/ShareDialog.js';
14
- import { ApiPageConfig } from '../api/pageConfig.js';
15
14
  import { Article } from '../glitter-base/route/article.js';
16
15
  import { MenusSetting } from '../cms-plugin/menus-setting.js';
17
16
  import { BaseApi } from '../glitterBundle/api/base.js';
@@ -278,115 +277,69 @@ export class BgBlog {
278
277
  return gvc.bindView(() => {
279
278
  let data = undefined;
280
279
  const id = gvc.glitter.getUUID();
281
- if (page_tab !== 'page') {
282
- ApiPageConfig.getPageTemplate({
283
- template_from: 'all',
284
- page: '0',
285
- limit: '3000',
286
- type: 'page',
287
- tag: (() => {
288
- switch (page_tab) {
289
- case 'shopping':
290
- case 'hidden':
291
- return `一頁購物`;
292
- default:
293
- return ``;
294
- }
295
- })(),
296
- search: vm.search,
297
- }).then((res) => {
298
- data = res;
299
- data.response.result.data = [
300
- {
301
- id: 20739,
302
- userID: '234285319',
303
- tag: 'empty',
304
- name: '空白內容',
305
- page_type: 'page',
306
- preview_image: null,
307
- appName: 'shop_template_black_style',
308
- template_type: 2,
309
- template_config: {
310
- tag: ['頁面範例'],
311
- desc: '',
312
- name: '空白內容',
313
- image: ['https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1709282671899-BLANK PAGE.jpg'],
314
- status: 'wait',
315
- post_to: 'all',
316
- version: '1.0',
317
- created_by: 'liondesign.io',
318
- preview_img: '',
319
- },
320
- },
321
- ].concat(data.response.result.data);
322
- gvc.notifyDataChange(id);
323
- });
324
- }
325
- else {
326
- Article.get({
327
- page: 0,
328
- limit: 20,
329
- search: ``,
330
- for_index: `false`,
331
- status: '0,1',
332
- page_type: page_tab,
333
- app_name: 't_1726217714800',
334
- }).then((dd) => {
335
- data = {
336
- response: {
337
- result: {
338
- data: [
339
- {
340
- id: 20739,
341
- userID: '234285319',
342
- tag: 'empty',
280
+ Article.get({
281
+ page: 0,
282
+ limit: 20,
283
+ search: ``,
284
+ for_index: `false`,
285
+ status: '0,1',
286
+ page_type: page_tab,
287
+ app_name: 't_1726217714800',
288
+ }).then((dd) => {
289
+ data = {
290
+ response: {
291
+ result: {
292
+ data: [
293
+ {
294
+ id: 20739,
295
+ userID: '234285319',
296
+ tag: 'empty',
297
+ name: '空白內容',
298
+ page_type: 'page',
299
+ preview_image: null,
300
+ appName: 'shop_template_black_style',
301
+ template_type: 2,
302
+ template_config: {
303
+ tag: ['頁面範例'],
304
+ desc: '',
343
305
  name: '空白內容',
344
- page_type: 'page',
345
- preview_image: null,
346
- appName: 'shop_template_black_style',
347
- template_type: 2,
348
- template_config: {
349
- tag: ['頁面範例'],
350
- desc: '',
351
- name: '空白內容',
352
- image: ['https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1709282671899-BLANK PAGE.jpg'],
353
- status: 'wait',
354
- post_to: 'all',
355
- version: '1.0',
356
- created_by: 'liondesign.io',
357
- preview_img: '',
358
- },
306
+ image: ['https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1709282671899-BLANK PAGE.jpg'],
307
+ status: 'wait',
308
+ post_to: 'all',
309
+ version: '1.0',
310
+ created_by: 'liondesign.io',
311
+ preview_img: '',
359
312
  },
360
- ].concat(dd.response.data.map((dd) => {
361
- return {
362
- id: 20739,
363
- userID: '234285319',
364
- tag: dd.content.tag,
313
+ },
314
+ ].concat(dd.response.data.map((dd) => {
315
+ return {
316
+ id: 20739,
317
+ userID: '234285319',
318
+ tag: dd.content.tag,
319
+ name: dd.content.name,
320
+ page_type: 'page',
321
+ preview_image: null,
322
+ _config: dd.content.config,
323
+ appName: 't_1726217714800',
324
+ template_type: 2,
325
+ template_config: {
326
+ tag: [],
327
+ desc: '',
365
328
  name: dd.content.name,
366
- page_type: 'page',
367
- preview_image: null,
368
- _config: dd.content.config,
369
- appName: 't_1726217714800',
370
- template_type: 2,
371
- template_config: {
372
- tag: [],
373
- desc: '',
374
- name: dd.content.name,
375
- image: [dd.content.seo.image],
376
- status: 'wait',
377
- post_to: 'all',
378
- version: '1.0',
379
- created_by: 'liondesign.io',
380
- preview_img: '',
381
- },
382
- };
383
- })),
384
- },
329
+ image: [dd.content.seo.image],
330
+ status: 'wait',
331
+ post_to: 'all',
332
+ version: '1.0',
333
+ created_by: 'liondesign.io',
334
+ preview_img: '',
335
+ },
336
+ };
337
+ })),
385
338
  },
386
- };
387
- gvc.notifyDataChange(id);
388
- });
389
- }
339
+ },
340
+ };
341
+ gvc.notifyDataChange(id);
342
+ });
390
343
  return {
391
344
  bind: id,
392
345
  view: () => {
@@ -315,85 +315,41 @@ export class BgBlog {
315
315
  return gvc.bindView(() => {
316
316
  let data: any = undefined;
317
317
  const id = gvc.glitter.getUUID();
318
- if (page_tab !== 'page') {
319
- ApiPageConfig.getPageTemplate({
320
- template_from: 'all',
321
- page: '0',
322
- limit: '3000',
323
- type: 'page',
324
- tag: (() => {
325
- switch (page_tab) {
326
- case 'shopping':
327
- case 'hidden':
328
- return `一頁購物`;
329
- default:
330
- return ``;
331
- }
332
- })(),
333
- search: vm.search,
334
- }).then((res) => {
335
- data = res;
336
- data.response.result.data = [
337
- {
338
- id: 20739,
339
- userID: '234285319',
340
- tag: 'empty',
341
- name: '空白內容',
342
- page_type: 'page',
343
- preview_image: null,
344
- appName: 'shop_template_black_style',
345
- template_type: 2,
346
- template_config: {
347
- tag: ['頁面範例'],
348
- desc: '',
349
- name: '空白內容',
350
- image: ['https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1709282671899-BLANK PAGE.jpg'],
351
- status: 'wait',
352
- post_to: 'all',
353
- version: '1.0',
354
- created_by: 'liondesign.io',
355
- preview_img: '',
356
- },
357
- },
358
- ].concat(data.response.result.data);
359
- gvc.notifyDataChange(id);
360
- });
361
- } else {
362
- Article.get({
363
- page: 0,
364
- limit: 20,
365
- search: ``,
366
- for_index: `false`,
367
- status: '0,1',
368
- page_type: page_tab,
369
- app_name: 't_1726217714800',
370
- }).then((dd) => {
371
- data = {
372
- response: {
373
- result: {
374
- data: [
375
- {
376
- id: 20739,
377
- userID: '234285319',
378
- tag: 'empty',
318
+ Article.get({
319
+ page: 0,
320
+ limit: 20,
321
+ search: ``,
322
+ for_index: `false`,
323
+ status: '0,1',
324
+ page_type: page_tab,
325
+ app_name: 't_1726217714800',
326
+ }).then((dd) => {
327
+ data = {
328
+ response: {
329
+ result: {
330
+ data: [
331
+ {
332
+ id: 20739,
333
+ userID: '234285319',
334
+ tag: 'empty',
335
+ name: '空白內容',
336
+ page_type: 'page',
337
+ preview_image: null,
338
+ appName: 'shop_template_black_style',
339
+ template_type: 2,
340
+ template_config: {
341
+ tag: ['頁面範例'],
342
+ desc: '',
379
343
  name: '空白內容',
380
- page_type: 'page',
381
- preview_image: null,
382
- appName: 'shop_template_black_style',
383
- template_type: 2,
384
- template_config: {
385
- tag: ['頁面範例'],
386
- desc: '',
387
- name: '空白內容',
388
- image: ['https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1709282671899-BLANK PAGE.jpg'],
389
- status: 'wait',
390
- post_to: 'all',
391
- version: '1.0',
392
- created_by: 'liondesign.io',
393
- preview_img: '',
394
- },
344
+ image: ['https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1709282671899-BLANK PAGE.jpg'],
345
+ status: 'wait',
346
+ post_to: 'all',
347
+ version: '1.0',
348
+ created_by: 'liondesign.io',
349
+ preview_img: '',
395
350
  },
396
- ].concat(
351
+ },
352
+ ].concat(
397
353
  dd.response.data.map((dd: any) => {
398
354
  return {
399
355
  id: 20739,
@@ -418,14 +374,12 @@ export class BgBlog {
418
374
  },
419
375
  };
420
376
  })
421
- ),
422
- },
377
+ ),
423
378
  },
424
- };
425
-
426
- gvc.notifyDataChange(id);
427
- });
428
- }
379
+ },
380
+ };
381
+ gvc.notifyDataChange(id);
382
+ });
429
383
 
430
384
  return {
431
385
  bind: id,
@@ -6,7 +6,7 @@ const html = String.raw;
6
6
  export class BgProduct {
7
7
  static variantsSelector(obj) {
8
8
  let add_items = [];
9
- return obj.gvc.glitter.innerDialog((gvc) => {
9
+ return window.parent.glitter.innerDialog((gvc) => {
10
10
  return html `
11
11
  <div class="bg-white shadow rounded-3 ">
12
12
  <div class="px-3" style="max-height: calc(100vh - 100px);overflow-y: auto;">
@@ -14,14 +14,14 @@ export class BgProduct {
14
14
  title: '選擇商品',
15
15
  select_data: add_items,
16
16
  select_mode: true,
17
- filter_variants: obj.filter_variants,
18
- })}
17
+ filter_variants: obj.filter_variants
18
+ }, 'hidden')}
19
19
  </div>
20
20
  <div class="c_dialog_bar">
21
- ${BgWidget.cancel(obj.gvc.event(() => {
21
+ ${BgWidget.cancel(gvc.event(() => {
22
22
  gvc.closeDialog();
23
23
  }))}
24
- ${BgWidget.save(obj.gvc.event(() => {
24
+ ${BgWidget.save(gvc.event(() => {
25
25
  obj.callback(add_items);
26
26
  gvc.closeDialog();
27
27
  }), '確認')}
@@ -19,9 +19,9 @@ type CollectionItem = {
19
19
  };
20
20
 
21
21
  export class BgProduct {
22
- static variantsSelector(obj: { gvc: GVC; title?: string; filter_variants: string[]; callback: (value: any) => void }) {
22
+ static variantsSelector(obj: { gvc: GVC; title?: string; filter_variants: string[]; callback: (value: any) => void,show_mode:'hidden'|'all' }) {
23
23
  let add_items: any = [];
24
- return obj.gvc.glitter.innerDialog((gvc: GVC) => {
24
+ return (window.parent as any).glitter.innerDialog((gvc: GVC) => {
25
25
  return html`
26
26
  <div class="bg-white shadow rounded-3 ">
27
27
  <div class="px-3" style="max-height: calc(100vh - 100px);overflow-y: auto;">
@@ -29,17 +29,17 @@ export class BgProduct {
29
29
  title: '選擇商品',
30
30
  select_data: add_items,
31
31
  select_mode: true,
32
- filter_variants: obj.filter_variants,
33
- })}
32
+ filter_variants: obj.filter_variants
33
+ },'hidden')}
34
34
  </div>
35
35
  <div class="c_dialog_bar">
36
36
  ${BgWidget.cancel(
37
- obj.gvc.event(() => {
37
+ gvc.event(() => {
38
38
  gvc.closeDialog();
39
39
  })
40
40
  )}
41
41
  ${BgWidget.save(
42
- obj.gvc.event(() => {
42
+ gvc.event(() => {
43
43
  obj.callback(add_items);
44
44
  gvc.closeDialog();
45
45
  }),
@@ -77,7 +77,7 @@ export class AiMessage {
77
77
  });
78
78
  }
79
79
  static toggle() {
80
- window.glitter.share.toggle_left_bar();
80
+ AiMessage.setDrawer(window.parent.glitter.pageConfig[window.parent.glitter.pageConfig.length - 1].gvc);
81
81
  }
82
82
  static detail(cf) {
83
83
  const gvc = cf.gvc;
@@ -229,48 +229,53 @@ export class AiMessage {
229
229
  (AiMessage.vm.select_bt === 'page_editor') ? (() => {
230
230
  const html = String.raw;
231
231
  let message = '';
232
- return ` <div class="p-2">
232
+ return ` <div class="p-5">
233
233
  ${[
234
234
  html `
235
- <lottie-player src="lottie/ai.json" class="mx-auto my-n4" speed="1"
236
- style="max-width: 100%;width: 250px;height:300px;" loop
237
- autoplay></lottie-player>`,
238
- EditorElem.editeText({
235
+ <lottie-player src="lottie/ai.json" class="mx-auto my-n4" speed="1"
236
+ style="max-width: 100%;width: 250px;height:250px;" loop
237
+ autoplay></lottie-player>`,
238
+ `<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('點擊想要調整的元件之後,在輸入 AI 語句進行調整', `font-weight: 500;`)}</div>`,
239
+ html `
240
+ <div class="w-100" onclick="${gvc.event(() => {
241
+ if (!gvc.glitter.share.editorViewModel.selectItem) {
242
+ const dialog = new ShareDialog(gvc.glitter);
243
+ dialog.errorMessage({ text: '請先點擊要編輯的元件' });
244
+ }
245
+ })}">
246
+ ${EditorElem.editeText({
239
247
  gvc: gvc,
240
248
  title: '',
241
249
  default: '',
242
- placeHolder: `範例:字體大小20px,距離左邊20px,背景顏色黃色,字體顏色藍色,標題為歡迎來到SHOPNEX開店平台.
243
- `,
250
+ placeHolder: `字體大小20px,距離左邊20px,背景顏色黃色,字體顏色藍色,標題為歡迎來到SHOPNEX開店平台.`,
244
251
  callback: (text) => {
245
252
  message = text;
246
253
  },
247
- min_height: 300
248
- }),
254
+ min_height: 100
255
+ })}
256
+ </div>`,
249
257
  `<div class="w-100 d-flex align-items-center justify-content-end">
250
258
  ${BgWidget.save(gvc.event(() => {
251
259
  const dialog = new ShareDialog(gvc.glitter);
260
+ if (!message) {
261
+ dialog.errorMessage({ text: '請輸入描述語句' });
262
+ return;
263
+ }
252
264
  dialog.dataLoading({ visible: true });
253
- AiChat.generateHtml({
254
- app_name: window.appName,
255
- text: message
256
- }).then((res) => {
257
- if (res.result && res.response.data.usage === 0) {
258
- dialog.dataLoading({ visible: false });
259
- dialog.errorMessage({ text: `很抱歉你的AI代幣不足,請先前往加值` });
260
- }
261
- else if (res.result && (!res.response.data.obj.result)) {
265
+ gvc.glitter.getModule(new URL('./editor/ai-editor.js', gvc.glitter.root_path).href, (AiEditor) => {
266
+ AiEditor.editView(message, gvc.glitter.share.editorViewModel.selectItem, (result) => {
262
267
  dialog.dataLoading({ visible: false });
263
- dialog.errorMessage({ text: `AI無法理解你的需求,請給出具體一點的描述` });
264
- }
265
- else if (!res.result) {
266
- dialog.dataLoading({ visible: false });
267
- dialog.errorMessage({ text: `發生錯誤` });
268
- }
269
- else {
270
- dialog.successMessage({ text: `AI生成完畢,使用了『${res.response.data.usage}』點 AI Points.` });
271
- }
268
+ if (result) {
269
+ dialog.successMessage({ text: `已為你調整元件『${result}』` });
270
+ gvc.glitter.share.editorViewModel.selectItem.refreshComponent();
271
+ gvc.glitter.closeDrawer();
272
+ }
273
+ else {
274
+ dialog.errorMessage({ text: 'AI無法理解你的意思,請輸入更確切的需求' });
275
+ }
276
+ });
272
277
  });
273
- }), "調整元素")}
278
+ }), "調整元素", "w-100 mt-3 py-2")}
274
279
  </div>`
275
280
  ].join('<div class="my-2"></div>')}
276
281
  </div>`;