ts-glitter 18.2.6 → 18.2.8
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 +30 -1
- package/lowcode/Entry.ts +36 -1
- package/lowcode/cms-plugin/customer-message-user.js +503 -8
- package/lowcode/cms-plugin/customer-message-user.ts +549 -12
- package/lowcode/cms-plugin/shopping-finance-setting.js +4 -4
- package/lowcode/cms-plugin/shopping-finance-setting.ts +4 -4
- package/lowcode/cms-plugin/shopping-information.js +16 -0
- package/lowcode/cms-plugin/shopping-information.ts +16 -0
- package/lowcode/cms-plugin/shopping-order-manager.js +138 -77
- package/lowcode/cms-plugin/shopping-order-manager.ts +177 -102
- package/lowcode/glitter-base/global/language.js +6 -0
- package/lowcode/glitter-base/global/language.ts +6 -0
- package/lowcode/glitterBundle/GVController.js +2 -2
- package/lowcode/glitterBundle/GVController.ts +2 -2
- package/lowcode/glitterBundle/dialog/dialog_inner.js +5 -2
- package/lowcode/glitterBundle/dialog/dialog_inner.ts +5 -2
- package/lowcode/glitterBundle/module/Animation.js +59 -0
- package/lowcode/glitterBundle/module/Animation.ts +62 -0
- package/lowcode/glitterBundle/module/PageManager.js +3 -3
- package/lowcode/glitterBundle/module/PageManager.ts +1 -1
- package/lowcode/index.html +1 -0
- package/lowcode/public-components/checkout/index.js +77 -117
- package/lowcode/public-components/checkout/index.ts +174 -221
- package/lowcode/public-components/footer/footer-01.js +3 -0
- package/lowcode/public-components/footer/footer-01.ts +3 -0
- package/lowcode/public-components/footer/footer-02.js +3 -0
- package/lowcode/public-components/footer/footer-02.ts +3 -0
- package/lowcode/public-components/footer/footer-03.js +3 -0
- package/lowcode/public-components/footer/footer-03.ts +3 -0
- package/lowcode/public-components/product/pd-class.js +868 -355
- package/lowcode/public-components/product/pd-class.ts +1005 -438
- package/lowcode/public-components/product/product-detail.js +1 -1
- package/lowcode/public-components/product/product-detail.ts +3 -1
- package/package.json +1 -1
- package/src/api-public/controllers/article.js.map +1 -1
- package/src/api-public/controllers/delivery.js.map +1 -1
- package/src/api-public/controllers/delivery.ts +2 -0
- package/src/api-public/controllers/shop.js +3 -2
- package/src/api-public/controllers/shop.js.map +1 -1
- package/src/api-public/controllers/shop.ts +4 -3
- package/src/api-public/controllers/user.js.map +1 -1
- package/src/api-public/services/ai-robot.js.map +1 -1
- package/src/api-public/services/fb-api.js.map +1 -1
- package/src/api-public/services/financial-service.d.ts +4 -0
- package/src/api-public/services/financial-service.js +48 -23
- package/src/api-public/services/financial-service.js.map +1 -1
- package/src/api-public/services/financial-service.ts +57 -26
- package/src/api-public/services/public-table-check.js.map +1 -1
- package/src/api-public/services/shopping.js +7 -0
- package/src/api-public/services/shopping.js.map +1 -1
- package/src/api-public/services/shopping.ts +9 -0
- package/src/api-public/services/user.d.ts +2 -2
- package/src/api-public/services/user.js +8 -2
- package/src/api-public/services/user.js.map +1 -1
- package/src/api-public/services/user.ts +8 -2
- package/src/index.js +3 -3
- package/src/index.js.map +1 -1
|
@@ -11,6 +11,7 @@ import { ApiUser } from "../glitter-base/route/user.js";
|
|
|
11
11
|
import { Chat } from "../glitter-base/route/chat.js";
|
|
12
12
|
import { imageLibrary } from "../modules/image-library.js";
|
|
13
13
|
import { ShareDialog } from "../glitterBundle/dialog/ShareDialog.js";
|
|
14
|
+
import { Animation } from "../glitterBundle/module/Animation.js";
|
|
14
15
|
export class CustomerMessageUser {
|
|
15
16
|
static showCustomerMessage(cf) {
|
|
16
17
|
const gvc = cf.gvc;
|
|
@@ -21,6 +22,9 @@ export class CustomerMessageUser {
|
|
|
21
22
|
let vm = {
|
|
22
23
|
viewType: cf.viewType || 'robot',
|
|
23
24
|
};
|
|
25
|
+
if (gvc.glitter.getUrlParameter('page').startsWith('products/') && document.body.clientWidth < 800) {
|
|
26
|
+
return ``;
|
|
27
|
+
}
|
|
24
28
|
return gvc.bindView(() => {
|
|
25
29
|
const id = gvc.glitter.getUUID();
|
|
26
30
|
return {
|
|
@@ -753,6 +757,495 @@ export class CustomerMessageUser {
|
|
|
753
757
|
};
|
|
754
758
|
});
|
|
755
759
|
}
|
|
760
|
+
static mobileChat(cf) {
|
|
761
|
+
const gvc = cf.gvc;
|
|
762
|
+
const css = String.raw;
|
|
763
|
+
const viewId = gvc.glitter.getUUID();
|
|
764
|
+
let chatRoomInf = {};
|
|
765
|
+
document.body.style.setProperty('overflow-y', 'hidden', 'important');
|
|
766
|
+
gvc.glitter.innerDialog((gvc) => {
|
|
767
|
+
return gvc.bindView(() => {
|
|
768
|
+
const id = gvc.glitter.getUUID();
|
|
769
|
+
return {
|
|
770
|
+
bind: id,
|
|
771
|
+
view: () => {
|
|
772
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
773
|
+
const config = (yield ApiUser.getPublicConfig(`message_setting`, 'manager')).response.value || {
|
|
774
|
+
color: '#FE5541',
|
|
775
|
+
head: 'https://liondesign-prd.s3.amazonaws.com/file/252530754/1695093945424-Frame 62 (1).png',
|
|
776
|
+
name: '萊恩設計',
|
|
777
|
+
};
|
|
778
|
+
CustomerMessageUser.config = config;
|
|
779
|
+
gvc.addStyle(css `
|
|
780
|
+
.btn-white-primary {
|
|
781
|
+
border: 2px solid ${CustomerMessageUser.config.color};
|
|
782
|
+
justify-content: space-between;
|
|
783
|
+
align-items: center;
|
|
784
|
+
cursor: pointer;
|
|
785
|
+
color: ${CustomerMessageUser.config.color};
|
|
786
|
+
gap: 10px;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
.btn-white-primary:hover {
|
|
790
|
+
background: ${CustomerMessageUser.config.color};
|
|
791
|
+
color: white !important;
|
|
792
|
+
}
|
|
793
|
+
`);
|
|
794
|
+
resolve([
|
|
795
|
+
gvc.bindView(() => {
|
|
796
|
+
const id = gvc.glitter.getUUID();
|
|
797
|
+
return {
|
|
798
|
+
bind: id,
|
|
799
|
+
view: () => {
|
|
800
|
+
if (cf.hideBar) {
|
|
801
|
+
return ``;
|
|
802
|
+
}
|
|
803
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
804
|
+
const chatRoom = (yield Chat.getChatRoom({
|
|
805
|
+
page: 0,
|
|
806
|
+
limit: 1000,
|
|
807
|
+
user_id: cf.user_id,
|
|
808
|
+
chat_id: cf.chat.chat_id,
|
|
809
|
+
})).response.data[0];
|
|
810
|
+
if (chatRoom.who === 'manager') {
|
|
811
|
+
chatRoom.user_data = CustomerMessageUser.config;
|
|
812
|
+
}
|
|
813
|
+
if (chatRoom.who.startsWith('line')) {
|
|
814
|
+
chatRoom.user_data.head = chatRoom.info.line.head;
|
|
815
|
+
chatRoom.user_data.name = chatRoom.info.line.name;
|
|
816
|
+
chatRoomInf = chatRoom;
|
|
817
|
+
gvc.notifyDataChange(viewId);
|
|
818
|
+
}
|
|
819
|
+
if (chatRoom.who.startsWith('fb')) {
|
|
820
|
+
chatRoom.user_data.head = chatRoom.info.fb.head;
|
|
821
|
+
chatRoom.user_data.name = chatRoom.info.fb.name;
|
|
822
|
+
chatRoomInf = chatRoom;
|
|
823
|
+
gvc.notifyDataChange(viewId);
|
|
824
|
+
}
|
|
825
|
+
resolve(`<div class="navbar d-flex align-items-center justify-content-between w-100 p-3 ${CustomerMessageUser.config.hideBar ? `d-none` : ``}" style="background: ${CustomerMessageUser.config.color};">
|
|
826
|
+
<div class="d-flex align-items-center pe-3 w-100" style="gap:10px;display: flex;align-items: center;">
|
|
827
|
+
<i class="fa-solid fa-chevron-left fs-6" style="color:white;cursor: pointer;" onclick="${gvc.event(() => {
|
|
828
|
+
document.body.style.removeProperty('overflow-y');
|
|
829
|
+
gvc.closeDialog();
|
|
830
|
+
})}"></i>
|
|
831
|
+
<img src="${chatRoom.type === 'user'
|
|
832
|
+
? (chatRoom.user_data && chatRoom.user_data.head) || chatRoom.user_data.head_img || 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/1704269678588-43.png'
|
|
833
|
+
: `https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/1704269678588-43.png`}" class="rounded-circle border" style="background: white;border-radius: 50%;width: 40px;height: 40px;" width="40" alt="Albert Flores">
|
|
834
|
+
<h6 class="mb-0 px-1 text-white">${chatRoom.type === 'user' ? (chatRoom.user_data && chatRoom.user_data.name) || '訪客' : `群組`}</h6>
|
|
835
|
+
<div class="flex-fill" style="flex: 1;"></div>
|
|
836
|
+
<i class="fa-regular fa-circle-xmark text-white fs-3 " onclick="${gvc.event(() => {
|
|
837
|
+
document.body.style.removeProperty('overflow-y');
|
|
838
|
+
gvc.closeDialog();
|
|
839
|
+
})}"></i>
|
|
840
|
+
</div>
|
|
841
|
+
</div>`);
|
|
842
|
+
}));
|
|
843
|
+
},
|
|
844
|
+
};
|
|
845
|
+
}),
|
|
846
|
+
gvc.bindView(() => {
|
|
847
|
+
const messageID = gvc.glitter.getUUID();
|
|
848
|
+
const vm = {
|
|
849
|
+
data: [],
|
|
850
|
+
loading: true,
|
|
851
|
+
scrollToBtn: false,
|
|
852
|
+
lastScroll: -1,
|
|
853
|
+
message: '',
|
|
854
|
+
prefixScroll: 0,
|
|
855
|
+
last_read: {},
|
|
856
|
+
close: false,
|
|
857
|
+
};
|
|
858
|
+
Chat.getMessage({
|
|
859
|
+
page: 0,
|
|
860
|
+
limit: 50,
|
|
861
|
+
chat_id: cf.chat.chat_id,
|
|
862
|
+
user_id: cf.user_id,
|
|
863
|
+
}).then((res) => {
|
|
864
|
+
vm.data = res.response.data.reverse();
|
|
865
|
+
vm.last_read = res.response.lastRead;
|
|
866
|
+
vm.loading = false;
|
|
867
|
+
gvc.notifyDataChange(viewId);
|
|
868
|
+
});
|
|
869
|
+
const url = new URL(window.glitterBackend);
|
|
870
|
+
let socket = undefined;
|
|
871
|
+
function connect() {
|
|
872
|
+
if (gvc.glitter.share.close_socket) {
|
|
873
|
+
gvc.glitter.share.close_socket();
|
|
874
|
+
}
|
|
875
|
+
vm.close = false;
|
|
876
|
+
socket = location.href.includes('https://') ? new WebSocket(`wss://${url.hostname}/websocket`) : new WebSocket(`ws://${url.hostname}:9003`);
|
|
877
|
+
gvc.glitter.share.close_socket = () => {
|
|
878
|
+
vm.close = true;
|
|
879
|
+
socket.close();
|
|
880
|
+
gvc.glitter.share.close_socket = undefined;
|
|
881
|
+
};
|
|
882
|
+
gvc.glitter.share.socket = socket;
|
|
883
|
+
socket.addEventListener('open', function (event) {
|
|
884
|
+
console.log('Connected to server');
|
|
885
|
+
socket.send(JSON.stringify({
|
|
886
|
+
type: 'message',
|
|
887
|
+
chatID: cf.chat.chat_id,
|
|
888
|
+
user_id: cf.user_id,
|
|
889
|
+
app_name: window.appName
|
|
890
|
+
}));
|
|
891
|
+
});
|
|
892
|
+
let interVal = 0;
|
|
893
|
+
socket.addEventListener('message', function (event) {
|
|
894
|
+
const data = JSON.parse(event.data);
|
|
895
|
+
console.log(`message_in`, data.data);
|
|
896
|
+
if (data.type === 'update_read_count') {
|
|
897
|
+
vm.last_read = data.data;
|
|
898
|
+
}
|
|
899
|
+
else {
|
|
900
|
+
vm.data.push(data);
|
|
901
|
+
const element = document.querySelector('.chatContainer');
|
|
902
|
+
const st = element.scrollTop;
|
|
903
|
+
const ofs = element.offsetHeight;
|
|
904
|
+
const sh = element.scrollHeight;
|
|
905
|
+
for (const dd of document.querySelectorAll('.time-mute')) {
|
|
906
|
+
dd.remove();
|
|
907
|
+
}
|
|
908
|
+
document.querySelector(`#message-lines`).innerHTML += CustomerMessageUser.message_line(data, vm.data.length - 1, gvc, vm, cf, chatRoomInf);
|
|
909
|
+
if (st + ofs >= sh - 50) {
|
|
910
|
+
element.scrollTop = element.scrollHeight;
|
|
911
|
+
let clock = gvc.glitter.ut.clock();
|
|
912
|
+
const interval = setInterval(() => {
|
|
913
|
+
if (clock.stop() > 1000) {
|
|
914
|
+
clearInterval(interval);
|
|
915
|
+
}
|
|
916
|
+
element.scrollTop = element.scrollHeight;
|
|
917
|
+
}, 50);
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
console.log('Message from server:', event.data);
|
|
921
|
+
});
|
|
922
|
+
socket.addEventListener('close', function (event) {
|
|
923
|
+
console.log('Disconnected from server');
|
|
924
|
+
if (!vm.close) {
|
|
925
|
+
console.log('Reconnected from server');
|
|
926
|
+
connect();
|
|
927
|
+
}
|
|
928
|
+
});
|
|
929
|
+
}
|
|
930
|
+
connect();
|
|
931
|
+
const textAreaId = gvc.glitter.getUUID();
|
|
932
|
+
const html = String.raw;
|
|
933
|
+
return {
|
|
934
|
+
bind: viewId,
|
|
935
|
+
view: () => {
|
|
936
|
+
let imageArray = [];
|
|
937
|
+
if (vm.loading) {
|
|
938
|
+
return String.raw `<div class="d-flex align-items-center justify-content-center w-100 flex-column pt-3">
|
|
939
|
+
<div class="spinner-border" role="status">
|
|
940
|
+
<span class="sr-only"></span>
|
|
941
|
+
</div>
|
|
942
|
+
<span class="mt-2">載入中...</span>
|
|
943
|
+
</div>`;
|
|
944
|
+
}
|
|
945
|
+
return html ` ${gvc.bindView(() => {
|
|
946
|
+
return {
|
|
947
|
+
bind: messageID,
|
|
948
|
+
view: () => {
|
|
949
|
+
try {
|
|
950
|
+
return `
|
|
951
|
+
<div class="my-auto flex-fill"></div>
|
|
952
|
+
<div class="w-100" id="message-lines">
|
|
953
|
+
${vm.data
|
|
954
|
+
.map((dd, index) => {
|
|
955
|
+
return CustomerMessageUser.message_line(dd, index, gvc, vm, cf, chatRoomInf);
|
|
956
|
+
})
|
|
957
|
+
.join('')}
|
|
958
|
+
</div>
|
|
959
|
+
${vm.data.length === 0
|
|
960
|
+
? `
|
|
961
|
+
<div class="w-100 text-center no_message"><div class="badge bg-secondary">尚未展開對話,於下方輸入訊息並傳送。</div></div>
|
|
962
|
+
`
|
|
963
|
+
: ``}`;
|
|
964
|
+
}
|
|
965
|
+
catch (e) {
|
|
966
|
+
console.log(e);
|
|
967
|
+
return `${e}`;
|
|
968
|
+
}
|
|
969
|
+
},
|
|
970
|
+
divCreate: {
|
|
971
|
+
class: `chatContainer p-3 d-flex flex-column `,
|
|
972
|
+
style: `overflow-y: auto;height: calc(100% - 150px);background: white;padding-bottom:${cf.hideBar ? `80` : `0`}px !important;`,
|
|
973
|
+
},
|
|
974
|
+
onCreate: () => {
|
|
975
|
+
vm.close = false;
|
|
976
|
+
let targetElement = document.querySelector('.chatContainer');
|
|
977
|
+
if (vm.lastScroll === -1) {
|
|
978
|
+
const clock = gvc.glitter.ut.clock();
|
|
979
|
+
const interval = setInterval(() => {
|
|
980
|
+
if (clock.stop() > 1000) {
|
|
981
|
+
clearInterval(interval);
|
|
982
|
+
}
|
|
983
|
+
document.querySelector('.chatContainer').scrollTop = document.querySelector('.chatContainer').scrollHeight;
|
|
984
|
+
}, 50);
|
|
985
|
+
}
|
|
986
|
+
else {
|
|
987
|
+
if (vm.prefixScroll) {
|
|
988
|
+
vm.lastScroll = targetElement.scrollHeight - vm.prefixScroll + vm.lastScroll;
|
|
989
|
+
vm.prefixScroll = 0;
|
|
990
|
+
}
|
|
991
|
+
document.querySelector('.chatContainer').scrollTop = vm.lastScroll;
|
|
992
|
+
}
|
|
993
|
+
targetElement.addEventListener('scroll', () => {
|
|
994
|
+
vm.lastScroll = targetElement.scrollTop;
|
|
995
|
+
if (targetElement.scrollTop === 0) {
|
|
996
|
+
if (vm.loading) {
|
|
997
|
+
return;
|
|
998
|
+
}
|
|
999
|
+
vm.loading = true;
|
|
1000
|
+
Chat.getMessage({
|
|
1001
|
+
page: 0,
|
|
1002
|
+
limit: 50,
|
|
1003
|
+
chat_id: cf.chat.chat_id,
|
|
1004
|
+
olderID: vm.data[0].id,
|
|
1005
|
+
user_id: cf.user_id,
|
|
1006
|
+
}).then((res) => {
|
|
1007
|
+
vm.loading = false;
|
|
1008
|
+
vm.prefixScroll = targetElement.scrollHeight;
|
|
1009
|
+
vm.data = res.response.data.reverse().concat(vm.data);
|
|
1010
|
+
gvc.notifyDataChange(viewId);
|
|
1011
|
+
});
|
|
1012
|
+
}
|
|
1013
|
+
});
|
|
1014
|
+
},
|
|
1015
|
+
};
|
|
1016
|
+
})}
|
|
1017
|
+
${gvc.bindView({
|
|
1018
|
+
bind: "inputRow",
|
|
1019
|
+
view: () => {
|
|
1020
|
+
return html `
|
|
1021
|
+
${gvc.bindView({
|
|
1022
|
+
bind: 'imageBox',
|
|
1023
|
+
view: () => {
|
|
1024
|
+
if (imageArray.length == 0) {
|
|
1025
|
+
return ``;
|
|
1026
|
+
}
|
|
1027
|
+
else {
|
|
1028
|
+
return html `
|
|
1029
|
+
<div class="d-flex align-items-center w-100"
|
|
1030
|
+
style="overflow-x: scroll;gap: 5px;padding:10px 0;margin-bottom:10px;">
|
|
1031
|
+
${(() => {
|
|
1032
|
+
return imageArray.map((url, index) => {
|
|
1033
|
+
return html `
|
|
1034
|
+
<div class=""
|
|
1035
|
+
style="position: relative;flex-shrink: 0;width: 25%;aspect-ratio: 1 / 1;background:50%/cover url('${url}')">
|
|
1036
|
+
<i class="fa-sharp fa-regular fa-circle-xmark bg-white"
|
|
1037
|
+
style="position: absolute;right: -6px;top: -6px;cursor:pointer;font-size: 20px" onclick="${gvc.event(() => {
|
|
1038
|
+
imageArray.splice(index, 1);
|
|
1039
|
+
gvc.notifyDataChange('imageBox');
|
|
1040
|
+
})}"></i>
|
|
1041
|
+
</div>
|
|
1042
|
+
`;
|
|
1043
|
+
});
|
|
1044
|
+
})()}
|
|
1045
|
+
|
|
1046
|
+
</div>
|
|
1047
|
+
`;
|
|
1048
|
+
}
|
|
1049
|
+
}, divCreate: {
|
|
1050
|
+
class: `d-flex w-100`,
|
|
1051
|
+
style: ``
|
|
1052
|
+
}
|
|
1053
|
+
})}
|
|
1054
|
+
<div class="d-flex w-100">
|
|
1055
|
+
<div class="d-flex align-items-center">
|
|
1056
|
+
<button
|
|
1057
|
+
type="button"
|
|
1058
|
+
class="btn btn-icon d-sm-inline-flex text-white"
|
|
1059
|
+
style="height: 36px;"
|
|
1060
|
+
onclick="${gvc.event(() => {
|
|
1061
|
+
const queryParams = new URLSearchParams(window.location.search);
|
|
1062
|
+
if (queryParams.get('function') != "backend-manger") {
|
|
1063
|
+
gvc.glitter.ut.chooseMediaCallback({
|
|
1064
|
+
single: true,
|
|
1065
|
+
accept: 'json,image/*',
|
|
1066
|
+
callback(data) {
|
|
1067
|
+
const saasConfig = window.saasConfig;
|
|
1068
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
1069
|
+
dialog.dataLoading({ visible: true });
|
|
1070
|
+
const file = data[0].file;
|
|
1071
|
+
saasConfig.api.uploadFile(file.name).then((data) => {
|
|
1072
|
+
dialog.dataLoading({ visible: false });
|
|
1073
|
+
const data1 = data.response;
|
|
1074
|
+
dialog.dataLoading({ visible: true });
|
|
1075
|
+
const objP = {
|
|
1076
|
+
url: data1.url,
|
|
1077
|
+
type: 'put',
|
|
1078
|
+
data: file,
|
|
1079
|
+
headers: {
|
|
1080
|
+
"Content-Type": data1.type
|
|
1081
|
+
},
|
|
1082
|
+
processData: false,
|
|
1083
|
+
crossDomain: true,
|
|
1084
|
+
success: () => {
|
|
1085
|
+
dialog.dataLoading({ visible: false });
|
|
1086
|
+
imageArray.push(data1.fullUrl);
|
|
1087
|
+
gvc.notifyDataChange(`inputRow`);
|
|
1088
|
+
},
|
|
1089
|
+
error: () => {
|
|
1090
|
+
dialog.dataLoading({ visible: false });
|
|
1091
|
+
dialog.errorMessage({ text: '上傳失敗' });
|
|
1092
|
+
},
|
|
1093
|
+
};
|
|
1094
|
+
if (file.type.indexOf('svg') !== -1) {
|
|
1095
|
+
objP["headers"] = {
|
|
1096
|
+
"Content-Type": file.type
|
|
1097
|
+
};
|
|
1098
|
+
}
|
|
1099
|
+
$.ajax(objP);
|
|
1100
|
+
});
|
|
1101
|
+
},
|
|
1102
|
+
});
|
|
1103
|
+
}
|
|
1104
|
+
else {
|
|
1105
|
+
imageLibrary.selectImageLibrary(gvc, (urlArray) => {
|
|
1106
|
+
imageArray.push(...urlArray.map((data) => {
|
|
1107
|
+
return data.data;
|
|
1108
|
+
}));
|
|
1109
|
+
gvc.notifyDataChange(`inputRow`);
|
|
1110
|
+
}, `<div class="d-flex flex-column" style="border-radius: 10px 10px 0px 0px;background: #F2F2F2;">圖片庫</div>`, { mul: true });
|
|
1111
|
+
}
|
|
1112
|
+
})}"
|
|
1113
|
+
>
|
|
1114
|
+
<i class="fa-sharp fa-solid fa-image"
|
|
1115
|
+
style="font-size: 23px;color: #393939;"></i>
|
|
1116
|
+
</button>
|
|
1117
|
+
</div>
|
|
1118
|
+
|
|
1119
|
+
<div class="position-relative w-100 me-2 ms-1 d-flex flex-column"
|
|
1120
|
+
style="">
|
|
1121
|
+
${gvc.bindView(() => {
|
|
1122
|
+
return {
|
|
1123
|
+
bind: textAreaId,
|
|
1124
|
+
view: () => {
|
|
1125
|
+
var _a;
|
|
1126
|
+
return (_a = vm.message) !== null && _a !== void 0 ? _a : '';
|
|
1127
|
+
},
|
|
1128
|
+
divCreate: {
|
|
1129
|
+
elem: `textArea`,
|
|
1130
|
+
style: `max-height:100px;white-space: pre-wrap; word-wrap: break-word;height:40px;min-height:auto;height:45px;`,
|
|
1131
|
+
class: `form-control`,
|
|
1132
|
+
option: [
|
|
1133
|
+
{ key: 'placeholder', value: '輸入訊息內容' },
|
|
1134
|
+
{
|
|
1135
|
+
key: 'onchange',
|
|
1136
|
+
value: gvc.event((e) => {
|
|
1137
|
+
vm.message = e.value;
|
|
1138
|
+
}),
|
|
1139
|
+
},
|
|
1140
|
+
],
|
|
1141
|
+
},
|
|
1142
|
+
onCreate: () => {
|
|
1143
|
+
const input = gvc.getBindViewElem(id).get(0);
|
|
1144
|
+
input.addEventListener('input', function () {
|
|
1145
|
+
console.log(`input.scrollHeight->`, input.scrollHeight);
|
|
1146
|
+
input.style.height = 'auto';
|
|
1147
|
+
input.style.height = input.scrollHeight + 'px';
|
|
1148
|
+
});
|
|
1149
|
+
},
|
|
1150
|
+
};
|
|
1151
|
+
})}
|
|
1152
|
+
</div>
|
|
1153
|
+
<div class="d-flex align-items-end h-100">
|
|
1154
|
+
<button
|
|
1155
|
+
type="button"
|
|
1156
|
+
class="btn btn-icon btn-lg d-sm-inline-flex ms-1 text-white"
|
|
1157
|
+
style="background: ${CustomerMessageUser.config.color};height:45px;"
|
|
1158
|
+
onclick="${gvc.event(() => {
|
|
1159
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
1160
|
+
if (!imageArray.length && !vm.message) {
|
|
1161
|
+
dialog.errorMessage({ text: '請輸入訊息' });
|
|
1162
|
+
return;
|
|
1163
|
+
}
|
|
1164
|
+
dialog.dataLoading({
|
|
1165
|
+
visible: true
|
|
1166
|
+
});
|
|
1167
|
+
if (imageArray.length) {
|
|
1168
|
+
dialog.dataLoading({
|
|
1169
|
+
visible: true
|
|
1170
|
+
});
|
|
1171
|
+
for (const image of imageArray) {
|
|
1172
|
+
Chat.postMessage({
|
|
1173
|
+
chat_id: cf.chat.chat_id,
|
|
1174
|
+
user_id: cf.user_id,
|
|
1175
|
+
message: {
|
|
1176
|
+
image: image,
|
|
1177
|
+
attachment: '',
|
|
1178
|
+
},
|
|
1179
|
+
}).then((res) => {
|
|
1180
|
+
imageArray = [];
|
|
1181
|
+
gvc.notifyDataChange('imageBox');
|
|
1182
|
+
dialog.dataLoading({
|
|
1183
|
+
visible: false
|
|
1184
|
+
});
|
|
1185
|
+
});
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
if (vm.message) {
|
|
1189
|
+
dialog.dataLoading({
|
|
1190
|
+
visible: true
|
|
1191
|
+
});
|
|
1192
|
+
Chat.postMessage({
|
|
1193
|
+
chat_id: cf.chat.chat_id,
|
|
1194
|
+
user_id: cf.user_id,
|
|
1195
|
+
message: {
|
|
1196
|
+
text: vm.message,
|
|
1197
|
+
attachment: '',
|
|
1198
|
+
},
|
|
1199
|
+
}).then((res) => {
|
|
1200
|
+
vm.message = '';
|
|
1201
|
+
console.log(res);
|
|
1202
|
+
dialog.dataLoading({
|
|
1203
|
+
visible: false
|
|
1204
|
+
});
|
|
1205
|
+
});
|
|
1206
|
+
const textArea = gvc.getBindViewElem(textAreaId).get(0);
|
|
1207
|
+
textArea.value = '';
|
|
1208
|
+
vm.message = '';
|
|
1209
|
+
}
|
|
1210
|
+
document.querySelector('.no_message').remove();
|
|
1211
|
+
})}"
|
|
1212
|
+
>
|
|
1213
|
+
<i class="fa-regular fa-paper-plane-top"></i>
|
|
1214
|
+
</button>
|
|
1215
|
+
</div>
|
|
1216
|
+
</div>
|
|
1217
|
+
|
|
1218
|
+
|
|
1219
|
+
`;
|
|
1220
|
+
}, divCreate: {
|
|
1221
|
+
class: `card-footer border-top d-flex flex-column align-items-center w-100 border-0 pt-3 pb-3 pe-4 ps-3 position-fixed bottom-0 position-sm-absolute`,
|
|
1222
|
+
style: `background: white;min-height:45px;`
|
|
1223
|
+
}
|
|
1224
|
+
})}`;
|
|
1225
|
+
},
|
|
1226
|
+
divCreate: {
|
|
1227
|
+
class: `h-100`
|
|
1228
|
+
},
|
|
1229
|
+
onCreate: () => {
|
|
1230
|
+
},
|
|
1231
|
+
onDestroy: () => {
|
|
1232
|
+
vm.close = true;
|
|
1233
|
+
socket.close();
|
|
1234
|
+
},
|
|
1235
|
+
};
|
|
1236
|
+
}),
|
|
1237
|
+
].join(''));
|
|
1238
|
+
}));
|
|
1239
|
+
},
|
|
1240
|
+
divCreate: {
|
|
1241
|
+
class: `h-100 bg-white w-100`
|
|
1242
|
+
}
|
|
1243
|
+
};
|
|
1244
|
+
});
|
|
1245
|
+
}, 'CustomerMessageUser', {
|
|
1246
|
+
animation: Animation.fade
|
|
1247
|
+
});
|
|
1248
|
+
}
|
|
756
1249
|
static robotMessage(gvc, goToChat) {
|
|
757
1250
|
const html = String.raw;
|
|
758
1251
|
return gvc.bindView(() => {
|
|
@@ -832,17 +1325,19 @@ export class CustomerMessageUser {
|
|
|
832
1325
|
var _a, _b;
|
|
833
1326
|
const html = String.raw;
|
|
834
1327
|
function drawChatContent() {
|
|
835
|
-
|
|
836
|
-
|
|
1328
|
+
return `<span style="white-space: normal;word-break: break-all;">${(() => {
|
|
1329
|
+
if (dd.message.image) {
|
|
1330
|
+
return html `<img style="cursor: pointer;"
|
|
837
1331
|
src="${dd.message.image}"
|
|
838
1332
|
alt="image"
|
|
839
1333
|
onclick="${gvc.event(() => {
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
1334
|
+
gvc.glitter.openDiaLog(new URL('./dialog/image-preview.js', gvc.glitter.root_path).href, 'preview', dd.message.image);
|
|
1335
|
+
})}">`;
|
|
1336
|
+
}
|
|
1337
|
+
else {
|
|
1338
|
+
return dd.message.text.replace(/\n/g, '<br>');
|
|
1339
|
+
}
|
|
1340
|
+
})()}</span>`;
|
|
846
1341
|
}
|
|
847
1342
|
dd.message.text = dd.message.text || "";
|
|
848
1343
|
if (dd.user_id == 'manager') {
|