{"version":3,"file":"static/js/572.832836f4.chunk.js","mappings":"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","sources":["ChatOpen.tsx","icon-2.0.2.js"],"sourcesContent":["/* eslint-disable no-loop-func */\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport logo from \"./agent.png\"\r\nimport title_logo from \"./app-logo.png\"\r\nimport './chatui-theme.css';\r\nimport './chat-list.css';\r\nimport $ from \"jquery\";\r\nimport \"./icon-2.0.2.js\"\r\nimport queryString from \"query-string\";\r\nimport Chat, { Avatar, MessageProps, useMessages, IconButtonProps, QuickReplyItemProps, toast, Bubble, Card, CardTitle, Button, CardText } from '@chatui/core';\r\nconst CryptoJS = require(\"crypto-js\");\r\nconst showdown = require('showdown');\r\n\r\nfunction ChatOpen() {\r\n const converter = new showdown.Converter({ tables: true });\r\n document.title = global.aiName;\r\n const { messages, appendMsg, setTyping, updateMsg } = useMessages([]);\r\n const userIdRef = useRef(uuidv5(8));\r\n const sessionIdRef = useRef();\r\n const isEndRef = useRef();\r\n const waitSecondsIntervalRef = useRef();\r\n const sourceRef = useRef();\r\n\r\n const [waitSeconds, setWaitSeconds] = useState('');\r\n\r\n useEffect(() => {\r\n let params = queryString.parse(window.location.search);\r\n Object.keys(params).forEach((item) => {\r\n const key = item.toLocaleLowerCase();\r\n switch (key) {\r\n case \"source\":\r\n sourceRef.current = params[item];\r\n break;\r\n }\r\n });\r\n sessionIdRef.current = uuidv5(8);\r\n if (global.welcomeMessage) {\r\n appendMsg({\r\n type: \"text\",\r\n content: { text: global.welcomeMessage }\r\n });\r\n }\r\n if (global.aiAskMessage) {\r\n setTyping(true);\r\n setTimeout(() => {\r\n appendMsg({\r\n type: 'text',\r\n content: { text: global.aiAskMessage },\r\n });\r\n }, 1000);\r\n }\r\n //getIpAddress()\r\n }, []);\r\n\r\n useEffect(() => {\r\n const listener = async (e: any) => {\r\n if (!isEndRef.current) {\r\n await fetch(`${decryptHex(global.apiBaseUrl, \"AES\", STORE_KEY)}/Agent/end`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n method: \"post\",\r\n body: JSON.stringify({\r\n sessionId: sessionIdRef.current,\r\n userId: userIdRef.current\r\n })\r\n }\r\n );\r\n }\r\n };\r\n\r\n window.addEventListener('beforeunload', listener);\r\n\r\n return (): void => {\r\n window.removeEventListener('beforeunload', listener);\r\n };\r\n });\r\n\r\n //async function getIpAddress() {\r\n // const source = await fetch(`http://pv.sohu.com/cityjson?ie=utf-8`,\r\n // {\r\n // headers: {\r\n // \"Content-Type\": \"application/json\",\r\n // },\r\n // method: \"get\",\r\n // }\r\n // );\r\n // source.text().then(function (text: string) {\r\n // if (text) {\r\n // try {\r\n // var item = JSON.parse(text);\r\n // console.log(item)\r\n // } catch (e) {\r\n // console.log(e);\r\n // }\r\n // }\r\n // });\r\n\r\n //}\r\n\r\n const makedownToHtml = (text: string) => {\r\n return converter.makeHtml(text);\r\n }\r\n\r\n \r\n function uuidv5(len: number, radix: number | undefined = undefined) {\r\n var chars =\r\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\".split(\"\");\r\n var uuid = [],\r\n i;\r\n radix = radix || chars.length;\r\n\r\n if (len) {\r\n for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];\r\n } else {\r\n var r;\r\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = \"-\";\r\n uuid[14] = \"4\";\r\n for (i = 0; i < 36; i++) {\r\n if (!uuid[i]) {\r\n r = 0 | (Math.random() * 16);\r\n uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];\r\n }\r\n }\r\n }\r\n return uuid.join(\"\");\r\n }\r\n\r\n async function handleSend(type: string, val: string) {\r\n const quickReplyArray = ['human', 'nohuman', 'report', 'contact', 'recruit', 'complaints']\r\n if (quickReplyArray.indexOf(val) !== -1) {\r\n let quickReplyText = defaultQuickReplies.find(e => e.code === val)?.name;\r\n appendMsg({\r\n type: type,\r\n content: { text: quickReplyText },\r\n position: 'right',\r\n });\r\n setTyping(true);\r\n let quickReplyMessage = '';\r\n switch (val) {\r\n case 'human': quickReplyMessage = isWorkingDateTime() ? humanReplyMessage : nohumanReplyMessage; break;\r\n case 'nohuman': quickReplyMessage = nohumanReplyMessage; break;\r\n case 'report': quickReplyMessage = reportReplayMessage; break;\r\n case 'contact': quickReplyMessage = contactReplyMessage; break;\r\n case 'recruit': quickReplyMessage = recruitReplyMessage; break;\r\n case 'complaints': quickReplyMessage = complaintsReplyMessage; break;\r\n }\r\n //模拟回复消息\r\n return setTimeout(() => {\r\n appendMsg({\r\n type: type,\r\n content: { text: quickReplyMessage },\r\n });\r\n }, 1000);\r\n }\r\n\r\n appendMsg({\r\n type: 'text',\r\n content: { text: val },\r\n position: 'right',\r\n });\r\n setTyping(true);\r\n\r\n //判断聊天内容是否包含固定回复\r\n let fixedQuestionReply = getFixedQuestionReply(val);\r\n if (fixedQuestionReply.length > 0) {\r\n return setTimeout(() => {\r\n appendMsg({\r\n type: 'text',\r\n content: { text: fixedQuestionReply },\r\n });\r\n }, 1000);\r\n }\r\n\r\n let createdAt = new Date().toISOString();\r\n promptStream(val, createdAt);\r\n\r\n }\r\n\r\n const promptStream = async (val: string, createdAt: string) => {\r\n var source: any;\r\n let guid: string = \"\";\r\n source = await fetch(`${decryptHex(global.apiBaseUrl, \"AES\", STORE_KEY)}/Agent/chat`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Ocp-Apim-Subscription-Key\": decryptHex(global.apimKey, \"AES\", STORE_KEY)\r\n },\r\n method: \"post\",\r\n body: JSON.stringify({\r\n sessionId: sessionIdRef.current,\r\n userid: userIdRef.current,\r\n ask: val,\r\n source: sourceRef.current ?? \"AI Agent\"\r\n })\r\n }\r\n );\r\n noStreamingSource(source, guid, createdAt);\r\n }\r\n\r\n const noStreamingSource = async (source: any, guid: string, createdAt: string) => {\r\n source.text().then(function (text: string) {\r\n if (text) {\r\n let message = \"\";\r\n try {\r\n var item = JSON.parse(text);\r\n isEndRef.current = item.isEnd\r\n if (item.isEnd) {\r\n sessionIdRef.current = uuidv5(8);\r\n }\r\n if (item.newSessionWaitSeconds > 0) {\r\n let seconds = item.newSessionWaitSeconds;\r\n waitSecondsIntervalRef.current = setInterval(() => {\r\n seconds = seconds - 1;\r\n if (seconds === 0) {\r\n setWaitSeconds('');\r\n $(\".Composer\").show();\r\n if (waitSecondsIntervalRef.current) {\r\n clearInterval(waitSecondsIntervalRef.current);\r\n }\r\n }\r\n else {\r\n $(\".Composer\").hide();\r\n setWaitSeconds(`${seconds}s`);\r\n }\r\n }, 1000)\r\n }\r\n //解决不显示emoji表情\r\n let completion = unicodeToChar(item.message);\r\n //解决不换行的问题\r\n completion = completion.replace(/^\\\"|\\\"$/g, \"\").replace(/\\\\n/g, \"\\n\");\r\n //去除斜杠\r\n completion = completion.replace(/\\\\/g, '');\r\n message += completion;\r\n if (guid.length > 0) {\r\n updateMsg(guid, {\r\n type: \"text\",\r\n content: { text: message },\r\n _id: guid,\r\n createdAt: parseInt(createdAt)\r\n });\r\n }\r\n else {\r\n guid = uuidv5(8);\r\n appendMsg({\r\n type: \"text\",\r\n content: { text: message },\r\n _id: guid,\r\n createdAt: parseInt(createdAt)\r\n });\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n const unicodeToChar = (text: string) => {\r\n return text.replace(/\\\\u[\\dA-F]{4}/gi, function (match) {\r\n return String.fromCharCode(parseInt(match.replace(/\\\\u/gi, ''), 16));\r\n });\r\n }\r\n\r\n const rightStyle = {\r\n backgroundColor: \"var(--button-primary-color)\",\r\n color: \"white\",\r\n marginTop: \"2px\",\r\n padding: \"18px\",\r\n maxWidth: global.isMobile ? \"21.5rem\" : \"62.5rem\"\r\n };\r\n\r\n const leftStyle = {\r\n marginTop: \"6px\",\r\n padding: \"18px\",\r\n color: \"#333\",\r\n backgroundColor: \"white\",\r\n maxWidth: global.isMobile ? \"21.5rem\" : \"62.5rem\",\r\n };\r\n\r\n const leftContentProps: IconButtonProps = {\r\n icon: \"sign-out\",\r\n onClick: async () => {\r\n const source = await fetch(`${decryptHex(global.apiBaseUrl, \"AES\", STORE_KEY)}/Agent/end`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n method: \"post\",\r\n body: JSON.stringify({\r\n sessionId: sessionIdRef.current,\r\n })\r\n }\r\n );\r\n source.text().then(function (text: string) {\r\n if (text) {\r\n try {\r\n var item = JSON.parse(text);\r\n if (item.isEnd) {\r\n sessionIdRef.current = uuidv5(8);\r\n }\r\n //let seconds = 15;\r\n //waitSecondsIntervalRef.current = setInterval(() => {\r\n // seconds = seconds - 1;\r\n // if (seconds <= 0) {\r\n // setWaitSeconds('');\r\n // $(\".Composer\").show();\r\n // $(\".ScrollView\").show();\r\n // if (waitSecondsIntervalRef.current) {\r\n // clearInterval(waitSecondsIntervalRef.current);\r\n // }\r\n // }\r\n // else {\r\n // $(\".Composer\").hide();\r\n // $(\".ScrollView\").hide();\r\n // setWaitSeconds(`${seconds}s`);\r\n // }\r\n //}, 1000)\r\n toast.success('已结束聊天');\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n const rightContentProps: IconButtonProps[] = [\r\n {\r\n icon: 'plus-circle',\r\n onClick: async () => {\r\n if (window.self !== window.top) {\r\n // 当前页面是在iframe中打开的\r\n console.log(\"当前页面是在iframe中打开的\");\r\n //var parentWindow = window.parent;\r\n window.parent.postMessage('window-max', '*');\r\n } else {\r\n // 当前页面是顶层页面\r\n console.log(\"当前页面是是顶层页面\");\r\n window.close()\r\n } \r\n }\r\n }, {\r\n icon: 'close-circle',\r\n onClick: async () => {\r\n if (window.self !== window.top) {\r\n // 当前页面是在iframe中打开的\r\n console.log(\"当前页面是在iframe中打开的\");\r\n //var parentWindow = window.parent;\r\n window.parent.postMessage('window-close', '*');\r\n } else {\r\n // 当前页面是顶层页面\r\n console.log(\"当前页面是是顶层页面\");\r\n window.close()\r\n } \r\n }\r\n } \r\n ];\r\n\r\n function renderMessageContent(msg: MessageProps) {\r\n const { content } = msg;\r\n return (\r\n
\r\n {\r\n msg.position === \"left\" &&\r\n
\r\n \r\n {global.aiName}\r\n
\r\n }\r\n
\r\n {\r\n msg.position === \"left\" ?\r\n

:\r\n content.text\r\n }\r\n

\r\n
\r\n );\r\n }\r\n\r\n const isWorkingDateTime = () => {\r\n let currentDate = new Date();\r\n //节日特殊判断\r\n var beginDate = new Date(\"2024-05-01\"),\r\n endDate = new Date(\"2024-05-05\");\r\n if (currentDate >= beginDate && currentDate <= endDate) {\r\n return false;\r\n } \r\n const isWeekday = currentDate.getDay() % 6 !== 0;\r\n if (isWeekday && (currentDate.getHours() >= 8 && currentDate.getHours() < 18)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function getFixedQuestionReply(msg: string) {\r\n //fixed question words\r\n const humanArrary = ['人工']\r\n const reportArray = ['查报告', '查询报告', '验证码', '证书查询', '报告查询', '查询证书', '查询真伪', '真伪查询', '验证报告', '报告验证', '报告真伪', \"检测报告\", \"报告编号\",\"下载\"]\r\n const contactArray = ['联系方式', '电话', '官方联系', '工作号码', '联络方式']\r\n const recruitArray = ['招聘', '找工作', '招人', '招工']\r\n const complaintsArray = ['投诉', '建议']\r\n if (isMatchedArray(humanArrary, msg)) {\r\n return isWorkingDateTime() ? humanReplyMessage : nohumanReplyMessage;\r\n }\r\n if (isMatchedArray(reportArray, msg)) return reportReplayMessage;\r\n if (isMatchedArray(contactArray, msg)) return contactReplyMessage;\r\n if (isMatchedArray(recruitArray, msg)) return recruitReplyMessage;\r\n if (isMatchedArray(complaintsArray, msg)) return complaintsReplyMessage;\r\n return \"\";\r\n }\r\n\r\n const isMatchedArray = (textArray: any, ask: string) => {\r\n let result = false;\r\n for (var i = 0; i < textArray.length; i++) {\r\n if (ask.indexOf(textArray[i]) !== -1) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n return result\r\n }\r\n\r\n // Using a 256-bit key to ensure we use AES-256\r\n const STORE_KEY = \"qv2eehyt82d7wzmqi7ygaqcee6774vfd\";\r\n\r\n const encryptHex = (string: string, chip: string, skey: string) => {\r\n let result;\r\n try {\r\n const key = CryptoJS.enc.Hex.parse(skey);\r\n if (chip === 'AES') {\r\n const iv = CryptoJS.lib.WordArray.create([0x00, 0x00, 0x00, 0x00]);\r\n result = CryptoJS.AES.encrypt(string, key, {\r\n iv: iv,\r\n mode: CryptoJS.mode.CBC,\r\n });\r\n result = result.ciphertext.toString(CryptoJS.enc.Hex);\r\n } else {\r\n result = CryptoJS.HmacSHA256(string, key).toString(CryptoJS.enc.Hex);\r\n }\r\n return result;\r\n } catch (error) {\r\n throw error;\r\n }\r\n };\r\n\r\n const decryptHex = (encryptedStringHex: string, chip: string, skey: string) => {\r\n let result = '';\r\n const key = CryptoJS.enc.Hex.parse(skey);\r\n const iv = CryptoJS.lib.WordArray.create([0x00, 0x00, 0x00, 0x00]);\r\n try {\r\n const array = CryptoJS.enc.Hex.parse(encryptedStringHex);\r\n if (chip === 'AES') {\r\n result = CryptoJS.AES.decrypt(encryptedStringHex, key, {\r\n iv: iv,\r\n format: CryptoJS.format.Hex,\r\n mode: CryptoJS.mode.CBC,\r\n }).toString(CryptoJS.enc.Utf8);\r\n } else {\r\n result = array;\r\n }\r\n return result;\r\n } catch (error) {\r\n throw error;\r\n }\r\n };\r\n\r\n // 快捷短语回调,可根据 item 数据做出不同的操作,这里以发送文本消息为例\r\n function handleQuickReplyClick(item: QuickReplyItemProps) {\r\n handleSend('text', item.code||'');\r\n }\r\n\r\n // 默认快捷短语,可选\r\n const defaultQuickReplies = [\r\n {\r\n icon: 'message',\r\n name: '人工服务',\r\n code:'human'\r\n },\r\n {\r\n icon: 'search',\r\n name: '报告验证',\r\n code: 'report'\r\n },\r\n {\r\n icon:'tel',\r\n name: '联系方式',\r\n code: 'contact'\r\n },\r\n {\r\n icon:'info-circle',\r\n name: '招聘信息',\r\n code: 'recruit'\r\n },\r\n {\r\n icon:'alarm',\r\n name: '投诉建议',\r\n code: 'complaints'\r\n }\r\n ];\r\n\r\n const humanReplyMessage = \"请问您想测试什么项目呢?[人工服务链接]\"\r\n const nohumanReplyMessage = `现在是非工作时间段,您可以给我们留言,我们将尽快回复您。谢谢!`\r\n const reportReplayMessage = `CTI华测报告自助查询方式:\\n1、报告查询地址:https://mycti.cti-cert.com/ →输入报告编号→输入报告验证码(报告第一页右下角NO号)→验证码→报告查询→预览报告,下载报告。\\n\\n2、可通过微信扫描报告中的二维码进行验证。(请注意!查询到后,将您手中报告和我司系统报告进行对比是否一致,内容一致即为真实有效的)\\n3、报告完整电子版以及您的具体需求或者疑问点以邮件的形式发送到我司邮箱:info@cti-cert.com,我们会请报告组的同事帮忙查询,并会邮件回复您。\\n4、以“EED31”和“EED32”开头的报告编号查询报告真伪网址(报告电子版已加密):http://yz.cnca.cn/ver-ep/ve/v/pdfveri.jsp`\r\n const contactReplyMessage = `CTI华测检测商城在线客服热线\\n☎️:400-6788-333\\n如遇忙线,请给我们留言,我们将尽快回复您。谢谢!`\r\n const recruitReplyMessage = `华测检测,欢迎您的加入!\\n您可以通过以下方式了解我们正在招聘的职位:\\n🚀公司官网:https://www.cti-cert.com/join\\n✌️前程无忧:https://jobs.51job.com/all/co1140198.html\\n✌️智联招聘:https://company.zhaopin.com/CZ136731340.htm\\n✌️猎聘网:https://www.liepin.com/company/8525517`\r\n const complaintsReplyMessage = `CTI华测检测欢迎您!\\n如果您对我们有任何建议或服务过程中有任何问题,可以通过以下方式联系我们,以便及时准确处理您的请求。\\n投诉电话:0755-33681700\\n建议邮箱:complaint@cti-cert.com\\n(请在邮件中写明以下信息:建议/不满意的原因、报告编号、CTI对接人员信息、您的电话和邮箱)`\r\n\r\n const CardActions = (props: any) => {\r\n return props.children;\r\n };\r\n\r\n function bubblePrompt(){\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ); \r\n }\r\n\r\n return (\r\n <>\r\n \r\n {\r\n waitSeconds &&\r\n
\r\n {waitSeconds}\r\n
\r\n }\r\n \r\n );\r\n}\r\nexport default ChatOpen;\r\n","(function(doc) {\r\n var id = '__CHATUI_ICONS__';\r\n var svgSprite =\r\n '';\r\n\r\n if (!doc) return;\r\n\r\n function ready(fn) {\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', fn);\r\n } else {\r\n fn();\r\n }\r\n }\r\n\r\n function appendSvg() {\r\n doc.body.insertAdjacentHTML('afterbegin', svgSprite);\r\n }\r\n\r\n var existing = doc.getElementById(id);\r\n if (!existing) {\r\n ready(appendSvg);\r\n }\r\n})(document);\r\n"],"names":["CryptoJS","require","showdown","converter","Converter","tables","document","title","global","aiName","messages","appendMsg","setTyping","updateMsg","useMessages","userIdRef","useRef","uuidv5","sessionIdRef","isEndRef","waitSecondsIntervalRef","sourceRef","waitSeconds","setWaitSeconds","useState","len","radix","arguments","length","undefined","i","r","chars","split","uuid","Math","random","join","async","handleSend","type","val","indexOf","_defaultQuickReplies$","quickReplyText","defaultQuickReplies","find","e","code","name","content","text","position","quickReplyMessage","isWorkingDateTime","humanReplyMessage","nohumanReplyMessage","reportReplayMessage","contactReplyMessage","recruitReplyMessage","complaintsReplyMessage","setTimeout","fixedQuestionReply","msg","reportArray","contactArray","recruitArray","complaintsArray","isMatchedArray","getFixedQuestionReply","createdAt","Date","toISOString","promptStream","useEffect","params","queryString","parse","window","location","search","Object","keys","forEach","item","toLocaleLowerCase","current","welcomeMessage","aiAskMessage","listener","fetch","concat","decryptHex","apiBaseUrl","STORE_KEY","headers","method","body","JSON","stringify","sessionId","userId","addEventListener","removeEventListener","_sourceRef$current","source","apimKey","userid","ask","noStreamingSource","guid","then","message","isEnd","newSessionWaitSeconds","seconds","setInterval","$","show","clearInterval","hide","completion","unicodeToChar","replace","_id","parseInt","console","log","match","String","fromCharCode","rightStyle","backgroundColor","color","marginTop","padding","maxWidth","isMobile","leftStyle","leftContentProps","icon","onClick","toast","success","rightContentProps","self","top","parent","postMessage","close","currentDate","beginDate","endDate","getDay","getHours","textArray","result","encryptedStringHex","chip","skey","key","enc","Hex","iv","lib","WordArray","create","array","AES","decrypt","format","mode","CBC","toString","Utf8","error","_jsxs","_Fragment","children","_jsx","Chat","navbar","logo","title_logo","leftContent","rightContent","renderMessageContent","style","display","flexDirection","flexShrink","alignItems","Avatar","src","size","fontSize","marginLeft","className","dangerouslySetInnerHTML","__html","makeHtml","quickReplies","onQuickReplyClick","onSend","bottom","left","zIndex","doc","fn","id","svgSprite","getElementById","insertAdjacentHTML","readyState"],"sourceRoot":""}