ts-glitter 14.7.2 → 14.7.4
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/cms-plugin/ai-generator/editor-ai.js +63 -0
- package/lowcode/cms-plugin/ai-generator/editor-ai.ts +90 -0
- package/lowcode/cms-plugin/ai-generator/member-ai.js +183 -0
- package/lowcode/cms-plugin/ai-generator/member-ai.ts +187 -0
- package/lowcode/cms-plugin/ai-generator/product-ai.js +97 -106
- package/lowcode/cms-plugin/ai-generator/product-ai.ts +103 -112
- package/lowcode/cms-plugin/ai-message.js +615 -598
- package/lowcode/cms-plugin/ai-message.ts +603 -613
- package/lowcode/cms-plugin/product-config.js +66 -0
- package/lowcode/cms-plugin/product-config.ts +67 -0
- package/lowcode/cms-plugin/shopping-product-setting.js +7 -53
- package/lowcode/cms-plugin/shopping-product-setting.ts +9 -53
- package/lowcode/cms-plugin/user-list.js +33 -20
- package/lowcode/cms-plugin/user-list.ts +33 -19
- package/lowcode/css/editor.css +18 -0
- package/lowcode/glitter-base/route/user.js +10 -0
- package/lowcode/glitter-base/route/user.ts +10 -0
- package/lowcode/glitterBundle/html-component/global-widget.js +58 -0
- package/lowcode/glitterBundle/html-component/global-widget.ts +58 -1
- package/lowcode/jspage/function-page/setting_editor.ts +0 -2
- package/lowcode/official_view_component/official/component.js +1 -0
- package/lowcode/official_view_component/official/component.ts +2 -0
- package/lowcode/public-components/user-manager/um-order.js +2 -2
- package/lowcode/public-components/user-manager/um-order.ts +2 -2
- package/package.json +1 -1
- package/src/api-public/controllers/fcm.js.map +1 -1
- package/src/api-public/controllers/index.js +1 -0
- package/src/api-public/controllers/index.js.map +1 -1
- package/src/api-public/controllers/index.ts +1 -0
- package/src/api-public/controllers/rebate.js.map +1 -1
- package/src/api-public/controllers/user.js +10 -0
- package/src/api-public/controllers/user.js.map +1 -1
- package/src/api-public/controllers/user.ts +10 -0
- package/src/api-public/services/auto-send-email.js.map +1 -1
- package/src/api-public/services/chat.js.map +1 -1
- package/src/api-public/services/custom-code.js.map +1 -1
- package/src/api-public/services/rebate.js.map +1 -1
- package/src/api-public/services/share-permission.js.map +1 -1
- package/src/api-public/services/user.d.ts +1 -0
- package/src/api-public/services/user.js +11 -0
- package/src/api-public/services/user.js.map +1 -1
- package/src/api-public/services/user.ts +16 -0
- package/src/services/app.js.map +1 -1
package/lowcode/Entry.js
CHANGED
|
@@ -80,7 +80,7 @@ export class Entry {
|
|
|
80
80
|
}
|
|
81
81
|
window.renderClock = (_a = window.renderClock) !== null && _a !== void 0 ? _a : clockF();
|
|
82
82
|
console.log(`Entry-time:`, window.renderClock.stop());
|
|
83
|
-
glitter.share.editerVersion = 'V_14.7.
|
|
83
|
+
glitter.share.editerVersion = 'V_14.7.4';
|
|
84
84
|
glitter.share.start = new Date();
|
|
85
85
|
const vm = {
|
|
86
86
|
appConfig: [],
|
package/lowcode/Entry.ts
CHANGED
|
@@ -82,7 +82,7 @@ export class Entry {
|
|
|
82
82
|
|
|
83
83
|
(window as any).renderClock = (window as any).renderClock ?? clockF();
|
|
84
84
|
console.log(`Entry-time:`, (window as any).renderClock.stop());
|
|
85
|
-
glitter.share.editerVersion = 'V_14.7.
|
|
85
|
+
glitter.share.editerVersion = 'V_14.7.4';
|
|
86
86
|
glitter.share.start = new Date();
|
|
87
87
|
const vm: {
|
|
88
88
|
appConfig: any;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { BgWidget } from "../../backend-manager/bg-widget.js";
|
|
2
|
+
import { EditorElem } from "../../glitterBundle/plugins/editor-elem.js";
|
|
3
|
+
import { ShareDialog } from "../../glitterBundle/dialog/ShareDialog.js";
|
|
4
|
+
export class EditorAi {
|
|
5
|
+
static view(gvc) {
|
|
6
|
+
const html = String.raw;
|
|
7
|
+
let message = '';
|
|
8
|
+
return html `
|
|
9
|
+
<div class="p-2">
|
|
10
|
+
${[
|
|
11
|
+
html `
|
|
12
|
+
<lottie-player src="${gvc.glitter.root_path}lottie/ai.json"
|
|
13
|
+
class="mx-auto my-n4" speed="1"
|
|
14
|
+
style="max-width: 100%;width: 250px;height:250px;" loop
|
|
15
|
+
autoplay></lottie-player>`,
|
|
16
|
+
`<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('點擊想要調整的元件之後,在輸入 AI 語句進行調整', `font-weight: 500;`)}</div>`,
|
|
17
|
+
html `
|
|
18
|
+
<div class="w-100" onclick="${gvc.event(() => {
|
|
19
|
+
if (!gvc.glitter.share.editorViewModel.selectItem) {
|
|
20
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
21
|
+
dialog.errorMessage({ text: '請先點擊要編輯的元件' });
|
|
22
|
+
}
|
|
23
|
+
})}">
|
|
24
|
+
${EditorElem.editeText({
|
|
25
|
+
gvc: gvc,
|
|
26
|
+
title: '',
|
|
27
|
+
default: '',
|
|
28
|
+
placeHolder: `字體大小20px,距離左邊20px,背景顏色黃色,字體顏色藍色,標題為歡迎來到SHOPNEX開店平台.`,
|
|
29
|
+
callback: (text) => {
|
|
30
|
+
message = text;
|
|
31
|
+
},
|
|
32
|
+
min_height: 100
|
|
33
|
+
})}
|
|
34
|
+
</div>`,
|
|
35
|
+
html `
|
|
36
|
+
<div class="w-100 d-flex align-items-center justify-content-end">
|
|
37
|
+
${BgWidget.save(gvc.event(() => {
|
|
38
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
39
|
+
if (!message) {
|
|
40
|
+
dialog.errorMessage({ text: '請輸入描述語句' });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
dialog.dataLoading({ visible: true });
|
|
44
|
+
gvc.glitter.getModule(new URL('./editor/ai-editor.js', gvc.glitter.root_path).href, (AiEditor) => {
|
|
45
|
+
AiEditor.editView(message, gvc.glitter.share.editorViewModel.selectItem, (result) => {
|
|
46
|
+
dialog.dataLoading({ visible: false });
|
|
47
|
+
if (result) {
|
|
48
|
+
dialog.successMessage({ text: `已為你調整元件『${result}』` });
|
|
49
|
+
gvc.glitter.share.editorViewModel.selectItem.refreshComponent();
|
|
50
|
+
gvc.glitter.closeDrawer();
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
dialog.errorMessage({ text: 'AI無法理解你的意思,請輸入更確切的需求' });
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}), "調整元素", "w-100 mt-3 py-2")}
|
|
58
|
+
</div>`
|
|
59
|
+
].join('<div class="my-2"></div>')}
|
|
60
|
+
</div>`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
window.glitter.setModule(import.meta.url, EditorAi);
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import {GVC} from "../../glitterBundle/GVController.js";
|
|
2
|
+
import {BgWidget} from "../../backend-manager/bg-widget.js";
|
|
3
|
+
import {EditorElem} from "../../glitterBundle/plugins/editor-elem.js";
|
|
4
|
+
import {ShareDialog} from "../../glitterBundle/dialog/ShareDialog.js";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export class EditorAi {
|
|
8
|
+
public static view(gvc: GVC) {
|
|
9
|
+
const html = String.raw
|
|
10
|
+
let message = ''
|
|
11
|
+
return html`
|
|
12
|
+
<div class="p-2">
|
|
13
|
+
${[
|
|
14
|
+
html`
|
|
15
|
+
<lottie-player src="${gvc.glitter.root_path}lottie/ai.json"
|
|
16
|
+
class="mx-auto my-n4" speed="1"
|
|
17
|
+
style="max-width: 100%;width: 250px;height:250px;" loop
|
|
18
|
+
autoplay></lottie-player>`,
|
|
19
|
+
`<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('點擊想要調整的元件之後,在輸入 AI 語句進行調整', `font-weight: 500;`)}</div>`,
|
|
20
|
+
html`
|
|
21
|
+
<div class="w-100" onclick="${gvc.event(() => {
|
|
22
|
+
if (!gvc.glitter.share.editorViewModel.selectItem) {
|
|
23
|
+
const dialog = new ShareDialog(gvc.glitter)
|
|
24
|
+
dialog.errorMessage({text: '請先點擊要編輯的元件'})
|
|
25
|
+
}
|
|
26
|
+
})}">
|
|
27
|
+
${EditorElem.editeText({
|
|
28
|
+
gvc: gvc,
|
|
29
|
+
title: '',
|
|
30
|
+
default: '',
|
|
31
|
+
placeHolder: `字體大小20px,距離左邊20px,背景顏色黃色,字體顏色藍色,標題為歡迎來到SHOPNEX開店平台.`,
|
|
32
|
+
callback: (text) => {
|
|
33
|
+
message = text;
|
|
34
|
+
},
|
|
35
|
+
min_height: 100
|
|
36
|
+
})}
|
|
37
|
+
</div>`,
|
|
38
|
+
html`
|
|
39
|
+
<div class="w-100 d-flex align-items-center justify-content-end">
|
|
40
|
+
${BgWidget.save(gvc.event(() => {
|
|
41
|
+
const dialog = new ShareDialog(gvc.glitter)
|
|
42
|
+
if (!message) {
|
|
43
|
+
dialog.errorMessage({text: '請輸入描述語句'})
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
dialog.dataLoading({visible: true})
|
|
48
|
+
gvc.glitter.getModule(new URL('./editor/ai-editor.js', gvc.glitter.root_path).href, (AiEditor) => {
|
|
49
|
+
AiEditor.editView(message, gvc.glitter.share.editorViewModel.selectItem, (result: any) => {
|
|
50
|
+
dialog.dataLoading({visible: false})
|
|
51
|
+
if (result) {
|
|
52
|
+
dialog.successMessage({text: `已為你調整元件『${result}』`})
|
|
53
|
+
gvc.glitter.share.editorViewModel.selectItem.refreshComponent()
|
|
54
|
+
gvc.glitter.closeDrawer()
|
|
55
|
+
} else {
|
|
56
|
+
dialog.errorMessage({text: 'AI無法理解你的意思,請輸入更確切的需求'})
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
})
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// const dialog = new ShareDialog(gvc.glitter)
|
|
63
|
+
// dialog.dataLoading({visible: true})
|
|
64
|
+
// AiChat.generateHtml({
|
|
65
|
+
// app_name: (window as any).appName,
|
|
66
|
+
// text: message
|
|
67
|
+
// }).then((res) => {
|
|
68
|
+
// if (res.result && res.response.data.usage === 0) {
|
|
69
|
+
// dialog.dataLoading({visible: false})
|
|
70
|
+
// dialog.errorMessage({text: `很抱歉你的AI代幣不足,請先前往加值`})
|
|
71
|
+
// } else if (res.result && (!res.response.data.obj.result)) {
|
|
72
|
+
// dialog.dataLoading({visible: false})
|
|
73
|
+
// dialog.errorMessage({text: `AI無法理解你的需求,請給出具體一點的描述`})
|
|
74
|
+
// } else if (!res.result) {
|
|
75
|
+
// dialog.dataLoading({visible: false})
|
|
76
|
+
// dialog.errorMessage({text: `發生錯誤`})
|
|
77
|
+
// } else {
|
|
78
|
+
//
|
|
79
|
+
// dialog.successMessage({text: `AI生成完畢,使用了『${res.response.data.usage}』點 AI Points.`})
|
|
80
|
+
//
|
|
81
|
+
// }
|
|
82
|
+
// })
|
|
83
|
+
}), "調整元素", "w-100 mt-3 py-2")}
|
|
84
|
+
</div>`
|
|
85
|
+
].join('<div class="my-2"></div>')}
|
|
86
|
+
</div>`
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
(window as any).glitter.setModule(import.meta.url, EditorAi);
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { BgWidget } from "../../backend-manager/bg-widget.js";
|
|
2
|
+
import { ShareDialog } from "../../glitterBundle/dialog/ShareDialog.js";
|
|
3
|
+
import { AiChat } from "../../glitter-base/route/ai-chat.js";
|
|
4
|
+
export class MemberAi {
|
|
5
|
+
static addMember(gvc, member_data, refresh) {
|
|
6
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
7
|
+
const html = String.raw;
|
|
8
|
+
const language = window.parent.store_info.language_setting.def;
|
|
9
|
+
let place_holder = '顧客姓名是王小明,電子信箱是sam12345@gmail.com,電話號碼是0912345678,生日是民國83年11月5日,地址是台北市大安區望安路10號,備註來自Facebook的消費用戶。';
|
|
10
|
+
let message = place_holder;
|
|
11
|
+
return html `
|
|
12
|
+
<div class="">
|
|
13
|
+
${[
|
|
14
|
+
html `
|
|
15
|
+
<lottie-player src="${gvc.glitter.root_path}lottie/ai.json" class="mx-auto my-n4"
|
|
16
|
+
speed="1"
|
|
17
|
+
style="max-width: 100%;width: 250px;height:250px;" loop
|
|
18
|
+
autoplay></lottie-player>`,
|
|
19
|
+
`<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('透過 AI 可以幫你快速新增會員資料', `font-weight: 500;`)}</div>`,
|
|
20
|
+
html `
|
|
21
|
+
<div class="w-100" ">
|
|
22
|
+
${BgWidget.textArea({
|
|
23
|
+
gvc: gvc,
|
|
24
|
+
title: '',
|
|
25
|
+
default: message,
|
|
26
|
+
placeHolder: place_holder,
|
|
27
|
+
callback: (text) => {
|
|
28
|
+
message = text;
|
|
29
|
+
},
|
|
30
|
+
style: `min-height:100px;`
|
|
31
|
+
})}
|
|
32
|
+
</div>`,
|
|
33
|
+
`<div class="w-100 d-flex align-items-center justify-content-end">
|
|
34
|
+
${BgWidget.save(gvc.event(() => {
|
|
35
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
36
|
+
dialog.dataLoading({ visible: true });
|
|
37
|
+
AiChat.editorHtml({
|
|
38
|
+
text: message,
|
|
39
|
+
format: MemberAi.schema,
|
|
40
|
+
assistant: `你是後台小幫手,幫我新增對應的會員資料`,
|
|
41
|
+
token: window.parent.saasConfig.config.token
|
|
42
|
+
}).then((res) => {
|
|
43
|
+
dialog.dataLoading({ visible: false });
|
|
44
|
+
const obj = res.response.data && res.response.data.obj;
|
|
45
|
+
if (obj) {
|
|
46
|
+
const usage = res.response.data.usage;
|
|
47
|
+
if (usage) {
|
|
48
|
+
(obj.name) && (member_data.name = obj.name);
|
|
49
|
+
(obj.email) && (member_data.email = obj.email);
|
|
50
|
+
(obj.phone) && (member_data.phone = obj.phone);
|
|
51
|
+
(obj.birth) && (member_data.birth = obj.birth);
|
|
52
|
+
(obj.address) && (member_data.address = obj.address);
|
|
53
|
+
(obj.managerNote) && (member_data.managerNote = obj.managerNote);
|
|
54
|
+
dialog.successMessage({ text: `生成成功,消耗了『${usage}』點 AI-Points` });
|
|
55
|
+
refresh();
|
|
56
|
+
gvc.closeDialog();
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
dialog.errorMessage({ text: 'AI Points 點數不足' });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
dialog.errorMessage({ text: '發生錯誤' });
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}), "確認生成", "w-100 mt-3 py-4 fs-6")}
|
|
67
|
+
</div>`
|
|
68
|
+
].join('<div class="my-2"></div>')}
|
|
69
|
+
</div>`;
|
|
70
|
+
}
|
|
71
|
+
static generateRichText(gvc, callback) {
|
|
72
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
73
|
+
BgWidget.settingDialog({
|
|
74
|
+
gvc: gvc,
|
|
75
|
+
title: 'AI 內容生成',
|
|
76
|
+
innerHTML: (gvc) => {
|
|
77
|
+
const html = String.raw;
|
|
78
|
+
let message = '';
|
|
79
|
+
return html `
|
|
80
|
+
<div class="">
|
|
81
|
+
${[
|
|
82
|
+
html `
|
|
83
|
+
<lottie-player src="${gvc.glitter.root_path}lottie/ai.json" class="mx-auto my-n4"
|
|
84
|
+
speed="1"
|
|
85
|
+
style="max-width: 100%;width: 250px;height:250px;" loop
|
|
86
|
+
autoplay></lottie-player>`,
|
|
87
|
+
`<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('透過 AI 可以快速幫您生成內文', `font-weight: 500;`)}</div>`,
|
|
88
|
+
html `
|
|
89
|
+
<div class="w-100" ">
|
|
90
|
+
${BgWidget.textArea({
|
|
91
|
+
gvc: gvc,
|
|
92
|
+
title: '',
|
|
93
|
+
default: message,
|
|
94
|
+
placeHolder: `幫我生成一個4*3的說明表格,內容是針對健康保健。`,
|
|
95
|
+
callback: (text) => {
|
|
96
|
+
message = text;
|
|
97
|
+
},
|
|
98
|
+
style: `min-height:100px;`
|
|
99
|
+
})}
|
|
100
|
+
</div>`,
|
|
101
|
+
html `
|
|
102
|
+
<div class="w-100 d-flex align-items-center justify-content-end">
|
|
103
|
+
${BgWidget.save(gvc.event(() => {
|
|
104
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
105
|
+
dialog.dataLoading({ visible: true });
|
|
106
|
+
AiChat.generateHtml({
|
|
107
|
+
token: window.parent.saasConfig.config.token,
|
|
108
|
+
app_name: window.parent.appName,
|
|
109
|
+
text: message
|
|
110
|
+
}).then((res) => {
|
|
111
|
+
if (res.result && res.response.data.usage === 0) {
|
|
112
|
+
dialog.dataLoading({ visible: false });
|
|
113
|
+
dialog.errorMessage({ text: `很抱歉你的AI代幣不足,請先前往加值` });
|
|
114
|
+
}
|
|
115
|
+
else if (res.result && (!res.response.data.obj.result)) {
|
|
116
|
+
dialog.dataLoading({ visible: false });
|
|
117
|
+
dialog.errorMessage({ text: `AI無法理解你的需求,請給出具體一點的描述` });
|
|
118
|
+
}
|
|
119
|
+
else if (!res.result) {
|
|
120
|
+
dialog.dataLoading({ visible: false });
|
|
121
|
+
dialog.errorMessage({ text: `發生錯誤` });
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
callback(res.response.data.obj.html);
|
|
125
|
+
dialog.dataLoading({ visible: false });
|
|
126
|
+
dialog.successMessage({ text: `AI生成完畢,使用了『${res.response.data.usage}』點 AI Points.` });
|
|
127
|
+
gvc.closeDialog();
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}), "確認生成", "w-100 mt-3 py-2")}
|
|
131
|
+
</div>`
|
|
132
|
+
].join('<div class="my-2"></div>')}
|
|
133
|
+
</div>`;
|
|
134
|
+
},
|
|
135
|
+
footer_html: (gvc) => {
|
|
136
|
+
return ``;
|
|
137
|
+
},
|
|
138
|
+
width: 500
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
MemberAi.schema = {
|
|
143
|
+
"name": "customer_data",
|
|
144
|
+
"strict": true,
|
|
145
|
+
"schema": {
|
|
146
|
+
"type": "object",
|
|
147
|
+
"properties": {
|
|
148
|
+
"name": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"description": "顧客的姓名"
|
|
151
|
+
},
|
|
152
|
+
"email": {
|
|
153
|
+
"type": "string",
|
|
154
|
+
"description": "顧客的電子信箱"
|
|
155
|
+
},
|
|
156
|
+
"phone": {
|
|
157
|
+
"type": "string",
|
|
158
|
+
"description": "顧客的電話"
|
|
159
|
+
},
|
|
160
|
+
"birth": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"description": "顧客的西元出生日期,範例19981223"
|
|
163
|
+
},
|
|
164
|
+
"address": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "顧客的地址"
|
|
167
|
+
},
|
|
168
|
+
"managerNote": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"description": "顧客的備註"
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"required": [
|
|
174
|
+
"name",
|
|
175
|
+
"email",
|
|
176
|
+
"phone",
|
|
177
|
+
"birth",
|
|
178
|
+
"address",
|
|
179
|
+
"managerNote"
|
|
180
|
+
],
|
|
181
|
+
"additionalProperties": false
|
|
182
|
+
}
|
|
183
|
+
};
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import {GVC} from "../../glitterBundle/GVController.js";
|
|
2
|
+
import {BgWidget} from "../../backend-manager/bg-widget.js";
|
|
3
|
+
import {ApiUser} from "../../glitter-base/route/user.js";
|
|
4
|
+
import {AiPointsApi} from "../../glitter-base/route/ai-points-api.js";
|
|
5
|
+
import {ShareDialog} from "../../glitterBundle/dialog/ShareDialog.js";
|
|
6
|
+
import {AiChat} from "../../glitter-base/route/ai-chat.js";
|
|
7
|
+
import {AddComponent} from "../../editor/add-component.js";
|
|
8
|
+
|
|
9
|
+
export class MemberAi {
|
|
10
|
+
public static schema = {
|
|
11
|
+
"name": "customer_data",
|
|
12
|
+
"strict": true,
|
|
13
|
+
"schema": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"properties": {
|
|
16
|
+
"name": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "顧客的姓名"
|
|
19
|
+
},
|
|
20
|
+
"email": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "顧客的電子信箱"
|
|
23
|
+
},
|
|
24
|
+
"phone": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "顧客的電話"
|
|
27
|
+
},
|
|
28
|
+
"birth": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"description": "顧客的西元出生日期,範例19981223"
|
|
31
|
+
},
|
|
32
|
+
"address": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"description": "顧客的地址"
|
|
35
|
+
},
|
|
36
|
+
"managerNote": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"description": "顧客的備註"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"required": [
|
|
42
|
+
"name",
|
|
43
|
+
"email",
|
|
44
|
+
"phone",
|
|
45
|
+
"birth",
|
|
46
|
+
"address",
|
|
47
|
+
"managerNote"
|
|
48
|
+
],
|
|
49
|
+
"additionalProperties": false
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public static addMember(gvc: GVC, member_data: any, refresh: () => void) {
|
|
54
|
+
const dialog = new ShareDialog(gvc.glitter)
|
|
55
|
+
const html = String.raw
|
|
56
|
+
//當前預設語言
|
|
57
|
+
const language = (window.parent as any).store_info.language_setting.def;
|
|
58
|
+
let place_holder = '顧客姓名是王小明,電子信箱是sam12345@gmail.com,電話號碼是0912345678,生日是民國83年11月5日,地址是台北市大安區望安路10號,備註來自Facebook的消費用戶。'
|
|
59
|
+
let message = place_holder
|
|
60
|
+
return html`
|
|
61
|
+
<div class="">
|
|
62
|
+
${[
|
|
63
|
+
html`
|
|
64
|
+
<lottie-player src="${gvc.glitter.root_path}lottie/ai.json" class="mx-auto my-n4"
|
|
65
|
+
speed="1"
|
|
66
|
+
style="max-width: 100%;width: 250px;height:250px;" loop
|
|
67
|
+
autoplay></lottie-player>`,
|
|
68
|
+
`<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('透過 AI 可以幫你快速新增會員資料', `font-weight: 500;`)}</div>`,
|
|
69
|
+
html`
|
|
70
|
+
<div class="w-100" ">
|
|
71
|
+
${BgWidget.textArea({
|
|
72
|
+
gvc: gvc,
|
|
73
|
+
title: '',
|
|
74
|
+
default: message,
|
|
75
|
+
placeHolder: place_holder,
|
|
76
|
+
callback: (text) => {
|
|
77
|
+
message = text;
|
|
78
|
+
},
|
|
79
|
+
style: `min-height:100px;`
|
|
80
|
+
})}
|
|
81
|
+
</div>`,
|
|
82
|
+
`<div class="w-100 d-flex align-items-center justify-content-end">
|
|
83
|
+
${BgWidget.save(gvc.event(() => {
|
|
84
|
+
const dialog = new ShareDialog(gvc.glitter)
|
|
85
|
+
dialog.dataLoading({visible: true})
|
|
86
|
+
AiChat.editorHtml({
|
|
87
|
+
text: message,
|
|
88
|
+
format: MemberAi.schema,
|
|
89
|
+
assistant: `你是後台小幫手,幫我新增對應的會員資料`,
|
|
90
|
+
token: (window.parent as any).saasConfig.config.token
|
|
91
|
+
}).then((res) => {
|
|
92
|
+
dialog.dataLoading({visible: false})
|
|
93
|
+
const obj = res.response.data && res.response.data.obj
|
|
94
|
+
if (obj) {
|
|
95
|
+
const usage = res.response.data.usage
|
|
96
|
+
if (usage) {
|
|
97
|
+
(obj.name) && (member_data.name = obj.name);
|
|
98
|
+
(obj.email) && (member_data.email = obj.email);
|
|
99
|
+
(obj.phone) && (member_data.phone = obj.phone);
|
|
100
|
+
(obj.birth) && (member_data.birth = obj.birth);
|
|
101
|
+
(obj.address) && (member_data.address = obj.address);
|
|
102
|
+
(obj.managerNote) && (member_data.managerNote = obj.managerNote);
|
|
103
|
+
dialog.successMessage({text: `生成成功,消耗了『${usage}』點 AI-Points`})
|
|
104
|
+
refresh()
|
|
105
|
+
gvc.closeDialog()
|
|
106
|
+
} else {
|
|
107
|
+
dialog.errorMessage({text: 'AI Points 點數不足'})
|
|
108
|
+
}
|
|
109
|
+
} else {
|
|
110
|
+
dialog.errorMessage({text: '發生錯誤'})
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
}), "確認生成", "w-100 mt-3 py-4 fs-6")}
|
|
114
|
+
</div>`
|
|
115
|
+
].join('<div class="my-2"></div>')}
|
|
116
|
+
</div>`
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public static generateRichText(gvc: GVC, callback: (text: string) => void) {
|
|
120
|
+
const dialog = new ShareDialog(gvc.glitter)
|
|
121
|
+
BgWidget.settingDialog({
|
|
122
|
+
gvc: gvc,
|
|
123
|
+
title: 'AI 內容生成',
|
|
124
|
+
innerHTML: (gvc: GVC) => {
|
|
125
|
+
const html = String.raw
|
|
126
|
+
let message = ''
|
|
127
|
+
return html`
|
|
128
|
+
<div class="">
|
|
129
|
+
${[
|
|
130
|
+
html`
|
|
131
|
+
<lottie-player src="${gvc.glitter.root_path}lottie/ai.json" class="mx-auto my-n4"
|
|
132
|
+
speed="1"
|
|
133
|
+
style="max-width: 100%;width: 250px;height:250px;" loop
|
|
134
|
+
autoplay></lottie-player>`,
|
|
135
|
+
`<div class="w-100 d-flex align-items-center justify-content-center my-3">${BgWidget.grayNote('透過 AI 可以快速幫您生成內文', `font-weight: 500;`)}</div>`,
|
|
136
|
+
html`
|
|
137
|
+
<div class="w-100" ">
|
|
138
|
+
${BgWidget.textArea({
|
|
139
|
+
gvc: gvc,
|
|
140
|
+
title: '',
|
|
141
|
+
default: message,
|
|
142
|
+
placeHolder: `幫我生成一個4*3的說明表格,內容是針對健康保健。`,
|
|
143
|
+
callback: (text) => {
|
|
144
|
+
message = text;
|
|
145
|
+
},
|
|
146
|
+
style: `min-height:100px;`
|
|
147
|
+
})}
|
|
148
|
+
</div>`,
|
|
149
|
+
html`
|
|
150
|
+
<div class="w-100 d-flex align-items-center justify-content-end">
|
|
151
|
+
${BgWidget.save(gvc.event(() => {
|
|
152
|
+
const dialog = new ShareDialog(gvc.glitter)
|
|
153
|
+
dialog.dataLoading({visible: true})
|
|
154
|
+
AiChat.generateHtml({
|
|
155
|
+
token: (window.parent as any).saasConfig.config.token,
|
|
156
|
+
app_name: (window.parent as any).appName,
|
|
157
|
+
text: message
|
|
158
|
+
}).then((res) => {
|
|
159
|
+
if (res.result && res.response.data.usage === 0) {
|
|
160
|
+
dialog.dataLoading({visible: false})
|
|
161
|
+
dialog.errorMessage({text: `很抱歉你的AI代幣不足,請先前往加值`})
|
|
162
|
+
} else if (res.result && (!res.response.data.obj.result)) {
|
|
163
|
+
dialog.dataLoading({visible: false})
|
|
164
|
+
dialog.errorMessage({text: `AI無法理解你的需求,請給出具體一點的描述`})
|
|
165
|
+
} else if (!res.result) {
|
|
166
|
+
dialog.dataLoading({visible: false})
|
|
167
|
+
dialog.errorMessage({text: `發生錯誤`})
|
|
168
|
+
} else {
|
|
169
|
+
callback(res.response.data.obj.html)
|
|
170
|
+
dialog.dataLoading({visible: false})
|
|
171
|
+
dialog.successMessage({text: `AI生成完畢,使用了『${res.response.data.usage}』點 AI Points.`})
|
|
172
|
+
gvc.closeDialog()
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
})
|
|
176
|
+
}), "確認生成", "w-100 mt-3 py-2")}
|
|
177
|
+
</div>`
|
|
178
|
+
].join('<div class="my-2"></div>')}
|
|
179
|
+
</div>`
|
|
180
|
+
},
|
|
181
|
+
footer_html: (gvc: GVC) => {
|
|
182
|
+
return ``
|
|
183
|
+
},
|
|
184
|
+
width: 500
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|