{"version":3,"file":"fmode-ng.mjs","sources":["../../../projects/fmode-ng/src/lib/aigc/agent/agent.prompt.ts","../../../projects/fmode-ng/src/lib/aigc/voice/audio.player.ts","../../../projects/fmode-ng/src/lib/aigc/voice/stream.player.ts","../../../projects/fmode-ng/src/lib/aigc/voice/tts/fmode-tts-class.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/chat-class.ts","../../../projects/fmode-ng/src/lib/nova-cloud/ncloud-api-func.ts","../../../projects/fmode-ng/src/lib/nova-cloud/nova-cloud.service.ts","../../../projects/fmode-ng/src/lib/platform/cross.service.ts","../../../projects/fmode-ng/src/lib/storage/service-upload/util-file-md5.ts","../../../projects/fmode-ng/src/lib/storage/service-upload/nova-upload.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/chat.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-imagine/imagine-func.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-imagine/imagine.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/fmai.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-imagine/imagine-work.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/mask-list.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/utilnow.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-parse.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-preview.component.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-preview.component.html","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-preview.module.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/clipboard.service.ts","../../../projects/fmode-ng/src/lib/aigc/voice/lib/pcm2wav.ts","../../../projects/fmode-ng/src/lib/aigc/voice/lib/resample.ts","../../../projects/fmode-ng/src/lib/aigc/voice/class-asr.ts","../../../projects/fmode-ng/src/lib/aigc/voice/fmode-voice.service.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-particle/role-points.class.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/avatar.module.ts","../../../projects/fmode-ng/src/lib/video/fm-video/fm-video.component.ts","../../../projects/fmode-ng/src/lib/video/fm-video/fm-video.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.html","../../../projects/fmode-ng/src/lib/aigc/chat/chat-list/chat-list.component.ts","../../../projects/fmode-ng/src/lib/aigc/chat/chat-list/chat-list.component.html","../../../projects/fmode-ng/src/lib/aigc/chat/chat-header-area/comp-header-area.component.ts","../../../projects/fmode-ng/src/lib/aigc/chat/chat-header-area/comp-header-area.component.html","../../../projects/fmode-ng/src/lib/user/login/auth.service.ts","../../../projects/fmode-ng/src/lib/user/account/account.service.ts","../../../projects/fmode-ng/src/lib/user/comp-user-avatar/comp-user-avatar.component.ts","../../../projects/fmode-ng/src/lib/user/comp-user-avatar/comp-user-avatar.component.html","../../../projects/fmode-ng/src/lib/aigc/chat/chat-message-card/duration-str.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/chat/chat-message-card/comp-message-card.component.ts","../../../projects/fmode-ng/src/lib/aigc/chat/chat-message-card/comp-message-card.component.html","../../../projects/fmode-ng/src/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.ts","../../../projects/fmode-ng/src/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.html","../../../projects/fmode-ng/src/lib/aigc/chat/chat-message-area/comp-message-area.component.ts","../../../projects/fmode-ng/src/lib/aigc/chat/chat-message-area/comp-message-area.component.html","../../../projects/fmode-ng/src/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.ts","../../../projects/fmode-ng/src/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.html","../../../projects/fmode-ng/src/lib/aigc/chat/chat-modal-input/modal-input.component.ts","../../../projects/fmode-ng/src/lib/aigc/chat/chat-modal-input/modal-input.component.html","../../../projects/fmode-ng/src/lib/aigc/chat/chat-panel/chat-panel.component.ts","../../../projects/fmode-ng/src/lib/aigc/chat/chat-panel/chat-panel.component.html","../../../projects/fmode-ng/src/lib/map/page-map.start/page-map.start.component.ts","../../../projects/fmode-ng/src/lib/map/page-map.start/page-map.start.component.html","../../../projects/fmode-ng/src/lib/map/comp-poi-picker/comp-poi-picker.component.ts","../../../projects/fmode-ng/src/lib/map/comp-poi-picker/comp-poi-picker.component.html","../../../projects/fmode-ng/src/lib/map/comp-poi-picker/comp-poi-picker.module.ts","../../../projects/fmode-ng/src/lib/map/page-plan-route/page-plan-route.component.ts","../../../projects/fmode-ng/src/lib/map/page-plan-route/page-plan-route.component.html","../../../projects/fmode-ng/src/lib/map/page-loca-scatter/page-loca-scatter.component.ts","../../../projects/fmode-ng/src/lib/map/page-loca-scatter/page-loca-scatter.component.html","../../../projects/fmode-ng/src/lib/map/map.module.ts","../../../projects/fmode-ng/src/lib/storage/service-hwobs/hwobs.service.ts","../../../projects/fmode-ng/src/lib/storage/comp-hwobs-manager/hwobs-manager.component.ts","../../../projects/fmode-ng/src/lib/storage/comp-hwobs-manager/hwobs-manager.component.html","../../../projects/fmode-ng/src/lib/storage/storage.module.ts","../../../projects/fmode-ng/src/lib/social/wechat/wechat-jssdk.service.ts","../../../projects/fmode-ng/src/lib/user/login/login.component.ts","../../../projects/fmode-ng/src/lib/user/login/login.component.html","../../../projects/fmode-ng/src/lib/user/modal-user-login/modal-user-login.component.ts","../../../projects/fmode-ng/src/lib/user/modal-user-login/modal-user-login.component.html","../../../projects/fmode-ng/src/lib/user/captcha/captcha.component.ts","../../../projects/fmode-ng/src/lib/user/captcha/captcha.component.html","../../../projects/fmode-ng/src/lib/user/user-name.pipe.ts","../../../projects/fmode-ng/src/lib/user/user.module.ts","../../../projects/fmode-ng/src/lib/user/staff/staff.module.ts","../../../projects/fmode-ng/src/lib/user/staff/staff.service.ts","../../../projects/fmode-ng/src/lib/user/staff/staff.guard.ts","../../../projects/fmode-ng/src/lib/user/profile/auth-profile.service.ts","../../../projects/fmode-ng/src/lib/user/profile/auth-profile.guard.ts","../../../projects/fmode-ng/src/lib/user/profile/profile-bind/profile-bind.component.ts","../../../projects/fmode-ng/src/lib/user/profile/profile-bind/profile-bind.component.html","../../../projects/fmode-ng/src/lib/user/login/auth.guard.ts","../../../projects/fmode-ng/src/lib/user/profile/profile.module.ts","../../../projects/fmode-ng/src/public-api.ts","../../../projects/fmode-ng/src/fmode-ng.ts"],"sourcesContent":["import { PromptTemplate } from \"@langchain/core/prompts\";\nimport Parse from \"parse\";\nimport { finalize, Observable } from \"rxjs\";\nimport { FmodeChatCompletion, FmodeChatMessage } from \"../service-fmai/service-chat/chat-class\";\n// import {\n// encode,\n// decode,\n// isWithinTokenLimit,\n// } from 'gpt-tokenizer/src/model/gpt-4'\n\nexport class AgentPrompt{\n constructor(){}\n jsonCompletion(prompt:string,model?:string):Observable{\n // return new Promise((resolve)=>{\n // 创建上下文提示词消息列表\n let messageList = [\n {role:\"user\",content:prompt},\n ]\n // 创建并发起一条新的消息补全\n let completion = new FmodeChatCompletion(messageList)\n completion.model = model || \"fmode-4.5-128k\"\n // 持续更新事件推送的消息体内容绑定至消息变量\n let message:FmodeChatMessage|any\n\n return completion.sendCompletion({isDirect:true}).pipe(finalize(()=>{\n let content = message?.content\n console.log(message)\n message.json = this.extractAndParseJson(content)\n message.complete = true\n // return message\n }))\n // .subscribe(message=>{\n // if(message?.complete){\n // let content = message.content\n // }\n // })\n // })\n }\n extractAndParseJson(inputString:string) {\n let startIndex = inputString.indexOf('{');\n if (startIndex === -1) return {};\n \n let count = 0;\n let endIndex = startIndex;\n \n // 遍历字符串,计算花括号是否平衡\n for (let i = startIndex; i < inputString.length; i++) {\n if (inputString[i] === '{') {\n count++;\n } else if (inputString[i] === '}') {\n count--;\n }\n \n // 当花括号平衡时,我们找到了一个完整的JSON对象\n if (count === 0) {\n endIndex = i;\n break;\n }\n }\n \n // 如果花括号不平衡,返回空对象\n if (count !== 0) return {};\n \n // 提取JSON字符串并尝试解析\n const jsonString = inputString.slice(startIndex, endIndex + 1);\n try {\n return JSON.parse(jsonString);\n } catch (error) {\n console.error(\"Failed to parse JSON:\", error);\n return {};\n }\n }\n extractMarkdownToMultiArray(markdownText:string) {\n let lines = markdownText.split('\\n');\n let result:any = [];\n let currentArray = result;\n \n // 栈用于跟踪嵌套列表\n let stack = [result];\n \n for (let line of lines) {\n if (!line.trim()) continue;\n \n // 检测标题\n if (line.startsWith('#')) {\n let title = line.replace(/^#+\\s*/, '');\n currentArray.push([title]);\n continue;\n }\n \n // 检测列表项\n let level = line.search(/\\S/) / 2; // 每两个空格代表一级列表深度\n let content = line.trim().replace(/^-+\\s*/, '');\n \n // 调整当前数组的深度\n while (level < stack.length - 1) {\n stack.pop();\n }\n while (level > stack.length - 1) {\n let newArray:any = [];\n stack[stack.length - 1].push(newArray);\n stack.push(newArray);\n }\n currentArray = stack[stack.length - 1];\n currentArray.push(content);\n }\n \n return result;\n }\n async getFormatTpl(promptTplCode:string,paramsMap:any){\n let prompTpl = await this.getPromptTpl(promptTplCode);\n // console.log(prompTpl,paramsMap)\n return await prompTpl.format(paramsMap);\n }\n async getPromptTpl(code:string):Promise{\n let query = new Parse.Query(\"PromptTemplate\");\n query.equalTo(\"code\",code);\n let tpl = await query.first();\n return PromptTemplate.fromTemplate(tpl?.get(\"template\"),{\n templateFormat:\"mustache\"\n });\n }\n getTokens(content:string){\n content = content || \"\"\n // let encoded = encode(content)\n // return encoded?.length || 100\n return content?.length*2\n }\n}","// audio-player.ts\nexport class AudioPlayer {\n private static instance: AudioPlayer | null = null;\n private audio: HTMLAudioElement;\n\n // 私有构造函数,防止外部实例化\n private constructor() {\n this.audio = new Audio();\n }\n\n // 获取单例实例的方法\n public static getInstance(): AudioPlayer {\n if (!AudioPlayer.instance) {\n AudioPlayer.instance = new AudioPlayer();\n }\n return AudioPlayer.instance;\n }\n\n public setAudioEvent(event,func){\n this.audio[event]=func\n }\n public get duration(){\n return this.audio.duration;\n }\n public get src(){\n return this.audio.src;\n }\n public stop(){\n this.audio.pause();\n }\n public async play(src: string): Promise {\n return new Promise((resolve,reject)=>{\n\n // 如果当前播放的音频与要播放的音频不同,则停止当前音频\n if (this.audio.src !== src) {\n this.audio.src = src;\n this.audio.play().then(()=>{\n resolve();\n }).catch(()=>{\n reject();\n })\n } else {\n // 如果点击的是正在播放的音频,则暂停\n if (!this.audio.paused) {\n this.audio.pause();\n } else {\n this.audio.play().then(()=>{\n resolve();\n }).catch(()=>{\n reject();\n })\n }\n }\n // reject()\n })\n }\n}","import { PushAudioOutputStreamCallback } from \"microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/Audio/PushAudioOutputStreamCallback\";\nimport { from, Subject, timer } from 'rxjs';\nimport { bufferCount, bufferTime, bufferWhen, concatMap, filter, mergeMap, switchMap, takeUntil, tap } from 'rxjs/operators';\n\n// 创建一个自定义的音频输出流\nexport class FmPushAudioOutputStreamCallback extends PushAudioOutputStreamCallback {\n audioContext: AudioContext;\n audioDataSubject: Subject = new Subject(); // 创建一个 Subject 用于音频数据流\n playedSubject: Subject = new Subject(); // 创建一个 Subject 用于记录音频播放开始和结束\n isPlaying: boolean = false;\n isClosed: boolean = false;\n \n audioBufferQueue:any[] = []; // 用于存储音频数据\n maxBufferSize:number = 10; // 最大缓冲区大小\n\n constructor() {\n super();\n this.audioContext = new (window.AudioContext || (window as any).webkitAudioContext)(); // 创建音频上下文\n\n /**\n * 订阅音频数据流并处理播放\n * @desc\n * audioDataSubject 接收原始数据\n * playedSubject 控制播放缓冲时间\n * 1.前十条 触发playedSubject\n * 2.每播放完成一次 触发playedSubject\n */ \n this.audioDataSubject.pipe(\n bufferWhen(()=>this.playedSubject), // 只在传递 true 时触发\n // bufferTime(25), // 后续数据按时间缓冲,比如25ms\n takeUntil(this.audioDataSubject.pipe(filter(() => this.isClosed)))\n ).subscribe(buffers => {\n // console.log(buffers);\n this.playAudio(buffers);\n });\n\n }\n\n // 当有音频数据可用时调用\n writeCount:number = 0\n async write(data: ArrayBuffer) {\n this.writeCount++;\n if(this.writeCount==10){\n this.playedSubject.next(true);\n }\n // 将数据推送到 Subject\n this.audioDataSubject.next(data);\n }\n\n // 播放音频\n async playAudio(buffers: ArrayBuffer[]): Promise {\n this.isPlaying = true;\n\n // 合并所有的 ArrayBuffer\n const partBuffer = this.mergeArrayBuffers(buffers);\n let audioBuffer\n try{\n audioBuffer = await this.audioContext.decodeAudioData(partBuffer);\n }catch(err){}\n\n if (audioBuffer) {\n // 创建音频源\n const source = this.audioContext.createBufferSource();\n source.buffer = audioBuffer;\n\n // 连接到音频上下文的输出\n source.connect(this.audioContext.destination);\n\n // 播放音频\n source.start();\n\n // 等待音频播放结束\n await new Promise(resolve => {\n source.onended = resolve;\n });\n this.playedSubject.next(true);\n }\n\n this.isPlaying = false;\n }\n\n mergeArrayBuffers(arrayBuffers: ArrayBuffer[]): ArrayBuffer {\n // 计算总长度\n const totalLength = arrayBuffers.reduce((sum, buffer) => sum + buffer.byteLength, 0);\n \n // 创建一个新的 Uint8Array,用于存储合并后的数据\n const mergedUint8Array = new Uint8Array(totalLength);\n \n // 当前写入的偏移量\n let offset = 0;\n \n // 遍历每个 ArrayBuffer\n for (const buffer of arrayBuffers) {\n const uint8Array = new Uint8Array(buffer);\n mergedUint8Array.set(uint8Array, offset);\n offset += uint8Array.length;\n }\n \n return mergedUint8Array.buffer;\n }\n\n async stop() {\n this.isClosed = true;\n this.audioDataSubject&&this.audioDataSubject.unsubscribe();\n this.playedSubject&&this.playedSubject.unsubscribe();\n this.audioContext&&this.audioContext.close();\n }\n\n // 结束流\n async close() {\n console.log(\"close 数据加载完成\")\n // if (this.isClosed) return;\n this.isClosed = true;\n // 如果当前没有播放,关闭音频上下文\n // if (!this.isPlaying) {\n // await this.audioContext.close();\n // }\n }\n}","// import * as sdk from \"microsoft-cognitiveservices-speech-sdk\";\ndeclare var Microsoft:any\n// import \"microsoft-cognitiveservices-speech-sdk/distrib/browser/microsoft.cognitiveservices.speech.sdk.bundle-min\";\nimport {SpeechSynthesizer} from \"microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/SpeechSynthesizer\";\nimport {SpeechConfig} from \"microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/SpeechConfig\";\nimport {ResultReason} from \"microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/ResultReason\";\nimport Parse from \"parse\";\nimport { NovaUploadService } from \"../../../storage/service-upload/nova-upload.service\";\nimport { AudioConfig } from \"microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/Audio/AudioConfig\";\nimport { AudioPlayer } from \"../audio.player\";\nimport { FmPushAudioOutputStreamCallback } from \"../stream.player\";\n\n// Microsoft?.CognitiveServices?.SpeechSDK?\ninterface FmodeTTSEvent{\n // 开始前\n onSpeakBefore?():void;\n // 流加载第一段音频开始\n onStreamStarted?():void;\n // 音频全部加载完成\n onAudioCompleted?():void; // ssml脚本合成\n}\n/**\n * FmodeTTS\n * 每个类,表示一次独立的语音合成服务\n */\nexport class FmodeTTS{\n private speechConfig:any;\n private audioConfig:AudioConfig|any;\n private synthesizer:any;\n private subscriptionKey: string;\n private authorizationToken:string;\n private region: string;\n eventMap:FmodeTTSEvent\n uploadServ?:NovaUploadService\n \n public isPlaying?:boolean = false;\n audioPlayer:AudioPlayer; // 普通音频播放器\n audioStream:FmPushAudioOutputStreamCallback; // 流式音频输出播放器\n\n // autoSaveChatSession:boolean = false; // 是否自动保存ChatSession对话\n\n stop(){\n this.audioPlayer&&this.audioPlayer?.stop();\n this.audioStream&&this.audioStream?.stop();\n }\n\n constructor(config:{\n region:string,\n subscriptionKey:string,\n token:string,\n },uploadServ?:NovaUploadService){\n this.uploadServ = uploadServ;\n this.subscriptionKey = config?.subscriptionKey;\n this.authorizationToken = config?.token;\n this.region = config?.region;\n if(this.subscriptionKey){ // 直接资源APIKEY,调试或后端是使用\n this.speechConfig = SpeechConfig.fromSubscription(this.subscriptionKey, this.region);\n }\n if(this.authorizationToken){ // 加载调用STSToken,客户端使用\n this.speechConfig = SpeechConfig.fromAuthorizationToken(this.authorizationToken, this.region);\n // console.log(this.authorizationToken,this.speechConfig)\n }\n // console.log(this.speechConfig)\n this.audioStream = new FmPushAudioOutputStreamCallback()\n this.audioConfig = AudioConfig.fromStreamOutput(this.audioStream);\n // this.synthesizer = new Microsoft.CognitiveServices.SpeechSDK.SpeechSynthesizer(this.speechConfig, this.audioConfig);\n this.synthesizer = new SpeechSynthesizer(this.speechConfig,\n this.audioConfig\n );\n this.audioPlayer = AudioPlayer.getInstance();\n }\n\n extractTextFromXML(inputString){\n // 正则表达式匹配 XML 标签,并提取标签之间的文本内容\n const regex = />([^<]+)/s;\n var match = inputString.match(regex);\n \n if (match) {\n return match[0];\n } else {\n return inputString;\n }\n }\n \n /**\n * 合成语言并播放\n * @param textOrSSML \n * @desc\n * 普通文本\n * SSML https://learn.microsoft.com/zh-cn/azure/ai-services/speech-service/how-to-speech-synthesis?tabs=browserjs%2Cterminal&pivots=programming-language-javascript#use-ssml-to-customize-speech-characteristics\n * @returns \n */\n public async speakAsync(textOrSSML: string,chatVoice?:Parse.Object,eventMap?:any): Promise {\n \n // 初始化本次合成语音数据对象\n if(!chatVoice){\n let ChatVoice = Parse.Object.extend(\"ChatVoice\");\n chatVoice = new ChatVoice();\n chatVoice.set(\"ssml\",textOrSSML);\n chatVoice.set(\"content\",this.extractTextFromXML(textOrSSML));\n let company = localStorage.getItem(\"company\")\n company&&chatVoice.set(\"company\",{__type:\"Pointer\",className:\"Company\",objectId:company});\n Parse.User.current()?.id&&chatVoice.set(\"user\",Parse.User.current().toPointer());\n }\n // 加载缓存中存在的音频文件\n if(!chatVoice?.get(\"voiceFile\")){\n let orList = []\n if(chatVoice?.get(\"content\")){\n orList.push({content:chatVoice?.get(\"content\")})\n }\n if(textOrSSML){\n orList.push({ssml:textOrSSML})\n }\n let query = Parse.Query.fromJSON(\"ChatVoice\",{\n include:\"voiceFile\",\n where:{\n $or:orList\n }\n });\n let exists = await query.first();\n chatVoice.set(\"voiceFile\",exists?.get(\"voiceFile\"))\n }\n\n if(chatVoice?.get(\"voiceFile\")){ // 存在音频则加载后直接播放\n this.playAudioData(chatVoice?.get(\"voiceFile\")?.get(\"url\"),chatVoice,eventMap)\n return chatVoice;\n }\n\n // 正则匹配SSML部分\n textOrSSML = this.extractSSMLContent(textOrSSML);\n // console.log(textOrSSML)\n // 播放语音\n this.isPlaying = true; // 流式播放开始\n return new Promise((resolve, reject) => {\n const startTime = Date.now();\n let speekType = 'speakTextAsync'\n if(textOrSSML?.indexOf(\"<\")>-1){\n speekType = \"speakSsmlAsync\"\n }\n\n // 音频输出流\n // Create an audio output stream\n // const audioOutputStream = Microsoft.CognitiveServices.SpeechSDK.AudioOutputStream.createPullStream();\n // Create an audio configuration using the audio output stream\n // const audioConfig = Microsoft.CognitiveServices.SpeechSDK.AudioConfig.fromStreamOutput(audioOutputStream);\n\n // 播放组件\n // Get the audio data from the callback and create a Blob\n // const audioBlob = audioOutputStream.audioBlob();\n // const audioUrl = URL.createObjectURL(audioBlob);\n // const audioElement = new Audio(audioUrl);\n // console.log(textOrSSML)\n textOrSSML = this.fixMarkdownChar(textOrSSML)\n this.eventMap?.onSpeakBefore && this.eventMap?.onSpeakBefore()\n this.synthesizer[speekType](\n textOrSSML,\n result => {\n /**\n * \n * @desc\n * {\n privAudioData: undefined\n privAudioDuration: undefined\n privErrorDetails: \"Unable to contact server. StatusCode: 1006,\\n wss://eastasia.tts.speech.microsoft.com/cognitiveservices/websocket/v1 Reason: undefined\"\n privProperties: PropertyCollection {privKeys: Array(1), privValues: Array(1)}\n privReason: 1\n privResultId: \"539694CFA6CB4BAD97F90AF76E608E69\"\n audioData: (...)\n audioDuration: (...)\n errorDetails: (...)\n properties: (...)\n reason: (...)\n resultId: (...)\n }\n */\n // console.log(result)\n // console.log(result.resultId)\n // console.log(result.reason)\n console.log(result)\n if (result.reason === ResultReason.SynthesizingAudioStarted) {\n this.isPlaying = true;\n }\n if (result.reason === ResultReason.SynthesizingAudioCompleted) {\n this.eventMap?.onAudioCompleted && this.eventMap?.onAudioCompleted() \n\n const endTime = Date.now();\n let audioData = result?.audioData;\n chatVoice.set(\"duration\",Number(result?.audioDuration)/10000)\n this.playAudioData(audioData,chatVoice,eventMap)\n console.log(`Audio synthesis finished. Duration: ${endTime - startTime} ms`);\n setTimeout(() => {\n this.isPlaying = false;\n eventMap?.onStop()&&eventMap?.onStop();\n }, 2000);\n resolve(chatVoice);\n } else {\n reject(`Speech synthesis failed. Reason: ${result.errorDetails}`);\n }\n },\n error => {\n reject(`Error occurred during synthesis: ${error}`);\n }\n );\n });\n }\n\n // 把打断时的事件\n onBreak(options:{\n playedTime:string // 已播放时长\n playedText:string // 已播放文本\n leftText:string // 剩余文本\n }){\n \n }\n\n fixMarkdownChar(md){\n return md.replaceAll(\"*\",\"\")\n }\n async playAudioData(audioData:string,chatVoice:Parse.Object,eventMap:any){\n let url\n console.log(\"audioData\",audioData)\n if(audioData?.indexOf&&audioData?.indexOf(\"http\")>=-1){ // 播放URL\n url = audioData\n }else{ // 播放音频数据\n let blob = new Blob([audioData],{type:'audio/wav'});\n url = URL.createObjectURL(blob);\n // console.log(\"play stream\",url)\n this.uploadAndSaveVoice(blob,chatVoice)\n return\n }\n let audioPlayer = this.audioPlayer;\n\n // 仅URL需要播放,tts合成会自动播放\n // let audio = new Audio(url)\n \n\n eventMap?.onStart && eventMap?.onStart(chatVoice);\n this.isPlaying = true;\n audioPlayer.setAudioEvent(\"onloadeddata\", ()=>{\n let duration = audioPlayer.duration * 1000;\n console.log(\"duration\",duration);\n if(!chatVoice?.get(\"duration\")){\n chatVoice?.set(\"duration\",duration);\n chatVoice?.save();\n }\n eventMap?.onLoaded && eventMap?.onLoaded(audioPlayer);\n })\n\n console.log(\"event setting\")\n\n audioPlayer.setAudioEvent(\"onabort\", ()=>{\n this.isPlaying = false;\n eventMap?.onStop && eventMap?.onStop();\n })\n audioPlayer.setAudioEvent(\"onerror\", ()=>{\n this.isPlaying = false;\n eventMap?.onStop && eventMap?.onStop();\n })\n audioPlayer.setAudioEvent(\"onpause\", ()=>{\n this.isPlaying = false;\n eventMap?.onStop && eventMap?.onStop();\n })\n audioPlayer.setAudioEvent(\"onended\", ()=>{\n this.isPlaying = false;\n eventMap?.onStop && eventMap?.onStop();\n })\n audioPlayer.setAudioEvent(\"onclose\", ()=>{\n this.isPlaying = false;\n eventMap?.onStop && eventMap?.onStop();\n })\n\n console.log(\"playAudio\",url)\n let playAudio = ()=>{\n audioPlayer.play(url).then(()=>{ // 防止用户无交互不能默认播放\n }).catch(()=>{\n setTimeout(() => {\n console.log(\"playAudio\")\n playAudio();\n }, 200);\n })\n }\n playAudio();\n }\n async uploadAndSaveVoice(blob,chatVoice){\n console.log(\"blob\",blob)\n if(this.uploadServ){\n let id = chatVoice?.id || this.uploadServ?.genMd5(chatVoice?.get(\"content\")||chatVoice?.get(\"ssml\"))\n let now = new Date();\n let filename = id + now.getFullYear()+(now.getMonth()+1)+now.getDate()+now.getHours()+now.getMinutes()+now.getSeconds() + \".wav\"\n let file = new File([blob], filename, { type: 'audio/wav' });\n let fileResult = await this.uploadServ.upload(file,(res)=>{\n console.log(res) // 上传进度,可以同步更新页面上传百分比\n });\n let attachPointer = {__type:\"Pointer\",className:\"Attachment\",objectId:fileResult?.id}\n if(attachPointer?.objectId){\n chatVoice.set(\"voiceFile\",attachPointer)\n chatVoice = await chatVoice.save();\n }\n return fileResult?.url\n }\n return null\n }\n}","import { bufferTime, concatMap, Observable, Observer,delay, finalize } from \"rxjs\"\n// var bufferTime:any, concatMap:any, Observable:any, Observer:any,delay:any, finalize:any,Observer:any\nimport Parse from \"parse\";\nimport { AgentPrompt } from \"../../agent\";\nimport { NavController } from \"@ionic/angular\";\nimport { FmodeTTS } from \"../../voice/tts\";\nimport { NovaCloudService } from \"../../../nova-cloud\";\nimport { NovaUploadService } from \"../../../storage/service-upload/nova-upload.service\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { ElementRef } from \"@angular/core\";\n// var Parse:any = {}\n// const API_BASE:string = \"http://127.0.0.1:7337/api/apig/aigc/gpt\"\nconst API_BASE:string = \"https://server.fmode.cn/api/apig/aigc/gpt\"\n// const API_BASE:string = \"https://test.fmode.cn/api/apig/aigc/gpt\"\n\nconst agentPrompt = new AgentPrompt();\nconst PromptTplTalkSSMLOutputCode = \"talk-ssml-output-tpl\";\nconst PromptTplTalkTextSSMLCode = \"talk-text-ssml-tpl\";\nexport interface FmodeChatMessageVoice{\n id:string,\n duration?:number,\n ssml?:string,\n voiceUrl?:string,\n}\nexport interface FmodeChatEventMap {\n // 文本补全事件\n onComplete?(FmodeChatMessage):void;\n // 语音合成事件\n onSSMLComplete?(FmodeChatMessageVoice):void; // ssml脚本合成\n} \n\nexport interface FmodeChatVoiceConfig{\n voice:string // 声音源角色代码\n autoTalk:boolean // 自动语音回复\n welcome:{\n enabled:true // 开启欢迎语音\n }\n}\n\nexport function getMessageContentText(content:any|string|Array){\n let text = \"\"\n if(typeof content == \"string\") text = content\n if(typeof content == \"object\") text = content?.find(item=>item?.text)?.text || \"\"\n return text\n}\nexport function getMessageImageUrl(content:any|string|Array){\n if(typeof content == \"object\") return content?.find(item=>item?.image_url)?.image_url?.url || \"\"\n return null\n }\n\nexport interface ChatImageContentItem{type:string,text?:string,image_url?:{url:string}}\n\nexport interface FmodeChatMessage{\n role:string // user 用户 assistant AI system 系统\n content:string|Array // 消息内容\n json?:any\n hidden?:boolean\n createdAt?:Date // 创建时间\n complete?:boolean // Stream流式加载完成\n voice?:FmodeChatMessageVoice\n /**AI回复消息字段 */\n cid?:string // AI补全内容,包含cid,指向数据库 chatcmpl-uDfGFOwIHyi4vM9LkB6kVxcg4i1DZ\n}\n\n/**\n * FmodeChat 聊天对话类\n * @public\n */\nexport class FmodeChat{\n\n title:string\n sessionId:string\n ChatSession = Parse.Object.extend(\"ChatSession\")\n chatSession:Parse.Object\n role:any\n messageList:FmodeChatMessage[] = [{role:\"system\",content:\"系统提示:AI仅供参考\"}]\n latestAIResponse:string|undefined = ``\n chatServ:any\n public userInput:string = ``;\n public userImage:string = ``;\n isDirect:boolean = false;\n\n /**\n * 函数生命周期\n */\n onChatSaved:(chat:FmodeChat)=>void\n onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>void\n onUserSend:(chat:FmodeChat,message:FmodeChatMessage)=>boolean|Promise\n onClose:(chat:FmodeChat)=>boolean|Promise\n // onUserInput:(chat:FmodeChat,message:FmodeChatMessage)=>boolean|Promise\n\n // 界面功能显示控制\n hideShare:boolean = false;\n hideModalSelect:boolean = false;\n hideInputPreview:boolean = false;\n\n /** \n * 虚拟形象展示状态\n */\n isAvatarShow:boolean = false;\n avatarMode:string = \"\";\n avatarConfig:any|undefined;\n showAvatar(){\n this.avatarConfig = this.role?.get(\"avatarConfig\")\n if(this.avatarConfig){\n this.isAvatarShow = true;\n if(this.avatarConfig?.image){\n this.avatarConfig.image.waiting = this.avatarConfig.image.waiting || this.role?.get(\"thumb\") || this.role?.get(\"avatar\")\n this.avatarMode = \"image\"\n }\n if(this.avatarConfig?.video){\n this.avatarConfig.video.waiting = this.avatarConfig.video.waiting\n this.avatarMode = \"video\"\n }\n }\n }\n\n /**\n * 预置提示词弹窗是否展示\n */\n isPromptModalOpen:boolean = false;\n isPromptMessageAreaShow:boolean = true;\n promptList:any = []\n\n /**\n * 输入按钮区域\n */\n focusUserInput:Function = ()=>{}\n navCtrl:NavController\n leftButtons:Array = [\n // 提示 当角色配置预设提示词时 显示\n {title:\"灵感\",icon:\"color-wand-outline\",onClick:()=>{\n this.isPromptModalOpen = true\n },show:()=>{\n return this?.promptList?.length\n }},\n {title:\"角色\",icon:\"people-outline\",onClick:()=>{\n this.navCtrl?.navigateRoot(\"/chat/pro/mask\");\n },show:()=>{return true}},\n {title:\"呼叫\",icon:\"call-outline\",onClick:()=>{\n this.chatServ?.callRole(this.role)\n },show:()=>{\n return this?.role?.get('voiceConfig');\n }},\n ]\n\n\n /**\n * 是否开启语音消息模式(单次)\n */\n isVoiceInputMode:boolean = false;\n isTexting:boolean = false;\n\n /**\n * 是否开启实时对话模式(实时)\n * @desc\n * 开启ssml system提示词\n * 开启回答文本除xml显示模式\n */\n voiceConfig:FmodeChatVoiceConfig|undefined\n isTalkMode:boolean = false;\n SSMLRoleVoice:string = \"zh-CN-XiaoxiaoNeural\";\n\n /**\n * 滚动至消息区域底部方法\n * @desc 通过chat-panel等聊天面板,赋值该方法\n */\n scrollComp:ElementRef;\n // scrollToBottom:Function;\n scrollToBottom(comp?:ElementRef){\n comp = comp || this.scrollComp;\n // console.log(comp)\n if(comp?.nativeElement?.scrollHeight){\n comp.nativeElement.scrollTop = comp.nativeElement.scrollHeight\n }\n }\n\n /**\n * 依赖服务\n */\n ncloud:NovaCloudService;\n uploadServ:NovaUploadService;\n\n constructor(\n sessionId:string,role?:Parse.Object,chatSession?:Parse.Object,chatServ?:any,\n navCtrl?:NavController,\n ncloud?:NovaCloudService,\n uploadServ?:NovaUploadService,\n ){\n this.chatServ = chatServ\n this.role = role\n this.sessionId = sessionId\n this.navCtrl = navCtrl\n this.ncloud = ncloud\n this.uploadServ = uploadServ\n if(chatSession?.id){\n this.chatSession = chatSession;\n this.messageList = this.chatSession.get(\"messageList\");\n this.sessionId = chatSession?.id;\n }\n if(this.role?.id){\n this.voiceConfig = this.role?.get(\"voiceConfig\")\n if(this.voiceConfig?.autoTalk){\n this.isTalkMode = true;\n this.isDirect = true;\n }\n }\n }\n /**\n * 会话Avatar控制\n */\n playAnimation = (animName:string)=>{\n console.log(animName)\n return\n }\n welcome = async ()=>{\n let msglist = this.messageList?.filter(item=>item?.role==\"assistant\");\n if(msglist?.length) return // 已有对话不开场问候\n\n let user = Parse.User.current();\n let person = await this.loadSelf(\"Person\",\"userVerify\")\n let profile = await this.loadSelf(\"Profile\",\"user\")\n let userName = user?.get(\"nickname\") || profile?.get(\"name\") || user?.get(\"realname\") || user?.get(\"name\");\n let personName = person?.get(\"name\") || person?.get(\"userVefiry\")?.get(\"realname\") || person?.get(\"userVefiry\")?.get(\"nickname\")\n if(person?.get(\"userVerify\")?.id == user?.id){\n personName = \"您\" // 当本人时,称呼角色为您\n }\n // 问候语/首个话题\n // 单个问候语直接加载\n let tpl = this.role.get(\"voiceConfig\")?.welcome?.prompt\n // 多条问候语随即加载\n if(this.role.get(\"voiceConfig\")?.welcome?.promptList?.length){\n let tplList = this.role.get(\"voiceConfig\")?.welcome?.promptList;\n let randomIndex = Math.floor(Math.random() * tplList.length);\n tpl = tplList[randomIndex];\n }\n\n if(!tpl) return // 无模板则返回\n let welcomeContent = await PromptTemplate.fromTemplate(tpl,{\n templateFormat:\"mustache\"\n }).format({\n name:userName, // 用户称呼\n userName:userName, // 用户称呼\n personName:personName, // 角色称呼\n timeOfDay:this.getTimeOfDay()\n })\n // let callName = name?`${name},`:\"\";\n // let callTime = `${this.getTimeOfDay()}好`;\n // let welcomeContent = `${callName}${callTime},期待聆听您的人生故事,想和我聊些什么呢?`;\n\n // 生成ChatVoice并播放\n let voice = await this.getVoiceByContentText(welcomeContent);\n let message = {\n role:\"assistant\",\n voice: voice,\n content:welcomeContent,\n complete:true\n }\n this.voiceMap[voice?.id]\n this.playChatVoice(this.voiceMap[voice?.id])\n this.messageList.push(message)\n }\n getTimeOfDay() {\n const now = new Date();\n const hours = now.getHours();\n if (hours >= 5 && hours < 12) {\n return \"早上\";\n } else if (hours >= 12 && hours < 14) {\n return \"中午\";\n } else if (hours >= 14 && hours < 18) {\n return \"下午\";\n } else {\n return \"晚上\";\n }\n }\n self:{\n Person?:Parse.Object|undefined\n Profile?:Parse.Object|undefined\n } = {}\n async loadSelf(className,userKey){\n if(this.self[className]) return this.self[className]\n let user = Parse.User.current();\n let query = new Parse.Query(className);\n query.include(userKey)\n query.equalTo(userKey,user?.id);\n this.self[className] = await query.first();\n return this.self[className]\n }\n\n\n /**\n * 对话模型提示词\n */\n async loadTalkSystemPrompt(role:Parse.Object){\n if(!this.isTalkMode) return\n if(!role) return\n // 加载声音模型:默认为晓晓\n if(role?.get('gender')=='男'){\n this.SSMLRoleVoice = \"zh-CN-YunyeNeural\"\n }else{\n this.SSMLRoleVoice = \"zh-CN-XiaoxiaoNeural\"\n }\n this.SSMLRoleVoice = role?.get(\"voiceConfig\")?.voice || this.SSMLRoleVoice \n let SSMLPromptTemplate = await agentPrompt.getFormatTpl(PromptTplTalkSSMLOutputCode,{\n SSMLRoleVoice: this.SSMLRoleVoice, // SSML \n })\n\n let prompt = role.get(\"prompt\") || \"请你扮演飞码AI的人工智能专家。\"\n prompt += SSMLPromptTemplate;\n let promptMsg:FmodeChatMessage = {role:\"user\",content:prompt,hidden:true}\n\n // 查重\n let content = this.messageList?.map(item=>item?.content).join()\n if(content.indexOf(prompt)>-1){\n // 提示词已经存在\n return\n }\n // 补全提示词\n let systemIndex = this.messageList?.findIndex(item=>item?.role==\"system\");\n let insertIndex = systemIndex+1\n this.messageList.splice(insertIndex,0,promptMsg)\n return \n }\n /**\n * 角色提示词\n * @returns \n */\n loadRolePrompt(){\n // 角色提示\n let prompt = this.role?.get(\"prompt\")\n let promptMsg:FmodeChatMessage = {role:\"user\",content:prompt,hidden:true}\n if(!prompt) return // 无提示词无需添加\n // 内容检查\n let content = this.messageList?.map(item=>item?.content).join()\n if(content.indexOf(prompt)>-1){\n // 提示词已经存在\n return\n }\n // 补全提示词\n let systemIndex = this.messageList?.findIndex(item=>item?.role==\"system\");\n let insertIndex = systemIndex+1\n this.messageList.splice(insertIndex,0,promptMsg)\n // console.log(this.messageList)\n }\n /**\n * 发送消息\n * @param message \n * @param imageUrl \n */\n async sendMessage(message:string=\"FmodeAiTest测试问题\",imageUrl?:string,onComplete?:Function,eventMap?:FmodeChatEventMap,voice?:FmodeChatMessageVoice){\n // 发消息自动置底\n this.scrollToBottom&&this.scrollToBottom();\n\n // 为消息列表补全提示词\n // await this.loadTalkSystemPrompt(this.role);\n this.isPromptMessageAreaShow = false; // 发送第一条消息后,关闭提示看板\n this.loadRolePrompt();\n // 用户输入消息,添加到历史消息清单中\n if(!imageUrl){ // 纯文本\n // console.log(\"纯文本\")\n let msg:FmodeChatMessage = {\n role:\"user\",\n content:message,\n complete:true,\n createdAt:new Date()\n }\n if(voice){\n msg.voice = {id:voice?.id,duration:voice?.duration}\n }\n this.messageList.push(msg)\n }else{ // 带图片\n let msg:FmodeChatMessage = {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"image_url\",\n \"image_url\": {\"url\":imageUrl},\n },\n {\n \"type\": \"text\", \n \"text\": message\n },\n ],\n complete:true,\n createdAt:new Date()\n }\n if(voice){\n msg.voice = {id:voice?.id}\n }\n this.messageList.push({\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"image_url\",\n \"image_url\": {\"url\":imageUrl},\n },\n {\n \"type\": \"text\", \n \"text\": message\n },\n ],\n complete:true,\n createdAt:new Date()\n })\n }\n // 创建并发起一条新的消息补全\n // console.log(\"send\",this.messageList)\n let completion = new FmodeChatCompletion(this.fixMessageList(this.messageList),{\n model:this.chatServ?.currentModel?.get(\"code\") || \"fmode-4.5-128k\"\n })\n\n // 生命周期:消息获取完成\n if(this.onUserSend){\n let sendResult = await this.onUserSend(this,this.messageList[this.messageList?.length-1])\n if(!sendResult) return;\n }\n \n this.userInput = \"\";\n this.userImage = \"\";\n // console.log(this.chatServ?.currentModel?.toJSON())\n // 持续更新事件推送的消息体内容至消息列表\n let isDirect = this.isDirect || false\n if(this.isTalkMode){\n isDirect = true\n }\n let send$ = completion.sendCompletion({\n isDirect:isDirect,\n onComplete:onComplete||null\n }).pipe(finalize(async ()=>{ // 管道finalize替代了旧版的(complete)=>{}\n\n if(this.isTalkMode){\n let content = this.messageList[completion.indexOfList]?.content;\n let voice = await this.getVoiceByContentText(content,eventMap);\n eventMap?.onSSMLComplete&&eventMap?.onSSMLComplete(voice);\n this.messageList[completion.indexOfList].voice = voice;\n this.playChatVoice(this.voiceMap[voice?.id])\n }\n\n this.messageList[completion.indexOfList].complete = true\n })).subscribe(message=>{\n this.messageList[completion.indexOfList] = message;\n this.latestAIResponse = this.getContentText(message?.content)\n \n let savedList = this.chatSession?.get(\"messageList\")?.length;\n // 生命周期:会话创建后,有新消息时,创建保存会话\n if(this.messageList?.length > savedList){\n // console.log(\"cycle新会话\")\n this.saveChatSession();\n }\n\n if(message?.complete){\n // 生命周期:消息获取完成\n this.onMessage&&this.onMessage(this,this.messageList[this.messageList?.length-1])\n // 消息发送完成后,保存聊天记录\n this.saveChatSession(); \n send$.unsubscribe();\n }\n // console.log(message)\n this.scrollToBottom&&this.scrollToBottom();\n })\n }\n\n getVoiceByContentText(content:string|ChatImageContentItem[],eventMap?:FmodeChatEventMap,promptEnabled:boolean=false):Promise{\n let contentText = this.getContentText(content);\n let ChatVoice = Parse.Object.extend(\"ChatVoice\");\n let chatVoice = new ChatVoice();\n let contentSSML = ``;\n this.SSMLRoleVoice = this.role?.get(\"voiceConfig\")?.voice || this.SSMLRoleVoice \n\n return new Promise(async (resolve,reject)=>{\n let resolveChatVoice = async ()=>{\n chatVoice.set(\"content\",contentText);\n chatVoice.set(\"ssml\",contentSSML);\n chatVoice.set(\"role\",\"assistant\");\n let company = localStorage.getItem(\"company\")\n company&&chatVoice.set(\"company\",{__type:\"Pointer\",className:\"Company\",objectId:company});\n Parse.User.current()?.id&&chatVoice.set(\"user\",Parse.User.current().toPointer());\n this.chatSession?.id&&chatVoice.set(\"session\",this.chatSession?.toPointer());\n chatVoice = await chatVoice.save();\n this.voiceMap[chatVoice?.id] = chatVoice;\n resolve({\n id:chatVoice?.id,\n })\n }\n /**\n * 方法一:高级语音直接读文本,速度快,但细节情绪标记不足。\n */\n if(promptEnabled==false){\n contentSSML = `${contentText}`\n resolveChatVoice()\n }\n /**\n * promptEnabled == true\n * 方法二:通过大模型再次拼接SSML脚本,实现更优质的语音标记,但是生成时间太慢\n */\n if(promptEnabled==true){\n // 拼接Prompt\n let TextSSMLPrompt = await agentPrompt.getFormatTpl(PromptTplTalkTextSSMLCode,{\n content:contentText, // 文本内容\n SSMLRoleVoice: this.SSMLRoleVoice, // SSML 演说者\n })\n\n // 生成SSML\n let completion = new FmodeChatCompletion(this.fixMessageList([{\n role:\"user\",\n content:TextSSMLPrompt\n }]),{\n model:this.chatServ?.currentModel?.get(\"code\") || \"fmode-4.5-128k\"\n })\n let send$ = completion.sendCompletion({\n isDirect:true,\n }).subscribe(async message=>{\n if(message?.complete){\n contentSSML = this.getContentText(message?.content)\n resolveChatVoice()\n }\n })\n }\n \n })\n }\n getContentText(content:string|ChatImageContentItem[]){\n if(typeof content == \"string\"){\n return content\n }else{\n return content?.[0]?.text || ``\n }\n }\n /**\n * TTS - 语音合成\n * \n */\n async initTTS():Promise{\n // if(this.tts) return // 待明确sts有效期和次数进行优化,避免每次重复获取\n let config:any = await this.ncloud.apig(\"voice/tts/token\",{company:localStorage.getItem(\"company\")})\n // 有TTS资源,使用情绪合成\n console.log(config)\n if(config?.token){\n let tts = new FmodeTTS(config,this.uploadServ);\n return tts\n }else{\n return null\n }\n }\n voiceMap:any = {}\n VoiceTTSMap:{\n [key:string]:FmodeTTS\n } = {}\n stopPlayingVoice(){\n Object.values(this.VoiceTTSMap).forEach(tts=>{\n if(tts?.isPlaying){\n tts?.stop();\n }\n })\n }\n async playChatVoice(voice:Parse.Object,eventMap?:any):Promise{\n let tts = await this.initTTS();\n // tts.autoSaveChatSession = autoSaveChatSession;\n // console.log(this.tts)\n if(tts){\n try{\n // console.log(textOrSSML)\n // 完整的消息,通过TTS合成进行讲话\n this.playAnimation(\"talking\") // Talking动画,暂时用wating代替\n tts.speakAsync(voice?.get(\"ssml\"),voice,{\n onStart:(chatVoice:any)=>{\n eventMap?.onStart&&eventMap?.onStart(chatVoice); // 事件传递\n },\n onLoaded:(audio:any)=>{\n eventMap?.onLoaded&&eventMap?.onLoaded(audio); // 事件传递\n },\n onStop: ()=>{\n eventMap?.onStop&&eventMap?.onStop(); // 事件传递\n this.playAnimation(\"waiting\") // Talking动画,暂时用wating代替\n }\n })\n }catch(ttserr){\n console.error(ttserr)\n }\n this.VoiceTTSMap[voice.id] = tts;\n return tts\n }\n return null\n\n // 无TSS资源,调用Edge Speech\n }\n /**\n * 保存单次会话\n */\n async saveChatSession(){\n if(this.sessionId == \"new\"){\n this.chatSession = new this.ChatSession()\n }\n\n this.chatSession.set(\"title\",this.genTitle())\n this.chatSession.set(\"role\",this.role?.toPointer())\n this.chatSession.set(\"messageList\",this.messageList)\n this.chatSession.set(\"user\",Parse.User.current()?.toPointer())\n this.chatSession = await this.chatSession.save();\n\n this.onChatSaved&&this.onChatSaved(this);\n \n this.sessionId = this.chatSession?.id\n if(this.sessionId){ \n // 修改URL地址为sessionId,方便分享或切换 角色页面 => 会话页面\n let newHref = `${window.location.origin}/chat/pro/chat/${this.sessionId}`\n if(window.location?.pathname?.indexOf(\"chat/session\")>-1){\n newHref = `${window.location.origin}/chat/session/chat/${this.sessionId}`\n }\n newHref = this.getInviteUrl(newHref)\n window.history.replaceState(null, null, newHref+window.location.search);\n // 修改最新条chatList数据\n let newChat = {\n sid:this.chatSession?.id,\n rid:this.role?.id,\n name:this.role?.get('name'),\n message:this.chatSession?.get('messageList')?.[this.chatSession?.get('messageList')?.length-1]?.content?.slice(0,20),\n latest:this.chatSession?.createdAt\n }\n if(!this.chatServ?.chatList?.length) this.chatServ.chatList = []\n let index = this.chatServ?.chatList?.find(item=>item?.sid==newChat?.sid)\n if(index>-1){\n this.chatServ.chatList[index] = newChat;\n } else{\n this.chatServ?.chatList.unshift(newChat)\n }\n\n }\n }\n getInviteUrl(url){\n let u = new URL(url);\n let id = Parse.User?.current()?.id\n // 附加invite参数\n u.searchParams.set(\"invite\",id)\n return u.href\n }\n // 根据聊天内容及问题,生成标题\n genTitle(){\n if(this.title) return this.title\n let content:string|Array = this.messageList.find(item=>item.role==\"user\")?.content\n if(typeof content==\"string\"){ // 截图文本内容文字部分\n this.title = content?.slice(0,15) || \"\"\n }\n if(typeof content==\"object\"){ // 截图复合内容文字部分\n this.title = content?.find(item=>item?.text)?.text || \"\"\n }\n return this.title\n }\n fixMessageList(messages:FmodeChatMessage[]){\n return messages.map(msg=>{return {role:msg.role,content:msg.content}})\n }\n\n nowStr(){\n let now = new Date();\n return `${now.getFullYear()}/${now.getMonth()+1}/${now.getDate()} ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`\n }\n \n}\n\n/**\n * FmodeChatCompletion 文本补全类\n * @public\n */\nexport class FmodeChatCompletion{\n indexOfList:number\n model:string\n messages:FmodeChatMessage[] // 补全前提示词列表\n content:string = \"\" // 本次接收消息结果\n contentBuffer:string[] = []\n contentPusher:any\n isCompleted:boolean = false;\n constructor(\n messages:FmodeChatMessage[],options?:{\n model?:string\n }\n ){\n this.indexOfList = Number(messages.length)\n this.messages = messages\n this.model = options?.model || \"fmode-4.5-128k\"\n }\n /**\n * @param options\n * @param options.isDirect 是否不等待逐字获取,直接完成内容推送\n * @param options.intTime 是否不等待逐字获取,直接完成内容推送\n * @returns \n */\n sendCompletion(options:{\n isDirect?:boolean,\n intTime?:number,\n onComplete?:Function\n }={}):Observable{\n options.intTime = options?.intTime || 50 // 按毫秒逐字推送\n options.isDirect = options?.isDirect || false\n if(options?.isDirect) options.intTime = 1\n\n let that = this;\n let opts = {\n \"messages\":this.messages,\n \"stream\":true,\n \"model\":this.model,\n \"temperature\":0.5,\n \"presence_penalty\":0,\n \"frequency_penalty\":0\n }\n // console.log(opts)\n let $messageReceiver = new Observable((observer: Observer) => {\n let subscription = RequestFmodeChatApi(\"/v1/chat/completions\", opts)\n .subscribe(data => {\n // Handle each chunk of data\n /** Chunk文本数据格式如下:\n 正常消息:\n 'data: {\"id\":\"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv\",\"object\":\"chat.completion.chunk\",\"created\":1696770162,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"本提示词仅用于测试。\"},\"finish_reason\":null}]}',\n 终止原因:\n 'data: {\"id\":\"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv\",\"object\":\"chat.completion.chunk\",\"created\":1696770162,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{},\"finish_reason\":\"stop\"}]}',\n 结束消息:\n 'data: [DONE]'\n */\n let chunk = String(data);\n // Check if the completion message is received\n // console.log(chunk)\n if (chunk == 'data: [DONE]') { \n this.isCompleted = true; // 标记完成 => 等待interval推送\n // console.log(options?.isDirect,this.isCompleted)\n if(options?.isDirect && this.isCompleted){\n observer.next({\n role:\"assistant\",\n // cid:chunkjson?.['id'],\n content:this.content,\n complete:true, // 推送完成\n createdAt:new Date()\n })\n subscription.unsubscribe(); // Unsubscribe when done\n options?.onComplete&&options.onComplete({\n role:\"assistant\",\n // cid:chunkjson?.['id'],\n content:this.content,\n complete:true, // 推送完成\n createdAt:new Date()\n })\n observer.complete();\n }\n }\n // console.log(chunk)\n if(chunk.indexOf(\"data:\\ {\")>-1){\n let chunkjson = chunkToJson(chunk)\n // console.log(chunk)\n // console.log(chunkjson?.choices?.[0]?.delta)\n let words = chunkjson?.choices?.[0]?.delta?.content || \"\"\n this.contentBuffer.push(words);\n\n // 消息返回模式:定时器推送,模拟逐字输出\n if(options?.isDirect){\n this.content += (words || \"\");\n \n // 默认累加消息结果\n if(!this.isCompleted){\n observer.next({\n role:\"assistant\",\n cid:chunkjson?.['id'],\n content:this.content,\n createdAt:new Date()\n })\n }\n }\n if(!options?.isDirect&&!this.contentPusher){\n this.contentPusher = setInterval(()=>{\n if(this.isCompleted && this.contentBuffer?.length==0){ // 推送完毕,清除计时器\n observer.next({\n role:\"assistant\",\n cid:chunkjson?.['id'],\n content:this.content,\n complete:true, // 推送完成\n createdAt:new Date()\n })\n subscription.unsubscribe(); // Unsubscribe when done\n clearInterval(this.contentPusher)\n observer.complete();\n }\n if(this.contentBuffer?.length>=0){\n if(this.contentBuffer?.length>0){\n this.content += this.contentBuffer.shift()\n }\n observer.next({\n role:\"assistant\",\n cid:chunkjson?.['id'],\n content:this.content,\n createdAt:new Date()\n })\n }\n },options?.intTime)\n }\n // console.log(this.content)\n \n }\n\n });\n })\n return $messageReceiver.pipe(\n bufferTime(100), // 每100ms收集消息\n concatMap(messages => messages), // 使用 concatMap 逐个发送消息\n delay(200) // 延迟200ms输出每条消息\n )\n }\n\n}\n\nfunction chunkToJson(chunk){\n let chunkjson:any\n try{\n chunkjson = JSON.parse(chunk.replaceAll(\"data:\\ \",\"\"));\n }catch(errdj){\n console.error(errdj)\n }\n return chunkjson || {}\n}\nfunction RequestFmodeChatApi(apipath, body, method = \"POST\") {\n return new Observable((observer: Observer) => {\n let url = API_BASE + apipath;\n let API_TOKEN = Parse.User.current()?.getSessionToken() || localStorage.getItem(\"FMODE_AI_TOKEN\");\n // 通过body传递token参数,避免no-cors模式下Authoriztion头部无效\n let AUTH_TOKEN = `Bearer ${API_TOKEN}`\n body.token = AUTH_TOKEN;\n if(body) body = JSON.stringify(body)\n fetch(url, {\n \"headers\": {\n // \"Authorization\": AUTH_TOKEN,\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"Cache-Control\": \"no-cache\"\n },\n \"body\": body || null,\n \"method\": method,\n \"credentials\":\"omit\",\n \"mode\": \"cors\"\n }).then(response => {\n let isStream = true || response.headers?.get(\"Content-Type\")?.indexOf(\"text/event-stream\") > -1\n let remainingData = ``;\n\n function processData(data) {\n let combinedData = remainingData + data;\n let messages = combinedData.split('\\n');\n \n if(messages?.length>1){ // 至少分割2条消息时进行处理\n // 处理每个完整的消息\n for (let i = 0; i < messages.length - 1; i++) {\n let message = messages[i];\n observer.next(message)\n }\n\n // 保存最后一个不完整的消息\n remainingData = messages[messages.length - 1];\n }\n }\n\n if (isStream) {\n let greader = response.body?.getReader();\n const decoder = new TextDecoder();\n\n let rstream = new ReadableStream({\n start(controller) {\n function read() {\n greader.read().then(({ done, value }) => {\n if (done) {\n controller.close();\n observer.complete(); // Complete the observer when stream processing is done\n return;\n }\n controller.enqueue(value);\n read();\n });\n }\n\n read();\n }\n });\n\n let reader = rstream.getReader();\n\n function processStream({ done, value }) {\n if (done) {\n return;\n }\n\n let text = decoder.decode(value)\n processData(text) // Emit each chunk of data\n reader.read().then(processStream);\n }\n\n reader.read().then(processStream);\n }\n })\n .catch(error => observer.error(error)); // Handle any errors\n\n // Return the subscription logic\n return () => {\n // Clean up logic, if needed\n };\n });\n }\n \n function JsonToFormData(json) {\n const formData = new FormData();\n \n function appendFormData(data, path = '') {\n if (Array.isArray(data)) {\n data.forEach((value, index) => {\n appendFormData(value, `${path}[${index}]`);\n });\n } else if (typeof data === 'object' && data !== null) {\n Object.keys(data).forEach(key => {\n const newPath = path ? `${path}.${key}` : key;\n appendFormData(data[key], newPath);\n });\n } else {\n formData.append(path, data);\n }\n }\n \n appendFormData(json);\n \n return formData;\n }","import Parse from 'parse';\n\nexport async function ncloudApi(url, body, method = \"POST\",serverURL:string) {\n url = serverURL + url;\n try {\n const response = await fetch(url, {\n method: method,\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(body),\n mode: 'cors',\n credentials: 'omit' // 不发送凭据\n });\n \n const result = await response.json();\n if (result && (result.code === 200 || result.code === 1)) {\n return result.data; // 返回数据\n } else {\n return null; // 处理非成功状态\n }\n } catch (err) {\n throw err; // 抛出错误\n }\n}\n\nexport async function novaql(sql, params,serverURL) {\n const url = serverURL + '/novaql/select';\n let options:any = { sql: sql };\n if (params && params.length > 0) {\n options.params = JSON.stringify(params);\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(options),\n mode: 'cors',\n credentials: 'omit' // 不发送凭据\n });\n\n const result = await response.json();\n if (result && result.code === 200) {\n return result.data; // 返回数据\n }\n } catch (err) {\n throw err; // 抛出错误\n }\n}\n\nexport async function apig(url, body, method = \"POST\",apigURL?:string) {\n localStorage.setItem(\"NOVA_APIG_SERVER\", 'aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG');\n if(!apigURL){\n apigURL = localStorage.getItem(\"NOVA_APIG_SERVER\");\n apigURL = decodeURIComponent(atob(apigURL));\n }\n url = apigURL + url;\n let user = Parse.User.current();\n\n let headers = {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${user?.getSessionToken()}`\n };\n\n try {\n let response = await fetch(url, {\n method: method,\n headers: headers,\n body: body ? JSON.stringify(body) : null,\n mode: 'cors',\n credentials: 'omit' // 如果需要发送 cookies,可以改为 'include'\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n let result = await response.json();\n\n if (result && (result.code === 200 || result.code === 1 || result.code === 0)) {\n return result.data;\n } else {\n return null;\n }\n } catch (error) {\n console.error('请求出错', error);\n throw error; // 重新抛出错误以便调用者处理\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient,HttpHeaders } from \"@angular/common/http\";\nimport Parse from \"parse\";\nimport { apig, ncloudApi, novaql } from './ncloud-api-func';\n@Injectable({\n providedIn: 'root'\n})\nexport class NovaCloudService {\n\n serverURL = \"https://server.fmode.cn/api\"\n // serverURL = \"http://127.0.0.1:7337/api\"\n constructor(\n private http:HttpClient,\n ) { \n localStorage.setItem(\"NOVA_APIG_SERVER\",'aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG')\n }\n\n novaql(sql:string,params:Array){\n return novaql(sql,params,this.serverURL)\n }\n apig(url:string,body:any,method:string=\"post\"){\n return apig(url,body,method);\n }\n apigTest(url:string,body:any,method:string=\"post\"){\n let apigURL = \"https://test.fmode.cn/api/apig/\"\n return apig(url,body,method,apigURL)\n }\n api(url:string,body:any,method:string=\"post\"):Promise<{code:number|string,data?:any,mess?:string}>{\n return ncloudApi(url,body,method,this.serverURL)\n }\n searchParse(url?:string):URLSearchParams{\n url = url || location.href;\n let u = new URL(url);\n return u.searchParams;\n // let resultObj = {};\n // if (search && search.length > 1) {\n // search = search.substring(1);\n // let items = search.split(\"&\");\n // for (let index = 0; index < items.length; index++) {\n // if (!items[index]) {\n // continue;\n // }\n // let kv = items[index].split(\"=\");\n // resultObj[kv[0]] = typeof kv[1] === \"undefined\" ? \"\" : kv[1];\n // }\n // }\n // return resultObj;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NavController, Platform } from '@ionic/angular';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CrossService {\n mobileWidth = 915;\n clientWidth:number = document.body.clientWidth;\n getMenuType(){\n this.clientWidth = document.body.clientWidth;\n this.onResizeScreen()\n return this.navMenuType\n }\n leftMenuMode:string\n navMenuType:string\n fixInterval:any\n constructor(\n private platform:Platform,\n private navCtrl:NavController,\n ){\n this.clientWidth = document.body.clientWidth\n this.updateWidth()\n this.onResizeScreen()\n }\n async dismisModalTop(modalCtrl:any,event?:Event){\n // 尝试获取顶层的模态对话框\n let topModal = await modalCtrl?.getTop();\n if (topModal) {\n event?.preventDefault&&event?.preventDefault()\n // 如果存在模态对话框,则关闭它\n topModal.dismiss();\n topModal.isOpen = false;\n }\n }\n updateWidth(){\n this.fixInterval = setInterval(()=>{\n if(this.clientWidth) {\n clearInterval(this.fixInterval);\n delete this.fixInterval\n return\n }\n console.log(document.body.clientWidth)\n this.clientWidth = document.body.clientWidth;\n },200)\n }\n // 监听窗体缩放事件\n onResizeScreen(ev?){\n this.clientWidth = document.body.clientWidth\n if(this.clientWidth>=this.mobileWidth){\n this.leftMenuMode= \"horizontal\";\n this.navMenuType = \"pc\";\n }else{\n this.leftMenuMode= \"inline\";\n this.navMenuType = \"mobile\";\n }\n }\n}\n","import SparkMD5 from 'spark-md5';\nexport function calcFileMd5(file: File): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n try {\n const data = event.target?.result;\n if (data) {\n const spark = new SparkMD5.ArrayBuffer();\n spark.append(data as ArrayBuffer);\n const hash = spark.end();\n resolve(hash);\n } else {\n reject(new Error(\"Failed to load file\"));\n }\n } catch (error) {\n reject(error);\n }\n };\n reader.onerror = (error) => {\n reject(error);\n };\n reader.readAsArrayBuffer(file);\n });\n}\n","import { DatePipe } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { Platform } from '@ionic/angular';\nimport { Camera,CameraResultType, CameraSource } from \"@capacitor/camera\"\nimport { Capacitor } from \"@capacitor/core\";\nimport { Filesystem } from \"@capacitor/filesystem\";\nimport { FilesystemWeb } from '@capacitor/filesystem/dist/esm/web.js'\nimport * as qiniu from \"qiniu-js\"\nimport Parse from \"parse\";\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\nimport CryptoJS from \"crypto-js\"\n\n/**\n * MediaCapture插件\n * @private\n * @description\n * 依赖:File\n * npm i -S cordova-plugin-file @awesome-cordova-plugins/file\n */\nimport { MediaCapture,MediaFile,CaptureVideoOptions,CaptureError } from \"@awesome-cordova-plugins/media-capture\"\nimport { calcFileMd5 } from './util-file-md5';\n\n/**\n * NovaFile 文件类型\n * @public\n */\nexport interface NovaFile{\n id:string\n key:string\n url:string\n name:string\n type:string\n size:number\n md5?:string\n}\n\n/**\n * NovaUploadService 上传服务\n * @public\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NovaUploadService {\n\n company:string\n uptoken:string\n qiniuConf:any \n domain:string\n\n constructor(\n private platform:Platform,\n private diagnostic: Diagnostic, \n ) { \n this.getUptoken(true)\n this.requestPermission();\n this.queryDomain();\n }\n /**\n * 全端通用上传方法\n * @params file:File 待上传文件\n * @params onProgress:Function 上传进度回调函数\n * @returns\n * progressData {\n \"total\": {\n \"size\": 8491,\n \"loaded\": 8490,\n \"percent\": 99.98822282416675\n }\n }\n * novafileData {\n \"id\":\"xxxxxxxxxx\" // Attachment.objectId\n \"hash\": \"FoYHjpyTif1t8uOMv6N6sVIeGTvq\",\n \"key\": \"E4KpGvTEto/20230901/053605467.jpg\",\n \"url\": \"https://file-cloud.fmode.cn/E4KpGvTEto/20230901/053605467.jpg\",\n \"name\": \"20230901173605.jpg\",\n \"type\": \"image/jpg\",\n \"size\": 7853\n }\n */\n async upload(file:File,onProgress?:Function):Promise{\n // 解析文件类型,并获得文件后缀\n let type = file.type \n\n let nameList = file.name?.split(\".\")\n let format = nameList[nameList.length-1] // 文件后缀\n\n // 计算文件md5\n let md5File\n try{\n md5File = await calcFileMd5(file)\n }catch(errmd5){}\n // 转换文件blob\n let blob = this.fileToBlob(file)\n\n // 图片上传\n let uploadFile:NovaFile\n if(type.indexOf('image')>-1){\n uploadFile = await this.saveQiniuImageFile(blob,format,null,onProgress)\n }else{\n uploadFile = await this.saveQiniuMediaFile(file,blob,null,onProgress)\n }\n uploadFile.md5 = md5File\n\n // 纠正file.url\n if(uploadFile?.url?.indexOf('undefined')>-1){\n uploadFile.url = (this.qiniuDomain || \"https://file-cloud.fmode.cn/\") + uploadFile.url.replace(\"undefined/\", \"\");\n }\n\n // 保存附件\n let attachment\n if(uploadFile?.url){\n attachment = await this.saveAttachment(uploadFile,this.qiniuDomain,null,this.getCompanyId())\n }\n if(attachment?.id){\n uploadFile.id = attachment?.id\n }\n return uploadFile\n }\n\n /**\n * 移动端上传专用方法\n * @returns \n */\n isCapacitor(){\n return this.platform.is(\"capacitor\") || this.platform.is(\"cordova\")\n }\n async requestPermission(){\n if(!this.isCapacitor()) return\n await this.requestStoagePermission();\n await this.requestCameraPermission();\n }\n async requestStoagePermission(){\n let isAvailable = await this.diagnostic.isExternalStorageAuthorized()\n console.log(\"permisson_STORAGE:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestExternalStorageAuthorization()\n }\n return\n }\n async requestCameraPermission(){\n let isAvailable = await this.diagnostic.isCameraAuthorized()\n console.log(\"permisson_Camera:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestCameraAuthorization()\n }\n return\n}\n\n/**\n * 上传Token获取方法\n * @returns \n */\n async getUptoken(refresh:boolean=false) {\n console.log(\"getUptoken\")\n if(!this.qiniuConf && !refresh) return;\n try {\n console.log(this.getCompanyId())\n let data = await Parse.Cloud.run(\"qiniu_uptoken\", {\n company: this.getCompanyId(),\n })\n console.log(data)\n this.qiniuConf = data\n } catch (err) {\n console.error(err)\n }\n }\n /**\n * 生成文件上传Key值:<公司id>//.\n * @desc 用于对象存储含全路径的文件名称\n */\n genFileKey(file:{id:string,name:string},company?){\n let today = new Date()\n let dp = new DatePipe(\"en\")\n if(!company){\n company = this.getCompanyId();\n }\n return \"\" + company + \"/\" + dp.transform(today, \"yMMdd\") + \"/\" + String(file.id).substr(20, 6) + dp.transform(today, \"hhmmssSSS\") + /\\.[^\\.]+/.exec(file.name);\n }\n\n /**\n * 获取当前登录用户公司ID\n * @returns 公司ID\n */\n getCompanyId(){\n // 获取公司ID,或无指定值,则获取localStorage中company\n if(this.company){\n return this.company\n }\n let id = localStorage.getItem(\"company\")\n return id\n }\n qiniuDomain:string\n async queryDomain() {\n let Company = new Parse.Query('Company')\n let company = await Company.get(this.getCompanyId())\n if (company.get(\"configQiniu\") && company.get(\"configQiniu\").domain) {\n console.log(company.get(\"configQiniu\").domain)\n this.qiniuDomain = company.get(\"configQiniu\").domain;\n } else{\n this.qiniuDomain = 'https://file-cloud.fmode.cn';\n }\n }\n\n /**\n * 保存上传信息至附件表 Attachment\n * @param file 附件信息\n * @returns attachment Parse.Object\n */\n async saveAttachment(file:NovaFile|{url:string,size:string,name:string,type:string,md5?:string},domain,cateId?,company?):Promise {\n let url = file.url\n if (url.startsWith(\"http\")) {\n } else {\n url = domain + url\n }\n url = url.replace(/undefined\\//, \"\");\n\n\n // 帐套参数默认加载本地存储\n if(!company){\n company = localStorage.getItem(\"company\")\n }\n let user = Parse.User.current();\n\n // 检测文件是否存在\n let query = new Parse.Query(\"Attachment\");\n query.equalTo(\"url\", url);\n let attachment = await query.first();\n\n if (attachment && attachment.id) {\n console.error(\"该文件已存在,无需重复上传\");\n return attachment\n } else {\n let Attachment = Parse.Object.extend(\"Attachment\")\n attachment = new Attachment();\n attachment.set(\"size\", file.size)\n attachment.set(\"url\", url)\n attachment.set(\"name\", file.name)\n attachment.set(\"mime\", file.type)\n attachment.set(\"md5\",file?.md5)\n if(user?.id){\n attachment.set(\"user\",user.toPointer())\n }\n if(company){\n attachment.set(\"company\", {\n __type: \"Pointer\",\n className: \"Company\",\n objectId: localStorage.getItem(\"company\")\n })\n }\n if (cateId) {\n attachment.set(\"category\", {\n __type: \"Pointer\",\n className: \"Category\",\n objectId: cateId\n })\n }\n return await attachment.save()\n }\n}\n\n/**\n * 录像并上传\n */\nasync captureVideo(conf): Promise{\n this.qiniuConf = conf;\n if(!this.isCapacitor()) return;\n // {\"name\":\"VID_20230513_182235.mp4\",\"localURL\":\"https://localhost/__cdvfile_sdcard__/DCIM/Camera/VID_20230513_182235.mp4\",\"type\":\"video/mp4\",\"lastModified\":null,\"lastModifiedDate\":1683973355000,\"size\":6100161,\"start\":0,\"end\":0,\"fullPath\":\"file:///storage/emulated/0/DCIM/Camera/VID_20230513_182235.mp4\"}\n let mediaFile:any = await this.cameraCaptureVideoFile();\n // let mediaData:string = await this.getMediaFileDataString(mediaFile);\n let fileBlob = await this.getMediaFileDataString(mediaFile);\n // let fileBlob = await this.base64ToBlobType(mediaData,mediaFile.type);\n let qiniuFile = await this.saveQiniuMediaFile(mediaFile,fileBlob)\n return qiniuFile\n}\nasync cameraCaptureVideoFile():Promise{\n let options: CaptureVideoOptions = {\n limit:1,\n // quality:50\n }\n let mediaCapture = MediaCapture;\n let list:MediaFile[] | CaptureError | any= await mediaCapture.captureVideo(options)\n if(list?.length>0){\n return list[0]\n }\n return null\n}\n\n\nasync getMediaFileDataString(mediafile){\n let filesystem = new FilesystemWeb()\n let path = mediafile.fullPath.replaceAll(\"///\",\"//\")\n \n let stat = await Filesystem.stat({ path:mediafile.fullPath});\n let webUri = Capacitor.convertFileSrc(stat.uri)\n let content = await fetch(webUri)\n let blob = await content.blob()\n console.log(blob.size)\n \n console.log(JSON.stringify(stat))\n // CapacitorConver\n\n // file:///storage/emulated/0/DCIM/Camera/VID_20230612_125907030.mp4\n // let filesystem = Filesystem\n // let content = await filesystem.readFile({\n // path:mediafile.fullPath\n // })\n console.log(JSON.stringify(content))\n console.log(JSON.stringify(Object.keys(content)))\n // console.log(content?.data)\n if(blob){\n return blob\n }else{\n throw \"读取文件失败\"\n }\n}\n /**\n * 拍照并上传\n * @returns -- {hash?:string,url:string,name:string,size:number,key:stirng}\n */\n async takePicture(conf): Promise{\n this.qiniuConf = conf;\n if(!this.isCapacitor()) return\n await this.getUptoken();\n let image = await this.cameraTakePictureDataUrl()\n // image.format\n if(!image?.dataUrl) return\n let blob = await this.base64ToBlob(image?.dataUrl)\n let qiniuFile = await this.saveQiniuImageFile(blob,image?.format)\n console.log(JSON.stringify(qiniuFile))\n // this.saveAttachment()\n return qiniuFile\n };\n async cameraTakePictureDataUrl(){ // WebUrl + Base64\n if(!this.isCapacitor()) return\n const image = await Camera.getPhoto({\n quality: 90,\n allowEditing: false,\n // saveToGallery:true,\n source:CameraSource.Camera,\n resultType: CameraResultType.DataUrl\n });\n return image;\n }\n\n maxSize = 5 * 1024 * 1024\n /**\n * 七牛上传函数:无需前端组件\n * @param imageBlob: Blob\n * @param format: string\n */\n async saveQiniuImageFile(imageBlob: Blob,format:string,company?:string,onProgress?:Function): Promise {\n // let that = this\n let maxSize = this.maxSize\n if (imageBlob.size > maxSize) {\n await console.log(`照片过大,超出限制5MB`)\n throw \"超出文件大小\"\n }\n let dp = new DatePipe(\"en\")\n let id = dp.transform(new Date(), \"yyyyMMddHHmmss\")\n let name = `${id}.${format}`\n let type = `image/${format}`\n // let file = new File([imageBlob], filename, { type: \"image/jpeg\" })\n let putExtra = {\n fname: name,\n params: {},\n mimeType: \"image/*\",\n }\n let config = {\n useCdnDomain: true, //使用cdn加速\n forceDirect:true // 强制不分片,放置上传报错\n }\n console.log(this.qiniuConf)\n\n let qiniuFileKey = this.genFileKey({id:id,name:name})\n console.log(\"图片上传前\")\n return new Promise((resolve, reject) => {\n console.log(\"进入了上传\")\n let observable = (qiniu as any).upload(\n imageBlob,\n qiniuFileKey,\n this.qiniuConf?.uptoken,\n putExtra,\n config\n )\n observable.subscribe({\n next: (result_2) => {\n // 主要用来展示进度\n console.log(result_2)\n onProgress&&onProgress(result_2)\n },\n error: async (err_1) => {\n // this.$notify('上传图片失败');\n // await that.presentToast(`检测失败`, 1500, \"danger\")\n console.log(err_1)\n },\n complete: (res_1) => {\n console.log(\"上传完成\")\n console.log(`${this.qiniuConf?.domain}${res_1.key}`)\n res_1.url = `${this.qiniuConf?.domain}${res_1.key}`\n res_1.name = name\n res_1.type= type\n res_1.size = imageBlob.size;\n resolve(res_1)\n },\n })\n })\n }\n async saveQiniuMediaFile(mediafile:any,fileBlob: Blob,company?:string,onProgress?:Function): Promise {\n // let that = this\n let name = mediafile.name\n let type = mediafile.type\n let size = mediafile.size\n let maxSize = 100 * 1024 * 1024 // 限100M\n if (size > maxSize) {\n console.log(`视频过大,超出限制100MB`)\n throw \"超出文件大小\"\n }\n let dp = new DatePipe(\"en\")\n let id = dp.transform(new Date(), \"yyyyMMddHHmmss\")\n // let file = new File([mediaBlob], filename, { type: \"image/jpeg\" })\n let putExtra = {\n fname: name,\n params: {},\n mimeType: type,\n }\n let config = {\n useCdnDomain: true, //使用cdn加速\n forceDirect:true // 强制不分片,放置上传报错\n }\n\n let qiniuFileKey = this.genFileKey({id:id,name:name})\n console.log(\"图片上传前\")\n console.log(mediafile.name,fileBlob.size)\n console.log(fileBlob.size)\n console.log(fileBlob.size/1024/1024)\n return new Promise((resolve, reject) => {\n console.log(\"进入了上传\")\n let observable = (qiniu as any).upload(\n fileBlob,\n qiniuFileKey,\n this.qiniuConf?.uptoken,\n putExtra,\n config\n )\n observable.subscribe({\n next: (result_2) => {\n // 主要用来展示进度\n console.log(\"主要用来展示进度\")\n onProgress&&onProgress(result_2)\n console.log(JSON.stringify(result_2))\n },\n error: async (err_1) => {\n console.log(\"上传失败\")\n // this.$notify('上传图片失败');\n // await that.presentToast(`检测失败`, 1500, \"danger\")\n console.log(JSON.stringify(err_1))\n },\n complete: (res_1) => {\n console.log(\"上传完成\")\n console.log(JSON.stringify(res_1))\n // console.log(`${this.qiniuConf?.domain}${res_1.key}`)\n // res_1.url = `${this.qiniuConf?.domain}${res_1.key}`\n // res_1.name = name\n // res_1.type= type\n // res_1.size = size;\n mediafile.key = res_1.key\n console.log(mediafile.type)\n mediafile.url = `${this.qiniuConf?.domain}${res_1.key}`\n console.log(mediafile.url)\n resolve(mediafile)\n },\n })\n })\n }\n\n //string转File文件\n async base64ToBlobType(string,type){\n let base64Response = await fetch(`data:${type};base64,${string}`);\n let blob = await base64Response.blob();\n return blob\n string = atob(string)\n return new Blob([string],{\n type:type\n })\n }\n //base64转File文件\n async base64ToBlob(base64Img: string) {\n let base64Response = await fetch(base64Img);\n let blob = await base64Response.blob();\n return blob\n }\n fileToBlob(file:File):Blob {\n const blob = file.slice(0, file.size, file.type);\n return new Blob([blob], { type: file.type });\n }\n genMd5(inputString:string){\n return CryptoJS.MD5(inputString).toString();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n// import { MASK_LIST } from './mask-list';\nimport { FmodeChat } from './chat-class';\nimport Parse from \"parse\";\nimport { NovaCloudService } from '../../../nova-cloud';\nimport { AlertController, NavController, Platform, ToastController } from '@ionic/angular';\nimport { CrossService } from '../../../platform';\nimport { NovaUploadService } from '../../../storage/service-upload/nova-upload.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ChatService {\n\n // 已加载聊天信息临时存储\n chatMap:{\n [key:string]:FmodeChat\n } = {}\n isCapacitor:boolean = false;\n\n constructor(\n private router:Router,\n private ncloud:NovaCloudService,\n private platform:Platform,\n private alertCtrl:AlertController,\n private navCtrl:NavController,\n private cross:CrossService,\n private uploadServ:NovaUploadService\n ) { \n this.isCapacitor = this.platform.is(\"capacitor\")\n\n }\n\n modelList:Array\n currentModel:Parse.Object\n async loadModelList(model?:Parse.Object){\n if(this.modelList?.length) return\n let query = new Parse.Query(\"ChatModel\")\n query.notEqualTo(\"isDeleted\",true)\n query.equalTo(\"isEnabled\",true)\n query.addAscending(\"index\")\n this.modelList = await query.find();\n this.currentModel = model || this.modelList?.find(item=>item.get(\"code\")==\"fmode-4.5-128k\")\n }\n platformMap = {\n \"pc\":\"电脑端\",\n \"mobile\":\"移动端\",\n }\n async doButtonAction(button){\n let type = this.cross.navMenuType\n let platforms = button?.platform?.map(item=>this.platformMap[item]).join(\"、\")\n if(button?.platform?.length>0 && button?.platform?.indexOf(type)==-1){\n let alert = await this.alertCtrl.create({\n header:\"注意\",\n subHeader:\"终端不符\",\n message:`请您使用${platforms}开启本功能。`,\n buttons:[\n {\n role:\"ok\",text:\"知道了\",\n },\n ]\n })\n alert.present();\n return\n }\n if(button?.path){\n this.navCtrl.navigateRoot(button?.path);\n }\n }\n // 初始化未加载会话\n async initChatMap(sessionId){\n if(this.chatMap[sessionId]) return this.chatMap[sessionId]\n let query = new Parse.Query(\"ChatSession\")\n query.include(\"user\",\"role\",\"role.model\",\"story\",\"story.person\",'person','person.userVerify')\n let session = await query.get(sessionId)\n let chat = new FmodeChat(session?.id,session?.get(\"role\"),session,this,this.navCtrl,this.ncloud,this.uploadServ);\n this.chatMap[sessionId] = chat;\n return this.chatMap[sessionId]\n }\n // 获得历史会话窗口\n chatList:Array\n async getChatSession(queryParams?:any){\n if(!Parse?.User?.current()?.id) return // 用户必须登录\n let limit = 30 // 普通用户限查看10条历史记录\n let query = new Parse.Query(\"ChatSession\");\n if(queryParams){\n query = Parse.Query.fromJSON(\"ChatSession\",queryParams);\n }\n query.include(\"user\",\"role\",\"role.model\",\"story\",\"story.person\",\"story.person.userVerify\",\"person\",\"person.userVerify\");\n query.addDescending(\"updatedAt\")\n query.equalTo(\"user\",Parse.User.current().toPointer())\n query.notEqualTo('isDeleted', true);\n query.limit(limit)\n let list = await query.find();\n this.chatList = list.map(item=>{\n // 添加缓存\n this.chatMap[item?.id] = new FmodeChat(item?.id,item?.get(\"role\"),item,this,this.navCtrl,this.ncloud,this.uploadServ); \n return {\n session:item,\n sid:item?.id,\n isHidden:false,\n rid:item?.get(\"role\")?.id,\n name:item?.get(\"role\")?.get(\"name\"),\n thumb:item?.get(\"role\")?.get(\"thumb\"),\n title:item?.get(\"title\") || item?.get(\"role\")?.get(\"name\"),\n message:item?.get(\"messageList\")?.[item?.get(\"messageList\")?.length-1]?.content?.slice(0,20),\n latest:item?.createdAt\n }\n })\n }\n async getChatSessionDistinct(){\n let limit = 10 // 普通用户限查看10条历史记录\n let sql = `SELECT t1.\"objectId\" as sid , \"AvatarRole\".\"objectId\" as rid, * FROM (\n SELECT *,ROW_NUMBER() OVER (PARTITION BY \"user\", \"role\" ORDER BY \"createdAt\" DESC) AS rn\n FROM \"ChatSession\" WHERE \"user\"=$1\n ) as t1\n LEFT JOIN \"AvatarRole\" ON \"AvatarRole\".\"objectId\" = t1.\"role\"\n WHERE t1.rn=1\n LIMIT $2\n ;`\n let result:any = await this.ncloud.novaql(sql,[Parse.User.current()?.id,limit])\n let chatList = result?.map(item=>{\n return {\n sid:item?.sid,\n rid:item?.rid,\n name:item?.name,\n message:item?.messageList?.[item?.messageList?.length-1]?.content?.slice(0,20),\n latest:item?.createdAt\n }\n })\n this.chatList = chatList\n return this.chatList\n }\n\n /**\n * 重建新对话窗口\n */\n createChatPanel(role?:any,chat?:any){\n let sessionId = chat?.id||\"new\"\n chat = new FmodeChat(sessionId,role,chat,this,this.navCtrl,this.ncloud,this.uploadServ);\n this.chatMap[sessionId] = chat; // new 窗口如果没有消息转换成带ID的,每次就会清空\n this.router.navigate([\"/chat/pro/chat/\"+sessionId])\n }\n async createNewRoleChat(roleId):Promise{\n let query = new Parse.Query(\"AvatarRole\")\n query.include(\"model\")\n let role = await query.get(roleId);\n // console.log(\"role\",role)\n let chat = new FmodeChat(\"new\",role,null,this,this.navCtrl,this.ncloud,this.uploadServ);\n return chat\n }\n async restoreChatPanel(options?:{\n rid:string,\n sid:string,\n }){\n let queryr = new Parse.Query(\"AvatarRole\")\n let querys = new Parse.Query(\"ChatSession\")\n let role = await queryr.get(options?.rid);\n let session = await querys.get(options?.sid);\n // let sessionId = \"new\"\n let chat = new FmodeChat(options?.sid,role,session,this,this.navCtrl,this.ncloud,this.uploadServ);\n this.chatMap[options?.sid] = chat;\n this.router.navigate([\"/chat/pro/chat/\"+options?.sid])\n\n }\n async callRole(role){\n // 暂时开启全端进入语音对话\n if(false && !this.isCapacitor){\n let alert = await this.alertCtrl.create({\n header:\"注意\",\n subHeader:\"语音对话,限手机APP端可用\",\n message:\"请联系客服获取内测资格哦!\",\n buttons:[\n {\n role:\"ok\",text:\"知道了\",\n },\n ]\n })\n alert.present();\n return\n\n }\n document.body.classList.add('dark');\n this.router.navigate([`/avatar/role/${role.id}`,{\n type:\"phone\"\n }])\n }\n}\n","import Parse from 'parse';\nimport { apig } from \"../../../nova-cloud/ncloud-api-func\"\n\n/**\n * DalleOptions 绘画参数接口\n * @public\n */\nexport interface DalleOptions{\n prompt:string\n quality?:null | \"hd\"\n n?:1\n model?: \"dall-e-3\" | \"dall-e-2\"\n size?: \"1024x1024\" | \"1792x1024\" | \"1024x1792\"\n style?:\"vivid\" | \"natural\" \n }\n\n /**\n * DALL-E-3 图片生成函数\n * @description\n * @see \n * https://p4.hosteagle.club/docs/api-reference?__cpo=aHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29t\n * @returns \n * {\n \"id\": \"lpJGiFwWeA\", // 图片生成任务ID\n \"createdAt\": \"2024-11-27T12:18:14.463Z\"\n }\n * @param {DalleOptions} options\n * @param {string} options.prompt 1000 characters for dall-e-2 and 4000 characters for dall-e-3.\n * @param {string} options.model dall-e-3 dall-e-2\n * @param {string} options.quality dall-e-3 only hd means more details & consistency\n * @param {string} options.response_format url | b64_json\n * @param {string} options.size 1024x1024, 1792x1024, or 1024x1792 for dall-e-3\n * @param {string} options.style vivid | natural dall-e-3 only\n */\n export async function drawDalle(options:DalleOptions){\n options.size = options?.size || \"1024x1024\"\n options.style = options?.style || \"natural\"\n options.quality = options?.quality || null\n \n let reqDalle = {\n \"model\": \"dall-e-3\", \n \"prompt\": options.prompt,\n \"n\": 1,\n \"quality\":options.quality,\n // response_format:\"b64_json\",\n response_format:\"url\",\n \"size\": options.size,\n \"style\": options.style\n }\n if(options.prompt?.length>3000){\n throw \"prompt maximum < 4000 characters\"\n }\n let data:any = await apig(\"aigc/gpt/v1/images/generations\",reqDalle)\n console.log(data)\n let work:Parse.Object;\n if(data?.id){\n let query = new Parse.Query(\"ImagineWork\")\n query.get(data?.id);\n work = await query.first();\n console.log(work)\n }\n return work\n /**\n * @param json.data[0].b64_json 图片二进制的b64格式\n Response {\n \"created\": 1589478378,\n \"data\": [\n {\n \"url\": \"https://...\"\n },\n {\n \"url\": \"https://...\"\n }\n ]\n }\n */\n }","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';\nimport Parse from \"parse\";\nimport { NovaUploadService } from '../../../storage/service-upload/nova-upload.service';\nimport { Observable } from 'rxjs';\nimport { DalleOptions, drawDalle } from './imagine-func';\n\n//高级AI绘图 api文档 https://www.showdoc.com.cn/2307900595645609/10319677266305138\nexport interface StableDiffusionOptions{\n prompt :string //支持中英文\n modelStyleId :number\t//模型风格配置ID,请使用我们官方提供的风格列表\n//基础参数\n negativePrompt ?:string //仅支持中文\n\n width ?:number\t//宽,默认512,不可超过2048\n height ?:number\t//高,默认512,不可超过2048\n steps ?:number\t//迭代步数,默认20,不可超过50\n seed ?:number\t//随机种子,默认不传则为随机生成\n cfgScale\t ?:number\t//提示词引导系数,取值范围1-30\n//额外参数 仅图生图\n hrScale ?:number\t//高清修复倍率,仅在文生图模式生效,取值不可以超过3\n hrSteps ?:number\t//高清迭代步数,默认20,不可超过30(不建议少于15,会严重影响画面生成效果)\n//额外参数 \n upscale\t ?:number\t//AI放大倍数,取值不可以超过3\n batchSize\t ?:number\t//生成图片数,取值不可以超过6\n//额外参数\n faceFix\t ?:boolean\t//是否开发脸部修复,注意,开启此功能需额外扣除2积分\n detailsLevel ?:number\t//脸部修复细节刻画等级,取值范围1-9\n //以下为图生图\n img ?:string //图片URL保证公网可查看\n imgOptions ?:imgOptions\n denoisingStrength?:number\t//重绘幅度,仅在img字段有传值的时候生效,取值范围0~1,取值越大画面与参考图差别越大\n controlnet?:{\n units?:ControlnetUnits[]\n }\n}\n\n/**\n * imgOptions 图像配置参数\n * @public\n */\nexport interface imgOptions{\n removeBackground ?:boolean //是否自动移除图片中的人物背景,一般用于重绘背景有效,注意:开启此功能需额外扣除2积分\n redrawBackground ?:boolean //是否保留画面中的主体,仅绘制画面中的背景注意:开启此功能需额外扣除2积分\n mainObjectType ?:\"human\"\t| \"general\" //自定识别画面中的主体,用于背景处理。取值:general:通用场景识别,用于自动识别画面中的主体,human:识别并保留画面中的人物。当removeBackground或者redrawBackground为true的时候,画面中的主体类型,请根据您的画面中的实际情况传值,默认为human\n facePreservation ?:boolean //自动检测图片中的人脸,使生成后的人脸与原始人脸保持高度相似。注意,开启此功能需额外扣除2积分\n facePreservationCount?:number\t //开启人脸保持后,画面中最多处理的人脸数量,默认为1,最大值可以为5\n genderDetect ?:boolean \t//是否自动检测图片中的人物性别,尽量使生成前后的人物性别不发生变化,如果图片中有多个人物性别则效果会不准确。注意,开启此功能需额外扣除1积分\n}\n\n/**\n * ControlnetUnits 控制网络单元\n * @public\n */\nexport interface ControlnetUnits{\n isOpen ?:boolean // 是否启用该控制参数\n type\t ?:string //\t\tcontrolnet干预形式\n preprocess\t ?:boolean //\t\t是否需要对参考图进行预处理提取可用信息\n image\t ?:string //\t\tcontrolnet需要参考的图片,不传默认为图生图的原始图片,可以为base64图片或者图片url\n controlMode\t ?:number //\t\tcontrolnet控制模式,0、平衡模式(默认),1:提示词更重要,2:controlnet更重要\n weight\t ?:number //\t\tcontrolnet权重,范围为0~2,默认为1,\n controlStart ?:number //\t\tcontrolnet生效时机,范围为0~1,默认为0\n controlEnd\t ?:number //\t\tcontrolnet退出时机,范围为0~1,默认为1\n paramsA\t ?:number //\t\tcontrolnet预处理器对应参数A\n paramsB\t ?:number //\t\tcontrolnet预处理器对应参数B\n controlArray ?:any[]\n}\n\n/**\n * ImagineService AI绘画服务\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ImagineService {\n\n /**\n * 图片生成接口主机地址\n */\n constructor(\n private http:HttpClient,\n private ncloud:NovaCloudService,\n private uploadServ:NovaUploadService,\n ) {}\n \n /**\n * DALL-E-3 图片生成函数\n * @description\n * @see \n * https://p4.hosteagle.club/docs/api-reference?__cpo=aHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29t\n * @returns \n * {\n \"id\": \"lpJGiFwWeA\", // 图片生成任务ID\n \"createdAt\": \"2024-11-27T12:18:14.463Z\"\n }\n * @param {DalleOptions} options\n * @param {string} options.prompt 1000 characters for dall-e-2 and 4000 characters for dall-e-3.\n * @param {string} options.model dall-e-3 dall-e-2\n * @param {string} options.quality dall-e-3 only hd means more details & consistency\n * @param {string} options.response_format url | b64_json\n * @param {string} options.size 1024x1024, 1792x1024, or 1024x1792 for dall-e-3\n * @param {string} options.style vivid | natural dall-e-3 only\n */\n async drawDalle(options:DalleOptions){\n let work = await drawDalle(options);\n if(work?.id) this.newWorkList.unshift(work)\n return work\n }\n priceDalle(options:DalleOptions){\n let priceList:Array = [\n {\"model\":\"dall-e-3\",quality:null,\t\"size\":\"1024x1024\",\t \"credit\": 2*10*8*0.04},\n {\"model\":\"dall-e-3\",quality:null,\t\"size\":\"1024x1792\",\t \"credit\": 2*10*8*0.08},\n {\"model\":\"dall-e-3\",quality:null,\t\"size\":\"1792x1024\",\t \"credit\": 2*10*8*0.08},\n {\"model\":\"dall-e-3\",quality:\"hd\",\t\"size\":\"1024x1024\",\t \"credit\": 2*10*8*0.08},\n {\"model\":\"dall-e-3\",quality:\"hd\",\t\"size\":\"1024x1792\",\t \"credit\": 2*10*8*0.12},\n {\"model\":\"dall-e-3\",quality:\"hd\",\t\"size\":\"1792x1024\",\t \"credit\": 2*10*8*0.12},\n {\"model\":\"dall-e-2\",quality:null,\t\"size\":\"1024x1024\",\t \"credit\": 2*10*8*0.02},\n {\"model\":\"dall-e-2\",quality:null,\t\"size\":\"512x512\",\t \"credit\": 2*10*8*0.018},\n {\"model\":\"dall-e-2\",quality:null,\t\"size\":\"256x256\",\t \"credit\": 2*10*8*0.016}\n ]\n let price = priceList.find(item=>item.model==options.model && item.quality==options.quality && item.size==options.size)\n let credit = price?.credit || 2*10*8*0.12\n return credit\n }\n priceStableDiffusion(options:StableDiffusionOptions){\n let size = options.width*options.height\n let num = 0.3 //飞码能量换算常数\n let credit = size*0.000000763*options.steps\n + size*0.00002278 * (options?.upscale || 0)\n + (options?.hrSteps || 0)*size*( options?.hrScale || 0) *( options?.hrScale || 0)* 0.000000763\n + (options?.faceFix? 2:0)\n + (options?.imgOptions?.removeBackground? 2:0)\n + (options?.imgOptions?.redrawBackground? 2:0)\n + (options?.imgOptions?.facePreservation? 2:0)\n + (options?.imgOptions?.genderDetect? 1:0)\n + (options?.controlnet?.units?.length || 0)*2\n // console.log(credit);\n\n credit = credit * num *options.batchSize\n\n \n // console.log(credit);\n\n return credit\n }\n b64DataToBase64Image(b64_json){\n let data = atob(b64_json)\n let blob = new Blob([data], { type: 'image/webp' });\n new Promise(resolve=>{\n // 使用 FileReader 将 Blob 对象转换为 base64 字符串\n let reader = new FileReader();\n reader.onloadend = function() {\n let base64data = reader.result;console.log(base64data)\n resolve(base64data)\n };\n reader.readAsDataURL(blob);\n })\n }\n /**\n * Huashi6专用绘图函数\n * @param reqBody \n * @see\n * 接口reqBody参数,参考:https://www.showdoc.com.cn/2307900595645609/10319675987319598\n * 密码:123456\n * @returns \n */\n async draw(reqBody:any){\n let data:any = await this.ncloud.apig(\"aigc/sdapi/v1/draw\",reqBody)\n // 正常生成taskId后,获取数据添加到列表中\n let taskId = data?.paintingSign\n if(taskId){\n setTimeout(async () => {\n let query = new Parse.Query(\"ImagineWork\")\n query.equalTo(\"taskId\",taskId);\n let work = await query.first();\n console.log(work)\n if(work?.id) this.newWorkList.unshift(work)\n }, 1000);\n }\n return data\n }\n /**\n * 已完成的直接加载,未完成的再接口更新\n * @param taskId \n * @returns \n */\n async taskDetail(taskId:string){\n let data:any = await this.ncloud.apig(\"aigc/sdapi/v1/task/detail\",{taskId:taskId})\n console.log(data)\n this.taskDetailMap[taskId] = data\n return data\n }\n taskDetailMap:any = {}\n\n /**\n * 我的绘画作品共享方法\n */\n newWorkList:Array = []\n myWorkList:Array = []\n getMyWorkQuery(){\n let user = Parse.User.current()\n if(!user?.id) return\n let query = this.getWorkQuery()\n query.include(\"model\",\"module\",\"user\")\n query.equalTo(\"user\",user.toPointer());\n return query\n }\n getWorkQuery(){\n\n // 获取 1 分钟前的时间\n let oneMinutesAgo = new Date(new Date().getTime() - 1 * 60 * 1000);\n\n let query = Parse.Query.fromJSON(\"ImagineWork\",{\n where:{\n $or:[\n // 超时60秒,且进度不为0\n {createdAt:{$lte:oneMinutesAgo},progress:{$ne:0}},\n // 60秒内,不限进度\n {createdAt:{$gt:oneMinutesAgo}}\n ]\n }\n });\n query.include(\"model\",\"module\",\"user\");\n query.notEqualTo(\"isDeleted\",true)\n query.notEqualTo(\"isFailed\",true)\n query.doesNotExist(\"respData.error\") // DE 算力瓶颈\n query.doesNotExist(\"respData.data.taskLimitCount\") // SD并发超限\n query.addDescending(\"createdAt\");\n return query;\n }\n getimg(): Promise {\n return new Promise((resolve, reject) => {\n let input = document.createElement('input');\n input.type = 'file';\n input.click();\n \n let handleChange = async () => {\n input.removeEventListener('change', handleChange);\n if (input.files && input.files.length > 0) {\n let file = input.files[0];\n let fileResult = await this.uploadServ.upload(file,(res)=>{\n console.log(res) // 上传进度,可以同步更新页面上传百分比\n res.total.percent.toFixed(2)//上传进度\n });\n // 测试使用固定图片\n // let fileResult = {\n // url: \"https://file-cloud.fmode.cn/E4KpGvTEto/20230808/s12uh1092414597.png\"\n // };\n \n resolve(fileResult.url);\n } else {\n reject(\"未选择文件\");\n }\n };\n \n input.addEventListener('change', handleChange);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ChatService } from './service-chat/chat.service';\nimport { ImagineService } from './service-imagine/imagine.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FmaiService {\n\n constructor(\n private imagine:ImagineService,\n private chat:ChatService\n ) { }\n\n \n\n}\n","import { Observable } from 'rxjs';\nimport Parse from 'parse';\nimport { drawDalle,DalleOptions } from './imagine-func';\n\nexport class ImagineWork {\n id: string;\n task: Parse.Object | null = null;\n progress:number = 0;\n images:Array = [];\n\n constructor(id?: string) {\n this.id = id;\n this.fetchTask();\n }\n\n async fetchTask() {\n if (this.id) {\n const query = new Parse.Query(\"ImagineWork\");\n try{\n let task = await query.get(this.id)\n this.task = task;\n if(task.id){\n this.progress = this.task.get(\"progress\");\n this.images = this.task.get(\"images\");\n if(this.images?.length){\n this.progress = 1;\n }\n }\n }catch(err){\n console.error(\"Error fetching task:\", err);\n\n }\n }\n return this.task;\n }\n\n draw(options: DalleOptions): Observable {\n return new Observable(observer => {\n // 如果task已经存在,直接返回\n if (this.task) {\n observer.next(this.task);\n observer.complete();\n return;\n }\n\n // 否则,开始生成图像任务\n drawDalle(options).then(result => {\n this.id = result.id; // 更新id\n this.fetchTask(); // 立即查询任务\n\n // 开始定期查询任务状态\n const taskQuery = new Parse.Query(\"ImagineWork\");\n const taskInterval = setInterval(() => {\n taskQuery.get(this.id).then((task) => {\n this.progress += 0.01;\n this.task = task;\n observer.next(task);\n\n // 检查任务是否完成\n if (this.task?.get(\"images\")?.length) {\n this.progress = 1;\n clearInterval(taskInterval);\n observer.complete();\n }\n }).catch(err => {\n clearInterval(taskInterval);\n observer.error(err);\n });\n }, 1000);\n }).catch(err => {\n observer.error(err);\n });\n });\n }\n\n}","let colorMap = [\n \"primary\",\n \"secondary\",\n \"tertiary\",\n \"success\",\n \"warning\",\n \"danger\",\n \"light\",\n \"medium\",\n \"dark\"\n]\n\nexport const MASK_LIST = [\n // 数字员工\n {\n name:\"执行李\",\n type:\"employee\",\n title:\"首席执行官\",\n desc:\"一位富有远见和领导才能的创业新秀。她具备战略思维和决策能力,能够为公司设定长期目标并领导团队实现这些目标。\",\n color:colorMap[0],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_48766.jpg?e=1695974629&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:oPkQSsyQLLD08R_J4SMeO1f1RdM=\"\n },\n {\n name:\"技术刘\",\n type:\"employee\",\n title:\"首席技术官\",\n desc:\"一位技术专家,拥有广泛的技术知识和经验。他善于解决复杂的技术问题,并能够领导开发团队实施创新的技术解决方案。\",\n color:colorMap[1],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_619877.jpg?e=1695952672&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:LDuSg8_n5g4Rj_8F5PKrGzV4T54=\",\"https://imgsource.huashi6.com/images/ai/2023/9/27/20_17767.jpg?e=1695819037&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:a9uOeeJMN2oopK-3WQZzldPXfH0=\"]\n },\n {\n name:\"点子王\",\n type:\"employee\",\n title:\"首席运营官\",\n desc:\"一位富有创意和市场洞察力的市场营销专家。她擅长制定营销策略,了解目标受众,并能够利用各种渠道和工具推广公司的产品或服务。\",\n color:colorMap[2],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_186291.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:EhEUtwnC9hpu-SXXsBrp2Q-rcJk=\"\n },\n {title:\"设计总监\",\n name:\"李欣\",\n type:\"employee\",\n desc:\"一位富有创造力和用户导向思维的设计师。她能够理解用户需求,并通过设计直观、易用且吸引人的用户界面来提供出色的用户体验。\",\n color:colorMap[3],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_18099.jpg?e=1695952201&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:G_a60v52iTTqvJgeTSa_8zJUY2w=\"\n }, \n\n {title:\"运营经理\",\n name:\"刘洁\",\n type:\"employee\",\n desc:\"一位组织能力强、注重细节并擅长解决问题的运营专家。她能够协调各个部门的工作,并确保公司的运营流程高效运行。\",\n color:colorMap[4],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_842519.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FM_kKZDzkcLQ1EX4266dXU46cRc=\"\n\n },\n\n {title:\"销售经理\",\n name:\"张伟\",\n type:\"employee\",\n desc:\"一位富有销售天赋和人际交往能力的销售专家。他善于与客户建立良好的关系,并能够推动销售团队实现业绩目标。\",\n color:colorMap[5],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_739110.jpg?e=1695974920&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:vg_sn-qn67MJS-7j2o7mWzOCUSk=\"\n },\n\n\n {title:\"数据分析师\",\n name:\"杨晨\",\n type:\"employee\",\n desc:\"一位善于解读数据和提供商业洞察的数据分析专家。她能够收集、分析和解释数据,为公司的决策制定提供有力的支持。\",\n color:colorMap[6],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_204321.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:dC2sGmJekSPBTCycPF76BkQPBoo=\"\n },\n\n\n {title:\"财务经理\",\n name:\"赵晓\",\n type:\"employee\",\n desc:\"一位精通财务管理和分析的专业人士。她能够制定财务战略、管理公司的财务流程,并提供准确的财务报告和预测。\",\n color:colorMap[7],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_947878.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:TFGn0_l2PqhUTe9G4A3it769hcU=\"\n },\n {title:\"品牌专员\",\n name:\"王雅\",\n type:\"employee\",\n desc:\"一位富有创意和品牌意识的专业人士。她能够塑造和管理公司的品牌形象,制定品牌营销策略,并与内部和外部利益相关者建立良好的合作关系。\",\n color:colorMap[8],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_129581.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YQrpiv1hBKRPIdaEbDDDkLFuPG8=\",\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_912136.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:8SVMU1rdKD8eaJ1gH_qGQzcrMhM=\"]\n },\n // 数字教师\n {\n title:\"全科\",\n name:\"孔博\",\n type:\"teacher\",\n desc:\"擅长全科教学的金牌教师,知识面广泛,博古通今,因材施教,耐心稳重。\",\n color:colorMap[0],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_40958.jpg?e=1697604189&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:U7r1Td30lXdf9mE1TMVAnDhBP6c=\"]\n },\n {\n title:\"语文\",\n name:\"王明\",\n type:\"teacher\",\n desc:\"激发学生对文学的热爱,引导他们成为优秀的作家和沟通者。\",\n color:colorMap[1],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_698893.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:hK_AuY7BA1pp33QVeUue5QjIg4o=\"]\n },\n {\n title:\"数学\",\n name:\"万红\",\n type:\"teacher\",\n desc:\"以清晰的逻辑和耐心的指导,帮助学生掌握数学的基础知识和解题技巧。\",\n color:colorMap[2],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_256253.jpg?e=1697603314&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:K2iqp_ZzHYzXNu_0VJlywyANHp8=\"]\n },\n {\n title:\"英语\",\n name:\"张瑞\",\n type:\"teacher\",\n desc:\"激发学生对英语学习的兴趣,培养他们的听、说、读、写能力,让他们自信地运用英语。\",\n color:colorMap[3],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_266171.jpg?e=1697603707&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:uhpxBbT-jlSt_KjAnj0SFsFAjWU=\"]\n },\n {\n title:\"物理\",\n name:\"金晓\",\n type:\"teacher\",\n desc:\"通过实验和案例,帮助学生理解物理原理,培养他们的科学思维和实验技能。\",\n color:colorMap[4],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_694925.jpg?e=1697603071&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FznZxhkYUrZ-BzX05dvNt8acTUw=\"]\n },\n {\n title:\"化学\",\n name:\"陈华\",\n type:\"teacher\",\n desc:\"激发学生对化学的好奇心,教授他们化学知识和实验技巧,培养他们的实验和分析能力。\",\n color:colorMap[5],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_942234.jpg?e=1697603169&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:__2T8cxLl4J0AwMR9MJdDiooDF0=\"]\n },\n {\n title:\"生物\",\n name:\"杨婷\",\n type:\"teacher\",\n desc:\"引导学生探索生命的奥秘,培养他们的科学观察和实验能力,让他们热爱生物科学。\",\n color:colorMap[6],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_330738.jpg?e=1697603491&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:2K5-DHPnUQ-R9GGxtWKiEG68QlE=\"]\n },\n {\n title:\"历史\",\n name:\"赵亮\",\n type:\"teacher\",\n desc:\"帮助学生了解历史事件和文化背景,培养他们的历史意识和批判思维。\",\n color:colorMap[7],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_256302.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YP7ffC1YKO-Pb0C3ks4caT0QqZk=\"]\n },\n {\n title:\"地理\",\n name:\"林丽\",\n type:\"teacher\",\n desc:\"引导学生探索地球的奥秘,培养他们的地理观察和分析能力,让他们热爱地理科学。\",\n color:colorMap[8],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_555804.jpg?e=1697604054&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:xLN4QW0x9jx9lEB4EFHWvI_gEsI=\"]\n }\n]\n\n/**\n 当涉及到互联网创业公司的九大岗位时,以下是一些常见的角色,以及为每个角色提供的虚拟员工的中文名称和特点描述:\n\n1. 创始人/首席执行官(CEO):\n - 员工姓名:张明(Zhang Ming)\n - 特点描述:张明是一位富有远见和领导才能的创业家。他具备战略思维和决策能力,能够为公司设定长期目标并领导团队实现这些目标。\n\n2. 技术总监(CTO):\n - 员工姓名:王磊(Wang Lei)\n - 特点描述:王磊是一位技术专家,拥有广泛的技术知识和经验。他善于解决复杂的技术问题,并能够领导开发团队实施创新的技术解决方案。\n\n3. 市场营销经理:\n - 员工姓名:李婷(Li Ting)\n - 特点描述:李婷是一位富有创意和市场洞察力的市场营销专家。她擅长制定营销策略,了解目标受众,并能够利用各种渠道和工具推广公司的产品或服务。\n\n4. 用户体验设计师(UX Designer):\n - 员工姓名:陈宇(Chen Yu)\n - 特点描述:陈宇是一位富有创造力和用户导向思维的设计师。他能够理解用户需求,并通过设计直观、易用且吸引人的用户界面来提供出色的用户体验。\n\n5. 运营经理:\n - 员工姓名:刘洁(Liu Jie)\n - 特点描述:刘洁是一位组织能力强、注重细节并擅长解决问题的运营专家。她能够协调各个部门的工作,并确保公司的运营流程高效运行。\n\n6. 销售经理:\n - 员工姓名:张伟(Zhang Wei)\n - 特点描述:张伟是一位富有销售天赋和人际交往能力的销售专家。他善于与客户建立良好的关系,并能够推动销售团队实现业绩目标。\n\n7. 数据分析师:\n - 员工姓名:杨晨(Yang Chen)\n - 特点描述:杨晨是一位善于解读数据和提供商业洞察的数据分析专家。他能够收集、分析和解释数据,为公司的决策制定提供有力的支持。\n\n8. 财务经理:\n - 员工姓名:赵晓(Zhao Xiao)\n - 特点描述:赵晓是一位精通财务管理和分析的专业人士。她能够制定财务战略、管理公司的财务流程,并提供准确的财务报告和预测。\n\n9. 品牌管理专员:\n - 员工姓名:王雅(Wang Ya)\n - 特点描述:王雅是一位富有创意和品牌意识的专业人士。她能够塑造和管理公司的品牌形象,制定品牌营销策略,并与内部和外部利益相关者建立良好的合作关系。\n\n这些角色和员工姓名的选择是为了展示不同岗位的特点和职责。当然,在实际创业公司中,具体的岗位和员工姓名可能会因公司的规模、行业和需求而有所不同。\n */","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'utilnow',\n standalone: true\n})\nexport class UtilnowPipe implements PipeTransform {\n\n transform(value: Date, args?: any): any {\n let now = new Date();\n let time = now.getTime() - value.getTime();\n let seconds = time / 1000\n if(seconds<=60){\n return this.handleArgs(seconds.toFixed(0),\"秒钟前\",args)\n }\n let minutes = seconds / 60\n if(minutes < 60){\n return this.handleArgs(minutes.toFixed(0),\"分钟前\",args)\n }\n let hours = minutes / 60\n if(hours < 24){\n return this.handleArgs(hours.toFixed(0),\"小时前\",args)\n }\n let days = hours / 24\n if(days < 7){\n return this.handleArgs(days.toFixed(0),\"天前\",args)\n }\n\n let dateStr = `${value?.getFullYear()}-${value?.getMonth()+1}-${value?.getDate()}`\n return dateStr\n }\n\n // 时间标记\n enLocale:any = {\n \"秒钟前\":\" seconds ago\",\n \"分钟前\":\" minutes ago\",\n \"小时前\":\" hours ago\",\n \"天前\":\" days ago\",\n }\n handleArgs(value:any,unit:any,args:any):any{\n if(args==\"en\"){\n unit = this.enLocale[unit]\n }\n if(args?.constructor?.name == \"TranslateService\"){\n console.log(unit)\n if(args?.getDefaultLang()==\"en\"){\n unit = this.enLocale[unit]\n }\n // unit = await new Promise(resolve=>{\n // args?.get(unit).subscribe(data=>{\n // console.log(data)\n // resolve(data) \n // })\n // })\n }\n if(args==\"json\"){\n return {unit,value}\n }else{\n return value+unit\n }\n\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { getMessageContentText, getMessageImageUrl } from '../chat-class';\n\n@Pipe({\n name: 'chatContent',\n pure:true, // 输入变化时,仅渲染一次\n standalone: true\n})\nexport class ChatContentPipe implements PipeTransform {\n\n transform(content: unknown, ...args: unknown[]): unknown {\n // console.log(args);\n let arg = args?.[0] || \"text\"\n if(arg==\"text\"){\n return getMessageContentText(content)\n }\n if(arg==\"image_url\"){\n return getMessageImageUrl(content)\n }\n return content;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * 文字生成过程中 xml格式标签自动隐藏 用于语音对话答复字符显示\n * @desc\n */\n@Pipe({\n name: 'hidexml',\n standalone:true,\n})\nexport class HidexmlPipe implements PipeTransform {\n\n transform(value: string, ...args: unknown[]): unknown {\n if(!value) return \"\"\n return this.hideXmlTags(value);\n }\n\n hideXmlTags(xmlString) {\n // 使用正则表达式替换所有的 XML 标签\n return xmlString.replace(/<[^>]*>/g, '');\n}\n\n}\n","\n\nimport { mathjax } from \"mathjax-full/js/mathjax\";\nimport { TeX } from \"mathjax-full/js/input/tex\";\nimport { SVG } from \"mathjax-full/js/output/svg\";\nimport { CHTML } from \"mathjax-full/js/output/chtml\";\nimport { AllPackages } from \"mathjax-full/js/input/tex/AllPackages\";\nimport { liteAdaptor } from \"mathjax-full/js/adaptors/liteAdaptor\";\nimport { RegisterHTMLHandler } from \"mathjax-full/js/handlers/html\";\n\nexport class MarkdownMathJax{\n\n options:any\n adaptor:any\n constructor(options?:any){\n this.options = options;\n this.adaptor = liteAdaptor();\n RegisterHTMLHandler(this.adaptor);\n }\n text_to_mathjax(math:any,options?:any):any{\n if(!math?.length) return \"\"\n if(!math?.replace) return \"\"\n options = options || this.options\n let output:any = new SVG({fontCache:'local'});\n if(options?.output==\"chtml\"){\n output = new CHTML()\n }\n // 设置输入输出参数\n const mathjax_document:any = mathjax.document('',{\n skipHtmlTags:[\n 'script',\"noscript\",'style',\"textarea\",\"pre\",\"code\",\"annotation\",\"annotation-xml\"\n ],\n InputJax:new TeX({\n // displayMath: [['\\$\\$', '\\$\\$'], ['\\\\\\[', '\\\\\\]']],\n // inlineMath: [['\\$', '\\$'],['\\\\\\(', '\\\\\\)']],\n processEscapes: true,\n packages:AllPackages,\n }),\n OutputJax:output\n })\n const mathjax_options = {\n em:16,\n ex:8,\n containerWidth:1280\n }\n \n // Preprocess the input to handle inline and block math separately\n let regxList = [\n /\\$\\$\\ (.+?)\\ \\$\\$/g, // 匹配$$\\ \\ $$\n /\\$\\$(.+?)\\$\\$/g, // 匹配$$ $$\n /\\$\\$\\n(.+?)\\n\\$\\$/g, // 匹配$$\\n \\n$$\n /\\$(.+?)\\$/g, // 匹配$ $\n /\\\\\\((.+?)\\\\\\)/g, // 匹配\\()\n /\\\\\\[(.+?)\\\\\\]/g // 匹配\\[]\n ]\n regxList.forEach(regx=>{\n math = math\n .replace(regx, (match, p1) => {\n console.log(regx,match,p1)\n // Inline math\n let node\n try{\n node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n }catch(errReplace){}\n if(node){\n let nodeHtml = `${this.adaptor.innerHTML(node)}`\n return nodeHtml;\n }else{\n return p1\n }\n })\n })\n return math\n // math\n // .replace(/\\$\\$\\ (.+?)\\ \\$\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\$\\$(.+?)\\$\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\$\\$\\n(.+?)\\n\\$\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\$(.+?)\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\\\\\((.+?)\\\\\\)/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\\\\\[(.+?)\\\\\\]/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // return processedMath;\n \n // 内置Tex内容筛选(不如正则准确)\n // let node:any = mathjax_document.convert(math,mathjax_options) as any;\n // return adaptor.innerHTML(node);\n }\n \n}","import hljs from 'highlight.js';\nimport MarkdownIt from \"markdown-it\";\nimport $ from \"jquery\";\n\n/**\n * 自定义插件\n */\nimport { MarkdownMathJax } from './plugins/md-mathjax';\n\n/**\n * use插件\n */\n import abbr from 'markdown-it-abbr'\n import footnote from 'markdown-it-footnote'\n import deflist from 'markdown-it-deflist'\n import mark from 'markdown-it-mark'\n import ins from 'markdown-it-ins'\n import sub from 'markdown-it-sub'\n import sup from 'markdown-it-sup'\n// import imsize from 'markdown-it-imsize' // fs path\n import ruby from 'markdown-it-ruby'\n\nlet md = new MarkdownIt({\n html: true, // 在源码中启用 HTML 标签\n xhtmlOut: true, // 使用 '/' 来闭合单标签 (比如
)。\n // 这个选项只对完全的 CommonMark 模式兼容。\n breaks: false, // 转换段落里的 '\\n' 到
。\n // langPrefix: 'language-', // 给围栏代码块的 CSS 语言前缀。对于额外的高亮代码非常有用。\n linkify: false, // 将类似 URL 的文本自动转换为链接。\n \n // 启用一些语言中立的替换 + 引号美化\n typographer: false,\n \n // 双 + 单引号替换对,当 typographer 启用时。\n // 或者智能引号等,可以是 String 或 Array。\n //\n // 比方说,你可以支持 '«»„“' 给俄罗斯人使用, '„“‚‘' 给德国人使用。\n // 还有 ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] 给法国人使用(包括 nbsp)。\n quotes: '“”‘’',\n \n // 高亮函数,会返回转义的HTML。\n // 或 '' 如果源字符串未更改,则应在外部进行转义。\n // 如果结果以
${hljsCode}Language:${lang}
`;\n } catch (__) {}\n }\n \n return ''; // use external default escaping\n }\n });\n \n \n \n md.use(abbr)\n md.use(footnote)\n md.use(deflist)\n md.use(mark)\n md.use(ins)\n md.use(sub);\n md.use(sup);\n\n // md.use(katex);\n\n // md.use(figure, {\n // render: (content, displayMode) => {\n // // render tex here and return\n // },\n // }); // 加载@mdit/tex 被mathjax依赖\n // const mathjaxInstance = createMathjaxInstance({output:\"svg\"});\n // md.use(mathjax,mathjaxInstance)\n // import MathJax from 'mathjax';\n // (window as any).MathJax = MathJax;\n // (window as any).markdownitMathjax = {\n // messageStyle: 'none',\n // skipStartupTypeset: true,\n // tex2jax: {\n // inlineMath: [['$', '$'], ['\\\\[', '\\\\]'],['\\\\(', '\\\\)']],\n // processEscapes: true\n // },\n // TeX: {\n // extensions: ['mhchem.js']\n // }\n // };\n\n // (window as any).MathJax = {\n // messageStyle: 'none',\n // skipStartupTypeset: true,\n // tex2jax: {\n // inlineMath: [['$', '$'], ['\\\\(', '\\\\)']],\n // processEscapes: true\n // },\n // TeX: {\n // extensions: ['mhchem.js']\n // }\n // }\n\n // md.use(mathjax3)\n // md.use(mathjax())\n // md.use(mathjax({\n // beforeMath: '',\n // afterMath: '',\n // beforeInlineMath: '\\\\(',\n // afterInlineMath: '\\\\)',\n // beforeDisplayMath: '\\\\[',\n // afterDisplayMath: '\\\\]'\n // }))\n\n // md.use(imsize)\n md.use(ruby)\n \n /**\n * PlantUML 插件\n */\n const mditConfig = {\n plantumlServer:'https://www.plantuml.com/plantuml'\n }\n \n import plantumlEncoder from 'plantuml-encoder'\n /**\n * uml代码转图片地址方法\n * @param {*} umlCode \n * @returns \n * @example\n * console.log(makePlantumlURL(`@startuml\n start\n :创建本地仓库;\n :运行git init;\n :使用git add .;\n :使用git commit -m \"xxx\";\n :使用git remote add origin xxx;\n :使用git push -u origin \"master\";\n stop\n @enduml`))\n */\n\n\n\n function makePlantumlURL(umlCode:any){\n const format = 'svg'\n const code = plantumlEncoder.encode(umlCode)\n return `${mditConfig.plantumlServer}/${format}/${code}`\n }\n \n\n // https://github.com/qjebbs/vscode-plantuml/tree/master/src/markdown-it-plantuml\n md.renderer.rules['plantuml'] = (tokens:any, idx:any, options:any, env:any, self:any) => {\n const token = tokens[idx]\n if (token.type !== 'plantuml') {\n return tokens[idx].content\n }\n const url = makePlantumlURL(token.content)\n return `\n \n
${token.content}Language:plantuml
\n `\n}\n// https://github.com/qjebbs/vscode-plantuml/tree/master/src/markdown-it-plantuml\n// 默认不支持rules['plantuml'] 需要通过ruler push\nmd.core.ruler.push('plantuml', (state:any) => {\n const blockTokens = state.tokens\n for (const blockToken of blockTokens) {\n if (blockToken.type === 'fence' && blockToken.info === 'plantuml') {\n blockToken.type = 'plantuml'\n }\n }\n })\n\n // regex for extra tags\n const spaceregex = /\\s*/\n const notinhtmltagregex = /(?![^<]*>|[^<>]*<\\/)/\n let coloregex = /\\[color=([#|(|)|\\s|,|\\w]*?)\\]/\ncoloregex = new RegExp(coloregex.source + notinhtmltagregex.source, 'g')\nlet nameregex = /\\[name=(.*?)\\]/\nlet timeregex = /\\[time=([:|,|+|-|(|)|\\s|\\w]*?)\\]/\nconst nameandtimeregex = new RegExp(nameregex.source + spaceregex.source + timeregex.source + notinhtmltagregex.source, 'g')\nnameregex = new RegExp(nameregex.source + notinhtmltagregex.source, 'g')\ntimeregex = new RegExp(timeregex.source + notinhtmltagregex.source, 'g')\n\nfunction replaceExtraTags (html:any) { \n console.log(\"replaceExtraTags\",html)\n html = html.replace(coloregex, '')\n html = html.replace(nameandtimeregex, ' $1 $2')\n html = html.replace(nameregex, ' $1')\n html = html.replace(timeregex, ' $1')\n console.log(\"replaceExtraTags\",html)\n return html\n}\n\n\n// 生命周期:生成HTML后,动态修正生成内容:dynamic event or object binding here\nfunction finishView (html:any) {\n\n let mdDivEl = $.parseHTML(`
${html}
`)[0]\n let mdhtml$ = $(mdDivEl)\n\n /************************************************\n * 第一步:需操作DOM,进行页面修正\n */\n /**\n * BlockQuote 引用增强插件\n */\n // blockquote 修正引用标签\n let blockquote = mdhtml$.find('blockquote.raw').removeClass('raw')\n blockquote = mdhtml$.find('blockquote')\n\n let blockquoteP = $(blockquote).find('p')\n blockquoteP.each((key:any, value:any) => {\n let htmlStr = $(value).html()\n htmlStr = replaceExtraTags(htmlStr)\n value.innerHTML = htmlStr\n $(value).html(htmlStr)\n blockquoteP[key].innerHTML = htmlStr;\n $(blockquoteP[key]).html(htmlStr)\n })\n\n // 引用标签颜色渲染 color tag in blockquote will change its left border color\n let blockquoteColor = blockquote.find('.color')\n blockquoteColor.each((key:any, value:any) => {\n let dataColor:any = $(value).attr('data-color')\n $(value).closest('blockquote').css('border-left-color', dataColor)\n })\n\n \n let style = ``\n let result = style + (mdhtml$.html() || html)\n\n /************************************************\n * 第二步:无需操作DOM,替换文本信息\n */\n /**\n * uploads 修正附件地址\n */\n result = result.replaceAll('src=\"/uploads/','src=\"https://md.fmode.cn/uploads/')\n return result\n}\n\nexport class MarkdownParse{\n constructor(){\n } \n\n parseToHTML(markdown:any){\n if(!markdown?.length) return \"\"\n if(!markdown?.replace) return \"\"\n // this.info(\"markdown\",markdown)\n // console.log(JSON.stringify({md:markdown}))\n\n // 由于md=>html会转义原文本中的 \\( 为 (,\\[ 为 [,因此需要先mathjax转换再转markdown\n // 由于转换会将``` ```代码端中$ $组合形式的数据格式转换,因此需要先排除md代码段内容\n let mdMathJax = new MarkdownMathJax()\n markdown = markdown.split(\"```\").map((item,index)=>{\n // console.log(item,index);\n if(index%2==0){ // 根据代码段分割 偶数项 是非代码段\n item = mdMathJax.text_to_mathjax(item,{\n output:\"svg\"\n });\n return item\n }else{\n return item\n }\n }).join(\"```\")\n\n let htmlResult = md.render(markdown);\n\n // this.info(\"html\",htmlResult)\n htmlResult = finishView(htmlResult);\n // this.info(\"html plus\",htmlResult)\n return htmlResult;\n }\n info(...args:any){\n // console.log(...args)\n }\n // Markdown Text to HTML\n // HTML DOM to Enhance HTML DOM\n}","import { AfterViewInit, Component, ElementRef, Input, Renderer2, ViewChild } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nimport {MarkdownParse} from \"./markdown-parse\";\n\n/**\n * Markdown 文档高级渲染组件\n * @name fm-markdown-preview\n * @public\n */\n@Component({\n selector: 'fm-markdown-preview',\n templateUrl: './markdown-preview.component.html',\n styleUrls: ['./markdown-preview.component.scss']\n})\nexport class MarkdownPreviewComponent implements AfterViewInit {\n @Input() content:string = ``\n safeHTML:SafeHtml\n\n @ViewChild('mdContent') mdContent: ElementRef;\n \n /**\n * 是否开启MD渲染,默认开启\n * @default true\n */\n @Input() render:boolean = true\n constructor(\n private domSan:DomSanitizer,\n private renderer:Renderer2\n ){\n }\n\n ngAfterViewInit(){\n this.renderMdToHTML()\n }\n\n renderMdToHTML(){\n if(!this.render) return\n let mdparser = new MarkdownParse()\n let htmlResult = mdparser.parseToHTML(this.content)\n this.safeHTML = this.domSan.bypassSecurityTrustHtml(htmlResult)\n\n let mdDiv = this.renderer.createElement(\"div\");\n mdDiv.innerHTML = htmlResult;\n // console.log(mdDiv.innerHTML)\n\n this.renderer.appendChild(this.mdContent.nativeElement,mdDiv)\n \n }\n}\n","
\n
\n
\n
\n {{content}}\n
\n
","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MarkdownPreviewComponent } from './markdown-preview.component';\n\n\n@NgModule({\n declarations: [\n MarkdownPreviewComponent\n ],\n imports: [\n CommonModule,\n ],\n exports:[\n MarkdownPreviewComponent\n ]\n})\nexport class MarkdownPreviewModule { }\n","import { Injectable } from '@angular/core';\nimport { ToastController } from '@ionic/angular';\nimport { Clipboard } from '@capacitor/clipboard';\n\n/**\n * 剪贴板服务:支持H5、微信、移动端\n * @public\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ClipboardService {\n\n constructor(\n private toastCtrl:ToastController\n ) { \n\n }\n async copyToClipboard(content){\n try{\n await Clipboard.write({\n string: content\n });\n this.copySuccess()\n return\n }catch(error1){\n try{\n if (navigator.clipboard && window.isSecureContext) {\n await navigator?.clipboard?.writeText(content)\n this.copySuccess()\n return\n }else{\n throw false\n }\n }catch(error2){\n // 旧的方式\n // 创建一个文本域元素\n let textArea = document.createElement(\"textarea\");\n textArea.value = content;\n\n // 使文本域不在视线范围内\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-9999px\";\n textArea.style.top = \"-9999px\";\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select(); // 选中文本\n\n try {\n // 执行复制命令\n let successful = document?.execCommand('copy');\n if (successful) {\n this.copySuccess();\n } else {\n console.error('无法复制文本');\n }\n } catch (err) {\n console.error('无法复制文本: ', err);\n }\n // 移除文本域\n document.body.removeChild(textArea);\n }\n }\n }\n async copySuccess(){\n let toast = await this.toastCtrl.create({\n duration:1000,\n message:\"复制成功\",\n color:'primary',\n icon:\"information-circle\",\n position:\"top\"\n })\n toast.present();\n }\n}\n\n\n\n\n\n","\nexport function pcmtoWav(pcmsrt, sampleRate, numChannels, bitsPerSample) {\n //参数->(base64编码的pcm流,采样频率,声道数,采样位数)\n let header = {\n // OFFS SIZE NOTES\n chunkId: [0x52, 0x49, 0x46, 0x46], // 0 4 \"RIFF\" = 0x52494646\n chunkSize: 0, // 4 4 36+SubChunk2Size = 4+(8+SubChunk1Size)+(8+SubChunk2Size)\n format: [0x57, 0x41, 0x56, 0x45], // 8 4 \"WAVE\" = 0x57415645\n subChunk1Id: [0x66, 0x6d, 0x74, 0x20], // 12 4 \"fmt \" = 0x666d7420\n subChunk1Size: 16, // 16 4 16 for PCM\n audioFormat: 1, // 20 2 PCM = 1\n numChannels: numChannels || 1, // 22 2 Mono = 1, Stereo = 2...\n sampleRate: sampleRate || 16000, // 24 4 8000, 44100...\n byteRate: 0, // 28 4 SampleRate*NumChannels*BitsPerSample/8\n blockAlign: 0, // 32 2 NumChannels*BitsPerSample/8\n bitsPerSample: bitsPerSample || 16, // 34 2 8 bits = 8, 16 bits = 16\n subChunk2Id: [0x64, 0x61, 0x74, 0x61], // 36 4 \"data\" = 0x64617461\n subChunk2Size: 0, // 40 4 data size = NumSamples*NumChannels*BitsPerSample/8\n }\n function u32ToArray(i) {\n return [i & 0xff, (i >> 8) & 0xff, (i >> 16) & 0xff, (i >> 24) & 0xff]\n }\n function u16ToArray(i) {\n return [i & 0xff, (i >> 8) & 0xff]\n }\n let pcm = new Uint8Array(pcmsrt)\n header.blockAlign = (header.numChannels * header.bitsPerSample) >> 3\n header.byteRate = header.blockAlign * header.sampleRate\n header.subChunk2Size = pcm.length * (header.bitsPerSample >> 3)\n header.chunkSize = 36 + header.subChunk2Size\n\n let wavHeader = header.chunkId.concat(\n u32ToArray(header.chunkSize),\n header.format,\n header.subChunk1Id,\n u32ToArray(header.subChunk1Size),\n u16ToArray(header.audioFormat),\n u16ToArray(header.numChannels),\n u32ToArray(header.sampleRate),\n u32ToArray(header.byteRate),\n u16ToArray(header.blockAlign),\n u16ToArray(header.bitsPerSample),\n header.subChunk2Id,\n u32ToArray(header.subChunk2Size)\n )\n let wavHeaderUnit8 = new Uint8Array(wavHeader)\n\n let mergedArray = new Uint8Array(wavHeaderUnit8.length + pcm.length)\n mergedArray.set(wavHeaderUnit8)\n mergedArray.set(pcm, wavHeaderUnit8.length)\n let blob = new Blob([mergedArray], { type: 'audio/wav' })\n return blob\n}\n","export function resampleAudio(frameBuffer: number[], inputSampleRate: number, outputSampleRate: number): number[] {\n let inputLength = frameBuffer.length;\n let outputLength = Math.floor((inputLength / inputSampleRate) * outputSampleRate);\n let outputBuffer: number[] = [];\n \n for (let i = 0; i < outputLength; i++) {\n let index = Math.floor(i * (inputSampleRate / outputSampleRate));\n outputBuffer[i] = frameBuffer[index];\n }\n \n return outputBuffer;\n }\n\nexport function convertFrameBufferToBase64(frameBuffer: number[]): string {\n// 创建一个存储转换后数据的Uint8Array\nconst uint8Array = new Uint8Array(frameBuffer.length * 2); // 16位小端LE,每个样本占用2个字节\n\n// 将frameBuffer中的每个样本转换为16位小端字节序\nfor (let i = 0; i < frameBuffer.length; i++) {\n const sample = frameBuffer[i];\n uint8Array[i * 2] = sample & 0xff; // 低字节\n uint8Array[i * 2 + 1] = (sample >> 8) & 0xff; // 高字节\n}\n\n// 使用btoa函数将Uint8Array转换为base64字符串\nconst base64String = btoa(String.fromCharCode.apply(null, uint8Array));\n\nreturn base64String;\n}\n\nexport function resampleBuffer(buffer: Int16Array, fromRate: number, toRate: number): Int16Array {\n const ratio = fromRate / toRate;\n const length = Math.round(buffer.length / ratio);\n const result = new Int16Array(length);\n\n for (let i = 0; i < length; i++) {\n const j = Math.floor(i * ratio);\n result[i] = buffer[j];\n }\n\n return result;\n}","import { Platform } from \"@ionic/angular\"\n\n/**\n * 英文语音唤醒\n */\ndeclare var webkitSpeechRecognition:any\nconst SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition\nconst SpeechGrammarList = (window as any).SpeechGrammarList || (window as any).webkitSpeechGrammarList\nexport class WebSpeech{\n constructor(\n private platform:Platform\n ){}\n /**\n * 语音识别\n * @desc\n * 注意:需要校验说话开始和结束时间2-3秒后,自动结束语音听取\n * @see\n * https://www.jianshu.com/p/e42638839475\n * @param word \n */\n recognition:any\n startRecognition(words=\"Nihao | Hello\"){\n if(!SpeechRecognition) return\n if(this.recognition)this.recognition.stop();\n console.log(\"startRecognition\")\n this.recognition = new SpeechRecognition();\n if(!this.recognition) return\n // this.recognition.lang = \"zh-CH\";\n this.recognition.continuous = true; // 持续识别不间断\n let grammar =\n `#JSGF V1.0; grammar words; public = ${words} ;`;\n this.recognition = new SpeechRecognition();\n let speechRecognitionList = new SpeechGrammarList();\n speechRecognitionList.addFromString(grammar, 1);\n this.recognition.grammars = speechRecognitionList;\n this.recognition.start();\n this.recognition.onresult = (event)=>{ \n let results = event.results || []\n console.log(results)\n console.log(results[0]?.[0])\n if(results[0]?.[0]?.transcript?.indexOf(\"Nihao\")>-1){\n console.log(\"Nihao成功唤醒\")\n }\n if(results[0]?.[0]?.transcript?.indexOf(\"Hello\")>-1){\n console.log(\"Hello成功唤醒\")\n }\n this.startRecognition(); // 单词唤醒后,持续唤醒\n }\n this.recognition.onend = (event)=>{\n console.log(event)\n // this.startRecognition()\n }\n this.recognition.onerror = (err)=>{\n console.error(err)\n // this.startRecognition()\n }\n }\n\n /**\n * TTS合成\n * @param sentence:要说的句子\n * @param pitch: 音调,取值范围(0 - 2) 默认值:1\n * @param rate: 语速,取值范围(0.1 - 10) 默认值:1\n * @param volume: 音量,取值范围(0 - 1) 默认值:0.5\n * @see\n * https://zhuanlan.zhihu.com/p/141582231\n */\n speak(sentence, pitch=1,rate=1.2,volume=0.8) {\n // 优先插件播放\n if(this.platform.is(\"capacitor\")){\n\n return\n }\n\n // 保底Web播放\n this.speakWithEdge(sentence, pitch=1,rate=1.2,volume=0.8)\n }\n speakWithEdge(sentence, pitch=1,rate=1.2,volume=0.8){\n // window.speechSynthesis.pause();\n let utterance = new SpeechSynthesisUtterance(sentence)\n let voice = this.getVoiceByName(\"Yaoyao\");\n console.log(voice)\n if(voice) {\n utterance.voice = voice\n }\n utterance.rate = rate\n utterance.pitch = pitch\n utterance.volume = 10 // volume\n\n window.speechSynthesis.speak(utterance)\n }\n getVoiceByName(name){\n let voices = window.speechSynthesis.getVoices()\n let voice = voices.find(v=>v.name.indexOf(name)>-1)\n return voice\n }\n}","import { EventEmitter, Injectable, Output } from '@angular/core';\n// import RecorderManager from \"./lib/xunfei-recorder\"\n// import {RecorderManager} from \"./lib/recorder/recorder-manager\"\nimport Recorder from 'recorder-core'\nimport 'recorder-core/src/engine/pcm'\nimport 'recorder-core/src/engine/wav'\nimport 'recorder-core/src/extensions/waveview'\nimport CryptoJS from \"crypto-js\"\nimport { pcmtoWav } from './lib/pcm2wav';\nimport { convertFrameBufferToBase64, resampleAudio, resampleBuffer } from './lib/resample';\nimport { WebSpeech } from './class-asr';\nimport { Platform } from '@ionic/angular';\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\n// import { FmodeTTSXunfei } fro./class-tts-xunfei.ts.bakfei'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FmodeVoiceService {\n\n /**\n * 关闭ASR:用于测试其他功能时,可关闭ASR节省语音接口消耗\n */\n disableASR:false;\n /**\n * 讯飞TTS语音合成\n */\n // ttsXunfei = new FmodeTTSXunfei()\n /**\n * WebSpeech 语音库\n */\n webSpeech = WebSpeech\n constructor(\n private platform:Platform,\n private diagnostic: Diagnostic, \n ) { \n this.requestPermission();\n // this.recorder.on(\"start\",() => {\n // })\n\n // this.recorder.on(\"frameRecorded\", ({ isLastFrame, frameBuffer }) => {\n // if (this.iatWS.readyState === this.iatWS.OPEN) {\n // this.iatWS.send(\n // JSON.stringify({\n // data: {\n // status: isLastFrame ? 2 : 1,\n // format: \"audio/L16;rate=16000\",\n // encoding: this.encodingType,\n // audio: this.toBase64(frameBuffer),\n // },\n // })\n // );\n // if (isLastFrame) {\n // this.changeBtnStatus(\"CLOSING\");\n // }\n // }\n // })\n\n // this.recorder.on(\"stop\",() => {\n // })\n\n\n }\n\n\n\n onResultTextChanged:Function\n /**()\n * 用户操作:录音按钮快捷触发操作\n */\n toggleRecord(){\n console.log(this.btnStatus)\n if (this.btnStatus === \"UNDEFINED\" || this.btnStatus === \"CLOSED\") {\n // 开始讲话`\n this.startTalk()\n } else if (this.btnStatus === \"CONNECTING\" || this.btnStatus === \"OPEN\") {\n // 结束录音 并发送消息等待回复\n this.finishTalk()\n }\n }\n /**\n * 用户操作:完成录音,并处理转录结果\n */\n isUserFinish:boolean = false;\n finishTalk(){\n this.isUserFinish = true;\n this.onBeforeFinishTalk&&this.onBeforeFinishTalk()\n this.recordStop()\n }\n onBeforeFinishTalk: Function\n onAfterFinishTalk: Function\n onInputChange:Function\n /**\n * 用户操作:开始讲话,实时转录语言\n */\n async startTalk(evnet?){\n this.resultText = \"\"\n this.resultTextTemp = \"\"\n this.onBeforeStartTalk&&this.onBeforeStartTalk()\n event?.preventDefault()\n await this.openWithPriviledge()\n setTimeout(() => {\n this.connectWebSocket()\n }, 100);\n\n this.startCountdown();\n this.onAfterStartTalk&&this.onAfterStartTalk()\n }\n onBeforeStartTalk: Function\n onAfterStartTalk: Function\n \n /**\n * 用户操作:取消讲话,且不发送结果\n */\n cancelTalk(){\n this.onBeforeCancelTalk&&this.onBeforeCancelTalk()\n this.recordStop(); // 停止录制\n this.iatWS?.close(); // 断开连接\n this.resultText = null; // 设置转录结果为空\n this.onAfterCancelTalk&&this.onAfterCancelTalk()\n }\n /**\n * 操作回调\n */\n onBeforeCancelTalk: Function\n onAfterCancelTalk: Function\n onAfterRecordStart: Function\n\n /**\n * 程序逻辑\n */\n async recordStart(){\n this.createRecorder();\n await this.openWithPriviledge()\n this.recorder.start();\n this.changeBtnStatus(\"OPEN\");\n this.onAfterRecordStart&&this.onAfterRecordStart()\n }\n recordStop(){\n return new Promise((resolve)=>{\n clearInterval(this.countdownInterval);\n this.changeBtnStatus(\"CLOSED\");\n this.recorder?.stop(async (blob:Blob,duration:number)=>{\n //录音结束后,发送录音结束帧\n try{\n this.iatWS.send(\n JSON.stringify({\"data\":{\"status\":2,\"format\":\"audio/L16;rate=16000\",\"encoding\":this.encodingType,\"audio\":\"\"}})\n );\n }catch(err){}\n\n //简单利用URL生成本地文件地址,注意不用了时需要revokeObjectURL,否则霸占内存\n //此地址只能本地使用,比如赋值给audio.src进行播放,赋值给a.href然后a.click()进行下载(a需提供download=\"xxx.mp3\"属性)\n let localUrl=(window.URL||webkitURL).createObjectURL(blob);\n console.log(blob,localUrl,\"时长:\"+duration+\"ms\");\n this.recordPcmBlob = blob;\n this.recordWavBlob = await this.pcmBlobToWavBlob(blob,44100);\n // this.recordDuration = duration; // 单词录制时长和总时长不一致,总时长通过durationInterval每100ms记录\n console.log(\"this.recordWavBlob\",this.recordWavBlob)\n setTimeout(() => {\n if(this.isUserFinish){\n this.onAfterFinishTalk&&this.onAfterFinishTalk()\n this.isUserFinish = false;\n }\n }, 2000);\n this.recorder?.close();//释放录音资源,当然可以不释放,后面可以连续调用start;但不释放时系统或浏览器会一直提示在录音,最佳操作是录完就close掉\n this.recorder=null;\n \n //已经拿到blob文件对象想干嘛就干嘛:立即播放、上传、下载保存\n \n /*** 【立即播放例子】 ***/\n // this.audioPlayer= new Audio();\n // this.audioPlayer.controls=true;\n // this.audioPlayer.src=localUrl;\n console.log(\"localUrl\",localUrl)\n // 等待语音转义完成,处理转录结果\n // 需要准确判断websocket已经close了\n resolve(true);\n },(msg)=>{\n console.log(\"录音失败:\"+msg);\n this.recorder.close();//可以通过stop方法的第3个参数来自动调用close\n this.recorder=null;\n resolve(null)\n })\n })\n }\n recordWavBlob:Blob = null\n recordPcmBlob:Blob = null\n recordDuration:number = 0;\n playRecord(){\n this.playPCM(this.recordPcmBlob,44100)\n }\n async pcmBlobToWavBlob(pcmBlob, sampleRate):Promise{\n return new Promise(resolve=>{\n let fileReader = new FileReader();\n \n // 读取Blob数据\n fileReader.onload = function(event) {\n let pcmData:any = event.target.result;\n // Convert PCM data to WAV format\n let wavBlob = pcmtoWav(pcmData, sampleRate,1,16);\n resolve(wavBlob)\n };\n \n // 将Blob转换为ArrayBuffer\n fileReader.readAsArrayBuffer(pcmBlob);\n })\n }\n async playPCM(pcmBlob, sampleRate) {\n let wavBlob = await this.pcmBlobToWavBlob(pcmBlob,sampleRate);\n let wavUrl = window.URL.createObjectURL(wavBlob)\n let audio = new Audio();\n audio.src = wavUrl;\n audio.play();\n }\n buffers:Array\n async playBuffers(){\n // let audioBuffer = []\n // this.buffers.forEach(buffer=>{\n // audioBuffer.push(buffer)\n // })\n let audioBlob = await this.BuffersToBlob(this.buffers)\n this.playPCM(audioBlob,44100)\n }\n BuffersToBlob(buffers) {\n let audioBuffer:any = []\n buffers.forEach(buffer=>{\n buffer.forEach(int16=>{\n audioBuffer.push(int16)\n })\n })\n return new Blob([audioBuffer], { type: 'audio/pcm' });\n }\n // 将录音数据分割为每次发送的音频片段 1280字节\n splitAudioData(audioData) {\n const segmentSize = 1280; // 目标切片大小,单位为字节\n const segmentCount = Math.ceil(audioData.length / segmentSize); // 切片数量\n const segments = [];\n \n for (let i = 0; i < segmentCount; i++) {\n const start = i * segmentSize;\n const end = start + segmentSize;\n const segment = audioData.slice(start, end);\n \n segments.push(segment);\n }\n \n return segments;\n }\n BufferToBlob(buffer) {\n return new Blob([buffer], { type: 'audio/pcm' });\n }\n recordType = \"pcm\"\n encodingType = \"raw\"\n createRecorder(){\n if(this.recorder) return\n this.recorder = Recorder({ //本配置参数请参考下面的文档,有详细介绍\n type:this.recordType,sampleRate:44100,bitRate:16 //pcm格式,指定采样率hz、比特率kbps,其他参数使用默认配置;注意:是数字的参数必须提供数字,不要用字符串;需要使用的type类型,需提前把格式支持文件加载进来,比如使用wav格式需要提前加载wav.js编码引擎\n ,onProcess:(buffers,powerLevel,bufferDuration,bufferSampleRate,newBufferIdx,asyncEnd)=>{\n //录音实时回调,大约1秒调用12次本回调,buffers为开始到现在的所有录音pcm数据块(16位小端LE)\n //可利用extensions/sonic.js插件实时变速变调,此插件计算量巨大,onProcess需要返回true开启异步模式\n //可实时上传(发送)数据,配合Recorder.SampleData方法,将buffers中的新数据连续的转换成pcm上传,或使用mock方法将新数据连续的转码成其他格式上传,可以参考文档里面的:Demo片段列表 -> 实时转码并上传-通用版;基于本功能可以做到:实时转发数据、实时保存数据、实时语音识别(ASR)等\n // 实时发送录音至接口\n // console.log(\"asyncEnd:\",asyncEnd)\n // console.log(buffers.length,bufferDuration,bufferSampleRate,newBufferIdx)\n let isLastFrame = false && this.btnStatus==\"CLOSED\"; // 主动关闭作为最后帧\n // 录音默认为 44100 采样率 pcm不支持再process中实时转换\n // 需要压缩为 16000 上传\n let frameBuffer = buffers.length&&buffers[buffers.length-1];\n this.buffers = buffers\n frameBuffer = resampleBuffer(frameBuffer,44100,16000);\n // this.playPCM(this.BufferToBlob(frameBuffer),16000) // 切片数据播放,采样率测试\n\n if (this.iatWS.readyState === this.iatWS.OPEN) {\n if(this.disableASR) return\n this.iatWS.send(\n JSON.stringify({\n data: {\n status: isLastFrame ? 2 : 1,\n format: \"audio/L16;rate=16000\",\n encoding: this.encodingType,\n audio: convertFrameBufferToBase64(frameBuffer)// this.toBase64(audioData),\n },\n })\n );\n \n if (isLastFrame) {\n this.changeBtnStatus(\"CLOSING\");\n }\n }\n //可实时绘制波形(extensions目录内的waveview.js、wavesurfer.view.js、frequency.histogram.view.js插件功能)\n this.waveClient?.input(buffers[buffers.length-1],powerLevel,bufferSampleRate);\n }\n });\n }\n \n async openWithPriviledge(){\n console.log(this.btnStatus)\n await this.requestPermission();\n this.createRecorder();\n if(Recorder.IsOpen()) return true\n return new Promise(resolve=>{\n //var dialog=createDelayDialog(); 我们可以选择性的弹一个对话框:为了防止移动端浏览器存在第三种情况:用户忽略,并且(或者国产系统UC系)浏览器没有任何回调,此处demo省略了弹窗的代码\n this.recorder.open(()=>{//打开麦克风授权获得相关资源\n //dialog&&dialog.Cancel(); 如果开启了弹框,此处需要取消\n //rec.start() 此处可以立即开始录音,但不建议这样编写,因为open是一个延迟漫长的操作,通过两次用户操作来分别调用open和start是推荐的最佳流程\n //创建可视化,指定一个要显示的div\n let waveDiv = document.querySelector(\".record-wave\");\n if(waveDiv){ // 存在波形区域时,加载渲染组件\n console.log(waveDiv)\n if(Recorder.WaveView)this.waveClient=Recorder.WaveView({elem:\".record-wave\"});\n }\n resolve(true);\n },(msg,isUserNotAllow)=>{//用户拒绝未授权或不支持\n //dialog&&dialog.Cancel(); 如果开启了弹框,此处需要取消\n console.log((isUserNotAllow?\"UserNotAllow,\":\"\")+\"无法录音:\"+msg);\n });\n })\n\n }\n\n connStatus = \"\" // 录音中 建立连接中 关闭连接中\n\n btnStatus = \"UNDEFINED\"; // \"UNDEFINED\" \"CONNECTING\" \"OPEN\" \"CLOSING\" \"CLOSED\"\n\n waveClient:any // 用户波形\n recorder:any\n // recorder = new RecorderManager();\n // recorder = new RecorderManager(\"./lib/xunfei-recorder\");\n \n iatWS;\n resultText = \"\";\n resultTextTemp = \"\";\n countdownInterval;\n durationInterval;\n\n /**\n * 获取websocket url\n * 该接口需要后端提供,这里为了方便前端处理\n */\n APPID = \"50f4a46c\";\n API_SECRET = \"NzFlNmFhZDJjMDNkZGM3NzI0Mzg2OGNm\";\n API_KEY = \"106ddc40dfd4b9ca6d7b47c70fada749\";\n getWebSocketUrl() {\n // 请求地址根据语种不同变化\n let url = \"wss://iat-api.xfyun.cn/v2/iat\";\n let host = \"iat-api.xfyun.cn\";\n \n let apiKey = this.API_KEY;\n let apiSecret = this.API_SECRET;\n let date = new Date().toUTCString();\n let algorithm = \"hmac-sha256\";\n let headers = \"host date request-line\";\n let signatureOrigin = `host: ${host}\\ndate: ${date}\\nGET /v2/iat HTTP/1.1`;\n let signatureSha = CryptoJS.HmacSHA256(signatureOrigin, apiSecret);\n let signature = CryptoJS.enc.Base64.stringify(signatureSha);\n let authorizationOrigin = `api_key=\"${apiKey}\", algorithm=\"${algorithm}\", headers=\"${headers}\", signature=\"${signature}\"`;\n let authorization = btoa(authorizationOrigin);\n url = `${url}?authorization=${authorization}&date=${date}&host=${host}`;\n return url;\n }\n\n toBase64(buffer) {\n var binary = \"\";\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n\n /**\n * 倒计时:最长支持60秒实时语音转录,如果持续7-10秒无声音,服务端将自动CLOSE链接\n */\n /**\n * 计时器\n */\n onDurationStrChange: Function\n\n durationStr:string = \"00:00\";\n duration:number = 0;\n now:Date;\n countTimer(){\n\n // let diff = new Date().getTime() - this.now.getTime();\n // diff = diff / 1000\n\n // 无限增长计时\n this.duration ++;\n let minuteStr = String(parseInt(String(this.duration/60))).padStart(2,\"0\");\n let secondStr = String((this.duration%60).toFixed(0)).padStart(2,\"0\");\n let durationStr = minuteStr + \":\" + secondStr;\n this.durationStr = durationStr;\n this.connStatus = `录音中(${this.durationStr})`;\n console.log(this.duration,minuteStr,secondStr);\n console.log(this.duration);\n console.log(durationStr);\n this.onDurationStrChange&&this.onDurationStrChange(durationStr);\n }\n \n startCountdown() {\n // 更新录音时长\n this.recordDuration = 0;\n if(this.durationInterval) clearInterval(this.durationInterval)\n this.countdownInterval = setInterval(() => {\n this.recordDuration += 100;\n }, 100);\n\n // 更新倒计时\n // let seconds = 60;\n this.now = new Date();\n this.duration = 0;\n if(this.countdownInterval) clearInterval(this.countdownInterval)\n this.countdownInterval = setInterval(() => {\n this.countTimer();\n }, 1000);\n }\n\n changeBtnStatus(status) {\n this.btnStatus = status;\n if (status === \"CONNECTING\") {\n this.connStatus = \"建立连接中\";\n } else if (status === \"OPEN\") {\n } else if (status === \"CLOSING\") {\n this.connStatus = \"关闭连接中\";\n } else if (status === \"CLOSED\") {\n this.connStatus = \"开始录音\";\n }\n }\n\n renderResult(resultData) {\n // 识别结束\n let jsonData = JSON.parse(resultData);\n // console.log(jsonData.data.result)\n if (jsonData.data && jsonData.data.result) {\n let data = jsonData.data.result;\n let str = \"\";\n let ws = data.ws;\n for (let i = 0; i < ws.length; i++) {\n str = str + ws[i].cw[0].w;\n console.log(str)\n }\n // 开启wpgs会有此字段(前提:在控制台开通动态修正功能)\n // 取值为 \"apd\"时表示该片结果是追加到前面的最终结果;取值为\"rpl\" 时表示替换前面的部分结果,替换范围为rg字段\n if (data.pgs) {\n if (data.pgs === \"apd\") {\n // 将this.resultTextTemp同步给this.resultText\n this.resultText = this.resultTextTemp;\n }\n // 将结果存储在this.resultTextTemp中\n this.resultTextTemp = this.resultText + str;\n } else {\n this.resultText = this.resultText + str;\n }\n this.resultTextTemp || this.resultText || \"\";\n console.log(\"diff temp\",this.resultTextTemp)\n console.log(\"diff result\",this.resultText)\n\n this.onInputChange&&this.onInputChange(this.getUserInput())\n }\n if (jsonData.code === 0 && jsonData.data.status === 2) {\n this.iatWS.close();\n }\n if (jsonData.code !== 0) {\n this.iatWS.close();\n console.error(jsonData);\n }\n }\n\n getUserInput(){\n return \"\"+(this.resultTextTemp||this.resultText)\n }\n connectWebSocket() {\n console.log(\"connectWebSocket\");\n const websocketUrl = this.getWebSocketUrl();\n if (\"WebSocket\" in window) {\n this.iatWS = new WebSocket(websocketUrl);\n } else if (\"MozWebSocket\" in window) {\n // this.iatWS = new MozWebSocket(websocketUrl); // Moz兼容\n } else {\n alert(\"浏览器不支持WebSocket\");\n return;\n }\n console.log(\"connectWebSocket\",this.btnStatus);\n this.changeBtnStatus(\"CONNECTING\");\n this.iatWS.onopen = (e) => {\n // 开始录音\n this.recordStart();\n var params = {\n common: {\n app_id: this.APPID,\n },\n business: {\n language: \"zh_cn\",\n domain: \"iat\",\n accent: \"mandarin\",\n vad_eos: 5000,\n dwa: \"wpgs\",\n },\n data: {\n status: 0,\n format: \"audio/L16;rate=16000\",\n encoding: this.encodingType,\n // encoding: \"speex-wb\",\n },\n };\n this.iatWS.send(JSON.stringify(params));\n };\n this.iatWS.onmessage = (e) => {\n console.log(\"onmessage\"+this.resultText)\n this.renderResult(e.data);\n };\n this.iatWS.onerror = (e) => {\n console.error(\"error\",e);\n this.recordStop();\n this.changeBtnStatus(\"CLOSED\");\n };\n this.iatWS.onclose = async (e) => {\n // 5秒停顿会导致结束录制\n console.log(\"onclose\"+this.resultText)\n // console.error(\"close\",e)\n // await this.recordStop();\n // this.changeBtnStatus(\"CLOSED\");\n this.reconnectWebsocket()\n\n };\n }\n\n /**\n * 断开自动重连\n * @desc\n * 停留5秒自动断开重连\n * 60秒断开后重连\n */\n async reconnectWebsocket(){\n if(this.isUserFinish) return\n this.connectWebSocket();\n }\n\n /**\n * 移动端兼容方法\n */\n\n /**\n * 移动端上传专用方法\n * @returns \n */\n isCapacitor(){\n return this.platform.is(\"capacitor\") || this.platform.is(\"cordova\")\n }\n async requestPermission(){\n if(!this.isCapacitor()) return\n try{\n await this.requestStoagePermission();\n await this.requestCameraPermission();\n await this.requestMicPermission();\n await this.requestRecordAudioPermission();\n }catch(err){\n console.error(err)\n }\n }\n async requestRecordAudioPermission(){\n let data = await this.diagnostic.requestRuntimePermissions([this.diagnostic.permission.RECORD_AUDIO])\n console.log(\"record permission request:\",data)\n return\n }\n async requestMicPermission(){\n let isAvailable = await this.diagnostic.isMicrophoneAuthorized()\n console.log(\"permisson_MIC:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestMicrophoneAuthorization()\n }\n return\n }\n async requestStoagePermission(){\n let isAvailable = await this.diagnostic.isExternalStorageAuthorized()\n console.log(\"permisson_STORAGE:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestExternalStorageAuthorization()\n }\n return\n }\n async requestCameraPermission(){\n let isAvailable = await this.diagnostic.isCameraAuthorized()\n console.log(\"permisson_Camera:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestCameraAuthorization()\n }\n return\n }\n}\n","\nimport * as BABYLON from '@babylonjs/core';\nimport '@babylonjs/loaders';\nimport { AvatarRole } from './avatar.role';\n\nexport class RolePointsCloud implements AvatarRole{\n scene:BABYLON.Scene\n engine:BABYLON.Engine\n constructor(scene,engine,camera){\n this.scene = scene\n this.engine = this.engine\n }\n Mesh:BABYLON.Mesh\n offsetPosition = new BABYLON.Vector3(0,1.25,0)\n animationGroup:BABYLON.AnimationGroup = new BABYLON.AnimationGroup(\"RoleAnimGroup\")\n AnimMap = {\n idle:null\n }\n async init(){\n this.Mesh = this.loadMesh();\n this.loadIdleAnim();\n }\n\n playAnim(anim){\n // this.Mesh.animations[0]\n // this.animationGroup.start(true,1,0,120,null)\n this.scene.beginDirectAnimation(this.Mesh, [this.AnimMap[anim]], 0, 120, true);\n }\n loadMesh(){\n let sphere = BABYLON.MeshBuilder.CreateSphere(\"sphere\", { diameter: 2 }, this.scene);\n sphere.position.addInPlace(this.offsetPosition)\n sphere.visibility = 1 // 不可见,仅用于粒子覆盖占位\n // 材质\n sphere.material = new BABYLON.StandardMaterial(\"mat\", this.scene);\n sphere.material.wireframe = true;\n // 设置初始缩放\n sphere.scaling = new BABYLON.Vector3(1, 1, 1);\n return sphere\n }\n loadIdleAnim(){\n // 创建动画\n let idleAnim = new BABYLON.Animation(\n \"idle\",\n \"scaling\",\n 30,\n BABYLON.Animation.ANIMATIONTYPE_VECTOR3,\n BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE\n );\n \n // 定义动画关键帧\n let keys = [];\n keys.push({\n frame: 0,\n value: new BABYLON.Vector3(1,1,1) // 初始缩放\n });\n keys.push({\n frame: 60,\n value: new BABYLON.Vector3(1.5,1.5,1.5) // 最大缩放\n });\n keys.push({\n frame: 120,\n value: new BABYLON.Vector3(1,1,1) // 初始缩放\n });\n idleAnim.setKeys(keys)\n // 将关键帧添加到动画\n this.Mesh.animations.push(this.AnimMap.idle)\n this.AnimMap.idle = idleAnim\n this.animationGroup.addTargetedAnimation(this.AnimMap.idle,this.Mesh)\n }\n \n}","import { CommonModule } from '@angular/common';\nimport { Component, AfterViewInit, ElementRef } from '@angular/core';\nimport { ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n/**\n * npm i -S @babylonjs/core\n * npm i -S @babylonjs/loaders\n */\nimport * as BABYLON from '@babylonjs/core';\n// import { CloudPoint } from '@babylonjs/core';\nimport '@babylonjs/loaders';\nimport { AvatarRole } from './avatar.role';\nimport { RolePointsCloud } from './role-points.class';\n\n@Component({\n selector: 'fm-avatar-role-particle',\n standalone:true,\n imports:[CommonModule,FormsModule],\n templateUrl: './comp-avatar-particle.component.html',\n styleUrls: ['./comp-avatar-particle.component.scss']\n})\nexport class CompAvatarParticleComponent implements AfterViewInit {\n @ViewChild(\"renderCanvas\") renderCanvas:ElementRef\n \n // 画布\n private canvas: HTMLCanvasElement|undefined;\n private engine: BABYLON.Engine|undefined;\n private scene: BABYLON.Scene|undefined;\n mainCamera:BABYLON.ArcRotateCamera|BABYLON.VRDeviceOrientationArcRotateCamera|undefined;\n constructor(private elementRef: ElementRef) {\n }\n ngAfterViewInit(): void {\n this.canvas = this.renderCanvas.nativeElement;\n console.log(this.canvas)\n if(this.canvas){\n let options:BABYLON.EngineOptions = {\n }\n this.engine = new BABYLON.Engine((this.canvas as any), true,options);\n console.log(this.engine)\n // 创建场景\n this.createScene();\n this.engine.runRenderLoop(() => {\n this.scene?.render();\n this.engine?.resize();\n });\n window.addEventListener('resize', () => {\n this.engine?.resize();\n });\n }\n }\n currentRole:AvatarRole\n async createScene() {\n // 创建场景\n this.scene = new BABYLON.Scene((this.engine as any));\n this.scene.clearColor = new BABYLON.Color4(0,0,0,1)\n // 创建舞台中央旋转相机\n this.mainCamera = this.createCamera();\n console.log(this.mainCamera)\n // 加载预设的角色\n this.currentRole = new RolePointsCloud(this.scene,this.engine,this.mainCamera)\n await this.currentRole.init()\n this.currentRole.playAnim(\"idle\") // 默认播放闲置画面\n this.currentRole.Mesh.visibility = 0; // 开启点云,原Mesh设置隐藏\n\n // 创建需要展示的主要资源\n // let prefab = this.prefabList[0]\n // await this.createPrefab(prefab)\n\n // 创建粒子效果\n // await this.createParticle()\n\n // 创建点云粒子\n await this.createCloudPoints()\n\n let light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0,1,0), this.scene);\n\n // let ground = BABYLON.MeshBuilder.CreateGround('ground1', {height:10, width:10, subdivisions: 2}, this.scene);\n // let groudMaterial = new BABYLON.StandardMaterial(\"groudMaterial\", this.scene);\n // groudMaterial.diffuseColor = new BABYLON.Color3(0.5, 0.5, 0.5); // 设置灰色\n // ground.material = groudMaterial;\n // 修正比例\n this.engine?.resize();\n\n }\n isWebVR:boolean = false\n createCamera(){\n // Parameters: alpha, beta, radius, target position, scene\n let CameraType = this.isWebVR?BABYLON.VRDeviceOrientationArcRotateCamera:BABYLON.ArcRotateCamera\n let camera = new CameraType(\"Camera\", 0, 0, 30, new BABYLON.Vector3(0, 0.5, 0), this.scene);\n // Positions the camera overwriting alpha, beta, radius\n camera.setPosition(new BABYLON.Vector3(0, 0, 5));\n // 设置相机的俯仰角度为45°\n camera.beta = Math.PI / 3;\n camera.alpha = Math.PI / 1.2;\n camera.radius = 15;\n // This attaches the camera to the canvas\n // camera.attachControl(this.canvas, true); // 关闭控制,由程序锁定镜头\n return camera\n }\n\n mainMesh:BABYLON.AbstractMesh|undefined\n // prefabList = [\n // {name:\"蓝色可爱小机器人\",dir:'/assets/avatar/prefab/bluerobot/',file:\"scene.gltf\",cameraPositon:[Math.PI / 1.2, Math.PI / 3,5]},\n // {name:\"紫色小精灵\",dir:'/assets/avatar/prefab/furby_purple/',file:\"scene.gltf\",cameraPositon:[0, 0,10]}\n // ]\n // async createPrefab(prefab:any){\n // // 加载模型\n // const model = await BABYLON.SceneLoader.ImportMeshAsync(null, prefab.dir, prefab.file, this.scene);\n\n // // 设置模型初始位置\n // this.mainMesh = model.meshes[0]\n // this.mainMesh.position = new BABYLON.Vector3(0, 0.1, 0);\n // console.log(this.mainMesh)\n\n // // 重设相机位置\n // // 方法一:加载人工预设镜头位置\n // this.mainCamera?.setPosition(new BABYLON.Vector3(prefab.cameraPositon[0],prefab.cameraPositon[1],prefab.cameraPositon[2]))\n // // 方法二:由于Mesh本身的空间信息缺失,导致无法智能识别\n // // this.setCameraToMeshCenter(this.mainCamera,this.mainMesh)\n // return\n // }\n\n pointsCloud:BABYLON.PointsCloudSystem\n pointsMesh:BABYLON.Mesh\n async createCloudPoints(){\n this.pointsMesh = this.currentRole.Mesh\n this.pointsCloud = new BABYLON.PointsCloudSystem(\"pcs\", 1, this.scene) \n // pcs.addPoints(10000);\n \n let color1 = new BABYLON.Color3(0.7, 0.8, 1.0);\n let color4 = new BABYLON.Color4(0.7, 0.8, 1.0);\n let color2 = new BABYLON.Color4(0.2, 0.5, 1.0);\n let colorDead = new BABYLON.Color4(0, 0, 0.2, 0.0);\n let pTexture = new BABYLON.Texture(\"/assets/avatar/particle/textures/flare.png\", this.scene);\n let pMaterial = new BABYLON.PBRMaterial(\"material\", this.scene);\n pMaterial.emissiveTexture = pTexture\n pMaterial.emissiveColor = color1\n \n this.pointsCloud.addVolumePoints(this.currentRole.Mesh, 5000,BABYLON.PointColor.Color,color4);\n\n this.pointsCloud.buildMeshAsync().then(()=>{\n // this.pointsCloud.mesh.material = pMaterial;\n this.playAnimation(\"waiting\");\n });\n\n this.scene.registerAfterRender(() => {\n this.pointsCloud.setParticles();\n });\n this.engine.runRenderLoop(() => {\n this.scene.render();\n });\n\n }\n\n playAnimation(name){\n \n // 材质颜色\n\n switch (name) {\n case \"waiting\":\n this.cloudAnim()\n break;\n case \"listening\":\n this.cloudAnim({\n rotateSpeed:0.01,\n breathing:false,\n })\n break;\n case \"thinking\":\n this.cloudAnim({\n rotateSpeed:0.2,\n breathing:false,\n })\n break;\n case \"talking\":\n // this.pointsCloud.particles\n this.animMap['idle']&&this.scene.beginDirectAnimation(this.pointsMesh, [this.animMap['talking']], 0, 20, true);\n default:\n break;\n }\n }\n cloudAnim(options={\n breathing:true,\n rotateSpeed:0.002\n }){\n this.animMap['idle']&&this.scene.beginDirectAnimation(this.pointsMesh, [this.animMap['idle']], 0, 120, true);\n let colorWhite = new BABYLON.Color4(1.0, 1.0, 1.0,1.0);\n let pTexture = new BABYLON.Texture(\"/assets/avatar/particle/textures/flare.png\", this.scene);\n let islog = 0\n\n this.pointsCloud.updateParticle = (particle:BABYLON.CloudPoint) =>{\n // 空间位置\n let sphereRadius = this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.radiusWorld\n let centerWorld = this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.centerWorld\n\n let index = particle.idx;\n particle.color = colorWhite;\n // 旋转\n particle.rotation.y += options.rotateSpeed; \n // 位置\n if(particle&&islog<3){\n console.log(this.currentRole.Mesh.getBoundingInfo())\n console.log(particle)\n islog ++\n }\n if(!(particle as any).initpos) (particle as any).initpos = particle.position\n if(options.breathing){\n let initpos = (particle as any).initpos\n let relativeVector = initpos.subtract(centerWorld);\n particle.position = new BABYLON.Vector3(relativeVector.x*sphereRadius,relativeVector.y*sphereRadius,relativeVector.z*sphereRadius).add(this.currentRole.offsetPosition);\n }\n return particle\n };\n }\n \n animMap:{\n [key:string]:BABYLON.Animation\n } = {}\n createSphere(){\n let sphere = BABYLON.MeshBuilder.CreateSphere(\"sphere\", { diameter: 2 }, this.scene);\n sphere.visibility = 1 // 不可见,仅用于粒子覆盖占位\n // 材质\n sphere.material = new BABYLON.StandardMaterial(\"mat\", this.scene);\n sphere.material.wireframe = true;\n // 设置初始缩放\n sphere.scaling = new BABYLON.Vector3(1, 1, 1);\n this.pointsMesh = sphere;\n /**\n * 呼吸动画\n */\n // 创建动画\n let animation = new BABYLON.Animation(\n \"breathingAnimation\",\n \"scaling\",\n 30,\n BABYLON.Animation.ANIMATIONTYPE_VECTOR3,\n BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE\n );\n\n // 定义动画关键帧\n let keys = [];\n keys.push({\n frame: 0,\n value: new BABYLON.Vector3(0.3,0.3,0.3) // 初始缩放\n });\n keys.push({\n frame: 60,\n value: new BABYLON.Vector3(0.5,0.5,0.5) // 最大缩放\n });\n keys.push({\n frame: 120,\n value: new BABYLON.Vector3(0.3,0.3,0.3) // 初始缩放\n });\n\n // 将关键帧添加到动画\n animation.setKeys(keys);\n this.animMap[\"idle\"]=animation;\n\n\n /**\n * 讲话动画\n */\n\n // 定义动画帧\n let animationFramesTalk = [\n { frame: 0, value: BABYLON.Vector3.One() },\n { frame: 10, value: new BABYLON.Vector3(1.2, 0.8, 1.2) },\n { frame: 20, value: BABYLON.Vector3.One() },\n ];\n\n // 创建动画\n let animationTalk = new BABYLON.Animation(\n \"talkAnimation\",\n \"scaling\",\n 30,\n BABYLON.Animation.ANIMATIONTYPE_VECTOR3,\n BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE\n );\n\n // 设置动画帧\n animationTalk.setKeys(animationFramesTalk);\n this.animMap[\"talk\"]=animationTalk;\n\n\n // 启动动画\n this.scene.beginDirectAnimation(sphere, [this.animMap['idle']], 0, 120, true);\n\n return sphere\n }\n\n\n\n async createParticle(){\n // 创建球体\n let sphere = this.createSphere()\n\n // 创建粒子系统\n let particleSystem = new BABYLON.ParticleSystem(\"particles\", 2000, this.scene);\n particleSystem.particleTexture = new BABYLON.Texture(\"/assets/avatar/particle/textures/flare.png\", this.scene);\n particleSystem.emitter = sphere;\n particleSystem.minEmitBox = new BABYLON.Vector3(0, 0, 0); // Starting all from\n particleSystem.maxEmitBox = new BABYLON.Vector3(0, 0, 0); // To...\n // Colors of all particles\n particleSystem.color1 = new BABYLON.Color4(0.7, 0.8, 1.0, 1.0);\n particleSystem.color2 = new BABYLON.Color4(0.2, 0.5, 1.0, 1.0);\n particleSystem.colorDead = new BABYLON.Color4(0, 0, 0.2, 0.0);\n // Size of each particle (random between...\n particleSystem.minSize = 0.5;\n particleSystem.maxSize = 0.5;\n // Life time of each particle (random between...\n particleSystem.minLifeTime = 0.1;\n particleSystem.maxLifeTime = 0.1;\n // 角度速度\n particleSystem.minAngularSpeed = 0;\n particleSystem.maxAngularSpeed = Math.PI;\n particleSystem.minInitialRotation = 0;\n particleSystem.maxInitialRotation = Math.PI;\n // Emission rate// 设置粒子的初始速度\n // 禁用速度属性\n // particleSystem.manualEmitCount = particleSystem.getCapacity(); // 禁用自动发射\n particleSystem.minEmitPower = 0; // 最小发射速度\n particleSystem.maxEmitPower = 0; // 最大发射速度\n particleSystem.emitRate = 1500;\n // Speed\n particleSystem.updateSpeed = 0.01;\n // Blend mode : BLENDMODE_ONEONE, or BLENDMODE_STANDARD\n particleSystem.blendMode = BABYLON.ParticleSystem.BLENDMODE_ONEONE;\n particleSystem.direction1 = new BABYLON.Vector3(0,0,0)\n particleSystem.direction2 = new BABYLON.Vector3(0,0,0)\n particleSystem.start();\n // 设置粒子发射器为球形发射器\n let sphereEmitter = particleSystem.createSphereEmitter();\n sphereEmitter.radius = 2; // 球体半径\n // sphereEmitter.startPositionFunction = (worldMatrix: BABYLON.Matrix, positionToUpdate: BABYLON.Vector3, particle: BABYLON.Particle, isLocal: boolean)=>{\n // let sphereRadius = sphere.getBoundingInfo()?.boundingSphere?.radiusWorld\n // particle.position = particle.position.normalize().scale(sphereRadius);\n // }\n sphereEmitter.radiusRange = 0; // 开始发射半径范围 0 只在表面\n sphereEmitter.directionRandomizer = 0; // 开始发射方向随机性\n\n // 设置粒子效果\n particleSystem.gravity = new BABYLON.Vector3(0, 0, 0); // 关闭重力\n // 设置粒子系统停止后立即销毁粒子\n particleSystem.disposeOnStop = true;\n // 修改粒子更新函数,将粒子限制在球体表面\n particleSystem.updateFunction = (particles) =>{\n for (let index = 0; index < particles.length; index++) {\n let particle = particles[index];\n\n // // 将粒子位置限制在球体表面\n let sphereRadius = sphere.getBoundingInfo()?.boundingSphere?.radiusWorld\n particle.position = particle.position.normalize().scale(sphereRadius);\n // particle.scale = new BABYLON.Vector2(0.2,0.2)\n\n particle.age += this.scene.getEngine().getDeltaTime()/1000;\n // 检查粒子是否达到最大生命周期,如果是则使其消失\n if (particle.age >= particle.lifeTime) {\n particleSystem.recycleParticle(particle);\n index--; // 更新索引以避免跳过下一个粒子\n }\n // // 在一定时间后使粒子消失\n // if (particle.age > 0.19) {\n // particle.lifeTime = 0\n // }\n }\n };\n\n // 动画循环\n this.engine.runRenderLoop(() => {\n this.scene.render();\n // 更新粒子的位置和缩放\n particleSystem.worldOffset = sphere.position;\n // particle.position = particle.position.normalize().scale(sphereEmitter.radius);\n });\n }\n\n setCameraToMeshCenter(camera:BABYLON.ArcRotateCamera|undefined,mesh:BABYLON.AbstractMesh){\n // 获取网格体的边界信息\n mesh.computeWorldMatrix(true);\n let boundingInfo = mesh.getBoundingInfo();\n\n // 获取边界框的最小点和最大点\n let minimum = boundingInfo.minimum;\n let maximum = boundingInfo.maximum;\n\n // 计算网格体的长宽高\n let width = maximum.x - minimum.x;\n let height = maximum.y - minimum.y;\n let depth = maximum.z - minimum.z;\n let center = boundingInfo.boundingBox.center;\n console.log(\"宽度:\" + width);\n console.log(\"高度:\" + height);\n console.log(\"深度:\" + depth);\n console.log(\"中心点:\" + center);\n\n // camera?.setPosition(center)\n }\n}\n","","import { AfterViewInit,OnInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FmodeAvatarRoleComp } from '../interface-avatar-role';\n\nimport Recorder from 'recorder-core'\nimport 'recorder-core/src/extensions/waveview'\n\nimport Parse from \"parse\";\nimport { FormsModule } from '@angular/forms';\nimport { FmodeChat } from '../../service-fmai/service-chat/chat-class';\n\n@Component({\n selector: 'fm-avatar-role-image',\n standalone: true,\n imports: [CommonModule,FormsModule],\n templateUrl: './comp-avatar-role-image.component.html',\n styleUrls: ['./comp-avatar-role-image.component.scss']\n})\nexport class CompAvatarRoleImageComponent implements FmodeAvatarRoleComp,AfterViewInit,OnInit {\n @ViewChild(\"avatarImage\") avatarImage:ElementRef\n animClass:string = \"waiting\"\n\n @Input() fmodeChat:FmodeChat;\n @Input() role:Parse.Object;\n wave:any\n waveInterval:any\n playWave(){\n if(!this.wave&&Recorder.WaveView){\n this.wave=Recorder.WaveView({elem:\".record-wave-avatar\",keep:false});\n }\n\n // 生成随机的pcmData\n function generatePcmData(length) {\n const pcmData = [];\n for (let i = 0; i < length; i++) {\n pcmData.push(Math.floor(Math.random() * 65536) - 32768);\n }\n return pcmData;\n }\n\n // 生成随机的powerLevel\n function generatePowerLevel() {\n return Math.random() * 100;\n }\n\n // 生成随机的sampleRate\n function generateSampleRate() {\n const sampleRates = [44100, 48000, 88200, 96000];\n return sampleRates[Math.floor(Math.random() * sampleRates.length)];\n }\n // 生成示例数据\n \n let powerLevel = generatePowerLevel(); // 生成随机的powerLevel\n // 使用生成的数据调用wave.input函数\n this.waveInterval = setInterval(()=>{\n let sampleRate = generateSampleRate(); // 生成随机的sampleRate\n let pcmData = generatePcmData(1000); // 生成长度为1000的pcmData数组\n this.wave.input(pcmData, powerLevel, sampleRate);\n },40)\n }\n stopWave(){\n clearInterval(this.waveInterval)\n }\n ngAfterViewInit(){\n\n }\n\n imageMap:any = {}\n ngOnInit(){\n setTimeout(() => {\n this.imageMap = this.fmodeChat.avatarConfig?.image;\n this.avatarImage.nativeElement.src = this.imageMap?.waiting;\n // 绑定当前形象插件动作函数\n this.fmodeChat.playAnimation = this.playAnimation \n }, 1500);\n }\n playAnimation(){\n let that = this\n return (name:string)=>{\n let img = that.avatarImage.nativeElement\n that.animClass = name\n that.stopWave()\n switch (name) {\n case \"thinking\":\n img.style.animationPlayState = 'running';\n break;\n case \"talking\":\n img.style.animationPlayState = 'running';\n that.playWave()\n break;\n case \"listening\":\n img.style.animationPlayState = 'pause';\n break;\n case \"waiting\":\n img.style.animationPlayState = 'running';\n break;\n default:\n img.style.animationPlayState = 'paused';\n break;\n }\n }\n }\n}\n","
\n
\n
\n \"\"\n \n
\n
\n
\n
\n
","import { Component,OnInit,Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToastController } from \"@ionic/angular\"\n\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { IonicModule, NavController, Platform } from \"@ionic/angular\"\n\nimport { FmodeVoiceService } from '../../voice';\nimport { FmodeChat,ChatService } from '../../service-fmai/service-chat';\nimport { FmodeTTS } from '../../voice/tts';\nimport { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';\n\n\n@Component({\n selector: 'fm-modal-chat-voice-input',\n standalone: true,\n imports: [CommonModule,\n IonicModule,RouterModule,\n ],\n providers:[\n FmodeVoiceService\n ],\n templateUrl: './modal-chat-voice-input.component.html',\n styleUrls: ['./modal-chat-voice-input.component.scss']\n})\nexport class ModalChatVoiceInputComponent implements OnInit{\n\n @Input() fmodeChat:FmodeChat|undefined\n\n /**\n * 开始讲话方式:click点击开始/点击结束 press按住讲话/松开结束\n * @default click\n */\n @Input() talkMode:\"click\"|\"press\"=\"click\"\n talkTips = \"点击话筒开始讲话\"\n\n errorText:string = ``\n\n constructor(\n private platform:Platform,\n private router:Router,\n public voiceServ:FmodeVoiceService,\n private toastCtrl:ToastController,\n private ncloud:NovaCloudService,\n public chatServ:ChatService,\n\n ){\n }\n ngOnInit(){\n if(this.talkMode==\"press\"){\n this.talkTips = \"轻触底部开始讲话\"\n }\n\n // 开启录音唤醒功能\n setTimeout(() => {\n this.initVoiceSevice()\n this.initVoiceASR()\n }, 500);\n }\n\n /**\n * ASR唤醒功能\n */\n async initVoiceASR(){\n // 开启录音权限\n this.voiceServ.requestPermission().then(()=>{\n this.voiceServ.openWithPriviledge()\n // 开始监听唤醒词 Nihao Hello\n this.startASRAwake()\n })\n }\n // ASR - 唤醒词\n async startASRAwake(){\n await this.voiceServ.openWithPriviledge();\n let speech = new this.voiceServ.webSpeech(this.platform);\n speech.startRecognition(\"Nihao | Hello\");\n }\n\n /**\n * 音频提示音播放\n */\n player = new Audio();\n\n playMusic(action){\n this.player.src = `/assets/avatar/voice/${action}.mp3`\n this.player.play();\n }\n\n /**\n * 初始化录音转录服务\n * @desc\n * 根据数字角色对话状态,设计语音转录各事件处理过程\n * 嵌入提示音\n * 嵌入动画\n * 嵌入唤醒词切换逻辑\n */\n initVoiceSevice(){\n this.fmodeChat.userInput = this.voiceServ.resultText\n this.voiceServ.requestPermission().then(()=>{\n this.voiceServ.openWithPriviledge()\n })\n\n // 开始录音前 播放倾听动画\n // 开始录音前 播放提示音\n this.voiceServ.onBeforeStartTalk = ()=>{\n this.fmodeChat.playAnimation(\"listening\")\n this.playMusic(\"start-talk\")\n }\n\n // 用户取消录音前 播放提示音\n this.voiceServ.onBeforeCancelTalk = ()=>{\n this.playMusic(\"interupt-talk\")\n this.fmodeChat.playAnimation(\"waiting\")\n }\n // 用户取消录音后 麦克风实时监听唤醒词\n this.voiceServ.onAfterCancelTalk = ()=>{\n this.startASRAwake() // 监听与麦克风冲突,需要重启\n }\n // 完成录音前 播放提示音\n // 完成录音后 执行处理过程\n this.voiceServ.onBeforeFinishTalk = ()=>{\n this.fmodeChat.playAnimation(\"thinking\")\n this.playMusic(\"stop-talk\")\n }\n this.voiceServ.onAfterFinishTalk = ()=>{\n console.log(\"onAfterFinishTalk\")\n this.fmodeChat.userInput = this.voiceServ?.resultText\n this.sendMessage() // 发送消息\n this.startASRAwake() // 监听与麦克风冲突,需要重启\n }\n }\n\n /** \n * 发送语音消息\n * \n */\n async sendMessage(){\n\n // 检测用户登录情况\n // let isLoginLock = await this.authServ.checkLoginLock()\n // if(!isLoginLock) return false\n \n // 检测余额及模型付费限制\n // let payCheck = await this.checkBalance()\n // if(!payCheck) return false\n \n // 检测用户输入内容空值\n if(!this.fmodeChat.userInput){\n this.errorText = `内容不能为空`\n let toast = await this.toastCtrl.create({\n message:this.errorText,\n position:\"top\",\n icon:'alert',\n color:\"warning-circle\",\n duration:1000\n })\n toast.present();\n return\n }\n \n // 正常发送消息\n this.fmodeChat?.sendMessage(this.voiceServ.resultText,null,(msg:any)=>{\n \n },{\n onSSMLComplete:(voice:any)=>{\n console.log(voice)\n }\n });\n this.fmodeChat.userInput = ``\n this.fmodeChat.userImage = ``\n }\n\n testTTS(sentence?){\n console.log(sentence)\n sentence = sentence || \"你好呀,我是飞马小智!很高兴为您介绍脑控科技的发展历程。我们成立于2019年\"\n let speech = new this.voiceServ.webSpeech(this.platform);\n speech.speak(sentence)\n }\n testXunfeiTTS(){\n // this.voiceServ.ttsXunfei.connectWebSocket()\n }\n}\n\n"," \n \n\n \n
{{talkTips}}
\n
{{fmodeChat?.userInput}}
\n \n \n
\n \n
\n \n
\n \n \n \n \n
\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n \n
\n
\n
\n","import { AfterViewInit, Component, ElementRef, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { FmodeVoiceService } from '../../voice';\nimport { ChatService, FmodeChatCompletion } from '../../service-fmai/service-chat';\nimport { FmodeAvatarRoleComp } from '../interface-avatar-role';\nimport { IonicModule, NavController, Platform,ModalController } from \"@ionic/angular\"\nimport { CommonModule } from '@angular/common';\nimport {CompAvatarParticleComponent} from \"../comp-avatar-particle/comp-avatar-particle.component\"\nimport {CompAvatarRoleImageComponent} from \"../comp-avatar-role-image/comp-avatar-role-image.component\"\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport * as Parse from \"parse\"\nimport { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';\nimport { FmodeChat,HidexmlPipe } from '../../service-fmai/service-chat';\nimport { ModalChatVoiceInputComponent } from '../modal-chat-voice-input/modal-chat-voice-input.component';\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\n\n@Component({\n selector: 'app-comp-avatar-talk',\n standalone:true,\n imports:[\n CommonModule,RouterModule,FormsModule,IonicModule,CompAvatarParticleComponent,CompAvatarRoleImageComponent,\n ModalChatVoiceInputComponent,\n HidexmlPipe\n ],\n providers:[\n FmodeVoiceService,NovaCloudService,ChatService,Diagnostic,\n ModalController,\n ],\n templateUrl: './comp-avatar-talk.component.html',\n styleUrls: ['./comp-avatar-talk.component.scss']\n})\nexport class CompAvatarTalkComponent implements AfterViewInit,OnDestroy{\n @ViewChild(\"avatar\") avatarComp:FmodeAvatarRoleComp\n roleId:string\n avatarRole:Parse.Object;\n fmodeChat:FmodeChat;\n \n constructor(\n public voiceServ:FmodeVoiceService,\n private platform:Platform,\n private router:Router,\n private navCtrl:NavController,\n private route:ActivatedRoute,\n public chatServ:ChatService,\n private ncloud:NovaCloudService,\n ){\n\n this.route.paramMap.subscribe(params=>{\n this.roleId = params.get(\"roleId\");\n this.loadAvatarRole(this.roleId)\n })\n // 切换黑暗模式\n document.body.classList.add('dark');\n }\n \n ngOnInit(){\n\n }\n ngOnDestroy(): void {\n document.body.classList.remove('dark');\n this.voiceServ.resultText = null;\n if(this.fmodeChat){\n this.fmodeChat.latestAIResponse = null;\n }\n }\n goBack(){\n document.body.classList.remove('dark');\n let backUrl = this.avatarRole?.get(\"backUrl\")\n try{\n if(backUrl){\n this.navCtrl.navigateRoot(backUrl)\n return\n }\n this.navCtrl.navigateRoot('/chat/pro/role/'+this.roleId)\n }catch(err){\n this.navCtrl.navigateRoot('/chat/pro/role/'+this.roleId)\n }\n }\n // 根据ID加载数字角色\n async loadAvatarRole(roleId){\n let query = new Parse.Query(\"AvatarRole\")\n this.avatarRole = await query.get(roleId);\n let chat = await this.chatServ.createNewRoleChat(this.roleId)\n chat.isTalkMode = true;\n this.fmodeChat = chat;\n this.fmodeChat.showAvatar();\n }\n\n\n ngAfterViewInit(){\n \n this.listenDivChange()\n }\n @ViewChild(\"aiRespComp\") aiRespComp:ElementRef\n listenDivChange(){\n // 创建 MutationObserver 实例\n let observer = new MutationObserver(() => {\n this.scrollToBottom(this.aiRespComp);\n });\n // 配置观察选项\n let config = { childList: true, subtree: true, attributes:true };\n // 开始观察\n observer.observe(this.aiRespComp.nativeElement, config);\n }\n scrollToBottom(comp:ElementRef){\n if(comp?.nativeElement?.scrollHeight){\n comp.nativeElement.scrollTop = comp.nativeElement.scrollHeight\n }\n }\n \n\n /**\n * AI响应内容 fmodeChat.latestAIResponse\n */\n \n \n}\n","\n \n \n 资料\n \n \n \n\n \n \"\"\n \n {{avatarRole?.get('tags')}}\n {{avatarRole?.get(\"name\")}}\n \n \n \n {{avatarRole?.get(\"desc\")}}\n\n \n \n \n 年龄\n {{avatarRole?.get(\"age\")}}\n \n \n 性别\n {{avatarRole?.get(\"gender\")}}\n \n \n 称号\n {{avatarRole?.get(\"title\")}}\n \n \n \n 擅长\n {{avatarRole?.get(\"tags\")?.join(',')}}\n \n\n \n \n \n \n \n \n \n\n\n
\n \n \n \n \n \n \n {{avatarRole?.get(\"title\")}}\n \n \n \n {{avatarRole?.get(\"name\")}}\n \n \n \n \n\n \n\n \n \n \n\n \n
{{fmodeChat?.latestAIResponse | hidexml}}
\n\n \n\n
\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\nimport { HttpClientModule } from '@angular/common/http';\nimport { CompAvatarTalkComponent } from \"./comp-avatar-talk/comp-avatar-talk.component\"\n\nexport const AvatarRoutes: Routes = [\n {\n path: \"role/:roleId\",\n component: CompAvatarTalkComponent,\n runGuardsAndResolvers: \"always\",\n }\n]\n\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n ReactiveFormsModule,\n RouterModule.forChild(AvatarRoutes),\n CompAvatarTalkComponent,\n ],exports:[\n CompAvatarTalkComponent,\n ]\n})\nexport class AvatarModule { }\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, SimpleChanges, ElementRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'fm-video',\n templateUrl: './fm-video.component.html',\n styleUrls: ['./fm-video.component.scss'],\n standalone:true,\n imports:[CommonModule]\n})\nexport class FmVideoComponent implements OnChanges {\n @Input() url: string = '';\n @ViewChild('videoCanvas', { static: true }) canvasRef!: ElementRef;\n private video: HTMLVideoElement = document.createElement('video');\n private ctx!: CanvasRenderingContext2D;\n @Input() canvasStyle:any = {}\n\n constructor() {\n this.video.crossOrigin = 'anonymous';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['url'] && changes['url'].currentValue) {\n this.play(this.url);\n }\n }\n\n // 用户必须交互后才能播放\n play(url: string): void {\n try{\n this.video.muted = true;\n this.video.loop = true;\n this.video.controls = false;\n this.video.src = url;\n this.video.playsInline = true;\n this.video.load();\n this.video.play().then(()=>{\n }).catch(()=>{\n setTimeout(() => {\n this.play(url)\n }, 200);\n })\n }catch(err){\n setTimeout(() => {\n this.play(url)\n }, 500);\n return\n }\n\n if (!this.ctx) {\n this.ctx = this.canvasRef.nativeElement.getContext('2d')!;\n this.video.addEventListener('loadeddata', () => {\n this.canvasRef.nativeElement.width = this.video.videoWidth;\n this.canvasRef.nativeElement.height = this.video.videoHeight;\n this.drawFrame();\n });\n }\n }\n\n private drawFrame(): void {\n if (!this.video.paused && !this.video.ended) {\n this.ctx.drawImage(this.video, 0, 0, this.canvasRef.nativeElement.width, this.canvasRef.nativeElement.height);\n requestAnimationFrame(() => this.drawFrame());\n }\n }\n}","","import { AfterViewInit,OnInit, Component, ElementRef, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FmodeAvatarRoleComp } from '../interface-avatar-role';\n\nimport Recorder from 'recorder-core'\nimport 'recorder-core/src/extensions/waveview'\n\nimport Parse from \"parse\";\nimport { FormsModule } from '@angular/forms';\nimport { FmodeChat } from '../../service-fmai/service-chat/chat-class';\nimport { FmVideoComponent } from '../../../video';\nimport { IonButton, IonButtons, IonIcon, IonToolbar, NavController } from '@ionic/angular/standalone';\n@Component({\n selector: 'fm-avatar-role-video',\n standalone: true,\n imports: [CommonModule,FormsModule,FmVideoComponent,\n IonIcon,\n IonToolbar,IonButtons,IonButton,\n ],\n templateUrl: './comp-avatar-role-video.component.html',\n styleUrls: ['./comp-avatar-role-video.component.scss']\n})\nexport class CompAvatarRoleVideoComponent implements FmodeAvatarRoleComp,AfterViewInit,OnInit {\n @ViewChild(FmVideoComponent) avatarVideo:FmVideoComponent\n animClass:string = \"waiting\"\n\n @Input() fmodeChat:FmodeChat;\n @Input() role:Parse.Object;\n wave:any\n waveInterval:any\n\n @Output() onClose:EventEmitter = new EventEmitter\n constructor(\n private navCtrl:NavController\n ){\n\n }\n close(){\n this.onClose.emit(true);\n this.fmodeChat.isAvatarShow = false;\n }\n goBack(){\n this.navCtrl.back();\n }\n playWave(){\n if(!this.wave&&Recorder.WaveView){\n this.wave=Recorder.WaveView({elem:\".record-wave-avatar\",keep:false});\n }\n\n // 生成随机的pcmData\n function generatePcmData(length) {\n const pcmData = [];\n for (let i = 0; i < length; i++) {\n pcmData.push(Math.floor(Math.random() * 65536) - 32768);\n }\n return pcmData;\n }\n\n // 生成随机的powerLevel\n function generatePowerLevel() {\n return Math.random() * 100;\n }\n\n // 生成随机的sampleRate\n function generateSampleRate() {\n const sampleRates = [44100, 48000, 88200, 96000];\n return sampleRates[Math.floor(Math.random() * sampleRates.length)];\n }\n // 生成示例数据\n \n let powerLevel = generatePowerLevel(); // 生成随机的powerLevel\n // 使用生成的数据调用wave.input函数\n this.waveInterval = setInterval(()=>{\n let sampleRate = generateSampleRate(); // 生成随机的sampleRate\n let pcmData = generatePcmData(1000); // 生成长度为1000的pcmData数组\n this.wave.input(pcmData, powerLevel, sampleRate);\n },40)\n }\n stopWave(){\n clearInterval(this.waveInterval)\n }\n ngAfterViewInit(){\n\n }\n\n videoMap:any = {}\n ngOnInit(){\n setTimeout(() => {\n this.videoMap = this.fmodeChat.avatarConfig?.video;\n this.playVideo(this.videoMap?.waiting)\n // 绑定当前形象插件动作函数\n this.fmodeChat.playAnimation = this.playAnimation \n }, 1500);\n }\n playAnimation(){\n let that = this\n return (name:string)=>{\n that.animClass = name\n that.stopWave()\n\n that.playVideo(that.videoMap[name]);\n\n }\n }\n playVideo(src:string){\n this.avatarVideo.play(src);\n\n // this.avatarVideo.nativeElement.autoplay = true;\n // this.avatarVideo.nativeElement.loop = true;\n // this.avatarVideo.nativeElement.controls = false;\n // this.avatarVideo.nativeElement.src = src;\n // this.avatarVideo.nativeElement.play();\n }\n}\n","
\n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n
\n
","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { AlertController, IonAvatar, IonButton, IonIcon, IonItem, IonLabel, IonList, IonNote, IonText, NavController } from '@ionic/angular/standalone';\nimport { ChatService } from \"../../service-fmai/service-chat/chat.service\"\n@Component({\n selector: 'app-chat-list',\n templateUrl: './chat-list.component.html',\n styleUrls: ['./chat-list.component.scss'],\n imports:[\n CommonModule,\n IonIcon,IonList,IonLabel,IonNote,IonButton,IonAvatar,IonItem,IonText,\n ],\n providers:[\n ],\n standalone:true\n})\nexport class ChatListComponent {\n chatList:Array = []\n\n constructor(\n public chatServ:ChatService,\n private alertCtrl:AlertController,\n private navCtrl:NavController,\n ){\n\n this.chatServ.getChatSession().then(()=>{\n // console.log(this.chatServ.chatList);\n })\n }\n\n\n @Input() onItemClick:Function = (chat:any,event)=>{\n event.stopPropagation();\n this.goSession(chat)\n }\n\n\n /** 默认头像*/\n avatar:string='https://ionicframework.com/docs/img/demos/avatar.svg'\n async goSession(chat){\n if(this.isPreventGo) return\n // this.tab.currentTab = \"\"\n if(chat?.rid || chat?.sid){\n this.chatServ.restoreChatPanel(chat)\n }else{\n let alert = await this.alertCtrl.create({\n header:\"注意\",\n subHeader:\"请您选择右侧角色\",\n message:\"开始对话\",\n buttons:[\n {\n role:\"ok\",text:\"知道了\",handler:()=>{\n }\n },\n ]\n })\n alert.present();\n this.navCtrl.navigateRoot(\"/chat/pro/mask\")\n\n }\n }\n\n\n isPreventGo:boolean = false;\n /**\n * 修改图标的功能组件\n * @param Id 会话Id\n */\n async presentEditTitle(chatSession:Parse.Object,chat:any,event:Event) {\n event.stopPropagation()\n this.isPreventGo = true;setTimeout(()=>{this.isPreventGo=false},500)\n event.preventDefault(); // 防止触发父级点击事件\n const alert = await this.alertCtrl.create({\n header: '修改会话标题',\n subHeader: '',\n message: '',\n buttons:[\n {\n text: '取消',\n role: 'cancel',\n handler: () => {\n \n },\n },\n {\n text: '确定',\n role: 'confirm',\n handler: (data) => {\n chat.title = data.title\n chatSession?.set('title',data.title)\n chatSession?.save()\n },\n },\n ],\n inputs:[\n {\n placeholder: '会话标题',\n name: 'title',\n value:chat?.title || \"\"\n }\n ]\n });\n // this.chatSessionId = Id\n await alert.present();\n }\n\n /**\n * 删除图标的功能组件\n * @param Id 会话Id\n */\n async presentDeleteTItle(chatSession:Parse.Object,chat:any,event:Event) {\n event.stopPropagation()\n this.isPreventGo = true;setTimeout(()=>{this.isPreventGo=false},500)\n event.preventDefault(); // 防止触发父级点击事件\n const alert = await this.alertCtrl.create({\n header: '确认删除?',\n subHeader: '',\n message: '',\n buttons:[\n {\n text: '取消',\n role: 'cancel',\n handler: () => {\n \n },\n },\n {\n text: '确定',\n role: 'confirm',\n handler: () => {\n chat.isHidden = true;\n chatSession?.set('isDeleted',true)\n chatSession?.save()\n },\n },\n ],\n });\n await alert.present();\n }\n\n /**\n * 绘画标题超出字数的部分用省略号代替\n * @param str 被执行的文本\n * @returns \n */\n truncateString(str:String) {\n if (str && str.length > 10) {\n return str.slice(0, 10) + '...';\n }\n return str;\n }\n\n}\n","\n \n \n
\n
\n
\n \n
\n
\n \n \n \n \n

{{truncateString(chat?.title)}}

\n
\n\n \n \n \n
\n \n
\n
\n \n {{chat?.message}}\n \n
\n
\n
\n
","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { IonButtons, IonCard, IonHeader, IonIcon,IonButton, IonItem, IonLabel, IonList, IonNote, IonTitle, IonToolbar, IonModal, NavController, IonAvatar } from '@ionic/angular/standalone';\nimport { CompAvatarRoleImageComponent } from '../../avatar';\nimport { CompAvatarRoleVideoComponent } from '../../avatar';\nimport { FmodeChat } from '../../service-fmai/service-chat';\n\nimport { addIcons } from 'ionicons';\nimport {chevronBackOutline,ellipsisHorizontalOutline} from 'ionicons/icons';\naddIcons({chevronBackOutline,ellipsisHorizontalOutline})\n\n\n@Component({\n selector: 'fm-chat-header-area',\n templateUrl: './comp-header-area.component.html',\n styleUrls: ['./comp-header-area.component.scss'],\n standalone:true,\n imports:[\n CommonModule,IonToolbar,IonButtons,IonButton,IonIcon,\n IonModal,IonAvatar,\n IonTitle,IonHeader,IonList,IonItem,IonCard,IonLabel,IonNote,\n // \n CompAvatarRoleImageComponent,\n CompAvatarRoleVideoComponent\n ]\n})\nexport class FmChatHeaderArea {\n @Input() chat:FmodeChat\n isModalOpen:boolean = false\n\n constructor(\n private navCtrl:NavController\n ){}\n\n async back(){\n if(this.chat?.onClose){\n let closeResult = await this.chat?.onClose(this.chat)\n if(!closeResult) return\n }\n this.goBack();\n }\n\n @Input()\n goBack = ()=>{\n this.navCtrl.back();\n }\n} \n","\n \n \n \n \n \n \n
\n
\n \n \n
\n \n {{chat?.role?.get(\"name\")}}\n \n
\n
\n\n \n \n \n
\n\n
\n \n \n
\n\n\n\n \n \n \n \n 返回\n \n 简介\n \n \n \n\n \n \"\"\n \n {{chat?.role?.get('tags')}}\n {{chat?.role?.get(\"name\")}}\n \n \n \n {{chat?.role?.get(\"desc\")}}\n \n \n \n \n 年龄\n {{chat?.role?.get(\"age\")}}\n \n \n 性别\n {{chat?.role?.get(\"gender\")}}\n \n \n 称号\n {{chat?.role?.get(\"title\")}}\n \n \n \n 擅长\n {{chat?.role?.get(\"tags\")?.join(',')}}\n \n \n \n \n \n \n \n ","import { Injectable } from '@angular/core';\nimport Parse from \"parse\";\nif(!Parse.applicationId){\n Parse.initialize(\"ncloudmaster\");\n (Parse as any).serverURL = ((Parse as any).serverURL?.split(\"parse\")?.[0] || \"https://server.fmode.cn/\") + \"parse\";\n}\n\nimport { Router } from '@angular/router';\n// import { AccountService } from '../account/account.service';\nimport { NovaCloudService } from '../../nova-cloud';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError } from \"rxjs/operators\";\nimport { ToastController } from '@ionic/angular/standalone';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n\n /**\n * 守卫方式:权限验证锁定方式\n * @type \"page\"|\"modal\" page页面跳转 modal弹窗锁定\n */\n guardType:\"page\"|\"modal\"\n guardMap:any = {}\n\n isModalShow:boolean = false\n // set isModalShow(v){\n // this._isModalShow = v\n // this.setAc\n // }\n // get isModalShow(){\n // return this._isModalShow\n // }\n isGuardLock(url){\n let lock = true\n let user = Parse.User.current();\n if(user?.id){ // 用户已登录不锁定\n lock = false\n }else{ // 用户未登录且该页面需要守卫,则锁定\n lock = this.guardMap[url]\n }\n // console.log(this.guardMap)\n // console.log(lock)\n return lock\n }\n\n showBackHome:boolean = true;\n //点击按钮切换对应表单\n activeButton: string = \"账号密码\"; // 默认为短信验证按钮选中\n loginOptions:{\n userpwd?:boolean,\n mobilepwd?:boolean,\n mobilecode?:boolean,\n wechat?:boolean,\n } = {\n userpwd:true, // 帐号+密码\n mobilepwd:true, // 手机号+密码\n mobilecode:true, // 手机+验证码\n wechat:true // 微信扫码登录\n }\n get loginTypeCount(){\n return Object.values(this.loginOptions)?.filter(item=>item)?.length\n }\n\n /**\n * 企业账套:登录用户校验所在的账套\n */\n _logoUrl = \"https://file.yuban.co/img/logo-feima.png\"\n get logoUrl(){\n return localStorage.getItem(\"LOGO_URL\") || this._logoUrl || \"https://file.yuban.co/img/logo-feima.png\"\n }\n set logoUrl(v){\n localStorage.setItem(\"LOGO_URL\",v)\n this._logoUrl = this._logoUrl\n }\n company:string\n getCompanyId(){\n let company = localStorage.getItem(\"company\");\n company = this.company || company\n return company\n }\n \n wechatUrl:string = \"https://file-cloud.fmode.cn/E4KpGvTEto/20230822/hv1tsm115258608.jpg\"\n\n /**\n * 资金账户:user自动创建唯一资金账户\n */\n account:Parse.Object\n\n /**\n * 登录状态:默认false,登陆后为true\n * @description\n * 用于守卫弹窗锁定模块校验\n */\n isLoggedIn = false;\n\n // store the URL so we can redirect after logging in\n redirectUrl: string;\n constructor(public router: Router,\n // private accServ:AccountService,\n private toastCtrl:ToastController,\n private novaCloud:NovaCloudService,private http: HttpClient,) {\n }\n async toast(options:any){\n options.position = options?.position || \"top\"\n options.duration = options?.duration || 1500\n options.color = options?.color || \"primary\"\n let toast = await this.toastCtrl.create(options)\n toast.present()\n }\n init(options:{\n company?:string\n guardType?:\"page\"|\"modal\"\n LoginPage?:string\n }){\n this.company = options.company;\n this.guardType = options.guardType\n this.saveParamsInvite()\n }\n checkLoginLock(){\n let user = Parse.User.current();\n if(user?.id){\n return true\n }else{\n this.isModalShow = true;\n this.isLoggedIn = false;\n return false\n }\n }\n LoginPage = '/pcuser/login'\n checkLogin(url: string): boolean {\n\n // 将url记录在被守卫页列表中,便于后续检测弹窗锁定\n this.guardMap[url] = true;\n\n // 如果已登录,验证为true无需锁定 跳出该函数\n let currentUser = Parse.User.current();\n \n console.log(\"currentUser\",currentUser)\n if (currentUser&¤tUser.id) { \n // this.setCurrentUserLocalStorage(currentUser)\n this.setAccount(currentUser);\n this.isLoggedIn = true\n return true; \n }\n\n // 如果未登录,判断进行两种守卫方式\n if(!this.guardType || this.guardType==\"page\"){ // 守卫方式1:页面跳转\n // 否则重定向到login页面\n // console.log(this.authService.isLoggedIn)\n this.redirectUrl = url;\n // console.log(\"请登录:\",this.LoginPage)\n this.router.navigate([this.LoginPage]);\n return false\n }\n if(this.guardType==\"modal\"){ // 守卫方式2:弹窗锁定\n // console.log(\"触发 守卫方式2:弹窗锁定\")\n this.isModalShow = true;\n this.isLoggedIn = false;\n return true\n }\n }\n async setAccount(user){\n if(this.account?.id) return;\n let Account = Parse.Object.extend(\"Account\")\n // this.account = await this.accServ.getUserAccount(user);\n let company = user?.get(\"company\") || {__type:\"Pointer\",className:\"Company\",objectId:this.getCompanyId()} || null\n let query = new Parse.Query(\"Account\");\n query.equalTo(\"user\",user.toPointer())\n let account = await query.first();\n if(!account?.id){\n account = new Account();\n account.set({\n user:user.toPointer(),\n company:company,\n })\n account = await account.save();\n }\n this.account = account\n return account\n }\n\n login(username, password) {\n return new Promise((resolve,reject)=>{\n Parse.User.logIn(username, password).then( async data => {\n\n // 检测邀请逻辑\n this.bindInvite(data);\n\n // 根据当前用户,设置帐套信息\n this.setCurrentUserLocalStorage(data);\n \n // 如果是modal弹窗登录则刷新当前页\n if(this.guardType==\"modal\"){\n await this.refreshPage();\n resolve(true)\n return\n }\n\n // 如果直接进login页面,redirectUrl为undefined 导航至首页\n let queryCom = new Parse.Query('Company')\n queryCom.select('rootPage')\n queryCom.equalTo('objectId',data?.get('company')?.id)\n let com = await queryCom.first()\n let rootPage = com?.get(\"rootPage\")\n this.redirectUrl = this.redirectUrl || rootPage || \"/project/dashboard\"\n let url = this.redirectUrl;\n url = decodeURIComponent(url);\n this.router.navigate([url]);\n }).catch(err => {\n console.error(err)\n reject({ message: \"无此用户信息,请先在小程序登录\" })\n })\n })\n }\n refreshPage() {\n return new Promise(resolve=>{\n let currentUrl = this.router.url;\n\n // location.reload(); // 页面强制刷新\n // resolve(true)\n if(Parse.User.current()?.id){this.isModalShow=false};\n\n // NG路由重载\n this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {\n this.router.navigateByUrl(currentUrl).then(()=>{\n resolve(true)\n })\n });\n })\n}\n\n // 用户登录后,更新帐套信息至本地存储\n setCurrentUserLocalStorage(user:Parse.User){\n if(user.get(\"company\")?.id){\n localStorage.setItem(\"company\",user.get(\"company\")?.id)\n }\n }\n\n logout(type,url): void {\n let company = localStorage.getItem(\"company\");\n let WECHAT_APP_ID = localStorage.getItem(\"WECHAT_APP_ID\");\n let LOGO_URL = localStorage.getItem(\"LOGO_URL\");\n let NOVA_APIG_SERVER = localStorage.getItem(\"NOVA_APIG_SERVER\");\n localStorage.clear();\n localStorage.setItem('company',company);\n localStorage.setItem('WECHAT_APP_ID',WECHAT_APP_ID);\n localStorage.setItem('LOGO_URL',LOGO_URL);\n localStorage.setItem('NOVA_APIG_SERVER',NOVA_APIG_SERVER);\n \n Parse.User.logOut().then(user=>{\n });\n this.router.navigate([url||\"/pcuser/login\"]);\n }\n\n /** \n * 根据帐套内mobile字段登录逻辑\n */\n // 手机号+密码登录\n async loginMobilePassword(mobile:string,password:string,msgServ){\n let username = await this.getMobileUser(mobile)\n if(!username){\n msgServ.create(\"error\", \"用户不存在,请尝试其他登录方式\");\n return\n }\n this.login(username, password)\n .then(async data => {\n this.isModalShow = false;\n }).catch(err => {\n console.log(err)\n msgServ.create(\"error\", \"错误的用户名或密码\");\n });\n }\n signMobilePassword(mobile:string,password:string):Promise{\n return new Promise(async (resolve,reject)=>{\n let signedUser = await this.signUpAndUpdate(mobile,password);\n resolve(signedUser)\n })\n\n }\n // 根据手机号获得帐套内用户名\n mobileUserMap = {}\n async getMobileUser(mobile:string){\n let company = this.getCompanyId()\n let userMID = company+mobile\n if(this.mobileUserMap[userMID]) return this.mobileUserMap[userMID]\n let result:any = await this.novaCloud.api(\"/auth/getusername\",{\n company:company,\n mobile:mobile\n })\n if(result?.username){\n this.mobileUserMap[userMID] = result?.username\n }\n return this.mobileUserMap[userMID]\n }\n enabledLocalCode:boolean = false; // 开启验证码\n\n signUpAndUpdate(mobile,password?:string):Promise{\n password = password || mobile+\"pwd666\"\n return new Promise(resolve=>{\n Parse.User.signUp(\n this.getCompanyId()+\"-\" + mobile,\n password,\n \"\"\n ).then(async signedUser=>{\n if (signedUser.id) {\n console.log(signedUser)\n signedUser.set(\"company\", {\n __type: \"Pointer\",\n className: \"Company\",\n objectId: this.getCompanyId()\n });\n signedUser.set(\"mobile\", mobile);\n signedUser.set(\"type\",\"user\");\n this.bindInvite(signedUser);\n signedUser = await signedUser.save();\n resolve(signedUser)\n }\n }).catch(error=>{\n resolve(undefined)\n })\n })\n }\n\n async getMobileCodeToken(mobile,code):Promise{\n return new Promise((resolve,reject)=>{\n let host = (Parse as any).serverURL?.split(\"parse\")?.[0] || \"https://server.fmode.cn/\"\n this.http.get(host+`api/auth/mobile?company=${this.company}&mobile=${mobile}&code=${code}`).toPromise().then(res=>{\n resolve(res);\n }).catch(error=>{\n reject(error);\n })\n })\n \n }\n\n /* 验证码登录 */\n async loginCode(mobile:string, code:string, msgServ?,closeCallBack?:any): Promise {\n if (!code) {\n this.toast({color:\"primary\",message:\"请填写有效验证码\"})\n return;\n }\n\n try{\n let res = await this.getMobileCodeToken(mobile,code);\n if (res?.code == 200) {\n console.log(200,res)\n\n let logUser = await Parse.User.become(res.data.token);\n console.log(logUser,logUser?.id)\n if (logUser?.id) {\n console.log(logUser,logUser?.id)\n // 检测邀请逻辑\n try{\n await this.bindInvite(logUser);\n }catch(errb){\n console.error(\"bind err b\",errb)\n }\n return true;\n }\n }\n }catch(e){\n console.log(\"error1\",e);\n if(e?.error?.mess?.indexOf(\"用户不存在\")>-1){ // 自动注册\n let signedUser = await this.signUpAndUpdate(mobile);\n if(signedUser?.id){\n return await this.loginCode(mobile,code);\n }\n }else{\n this.toast({message:e?.error?.mess})\n return\n }\n }\n }\n saveParamsInvite(){\n let searchParams = this.novaCloud.searchParse()\n console.log(\"saveParamsInvite\",searchParams)\n let invite = searchParams?.get(\"invite\");\n console.log(invite)\n if(invite) localStorage.setItem(\"invite\",invite)\n }\n async bindInvite(current?:any){\n current = current || Parse.User.current();\n if(!current) return // 当前用户必须存在\n if(current?.get(\"invite\")?.id) return // 当前用户无邀请关系\n \n let invite = localStorage.getItem(\"invite\") \n if(!invite) return // 本地存储邀请码必须存在\n if(current?.id == invite ) return // 不能邀请自己\n let res \n \n try{\n res = await this.novaCloud.api(\"/auth/invite\",{\n current:current?.id,\n invite:invite,\n type:\"code\"\n })\n console.log(\"bind\",res)\n }catch(err){\n console.error(\"bind err\",err)\n }\n return\n\n }\n}","import { Injectable } from \"@angular/core\";\nimport { NovaCloudService } from \"../../nova-cloud/nova-cloud.service\";\nimport Parse from \"parse\";\nimport { AuthService } from \"../login/auth.service\";\nimport { HttpClient } from \"@angular/common/http\";\ndeclare var wx: any;\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class AccountService {\n company: string = \"\";\n billing: any = {\n credit: {\n usedDetail: {},\n },\n };\n profile: Parse.Object;\n wxAppId = \"\";\n wxpayEnabled: boolean = false;\n appid:string = localStorage.getItem(\"WECHAT_APP_ID\") || \"wxb4193c93ae9aa696\";\n shareInfo:any\n constructor(\n private ncloud: NovaCloudService,\n private authServ: AuthService,\n private http: HttpClient\n ) {\n this.company = this.authServ.company || localStorage.getItem(\"company\");\n this.getBilling();\n this.getProfile();\n this.getUserOpenid();\n }\n /* 获取认证信息 */\n async getProfile() {\n let uid = Parse.User.current()?.id;\n if (!uid) return;\n let query = new Parse.Query(\"Profile\");\n query.equalTo(\"user\", uid);\n query.equalTo(\"company\", this.company);\n query.notEqualTo(\"isDeleted\", true);\n let profile = await query.first();\n if (profile?.id) {\n this.profile = profile;\n }\n }\n async getBilling() {\n let data: any;\n if(!Parse.User.current()?.getSessionToken())return // 用户登陆时才可查询账单\n try {\n data = await this.ncloud.apig(\"aigc/account\", null, \"get\");\n } catch (err) {}\n if (data?.credit) {\n this.billing = data;\n }\n return data;\n }\n /* 如果是微信内置浏览器,获取登录code */\n async getUserOpenid() {\n let ua = navigator.userAgent.toLowerCase();\n let isWeixin = ua.indexOf(\"micromessenger\") != -1;\n let code = this.getQueryStringByName(\"code\");\n let openid = localStorage.getItem(\"openid\");\n if (!openid) {\n if(!Parse.User.current()) return\n let wechat = Parse.User.current().get(\"wechat\");\n openid = wechat?.[this.appid]?.openid;\n if (isWeixin) {\n if (!code) {\n this.authWechat();\n } else {\n await this.getwechat(code);\n }\n }\n }\n }\n authWechat(url: string = \"/account/billing\") {\n if (!localStorage.getItem(\"openid\")) {\n // let REDIRECT_URI = \"https://ai.fmode.cn\" + url;\n let REDIRECT_URI = window.location.href;\n REDIRECT_URI = encodeURIComponent(REDIRECT_URI);\n // console.log(REDIRECT_URI);\n // console.log(\n // \"https://open.weixin.qq.com/connect/oauth2/authorize?appid=\" +\n // this.appid +\n // \"&redirect_uri=\" +\n // REDIRECT_URI +\n // \"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect\"\n // );\n window.location.href =\n \"https://open.weixin.qq.com/connect/oauth2/authorize?appid=\" +\n this.appid +\n \"&redirect_uri=\" +\n REDIRECT_URI +\n \"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect\";\n return;\n }\n }\n //根据QueryString参数名称获取值\n getQueryStringByName(name: string) {\n let result = location.search.match(\n new RegExp(\"[?&]\" + name + \"=([^&]+)\", \"i\")\n );\n if (result == null || result.length < 1) {\n return \"\";\n }\n return result[1];\n }\n async getwechat(\n code: string,\n url: string = \"/account/billing\"\n ): Promise {\n return new Promise(async (resolve, reject) => {\n this.http\n .post(`https://server.fmode.cn/api/wechat/get_wx`, {\n company: this.company,\n code: code,\n })\n .subscribe(\n async (res: any) => {\n console.log(res);\n if (res && res.code == 200 && res.data.openid) {\n let openid = res.data.openid;\n // localStorage.setItem('authData', JSON.stringify(res.data))\n localStorage.setItem(\"openid\", openid);\n localStorage.removeItem(\"code\");\n let wxopts = {}\n wxopts[this.appid] = {\n \"openid\": openid,\n },\n Parse.User.current().set(\"wechat\", wxopts);\n await Parse.User.current().save();\n resolve(true);\n }\n },\n async (err) => {\n console.log(\"Error updating items\", err);\n this.authWechat(url);\n reject(false);\n }\n );\n });\n }\n /* 获取微信签名 */\n getWXSignPackageInWechat() {\n let params = {\n company: this.company,\n href: encodeURIComponent(location.href.split(\"?\")[0]),\n };\n this.http\n .post(`https://server.fmode.cn/api/wechat/getconfig`, params)\n .subscribe((response) => {\n // 返回的签名信息\n let res: any = response;\n const signPackage = res.data;\n this.wxAppId = signPackage.appid;\n this.wxpayEnabled = true;\n\n wx.config({\n debug: false, // 开启调试模式\n appId: signPackage.appid, // 必填,公众号的唯一标识\n timestamp: signPackage.timestamp, // 必填,生成签名的时间戳\n nonceStr: signPackage.nonceStr, // 必填,生成签名的随机串\n signature: signPackage.signature, // 必填,签名,见附录1\n jsApiList: [\n \"chooseWXPay\", // JSAPI微信支付\n 'onMenuShareTimeline', //分享到微信朋友圈\n 'onMenuShareAppMessage', //分享给微信朋友\n 'onMenuShareQQ', //分享到QQ\n 'onMenuShareQZone', //分享到QQ空间\n 'updateAppMessageShareData', //分享到微信及QQ(新接口)\n 'updateTimelineShareData' //分享到朋友圈”及“分享到QQ空间(新接口\n ], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2\n });\n \n let url = 'https://ai.fmode.cn'\n let pathname = location.pathname\n url + pathname + '?invite=' + Parse.User.current()?.id\n let shareInfo = this.shareInfo || {\n title: '飞码AI', // 分享标题\n desc: '解放创意引领未来|国际前沿的AIGC平台', // 分享描述\n link: url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致\n type: 'link', //分享类型,music、video或link,不填默认为link\n imgUrl: 'https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png', // 分享图标\n success: function() {\n // 设置成功\n console.log('分享成功');\n },\n error: function() {\n console.log('分享失败');\n },\n cancel: function() {\n console.log('取消分享');\n }\n };\n\n wx.ready(() => {\n wx.updateAppMessageShareData(shareInfo); //分享到微信好友或者qq好友\n wx.updateTimelineShareData(shareInfo); //分享到朋友圈或者qq空间\n });\n wx.error(() => {});\n });\n }\n \n async saveAccountLog(info: object, orderid:string, company:string, message:any) {\n let url = \"https://test.fmode.cn/api/apig/saveAccountLog\";\n return new Promise((res,rej)=>{\n this.http\n .post(url, {\n company: company,\n uid: Parse.User.current().id,\n orderid: orderid,\n info: info,\n })\n .subscribe(\n (data: any) => {\n console.log(data);\n res (true)\n },\n (err) => {\n console.warn(err);\n message && message.error(\"请求超时,请稍后再试\");\n rej()\n }\n );\n })\n \n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, Input, OnInit } from \"@angular/core\";\nimport { NzAvatarModule } from \"ng-zorro-antd/avatar\";\nimport { NzIconModule } from \"ng-zorro-antd/icon\";\nimport Parse from \"parse\";\nimport { AccountService } from \"../account/account.service\";\n\n@Component({\n selector: \"app-comp-user-avatar\",\n templateUrl: \"./comp-user-avatar.component.html\",\n styleUrls: [\"./comp-user-avatar.component.scss\"],\n standalone:true,\n imports:[\n CommonModule,\n NzAvatarModule,\n NzIconModule,\n ]\n})\nexport class CompUserAvatarComponent implements OnInit {\n @Input() user: Parse.User;\n type: string = \"icon\";\n text: string = \"U\";\n\n identity: string; //身份\n // defaultAvatar = \"https://www.yuban.co/assets/img/icon/avatar.svg\"\n\n constructor(private novaAccount: AccountService) {}\n ngOnInit(): void {\n this.type = this.getType();\n // this.refresh()\n }\n ngOnChanges(){\n this.refresh()\n }\n async refresh(){\n await this.novaAccount.getProfile()\n let profile = this.novaAccount.profile;\n // console.log(profile);\n if (profile?.get(\"type\")) {\n if (profile?.get(\"type\") == \"student\") {\n this.identity =\n \"https://file-cloud.fmode.cn/khgbeQmvYZ/20231123/k1k4iq103416124.png\";\n } else {\n this.identity =\n \"https://file-cloud.fmode.cn/E4KpGvTEto/20231116/q12c16094638625.png\";\n }\n }\n }\n getType() {\n if (!this.user?.id) return \"icon\";\n if (this.user?.get(\"avatar\")) {\n return \"avatar\";\n }\n let name = this.user?.get(\"nickname\") || this.user?.get(\"realname\")\n if (name) {\n this.text = name?.slice(0, 1);\n return \"text\";\n }\n return \"icon\";\n }\n}\n","\n
\n \n \n \n \n
\n \n \n
\n \n \n \n \n
\n
\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'durationStr',\n standalone: true\n})\nexport class DurationStrPipe implements PipeTransform {\n\n transform(duration: number, ...args: unknown[]): string {\n let minuteStr = String(parseInt(String(duration/60)));\n let secondStr = String((duration%60).toFixed(0));\n let durationStr = \"\"\n if(duration/60 > 1){\n durationStr += `${minuteStr}'`\n }\n durationStr += `${secondStr}\"`\n return durationStr\n // 01:33 计时器形式\n // let minuteStr = String(parseInt(String(duration/60))).padStart(2,\"0\");\n // let secondStr = String((duration%60).toFixed(0)).padStart(2,\"0\");\n // let durationStr = minuteStr + \":\" + secondStr;\n // return durationStr;\n }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { ChatContentPipe, FmodeChat, FmodeChatMessage, getMessageContentText, } from '../../service-fmai/service-chat';\n\nimport Parse from \"parse\";\nimport { CommonModule, DecimalPipe } from '@angular/common';\nimport { IonAvatar, IonItem } from '@ionic/angular/standalone';\nimport { CompUserAvatarComponent } from '../../../user/comp-user-avatar/comp-user-avatar.component';\nimport { NzAvatarModule } from 'ng-zorro-antd/avatar';\nimport { ClipboardService } from '../../comp-markdown-preview/clipboard.service';\nimport { MarkdownPreviewModule } from '../../comp-markdown-preview/markdown-preview.module';\nimport { NzSanitizerPipe } from 'ng-zorro-antd/pipes';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { FmodeTTS } from '../../voice/tts';\nimport { DurationStrPipe } from './duration-str.pipe';\n\nimport { addIcons } from 'ionicons';\nimport {wifiOutline,copyOutline} from 'ionicons/icons';\naddIcons({wifiOutline,copyOutline})\n\n@Component({\n selector: 'fm-chat-message-card',\n templateUrl: './comp-message-card.component.html',\n styleUrls: ['./comp-message-card.component.scss'],\n standalone:true,\n imports:[\n CommonModule,IonItem,\n CompUserAvatarComponent,MarkdownPreviewModule,\n IonAvatar,\n ChatContentPipe,\n // NzAvatarModule,NzIconModule,\n NzSanitizerPipe,\n DurationStrPipe\n ]\n})\nexport class FmChatMessageCard {\n @Input() index:number|undefined // 循环列表中的序号\n @Input() message:FmodeChatMessage\n @Input() role:Parse.Object\n @Input() chat:FmodeChat\n user:Parse.User\n constructor(\n private copyServ:ClipboardService\n ){\n this.user = Parse.User.current();\n }\n // isVoicePlaying:boolean = false;\n tts:FmodeTTS|null;\n // 切换播放状态\n async toggleVoicePlay(){\n // 识别当前voice.id加载正在播放的tts\n if(this.message?.voice?.id){\n if(this.chat.VoiceTTSMap[this.message?.voice?.id]){\n this.tts = this.chat.VoiceTTSMap[this.message?.voice?.id];\n }\n }\n // 正在播放,停止播放\n if(this.tts?.isPlaying){\n this.tts?.stop()\n return\n }\n // 未在播放,创建语音\n\n let needUpdate:boolean = false;\n // this.isVoicePlaying = true;\n let voice:Parse.Object\n if(this.message?.voice?.id){\n let query = new Parse.Query(\"ChatVoice\");\n query.include(\"voiceFile\");\n voice = await query.get(this.message?.voice?.id);\n }\n // console.log(voice);\n if(!voice?.id){ // 无声音文件,则创建ChatVoice音频合成数据对象\n let item = await this.chat.getVoiceByContentText(this.message?.content);\n voice = this.chat.voiceMap[item?.id]\n this.message.voice = {id:voice?.id,duration:voice?.get(\"duration\")}\n needUpdate = true\n }\n if(!this.message?.voice?.duration){\n this.message.voice.duration = voice?.get(\"duration\");\n needUpdate = true;\n }\n if(needUpdate){\n this.saveSession();\n }\n await this.chat.playChatVoice(voice,{\n onStart:(playedVoice:Parse.Object)=>{\n if(voice?.id != playedVoice?.id){\n // this.isVoicePlaying = false;\n }\n },\n onLoaded:(audio:HTMLAudioElement)=>{\n \n this.message.voice.duration = audio.duration*1000\n this.updateVoiceDuration(audio.duration*1000)\n },\n onStop:(playedVoice:Parse.Object)=>{\n if(voice?.id != playedVoice?.id){\n // this.isVoicePlaying = false;\n }\n }\n })\n this.tts = this.chat.VoiceTTSMap[voice?.id];\n }\n updateVoiceDuration(duration:number){\n if(!this.message?.voice?.duration){\n this.message.voice.duration = duration;\n this.saveSession();\n }\n }\n \n saveSession(){\n if(this.index>=2 || this.index===undefined){ // 未定义或序号第三项开始,自动保存Session(0.系统 1.问候 2.用户)\n this.chat?.saveChatSession(); // 保存消息语音\n }\n\n }\n async copy(){\n this.copyServ.copyToClipboard(getMessageContentText(this.message?.content))\n }\n}\n","
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n \n
\n
\n \n {{((message?.voice?.duration||0)/1000) | durationStr}}\n \n \n \n \n
\n
\n \n \n \n
\n
\n \n
\n \"\"\n
\n \n
\n \n \n
\n \n
\n 正在输入\n
\n\n
\n {{message?.createdAt | date:\"dd/MM/yy HH:mm\"}}\n
\n
","import { Component, OnInit,Input } from '@angular/core';\nimport { FmodeChat } from '../../service-fmai/service-chat';\nimport * as Parse from 'parse'\nimport { IonButton, IonLabel, IonModal,IonSegment,IonTitle,ModalController } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CrossService } from '../../../platform/cross.service';\n\n@Component({\n selector: 'app-comp-role-prompt',\n templateUrl: './comp-role-prompt.component.html',\n styleUrls: ['./comp-role-prompt.component.scss'],\n standalone:true,\n imports:[\n CommonModule,FormsModule,ReactiveFormsModule,\n IonModal,IonButton,IonSegment,IonLabel,\n NzIconModule\n ],\n providers:[\n ModalController,\n ]\n})\nexport class CompRolePromptComponent implements OnInit {\n @Input() chat:FmodeChat\n @Input() role:string = ``\n company:string\n showModal:boolean = false\n cateIndex = 0;\n isDarkMode:boolean = false;\n constructor(\n public cross: CrossService,\n private modalController: ModalController\n) {\n this.company = \"E4KpGvTEto\" // 飞码AI\n }\n\n ngOnInit() {\n this.getChatPrompt()\n if(document.body.classList.contains(\"dark\")){\n this.isDarkMode = true\n }\n }\n applyPrompt(message){\n this.chat.userInput = message;\n this.chat.isVoiceInputMode = false;\n this.chat.focusUserInput();\n if(this.cross?.navMenuType=='mobile'){\n this.modalController.dismiss();\n }\n }\n async getChatPrompt(){\n let query = new Parse.Query('ChatPrompt')\n query.notEqualTo('isDeleted', true)\n query.equalTo('company', this.company)\n query.equalTo('role', this.role)\n query.include('role')\n let promptData = await query.find()\n this.chat.promptList = promptData\n this.chat.promptList.forEach(item=>{\n let cate = item.get('role').get('promptCates').filter(cate => cate.name == item.get('cate'))\n item.img = cate[0].img\n })\n console.log(this.chat.promptList);\n }\n checkCate(index:number){\n this.cateIndex = index;\n }\n}\n","\n \n
\n \n
\n
\n
\n \"\"\n
\n
\n {{content.get('cate')}}\n
\n
\n \n
\n {{message}}\n
\n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \"\"\n
\n
\n {{content.get('cate')}}\n
\n
\n \n
\n {{message}}\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n\n \n \n
\n 话题灵感\n
\n \n \n {{prompt?.get(\"cate\")}}\n \n \n
\n
\n \n
{{message}}
\n
\n
\n
\n
\n
","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, DoCheck, Input } from '@angular/core';\nimport { ChatService, FmodeChat } from '../../service-fmai/service-chat';\nimport { FmChatMessageCard } from '../chat-message-card/comp-message-card.component';\nimport { CompRolePromptComponent } from '../comp-role-prompt/comp-role-prompt.component';\n\n@Component({\n selector: 'fm-chat-message-area',\n templateUrl: './comp-message-area.component.html',\n styleUrls: ['./comp-message-area.component.scss'],\n standalone:true,\n imports:[\n CommonModule,\n FmChatMessageCard,\n CompRolePromptComponent,\n ]\n})\nexport class FmChatMesssageArea implements AfterViewInit,DoCheck {\n\n @Input() chatId:string\n @Input() chat:FmodeChat\n // messageList:any[] = []\n get messageList():any[]{\n return this.chatServ.chatMap[this.chatId]?.messageList\n }\n \n constructor(private chatServ:ChatService,\n ){\n }\n\n ngDoCheck(): void {\n }\n ngAfterViewInit(): void {\n console.log(\"ng gogogo1\")\n console.log(\"ng gogogo2\")\n // this.messageList = this.chatServ.chatMap[this.chatId]?.messageList\n console.log(this.chat)\n }\n}\n","\n
\n \n \n \n \n \n\n @if(!chat?.hideInputPreview){\n \n \n \n \n \n \n \n \n \n }\n
","import { Component,Input } from '@angular/core';\nimport { IonButton, IonIcon, IonSpinner, ModalController, ToastController } from '@ionic/angular/standalone';\nimport { FmodeVoiceService } from '../../../voice/fmode-voice.service';\nimport { FmodeChat,FmodeChatMessage } from '../../../service-fmai/service-chat';\nimport { CommonModule } from '@angular/common';\nimport { NovaUploadService } from '../../../../storage/service-upload/nova-upload.service';\nimport Parse from \"parse\";\n\n@Component({\n selector: 'fm-modal-audio-message',\n standalone: true,\n imports: [\n CommonModule,\n IonButton,\n IonIcon,\n IonSpinner\n ],\n providers:[ModalController],\n templateUrl: './modal-audio-message.component.html',\n styleUrl: './modal-audio-message.component.scss'\n})\nexport class ModalAudioMessageComponent {\n\n @Input() chat:FmodeChat;\n @Input() modal:ModalController\n now:Date|undefined;\n\n isRecording:boolean = false;\n constructor(\n public voiceServ:FmodeVoiceService,\n private toastCtrl:ToastController,\n private uploadServ:NovaUploadService\n ){\n \n }\n ngOnInit(){\n // setTimeout(() => {\n this.chat.userInput = ``\n this.initVoiceSevice()\n this.voiceServ.startTalk();\n // }, 500);\n }\n\n /**\n * 语音听写服务 ==============================================\n */\n \n /**\n * 音频提示音播放\n */\n player = new Audio();\n\n playMusic(action){\n if(!this.player){\n this.player = new Audio();\n }\n this.player.src = `/assets/avatar/voice/${action}.mp3`\n try{\n this.player?.play();\n }catch(err){}\n }\n\n\n /**\n * 初始化录音转录服务\n * @desc\n * 根据数字角色对话状态,设计语音转录各事件处理过程\n * 嵌入提示音\n * 嵌入动画\n * 嵌入唤醒词切换逻辑\n */\n initVoiceSevice(){\n this.chat.userInput = this.voiceServ.resultText\n this.voiceServ.requestPermission().then(()=>{\n this.voiceServ.openWithPriviledge()\n })\n\n // 开始录音前 播放倾听动画\n // 开始录音前 播放提示音\n this.voiceServ.onBeforeStartTalk = ()=>{\n this.chat.playAnimation(\"listening\")\n this.playMusic(\"start-talk\")\n }\n\n // 开始录音后 加载计时器\n this.voiceServ.onAfterRecordStart = ()=>{\n this.isRecording = true\n }\n // 计时器显示文本\n this.voiceServ.onDurationStrChange = (durationStr)=>{\n this.durationStr = durationStr;\n }\n // 用户取消录音前 播放提示音\n this.voiceServ.onBeforeCancelTalk = ()=>{\n this.playMusic(\"interupt-talk\")\n this.chat.playAnimation(\"waiting\")\n }\n // 用户取消录音后 麦克风实时监听唤醒词\n this.voiceServ.onAfterCancelTalk = ()=>{\n // this.startASRAwake() // 监听与麦克风冲突,需要重启\n }\n // 完成录音前 播放提示音\n // 完成录音后 执行处理过程\n this.voiceServ.onBeforeFinishTalk = ()=>{\n this.chat.playAnimation(\"thinking\")\n this.playMusic(\"stop-talk\")\n }\n this.voiceServ.onAfterFinishTalk = async ()=>{\n console.log(\"onAfterFinishTalk1\",this.voiceServ?.resultText)\n console.log(\"onAfterFinishTalk2\",this.voiceServ?.resultTextTemp)\n this.chat.userInput = \"\"+(this.voiceServ?.resultTextTemp||this.voiceServ?.resultText)\n \n if(this.chat?.userInput){\n await this.saveChatVoice();\n }\n\n this.sendMessage() // 发送消息\n // this.startASRAwake() // 监听与麦克风冲突,需要重启\n }\n }\n\n chatVoice:Parse.Object\n async saveChatVoice(){\n let blob = this.voiceServ.recordWavBlob\n let duration = this.voiceServ.recordDuration\n if(blob){\n // 创建声音数据对象\n let ChatVoice = Parse.Object.extend(\"ChatVoice\");\n this.chatVoice = new ChatVoice();\n this.chatVoice.set(\"content\",this.chat.userInput);\n this.chatVoice.set(\"role\",\"user\");\n this.chatVoice.set(\"duration\",duration);\n let company = localStorage.getItem(\"company\")\n company&&this.chatVoice.set(\"company\",{__type:\"Pointer\",className:\"Company\",objectId:company});\n Parse.User.current()?.id&&this.chatVoice.set(\"user\",Parse.User.current().toPointer());\n\n // 上传音频文件并保存\n let id = this.chatVoice?.id || this.uploadServ?.genMd5(this.chatVoice?.get(\"content\")||this.chatVoice?.get(\"ssml\"))\n let now = new Date();\n let filename = id + now.getFullYear()+(now.getMonth()+1)+now.getDate()+now.getHours()+now.getMinutes()+now.getSeconds() + \".wav\"\n let file = new File([blob], filename, { type: 'audio/wav' });\n let fileResult = await this.uploadServ.upload(file,(res)=>{\n console.log(res) // 上传进度,可以同步更新页面上传百分比\n });\n let attachPointer = {__type:\"Pointer\",className:\"Attachment\",objectId:fileResult?.id}\n if(attachPointer?.objectId){\n this.chatVoice.set(\"voiceFile\",attachPointer)\n this.chatVoice = await this.chatVoice.save();\n }\n }\n return\n }\n\n async sendMessage(){\n\n // 检测用户登录情况\n // let isLoginLock = await this.authServ.checkLoginLock()\n // if(!isLoginLock) return false\n \n // 检测余额及模型付费限制\n // let payCheck = await this.checkBalance()\n // if(!payCheck) return false\n \n // 检测用户输入内容空值\n if(!this.chat.userInput){\n let toast = await this.toastCtrl.create({\n message:`内容不能为空`,\n position:\"top\",\n icon:'alert',\n color:\"warning-circle\",\n duration:1000\n })\n toast.present();\n return\n }\n \n // 正常发送消息\n // this.chat.isTalkMode = true;\n this.chat?.sendMessage(\"\"+this.chat?.userInput,this.chat?.userImage,(msg:any)=>{\n \n },{\n onSSMLComplete:(voice:any)=>{\n console.log(voice)\n }\n },{id:this.chatVoice?.id,duration:this.chatVoice?.get(\"duration\")});\n }\n\n /**\n * 计时器\n */\n durationStr:string = \"0:00\"\n\n /**\n * 操作区\n */\n cancel(){\n this.clear();\n this.voiceServ.cancelTalk();\n this.modal?.dismiss(null,\"cancel\")\n }\n send(){\n this.clear();\n this.voiceServ.finishTalk();\n this.modal?.dismiss(null,\"send\")\n }\n clear(){\n this.now = undefined;\n this.isRecording = false;\n }\n}\n","\n
\n\n \n \n
\n \n
\n
\n \n \n
\n \n \n \n \n \n
\n
\n {{durationStr || \"00:00\"}}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n \n
\n 请您讲话,AI会识别!\n
\n
\n
","import { Component, Input, OnInit,AfterViewInit, Output, ViewChild } from '@angular/core';\nimport { ActivatedRoute,Router, RouterModule } from '@angular/router';\nimport { AlertController, NavController, Platform, ToastController } from '@ionic/angular';\nimport { FmodeChat,FmodeChatMessage } from '../../service-fmai/service-chat';\nimport { ChatService } from '../../service-fmai/service-chat';\n\n// import { AuthService } from 'fmode-ng';\nimport Parse from \"parse\";\n// import { AccountService } from 'projects/nova-aigc/src/modules/account/account.service';\nimport { NzMessageService } from 'ng-zorro-antd/message';\nimport { ImagineService } from '../../service-fmai/service-imagine/imagine.service';\nimport { IonButton, IonContent, IonIcon, IonInput, IonItem, IonList, IonModal, IonPopover, IonTextarea, IonToolbar, ModalController } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NzModalModule } from 'ng-zorro-antd/modal';\n\nimport { ModalAudioMessageComponent } from \"./modal-audio-message/modal-audio-message.component\";\nimport { FmChatMessageCard } from '../chat-message-card/comp-message-card.component';\n\nimport { addIcons } from 'ionicons';\nimport {imageOutline,chevronBackOutline,ellipsisHorizontalOutline,chevronDownOutline,chatboxEllipsesOutline,micOutline,paperPlaneOutline,shareSocialOutline,settingsOutline, alertOutline, colorWandOutline, peopleOutline} from 'ionicons/icons';\naddIcons({colorWandOutline,peopleOutline,alertOutline,imageOutline,chevronBackOutline,ellipsisHorizontalOutline,chevronDownOutline,chatboxEllipsesOutline,micOutline,paperPlaneOutline,shareSocialOutline,settingsOutline})\n\n@Component({\n selector: 'fm-chat-modal-input',\n templateUrl: './modal-input.component.html',\n styleUrls: ['./modal-input.component.scss'],\n standalone:true,\n imports:[\n CommonModule,FormsModule,ReactiveFormsModule,\n RouterModule,\n IonToolbar,IonItem,IonButton,IonList,IonModal,\n IonInput,IonIcon,IonTextarea,IonPopover,IonContent,\n // NzModalModule,\n // \n FmChatMessageCard,\n ModalAudioMessageComponent\n ]\n})\nexport class FmChatModalInput implements OnInit{\n @ViewChild(ModalAudioMessageComponent) audioComp:ModalAudioMessageComponent\n @ViewChild(\"userInput\") userInputComp:IonTextarea\n\n\n @Input() chat:FmodeChat;\n @Input() message:FmodeChatMessage\n @Input() role:Parse.Object\n user:Parse.User\n errorText:string = ``\n\n isAudioModal:boolean = false;\n closeAudio(){\n this.audioComp?.cancel();\n this.isAudioModal=false;\n }\n audioModalHeightPoint = 0.35;\n async startTalk(){\n let height = document.body.clientHeight || 960;\n this.audioModalHeightPoint = Number((165/height).toFixed(2))\n\n this.chat.stopPlayingVoice();\n\n // 弹出认证组件\n let modal:any \n modal = await this.modalCtrl.create({\n component:ModalAudioMessageComponent,\n componentProps:{\n chat:this.chat,\n modal:modal,\n onBreakPointSet:()=>{\n modal?.setCurrentBreakpoint(this.audioModalHeightPoint)\n }},\n breakpoints:[this.audioModalHeightPoint],\n initialBreakpoint:this.audioModalHeightPoint,\n })\n modal.present()\n // this.isAudioModal=true;\n }\n account:any;\n authServ:any;\n constructor(\n private toastCtrl:ToastController,\n private alertCtrl:AlertController,\n private modalCtrl:ModalController,\n private navCtrl:NavController,\n private router:Router,\n private imagineServ:ImagineService,\n // private authServ:AuthService,\n public chatServ:ChatService,\n // private account:AccountService,\n private route:ActivatedRoute,\n private messages: NzMessageService\n ){\n // this.chatServ.getChatSession().then(()=>{\n // console.log(this.chatServ.chatList);\n // })\n this.user = Parse.User.current();\n\n }\n ngOnInit(){\n this.loadModel();\n // console.log(this.chat);\n let that = this;\n this.chat.focusUserInput = ()=>{\n that.chat.isVoiceInputMode = false;\n that.userInputComp.setFocus();\n }\n }\n\n // ngAfterViewInit(): void {\n // console.log(this.chat)\n // }\n\n async loadModel(){\n let model = this.chat?.role?.get(\"model\")\n await this.chatServ.loadModelList(model)\n }\n \n async setMessageImage(){\n // let url = `https://file-cloud.fmode.cn/Svehl6FceL/20240515/061503671.jpeg`;\n let url = await this.imagineServ.getimg();\n this.chat.userImage = url;\n console.log(this.chat?.userImage);\n // content是数组,添加\n // content非数组,重组\n }\n \n onInputFocus(){\n // console.log(\"onInputFocus\",this.chat.scrollToBottom)\n this.chat.isTexting=true;\n this.chat.scrollToBottom&&this.chat.scrollToBottom();\n }\n \n onKeyDown(event:KeyboardEvent){\n // 检查是否按下了Ctrl键和Enter键\n if (event.ctrlKey && event.key === 'Enter') {\n // 执行相应的逻辑\n console.log('Ctrl+Enter 被按下');\n this.sendMessage();\n }\n }\n async sendMessage(){\n\n // 检测用户登录情况\n // let isLoginLock = await this.authServ.checkLoginLock()\n // if(!isLoginLock) return false\n\n // 检测余额及模型付费限制\n // let payCheck = await this.checkBalance()\n // if(!payCheck) return false\n\n // 检测用户输入内容空值\n if(!this.chat.userInput){\n this.errorText = `内容不能为空`\n let toast = await this.toastCtrl.create({\n message:this.errorText,\n position:\"top\",\n icon:'alert',\n color:\"warning-circle\",\n duration:1000\n })\n toast.present();\n return\n }\n\n // 正常发送消息\n // this.chat.isTalkMode=true; // 开启说话模式\n this.chat?.sendMessage(this.chat?.userInput,this.chat?.userImage,(msg)=>{},{\n onSSMLComplete:(voice:any)=>{\n console.log(voice)\n }\n });\n this.chat.userInput = ``\n this.chat.userImage = ``\n }\n async checkBalance(){\n if(!this.chatServ?.currentModel?.get(\"payLimit\")) return true // 模型是否开启付费限制\n // 校验账户余额\n let billing = await this.account.getBilling();\n // let price = await this.calcPrice()\n let price = 10;\n if (billing?.credit?.balance < price) {\n let alert = await this.alertCtrl.create({\n header:\"注意\",\n subHeader:\"您的余额不足,请充值后解锁高级模型\",\n buttons:[\n {\n role:\"cancel\",\n text:\"取消\"\n },\n {\n role:\"destructive\",\n text:\"充值\",\n handler:()=>{\n // 待更换成原地弹窗,原地付费,避免页面跳转\n this.router.navigateByUrl(\"/account/billing\")\n }\n }\n ]\n })\n alert.present()\n return false\n }\n return true\n }\n\n //查询问答内容分享数据表:ChatShare\n async getChatShare(){\n this.user = Parse.User.current();\n let query = new Parse.Query('ChatShare');\n query.equalTo('user', Parse.User.current().id);\n query.equalTo('session', this.chat?.sessionId)\n let chatShare = await query.first()\n // console.log(chatShare);\n }\n\n async toggleChatShare() {\n //获取ChatShare数据表\n let query = new Parse.Query('ChatShare');\n query.equalTo('user', Parse.User.current().id);\n query.equalTo('role', this.chat?.role.id);\n query.equalTo('session', this.chat?.sessionId);\n // query.equalTo('messageList', this.chat?.messageList);\n query.select('objectId')\n let share = await query.first();\n // console.log(share);\n\n //如果id不存在,在数据表内创建新的记录\n if(!share?.id){\n let obj = Parse.Object.extend('ChatShare')\n share = new obj()\n share.set('user', {\n \"__type\": \"Pointer\",\n \"className\": \"_User\",\n \"objectId\": Parse.User.current()?.id\n })\n share.set('session', {\n \"__type\": \"Pointer\",\n \"className\": \"ChatSession\",\n \"objectId\": this.chat?.sessionId\n })\n share.set('role', {\n \"__type\": \"Pointer\",\n \"className\": \"AvatarRole\",\n \"objectId\": this.chat?.role.id\n })\n share.set('company', {\n \"__type\": \"Pointer\",\n \"className\": \"Company\",\n \"objectId\": \"E4KpGvTEto\"\n })\n share.set('messageList', this.chat?.messageList)\n } else {\n //id存在,点击分享按钮执行更新messageList数据的操作\n share.set('messageList', this.chat?.messageList)\n }\n await share.save();\n this.getChatShare();\n}\n\nchatShareSuccessMessage(): void {\n this.messages.success('分享成功');\n}\n\n //分享弹框组件\n isShare = false;\n\n showShare(): void {\n this.isShare = true;\n }\n\n handleOkShare(): void {\n // console.log(this.chat);\n // console.log(this.chat?.sessionId);\n // console.log(this.chat?.messageList);\n // console.log(this.chat?.role.id);\n this.toggleChatShare();\n this.chatShareSuccessMessage();\n this.isShare = false;\n }\n\n handleCancelShare(): void {\n this.isShare = false;\n }\n}\n","\n \n \n \n \n \n \n {{button?.showTitle&&button?.title}}\n \n \n\n \n \n {{button?.name}}\n \n \n\n \n @if(!chat?.hideShare){\n 1\" (click)=\"showShare()\" fill=\"outline\" title=\"分享\" slot=\"end\">\n \n \n }\n \n \n \n \n \n \n 取消\n \n 对话分享\n \n 分享\n \n \n \n \n \n \n \n \n\n
\n
\n \n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n {{message?.createdAt | date:\"dd/MM/yyyy, HH/mm/ss a\"}}\n
\n
\n
\n
\n
\n
\n\n \n \n \n \n \n @if(!chat?.hideModalSelect){\n \n \n {{chatServ?.currentModel?.get&&chatServ?.currentModel?.get(\"name\")||\"飞码4.0\"}}\n \n \n \n \n \n \n \n {{model?.get(\"name\")}}\n {{model?.get(\"credit\")}}/k\n \n \n \n \n \n \n }\n\n
\n\n \n \n \n \n \n \n \n \n
\n \n 点击讲话\n \n
\n
\n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n
\n
\n\n\n\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FmodeChat, FmodeChatMessage } from '../../service-fmai/service-chat';\nimport { ChatService } from '../../service-fmai/service-chat';\nimport { combineLatest } from 'rxjs';\nimport { FmChatHeaderArea } from '../chat-header-area';\nimport { FmChatMesssageArea } from '../chat-message-area';\nimport { FmChatModalInput } from '../chat-modal-input';\nimport { ModalController } from '@ionic/angular/standalone';\n// import { IonContent, IonHeader } from '@ionic/angular/standalone';\n\n@Component({\n selector: 'app-chat-panel',\n templateUrl: './chat-panel.component.html',\n styleUrls: ['./chat-panel.component.scss'],\n standalone:true,\n imports:[\n CommonModule,\n // IonHeader,IonContent,\n FmChatHeaderArea,\n FmChatMesssageArea,\n FmChatModalInput,\n ]\n})\nexport class ChatPanelComponent implements OnInit,AfterViewInit {\n\n @ViewChild(FmChatHeaderArea) headerArea:FmChatHeaderArea\n @Input() goBack:Function\n\n @Input() onChatSaved:(chat:FmodeChat)=>void\n @Input() onChatInit:(chat:FmodeChat)=>void\n @Input() onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>void\n @Input() onUserSend:(chat:FmodeChat,message:FmodeChatMessage)=>boolean|Promise\n @Input() onClose:(chat:FmodeChat)=>boolean|Promise\n\n @Input() mode:'modal'|'page' = 'page'\n @Input() chatId:string\n @Input() maskId:any\n @Input() roleId:string\n fmodeChat:FmodeChat\n\n // 继承自定义组件,实现覆盖操作区按钮及模型名称\n @Input() leftButtons:any[]|undefined;\n @Input() modelList:any[]|undefined;\n @Input() isDirect:boolean = false;\n @Input() showInputModal:boolean = true;\n @Input() showMessageArea:boolean = true;\n @Input() showHeaderArea:boolean = true;\n\n // 界面功能显示控制\n @Input() hideShare:boolean = false;\n @Input() hideModalSelect:boolean = false;\n @Input() hideInputPreview:boolean = false;\n\n\n constructor(\n private route:ActivatedRoute,\n private router:Router,\n private chatServ:ChatService,\n ){\n if(window.location.pathname?.indexOf(\"chat/session\")>-1){\n document.body.classList.add('dark');\n }\n }\n\n @ViewChild(\"contentComp\") contentComp:ElementRef\n /**\n * 监听DIV变化自动滚动至底部,改为更新内容区域组件\n */\n listenDivChange(){\n // return // 暂时关闭,切换为输入时变化至底部\n // 创建 MutationObserver 实例\n let observer = new MutationObserver(() => {\n this.fmodeChat.scrollComp = this.contentComp;\n // console.log(this.fmodeChat.scrollComp,this.contentComp)\n // this.scrollToBottom(this.contentComp);\n });\n // 配置观察选项\n let config = { childList: true, subtree: true, attributes:true };\n // 开始观察\n if(this.contentComp?.nativeElement){\n observer.observe(this.contentComp?.nativeElement, config);\n }\n }\n \n ngAfterViewInit(): void {\n }\n\n ngOnInit(): void {\n if(this.mode==\"modal\"){\n this.initChat();\n }\n\n if(this.mode==\"page\"){\n\n // 同步路由参数优先级:组件属性传参 > 路由传参\n combineLatest([this.route.params,this.route.queryParams]).subscribe(async data=>{\n this.initChat(data)\n })\n }\n\n }\n async initChat(data?:any){\n console.log(\"ChatComp OnInit\")\n let params = data?.[0]\n // console.log(\"params\",data)\n // 会话入口,加载历史消息\n this.chatId = params?.chatId || this.chatId || null\n if(this.chatId){ // 存在ID,则加载历史Session\n await this.chatServ.initChatMap(this.chatId)\n }\n\n // 角色入口,加载角色设置\n this.roleId = params?.roleId || this.roleId || \"2DXJkRsjXK\" || null\n if(this.roleId){ // 存在ID,则加载历史Session\n let chat = await this.chatServ.createNewRoleChat(this.roleId)\n this.fmodeChat = chat\n // console.log(chat)\n }\n\n // 加载Chat类\n if(this.chatId){\n this.fmodeChat = this.chatServ.chatMap[this.chatId];\n if(!this.fmodeChat){ // 不存在ID,则跳出面具选择\n this.router.navigate(['/chat/pro/mask'],{queryParams:{type:\"employee\"}})\n }\n this.fmodeChat = this.chatServ.chatMap[this.chatId]; \n }\n\n\n if(this.leftButtons){\n this.fmodeChat.leftButtons = this.leftButtons\n }\n if(window.location.pathname?.indexOf(\"chat/session\")>-1){\n this.fmodeChat.isVoiceInputMode = true;\n }else{\n this.fmodeChat.isVoiceInputMode = false;\n }\n if(this.modelList){\n this.chatServ.modelList = this.modelList\n this.chatServ.currentModel = this.modelList[0]\n }\n if(this.isDirect){\n this.fmodeChat.isDirect = this.isDirect\n }\n if(this.hideShare){\n this.fmodeChat.hideShare = this.hideShare\n }\n if(this.hideModalSelect){\n this.fmodeChat.hideModalSelect = this.hideModalSelect\n }\n if(this.hideInputPreview){\n this.fmodeChat.hideInputPreview = this.hideInputPreview\n }\n\n // 注入生命周期函数\n this.fmodeChat.onChatSaved = this.onChatSaved,\n this.fmodeChat.onMessage = this.onMessage,\n this.fmodeChat.onUserSend = this.onUserSend,\n this.fmodeChat.onClose = this.onClose,\n this.onChatInit&&this.onChatInit(this.fmodeChat)\n \n setTimeout(() => {\n this.fmodeChat.scrollComp = this.contentComp;\n // console.log(this.fmodeChat.scrollComp,this.contentComp)\n this.listenDivChange()\n }, 1000);\n this.sayWelcome()\n }\n sayWelcome(){\n if(this.fmodeChat.voiceConfig?.welcome?.enabled){\n // console.log(\"sayWelcome\")\n this.fmodeChat.welcome()\n }\n }\n loadMask(){\n\n }\n}\n\nexport interface ChatPanelOptions{\n roleId: string, // 角色AvatarRole.objectId\n chatId?: string, // 绘画ChatSession.objectId\n pid?: string, // 自传Person.objectId\n leftButtons?: any[],\n modelList?: any[],\n isDirect?: boolean,\n hideModalSelect?: boolean,\n hideShare?: boolean, // 是否隐藏:分享按钮\n hideInputPreview?: boolean, // 是否隐藏:输入预览\n onChatInit?:(chat:FmodeChat)=>void // FmodeChat初始化\n onChatSaved?:(chat:FmodeChat)=>void // FmodeChat初始化\n onUserSend?:(chat:FmodeChat,message:FmodeChatMessage)=>boolean|Promise // 用户发送消息\n // onUserInput?:(chat:FmodeChat,message:FmodeChatMessage)=>boolean|Promise // 用户输入信息\n onMessage?:(chat:FmodeChat,message:FmodeChatMessage)=>void // 新消息接收完成\n onClose?:(chat:FmodeChat)=>boolean|Promise // 结束当前会话\n}\n\nexport async function openChatPanelModal(modalCtrl:ModalController,options:ChatPanelOptions){\n let modal = await modalCtrl.create({\n component: ChatPanelComponent,\n componentProps: {\n roleId: options.roleId,\n chatId: options.chatId,\n leftButtons: options.leftButtons,\n modelList: options.modelList,\n isDirect: options.isDirect,\n hideModalSelect: options.hideModalSelect,\n hideShare: options.hideShare,\n hideInputPreview: options.hideInputPreview,\n // 生命周期与事件\n mode:\"modal\",\n onChatInit:options?.onChatInit,\n onChatSaved:options?.onChatSaved,\n onMessage:options?.onMessage,\n onUserSend:options?.onUserSend,\n onClose:options?.onClose,\n goBack:()=>{modalCtrl.dismiss()}\n },\n cssClass: 'modal-chat-panel', // 可选的自定义样式类\n backdropDismiss: false, // 点击背景是否关闭模态框\n keyboardClose:false\n });\n\n await modal.present();\n\n return modal;\n}","\n\n\n
\n
\n \n \n
\n \n
\n \n \n
\n \n
\n \n \n
\n
\n\n","import { Component,AfterViewInit } from '@angular/core';\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\"\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n// import \"@amap/amap-jsapi-types\"\n\ninterface MapPlace{\n name:string,\n location:Array,\n marker?: any // AMap.Marker\n}\n\n@Component({\n selector: 'app-page-map.start',\n templateUrl: './page-map.start.component.html',\n styleUrls: ['./page-map.start.component.scss']\n})\nexport class PageMapStartComponent implements AfterViewInit {\n AMap:any\n map: any // AMap.Map\n placeList:Array = [\n {name:\"江财蛟桥校区\",location:[115.855125,28.744335]},\n {name:\"江财枫林校区\",location:[115.835639,28.734119]},\n {name:\"江财麦庐校区\",location:[115.816717,28.728899]},\n ]\n ngAfterViewInit(): void {\n this.initMap();\n }\n async initMap(){\n await this.createMap()\n this.goAndMarkPlace(this.placeList[1])\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n })\n this.map = new this.AMap.Map('container');\n }\n /**\n * 添加点标记 Marker\n */\n async addMarks(){\n // JS API 提供了在地图之上绘制覆盖物的能力,现在我们添加add()一个默认的点标记Marker。\n let marker = new this.AMap.Marker({\n position:[115.835639,28.734119] //位置\n })\n this.map.add(marker); //添加到地图\n }\n goAndMarkPlace(place:any){\n this.map.setCenter(place.location)\n this.map.setZoom(18)\n console.log(this.placeList)\n if(place.marker) return\n place.marker = new this.AMap.Marker({\n position:place.location\n })\n this.map.add(place.marker);\n }\n clearMark(place:any){\n place?.marker?.remove()\n }\n /**\n * 路线规划 地点1 => 地点2\n */\n planRoute(p1,p2){\n let transfer;\n this.map.plugin([\"AMap.Transfer\"], () => { //加载公交换乘插件\n let transOptions = {\n map: this.map,\n city: '南昌市',\n panel: 'panel',\n // cityd:'经开区',\n policy: this.AMap.TransferPolicy.LEAST_TIME\n };\n console.log(this.AMap)\n console.log(this.AMap.TransferPolicy)\n //构造公交换乘类\n transfer = new this.AMap.Transfer(transOptions);\n //根据起、终点坐标查询公交换乘路线\n transfer.search(new this.AMap.LngLat(p1.location[0], p1.location[1]), new this.AMap.LngLat(p2.location[0], p2.location[1]), (status, result) => {\n // result即是对应的公交路线数据信息,相关数据结构文档请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_TransferResult\n if (status === 'complete') {\n console.log('绘制公交路线完成:')\n console.log(result)\n } else {\n console.error('公交路线数据查询失败' + result)\n }\n });\n // transOptions = {\n // city: '北京市', //公交城市\n // policy: AMap.TransferPolicy.LEAST_TRANSFER //乘车策略\n // };\n // trans = new AMap.Transfer (transOptions); //构造公交换乘类\n // AMap.Event.addListener(trans, \"complete\", trans_CallBack); //返回导航查询结果\n // AMap.Event.addListener(trans, \"error\", function(e){alert(e.info);}); //返回错误信息\n // //根据起、终点坐标查询公交换乘路线\n // trans.search(new AMap.LngLat(116.379018, 39.865026), new AMap.LngLat(116.42732, 39.903752));\n });\n\n\n }\n}\n","\n
\n\n\n
\n \n
\n {{place.name}}\n \n
\n
\n\n \n \n
","import { Component, Input, Output, EventEmitter, ViewChild, AfterViewInit, ElementRef } from '@angular/core';\nimport Parse from \"parse\";\n// 弹窗依赖\nimport { IonModal } from '@ionic/angular';\nimport { OverlayEventDetail } from '@ionic/core';\n\n// 高德依赖\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\"\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n\n@Component({\n selector: 'fm-map-poi-picker',\n templateUrl: './comp-poi-picker.component.html',\n styleUrls: ['./comp-poi-picker.component.scss']\n})\nexport class CompPoiPickerComponent implements AfterViewInit{\n @ViewChild(\"container\") container:ElementRef\n @ViewChild(\"panel\") panel:ElementRef\n @Input(\"name\") _name:string // 地标名称\n get name(){\n return this._name\n }\n set name(v){\n this._name = v;\n this.nameChange.emit(v)\n }\n @Output() nameChange:EventEmitter = new EventEmitter()\n\n\n @Input(\"address\") _address:string // 详细地址\n get address(){\n return this._address\n }\n set address(v){\n this._address = v;\n this.addressChange.emit(v)\n }\n @Output() addressChange:EventEmitter = new EventEmitter()\n\n @Input(\"location\") _location:Parse.GeoPoint // 经纬度数组\n get location(){\n return this._location\n }\n set location(v){\n this._location = v;\n this.locationChange.emit(v)\n }\n @Output() locationChange:EventEmitter = new EventEmitter()\n constructor(){\n }\n /**\n * 弹窗效果区域\n */\n isModalOpen:boolean = false;\n @ViewChild(IonModal) modal: IonModal;\n\n cancel() {\n this.isModalOpen = false;\n this.modal.dismiss(null, 'cancel');\n }\n\n confirm() {\n this.isModalOpen = false;\n this.modal.dismiss(this.address, 'confirm');\n }\n\n onWillDismiss(event: Event) {\n const ev = event as CustomEvent>;\n if (ev.detail.role === 'confirm') {\n console.log(\"确认\")\n }\n }\n openModal(){\n this.isModalOpen=true\n setTimeout(() => {\n this.initMap()\n }, 800);\n }\n /**\n * 高德地图插件区域\n */\n AMap:any;\n map:any;\n ngAfterViewInit(): void {\n }\n initMap(){\n this.createMap();\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n })\n let containerEl = this.container.nativeElement\n this.map = new this.AMap.Map(containerEl);\n this.goCurrentCenter()\n }\n goCurrentCenter(){\n this.AMap.plugin([\"AMap.Geolocation\"], () => {\n // 创建定位对象\n let geolocation = new this.AMap.Geolocation({\n enableHighAccuracy: true, // 是否使用高精度定位,默认为true\n timeout: 10000, // 超过10秒后停止定位,默认:无穷大\n maximumAge: 0, // 定位结果缓存0毫秒,默认:0\n convert: true, // 自动偏移坐标,偏移后的坐标为高德坐标,默认:true\n showButton: true, // 显示定位按钮,默认:true\n buttonPosition: 'RB', // 定位按钮停靠位置,默认:'LB',左下角\n buttonOffset: new this.AMap.Pixel(10, 10), // 定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)\n showMarker: false, // 定位成功后在定位到的位置显示点标记,默认:true\n showCircle: false, // 定位成功后用圆圈表示定位精度范围,默认:true\n panToLocation: true, // 定位成功后将定位到的位置作为地图中心点,默认:true\n zoomToAccuracy: false // 定位成功后将定位精度范围显示在地图上,默认:true\n });\n\n // 添加定位插件\n this.map.addControl(geolocation);\n\n // 获取当前位置信息\n geolocation.getCurrentPosition(function (status, result) {\n if (status === 'complete') {\n // 定位成功\n console.log('当前位置经度:' + result.position.getLng());\n console.log('当前位置纬度:' + result.position.getLat());\n } else {\n // 定位失败\n console.log('定位失败:' + result.message);\n }\n });\n})\n }\n searchByAddress(){\n let panelEl = this.panel.nativeElement\n this.AMap.plugin([\"AMap.PlaceSearch\"], () => {\n //构造地点查询类\n let placeSearch = new this.AMap.PlaceSearch({\n pageSize: 3, // 单页显示结果条数\n pageIndex: 1, // 页码\n // city: \"010\", // 兴趣点城市\n // citylimit: true, //是否强制限制在设置的城市内搜索\n map: this.map, // 展现结果的地图实例\n panel: panelEl, // 结果列表将在此容器中进行展示。\n autoFitView: true // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围\n });\n // 预设地点选择后事件\n placeSearch.on('selectChanged', (event) => {\n // 在这里处理选择的点的具体值\n this.name = event.selected.data.name\n this.address = event.selected.data.address\n this.location = new Parse.GeoPoint({latitude:event.selected.data.location.lat,longitude:event.selected.data.location.lng})\n this.createCenterMarker();\n })\n // this.AMap.event.addListener(placeSearch, 'selectChanged', (event) => {\n // // 在这里处理选择的点的具体值\n // console.log(event);\n // });\n \n // 关键字查询\n placeSearch.search(this.address);\n });\n }\n centerMarker:any\n createCenterMarker(){\n if(this.centerMarker) { // 避免多次创建\n return\n }\n this.centerMarker = new this.AMap.Marker({\n position: this.map.getCenter(), // Marker标记的初始位置为地图中心点\n offset: new this.AMap.Pixel(-15, -15), // 设置Marker标记的偏移量,使其在地图中心显示\n // content: '
', // 自定义Marker标记的样式,可以是一个HTML元素\n // map: this.map // 将Marker标记添加到地图上\n });\n this.map.add(this.centerMarker)\n this.map.on('dragging', () => { // 地图拖动中:自动更新中央标点位置\n this.centerMarker.setPosition(this.map.getCenter());\n });\n this.map.on('dragend', () => { // 拖动结束后:设置中央位置为经纬度\n let pos = this.centerMarker.getPosition()\n this.location = new Parse.GeoPoint({latitude:pos.lat,longitude:pos.lng})\n });\n }\n}\n","\n开始选点\n\n\n\n\n\n \n \n \n Cancel\n \n 地图选点({{location.latitude}},{{location.longitude}})\n \n Confirm\n \n \n \n \n \n \n \n 搜索\n \n \n \n
\n
\n\n
\n
\n
\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { CompPoiPickerComponent } from './comp-poi-picker.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\n\n\n@NgModule({\n declarations: [CompPoiPickerComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n IonicModule.forRoot({mode:\"ios\"})\n ],\n exports:[\n CompPoiPickerComponent\n ]\n})\nexport class CompPoiPickerModule { }\n","import { Component } from '@angular/core';\nimport Parse from \"parse\";\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\"\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n\n@Component({\n selector: 'app-page-plan-route',\n templateUrl: './page-plan-route.component.html',\n styleUrls: ['./page-plan-route.component.scss']\n})\nexport class PagePlanRouteComponent {\n AMap:any\n map: any // AMap.Map\n placeList:Array = [\n ]\n currentTab:string = \"place\"\n constructor(){\n this.addNewPlace()\n this.addNewPlace()\n this.currentTab = \"plan\"\n }\n addNewPlace(){\n if(this.placeList?.length>=1){\n this.placeList.push({\n name:\"秋水广场\",\n address:\"南昌市秋水广场\",\n location:new Parse.GeoPoint({latitude:28.682634,longitude:115.86273})\n })\n }else{\n this.placeList.push({\n name:\"八一广场\",\n address:\"南昌市八一广场\",\n location:new Parse.GeoPoint({latitude:28.673856,longitude:115.904477})\n })\n }\n\n }\n ngAfterViewInit(): void {\n }\n async initMap(){\n await this.createMap()\n this.goAndMarkPlace(this.placeList[0])\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n })\n this.map = new this.AMap.Map('container-plan');\n }\n \n goAndMarkPlace(place:any){\n this.map.setCenter([place.location.latitude,place.location.longitude])\n this.map.setZoom(18)\n if(place.marker) return\n place.marker = new this.AMap.Marker({\n position:[place.location.latitude,place.location.longitude]\n })\n this.map.add(place.marker);\n }\n clearMark(place:any){\n place?.marker?.remove()\n }\n /**\n * 路线规划 地点1 => 地点2\n */\n planRoute(p1,p2){\n let transfer;\n this.map.plugin([\"AMap.Transfer\"], () => { //加载公交换乘插件\n let transOptions = {\n map: this.map,\n city: '南昌市',\n panel: 'panel',\n // cityd:'经开区',\n policy: this.AMap.TransferPolicy.LEAST_TIME\n };\n //构造公交换乘类\n transfer = new this.AMap.Transfer(transOptions);\n //根据起、终点坐标查询公交换乘路线\n let p1pos = new this.AMap.LngLat(p1.location.longitude, p1.location.latitude)\n let p2pos = new this.AMap.LngLat(p2.location.longitude, p2.location.latitude)\n transfer.search(p1pos, p2pos, (status, result) => {\n // result即是对应的公交路线数据信息,相关数据结构文档请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_TransferResult\n if (status === 'complete') {\n console.log('绘制公交路线完成:')\n console.log(result)\n } else {\n console.error('公交路线数据查询失败' + result)\n }\n });\n });\n\n\n }\n async createPlan(){\n await this.initMap();\n this.planRoute(this.placeList[0],this.placeList[1]);\n }\n}\n","\n \n 景点选择\n \n \n 路线规划\n \n \n \n\n\n

选择旅游计划景点

\n\n \n \n

{{place?.name}}

\n 详细地址:{{place.address}}\n 地图坐标:{{place.location.latitude}},{{place.location.longitude}}\n \n
\n
\n 添加新景点\n
\n\n\n 创建规划路线\n\n
\n
\n
\n\n","import { AfterViewInit, Component } from '@angular/core';\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\";\ndeclare const Loca:any;\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n@Component({\n selector: 'app-page-loca-scatter',\n templateUrl: './page-loca-scatter.component.html',\n styleUrls: ['./page-loca-scatter.component.scss']\n})\nexport class PageLocaScatterComponent implements AfterViewInit{\n AMap:any\n map: any // AMap.Map\n ngAfterViewInit(): void {\n this.initMap();\n }\n async initMap(){\n await this.createMap()\n await this.createLoca()\n }\n async createLoca(){\n let loca = (window as any).loca = new Loca.Container({\n map:this.map,\n });\n\n // 蓝色普通点\n let geo = new Loca.GeoJSONSource({\n url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road.json',\n });\n let scatter = new Loca.ScatterLayer({\n zIndex: 111,\n opacity: 1,\n visible: true,\n zooms: [2, 22],\n });\n scatter.setSource(geo);\n scatter.setStyle({\n color: 'rgba(43,156,75,1)',\n unit: 'meter',\n size: [150, 150],\n borderWidth: 0,\n });\n loca.add(scatter);\n\n // 红色呼吸点\n let geoLevelF = new Loca.GeoJSONSource({\n // data: [],\n url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_F.json',\n });\n let breathRed = new Loca.ScatterLayer({\n loca,\n zIndex: 113,\n opacity: 1,\n visible: true,\n zooms: [2, 22],\n });\n breathRed.setSource(geoLevelF);\n breathRed.setStyle({\n unit: 'meter',\n size: [2600, 2600],\n borderWidth: 0,\n texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png',\n duration: 500,\n animate: true,\n });\n\n // 黄色呼吸点\n let geoLevelE = new Loca.GeoJSONSource({\n // data: [],\n url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_E.json',\n });\n let breathYellow = new Loca.ScatterLayer({\n loca,\n zIndex: 112,\n opacity: 1,\n visible: true,\n zooms: [2, 22],\n });\n breathYellow.setSource(geoLevelE);\n breathYellow.setStyle({\n unit: 'meter',\n size: [1000, 1000],\n borderWidth: 0,\n texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_yellow.png',\n duration: 1000,\n animate: true,\n });\n\n // 启动渲染动画\n loca.animate.start();\n\n let dat = new Loca.Dat();\n dat.addLayer(scatter, ' 贴地');\n dat.addLayer(breathRed, '红色');\n dat.addLayer(breathYellow, '黄色');\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n \"Loca\":{ // 是否加载 Loca, 缺省不加载\n \"version\": '2.0.0' // Loca 版本,缺省 1.3.2\n },\n })\n\n this.map = new this.AMap.Map('container',{\n zoom: 11.7,\n center: [113.97199630737305, 22.5807295363949],\n pitch: 40,\n showLabel: false,\n mapStyle: 'amap://styles/dark',\n viewMode: '3D',\n });\n }\n}\n","
","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule, Routes } from '@angular/router';\n// import { EditAmapPositionPickerModule } from './edit-amap-position-picker';\nimport { PageMapStartComponent } from './page-map.start/page-map.start.component';\nimport { CompPoiPickerModule } from './comp-poi-picker/comp-poi-picker.module';\nimport { PagePlanRouteComponent } from './page-plan-route/page-plan-route.component';\nimport { IonicModule } from '@ionic/angular';\nimport { PageLocaScatterComponent } from './page-loca-scatter/page-loca-scatter.component';\n\nconst routes: Routes = [\n {\n path:\"start\", component:PageMapStartComponent\n },\n {\n path:\"plan/route\", component:PagePlanRouteComponent\n },\n {\n path:\"loca/scatter\", component:PageLocaScatterComponent\n }\n];\n@NgModule({\n declarations: [\n PageMapStartComponent,\n PagePlanRouteComponent,\n PageLocaScatterComponent\n ],\n imports: [\n CommonModule,\n // EditAmapPositionPickerModule,\n RouterModule.forChild(routes),\n // \n IonicModule.forRoot({mode:\"ios\"}),\n // 引用自定义独立组件模块\n CompPoiPickerModule\n ],\n exports:[\n CompPoiPickerModule\n ]\n})\nexport class FmodeMapModule { }\n","import { Injectable } from '@angular/core';\n\n// @ts-ignore\nimport ObsClient from \"esdk-obs-browserjs\"\n\nimport Parse from \"parse\";\n\n/**\n * HwobsDir 华为OBS目录接口\n * @public\n */\nexport interface HwobsDir{\n Prefix:string // \"storage/2023/\"\n\n}\n\n/**\n * HwobsDir 华为OBS文件接口\n * @public\n */\nexport interface HwobsFile{\n ETag: \"\\\"f0ec968fe51ab48348307e06476122eb\\\"\"\n Key:string //\"storage/3mkf41033623275.png\"\n LastModified:string //\"2023-11-08T12:03:13.008Z\"\n Owner:object // {ID: '09971a1979800fb60fbbc00ada51f7e0'}\n Size:string //\"25839\"\n StorageClass:string //\"STANDARD\"\n}\n\n/**\n * HwobsService 华为OBS文件服务\n * @public\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HwobsService {\n obsClient:ObsClient\n bucketName:string\n host:string\n constructor() {\n this.host = \"https://web3-test.obs.cn-south-1.myhuaweicloud.com/\"\n this.bucketName = \"web3-test\"\n this.obsClient = new ObsClient({\n access_key_id: '6UIET20WHUI5TLXWOVNA', \n secret_access_key: 'YaoY8Kj3TeGZHEcBzplTMZiPGNL13Y3frEavC1kF',\n // 这里以华南-广州为例,其他地区请按实际情况填写\n server: 'https://obs.cn-south-1.myhuaweicloud.com'\n });\n }\n\n /**\n * 目录及检索相关函数\n */\n listDir(prefix):Promise<{\n dirs:Array,\n files:Array\n }>{\n return new Promise((resolve,reject)=>{\n this.obsClient.listObjects({\n Bucket : this.bucketName,\n Prefix : prefix,\n Delimiter: '/'\n }, (err, result) => {\n if(err){ \n console.error('Error-->' + err); \n reject(err) \n }else{ \n console.log('Status-->' + result.CommonMsg.Status);\n console.log(result)\n if(result.CommonMsg.Status < 300 && result.InterfaceResult){\n for(var j in result.InterfaceResult.Contents){\n console.log('Contents[' + j + ']:');\n console.log('Key-->' + result.InterfaceResult.Contents[j]['Key']);\n console.log('Owner[ID]-->' + result.InterfaceResult.Contents[j]['Owner']['ID']);\n }\n } \n let dirs:HwobsDir[] = result.InterfaceResult.CommonPrefixes\n let files:HwobsFile[] = result.InterfaceResult.Contents\n resolve({dirs:dirs,files:files}) \n }\n });\n })\n\n }\n\n /**\n * 文件上传相关函数\n * @param file \n * @param key \n * @returns \n */\n async uploadFile(file:File,key:string):Promise{\n // key 文件上传后的全部路径\n // /storage/<公司账套>/<应用名称>/年月日/<文件名>.<文件后缀>\n // /storage/web2023/<学号>/年月日/<文件名>.<文件后缀>\n let attach = await this.checkFileExists(file);\n if(attach?.id) return attach\n return new Promise((resolve,reject)=>{\n this.obsClient.putObject({\n Bucket : this.bucketName,\n Key : key,\n SourceFile : file\n }, async (err, result) => {\n if(err){\n console.error('Error-->' + err);\n reject(err)\n }else{\n console.log('Status-->' + result.CommonMsg.Status);\n let attach = await this.saveAttachment(file,key)\n resolve(attach)\n }\n });\n })\n }\n Attachment = Parse.Object.extend(\"Attachment\")\n\n async checkFileExists(file):Promise{\n let hash = await this.getFileHash(file)\n // 文件HASH查重,避免重复上传\n let attach:Parse.Object\n let query = new Parse.Query(\"Attachment\")\n query.equalTo(\"hash\",hash);\n query.equalTo(\"size\",file.size);\n let exists:any = await query.first();\n if(!exists?.id) exists = new this.Attachment()\n attach = exists\n return attach\n }\n async saveAttachment(file:File,key:string){\n let hash = await this.getFileHash(file)\n let attach = await this.checkFileExists(file)\n attach.set(\"name\",file.name)\n attach.set(\"size\",file.size)\n attach.set(\"mime\",file.type)\n attach.set(\"url\",this.host + key)\n attach.set(\"hash\",hash)\n attach = await attach.save()\n return attach\n }\n\n async getFileHash(file:File) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = async (event:any) => {\n const buffer = event.target.result;\n const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');\n resolve(hashHex);\n };\n reader.onerror = (event:any) => {\n reject(event.target.error);\n };\n reader.readAsArrayBuffer(file);\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { HwobsDir, HwobsFile, HwobsService } from '../service-hwobs/hwobs.service';\n\n@Component({\n standalone:true,\n imports:[\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n IonicModule\n ],\n selector: 'fm-storage-hwobs-manager',\n templateUrl: './hwobs-manager.component.html',\n styleUrls: ['./hwobs-manager.component.scss']\n})\nexport class HwobsManagerComponent {\n dirs: HwobsDir[] = [];\n files: HwobsFile[] = [];\n prefix: string = \"storage/\"\n openFile(file: any) {\n console.log('Opening file:', file);\n // Add your logic to open the file details here\n }\n openDir(dir?:HwobsDir|null,type:string=\"pre\"){\n if(dir){\n this.prefix = dir.Prefix\n this.listDir(dir.Prefix)\n }else{\n if(type==\"pre\"){\n let list = this.prefix.split(\"/\")\n if(list.length>1){\n let prefix = list.splice(0,list.length-1).join(\"/\")\n console.log(prefix)\n this.prefix = prefix\n this.listDir(prefix)\n }\n }\n }\n }\n showName(name:string){\n return name.replaceAll(this.prefix,\"\")\n }\n constructor(\n private hwobs:HwobsService\n ){\n this.listDir(this.prefix)\n }\n\n async listDir(prefix:string){\n let {dirs,files} = await this.hwobs.listDir(prefix)\n this.dirs = dirs\n this.files = files\n }\n}\n","\n \n \n File Manager\n \n \n \n \n \n \n \n \n ../\n \n \n \n {{ showName(item.Prefix) }}\n \n \n \n {{ showName(item.Key) }}\n \n \n ","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { HwobsManagerComponent } from './comp-hwobs-manager/hwobs-manager.component';\nimport { IonicModule } from '@ionic/angular';\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\nimport { NovaUploadService } from './service-upload';\n\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n IonicModule.forRoot({mode:\"ios\"}),\n // 独立组件\n HwobsManagerComponent,\n ],\n exports:[\n HwobsManagerComponent\n ],\n providers:[\n Diagnostic,\n NovaUploadService\n ]\n})\nexport class FmodeStorgeModule { }\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { AuthService } from '../../user/login/auth.service';\nimport Parse from \"parse\";\ndeclare var wx: any;\n\n// 微信JSSDK官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WechatJssdkService {\n\n isInit:boolean = false;\n isWechat:boolean = false; // 服务初始化即判断是否微信浏览器\n wx:any\n company:string\n wechatAccountId:string = localStorage.getItem(\"WECHAT_APP_ID\") || \"wxb4193c93ae9aa696\"; // 微信公众号ID\n openid:string\n\n constructor(\n private http:HttpClient,\n private authServ: AuthService,\n ) { \n // 检测微信环境\n let ua = navigator.userAgent.toLowerCase();\n let isWechat = ua.indexOf('micromessenger') !== -1;\n this.isWechat = isWechat\n // 初始化帐套\n this.company = this.authServ.company || localStorage.getItem(\"company\");\n }\n /**\n * 配置当前页面分享参数\n */\n\n async setCurrentPageShareInfo(shareInfo={\n title: '飞码AI', // 分享标题\n desc: '解放创意引领未来|国际前沿的AIGC平台', // 分享描述\n link: location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致\n type: 'link', //分享类型,music、video或link,不填默认为link\n imgUrl: 'https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png', // 分享图标\n success: () => {\n // 设置成功\n console.log('分享成功');\n },\n error: () => {\n console.log('分享失败');\n },\n cancel: () => {\n console.log('取消分享');\n }\n }){\n const signPackage = await this.getWXSignPackageInWechat()\n\n wx.config({\n debug: false, // 开启调试模式\n appId: signPackage.appid, // 必填,公众号的唯一标识\n timestamp: signPackage.timestamp, // 必填,生成签名的时间戳\n nonceStr: signPackage.nonceStr, // 必填,生成签名的随机串\n signature: signPackage.signature, // 必填,签名,见附录1\n jsApiList: [\n \"chooseWXPay\", // JSAPI微信支付\n 'onMenuShareTimeline', //分享到微信朋友圈\n 'onMenuShareAppMessage', //分享给微信朋友\n 'onMenuShareQQ', //分享到QQ\n 'onMenuShareQZone', //分享到QQ空间\n 'updateAppMessageShareData', //分享到微信及QQ(新接口)\n 'updateTimelineShareData' //分享到朋友圈”及“分享到QQ空间(新接口\n ], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2\n });\n \n if(shareInfo?.type==\"link\"){\n // 判断是否有参数\n shareInfo.link = this.getInviteUrl(shareInfo.link)\n }\n\n wx.ready(() => {\n wx.updateAppMessageShareData(shareInfo); //分享到微信好友或者qq好友\n wx.updateTimelineShareData(shareInfo); //分享到朋友圈或者qq空间\n });\n wx.error(() => {});\n }\n getInviteUrl(url){\n let u = new URL(url);\n let id = Parse.User?.current()?.id\n if(id){\n u.searchParams.set(\"invite\",id)\n }\n return u.href\n }\n\n /**\n * 当前页面获取微信授权签名\n */\n /* 获取微信签名 */\n getWXSignPackageInWechat():Promise{\n let params = {\n company: this.company,\n // href: encodeURIComponent(location.href.split(\"?\")[0]),\n href: encodeURIComponent(location.href),\n };\n return new Promise(resolve=>{\n this.http\n .post(`https://server.fmode.cn/api/wechat/getconfig`, params)\n .subscribe((response) => {\n // 返回的签名信息\n let res: any = response;\n let signPackage = res.data;\n resolve(signPackage)\n });\n })\n }\n\n /** 微信用户初始化 \n * @desc 为当前已登录用户,获取微信授权openid信息\n */\n /* 如果是微信内置浏览器,初始化用户openid信息,获取登录code */\n async initUserOpenid() {\n await this.init()\n\n let code = this.getQueryStringByName(\"code\");\n let openid = localStorage.getItem(\"openid\");\n if (!openid) {\n if(!Parse.User.current()) return\n openid = Parse?.User?.current()?.get(\"wechat\")?.[this.wechatAccountId]?.openid;\n if (this.isWechat && !openid) { // 不存在则获取\n let pathname = window.location.pathname\n if (!code) {\n this.authWechat(pathname);\n } else {\n await this.getwechat(code,pathname);\n }\n }else{\n this.openid = openid // 存在则加载\n }\n }\n }\n authWechat(url: string = \"/account/billing\") {\n if (!localStorage.getItem(\"openid\")) {\n let REDIRECT_URI = \"https://ai.fmode.cn\" + url;\n REDIRECT_URI = encodeURIComponent(REDIRECT_URI);\n // console.log(REDIRECT_URI);\n // console.log(\n // \"https://open.weixin.qq.com/connect/oauth2/authorize?appid=\" +\n // this.wechatAccountId +\n // \"&redirect_uri=\" +\n // REDIRECT_URI +\n // \"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect\"\n // );\n window.location.href =\n \"https://open.weixin.qq.com/connect/oauth2/authorize?appid=\" +\n this.wechatAccountId +\n \"&redirect_uri=\" +\n REDIRECT_URI +\n \"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect\";\n return;\n }\n }\n //根据QueryString参数名称获取值\n getQueryStringByName(name: string) {\n let result = location.search.match(\n new RegExp(\"[?&]\" + name + \"=([^&]+)\", \"i\")\n );\n if (result == null || result.length < 1) {\n return \"\";\n }\n return result[1];\n }\n async getwechat(\n code: string,\n url: string = \"/account/billing\"\n ): Promise {\n return new Promise(async (resolve, reject) => {\n this.http\n .post(`https://server.fmode.cn/api/wechat/get_wx`, {\n company: this.company,\n code: code,\n })\n .subscribe(\n async (res: any) => {\n console.log(res);\n if (res && res.code == 200 && res.data.openid) {\n let openid = res.data.openid;\n // localStorage.setItem('authData', JSON.stringify(res.data))\n localStorage.setItem(\"openid\", openid);\n localStorage.removeItem(\"code\");\n let userWechat = {}\n userWechat[this.wechatAccountId] = {\"openid\": openid}\n Parse.User.current().set(\"wechat\", userWechat);\n await Parse.User.current().save();\n resolve(true);\n }\n },\n async (err) => {\n console.log(\"Error updating items\", err);\n this.authWechat(url);\n reject(false);\n }\n );\n });\n }\n\n /** 微信环境初始化 */\n init():Promise{\n return new Promise(resolve=>{\n if(!this.isWechat) resolve(false) // 非微信环境无需加载\n if(this.isInit) resolve(true) // ts函数 已初始化无需重复加载\n if(wx) resolve(true) // index.html 已加载无需重复加载\n // 调用函数加载指定脚本文件\n this.loadScript('https://res.wx.qq.com/open/js/jweixin-1.6.0.js', () => {\n // 在脚本加载完成后执行的操作\n this.isInit = true;\n this.wx = wx;\n // 在这里可以使用加载的脚本\n resolve(true)\n },()=>{\n resolve(false)\n });\n })\n }\n loadScript(url, callback,errCallback) {\n var script = document.createElement('script');\n script.src = url;\n // 脚本加载完成后的回调函数\n script.onload = () => {\n if (callback) {\n callback();\n }\n };\n script.onerror = ()=>{\n if(errCallback){\n errCallback();\n }\n }\n // 将脚本添加到页面中\n document.body.appendChild(script);\n }\n \n}\n","import { waitForAsync } from '@angular/core/testing';\nimport { Legend } from 'jscharting';\nimport { Component, OnInit } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormControl, FormGroup, ValidationErrors, ValidatorFn, Validators, } from '@angular/forms';\nimport { Observable, Observer } from 'rxjs';\nimport { NzMessageService } from 'ng-zorro-antd/message';\nimport { AuthService } from './auth.service';\nimport Parse from \"parse\";\nimport { Router, ActivatedRoute, ParamMap } from '@angular/router';\nimport { HttpClient } from \"@angular/common/http\";\nimport { NovaCloudService } from '../../nova-cloud/nova-cloud.service';\n\n@Component({\n selector: \"app-pcuser-login\",\n templateUrl: \"./login.component.html\",\n styleUrls: [\"./login.component.scss\"]\n})\nexport class LoginComponent implements OnInit {\n nums = ['C', '6', 'Z', 't'];\n str = '';\n canvas: any;\n image: any;\n tabIndex:number = 0;\n // 绘制验证码\n drawCode(str) {\n // this.resetCode()\n this.canvas = document.getElementById(\"verifyCanvas\"); //获取HTML端画布\n var context: CanvasRenderingContext2D = this.canvas.getContext(\"2d\"); //获取画布2D上下文\n context.fillStyle = \"white\"; //画布填充色\n context.fillRect(0, 0, this.canvas.width, this.canvas.height); //清空画布\n context.fillStyle = \"cornflowerblue\"; //设置字体颜色\n context.font = \"25px Arial\"; //设置字体\n var rand = new Array();\n var x = new Array();\n var y = new Array();\n for (var i = 0; i < 4; i++) {\n rand.push(rand[i]);\n rand[i] = this.nums[i]\n x[i] = i * 20 + 10;\n y[i] = Math.random() * 20 + 20;\n context.fillText(rand[i], x[i], y[i]);\n }\n str = rand.join('').toUpperCase();\n //画3条随机线\n for (var i = 0; i < 3; i++) {\n this.drawline(this.canvas, context);\n }\n\n // 画30个随机点\n for (var i = 0; i < 30; i++) {\n this.drawDot(this.canvas, context);\n }\n this.convertCanvasToImage(this.canvas);\n return str;\n }\n\n // 随机线\n drawline(canvas, context) {\n context.moveTo(Math.floor(Math.random() * canvas.width), Math.floor(Math.random() * canvas.height)); //随机线的起点x坐标是画布x坐标0位置,y坐标是画布高度的随机数\n context.lineTo(Math.floor(Math.random() * canvas.width), Math.floor(Math.random() * canvas.height)); //随机线的终点x坐标是画布宽度,y坐标是画布高度的随机数\n context.lineWidth = 0.5; //随机线宽\n context.strokeStyle = 'rgba(50,50,50,0.3)'; //随机线描边属性\n context.stroke(); //描边,即起点描到终点\n }\n // 随机点(所谓画点其实就是画1px像素的线,方法不再赘述)\n drawDot(canvas, context) {\n var px = Math.floor(Math.random() * canvas.width);\n var py = Math.floor(Math.random() * canvas.height);\n context.moveTo(px, py);\n context.lineTo(px + 1, py + 1);\n context.lineWidth = 0.2;\n context.stroke();\n }\n // 绘制图片\n convertCanvasToImage(canvas) {\n document.getElementById(\"verifyCanvas\").style.display = \"none\";\n this.image = document.getElementById(\"code_img\");\n this.image.src = canvas.toDataURL(\"image/png\");\n return this.image;\n }\n // 登录\n // 验证码\n vCode: string;\n // 登录验证表单对象\n validateForm!: FormGroup;\n // 帐号密码表单对象\n validateUserForm!: FormGroup;\n // 手机验证码表单\n validateSMSForm!:FormGroup;\n smsCodeErrorTip:string;\n // 用户名错误提示\n userErrorTip: any;\n // 密码错误提示\n passwordErrorTip: any;\n forgetphoneCodesErrorTip: any;\n phoneErrorTip: any;\n codeVerified:boolean = false;\n codeErrorTip: any\n // 用户名(手机号码)\n username: any;\n // forgetusername\n forgetusername: string;\n forgetPassword: string;\n forgetConfirmpassword: string;\n forgerphoneCode: string;\n smsCode:string\n // 密码\n phoneCode: any;\n // code: '67de'\n //所有候选组成验证码的字符,当然也可以用中文的\n // 检测是否为学校学生\n\n // //绑定学籍验证表单对象\n // profileForm!: FormGroup;\n // // 姓名错误提示\n // nameErrorTip: any;\n // // 身份证号码错误提示\n // idcardErrorTip: any;\n\n // 注册\n registForm!: FormGroup;\n // 忘记密码\n forgetForm!: FormGroup;\n // 注册姓名错误提示\n registNameErrorTip: any;\n // 密码错误提示\n registIdcardErrorTip: any;\n // 注册姓名\n registName: any;\n phoneCodes: any;\n registPhone: any;\n // 注册身份证号码\n registIdcard: any;\n passwordVisible = false;\n passwordVisible2 = false;\n passwordVisible3 = false;\n // 是否有多个层次\n iseducation: boolean = false;\n // 层次\n selectEducation: any;\n redirectUrl: any = localStorage.getItem(\"redirectUrl\");\n\n // 手机验证码\n\n isSended:boolean = false;\n isSending:boolean = false;\n smsTimeCount: number = 60;\n sendSMSCode(){\n if(!this.codeVerified){\n this.message.create(\"error\", \"请先核对验证码\")\n return\n }\n\n let mobile = this.validateSMSForm.value?.mobile;\n console.log(this.validateSMSForm.value)\n if(mobile){\n let apigURL = localStorage.getItem(\"NOVA_APIG_SERVER\")\napigURL = decodeURIComponent(atob(apigURL));\nlet url = apigURL+\"message\"\n this.http.post(url, { company: this.companyId, mobile: mobile, action: 'login' }).subscribe((res: any) => {\n this.countDownSMS()\n this.message.info(`已发送,请查收验证码`);\n }, error => {\n this.message.error(error?.error?.mess||`系统繁忙中,请稍后重试`);\n })\n }else{\n this.message.error(\"请正确输入手机号\")\n }\n }\n countDownSMS(){\n\n this.isSended = true;\n this.isSending = true;\n this.smsTimeCount = 60;\n let interval = setInterval(()=>{\n this.smsTimeCount --\n },1000)\n\n setTimeout(() => {\n clearInterval(interval);\n this.isSending = false;\n }, 60*1000);\n }\n // 点击登录按钮\n submitFormMobileSMS(value: { mobile: string; smsCode: string; checkCode: string }): void {\n // localStorage.removeItem(\"user\")\n for (const key in this.validateSMSForm.controls) {\n this.validateSMSForm.controls[key].markAsDirty();\n this.validateSMSForm.controls[key].updateValueAndValidity();\n }\n console.log(value)\n this.username = value.mobile;\n this.smsCode = value.smsCode;\n console.log(\"smslogin\")\n // return\n this.loginSMS();\n }\n // 点击登录按钮\n submitFormMobilePassword(value: { mobile: string; username?:string; password: string; checkCode: string }): void {\n // localStorage.removeItem(\"user\")\n for (const key in this.validateForm.controls) {\n this.validateForm.controls[key].markAsDirty();\n this.validateForm.controls[key].updateValueAndValidity();\n }\n this.username = value.mobile || value.username;\n this.password = value.password;\n let checkCode = value.checkCode;\n let c = this.code.toLowerCase()\n let vc = checkCode.toLowerCase()\n console.log(c, vc);\n\n if (c != vc) {\n console.log(c, vc);\n\n this.message.create(\"error\", \"验证码错误\");\n } else {\n this.loginMobilePassword();\n }\n }\n\n // 点击登录按钮\n submitFormUserPassword(value: { mobile: string; username?:string; password: string; checkCode: string }): void {\n // localStorage.removeItem(\"user\")\n for (const key in this.validateForm.controls) {\n this.validateForm.controls[key].markAsDirty();\n this.validateForm.controls[key].updateValueAndValidity();\n }\n this.username = value.mobile || value.username;\n this.password = value.password;\n let checkCode = value.checkCode;\n let c = this.code.toLowerCase()\n let vc = checkCode.toLowerCase()\n console.log(c, vc);\n\n if (c != vc) {\n console.log(c, vc);\n\n this.message.create(\"error\", \"验证码错误\");\n } else {\n this.authServ\n .login(this.username, this.password)\n .then(async data => {\n }).catch(err => {\n console.log(err)\n this.message.create(\"error\", \"错误的用户名或密码\");\n });\n }\n }\n\n // 点击重置密码\n async forgetFormFun(value: { forgetusername: string; forgetPassword: string; forgetConfirmpassword: string; forgerphoneCode: string }): Promise {\n for (const key in this.forgetForm.controls) {\n this.forgetForm.controls[key].markAsDirty();\n this.forgetForm.controls[key].updateValueAndValidity();\n }\n console.log(value.forgetusername, value.forgetPassword, value.forgetConfirmpassword)\n if (value.forgetPassword != value.forgetConfirmpassword) {\n this.message.create(\"error\", \"两次密码不一致\");\n return\n }\n if (!value.forgerphoneCode) {\n this.message.create(\"error\", \"请输入验证码\");\n return\n }\n let host = (Parse as any).serverURL?.split(\"parse\")?.[0] || \"https://server.fmode.cn/\"\n\n let url = host + \"api/auth/reset_password\"\n this.http.post(url, { company: this.companyId, mobile: value.forgetusername, code: value.forgerphoneCode, password: value.forgetConfirmpassword }).subscribe((res: any) => {\n if (res.code == 200) {\n this.message.create(\"success\", res.msg);\n this.type = 'login'\n } else {\n this.message.create(\"error\", \"验证码错误\");\n }\n }, error => {\n console.log(error.error)\n this.message.create('error', error.error.mess);\n })\n }\n // 点击注册按钮\n regpassword: any;\n confirmPassword: any;\n async registSubmitForm(value: { registName: string; registIdcard: string, regpassword: string; confirmPassword: string; phoneCode: string; registPhone: string }) {\n\n for (const key in this.registForm.controls) {\n this.registForm.controls[key].markAsDirty();\n this.registForm.controls[key].updateValueAndValidity();\n }\n this.registName = value.registName;\n this.registIdcard = value.registIdcard;\n this.registPhone = value.registPhone;\n this.phoneCode = value.phoneCode;\n this.regpassword = value.regpassword;\n this.confirmPassword = value.confirmPassword;\n let checkInfo: any = await this.verifyCode(this.registPhone, this.phoneCode)\n if (checkInfo && checkInfo.code != 200) {\n this.message.create(\"error\", checkInfo.mess);\n return\n }\n this.queryUser();\n }\n \n getSelectEducation() {\n this.loginMobilePassword()\n this.iseducation = false;\n }\n loginSMS(){\n // 验证码登录\n let host = (Parse as any).serverURL?.split(\"parse\")?.[0] || \"https://server.fmode.cn/\"\n\n let url = host + `api/auth/mobile?company=${this.companyId}&mobile=${this.username}&code=${this.smsCode}`\n this.http.get(url).subscribe((res: any) => {\n console.log(res);\n if (res.code == 200) {\n this.message.create(\"success\", \"登录成功\");\n let token = res.data.token;\n Parse.User.become(token).then(user=>{\n this.router.navigate([decodeURIComponent(this.rootPage)])\n })\n } else {\n this.message.create(\"error\", \"验证码错误\");\n }\n }, error => {\n console.log(error.error)\n this.message.create('error', error.error.mess);\n })\n }\n async loginMobilePassword() {\n let profile: any;\n let education: any;\n let currentUser: any;\n let username = await this.getMobileUser(this.username)\n if(!username){\n this.message.create(\"error\", \"用户不存在,请尝试其他登录方式\");\n return\n }\n this.authServ\n .login(username, this.password)\n .then(async data => {\n }).catch(err => {\n console.log(err)\n this.message.create(\"error\", \"错误的用户名或密码\");\n });\n }\n\n loading: boolean = true\n loading2: boolean \n Profile: any\n Lesson: any = [];\n myDate = new Date();\n\n \n // 查询该学生信息是否存在\n isVisible: boolean = false\n profile: any\n async queryUser() {\n // 查找这个用户存不存在,存在直接绑定登录,不存在注册\n let queryUser = new Parse.Query('_User')\n queryUser.contains(\"username\", this.registPhone);\n queryUser.equalTo(\"company\", this.companyId)\n let user = await queryUser.first()\n if(user?.id){\n this.message.info(`该账户已激活,使用手机号密码直接登录`);\n return\n }\n // 核验手机号\n \n Parse.User.signUp(\n this.companyId+\"-\" + this.registPhone,\n this.regpassword,\n \"\"\n ).then(async res => {\n if (res.id) {\n console.log(res)\n res.set(\"company\", {\n __type: \"Pointer\",\n className: \"Company\",\n objectId: this.companyId\n });\n res.set(\"mobile\", this.registPhone);\n res.set(\"type\",\"user\");\n res.save();\n // 开通账号辅助填写账号密码\n this.username = this.registPhone;\n this.password = this.regpassword;\n }\n });\n }\n type: string = 'login'\n\n mobileUserMap = {}\n async getMobileUser(mobile){\n if(this.mobileUserMap[mobile]) return this.mobileUserMap[mobile]\n let result:any = await this.novaCloud.api(\"/auth/getusername\",{\n company:this.companyId,\n mobile:mobile\n })\n console.log(result)\n if(result?.username){\n this.mobileUserMap[mobile] = result?.username\n }\n return this.mobileUserMap[mobile]\n }\n\n forget() {\n this.type = 'forget'\n }\n\n backLogin() {\n this.type = 'login'\n }\n \n handleCancel() {\n this.isVisible = false\n }\n password: any;\n handleOk() {\n Parse.User.signUp(\n this.registPhone,\n this.regpassword,\n \"\"\n ).then(async res => {\n if (res.id) {\n console.log(res)\n res.set(\"company\", {\n __type: \"Pointer\",\n className: \"Company\",\n objectId: this.companyId\n });\n res.save();\n this.username = this.registPhone\n this.password = this.regpassword;\n }\n });\n }\n isOkLoading = false;\n\n async getCode() {\n if (this.registPhone == undefined || this.registPhone.trim() == \"\") {\n this.message.info(`请输入注册手机号`);\n return;\n }\n let a = /^1[3456789]\\d{9}$/;\n if (!this.registPhone.match(a)) {\n this.message.info(`请输入正确的手机号`);\n return;\n }\n let User = new Parse.Query('User')\n User.equalTo('username', this.registPhone)\n User.equalTo('company', this.companyId)\n let user = await User.first()\n if (user && user.id) {\n this.message.info(`该手机号已注册,请使用账号密码登录`);\n return;\n }\n // 本地测试\n let apigURL = localStorage.getItem(\"NOVA_APIG_SERVER\")\napigURL = decodeURIComponent(atob(apigURL));\nlet url = apigURL+\"message\"\n this.http.post(url, { company: this.companyId, mobile: this.registPhone, action: 'regist' }).subscribe((res: any) => {\n this.vCode = res.data.code\n this.countDownFun()\n }, error => {\n this.message.info(`系统繁忙中,请稍后重试`);\n console.log(error)\n })\n }\n\n async getCode2() {\n if (this.forgetusername == undefined || this.forgetusername.trim() == \"\") {\n this.message.info(`请输入账号`);\n return;\n }\n let a = /^1[3456789]\\d{9}$/;\n if (!this.forgetusername.match(a)) {\n this.message.info(`请输入正确的手机号`);\n return;\n }\n console.log(this.forgetusername)\n let User = new Parse.Query('User')\n User.equalTo('username',this.companyId + \"-\" + this.forgetusername)\n User.equalTo('company', this.companyId)\n let user = await User.first()\n if (!user) {\n this.message.info(`账号不存在`);\n return;\n }\n let apigURL = localStorage.getItem(\"NOVA_APIG_SERVER\")\napigURL = decodeURIComponent(atob(apigURL));\nlet url = apigURL+\"message\"\n this.http.post(url, { company: this.companyId, mobile: this.forgetusername, action: 'resetPassword' }).subscribe((res: any) => {\n console.log(res)\n this.vCode = res.data.code\n this.countDownFun()\n }, error => {\n this.message.info(`系统繁忙中,请稍后重试`);\n console.log(error)\n })\n }\n\n async verifyCode(mobile, code) {\n let apigURL = localStorage.getItem(\"NOVA_APIG_SERVER\")\napigURL = decodeURIComponent(atob(apigURL));\nlet url = apigURL+\"verifyCode\"\n return new Promise(async (resolve, reject) => {\n this.http.post(url, { mobile: mobile, code: code }).subscribe((res: any) => {\n resolve(res)\n }, error => {\n console.log(error)\n resolve(error.error)\n })\n })\n }\n\n\n countDown: number = 60\n isCountDown: boolean = false\n // 倒计时\n countDownFun() {\n this.isCountDown = true\n if (this.countDown == 0) {\n return\n }\n let timer = setInterval(() => {\n this.countDown = this.countDown - 1\n if (this.countDown == 0) {\n clearInterval(timer)\n this.countDown = 60\n this.isCountDown = false\n }\n }, 1000)\n }\n\n // 页面显示素材\n mobileLogin:boolean = false\n rootPage:string\n logo:string = 'https://www.fmode.cn/images/ewm1.png';\n qrcode:string = 'https://www.fmode.cn/images/logo_main.png';\n // 公司帐号套总后台登录\n company:Parse.Object\n companyId:string\n // 管理端定制APP后台登录\n app:Parse.Object\n appId:string\n constructor(\n public authServ: AuthService,\n private novaCloud: NovaCloudService,\n private fb: FormBuilder,\n private message: NzMessageService,\n public router: Router,\n private route:ActivatedRoute,\n private activatedRoute: ActivatedRoute,\n private http: HttpClient\n ) {\n this.initLoginForm()\n\n this.route.paramMap.subscribe(async params=>{\n console.log(params)\n \n this.appId = params.get(\"appId\");\n if(!await this.initAppConfig()){\n this.companyId = params.get(\"companyId\");\n if(!this.companyId){\n this.companyId = localStorage.getItem(\"company\") || \"Q0DryNYA8g\"\n }\n await this.initCompanyConfig()\n \n }\n })\n\n }\n async initCompanyConfig(){\n if(!this.companyId) return\n let query = new Parse.Query(\"Company\")\n this.company = await query.get(this.companyId);\n // 设置页面\n this.logo = this.company?.get(\"logo\") || this.logo;\n this.qrcode = this.company?.get(\"qrcode\") || this.qrcode;\n this.mobileLogin = this.company?.get('jpush')?.appkey || false\n this.rootPage = this.company?.get('rootPage')\n }\n\n async initAppConfig(){\n if(!this.appId) return false\n let query = new Parse.Query(\"App\");\n query.include(\"company\");\n this.app = await query.get(this.appId);\n // 设置页面\n console.log(this.app)\n this.logo = this.app?.get(\"logo\") || this.logo;\n this.qrcode = this.app?.get(\"qrcode\") || this.qrcode;\n this.mobileLogin = this.app?.get('jpush')?.appkey || false\n this.companyId = this.app?.get(\"company\").id;\n this.rootPage = this.app?.get('rootPage')\n return true\n }\n initLoginForm(){\n\n this.validateForm = this.fb.group({\n // 加入验证的表单项 : 初始值、 是否验证 调用的验证方法\n mobile: [\"\", [Validators.required], [this.userNameAsyncValidator]],\n password: [\"\", [Validators.required], [this.passwordAsyncValidator]],\n // initCode: [this.code ],\n checkCode: [\"\", [Validators.required], [this.codeAsyncValidator]]\n });\n\n\n this.validateUserForm = this.fb.group({\n // 加入验证的表单项 : 初始值、 是否验证 调用的验证方法\n username: [\"\", [Validators.required], []],\n password: [\"\", [Validators.required], [this.passwordAsyncValidator]],\n // initCode: [this.code ],\n checkCode: [\"\", [Validators.required], [this.codeAsyncValidator]]\n })\n\n this.validateSMSForm = this.fb.group({\n // 加入验证的表单项 : 初始值、 是否验证 调用的验证方法\n mobile: [\"\", [Validators.required], [this.userNameAsyncValidator]],\n password: [\"\"],\n smsCode: [\"\", [Validators.required], [this.smsAsyncValidator]],\n // initCode: [this.code ],\n checkCode: [\"\", [Validators.required], [this.codeAsyncValidator]]\n });\n\n\n this.registForm = this.fb.group({\n // 加入验证的表单项 : 初始值、 是否验证 调用的验证方法\n registName: [\"\", [Validators.required], [this.registNameAsyncValidator]],\n registIdcard: [\"\", [Validators.required], [this.registIdcardAsyncValidator]],\n registPhone: [\"\", [Validators.required], [this.registPhoneAsyncValidator]],\n phoneCode: [\"\", [Validators.required], [this.registCodeAsyncValidator]],\n regpassword: [\"\", [Validators.required], [this.regpasswordAsyncValidator]],\n confirmPassword: [\"\", [Validators.required], [this.confirmPasswordAsyncValidator]]\n });\n this.forgetForm = this.fb.group({\n\n forgetusername: [\"\", [Validators.required], [this.forgetNameAsyncValidator]],\n forgetPassword: [\"\", [Validators.required], [this.forgetPasswordAsyncValidator]],\n forgetConfirmpassword: [\"\", [Validators.required], [this.forgetConfirmPasswordAsyncValidator]],\n forgerphoneCode: [\"\", [Validators.required], [this.registCodeAsyncValidator]],\n })\n }\n\n // 登录 用户名(手机号码)验证\n userNameAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n let reg = /^1[3456789]\\d{9}$/;\n // let reg2 = /^\\d{17}(\\d|X|x)$/;\n let username = control.value;\n setTimeout(() => {\n if (username == undefined || username.trim() == \"\") {\n this.userErrorTip = \"请输入登录账号\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n if (!username.match(reg)) {\n this.userErrorTip = \"请输入正确的登录账号\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n // if(username.length > 11){\n // if (!username.match(reg2) ) {\n // this.userErrorTip = \"请输入正确的登录账号\";\n // observer.next({ error: true, duplicated: true });\n // observer.complete();\n // return;\n // }\n // }else {\n // }\n\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n // 登录 短信验证码验证\n smsAsyncValidator = (control:FormControl)=> new Observable((observer: Observer) => {\n setTimeout(() => {\n let smsCode = control.value;\n if (smsCode == undefined || smsCode.trim() == \"\") {\n this.smsCodeErrorTip = \"请输入短信验证码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n // 登录 密码验证\n passwordAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let password = control.value;\n if (password == undefined || password.trim() == \"\") {\n this.passwordErrorTip = \"请输入密码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n\n return;\n }\n if (password.length < 6) {\n this.passwordErrorTip = \"密码长度不得小于6位\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n\n codeAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let checkCode = control.value;\n if (checkCode == undefined || checkCode.trim() == \"\") {\n this.codeVerified = false\n this.codeErrorTip = \"请输入验证码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n if (checkCode.length < 4) {\n this.codeVerified = false\n this.codeErrorTip = \"验证码长度不得小于4位\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n let c = this.code.toLowerCase()\n let vc = checkCode.toLowerCase()\n if(c!=vc){\n this.codeVerified = false\n this.codeErrorTip = \"验证码输入错误\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return\n }\n this.codeVerified = true\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n confirmPasswordErrorTip: any;\n regpasswordErrorTip: any;\n phoneCodesErrorTip: any\n // 注册 身份证号码验证\n registIdcardAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n let registIdcard = control.value;\n\n setTimeout(() => {\n if (registIdcard == undefined || registIdcard.trim() == \"\") {\n this.registIdcardErrorTip = \"请输入正确的身份证号码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n if (/^\\d{17}(\\d|X|x)$/.test(registIdcard) === false) {\n this.registIdcardErrorTip = \"请输入正确的身份证号码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n // 忘记密码 验证\n forgetNameAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let forgetName = control.value;\n if (forgetName == undefined || forgetName.trim() == \"\") {\n this.registNameErrorTip = \"请输入账户账号或者手机号\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n this.forgetusername = forgetName;\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n\n forgetPasswordAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let forgetPassword = control.value;\n if (forgetPassword == undefined || forgetPassword.trim() == \"\") {\n this.passwordErrorTip = \"请输入新密码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n if (forgetPassword.length < 6) {\n this.passwordErrorTip = \"密码长度不得小于6位\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n this.forgetPassword = forgetPassword;\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n\n forgetConfirmPasswordAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let forgetConfirmpassword = control.value;\n if (forgetConfirmpassword == undefined || forgetConfirmpassword.trim() == \"\") {\n this.forgetphoneCodesErrorTip = \"请确认新密码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n if (forgetConfirmpassword.length < 6) {\n this.forgetphoneCodesErrorTip = \"密码长度不得小于6位\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n this.forgetConfirmpassword = forgetConfirmpassword;\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n\n forgetCodeAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let forgerphoneCode = control.value;\n if (forgerphoneCode == undefined || forgerphoneCode.trim() == \"\") {\n this.phoneCodesErrorTip = \"请输入新密码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n this.forgerphoneCode = forgerphoneCode;\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n\n\n\n\n // 注册 姓名验证\n registNameAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let registName = control.value;\n if (registName == undefined || registName.trim() == \"\") {\n this.registNameErrorTip = \"请输入姓名\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n this.registName = registName;\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n\n\n // 注册手机号验证\n registPhoneAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n let registPhone = control.value;\n setTimeout(() => {\n if (registPhone == undefined || registPhone.trim() == \"\") {\n this.registIdcardErrorTip = \"请输入正确的身份证号码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n\n if (/^1[3456789]\\d{9}$/.test(registPhone) === false) {\n this.phoneErrorTip = \"请输入正确的手机号\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n\n\n registCodeAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let registCode = control.value;\n if (registCode == undefined || registCode.trim() == \"\") {\n this.phoneCodesErrorTip = \"请输入验证码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n // 注册密码验证\n regpasswordAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let regpassword = control.value;\n if (regpassword == undefined || regpassword.trim() == \"\") {\n this.regpasswordErrorTip = \"请输入密码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n if (regpassword.length < 6) {\n this.regpasswordErrorTip = \"密码长度不得小于6位\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n if (regpassword.length > 12) {\n this.regpasswordErrorTip = \"密码长度不得大于12位\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n this.regpassword = regpassword\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n // 注册 确认密码验证\n confirmPasswordAsyncValidator = (control: FormControl) =>\n new Observable((observer: Observer) => {\n setTimeout(() => {\n let confirmPassword = control.value;\n if (confirmPassword == undefined || confirmPassword.trim() == \"\") {\n this.confirmPasswordErrorTip = \"请确认密码\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n if (confirmPassword != this.regpassword) {\n this.confirmPasswordErrorTip = \"两次输入密码不一致,请重新输入\";\n observer.next({ error: true, duplicated: true });\n observer.complete();\n return;\n }\n this.confirmPassword = confirmPassword;\n\n observer.next(null);\n observer.complete();\n }, 1000);\n });\n\n code: any = ''\n ngOnInit(): void {\n \n // localStorage.removeItem('company')\n // localStorage.removeItem('pid')\n // localStorage.clear();\n this.activatedRoute.paramMap.subscribe(params => {\n if (params.get('p')) {\n localStorage.setItem('pid', params.get('p'))\n } else {\n localStorage.setItem('company', this.companyId)\n }\n })\n this.creatCode();\n }\n creatCode() {\n this.code = ''\n let codeLength = 4; //验证码的长度\n let codeChars = [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\"\n ];\n for (let i = 0; i < codeLength; i++) {\n let charNum = Math.floor(Math.random() * 52)\n this.code += codeChars[charNum];\n }\n }\n}\n\n","\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n ViewChild,\n ElementRef,\n} from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { AuthService } from \"../login/auth.service\";\nimport { NzMessageService } from \"ng-zorro-antd/message\";\nimport { HttpClient } from '@angular/common/http';\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport Parse from \"parse\";\nimport { IonCheckbox, ToastController } from \"@ionic/angular/standalone\";\n\n@Component({\n standalone:true,\n imports:[CommonModule,FormsModule,ReactiveFormsModule,\n IonCheckbox\n ],\n selector: \"fm-modal-user-login\",\n templateUrl: \"./modal-user-login.component.html\",\n styleUrls: [\"./modal-user-login.component.scss\"],\n})\nexport class ModalUserLoginComponent implements OnInit {\n mobile: string;\n password: string;\n password2: string;\n // 用户协议\n isUserRuleChecked:boolean = false;\n /* 短信验证码登录相关参数 */\n // @ViewChild(\"canvas\") canvas: ElementRef; //本地校验码绘画\n @ViewChild(\"canvasDom\") canvasDom: ElementRef; //本地校验码绘画\n loginInfo: any = {\n mobile: \"\",\n code: \"\",\n };\n\n @ViewChild(\"smsCodeInput\") smsCodeInput:ElementRef;\n // enabledLocalCode:boolean = false; // 开启验证码\n localCodeNum: string = ''; //输入校验码\n\n \n constructor(\n private msg: NzMessageService,\n public authServ: AuthService,\n private router: Router,\n private http : HttpClient,\n private toastCtrl:ToastController\n ) {\n // document.body.classList.add(\"dark\");\n }\n\n ngOnInit(): void {\n \n this.close();\n }\n ngAfterViewInit(): void {\n // this.updateDrawCode()\n this.setActiveButton(this.authServ.activeButton)\n }\n // 手机+密码注册\n signMobilePassword() {\n if (!this.mobile || !this.password) {\n this.msg.error(\"请输入完整手机号和密码\");\n return;\n }\n if (this.password != this.password2) {\n this.msg.error(\"两次输入密码不同,请检查\");\n return;\n }\n\n this.authServ\n .signMobilePassword(this.mobile, this.password)\n .then((res: any) => {\n if (res?.id) {\n this.setActiveButton(\"账号密码\");\n }\n })\n .catch((error) => {\n this.msg.error(\"注册失败,请更换手机号注册\");\n });\n }\n // 手机+密码登录\n loginMobilePassword() {\n if (!this.mobile || !this.password) {\n this.msg.error(\"请输入完整手机号和密码\");\n return;\n }\n this.authServ.loginMobilePassword(this.mobile, this.password, this.msg);\n }\n\n close() {\n let lock = this.authServ.isGuardLock(this.router.url);\n this.authServ.isModalShow = lock;\n }\n goHome() {\n let url = this.router.url;\n if(url?.indexOf(\"yuban\")){\n this.router.navigateByUrl(\"/app/home\");\n }\n if (url.indexOf(\"chat\") > -1) {\n this.router.navigateByUrl(\"/chat/home\");\n this.authServ.isModalShow = false;\n return;\n }\n if (url.indexOf(\"imagine\") > -1) {\n this.router.navigateByUrl(\"/imagine/home\");\n this.authServ.isModalShow = false;\n return;\n }\n this.router.navigateByUrl(\"/\");\n this.authServ.isModalShow = false;\n return;\n }\n //添加监听Esc按键关闭弹窗\n @HostListener(\"document:keydown.escape\", [\"$event\"])\n handleEscapeKey(event: KeyboardEvent) {\n // this.closePopup();\n this.close();\n }\n\n \n setActiveButton(buttonName: string) {\n this.authServ.activeButton = buttonName;\n console.log(this.authServ.activeButton);\n this.updateDrawCode();\n }\n\n //发送验证码倒计时\n countdown = 60;\n buttonText = \"获取验证码\";\n //添加倒计时开始和结束的判断\n isCountingdown = false;\n smsAutoLogin(){\n if(this.loginInfo.code?.length==6){\n this.login();\n }\n }\n /* 获取验证码 */\n startCountdown() {\n let a = /^1[3456789]\\d{9}$/;\n if (!String(this.loginInfo.mobile).match(a)) {\n this.msg.error(\"请填写正确手机号\");\n return;\n }\n let str = this.drawCode.join('');\n if(this.authServ.enabledLocalCode){\n if (this.localCodeNum.toLowerCase() != str.toLowerCase()) {\n this.msg.error(\"校验码不正确\");\n return;\n }\n }\n let host = (Parse as any).serverURL?.split(\"parse\")?.[0] || \"https://server.fmode.cn/\"\n\n this.http\n .post(host+\"api/apig/message\", {\n company: this.authServ.company,\n mobile: this.loginInfo.mobile,\n })\n .subscribe((res: any) => {\n console.log(res);\n this.msg.success('发送成功')\n this.isCountingdown = true;\n this.time();\n this.updateDrawCode();\n this.focusSmsCodeInput();\n })\n }\n focusSmsCodeInput(){\n this.smsCodeInput.nativeElement.focus();\n }\n /* 倒计时 */\n time() {\n this.isCountingdown = true;\n this.buttonText = `${this.countdown}秒`;\n let timer = setInterval(() => {\n this.countdown--;\n this.buttonText = `${this.countdown}秒`;\n if (this.countdown === 0 || this.countdown < 0) {\n clearInterval(timer);\n this.buttonText = \"重新发送\";\n this.isCountingdown = false;\n this.countdown = 0;\n }\n }, 1000);\n }\n\n /* 验证码登录 */\n async login() {\n let a = /^1[3456789]\\d{9}$/;\n if (!String(this.loginInfo.mobile).match(a)) {\n this.msg.error(\"请填写正确手机号\");\n return;\n }\n // let str = this.drawCode.join();\n // if (this.localCodeNum != str) {\n // this.msg.error(\"校验码不正确\");\n // return;\n // }\n if (!this.loginInfo.code) {\n this.msg.error(\"请输入短信验证码\");\n return;\n }else{\n this.loginInfo.code = this.loginInfo.code?.slice(0,6)\n }\n let res\n try{\n res = await this.authServ.loginCode(\n this.loginInfo.mobile,\n this.loginInfo.code,\n this.msg\n )\n\n }catch(err){}\n \n \n let user = Parse.User.current();\n if(res || user?.id){\n console.log(res,user?.id,\"close\")\n this.close()\n this.loginInfo = {\n mobile: \"\",\n code: \"\",\n };\n this.localCodeNum = ''\n this.toast({color:\"success\",message:\"登录成功\"})\n }\n\n }\n async toast(options:any){\n options.position = options?.position || \"top\"\n options.duration = options?.duration || 1500\n options.color = options?.color || \"primary\"\n let toast = await this.toastCtrl.create(options)\n toast.present()\n }\n\n drawCode: Array = [];\n updateDrawCode() {\n if(!this.authServ.enabledLocalCode) return;\n let canvas_width = 100;\n let canvas_height = 44;\n let canv = document.getElementById(\"canvas\");\n if (canv) this.canvasDom.nativeElement.removeChild(canv);\n this.canvasDom.nativeElement;\n let canvas = document.createElement(\"canvas\");\n canvas.width = 100;\n canvas.height = 44;\n canvas.className = \"canvas\";\n canvas.setAttribute(\"id\", \"canvas\");\n canvas.addEventListener(\"click\", () => {\n this.updateDrawCode();\n });\n let context = canvas.getContext(\"2d\"); //获取到canvas画图的环境,演员表演的舞台\n canvas.width = canvas_width;\n canvas.height = canvas_height;\n let sCode =\n \"A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m\";\n let aCode = sCode.split(\",\");\n let aLength = aCode.length; //获取到数组的长度\n for (let i = 0; i <= 3; i++) {\n let j = Math.floor(Math.random() * aLength); //获取到随机的索引值\n let deg = (Math.random() * 30 * Math.PI) / 180; //产生0~30之间的随机弧度\n let txt = aCode[j]; //得到随机的一个内容\n this.drawCode[i] = txt;\n let x = 10 + i * 20; //文字在canvas上的x坐标\n let y = 20 + Math.random() * 8; //文字在canvas上的y坐标\n context.font = \"bold 23px 微软雅黑\";\n\n context.translate(x, y);\n context.rotate(deg);\n\n context.fillStyle = this.randomColor();\n context.fillText(txt, 0, 0);\n\n context.rotate(-deg);\n context.translate(-x, -y);\n }\n for (let i = 0; i <= 5; i++) {\n //验证码上显示线条\n context.strokeStyle = this.randomColor();\n context.beginPath();\n context.moveTo(\n Math.random() * canvas_width,\n Math.random() * canvas_height\n );\n context.lineTo(\n Math.random() * canvas_width,\n Math.random() * canvas_height\n );\n context.stroke();\n }\n for (let i = 0; i <= 30; i++) {\n //验证码上显示小点\n context.strokeStyle = this.randomColor();\n context.beginPath();\n let x = Math.random() * canvas_width;\n let y = Math.random() * canvas_height;\n context.moveTo(x, y);\n context.lineTo(x + 1, y + 1);\n context.stroke();\n }\n this.canvasDom.nativeElement.appendChild(canvas);\n }\n /* 得到随机的颜色值 */\n randomColor() {\n let r = Math.floor(Math.random() * 256);\n let g = Math.floor(Math.random() * 256);\n let b = Math.floor(Math.random() * 256);\n return \"rgb(\" + r + \",\" + g + \",\" + b + \")\";\n }\n}\n","\n\n\n
\n
\n \n
\n
\n \n
\n\n \n
\n
\n
\n\n \n
1\">\n
\n \n \n \n
\n
\n\n \n
\n
\n
+86
\n \n
\n
\n \n \n
\n
\n \n \n {{buttonText}}\n \n
\n\n \n
\n 未注册的手机号,将自动创建帐号并登录。\n
\n\n
\n \n
\n
\n\n \n
\n
\n \n
\n\n
\n \n
\n\n \n
\n
\n \n 记住密码\n
\n\n \n
\n 注册帐号\n
\n
\n\n \n
\n \n \n 同意\n 《用户协议及隐私条款》\n
\n\n\n \n \n\n
\n \n 登录\n \n
\n
\n\n \n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n 注册\n \n
\n
\n\n \n
\n \n
使用微信扫一扫,扫码登录 \"飞码AI\"
\n
\n\n \n
\n \n
\n
\n
\n
\n\n","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n} from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\n@Component({\n imports:[CommonModule,FormsModule],\n standalone:true,\n selector: 'fm-captcha',\n templateUrl: './captcha.component.html',\n styleUrls: ['./captcha.component.scss']\n})\nexport class CaptchaComponent implements OnInit {\n @ViewChild(\"canvasDom\") canvasDom: ElementRef; //本地校验码绘画\n\n @Input() type: string = 'input'; //default & input 默认input方式\n @Input() canvas_id: string = 'canvasCode'; //元素id\n @Input() drawCode: Array = []; //验证码数组\n @Input() vCode: string = ''; //用户输入code\n @Output() changeVal: EventEmitter = new EventEmitter(); //改变时触发\n @Output() onEnter: EventEmitter = new EventEmitter(); //enter按下触发\n code:string = ''\n constructor() {}\n \n ngOnInit() {}\n ngAfterViewInit(): void {\n //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.\n //Add 'implements AfterViewInit' to the class.\n this.updateDrawCode();\n }\n updateDrawCode() {\n let canvas_width = 100;\n let canvas_height = 38;\n let canv = document.getElementById(this.canvas_id);\n canv && this.canvasDom.nativeElement.removeChild(canv);\n let _a = document.getElementById(this.canvas_id + '_a');\n _a && this.canvasDom.nativeElement.removeChild(_a);\n this.canvasDom.nativeElement;\n let canvas = document.createElement(\"canvas\");\n canvas.className = \"canvas\";\n canvas.setAttribute(\"id\", this.canvas_id);\n canvas.addEventListener(\"click\", () => {\n this.updateDrawCode();\n });\n let context = canvas.getContext(\"2d\"); //获取到canvas画图的环境,演员表演的舞台\n canvas.width = canvas_width;\n canvas.height = canvas_height;\n let sCode =\n \"A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m\";\n let aCode = sCode.split(\",\");\n let aLength = aCode.length; //获取到数组的长度\n for (let i = 0; i <= 3; i++) {\n let j = Math.floor(Math.random() * aLength); //获取到随机的索引值\n let deg = (Math.random() * 30 * Math.PI) / 180; //产生0~30之间的随机弧度\n let txt = aCode[j]; //得到随机的一个内容\n this.drawCode[i] = txt;\n let x = 10 + i * 20; //文字在canvas上的x坐标\n let y = 20 + Math.random() * 8; //文字在canvas上的y坐标\n context.font = \"bold 23px 微软雅黑\";\n \n context.translate(x, y);\n context.rotate(deg);\n \n context.fillStyle = this.randomColor();\n context.fillText(txt, 0, 0);\n \n context.rotate(-deg);\n context.translate(-x, -y);\n }\n for (let i = 0; i <= 5; i++) {\n //验证码上显示线条\n context.strokeStyle = this.randomColor();\n context.beginPath();\n context.moveTo(\n Math.random() * canvas_width,\n Math.random() * canvas_height\n );\n context.lineTo(\n Math.random() * canvas_width,\n Math.random() * canvas_height\n );\n context.stroke();\n }\n for (let i = 0; i <= 30; i++) {\n //验证码上显示小点\n context.strokeStyle = this.randomColor();\n context.beginPath();\n let x = Math.random() * canvas_width;\n let y = Math.random() * canvas_height;\n context.moveTo(x, y);\n context.lineTo(x + 1, y + 1);\n context.stroke();\n }\n this.code = this.drawCode.join(\"\")\n this.changeVal.emit({\n code:this.code,\n vCode:this.vCode\n });\n this.canvasDom.nativeElement.appendChild(canvas);\n let a = document.createElement(\"a\");\n a.setAttribute(\"id\", this.canvas_id + '_a');\n a.innerText = \"看不清,换一张\";\n a.addEventListener(\"click\", () => {\n this.updateDrawCode();\n });\n this.canvasDom.nativeElement.appendChild(a);\n }\n /* 得到随机的颜色值 */\n randomColor() {\n let r = Math.floor(Math.random() * 256);\n let g = Math.floor(Math.random() * 256);\n let b = Math.floor(Math.random() * 256);\n return \"rgb(\" + r + \",\" + g + \",\" + b + \")\";\n }\n //按下确认键触发\n enter(e) {\n if (e.keyCode == 13) {\n this.changeVal.emit({\n code:this.code,\n vCode:this.vCode\n });\n this.onEnter.emit()\n }\n }\n onChange(){\n this.changeVal.emit({\n code:this.code,\n vCode:this.vCode\n });\n }\n }\n ","\n
\n \n
\n
\n
\n\n
\n
\n
\n
\n","import { Pipe, PipeTransform } from '@angular/core';\nimport Parse from \"parse\";\n@Pipe({\n name: 'userName'\n})\nexport class UserNamePipe implements PipeTransform {\n\n transform(user: Parse.User, ...args: unknown[]): unknown {\n let data:any = user;\n if(!data?.mobile){\n data = user?.toJSON();\n }\n console.log(data)\n if(data?.nickname) return data?.nickname\n let name = data?.name\n if(name) return name.substr(0, 1) + '*'.repeat(name?.length - 1);\n let mobile = data?.mobile\n if(mobile) return mobile.substr(0,3) + '*'.repeat(mobile?.length - 6) + mobile.substr(mobile?.length-3)\n return \"\";\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzButtonModule } from 'ng-zorro-antd/button';\nimport { NzModalModule } from 'ng-zorro-antd/modal';\nimport { NzRadioModule } from 'ng-zorro-antd/radio';\nimport { NzSpinModule } from 'ng-zorro-antd/spin';\nimport { NzTabsModule } from 'ng-zorro-antd/tabs';\nimport { NzFormModule } from 'ng-zorro-antd/form';\n\nimport { LoginComponent } from './login/login.component';\nimport { NzMessageModule } from 'ng-zorro-antd/message';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ModalUserLoginComponent } from './modal-user-login/modal-user-login.component';\nimport { CaptchaComponent } from './captcha/captcha.component' //验证码组件\nimport { UserNamePipe } from './user-name.pipe';\n\nexport const UserRoutes: Routes = [\n {\n path: \"login\",\n component: LoginComponent,\n runGuardsAndResolvers: \"always\",\n },\n {\n path: \":companyId/login\",\n component: LoginComponent,\n runGuardsAndResolvers: \"always\",\n },\n {\n path: \"app/:appId/login\",\n component: LoginComponent,\n runGuardsAndResolvers: \"always\",\n }\n]\n\n@NgModule({\n declarations: [\n LoginComponent,\n UserNamePipe,\n ],\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n ReactiveFormsModule,\n RouterModule.forChild(UserRoutes),\n NzInputModule,\n NzButtonModule,\n NzModalModule,\n NzRadioModule,\n NzSpinModule,\n NzTabsModule,\n NzFormModule,\n NzMessageModule,\n // \n ModalUserLoginComponent,\n CaptchaComponent\n ],exports:[\n LoginComponent,\n ModalUserLoginComponent,\n UserNamePipe,\n CaptchaComponent\n ]\n})\nexport class UserModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ]\n})\nexport class StaffModule { }\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport Parse from \"parse\";\n@Injectable({\n providedIn: 'root'\n})\nexport class StaffService {\n redirectURL:string\n staff:Parse.Object // 当前切换的员工角色\n realStaff:Parse.Object // 当前登录用户对应角色\n isSuperAdmin:boolean // 是否店长\n constructor(\n private router:Router\n ) {\n this.checkIsPeiZhu();\n }\n\n async checkStaff(){\n if(!this.staff?.id){\n this.staff = await this.loadStaffByUser();\n }\n\n if(this.staff?.id){\n return true\n }\n console.log(this.staff)\n let rurl = this.redirectURL\n if(rurl) rurl = encodeURIComponent(rurl)\n rurl = rurl || \"/store/home\" // \"/user/staff/change\"\n this.router.navigate([rurl])\n return false\n }\n\n async loadStaffByUser(isRefresh:boolean=false){\n let user = Parse.User.current();\n if(!user?.id) return;\n let sid = localStorage.getItem(\"staffid\");\n if(isRefresh){\n sid = null\n }\n let query = new Parse.Query(\"UserStaff\");\n query.include(\"job\",\"shopStore\");\n let staff\n if(sid){ // 根据切换ID获取员工\n query.equalTo(\"objectId\",sid) //如果是uid get方法获取不到会报错\n staff = await query.first();\n }\n \n if(!staff?.id){ // 根据登录用户获取员工\n query.equalTo(\"user\",user?.id);\n staff = await query.first();\n }\n if(staff?.id){\n localStorage.setItem(\"staffid\",staff?.id)\n }\n if(isRefresh){\n this.realStaff = staff;\n }\n return staff\n }\n\n\n // 配件助理独立判断路由权限\n\n isPeiZhu:boolean = false\n async checkIsPeiZhu(){\n if(!this.realStaff){\n this.realStaff = await this.loadStaffByUser(true)\n }\n if(this.realStaff?.get(\"job\")?.get(\"title\") == \"配件助理\"){\n this.isPeiZhu = true;\n return\n }\n this.isPeiZhu = false;\n }\n peizhuJob(route){\n if(!this.isPeiZhu){\n return true\n }\n if(this.isPeiZhu && route.jobs?.indexOf(\"配件助理\")>-1){\n return true\n }else{\n return false\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { StaffService } from './staff.service';\n\n/**\n * Staff员工身份检测\n * @example\n canActivate:[],\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthStaffGuard {\n constructor(private staffServ:StaffService){\n }\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree {\n return this.staffServ.checkStaff()\n }\n}\n","import { Injectable } from '@angular/core';\nimport Parse from \"parse\";\nimport { Router } from '@angular/router';\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthProfileService {\n profile:Parse.Object\n _profileId:string\n _companyId:string\n isLeader:boolean;\n isManager:boolean;\n get profileId(){\n if(this._profileId) return this._profileId\n return localStorage.getItem(\"Parse/ProfileId\")\n }\n set profileId(v:string){\n this._profileId = v;\n localStorage.setItem(\"Parse/ProfileId\",v);\n }\n get profilePointer(){\n return {__type:\"Pointer\",className:\"Profile\",objectId:this.companyId}\n }\n get companyId(){\n if(this._companyId) return this._companyId\n return localStorage.getItem(\"Parse/CompanyId\")\n }\n set companyId(v:string){\n this._companyId = v;\n localStorage.setItem(\"Parse/CompanyId\",v);\n }\n get companyPointer(){\n return {__type:\"Pointer\",className:\"company\",objectId:this.companyId}\n }\n // store the URL so we can redirect after logging in\n redirectUrl: string;\n _user:Parse.User;\n get user(){\n return this._user || Parse.User.current();\n }\n set user(v){\n this._user = v\n }\n constructor(public router: Router) {\n this.user = Parse.User.current();\n }\n async getProfile(){\n if(this.profile?.id){\n return this.profile\n }\n if(this.profileId){\n let query = new Parse.Query(\"Profile\");\n query.include(\"company\")\n this.profile = await query.get(this.profileId);\n return this.profile \n }else{\n return this.profile \n }\n }\n async bindProfile(profile:Parse.Object){\n this.profile = profile;\n this.profileId = profile.id\n if(profile?.get(\"company\")?.id){\n this.companyId = profile?.get(\"company\")?.id\n }\n console.log(profile,this.user);\n this.profile.set(\"user\",this.user?.toPointer())\n await this.profile.save();\n console.log(localStorage.getItem(\"homePath\"))\n console.log(profile?.get(\"company\")?.get(\"rootPage\"))\n let url = localStorage.getItem(\"homePath\")|| profile?.get(\"company\")?.get(\"rootPage\") ||this.redirectUrl ||\"/\"\n url = decodeURIComponent(url)\n this.router.navigate([url]);\n }\n async checkProfile(url: string): Promise {\n // 如果已登录,直接跳转当前路由 跳出该函数\n let profile = this.profile\n if (profile?.id) { \n this.setCurrentProfileLocalStorage(profile)\n return true; \n }\n\n // 若已登录,但未加载profile则进行加载\n if(this.profileId){\n let query = new Parse.Query(\"Profile\");\n query.include(\"company\")\n profile = await query.get(this.profileId);\n if(profile?.id){\n this.profile = profile\n this.setCurrentProfileLocalStorage(profile)\n }\n return true\n }\n\n // 否则重定向到login页面\n // console.log(this.authService.isLoggedIn)\n this.redirectUrl = url;\n this.router.navigate(['/profile/bind']);\n return false\n }\n // 选择员工身份后,更新帐套信息至本地存储\n async setCurrentProfileLocalStorage(profile:Parse.Object){\n\n // 查询部门权限\n let query = Parse.Query.fromJSON(\"Department\",{\n where:{\n $or:[\n {\"leader\":profile.toPointer()},\n // {\"managers\":{$eq:profile?.id}},\n ]\n }\n });\n let departList = await query.find();\n departList.forEach(depart=>{\n if(depart?.id){\n this.isManager = true\n this.isLeader = true\n }\n })\n\n }\n}","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { Router } from '@angular/router';\nimport { AuthProfileService } from './auth-profile.service'\nimport Parse from \"parse\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthProfileGuard {\n constructor(public authProfileServ: AuthProfileService, public router: Router) {}\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree {\n // 当前路由url\n let url: string = state.url;\n // 调用checkLogin检查是否登录\n return this.authProfileServ.checkProfile(url);\n }\n\n}\n","import { Component, HostListener } from \"@angular/core\";\nimport { AuthProfileService } from \"../auth-profile.service\";\nimport Parse from \"parse\";\nimport { Router } from \"@angular/router\";\nimport { NzModalService } from \"ng-zorro-antd/modal\";\nimport { NzMessageService } from \"ng-zorro-antd/message\";\nimport { CrossService } from \"../../../platform/cross.service\";\n\n@Component({\n selector: \"fm-profile-bind\",\n templateUrl: \"./profile-bind.component.html\",\n styleUrls: [\"./profile-bind.component.scss\"],\n})\nexport class ProfileBindComponent {\n profile: Parse.Object;\n user: Parse.User;\n profileList: Array;\n pdata: any = {\n name: null,\n mobile: null,\n // idcard:null\n };\n now: Date = new Date();\n currentProfile:string\n\n @HostListener(\"window:resize\", [\"$event\"])\n onResize() {\n this.cross.onResizeScreen();\n }\n constructor(\n private authProfile: AuthProfileService,\n private router: Router,\n private modal: NzModalService,\n private message: NzMessageService,\n public cross: CrossService,\n ) {\n this.profile = this.authProfile.profile \n this.currentProfile = localStorage.getItem('Parse/ProfileId');\n this.user = Parse.User.current();\n this.loadProfiles();\n\n }\n async loadProfiles() {\n let query = new Parse.Query(\"Profile\");\n query.include(\"company\");\n query.notEqualTo(\"isDeleted\",true)\n if(this.profile?.id){\n query.equalTo(\"mobile\", this.profile.get('mobile'));\n query.equalTo(\"name\", this.profile.get('name'));\n }else{\n query.equalTo(\"user\", this.user.id);\n }\n this.profileList = await query.find();\n }\n isVisible = false;\n bindProfile(p?) {\n if (!p?.id) {\n p = this.profileSearched;\n }\n if (!p?.id) return;\n this.isVisible = false;\n this.authProfile.bindProfile(p);\n }\n profileSearched: Parse.Object;\n async searchProfile() {\n this.profileList = [];\n if (\n !this.pdata.name ||\n !this.pdata.mobile\n // || !this.pdata.idcard\n ) {\n this.message.warning(`请填写完成信息,以查询您的身份。`);\n return;\n }\n let query = new Parse.Query(\"Profile\");\n query.include(\"company\");\n query.equalTo(\"name\", this.pdata.name);\n query.equalTo(\"mobile\", this.pdata.mobile);\n // query.equalTo(\"idcard\",this.pdata.idcard);\n this.profileList = await query.find();\n if (this.profileList?.length < 1) {\n this.message.warning(`该身份不存在,无法绑定!`);\n }\n }\n selectProfile(p) {\n if (p?.id) {\n this.profileSearched = p;\n this.isVisible = true;\n }\n }\n goProfileManage() {\n this.router.navigate([\n \"/common/manage/Profile\",\n {\n rid: \"x6xybaLWIC\",\n },\n ]);\n }\n onShowModal() {\n this.modal.create({\n nzTitle: \"
团队成员管理
\",\n nzContent: \"您是企业管理员,可进入添加团队成员身份\",\n nzOnOk: () => this.goProfileManage(),\n });\n }\n}\n","\n \n
\n \"\"\n
请使用电脑浏览器打开
\n
\n
\n\n\n
\n
企业项目管理系统
\n
\n {{ now | date : \"yyyy年MM月dd日\" }}\n \n \n
企业管理员
\n
\n
\n 0; else elseTemplate\">\n

\n 欢迎您:{{\n profile?.get(\"name\") ||\n this.profileList[0]?.get(\"name\") ||\n user?.get(\"nickname\") ||\n user?.get(\"name\") ||\n user?.get(\"username\")\n }},请选择您的企业身份:\n

\n
\n \n

您还未绑定企业,请先联系管理员绑定!

\n
\n\n 0\">\n
\n \n
\n \n {{ p.get(\"name\") }} @ 企业\n {{\n p.get(\"company\")?.get(\"name\") || p.get(\"company\")?.get(\"title\")\n }}\n
\n \n \n
\n \n \n
\n
\n \n 若无帐套信息,请输入企业身份验证绑定\n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n
\n \n 查询身份\n \n \n \n

您确认绑定并切换至该身份吗?

\n

姓名:{{ profileSearched.get(\"name\") }}

\n

\n 帐套:{{\n profileSearched?.get(\"company\")?.get(\"name\") ||\n profileSearched?.get(\"company\")?.get(\"title\")\n }}\n

\n
\n \n
\n\n \n \n
\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { AuthService } from './auth.service'\nimport Parse from \"parse\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthPcuserGuard {\n \n constructor(public authService: AuthService, public router: Router) {}\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable | Promise | boolean {\n // 当前路由url\n let url: string = state.url;\n // 调用checkLogin检查是否登录\n this.authService.redirectUrl = url\n return this.authService.checkLogin(url);\n }\n \n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ProfileBindComponent } from './profile-bind/profile-bind.component';\nimport { RouterModule, Routes } from '@angular/router';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzButtonModule } from 'ng-zorro-antd/button';\nimport { NzModalModule } from 'ng-zorro-antd/modal';\nimport { AuthPcuserGuard } from '../login/auth.guard';\nimport { NzMessageModule } from 'ng-zorro-antd/message';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\n\nexport const ProfileRoutes: Routes = [\n {\n path: \"bind\",\n canActivate:[AuthPcuserGuard],\n component: ProfileBindComponent,\n runGuardsAndResolvers: \"always\",\n }\n]\n\n@NgModule({\n declarations: [\n ProfileBindComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n RouterModule.forChild(ProfileRoutes),\n NzInputModule,\n NzButtonModule,\n NzModalModule,\n NzMessageModule,\n NzIconModule\n ]\n})\nexport class ProfileModule { }\n","/*\n * Public API Surface of fmode-ng\n */\nexport * from './lib/aigc';\nexport * from './lib/map';\nexport * from './lib/storage';\nexport * from './lib/platform';\nexport * from './lib/social';\nexport * from './lib/video';\n\nexport * from \"./lib/nova-cloud\"\n\n// User 用户相关页面、守卫、服务、模块\nexport * from './lib/user';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Parse","i1","i2","i2.NovaCloudService","i3","i4.CrossService","i5.NovaUploadService","i3.NovaUploadService","i1.ImagineService","i2.ChatService","i3.FmodeVoiceService","i4.NovaCloudService","i5.ChatService","i6","i1.FmodeVoiceService","i4.ChatService","i5.NovaCloudService","i1.ChatService","i3.NovaCloudService","i4","i1.NovaCloudService","i2.AuthService","i1.AccountService","i1.ClipboardService","i3.MarkdownPreviewComponent","i1.CrossService","ModalController","i4.ImagineService","i7","i8","IonModal","i3.CompPoiPickerComponent","i1.HwobsService","i1.AuthService","i5","i12","i1.StaffService","i1.AuthProfileService","i5.CrossService"],"mappings":"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"}