fmode-ng 0.0.41 → 0.0.43
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/LICENSE.md +8 -0
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/agent.prompt.mjs +10 -122
- package/esm2022/lib/aigc/agent/index.mjs +10 -2
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -97
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -104
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -111
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -166
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -36
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -141
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -92
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -207
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -236
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +10 -137
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -69
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -269
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -94
- package/esm2022/lib/aigc/index.mjs +10 -13
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +8 -736
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -181
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -229
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -2
- package/esm2022/lib/aigc/voice/audio.player.mjs +10 -52
- package/esm2022/lib/aigc/voice/class-asr.mjs +8 -79
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +8 -501
- package/esm2022/lib/aigc/voice/index.mjs +10 -3
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/stream.player.mjs +10 -0
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +8 -233
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -190
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -110
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -98
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -100
- package/esm2022/lib/nova-cloud/index.mjs +10 -2
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -148
- package/esm2022/lib/platform/cross.service.mjs +10 -63
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -236
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -130
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -462
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/storage.module.mjs +10 -41
- package/esm2022/lib/user/account/account.service.mjs +10 -221
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -62
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -373
- package/esm2022/lib/user/login/login.component.mjs +10 -913
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -273
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -115
- package/esm2022/lib/user/profile/profile.module.mjs +10 -57
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -106
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -13
- package/fesm2022/fmode-ng.mjs +7 -8895
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/voice/fmode-voice.service.d.ts +18 -1
- package/lib/aigc/voice/stream.player.d.ts +10 -0
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,137 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import * as i2 from "../../service-fmai/service-chat";
|
|
12
|
-
import * as i3 from "@angular/common";
|
|
13
|
-
export class ChatPanelComponent {
|
|
14
|
-
constructor(route, router, chatServ) {
|
|
15
|
-
this.route = route;
|
|
16
|
-
this.router = router;
|
|
17
|
-
this.chatServ = chatServ;
|
|
18
|
-
this.isDirect = false;
|
|
19
|
-
this.showInputModal = true;
|
|
20
|
-
this.showMessageArea = true;
|
|
21
|
-
this.showHeaderArea = true;
|
|
22
|
-
if (window.location.pathname?.indexOf("chat/session") > -1) {
|
|
23
|
-
document.body.classList.add('dark');
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
listenDivChange() {
|
|
27
|
-
// 创建 MutationObserver 实例
|
|
28
|
-
let observer = new MutationObserver(() => {
|
|
29
|
-
this.scrollToBottom(this.contentComp);
|
|
30
|
-
});
|
|
31
|
-
// 配置观察选项
|
|
32
|
-
let config = { childList: true, subtree: true, attributes: true };
|
|
33
|
-
// 开始观察
|
|
34
|
-
if (this.contentComp?.nativeElement) {
|
|
35
|
-
observer.observe(this.contentComp?.nativeElement, config);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
scrollToBottom(comp) {
|
|
39
|
-
if (comp?.nativeElement?.scrollHeight) {
|
|
40
|
-
comp.nativeElement.scrollTop = comp.nativeElement.scrollHeight;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
ngAfterViewInit() {
|
|
44
|
-
}
|
|
45
|
-
ngOnInit() {
|
|
46
|
-
// 同步路由参数优先级:组件属性传参 > 路由传参
|
|
47
|
-
combineLatest([this.route.params, this.route.queryParams]).subscribe(async (data) => {
|
|
48
|
-
let params = data[0];
|
|
49
|
-
let queryParams = data[1];
|
|
50
|
-
console.log("params", data);
|
|
51
|
-
// 会话入口,加载历史消息
|
|
52
|
-
this.chatId = params?.chatId || this.chatId || null;
|
|
53
|
-
if (this.chatId) { // 存在ID,则加载历史Session
|
|
54
|
-
await this.chatServ.initChatMap(this.chatId);
|
|
55
|
-
}
|
|
56
|
-
// 角色入口,加载角色设置
|
|
57
|
-
this.roleId = params?.roleId || this.roleId || null;
|
|
58
|
-
if (this.roleId) { // 存在ID,则加载历史Session
|
|
59
|
-
let chat = await this.chatServ.createNewRoleChat(this.roleId);
|
|
60
|
-
this.fmodeChat = chat;
|
|
61
|
-
// console.log(chat)
|
|
62
|
-
}
|
|
63
|
-
// 加载Chat类
|
|
64
|
-
if (this.chatId) {
|
|
65
|
-
this.fmodeChat = this.chatServ.chatMap[this.chatId];
|
|
66
|
-
if (!this.fmodeChat) { // 不存在ID,则跳出面具选择
|
|
67
|
-
this.router.navigate(['/chat/pro/mask'], { queryParams: { type: "employee" } });
|
|
68
|
-
}
|
|
69
|
-
this.fmodeChat = this.chatServ.chatMap[this.chatId];
|
|
70
|
-
}
|
|
71
|
-
if (this.leftButtons) {
|
|
72
|
-
this.fmodeChat.leftButtons = this.leftButtons;
|
|
73
|
-
}
|
|
74
|
-
if (window.location.pathname?.indexOf("chat/session") > -1) {
|
|
75
|
-
this.fmodeChat.isVoiceInputMode = true;
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
this.fmodeChat.isVoiceInputMode = false;
|
|
79
|
-
}
|
|
80
|
-
if (this.modelList) {
|
|
81
|
-
this.chatServ.modelList = this.modelList;
|
|
82
|
-
this.chatServ.currentModel = this.modelList[0];
|
|
83
|
-
}
|
|
84
|
-
if (this.isDirect) {
|
|
85
|
-
this.fmodeChat.isDirect = this.isDirect;
|
|
86
|
-
}
|
|
87
|
-
setTimeout(() => {
|
|
88
|
-
this.listenDivChange();
|
|
89
|
-
}, 1000);
|
|
90
|
-
this.sayWelcome();
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
sayWelcome() {
|
|
94
|
-
if (this.fmodeChat.voiceConfig?.welcome?.enabled) {
|
|
95
|
-
console.log("sayWelcome");
|
|
96
|
-
this.fmodeChat.welcome();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
loadMask() {
|
|
100
|
-
}
|
|
101
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatPanelComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ChatService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
102
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ChatPanelComponent, isStandalone: true, selector: "app-chat-panel", inputs: { chatId: "chatId", maskId: "maskId", roleId: "roleId", leftButtons: "leftButtons", modelList: "modelList", isDirect: "isDirect", showInputModal: "showInputModal", showMessageArea: "showMessageArea", showHeaderArea: "showHeaderArea" }, viewQueries: [{ propertyName: "contentComp", first: true, predicate: ["contentComp"], descendants: true }], ngImport: i0, template: "\n<!-- <ion-header></ion-header> -->\n<!-- <ion-content class=\"ion-padding\"> -->\n <div class=\"chat-page\" *ngIf=\"fmodeChat\">\n <div class=\"header\" [class.avatarHeader]=\"fmodeChat?.isAvatarShow\">\n <ng-content select=\"[chat-header]\"></ng-content>\n <fm-chat-header-area *ngIf=\"showHeaderArea\" [chat]=\"fmodeChat\"></fm-chat-header-area>\n </div>\n \n <div class=\"content\" #contentComp>\n <ng-content select=\"[chat-content]\"></ng-content>\n <fm-chat-message-area *ngIf=\"showMessageArea\" [chat]=\"fmodeChat\"></fm-chat-message-area>\n </div>\n \n <div class=\"footer\">\n <ng-content select=\"[chat-footer]\"></ng-content>\n <fm-chat-modal-input *ngIf=\"showInputModal\" [chat]=\"fmodeChat\"></fm-chat-modal-input>\n </div>\n </div>\n\n<!-- </ion-content> -->", styles: [".chat-page{display:flex;flex-direction:column;height:100%;background:#f3f3f3}.chat-page .content,.chat-page .header,.chat-page .footer{justify-content:center;align-items:center}.chat-page .content{flex-grow:1;flex:1;overflow-y:auto}.chat-page .avatarHeader{height:35vh!important;overflow:hidden}.chat-page .header{height:44px;margin-bottom:-1px}.chat-page .footer{height:auto;min-height:130px}:host-context(body.dark) .chat-page{background:#000}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type:
|
|
103
|
-
// IonHeader,IonContent,
|
|
104
|
-
FmChatHeaderArea, selector: "fm-chat-header-area", inputs: ["chat"] }, { kind: "component", type: FmChatMesssageArea, selector: "fm-chat-message-area", inputs: ["chatId", "chat"] }, { kind: "component", type: FmChatModalInput, selector: "fm-chat-modal-input", inputs: ["chat", "message", "role"] }] }); }
|
|
105
|
-
}
|
|
106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatPanelComponent, decorators: [{
|
|
107
|
-
type: Component,
|
|
108
|
-
args: [{ selector: 'app-chat-panel', standalone: true, imports: [
|
|
109
|
-
CommonModule,
|
|
110
|
-
// IonHeader,IonContent,
|
|
111
|
-
FmChatHeaderArea,
|
|
112
|
-
FmChatMesssageArea,
|
|
113
|
-
FmChatModalInput,
|
|
114
|
-
], template: "\n<!-- <ion-header></ion-header> -->\n<!-- <ion-content class=\"ion-padding\"> -->\n <div class=\"chat-page\" *ngIf=\"fmodeChat\">\n <div class=\"header\" [class.avatarHeader]=\"fmodeChat?.isAvatarShow\">\n <ng-content select=\"[chat-header]\"></ng-content>\n <fm-chat-header-area *ngIf=\"showHeaderArea\" [chat]=\"fmodeChat\"></fm-chat-header-area>\n </div>\n \n <div class=\"content\" #contentComp>\n <ng-content select=\"[chat-content]\"></ng-content>\n <fm-chat-message-area *ngIf=\"showMessageArea\" [chat]=\"fmodeChat\"></fm-chat-message-area>\n </div>\n \n <div class=\"footer\">\n <ng-content select=\"[chat-footer]\"></ng-content>\n <fm-chat-modal-input *ngIf=\"showInputModal\" [chat]=\"fmodeChat\"></fm-chat-modal-input>\n </div>\n </div>\n\n<!-- </ion-content> -->", styles: [".chat-page{display:flex;flex-direction:column;height:100%;background:#f3f3f3}.chat-page .content,.chat-page .header,.chat-page .footer{justify-content:center;align-items:center}.chat-page .content{flex-grow:1;flex:1;overflow-y:auto}.chat-page .avatarHeader{height:35vh!important;overflow:hidden}.chat-page .header{height:44px;margin-bottom:-1px}.chat-page .footer{height:auto;min-height:130px}:host-context(body.dark) .chat-page{background:#000}\n"] }]
|
|
115
|
-
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ChatService }], propDecorators: { chatId: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}], maskId: [{
|
|
118
|
-
type: Input
|
|
119
|
-
}], roleId: [{
|
|
120
|
-
type: Input
|
|
121
|
-
}], leftButtons: [{
|
|
122
|
-
type: Input
|
|
123
|
-
}], modelList: [{
|
|
124
|
-
type: Input
|
|
125
|
-
}], isDirect: [{
|
|
126
|
-
type: Input
|
|
127
|
-
}], showInputModal: [{
|
|
128
|
-
type: Input
|
|
129
|
-
}], showMessageArea: [{
|
|
130
|
-
type: Input
|
|
131
|
-
}], showHeaderArea: [{
|
|
132
|
-
type: Input
|
|
133
|
-
}], contentComp: [{
|
|
134
|
-
type: ViewChild,
|
|
135
|
-
args: ["contentComp"]
|
|
136
|
-
}] } });
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY2hhdC9jaGF0LXBhbmVsL2NoYXQtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1wYW5lbC9jaGF0LXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQWdCdkQsTUFBTSxPQUFPLGtCQUFrQjtJQWM3QixZQUNVLEtBQW9CLEVBQ3BCLE1BQWEsRUFDYixRQUFvQjtRQUZwQixVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQU87UUFDYixhQUFRLEdBQVIsUUFBUSxDQUFZO1FBUnJCLGFBQVEsR0FBVyxLQUFLLENBQUM7UUFDekIsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFDOUIsb0JBQWUsR0FBVyxJQUFJLENBQUM7UUFD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QUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDLENBQUM7WUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBQ0QsUUFBUTtJQUVSLENBQUM7K0dBdkdVLGtCQUFrQjttR0FBbEIsa0JBQWtCLDBhQ3hCL0IsMDRCQW9CdUIsd2ZESG5CLFlBQVk7Z0JBQ1osd0JBQXdCO2dCQUN4QixnQkFBZ0Isa0ZBQ2hCLGtCQUFrQiw2RkFDbEIsZ0JBQWdCOzs0RkFHUCxrQkFBa0I7a0JBYjlCLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBR2YsSUFBSSxXQUNQO3dCQUNOLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4QixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3FCQUNqQjtrSUFHUSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFZb0IsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZtb2RlQ2hhdCB9IGZyb20gJy4uLy4uL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQnO1xuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLWZtYWkvc2VydmljZS1jaGF0JztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZtQ2hhdEhlYWRlckFyZWEgfSBmcm9tICcuLi9jaGF0LWhlYWRlci1hcmVhJztcbmltcG9ydCB7IEZtQ2hhdE1lc3NzYWdlQXJlYSB9IGZyb20gJy4uL2NoYXQtbWVzc2FnZS1hcmVhJztcbmltcG9ydCB7IEZtQ2hhdE1vZGFsSW5wdXQgfSBmcm9tICcuLi9jaGF0LW1vZGFsLWlucHV0JztcbmltcG9ydCB7IElvbkNvbnRlbnQsIElvbkhlYWRlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hhdC1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOnRydWUsXG4gIGltcG9ydHM6W1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICAvLyBJb25IZWFkZXIsSW9uQ29udGVudCxcbiAgICBGbUNoYXRIZWFkZXJBcmVhLFxuICAgIEZtQ2hhdE1lc3NzYWdlQXJlYSxcbiAgICBGbUNoYXRNb2RhbElucHV0LFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENoYXRQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgY2hhdElkOnN0cmluZ1xuICBASW5wdXQoKSBtYXNrSWQ6YW55XG4gIEBJbnB1dCgpIHJvbGVJZDpzdHJpbmdcbiAgZm1vZGVDaGF0OkZtb2RlQ2hhdFxuXG4gIC8vIOe7p+aJv+iHquWumuS5iee7hOS7tu+8jOWunueOsOimhuebluaTjeS9nOWMuuaMiemSruWPiuaooeWei+WQjeensFxuICBASW5wdXQoKSBsZWZ0QnV0dG9uczphbnlbXXx1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIG1vZGVsTGlzdDphbnlbXXx1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGlzRGlyZWN0OmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0lucHV0TW9kYWw6Ym9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dNZXNzYWdlQXJlYTpib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0hlYWRlckFyZWE6Ym9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTpBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjaGF0U2VydjpDaGF0U2VydmljZSxcbiAgKXtcbiAgICBpZih3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU/LmluZGV4T2YoXCJjaGF0L3Nlc3Npb25cIik+LTEpe1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdkYXJrJyk7XG4gICAgfVxuICB9XG5cbiAgQFZpZXdDaGlsZChcImNvbnRlbnRDb21wXCIpIGNvbnRlbnRDb21wOkVsZW1lbnRSZWZcbiAgICBsaXN0ZW5EaXZDaGFuZ2UoKXtcbiAgICAgIC8vIOWIm+W7uiBNdXRhdGlvbk9ic2VydmVyIOWunuS+i1xuICAgICAgbGV0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMuY29udGVudENvbXApO1xuICAgICAgfSk7XG4gICAgICAvLyDphY3nva7op4Llr5/pgInpoblcbiAgICAgIGxldCBjb25maWcgPSB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlczp0cnVlIH07XG4gICAgICAvLyDlvIDlp4vop4Llr59cbiAgICAgIGlmKHRoaXMuY29udGVudENvbXA/Lm5hdGl2ZUVsZW1lbnQpe1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGVudENvbXA/Lm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuICAgIHNjcm9sbFRvQm90dG9tKGNvbXA6RWxlbWVudFJlZil7XG4gICAgICBpZihjb21wPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxIZWlnaHQpe1xuICAgICAgICBjb21wLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gY29tcC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIOWQjOatpei3r+eUseWPguaVsOS8mOWFiOe6p++8mue7hOS7tuWxnuaAp+S8oOWPgiA+IOi3r+eUseS8oOWPglxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucm91dGUucGFyYW1zLHRoaXMucm91dGUucXVlcnlQYXJhbXNdKS5zdWJzY3JpYmUoYXN5bmMgZGF0YT0+e1xuICAgICAgbGV0IHBhcmFtcyA9IGRhdGFbMF1cbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IGRhdGFbMV1cbiAgICAgIGNvbnNvbGUubG9nKFwicGFyYW1zXCIsZGF0YSlcbiAgICAgIC8vIOS8muivneWFpeWPo++8jOWKoOi9veWOhuWPsua2iOaBr1xuICAgICAgdGhpcy5jaGF0SWQgPSBwYXJhbXM/LmNoYXRJZCB8fCB0aGlzLmNoYXRJZCB8fCBudWxsXG4gICAgICBpZih0aGlzLmNoYXRJZCl7IC8vIOWtmOWcqElE77yM5YiZ5Yqg6L295Y6G5Y+yU2Vzc2lvblxuICAgICAgICBhd2FpdCB0aGlzLmNoYXRTZXJ2LmluaXRDaGF0TWFwKHRoaXMuY2hhdElkKVxuICAgICAgfVxuXG4gICAgICAvLyDop5LoibLlhaXlj6PvvIzliqDovb3op5LoibLorr7nva5cbiAgICAgIHRoaXMucm9sZUlkID0gcGFyYW1zPy5yb2xlSWQgfHwgdGhpcy5yb2xlSWQgfHwgbnVsbFxuICAgICAgaWYodGhpcy5yb2xlSWQpeyAvLyDlrZjlnKhJRO+8jOWImeWKoOi9veWOhuWPslNlc3Npb25cbiAgICAgICAgbGV0IGNoYXQgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2LmNyZWF0ZU5ld1JvbGVDaGF0KHRoaXMucm9sZUlkKVxuICAgICAgICB0aGlzLmZtb2RlQ2hhdCA9IGNoYXRcbiAgICAgICAgLy8gY29uc29sZS5sb2coY2hhdClcbiAgICAgIH1cblxuICAgICAgLy8g5Yqg6L29Q2hhdOexu1xuICAgICAgaWYodGhpcy5jaGF0SWQpe1xuICAgICAgICB0aGlzLmZtb2RlQ2hhdCA9IHRoaXMuY2hhdFNlcnYuY2hhdE1hcFt0aGlzLmNoYXRJZF07XG4gICAgICAgIGlmKCF0aGlzLmZtb2RlQ2hhdCl7IC8vIOS4jeWtmOWcqElE77yM5YiZ6Lez5Ye66Z2i5YW36YCJ5oupXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2hhdC9wcm8vbWFzayddLHtxdWVyeVBhcmFtczp7dHlwZTpcImVtcGxveWVlXCJ9fSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZtb2RlQ2hhdCA9IHRoaXMuY2hhdFNlcnYuY2hhdE1hcFt0aGlzLmNoYXRJZF07XG4gICAgICB9XG5cbiAgICAgIGlmKHRoaXMubGVmdEJ1dHRvbnMpe1xuICAgICAgICB0aGlzLmZtb2RlQ2hhdC5sZWZ0QnV0dG9ucyA9IHRoaXMubGVmdEJ1dHRvbnNcbiAgICAgIH1cbiAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZT8uaW5kZXhPZihcImNoYXQvc2Vzc2lvblwiKT4tMSl7XG4gICAgICAgIHRoaXMuZm1vZGVDaGF0LmlzVm9pY2VJbnB1dE1vZGUgPSB0cnVlO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuZm1vZGVDaGF0LmlzVm9pY2VJbnB1dE1vZGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMubW9kZWxMaXN0KXtcbiAgICAgICAgdGhpcy5jaGF0U2Vydi5tb2RlbExpc3QgPSB0aGlzLm1vZGVsTGlzdFxuICAgICAgICB0aGlzLmNoYXRTZXJ2LmN1cnJlbnRNb2RlbCA9IHRoaXMubW9kZWxMaXN0WzBdXG4gICAgICB9XG4gICAgICBpZih0aGlzLmlzRGlyZWN0KXtcbiAgICAgICAgdGhpcy5mbW9kZUNoYXQuaXNEaXJlY3QgPSB0aGlzLmlzRGlyZWN0XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5saXN0ZW5EaXZDaGFuZ2UoKVxuICAgICAgfSwgMTAwMCk7XG4gICAgICB0aGlzLnNheVdlbGNvbWUoKVxuICAgIH0pXG4gIH1cbiAgc2F5V2VsY29tZSgpe1xuICAgIGlmKHRoaXMuZm1vZGVDaGF0LnZvaWNlQ29uZmlnPy53ZWxjb21lPy5lbmFibGVkKXtcbiAgICAgIGNvbnNvbGUubG9nKFwic2F5V2VsY29tZVwiKVxuICAgICAgdGhpcy5mbW9kZUNoYXQud2VsY29tZSgpXG4gICAgfVxuICB9XG4gIGxvYWRNYXNrKCl7XG5cbiAgfVxufVxuIiwiXG48IS0tIDxpb24taGVhZGVyPjwvaW9uLWhlYWRlcj4gLS0+XG48IS0tIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjaGF0LXBhZ2VcIiAqbmdJZj1cImZtb2RlQ2hhdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCIgW2NsYXNzLmF2YXRhckhlYWRlcl09XCJmbW9kZUNoYXQ/LmlzQXZhdGFyU2hvd1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NoYXQtaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxmbS1jaGF0LWhlYWRlci1hcmVhICpuZ0lmPVwic2hvd0hlYWRlckFyZWFcIiBbY2hhdF09XCJmbW9kZUNoYXRcIj48L2ZtLWNoYXQtaGVhZGVyLWFyZWE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIiAjY29udGVudENvbXA+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2hhdC1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxmbS1jaGF0LW1lc3NhZ2UtYXJlYSAqbmdJZj1cInNob3dNZXNzYWdlQXJlYVwiIFtjaGF0XT1cImZtb2RlQ2hhdFwiPjwvZm0tY2hhdC1tZXNzYWdlLWFyZWE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NoYXQtZm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxmbS1jaGF0LW1vZGFsLWlucHV0ICpuZ0lmPVwic2hvd0lucHV0TW9kYWxcIiBbY2hhdF09XCJmbW9kZUNoYXRcIj48L2ZtLWNoYXQtbW9kYWwtaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG48IS0tIDwvaW9uLWNvbnRlbnQ+IC0tPiJdfQ==
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{CommonModule}from"@angular/common";import{Component,ElementRef,Input,ViewChild}from"@angular/core";import{ActivatedRoute,Router}from"@angular/router";import{ChatService}from"../../service-fmai/service-chat";import{combineLatest}from"rxjs";import{FmChatHeaderArea}from"../chat-header-area";import{FmChatMesssageArea}from"../chat-message-area";import{FmChatModalInput}from"../chat-modal-input";import*as i0 from"@angular/core";import*as i1 from"@angular/router";import*as i2 from"../../service-fmai/service-chat";import*as i3 from"@angular/common";export class ChatPanelComponent{constructor(t,e,a){this.route=t,this.router=e,this.chatServ=a,this.isDirect=!1,this.showInputModal=!0,this.showMessageArea=!0,this.showHeaderArea=!0,window.location.pathname?.indexOf("chat/session")>-1&&document.body.classList.add("dark")}listenDivChange(){let t=new MutationObserver((()=>{this.scrollToBottom(this.contentComp)})),e={childList:!0,subtree:!0,attributes:!0};this.contentComp?.nativeElement&&t.observe(this.contentComp?.nativeElement,e)}scrollToBottom(t){t?.nativeElement?.scrollHeight&&(t.nativeElement.scrollTop=t.nativeElement.scrollHeight)}ngAfterViewInit(){}ngOnInit(){combineLatest([this.route.params,this.route.queryParams]).subscribe((async t=>{let e=t[0];t[1];if(console.log("params",t),this.chatId=e?.chatId||this.chatId||null,this.chatId&&await this.chatServ.initChatMap(this.chatId),this.roleId=e?.roleId||this.roleId||null,this.roleId){let t=await this.chatServ.createNewRoleChat(this.roleId);this.fmodeChat=t}this.chatId&&(this.fmodeChat=this.chatServ.chatMap[this.chatId],this.fmodeChat||this.router.navigate(["/chat/pro/mask"],{queryParams:{type:"employee"}}),this.fmodeChat=this.chatServ.chatMap[this.chatId]),this.leftButtons&&(this.fmodeChat.leftButtons=this.leftButtons),window.location.pathname?.indexOf("chat/session")>-1?this.fmodeChat.isVoiceInputMode=!0:this.fmodeChat.isVoiceInputMode=!1,this.modelList&&(this.chatServ.modelList=this.modelList,this.chatServ.currentModel=this.modelList[0]),this.isDirect&&(this.fmodeChat.isDirect=this.isDirect),setTimeout((()=>{this.listenDivChange()}),1e3),this.sayWelcome()}))}sayWelcome(){this.fmodeChat.voiceConfig?.welcome?.enabled&&(console.log("sayWelcome"),this.fmodeChat.welcome())}loadMask(){}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ChatPanelComponent,deps:[{token:i1.ActivatedRoute},{token:i1.Router},{token:i2.ChatService}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:ChatPanelComponent,isStandalone:!0,selector:"app-chat-panel",inputs:{chatId:"chatId",maskId:"maskId",roleId:"roleId",leftButtons:"leftButtons",modelList:"modelList",isDirect:"isDirect",showInputModal:"showInputModal",showMessageArea:"showMessageArea",showHeaderArea:"showHeaderArea"},viewQueries:[{propertyName:"contentComp",first:!0,predicate:["contentComp"],descendants:!0}],ngImport:i0,template:'\n\x3c!-- <ion-header></ion-header> --\x3e\n\x3c!-- <ion-content class="ion-padding"> --\x3e\n <div class="chat-page" *ngIf="fmodeChat">\n <div class="header" [class.avatarHeader]="fmodeChat?.isAvatarShow">\n <ng-content select="[chat-header]"></ng-content>\n <fm-chat-header-area *ngIf="showHeaderArea" [chat]="fmodeChat"></fm-chat-header-area>\n </div>\n \n <div class="content" #contentComp>\n <ng-content select="[chat-content]"></ng-content>\n <fm-chat-message-area *ngIf="showMessageArea" [chat]="fmodeChat"></fm-chat-message-area>\n </div>\n \n <div class="footer">\n <ng-content select="[chat-footer]"></ng-content>\n <fm-chat-modal-input *ngIf="showInputModal" [chat]="fmodeChat"></fm-chat-modal-input>\n </div>\n </div>\n\n\x3c!-- </ion-content> --\x3e',styles:[".chat-page{display:flex;flex-direction:column;height:100%;background:#f3f3f3}.chat-page .content,.chat-page .header,.chat-page .footer{justify-content:center;align-items:center}.chat-page .content{flex-grow:1;flex:1;overflow-y:auto}.chat-page .avatarHeader{height:35vh!important;overflow:hidden}.chat-page .header{height:44px;margin-bottom:-1px}.chat-page .footer{height:auto;min-height:130px}:host-context(body.dark) .chat-page{background:#000}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:FmChatHeaderArea,selector:"fm-chat-header-area",inputs:["chat"]},{kind:"component",type:FmChatMesssageArea,selector:"fm-chat-message-area",inputs:["chatId","chat"]},{kind:"component",type:FmChatModalInput,selector:"fm-chat-modal-input",inputs:["chat","message","role"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ChatPanelComponent,decorators:[{type:Component,args:[{selector:"app-chat-panel",standalone:!0,imports:[CommonModule,FmChatHeaderArea,FmChatMesssageArea,FmChatModalInput],template:'\n\x3c!-- <ion-header></ion-header> --\x3e\n\x3c!-- <ion-content class="ion-padding"> --\x3e\n <div class="chat-page" *ngIf="fmodeChat">\n <div class="header" [class.avatarHeader]="fmodeChat?.isAvatarShow">\n <ng-content select="[chat-header]"></ng-content>\n <fm-chat-header-area *ngIf="showHeaderArea" [chat]="fmodeChat"></fm-chat-header-area>\n </div>\n \n <div class="content" #contentComp>\n <ng-content select="[chat-content]"></ng-content>\n <fm-chat-message-area *ngIf="showMessageArea" [chat]="fmodeChat"></fm-chat-message-area>\n </div>\n \n <div class="footer">\n <ng-content select="[chat-footer]"></ng-content>\n <fm-chat-modal-input *ngIf="showInputModal" [chat]="fmodeChat"></fm-chat-modal-input>\n </div>\n </div>\n\n\x3c!-- </ion-content> --\x3e',styles:[".chat-page{display:flex;flex-direction:column;height:100%;background:#f3f3f3}.chat-page .content,.chat-page .header,.chat-page .footer{justify-content:center;align-items:center}.chat-page .content{flex-grow:1;flex:1;overflow-y:auto}.chat-page .avatarHeader{height:35vh!important;overflow:hidden}.chat-page .header{height:44px;margin-bottom:-1px}.chat-page .footer{height:auto;min-height:130px}:host-context(body.dark) .chat-page{background:#000}\n"]}]}],ctorParameters:()=>[{type:i1.ActivatedRoute},{type:i1.Router},{type:i2.ChatService}],propDecorators:{chatId:[{type:Input}],maskId:[{type:Input}],roleId:[{type:Input}],leftButtons:[{type:Input}],modelList:[{type:Input}],isDirect:[{type:Input}],showInputModal:[{type:Input}],showMessageArea:[{type:Input}],showHeaderArea:[{type:Input}],contentComp:[{type:ViewChild,args:["contentComp"]}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1wYW5lbC9jaGF0LXBhbmVsLmNvbXBvbmVudC5tanM=`
|
|
10
|
+
|
|
@@ -1,69 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import { CrossService } from '../../../platform/cross.service';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import * as i2 from "@ionic/angular/standalone";
|
|
12
|
-
import * as i3 from "@angular/common";
|
|
13
|
-
import * as i4 from "ng-zorro-antd/icon";
|
|
14
|
-
export class CompRolePromptComponent {
|
|
15
|
-
constructor(cross, modalController) {
|
|
16
|
-
this.cross = cross;
|
|
17
|
-
this.modalController = modalController;
|
|
18
|
-
this.role = ``;
|
|
19
|
-
this.showModal = false;
|
|
20
|
-
this.cateIndex = 0;
|
|
21
|
-
this.company = "E4KpGvTEto"; // 飞码AI
|
|
22
|
-
}
|
|
23
|
-
ngOnInit() {
|
|
24
|
-
this.getChatPrompt();
|
|
25
|
-
}
|
|
26
|
-
applyPrompt(message) {
|
|
27
|
-
this.chat.userInput = message;
|
|
28
|
-
this.chat.isVoiceInputMode = false;
|
|
29
|
-
if (this.cross?.navMenuType == 'mobile') {
|
|
30
|
-
this.modalController.dismiss();
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
async getChatPrompt() {
|
|
34
|
-
let query = new Parse.Query('ChatPrompt');
|
|
35
|
-
query.notEqualTo('isDeleted', true);
|
|
36
|
-
query.equalTo('company', this.company);
|
|
37
|
-
query.equalTo('role', this.role);
|
|
38
|
-
query.include('role');
|
|
39
|
-
let promptData = await query.find();
|
|
40
|
-
this.chat.promptList = promptData;
|
|
41
|
-
this.chat.promptList.forEach(item => {
|
|
42
|
-
let cate = item.get('role').get('promptCates').filter(cate => cate.name == item.get('cate'));
|
|
43
|
-
item.img = cate[0].img;
|
|
44
|
-
});
|
|
45
|
-
console.log(this.chat.promptList);
|
|
46
|
-
}
|
|
47
|
-
checkCate(index) {
|
|
48
|
-
this.cateIndex = index;
|
|
49
|
-
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompRolePromptComponent, deps: [{ token: i1.CrossService }, { token: i2.ModalController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CompRolePromptComponent, isStandalone: true, selector: "app-comp-role-prompt", inputs: { chat: "chat", role: "role" }, providers: [
|
|
52
|
-
ModalController,
|
|
53
|
-
], ngImport: i0, template: "<ng-container *ngIf=\"chat?.messageList<4 && chat?.isPromptMessageAreaShow && !chat?.userInput\">\n <div class=\"prompt\" *ngIf=\"cross?.navMenuType!='mobile'\">\n <ng-container *ngFor=\"let content of chat?.promptList\">\n <div class=\"prompt_cate\">\n <div class=\"cate_info\">\n <div>\n <img [src]=\"content.img\" alt=\"\">\n </div>\n <div class=\"cate_name\">\n {{content.get('cate')}}\n </div>\n </div>\n <ng-container *ngFor=\"let message of content.get('messageList')\">\n <div class=\"message\" (click)=\"applyPrompt(message)\" nz-tooltip [nzTooltipTitle]=\"message\"\n nzTooltipColor=\"#108ee9\">\n {{message}}\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf=\"cross?.navMenuType=='mobile'\">\n <div class=\"prompt_mobile\">\n <ng-container *ngFor=\"let content of chat?.promptList\">\n <div class=\"prompt_cate\">\n <div class=\"cate_info\">\n <div>\n <img [src]=\"content.img\" alt=\"\">\n </div>\n <div class=\"cate_name\">\n {{content.get('cate')}}\n </div>\n </div>\n <ng-container *ngFor=\"let message of content.get('messageList');let idx = index\">\n <div *ngIf=\"idx<3\" class=\"message\" (click)=\"applyPrompt(message)\" nz-tooltip [nzTooltipTitle]=\"message\"\n nzTooltipColor=\"#108ee9\">\n {{message}}\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"view_more\" *ngIf=\"chat?.promptList?.length\">\n <button (click)=\"chat.isPromptModalOpen=true\" expand=\"block\">\u67E5\u770B\u66F4\u591A<span nz-icon nzType=\"right\" nzTheme=\"outline\"></span></button>\n </div>\n</ng-container>\n\n\n <ion-modal [isOpen]=\"chat.isPromptModalOpen\" (willDismiss)=\"chat.isPromptModalOpen=false\" [initialBreakpoint]=\"1\" [breakpoints]=\"[0, 1]\">\n <ng-template>\n <div class=\"block\">\n <ion-label>\u8BDD\u9898\u7075\u611F</ion-label>\n <div class=\"block_cate\">\n <!-- <ion-segment [(ngModel)]=\"cateIndex\">\n <ng-container *ngFor=\"let prompt of chat?.promptList;let i = index\">\n <ion-segment-button value=\"i\">\n <ion-label>{{prompt?.get(\"cate\")}}</ion-label>\n </ion-segment-button>\n </ng-container>\n </ion-segment> -->\n <ng-container *ngFor=\"let prompt of chat?.promptList;let i = index\">\n <ion-button [color]=\"i==cateIndex?'secondary':'light'\" (click)=\"checkCate(i)\">{{prompt?.get(\"cate\")}}</ion-button>\n <!-- <div [class]=\"i==cateIndex?'active_cate':''\" (click)=\"checkCate(i)\">{{prompt?.get(\"cate\")}}</div> -->\n </ng-container>\n </div>\n <div class=\"message_mobile\">\n <ng-container *ngFor=\"let message of chat?.promptList[cateIndex]?.get('messageList')\">\n <div (click)=\"applyPrompt(message)\">{{message}}</div>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </ion-modal>\n</ng-container>", styles: [":host-context(body.dark) .prompt_cate .message{background:#fff3;border:1px solid #333;box-shadow:0 2px 8px #333;color:#ffffff80}:host-context(body.dark) .cate_info{color:#fff}:host-context(body.dark) ion-modal .block h4{color:#fff!important}.prompt{color:#000;display:flex;justify-content:space-between;align-items:flex-start}.prompt .prompt_cate{flex:1;height:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-direction:column;display:flex;justify-content:center}.prompt .prompt_cate .cate_info{font-size:1.5em;font-weight:700}.prompt .prompt_cate .cate_info div img{width:58px;height:58px}.prompt .prompt_cate .cate_info .cate_name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.prompt .prompt_cate .message{padding:1em;margin:1em;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (max-width: 390.4px){.prompt .prompt_cate .message{width:100px;height:64px;padding:unset;margin:.8em;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;overflow:hidden;white-space:pre-wrap;text-overflow:ellipsis}}.prompt_mobile{color:#000;display:flex;justify-content:space-between;align-items:flex-start}.prompt_mobile .prompt_cate{flex:1;height:inherit}.prompt_mobile .prompt_cate .cate_info{display:flex;justify-content:center;align-items:center;font-size:1.2em}.prompt_mobile .prompt_cate .cate_info div img{width:48px;height:48px}.prompt_mobile .prompt_cate .cate_info .cate_name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;text-overflow:ellipsis;margin-top:2vw}.prompt_mobile .prompt_cate .message{min-height:48px;padding:0 2vw;margin:4vw 1vw;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.view_more{text-align:center;color:#999;margin:4vw 0}.view_more>button{background-color:transparent}.block{width:100%;height:80vh;padding:2vw}.block .block_cate{display:flex;justify-content:space-between}.block .message_mobile{overflow-y:auto;height:65vh;color:#000}.block .message_mobile>div{background-color:#fff;text-align:center;padding:3vw 0;margin:3vw 0;border-radius:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-modal{--height: auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i4.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] }); }
|
|
54
|
-
}
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompRolePromptComponent, decorators: [{
|
|
56
|
-
type: Component,
|
|
57
|
-
args: [{ selector: 'app-comp-role-prompt', standalone: true, imports: [
|
|
58
|
-
CommonModule, FormsModule, ReactiveFormsModule,
|
|
59
|
-
IonModal, IonButton, IonSegment, IonLabel,
|
|
60
|
-
NzIconModule
|
|
61
|
-
], providers: [
|
|
62
|
-
ModalController,
|
|
63
|
-
], template: "<ng-container *ngIf=\"chat?.messageList<4 && chat?.isPromptMessageAreaShow && !chat?.userInput\">\n <div class=\"prompt\" *ngIf=\"cross?.navMenuType!='mobile'\">\n <ng-container *ngFor=\"let content of chat?.promptList\">\n <div class=\"prompt_cate\">\n <div class=\"cate_info\">\n <div>\n <img [src]=\"content.img\" alt=\"\">\n </div>\n <div class=\"cate_name\">\n {{content.get('cate')}}\n </div>\n </div>\n <ng-container *ngFor=\"let message of content.get('messageList')\">\n <div class=\"message\" (click)=\"applyPrompt(message)\" nz-tooltip [nzTooltipTitle]=\"message\"\n nzTooltipColor=\"#108ee9\">\n {{message}}\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf=\"cross?.navMenuType=='mobile'\">\n <div class=\"prompt_mobile\">\n <ng-container *ngFor=\"let content of chat?.promptList\">\n <div class=\"prompt_cate\">\n <div class=\"cate_info\">\n <div>\n <img [src]=\"content.img\" alt=\"\">\n </div>\n <div class=\"cate_name\">\n {{content.get('cate')}}\n </div>\n </div>\n <ng-container *ngFor=\"let message of content.get('messageList');let idx = index\">\n <div *ngIf=\"idx<3\" class=\"message\" (click)=\"applyPrompt(message)\" nz-tooltip [nzTooltipTitle]=\"message\"\n nzTooltipColor=\"#108ee9\">\n {{message}}\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"view_more\" *ngIf=\"chat?.promptList?.length\">\n <button (click)=\"chat.isPromptModalOpen=true\" expand=\"block\">\u67E5\u770B\u66F4\u591A<span nz-icon nzType=\"right\" nzTheme=\"outline\"></span></button>\n </div>\n</ng-container>\n\n\n <ion-modal [isOpen]=\"chat.isPromptModalOpen\" (willDismiss)=\"chat.isPromptModalOpen=false\" [initialBreakpoint]=\"1\" [breakpoints]=\"[0, 1]\">\n <ng-template>\n <div class=\"block\">\n <ion-label>\u8BDD\u9898\u7075\u611F</ion-label>\n <div class=\"block_cate\">\n <!-- <ion-segment [(ngModel)]=\"cateIndex\">\n <ng-container *ngFor=\"let prompt of chat?.promptList;let i = index\">\n <ion-segment-button value=\"i\">\n <ion-label>{{prompt?.get(\"cate\")}}</ion-label>\n </ion-segment-button>\n </ng-container>\n </ion-segment> -->\n <ng-container *ngFor=\"let prompt of chat?.promptList;let i = index\">\n <ion-button [color]=\"i==cateIndex?'secondary':'light'\" (click)=\"checkCate(i)\">{{prompt?.get(\"cate\")}}</ion-button>\n <!-- <div [class]=\"i==cateIndex?'active_cate':''\" (click)=\"checkCate(i)\">{{prompt?.get(\"cate\")}}</div> -->\n </ng-container>\n </div>\n <div class=\"message_mobile\">\n <ng-container *ngFor=\"let message of chat?.promptList[cateIndex]?.get('messageList')\">\n <div (click)=\"applyPrompt(message)\">{{message}}</div>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </ion-modal>\n</ng-container>", styles: [":host-context(body.dark) .prompt_cate .message{background:#fff3;border:1px solid #333;box-shadow:0 2px 8px #333;color:#ffffff80}:host-context(body.dark) .cate_info{color:#fff}:host-context(body.dark) ion-modal .block h4{color:#fff!important}.prompt{color:#000;display:flex;justify-content:space-between;align-items:flex-start}.prompt .prompt_cate{flex:1;height:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-direction:column;display:flex;justify-content:center}.prompt .prompt_cate .cate_info{font-size:1.5em;font-weight:700}.prompt .prompt_cate .cate_info div img{width:58px;height:58px}.prompt .prompt_cate .cate_info .cate_name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.prompt .prompt_cate .message{padding:1em;margin:1em;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (max-width: 390.4px){.prompt .prompt_cate .message{width:100px;height:64px;padding:unset;margin:.8em;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;overflow:hidden;white-space:pre-wrap;text-overflow:ellipsis}}.prompt_mobile{color:#000;display:flex;justify-content:space-between;align-items:flex-start}.prompt_mobile .prompt_cate{flex:1;height:inherit}.prompt_mobile .prompt_cate .cate_info{display:flex;justify-content:center;align-items:center;font-size:1.2em}.prompt_mobile .prompt_cate .cate_info div img{width:48px;height:48px}.prompt_mobile .prompt_cate .cate_info .cate_name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;text-overflow:ellipsis;margin-top:2vw}.prompt_mobile .prompt_cate .message{min-height:48px;padding:0 2vw;margin:4vw 1vw;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.view_more{text-align:center;color:#999;margin:4vw 0}.view_more>button{background-color:transparent}.block{width:100%;height:80vh;padding:2vw}.block .block_cate{display:flex;justify-content:space-between}.block .message_mobile{overflow-y:auto;height:65vh;color:#000}.block .message_mobile>div{background-color:#fff;text-align:center;padding:3vw 0;margin:3vw 0;border-radius:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-modal{--height: auto}\n"] }]
|
|
64
|
-
}], ctorParameters: () => [{ type: i1.CrossService }, { type: i2.ModalController }], propDecorators: { chat: [{
|
|
65
|
-
type: Input
|
|
66
|
-
}], role: [{
|
|
67
|
-
type: Input
|
|
68
|
-
}] } });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1yb2xlLXByb21wdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY2hhdC9jb21wLXJvbGUtcHJvbXB0L2NvbXAtcm9sZS1wcm9tcHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY29tcC1yb2xlLXByb21wdC9jb21wLXJvbGUtcHJvbXB0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUM5QixPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsVUFBVSxFQUFVLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7O0FBZ0IvRCxNQUFNLE9BQU8sdUJBQXVCO0lBTWxDLFlBQ1MsS0FBbUIsRUFDbEIsZUFBZ0M7UUFEakMsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNsQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFOakMsU0FBSSxHQUFVLEVBQUUsQ0FBQTtRQUV6QixjQUFTLEdBQVcsS0FBSyxDQUFBO1FBQ3pCLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFLWixJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQSxDQUFDLE9BQU87SUFDcEMsQ0FBQztJQUVGLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDdEIsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFPO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxJQUFFLFFBQVEsRUFBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxLQUFLLENBQUMsYUFBYTtRQUNqQixJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDekMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDbkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3RDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNoQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3JCLElBQUksVUFBVSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFBLEVBQUU7WUFDakMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDNUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1FBQ3hCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxTQUFTLENBQUMsS0FBWTtRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDOytHQXZDVSx1QkFBdUI7bUdBQXZCLHVCQUF1QiwyR0FKeEI7WUFDUixlQUFlO1NBQ2hCLDBCQ3JCSCw2ckdBeUVlLHk5RUQxRFgsWUFBWSwrUEFBQyxXQUFXLDhCQUFDLG1CQUFtQiwrQkFDNUMsUUFBUSxzREFBQyxTQUFTLG9QQUFZLFFBQVEsNEZBQ3RDLFlBQVk7OzRGQU1ILHVCQUF1QjtrQkFkbkMsU0FBUzsrQkFDRSxzQkFBc0IsY0FHckIsSUFBSSxXQUNQO3dCQUNOLFlBQVksRUFBQyxXQUFXLEVBQUMsbUJBQW1CO3dCQUM1QyxRQUFRLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxRQUFRO3dCQUN0QyxZQUFZO3FCQUNiLGFBQ1M7d0JBQ1IsZUFBZTtxQkFDaEI7K0dBR1EsSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGbW9kZUNoYXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLWZtYWkvc2VydmljZS1jaGF0JztcbmltcG9ydCAqIGFzIFBhcnNlIGZyb20gJ3BhcnNlJ1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25MYWJlbCwgSW9uTW9kYWwsSW9uU2VnbWVudCxJb25UaXRsZSxNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOekljb25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2ljb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDcm9zc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wbGF0Zm9ybS9jcm9zcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNvbXAtcm9sZS1wcm9tcHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tcC1yb2xlLXByb21wdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXAtcm9sZS1wcm9tcHQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTp0cnVlLFxuICBpbXBvcnRzOltcbiAgICBDb21tb25Nb2R1bGUsRm9ybXNNb2R1bGUsUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBJb25Nb2RhbCxJb25CdXR0b24sSW9uU2VnbWVudCxJb25MYWJlbCxcbiAgICBOekljb25Nb2R1bGVcbiAgXSxcbiAgcHJvdmlkZXJzOltcbiAgICBNb2RhbENvbnRyb2xsZXIsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ29tcFJvbGVQcm9tcHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjaGF0OkZtb2RlQ2hhdFxuICBASW5wdXQoKSByb2xlOnN0cmluZyA9IGBgXG4gIGNvbXBhbnk6c3RyaW5nXG4gIHNob3dNb2RhbDpib29sZWFuID0gZmFsc2VcbiAgY2F0ZUluZGV4ID0gMDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNyb3NzOiBDcm9zc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbENvbnRyb2xsZXI6IE1vZGFsQ29udHJvbGxlclxuKSB7XG4gICAgdGhpcy5jb21wYW55ID0gXCJFNEtwR3ZURXRvXCIgLy8g6aOe56CBQUlcbiAgIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmdldENoYXRQcm9tcHQoKVxuICB9XG4gIGFwcGx5UHJvbXB0KG1lc3NhZ2Upe1xuICAgIHRoaXMuY2hhdC51c2VySW5wdXQgPSBtZXNzYWdlO1xuICAgIHRoaXMuY2hhdC5pc1ZvaWNlSW5wdXRNb2RlID0gZmFsc2U7XG4gICAgaWYodGhpcy5jcm9zcz8ubmF2TWVudVR5cGU9PSdtb2JpbGUnKXtcbiAgICAgIHRoaXMubW9kYWxDb250cm9sbGVyLmRpc21pc3MoKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgZ2V0Q2hhdFByb21wdCgpe1xuICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeSgnQ2hhdFByb21wdCcpXG4gICAgcXVlcnkubm90RXF1YWxUbygnaXNEZWxldGVkJywgdHJ1ZSlcbiAgICBxdWVyeS5lcXVhbFRvKCdjb21wYW55JywgdGhpcy5jb21wYW55KVxuICAgIHF1ZXJ5LmVxdWFsVG8oJ3JvbGUnLCB0aGlzLnJvbGUpXG4gICAgcXVlcnkuaW5jbHVkZSgncm9sZScpXG4gICAgbGV0IHByb21wdERhdGEgPSBhd2FpdCBxdWVyeS5maW5kKClcbiAgICB0aGlzLmNoYXQucHJvbXB0TGlzdCA9IHByb21wdERhdGFcbiAgICB0aGlzLmNoYXQucHJvbXB0TGlzdC5mb3JFYWNoKGl0ZW09PntcbiAgICAgIGxldCBjYXRlID0gaXRlbS5nZXQoJ3JvbGUnKS5nZXQoJ3Byb21wdENhdGVzJykuZmlsdGVyKGNhdGUgPT4gY2F0ZS5uYW1lID09IGl0ZW0uZ2V0KCdjYXRlJykpXG4gICAgICBpdGVtLmltZyA9IGNhdGVbMF0uaW1nXG4gICAgfSlcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNoYXQucHJvbXB0TGlzdCk7XG4gIH1cbiAgY2hlY2tDYXRlKGluZGV4Om51bWJlcil7XG4gICAgdGhpcy5jYXRlSW5kZXggPSBpbmRleDtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXQ/Lm1lc3NhZ2VMaXN0PDQgJiYgY2hhdD8uaXNQcm9tcHRNZXNzYWdlQXJlYVNob3cgJiYgIWNoYXQ/LnVzZXJJbnB1dFwiPlxuICA8ZGl2IGNsYXNzPVwicHJvbXB0XCIgKm5nSWY9XCJjcm9zcz8ubmF2TWVudVR5cGUhPSdtb2JpbGUnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBjaGF0Py5wcm9tcHRMaXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJvbXB0X2NhdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVfaW5mb1wiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwiY29udGVudC5pbWdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZV9uYW1lXCI+XG4gICAgICAgICAgICB7e2NvbnRlbnQuZ2V0KCdjYXRlJyl9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBjb250ZW50LmdldCgnbWVzc2FnZUxpc3QnKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlXCIgKGNsaWNrKT1cImFwcGx5UHJvbXB0KG1lc3NhZ2UpXCIgbnotdG9vbHRpcCBbbnpUb29sdGlwVGl0bGVdPVwibWVzc2FnZVwiXG4gICAgICAgICAgICBuelRvb2x0aXBDb2xvcj1cIiMxMDhlZTlcIj5cbiAgICAgICAgICAgIHt7bWVzc2FnZX19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3Jvc3M/Lm5hdk1lbnVUeXBlPT0nbW9iaWxlJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwcm9tcHRfbW9iaWxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIGNoYXQ/LnByb21wdExpc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb21wdF9jYXRlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVfaW5mb1wiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNvbnRlbnQuaW1nXCIgYWx0PVwiXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlX25hbWVcIj5cbiAgICAgICAgICAgICAge3tjb250ZW50LmdldCgnY2F0ZScpfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgY29udGVudC5nZXQoJ21lc3NhZ2VMaXN0Jyk7bGV0IGlkeCA9IGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaWR4PDNcIiBjbGFzcz1cIm1lc3NhZ2VcIiAoY2xpY2spPVwiYXBwbHlQcm9tcHQobWVzc2FnZSlcIiBuei10b29sdGlwIFtuelRvb2x0aXBUaXRsZV09XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgbnpUb29sdGlwQ29sb3I9XCIjMTA4ZWU5XCI+XG4gICAgICAgICAgICAgIHt7bWVzc2FnZX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidmlld19tb3JlXCIgKm5nSWY9XCJjaGF0Py5wcm9tcHRMaXN0Py5sZW5ndGhcIj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImNoYXQuaXNQcm9tcHRNb2RhbE9wZW49dHJ1ZVwiIGV4cGFuZD1cImJsb2NrXCI+5p+l55yL5pu05aSaPHNwYW4gbnotaWNvbiBuelR5cGU9XCJyaWdodFwiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cblxuICA8aW9uLW1vZGFsIFtpc09wZW5dPVwiY2hhdC5pc1Byb21wdE1vZGFsT3BlblwiICh3aWxsRGlzbWlzcyk9XCJjaGF0LmlzUHJvbXB0TW9kYWxPcGVuPWZhbHNlXCIgW2luaXRpYWxCcmVha3BvaW50XT1cIjFcIiBbYnJlYWtwb2ludHNdPVwiWzAsIDFdXCI+XG4gICAgPG5nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz1cImJsb2NrXCI+XG4gICAgICAgIDxpb24tbGFiZWw+6K+d6aKY54G15oSfPC9pb24tbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJibG9ja19jYXRlXCI+XG4gICAgICAgICAgPCEtLSA8aW9uLXNlZ21lbnQgWyhuZ01vZGVsKV09XCJjYXRlSW5kZXhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb21wdCBvZiBjaGF0Py5wcm9tcHRMaXN0O2xldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPGlvbi1zZWdtZW50LWJ1dHRvbiB2YWx1ZT1cImlcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7cHJvbXB0Py5nZXQoXCJjYXRlXCIpfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tc2VnbWVudC1idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2lvbi1zZWdtZW50PiAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9tcHQgb2YgY2hhdD8ucHJvbXB0TGlzdDtsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBbY29sb3JdPVwiaT09Y2F0ZUluZGV4PydzZWNvbmRhcnknOidsaWdodCdcIiAoY2xpY2spPVwiY2hlY2tDYXRlKGkpXCI+e3twcm9tcHQ/LmdldChcImNhdGVcIil9fTwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBbY2xhc3NdPVwiaT09Y2F0ZUluZGV4PydhY3RpdmVfY2F0ZSc6JydcIiAoY2xpY2spPVwiY2hlY2tDYXRlKGkpXCI+e3twcm9tcHQ/LmdldChcImNhdGVcIil9fTwvZGl2PiAtLT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlX21vYmlsZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgY2hhdD8ucHJvbXB0TGlzdFtjYXRlSW5kZXhdPy5nZXQoJ21lc3NhZ2VMaXN0JylcIj5cbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImFwcGx5UHJvbXB0KG1lc3NhZ2UpXCI+e3ttZXNzYWdlfX08L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2lvbi1tb2RhbD5cbjwvbmctY29udGFpbmVyPiJdfQ==
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,Input}from"@angular/core";import{FmodeChat}from"../../service-fmai/service-chat";import*as Parse from"parse";import{IonButton,IonLabel,IonModal,IonSegment,ModalController}from"@ionic/angular/standalone";import{CommonModule}from"@angular/common";import{NzIconModule}from"ng-zorro-antd/icon";import{FormsModule,ReactiveFormsModule}from"@angular/forms";import{CrossService}from"../../../platform/cross.service";import*as i0 from"@angular/core";import*as i1 from"../../../platform/cross.service";import*as i2 from"@ionic/angular/standalone";import*as i3 from"@angular/common";import*as i4 from"ng-zorro-antd/icon";export class CompRolePromptComponent{constructor(e,o){this.cross=e,this.modalController=o,this.role="",this.showModal=!1,this.cateIndex=0,this.company="E4KpGvTEto"}ngOnInit(){this.getChatPrompt()}applyPrompt(e){this.chat.userInput=e,this.chat.isVoiceInputMode=!1,"mobile"==this.cross?.navMenuType&&this.modalController.dismiss()}async getChatPrompt(){let e=new Parse.Query("ChatPrompt");e.notEqualTo("isDeleted",!0),e.equalTo("company",this.company),e.equalTo("role",this.role),e.include("role");let o=await e.find();this.chat.promptList=o,this.chat.promptList.forEach((e=>{let o=e.get("role").get("promptCates").filter((o=>o.name==e.get("cate")));e.img=o[0].img})),console.log(this.chat.promptList)}checkCate(e){this.cateIndex=e}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompRolePromptComponent,deps:[{token:i1.CrossService},{token:i2.ModalController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompRolePromptComponent,isStandalone:!0,selector:"app-comp-role-prompt",inputs:{chat:"chat",role:"role"},providers:[ModalController],ngImport:i0,template:'<ng-container *ngIf="chat?.messageList<4 && chat?.isPromptMessageAreaShow && !chat?.userInput">\n <div class="prompt" *ngIf="cross?.navMenuType!=\'mobile\'">\n <ng-container *ngFor="let content of chat?.promptList">\n <div class="prompt_cate">\n <div class="cate_info">\n <div>\n <img [src]="content.img" alt="">\n </div>\n <div class="cate_name">\n {{content.get(\'cate\')}}\n </div>\n </div>\n <ng-container *ngFor="let message of content.get(\'messageList\')">\n <div class="message" (click)="applyPrompt(message)" nz-tooltip [nzTooltipTitle]="message"\n nzTooltipColor="#108ee9">\n {{message}}\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf="cross?.navMenuType==\'mobile\'">\n <div class="prompt_mobile">\n <ng-container *ngFor="let content of chat?.promptList">\n <div class="prompt_cate">\n <div class="cate_info">\n <div>\n <img [src]="content.img" alt="">\n </div>\n <div class="cate_name">\n {{content.get(\'cate\')}}\n </div>\n </div>\n <ng-container *ngFor="let message of content.get(\'messageList\');let idx = index">\n <div *ngIf="idx<3" class="message" (click)="applyPrompt(message)" nz-tooltip [nzTooltipTitle]="message"\n nzTooltipColor="#108ee9">\n {{message}}\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class="view_more" *ngIf="chat?.promptList?.length">\n <button (click)="chat.isPromptModalOpen=true" expand="block">查看更多<span nz-icon nzType="right" nzTheme="outline"></span></button>\n </div>\n</ng-container>\n\n\n <ion-modal [isOpen]="chat.isPromptModalOpen" (willDismiss)="chat.isPromptModalOpen=false" [initialBreakpoint]="1" [breakpoints]="[0, 1]">\n <ng-template>\n <div class="block">\n <ion-label>话题灵感</ion-label>\n <div class="block_cate">\n \x3c!-- <ion-segment [(ngModel)]="cateIndex">\n <ng-container *ngFor="let prompt of chat?.promptList;let i = index">\n <ion-segment-button value="i">\n <ion-label>{{prompt?.get("cate")}}</ion-label>\n </ion-segment-button>\n </ng-container>\n </ion-segment> --\x3e\n <ng-container *ngFor="let prompt of chat?.promptList;let i = index">\n <ion-button [color]="i==cateIndex?\'secondary\':\'light\'" (click)="checkCate(i)">{{prompt?.get("cate")}}</ion-button>\n \x3c!-- <div [class]="i==cateIndex?\'active_cate\':\'\'" (click)="checkCate(i)">{{prompt?.get("cate")}}</div> --\x3e\n </ng-container>\n </div>\n <div class="message_mobile">\n <ng-container *ngFor="let message of chat?.promptList[cateIndex]?.get(\'messageList\')">\n <div (click)="applyPrompt(message)">{{message}}</div>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </ion-modal>\n</ng-container>',styles:[":host-context(body.dark) .prompt_cate .message{background:#fff3;border:1px solid #333;box-shadow:0 2px 8px #333;color:#ffffff80}:host-context(body.dark) .cate_info{color:#fff}:host-context(body.dark) ion-modal .block h4{color:#fff!important}.prompt{color:#000;display:flex;justify-content:space-between;align-items:flex-start}.prompt .prompt_cate{flex:1;height:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-direction:column;display:flex;justify-content:center}.prompt .prompt_cate .cate_info{font-size:1.5em;font-weight:700}.prompt .prompt_cate .cate_info div img{width:58px;height:58px}.prompt .prompt_cate .cate_info .cate_name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.prompt .prompt_cate .message{padding:1em;margin:1em;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (max-width: 390.4px){.prompt .prompt_cate .message{width:100px;height:64px;padding:unset;margin:.8em;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;overflow:hidden;white-space:pre-wrap;text-overflow:ellipsis}}.prompt_mobile{color:#000;display:flex;justify-content:space-between;align-items:flex-start}.prompt_mobile .prompt_cate{flex:1;height:inherit}.prompt_mobile .prompt_cate .cate_info{display:flex;justify-content:center;align-items:center;font-size:1.2em}.prompt_mobile .prompt_cate .cate_info div img{width:48px;height:48px}.prompt_mobile .prompt_cate .cate_info .cate_name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;text-overflow:ellipsis;margin-top:2vw}.prompt_mobile .prompt_cate .message{min-height:48px;padding:0 2vw;margin:4vw 1vw;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.view_more{text-align:center;color:#999;margin:4vw 0}.view_more>button{background-color:transparent}.block{width:100%;height:80vh;padding:2vw}.block .block_cate{display:flex;justify-content:space-between}.block .message_mobile{overflow-y:auto;height:65vh;color:#000}.block .message_mobile>div{background-color:#fff;text-align:center;padding:3vw 0;margin:3vw 0;border-radius:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-modal{--height: auto}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i3.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:FormsModule},{kind:"ngmodule",type:ReactiveFormsModule},{kind:"component",type:IonModal,selector:"ion-modal"},{kind:"component",type:IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"ngmodule",type:NzIconModule},{kind:"directive",type:i4.NzIconDirective,selector:"[nz-icon]",inputs:["nzSpin","nzRotate","nzType","nzTheme","nzTwotoneColor","nzIconfont"],exportAs:["nzIcon"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompRolePromptComponent,decorators:[{type:Component,args:[{selector:"app-comp-role-prompt",standalone:!0,imports:[CommonModule,FormsModule,ReactiveFormsModule,IonModal,IonButton,IonSegment,IonLabel,NzIconModule],providers:[ModalController],template:'<ng-container *ngIf="chat?.messageList<4 && chat?.isPromptMessageAreaShow && !chat?.userInput">\n <div class="prompt" *ngIf="cross?.navMenuType!=\'mobile\'">\n <ng-container *ngFor="let content of chat?.promptList">\n <div class="prompt_cate">\n <div class="cate_info">\n <div>\n <img [src]="content.img" alt="">\n </div>\n <div class="cate_name">\n {{content.get(\'cate\')}}\n </div>\n </div>\n <ng-container *ngFor="let message of content.get(\'messageList\')">\n <div class="message" (click)="applyPrompt(message)" nz-tooltip [nzTooltipTitle]="message"\n nzTooltipColor="#108ee9">\n {{message}}\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf="cross?.navMenuType==\'mobile\'">\n <div class="prompt_mobile">\n <ng-container *ngFor="let content of chat?.promptList">\n <div class="prompt_cate">\n <div class="cate_info">\n <div>\n <img [src]="content.img" alt="">\n </div>\n <div class="cate_name">\n {{content.get(\'cate\')}}\n </div>\n </div>\n <ng-container *ngFor="let message of content.get(\'messageList\');let idx = index">\n <div *ngIf="idx<3" class="message" (click)="applyPrompt(message)" nz-tooltip [nzTooltipTitle]="message"\n nzTooltipColor="#108ee9">\n {{message}}\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class="view_more" *ngIf="chat?.promptList?.length">\n <button (click)="chat.isPromptModalOpen=true" expand="block">查看更多<span nz-icon nzType="right" nzTheme="outline"></span></button>\n </div>\n</ng-container>\n\n\n <ion-modal [isOpen]="chat.isPromptModalOpen" (willDismiss)="chat.isPromptModalOpen=false" [initialBreakpoint]="1" [breakpoints]="[0, 1]">\n <ng-template>\n <div class="block">\n <ion-label>话题灵感</ion-label>\n <div class="block_cate">\n \x3c!-- <ion-segment [(ngModel)]="cateIndex">\n <ng-container *ngFor="let prompt of chat?.promptList;let i = index">\n <ion-segment-button value="i">\n <ion-label>{{prompt?.get("cate")}}</ion-label>\n </ion-segment-button>\n </ng-container>\n </ion-segment> --\x3e\n <ng-container *ngFor="let prompt of chat?.promptList;let i = index">\n <ion-button [color]="i==cateIndex?\'secondary\':\'light\'" (click)="checkCate(i)">{{prompt?.get("cate")}}</ion-button>\n \x3c!-- <div [class]="i==cateIndex?\'active_cate\':\'\'" (click)="checkCate(i)">{{prompt?.get("cate")}}</div> --\x3e\n </ng-container>\n </div>\n <div class="message_mobile">\n <ng-container *ngFor="let message of chat?.promptList[cateIndex]?.get(\'messageList\')">\n <div (click)="applyPrompt(message)">{{message}}</div>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </ion-modal>\n</ng-container>',styles:[":host-context(body.dark) .prompt_cate .message{background:#fff3;border:1px solid #333;box-shadow:0 2px 8px #333;color:#ffffff80}:host-context(body.dark) .cate_info{color:#fff}:host-context(body.dark) ion-modal .block h4{color:#fff!important}.prompt{color:#000;display:flex;justify-content:space-between;align-items:flex-start}.prompt .prompt_cate{flex:1;height:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-direction:column;display:flex;justify-content:center}.prompt .prompt_cate .cate_info{font-size:1.5em;font-weight:700}.prompt .prompt_cate .cate_info div img{width:58px;height:58px}.prompt .prompt_cate .cate_info .cate_name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.prompt .prompt_cate .message{padding:1em;margin:1em;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (max-width: 390.4px){.prompt .prompt_cate .message{width:100px;height:64px;padding:unset;margin:.8em;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;overflow:hidden;white-space:pre-wrap;text-overflow:ellipsis}}.prompt_mobile{color:#000;display:flex;justify-content:space-between;align-items:flex-start}.prompt_mobile .prompt_cate{flex:1;height:inherit}.prompt_mobile .prompt_cate .cate_info{display:flex;justify-content:center;align-items:center;font-size:1.2em}.prompt_mobile .prompt_cate .cate_info div img{width:48px;height:48px}.prompt_mobile .prompt_cate .cate_info .cate_name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;text-overflow:ellipsis;margin-top:2vw}.prompt_mobile .prompt_cate .message{min-height:48px;padding:0 2vw;margin:4vw 1vw;background:#fff;border:1px solid #eef2f2;border-radius:12px;box-shadow:0 2px 8px #f5f6f8;cursor:pointer;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.view_more{text-align:center;color:#999;margin:4vw 0}.view_more>button{background-color:transparent}.block{width:100%;height:80vh;padding:2vw}.block .block_cate{display:flex;justify-content:space-between}.block .message_mobile{overflow-y:auto;height:65vh;color:#000}.block .message_mobile>div{background-color:#fff;text-align:center;padding:3vw 0;margin:3vw 0;border-radius:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-modal{--height: auto}\n"]}]}],ctorParameters:()=>[{type:i1.CrossService},{type:i2.ModalController}],propDecorators:{chat:[{type:Input}],role:[{type:Input}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY29tcC1yb2xlLXByb21wdC9jb21wLXJvbGUtcHJvbXB0LmNvbXBvbmVudC5tanM=`
|
|
10
|
+
|
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs
|
|
7
|
+
*/
|
|
8
|
+
export*from"./comp-role-prompt.component";
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY29tcC1yb2xlLXByb21wdC9pbmRleC5tanM=`
|
|
10
|
+
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/chat/index.mjs
|
|
7
|
+
*/
|
|
8
|
+
export*from"./chat-list";export*from"./chat-header-area";export*from"./chat-message-area";export*from"./chat-message-card";export*from"./comp-role-prompt";export*from"./chat-modal-input";export*from"./chat-panel/chat-panel.component";
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvaW5kZXgubWpz`
|
|
10
|
+
|
|
@@ -1,82 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* @
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
constructor(toastCtrl) {
|
|
12
|
-
this.toastCtrl = toastCtrl;
|
|
13
|
-
}
|
|
14
|
-
async copyToClipboard(content) {
|
|
15
|
-
try {
|
|
16
|
-
await Clipboard.write({
|
|
17
|
-
string: content
|
|
18
|
-
});
|
|
19
|
-
this.copySuccess();
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
catch (error1) {
|
|
23
|
-
try {
|
|
24
|
-
if (navigator.clipboard && window.isSecureContext) {
|
|
25
|
-
await navigator?.clipboard?.writeText(content);
|
|
26
|
-
this.copySuccess();
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
throw false;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
catch (error2) {
|
|
34
|
-
// 旧的方式
|
|
35
|
-
// 创建一个文本域元素
|
|
36
|
-
let textArea = document.createElement("textarea");
|
|
37
|
-
textArea.value = content;
|
|
38
|
-
// 使文本域不在视线范围内
|
|
39
|
-
textArea.style.position = "fixed";
|
|
40
|
-
textArea.style.left = "-9999px";
|
|
41
|
-
textArea.style.top = "-9999px";
|
|
42
|
-
document.body.appendChild(textArea);
|
|
43
|
-
textArea.focus();
|
|
44
|
-
textArea.select(); // 选中文本
|
|
45
|
-
try {
|
|
46
|
-
// 执行复制命令
|
|
47
|
-
let successful = document?.execCommand('copy');
|
|
48
|
-
if (successful) {
|
|
49
|
-
this.copySuccess();
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
console.error('无法复制文本');
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
console.error('无法复制文本: ', err);
|
|
57
|
-
}
|
|
58
|
-
// 移除文本域
|
|
59
|
-
document.body.removeChild(textArea);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
async copySuccess() {
|
|
64
|
-
let toast = await this.toastCtrl.create({
|
|
65
|
-
duration: 1000,
|
|
66
|
-
message: "复制成功",
|
|
67
|
-
color: 'primary',
|
|
68
|
-
icon: "information-circle",
|
|
69
|
-
position: "top"
|
|
70
|
-
});
|
|
71
|
-
toast.present();
|
|
72
|
-
}
|
|
73
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ClipboardService, deps: [{ token: i1.ToastController }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
74
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ClipboardService, providedIn: 'root' }); }
|
|
75
|
-
}
|
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ClipboardService, decorators: [{
|
|
77
|
-
type: Injectable,
|
|
78
|
-
args: [{
|
|
79
|
-
providedIn: 'root'
|
|
80
|
-
}]
|
|
81
|
-
}], ctorParameters: () => [{ type: i1.ToastController }] });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY29tcC1tYXJrZG93bi1wcmV2aWV3L2NsaXBib2FyZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBRWpEOzs7R0FHRztBQUlILE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0IsWUFDVSxTQUF5QjtRQUF6QixjQUFTLEdBQVQsU0FBUyxDQUFnQjtJQUduQyxDQUFDO0lBQ0QsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPO1FBQzNCLElBQUcsQ0FBQztZQUNGLE1BQU0sU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDcEIsTUFBTSxFQUFFLE9BQU87YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ2xCLE9BQU07UUFDUixDQUFDO1FBQUEsT0FBTSxNQUFNLEVBQUMsQ0FBQztZQUNiLElBQUcsQ0FBQztnQkFDRixJQUFJLFNBQVMsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNsRCxNQUFNLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUM5QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7b0JBQ2xCLE9BQU07Z0JBQ1IsQ0FBQztxQkFBSSxDQUFDO29CQUNKLE1BQU0sS0FBSyxDQUFBO2dCQUNiLENBQUM7WUFDSCxDQUFDO1lBQUEsT0FBTSxNQUFNLEVBQUMsQ0FBQztnQkFDYixPQUFPO2dCQUNQLFlBQVk7Z0JBQ1osSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEQsUUFBUSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7Z0JBRXpCLGNBQWM7Z0JBQ2QsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO2dCQUNsQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7Z0JBQ2hDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztnQkFFL0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTztnQkFFMUIsSUFBSSxDQUFDO29CQUNILFNBQVM7b0JBQ1QsSUFBSSxVQUFVLEdBQUcsUUFBUSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxVQUFVLEVBQUUsQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3JCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMxQixDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDakMsQ0FBQztnQkFDRCxRQUFRO2dCQUNSLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN0QyxRQUFRLEVBQUMsSUFBSTtZQUNiLE9BQU8sRUFBQyxNQUFNO1lBQ2QsS0FBSyxFQUFDLFNBQVM7WUFDZixJQUFJLEVBQUMsb0JBQW9CO1lBQ3pCLFFBQVEsRUFBQyxLQUFLO1NBQ2YsQ0FBQyxDQUFBO1FBQ0YsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUM7K0dBL0RVLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0BjYXBhY2l0b3IvY2xpcGJvYXJkJztcblxuLyoqXG4gKiDliarotLTmnb/mnI3liqHvvJrmlK/mjIFINeOAgeW+ruS/oeOAgeenu+WKqOerr1xuICogQHB1YmxpY1xuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDbGlwYm9hcmRTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRvYXN0Q3RybDpUb2FzdENvbnRyb2xsZXJcbiAgKSB7IFxuXG4gIH1cbiAgYXN5bmMgY29weVRvQ2xpcGJvYXJkKGNvbnRlbnQpe1xuICAgIHRyeXtcbiAgICAgIGF3YWl0IENsaXBib2FyZC53cml0ZSh7XG4gICAgICAgIHN0cmluZzogY29udGVudFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvcHlTdWNjZXNzKClcbiAgICAgIHJldHVyblxuICAgIH1jYXRjaChlcnJvcjEpe1xuICAgICAgdHJ5e1xuICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiB3aW5kb3cuaXNTZWN1cmVDb250ZXh0KSB7XG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yPy5jbGlwYm9hcmQ/LndyaXRlVGV4dChjb250ZW50KVxuICAgICAgICAgIHRoaXMuY29weVN1Y2Nlc3MoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aHJvdyBmYWxzZVxuICAgICAgICB9XG4gICAgICB9Y2F0Y2goZXJyb3IyKXtcbiAgICAgICAgLy8g5pen55qE5pa55byPXG4gICAgICAgIC8vIOWIm+W7uuS4gOS4quaWh+acrOWfn+WFg+e0oFxuICAgICAgICBsZXQgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG4gICAgICAgIHRleHRBcmVhLnZhbHVlID0gY29udGVudDtcblxuICAgICAgICAvLyDkvb/mlofmnKzln5/kuI3lnKjop4bnur/ojIPlm7TlhoVcbiAgICAgICAgdGV4dEFyZWEuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICAgIHRleHRBcmVhLnN0eWxlLmxlZnQgPSBcIi05OTk5cHhcIjtcbiAgICAgICAgdGV4dEFyZWEuc3R5bGUudG9wID0gXCItOTk5OXB4XCI7XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7XG4gICAgICAgIHRleHRBcmVhLmZvY3VzKCk7XG4gICAgICAgIHRleHRBcmVhLnNlbGVjdCgpOyAvLyDpgInkuK3mlofmnKxcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIOaJp+ihjOWkjeWItuWRveS7pFxuICAgICAgICAgIGxldCBzdWNjZXNzZnVsID0gZG9jdW1lbnQ/LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29weVN1Y2Nlc3MoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign5peg5rOV5aSN5Yi25paH5pysJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCfml6Dms5XlpI3liLbmlofmnKw6ICcsIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g56e76Zmk5paH5pys5Z+fXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dEFyZWEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBhc3luYyBjb3B5U3VjY2Vzcygpe1xuICAgIGxldCB0b2FzdCA9IGF3YWl0IHRoaXMudG9hc3RDdHJsLmNyZWF0ZSh7XG4gICAgICBkdXJhdGlvbjoxMDAwLFxuICAgICAgbWVzc2FnZTpcIuWkjeWItuaIkOWKn1wiLFxuICAgICAgY29sb3I6J3ByaW1hcnknLFxuICAgICAgaWNvbjpcImluZm9ybWF0aW9uLWNpcmNsZVwiLFxuICAgICAgcG9zaXRpb246XCJ0b3BcIlxuICAgIH0pXG4gICAgdG9hc3QucHJlc2VudCgpO1xuICB9XG59XG5cblxuXG5cblxuIl19
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Injectable}from"@angular/core";import{ToastController}from"@ionic/angular";import{Clipboard}from"@capacitor/clipboard";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular";export class ClipboardService{constructor(o){this.toastCtrl=o}async copyToClipboard(o){try{return await Clipboard.write({string:o}),void this.copySuccess()}catch(r){try{if(navigator.clipboard&&window.isSecureContext)return await(navigator?.clipboard?.writeText(o)),void this.copySuccess();throw!1}catch(r){let t=document.createElement("textarea");t.value=o,t.style.position="fixed",t.style.left="-9999px",t.style.top="-9999px",document.body.appendChild(t),t.focus(),t.select();try{let o=document?.execCommand("copy");o?this.copySuccess():console.error("无法复制文本")}catch(o){console.error("无法复制文本: ",o)}document.body.removeChild(t)}}}async copySuccess(){(await this.toastCtrl.create({duration:1e3,message:"复制成功",color:"primary",icon:"information-circle",position:"top"})).present()}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ClipboardService,deps:[{token:i1.ToastController}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ClipboardService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ClipboardService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.ToastController}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NvbXAtbWFya2Rvd24tcHJldmlldy9jbGlwYm9hcmQuc2VydmljZS5tanM=`
|
|
10
|
+
|