ts-glitter 13.6.4 → 13.6.5
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 +1 -1
- package/lowcode/Entry.ts +1 -1
- package/lowcode/backend-manager/bg-customer-message.js +338 -47
- package/lowcode/backend-manager/bg-customer-message.ts +351 -52
- package/lowcode/backend-manager/bg-widget.js +2 -2
- package/lowcode/backend-manager/bg-widget.ts +2 -2
- package/lowcode/cms-plugin/auto-reply.js +9 -9
- package/lowcode/cms-plugin/auto-reply.ts +9 -9
- package/lowcode/cms-plugin/customer-message-user.js +4 -3
- package/lowcode/cms-plugin/customer-message-user.ts +4 -3
- package/lowcode/cms-plugin/filter-options.js +1 -1
- package/lowcode/cms-plugin/filter-options.ts +1 -1
- package/lowcode/cms-plugin/line-auto-reply.js +1 -1
- package/lowcode/cms-plugin/line-auto-reply.ts +1 -1
- package/lowcode/cms-plugin/shopping-finance-setting.js +1 -1
- package/lowcode/cms-plugin/shopping-finance-setting.ts +1 -1
- package/lowcode/cms-plugin/sns-auto-reply.js +8 -8
- package/lowcode/cms-plugin/sns-auto-reply.ts +8 -8
- package/lowcode/glitterBundle/module/html-generate.js +1 -1
- package/lowcode/glitterBundle/module/html-generate.ts +1 -1
- package/lowcode/jspage/editor.ts +496 -496
- package/lowcode/view-model/saas-view-model.js +7 -7
- package/lowcode/view-model/saas-view-model.ts +7 -7
- package/package.json +1 -1
- package/src/api-public/controllers/ai-chat.js.map +1 -1
- package/src/api-public/controllers/ai-chat.ts +2 -0
- package/src/api-public/services/ai-robot.d.ts +5 -0
- package/src/api-public/services/ai-robot.js +182 -3
- package/src/api-public/services/ai-robot.js.map +1 -1
- package/src/api-public/services/ai-robot.ts +174 -0
- package/src/api-public/services/auto-send-email.js +24 -24
- package/src/api-public/services/auto-send-email.js.map +1 -1
- package/src/api-public/services/auto-send-email.ts +24 -24
- package/src/api-public/services/chat.d.ts +2 -0
- package/src/api-public/services/chat.js +63 -55
- package/src/api-public/services/chat.js.map +1 -1
- package/src/api-public/services/chat.ts +115 -105
- package/src/api-public/services/line-message.js +68 -61
- package/src/api-public/services/line-message.js.map +1 -1
- package/src/api-public/services/line-message.ts +203 -211
- package/src/api-public/services/notify.d.ts +15 -6
- package/src/api-public/services/notify.js +360 -216
- package/src/api-public/services/notify.js.map +1 -1
- package/src/api-public/services/notify.ts +395 -222
- package/src/api-public/services/post.js +2 -9
- package/src/api-public/services/post.js.map +1 -1
- package/src/api-public/services/post.ts +2 -13
- package/src/api-public/services/public-table-check.js +14 -6
- package/src/api-public/services/public-table-check.js.map +1 -1
- package/src/api-public/services/public-table-check.ts +21 -11
- package/src/api-public/services/shopping.js +1 -1
- package/src/api-public/services/shopping.js.map +1 -1
- package/src/api-public/services/shopping.ts +1 -3
- package/src/api-public/services/sms.js +28 -24
- package/src/api-public/services/sms.js.map +1 -1
- package/src/api-public/services/sms.ts +112 -123
- package/src/api-public/services/user.js +5 -5
- package/src/api-public/services/user.js.map +1 -1
- package/src/api-public/services/user.ts +6 -6
- package/src/services/template.js.map +1 -1
package/lowcode/Entry.js
CHANGED
|
@@ -59,7 +59,7 @@ export class Entry {
|
|
|
59
59
|
}
|
|
60
60
|
window.renderClock = (_a = window.renderClock) !== null && _a !== void 0 ? _a : clockF();
|
|
61
61
|
console.log(`Entry-time:`, window.renderClock.stop());
|
|
62
|
-
glitter.share.editerVersion = "V_13.6.
|
|
62
|
+
glitter.share.editerVersion = "V_13.6.5";
|
|
63
63
|
glitter.share.start = (new Date());
|
|
64
64
|
const vm = {
|
|
65
65
|
appConfig: [],
|
package/lowcode/Entry.ts
CHANGED
|
@@ -60,7 +60,7 @@ export class Entry {
|
|
|
60
60
|
}
|
|
61
61
|
(window as any).renderClock = (window as any).renderClock ?? clockF();
|
|
62
62
|
console.log(`Entry-time:`, (window as any).renderClock.stop());
|
|
63
|
-
glitter.share.editerVersion = "V_13.6.
|
|
63
|
+
glitter.share.editerVersion = "V_13.6.5";
|
|
64
64
|
glitter.share.start = (new Date());
|
|
65
65
|
const vm: {
|
|
66
66
|
appConfig: any;
|
|
@@ -366,53 +366,339 @@ export class BgCustomerMessage {
|
|
|
366
366
|
</div>
|
|
367
367
|
${BgWidget.switchButton(gvc, keyData.toggle, (bool) => {
|
|
368
368
|
keyData.toggle = bool;
|
|
369
|
+
gvc.notifyDataChange(vO.id);
|
|
369
370
|
})}
|
|
370
371
|
</div>`,
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
372
|
+
...(() => {
|
|
373
|
+
if (keyData.toggle) {
|
|
374
|
+
return [
|
|
375
|
+
gvc.bindView(() => {
|
|
376
|
+
keyData.ask_manual_keyword = keyData.ask_manual_keyword || '真人客服';
|
|
377
|
+
keyData.ask_ai_keyword = keyData.ask_ai_keyword || 'AI客服';
|
|
378
|
+
const cid = gvc.glitter.getUUID();
|
|
379
|
+
return {
|
|
380
|
+
bind: cid,
|
|
381
|
+
view: () => {
|
|
382
|
+
return html `
|
|
383
|
+
<div class="d-flex flex-column"
|
|
384
|
+
style="gap:5px;">
|
|
385
|
+
<div class="tx_normal fw-normal"
|
|
386
|
+
style="">AI客服機器人
|
|
387
|
+
</div>
|
|
388
|
+
<div class="d-flex">
|
|
389
|
+
${BgWidget.switchButton(gvc, keyData.ai_toggle, (bool) => {
|
|
390
|
+
keyData.ai_toggle = bool;
|
|
391
|
+
gvc.notifyDataChange(cid);
|
|
392
|
+
})}
|
|
393
|
+
${keyData.ai_toggle ? `啟用` : `關閉`}
|
|
394
|
+
</div>
|
|
395
|
+
${keyData.ai_toggle ? html `
|
|
396
|
+
<div class="mt-2 d-flex align-items-center"
|
|
397
|
+
style="gap:10px;">
|
|
398
|
+
${BgWidget.grayButton('AI 問答設定', gvc.event(() => __awaiter(this, void 0, void 0, function* () {
|
|
399
|
+
let keyData = (yield ApiUser.getPublicConfig(`robot_ai_reply`, 'manager')).response.value || {};
|
|
400
|
+
BgWidget.settingDialog({
|
|
401
|
+
gvc: gvc,
|
|
402
|
+
title: 'AI問答設定',
|
|
403
|
+
innerHTML: (gvc) => {
|
|
404
|
+
return gvc.bindView(() => {
|
|
405
|
+
const id = gvc.glitter.getUUID();
|
|
406
|
+
const html = String.raw;
|
|
407
|
+
return {
|
|
408
|
+
bind: id,
|
|
409
|
+
view: () => {
|
|
410
|
+
var _a;
|
|
411
|
+
if (Array.isArray(keyData)) {
|
|
412
|
+
keyData = {};
|
|
413
|
+
}
|
|
414
|
+
keyData.question = (_a = keyData.question) !== null && _a !== void 0 ? _a : [];
|
|
415
|
+
const parId = gvc.glitter.getUUID();
|
|
416
|
+
const id = gvc.glitter.getUUID();
|
|
417
|
+
function refresh() {
|
|
418
|
+
gvc.notifyDataChange(id);
|
|
419
|
+
}
|
|
420
|
+
return html `
|
|
421
|
+
${BgWidget.alertInfo('', [
|
|
422
|
+
`<span class="fw-500 fs-6">*當AI判斷,客戶提出的問題與你設定的問題有關聯的話,將會直接回答你設定的回覆內容。</span>`,
|
|
423
|
+
`<span class="fw-500 fs-6">*建議設定多個問答項目,來提升機器人客服的妥善率。</span>`,
|
|
424
|
+
], {
|
|
425
|
+
class: 'p-2',
|
|
426
|
+
style: ``
|
|
427
|
+
})}
|
|
428
|
+
<div style=""
|
|
429
|
+
class="p-2">
|
|
430
|
+
|
|
431
|
+
${gvc.bindView(() => {
|
|
432
|
+
return {
|
|
433
|
+
bind: id,
|
|
434
|
+
view: () => {
|
|
435
|
+
return (keyData.question || []).map((d2, index) => {
|
|
436
|
+
return html `
|
|
437
|
+
<li onclick="${gvc.event(() => {
|
|
438
|
+
const copy = JSON.parse(JSON.stringify(d2));
|
|
439
|
+
BgWidget.settingDialog({
|
|
440
|
+
gvc: gvc,
|
|
441
|
+
title: '設定問答',
|
|
442
|
+
innerHTML: (gvc) => {
|
|
443
|
+
return [BgWidget.editeInput({
|
|
444
|
+
gvc: gvc,
|
|
445
|
+
title: '問題',
|
|
446
|
+
placeHolder: `請輸入問題`,
|
|
447
|
+
default: copy.ask,
|
|
448
|
+
callback: (text) => {
|
|
449
|
+
copy.ask = text;
|
|
450
|
+
},
|
|
451
|
+
}), BgWidget.textArea({
|
|
452
|
+
gvc: gvc,
|
|
453
|
+
title: '回答',
|
|
454
|
+
placeHolder: `請輸入回答`,
|
|
455
|
+
default: copy.response,
|
|
456
|
+
callback: (text) => {
|
|
457
|
+
copy.response = text;
|
|
458
|
+
},
|
|
459
|
+
})].map((dd) => {
|
|
460
|
+
return `<div>${dd}</div>`;
|
|
461
|
+
}).join('');
|
|
462
|
+
},
|
|
463
|
+
footer_html: (gvc) => {
|
|
464
|
+
return [
|
|
465
|
+
BgWidget.cancel(gvc.event(() => {
|
|
466
|
+
gvc.closeDialog();
|
|
467
|
+
})),
|
|
468
|
+
BgWidget.save(gvc.event(() => {
|
|
469
|
+
refresh();
|
|
470
|
+
gvc.closeDialog();
|
|
471
|
+
}))
|
|
472
|
+
].join(``);
|
|
473
|
+
}
|
|
474
|
+
});
|
|
475
|
+
})}">
|
|
476
|
+
<div class="w-100 fw-500 d-flex align-items-center fs-6 hoverBtn h_item rounded px-2 hoverF2 mb-1 subComponentGuide"
|
|
477
|
+
style="gap:5px;color:#393939;">
|
|
478
|
+
<div class=" p-1 dragItem ">
|
|
479
|
+
<i class="fa-solid fa-grip-dots-vertical d-flex align-items-center justify-content-center "
|
|
480
|
+
style="width:15px;height:15px;"
|
|
481
|
+
aria-hidden="true"></i>
|
|
482
|
+
</div>
|
|
483
|
+
<span style="max-width:calc(100% - 60px);text-overflow: ellipsis;white-space: nowrap;overflow: hidden;">${d2.ask}</span>
|
|
484
|
+
<div class="flex-fill"></div>
|
|
485
|
+
<div class="hoverBtn p-1 child"
|
|
486
|
+
onclick="${gvc.event((e, event) => {
|
|
487
|
+
event.stopPropagation();
|
|
488
|
+
event.preventDefault();
|
|
489
|
+
dialog.checkYesOrNot({
|
|
490
|
+
text: '是否確認移除問答?',
|
|
491
|
+
callback: (response) => {
|
|
492
|
+
if (response) {
|
|
493
|
+
keyData.question.splice(index, 1);
|
|
494
|
+
gvc.notifyDataChange(id);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
})}">
|
|
499
|
+
<i class="fa-regular fa-trash d-flex align-items-center justify-content-center "
|
|
500
|
+
aria-hidden="true"></i>
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
</li>`;
|
|
504
|
+
}).join('');
|
|
505
|
+
},
|
|
506
|
+
divCreate: {
|
|
507
|
+
class: `mx-n2`,
|
|
508
|
+
elem: 'ul',
|
|
509
|
+
option: [{
|
|
510
|
+
key: 'id',
|
|
511
|
+
value: parId
|
|
512
|
+
}],
|
|
513
|
+
},
|
|
514
|
+
onCreate: () => {
|
|
515
|
+
gvc.glitter.addMtScript([
|
|
516
|
+
{
|
|
517
|
+
src: `https://raw.githack.com/SortableJS/Sortable/master/Sortable.js`,
|
|
518
|
+
},
|
|
519
|
+
], () => {
|
|
520
|
+
const interval = setInterval(() => {
|
|
521
|
+
if (window.Sortable) {
|
|
522
|
+
try {
|
|
523
|
+
gvc.addStyle(`
|
|
524
|
+
ul {
|
|
525
|
+
list-style: none;
|
|
526
|
+
padding: 0;
|
|
527
|
+
}
|
|
528
|
+
`);
|
|
529
|
+
function swapArr(arr, index1, index2) {
|
|
530
|
+
const data = arr[index1];
|
|
531
|
+
arr.splice(index1, 1);
|
|
532
|
+
arr.splice(index2, 0, data);
|
|
533
|
+
}
|
|
534
|
+
let startIndex = 0;
|
|
535
|
+
Sortable.create(gvc.glitter.document.getElementById(parId), {
|
|
536
|
+
handle: '.dragItem',
|
|
537
|
+
group: gvc.glitter.getUUID(),
|
|
538
|
+
animation: 100,
|
|
539
|
+
onChange: function (evt) {
|
|
540
|
+
swapArr(keyData.question, startIndex, evt.newIndex);
|
|
541
|
+
const newIndex = evt.newIndex;
|
|
542
|
+
startIndex = newIndex;
|
|
543
|
+
},
|
|
544
|
+
onEnd: (evt) => {
|
|
545
|
+
},
|
|
546
|
+
onStart: function (evt) {
|
|
547
|
+
startIndex = evt.oldIndex;
|
|
548
|
+
},
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
catch (e) {
|
|
552
|
+
}
|
|
553
|
+
clearInterval(interval);
|
|
554
|
+
}
|
|
555
|
+
}, 100);
|
|
556
|
+
}, () => {
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
};
|
|
560
|
+
})}
|
|
561
|
+
<div class="w-100"
|
|
562
|
+
style="justify-content: center; align-items: center; gap: 4px; display: flex;color: #3366BB;cursor: pointer;"
|
|
563
|
+
data-bs-toggle="dropdown"
|
|
564
|
+
aria-haspopup="true"
|
|
565
|
+
aria-expanded="false"
|
|
566
|
+
onclick="${gvc.event(() => {
|
|
567
|
+
const copy = {
|
|
568
|
+
ask: '',
|
|
569
|
+
response: ''
|
|
570
|
+
};
|
|
571
|
+
BgWidget.settingDialog({
|
|
572
|
+
gvc: gvc,
|
|
573
|
+
title: '設定問答',
|
|
574
|
+
innerHTML: (gvc) => {
|
|
575
|
+
return [BgWidget.editeInput({
|
|
576
|
+
gvc: gvc,
|
|
577
|
+
title: '問題',
|
|
578
|
+
placeHolder: `請輸入問題`,
|
|
579
|
+
default: copy.ask,
|
|
580
|
+
callback: (text) => {
|
|
581
|
+
copy.ask = text;
|
|
582
|
+
},
|
|
583
|
+
}), BgWidget.textArea({
|
|
584
|
+
gvc: gvc,
|
|
585
|
+
title: '回答',
|
|
586
|
+
placeHolder: `請輸入回答`,
|
|
587
|
+
default: copy.response,
|
|
588
|
+
callback: (text) => {
|
|
589
|
+
copy.response = text;
|
|
590
|
+
},
|
|
591
|
+
})].map((dd) => {
|
|
592
|
+
return `<div>${dd}</div>`;
|
|
593
|
+
}).join('');
|
|
594
|
+
},
|
|
595
|
+
footer_html: (gvc) => {
|
|
596
|
+
return [
|
|
597
|
+
BgWidget.cancel(gvc.event(() => {
|
|
598
|
+
gvc.closeDialog();
|
|
599
|
+
})),
|
|
600
|
+
BgWidget.save(gvc.event(() => {
|
|
601
|
+
if (!copy.ask || !copy.response) {
|
|
602
|
+
dialog.errorMessage({ text: '內容不得為空' });
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
keyData.question.push(copy);
|
|
606
|
+
refresh();
|
|
607
|
+
gvc.closeDialog();
|
|
608
|
+
}))
|
|
609
|
+
].join(``);
|
|
610
|
+
}
|
|
611
|
+
});
|
|
612
|
+
})}">
|
|
613
|
+
<div style="font-size: 16px; font-family: Noto Sans; font-weight: 400; word-wrap: break-word">
|
|
614
|
+
新增一則問答
|
|
615
|
+
</div>
|
|
616
|
+
<i class="fa-solid fa-plus"
|
|
617
|
+
aria-hidden="true"></i>
|
|
618
|
+
</div>
|
|
619
|
+
</div>
|
|
620
|
+
`;
|
|
621
|
+
},
|
|
622
|
+
divCreate: {
|
|
623
|
+
class: `m-n2`,
|
|
624
|
+
},
|
|
625
|
+
};
|
|
626
|
+
});
|
|
627
|
+
},
|
|
628
|
+
footer_html: (gvc) => {
|
|
629
|
+
return [BgWidget.cancel(gvc.event(() => {
|
|
630
|
+
gvc.closeDialog();
|
|
631
|
+
}), '取消'), BgWidget.save(gvc.event(() => __awaiter(this, void 0, void 0, function* () {
|
|
632
|
+
dialog.dataLoading({ visible: true });
|
|
633
|
+
yield ApiUser.setPublicConfig({
|
|
634
|
+
key: `robot_ai_reply`,
|
|
635
|
+
value: keyData,
|
|
636
|
+
user_id: 'manager',
|
|
637
|
+
});
|
|
638
|
+
dialog.dataLoading({ visible: false });
|
|
639
|
+
dialog.successMessage({ text: '設定成功!' });
|
|
640
|
+
gvc.closeDialog();
|
|
641
|
+
})), '儲存')].join('');
|
|
642
|
+
}
|
|
643
|
+
});
|
|
644
|
+
})))}
|
|
645
|
+
</div>` : ``}
|
|
646
|
+
</div>
|
|
647
|
+
`;
|
|
648
|
+
}
|
|
649
|
+
};
|
|
650
|
+
}),
|
|
651
|
+
BgWidget.editeInput({
|
|
652
|
+
gvc: gvc,
|
|
653
|
+
title: '客服名稱',
|
|
654
|
+
type: 'name',
|
|
655
|
+
placeHolder: `請輸入客服名稱`,
|
|
656
|
+
default: keyData.name,
|
|
657
|
+
callback: (text) => {
|
|
658
|
+
keyData.name = text;
|
|
659
|
+
},
|
|
660
|
+
}),
|
|
661
|
+
EditorElem.uploadImage({
|
|
662
|
+
title: '大頭照',
|
|
663
|
+
gvc: gvc,
|
|
664
|
+
def: keyData.head || '',
|
|
665
|
+
callback: (text) => {
|
|
666
|
+
keyData.head = text;
|
|
667
|
+
},
|
|
668
|
+
}),
|
|
669
|
+
EditorElem.colorSelect({
|
|
670
|
+
gvc: gvc,
|
|
671
|
+
title: '設定主色調',
|
|
672
|
+
def: keyData.color,
|
|
673
|
+
callback: (text) => {
|
|
674
|
+
keyData.color = text;
|
|
675
|
+
gvc.notifyDataChange(vO.id);
|
|
676
|
+
},
|
|
677
|
+
}),
|
|
678
|
+
BgWidget.editeInput({
|
|
679
|
+
gvc: gvc,
|
|
680
|
+
title: '置頂標題',
|
|
681
|
+
placeHolder: `請輸入置頂標題`,
|
|
682
|
+
default: keyData.title,
|
|
683
|
+
callback: (text) => {
|
|
684
|
+
keyData.title = text;
|
|
685
|
+
},
|
|
686
|
+
}),
|
|
687
|
+
BgWidget.textArea({
|
|
688
|
+
gvc: gvc,
|
|
689
|
+
title: '置頂內文',
|
|
690
|
+
placeHolder: `請輸入置頂內文`,
|
|
691
|
+
default: keyData.content,
|
|
692
|
+
callback: (text) => {
|
|
693
|
+
keyData.content = text;
|
|
694
|
+
},
|
|
695
|
+
})
|
|
696
|
+
];
|
|
697
|
+
}
|
|
698
|
+
else {
|
|
699
|
+
return [];
|
|
700
|
+
}
|
|
701
|
+
})()
|
|
416
702
|
].join(`<div class="my-2"></div>`)}
|
|
417
703
|
</div>`,
|
|
418
704
|
gvc.bindView(() => {
|
|
@@ -421,6 +707,9 @@ export class BgCustomerMessage {
|
|
|
421
707
|
return {
|
|
422
708
|
bind: id,
|
|
423
709
|
view: () => {
|
|
710
|
+
if (!keyData.toggle) {
|
|
711
|
+
return ``;
|
|
712
|
+
}
|
|
424
713
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
425
714
|
var _a;
|
|
426
715
|
let keyData = (yield ApiUser.getPublicConfig(`robot_auto_reply`, 'manager')).response.value || {};
|
|
@@ -436,10 +725,12 @@ export class BgCustomerMessage {
|
|
|
436
725
|
}
|
|
437
726
|
resolve(html `
|
|
438
727
|
<div class="position-relative bgf6 d-flex align-items-center justify-content-between mx-n2 p-2 py-3 border-top border-bottom mt-2 shadow">
|
|
439
|
-
<span class="fs-6 fw-bold "
|
|
440
|
-
style="color:black;"
|
|
728
|
+
<span class="fs-6 fw-bold d-flex flex-column"
|
|
729
|
+
style="color:black;">常見問題
|
|
730
|
+
${BgWidget.grayNote('將顯示於客服聊天首頁,讓用戶直接點選')}</span>
|
|
441
731
|
</div>
|
|
442
732
|
<div style="" class="p-2">
|
|
733
|
+
|
|
443
734
|
${gvc.bindView(() => {
|
|
444
735
|
return {
|
|
445
736
|
bind: id,
|