| 
					
				 | 
			
			
				@@ -38,7 +38,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			<tape 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				ref="tapeRef" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				:aiNameList="roleList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				:chatData="[]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				:chatData="chatList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				v-show="pageStatus == 0 && !showIndexPage" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			<!-- <div class="t-t-m-Item" v-show="cardStatus==1"> --> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -187,7 +187,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							></textarea> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						<div class="ca-b-o-m-right"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							<span @click.stop="tapeSubmit()"></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<!-- <span @click.stop="tapeSubmit()"></span> --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							<!-- <div :class="sendBtnDsiable ? 'ca-b-o-m-r-dsiableBtn' : ''"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							</div> --> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -206,10 +206,14 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							v-if="showRoleList && choseRoleList.length != 0" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							<div 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								:class="['ca_b_o_m_rl_item',roleListIndex==index?'ca_b_o_m_rl_itemActive':'']" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								v-for="(item,index) in choseRoleList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								:class="[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									'ca_b_o_m_rl_item', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									roleListIndex == index ? 'ca_b_o_m_rl_itemActive' : '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								v-for="(item, index) in choseRoleList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								:key="item.assistant_id" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								@click="choseRole(item)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								@mouseover="() => (roleListIndex = index)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								<div class="ca_b-o_m_rl_i_top"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 									<el-avatar 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -295,6 +299,13 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		<!-- 录音转文字 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		<iframe 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			allow="camera *; microphone *;display-capture;midi;encrypted-media;" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			src="https://beta.cloud.cocorobo.cn/browser/public/index.html" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ref="iiframe" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			v-show="false" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		></iframe> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -304,7 +315,7 @@ import transcription from "./transcription.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import tape from "./tape.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { v4 as uuidv4 } from "uuid"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import Recorder from "js-audio-recorder"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// import MarkdownIt from "markdown-it"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import MarkdownIt from "markdown-it"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const lamejs = require("lamejs"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const recorder = new Recorder({ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -379,7 +390,7 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			textareaValue: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			textareaLoading: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			showRoleList: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			roleListIndex:0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			roleListIndex: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			recordedForm: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				time: "00:00:00", //时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				status: 0, //0--未录音  1--正在录音  2--暂停  3--录音结束 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -424,52 +435,52 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			transcriptionData: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				time: "2024-01-13 15:58:00", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				content: `对爱整洁,有精神、不拖拉,多思考。老师你好,同学们好。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-请坐。前几天白老师关注到一则新闻,我们大鹏新区政府提出要将2024年作为旅游高质量发展年,为了吸引更多的游客来到咱们大鹏,你认为最重要的是什么来?第一小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-我认为最重要的是要先把环境、绿水青山环境弄好,这样才能吸引更多的人来,大鹏是的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-大家同意他的想法吗?保护大棚环境人人有责,上周咱们班的两位环境调查员就去到葵冲进行了实地调查,我们来看看他们发现了什么。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-大家好,我们是人大附中深圳学校五1班的张龙溪,何瑞一为了响应区政府的号召,今天我们作为环境调查员,准备实地调查一下葵冲的环境情况,走跟随我们的镜头一起去看一看我们调查到的情况有什么样,这样的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-应该是这样的,就是这样的,像这样的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-像这种情况。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-像这种情况。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-像这样的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-我们调查到的情况不是很好,同学们你们。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-谁知谁知。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-刚刚视频有一些小小的不同步,但不影响我们去观察里面的内容。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-好,来,同学们,通过刚才的视频,你看到了哪些环境问题?第五小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-我看到了菜市场上到处是垃圾,到处是那些烂掉的瓜果皮,是的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-其他小组呢?来第八小组我。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-看我看到了路上还有很多漂移的垃圾就路上了。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-你观察得很认真,是的,在咱们生活的这片区域确实存在很多的垃圾问题,这些垃圾主要是家庭里面产生的生活垃圾。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-根据调查,一个家庭一天产生的垃圾大约是三千克,咱们班一共有45位同学,所有同学的家庭一天产生的生活垃圾总质量是多少?老师还调查到一些数据。我校小学部一共有1556人,整个大鹏新区共有55,224户家庭,整个深圳市有6,424,556户家庭,他们一天分别产生多少垃圾呢?现在请小组长从材料框当中拿出实验记录单,我们用计算器来速算一下,将结果记录下来。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-好,可以开始计算。二十五六场这样做的之前工作。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-还差一些,这样更准确一点。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-用计算器这样更准确算完了没有? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-你们。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-算完了吗老师? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-拍一下照片。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-大家算完了吗? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-好,算完的小组面向老师坐,好好表扬第八小组。好,第五、第四、第三。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-好,这是第四小组的数据,我们来看跟大家的一样吗?一样,在刚刚大家记录数据的时候,你发现了什么?在你刚刚写下这些数据,有什么发现?第三小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-我发现每天生产的垃圾会非常多。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-垃圾很多多,到什么程度?我们来看。多到全班同学一天产生的垃圾,相当于一头成年公羊这么重,多到全校小学部家庭的垃圾,一天有一头非洲大象这么重。大鹏新区所有家庭一天产生的垃圾量相当于32头,非洲大象这么重,整个深圳市一天产生的垃圾高达3800头,非洲大象这么重。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-老师看到很多同学发出来很惊讶的表情,整个深圳市就产生这么多的垃圾,整个广东省全国23个省加起来,放眼全球,全世界一年产生的垃圾是多少?我们来看这个统计图,把各个地区的垃圾量加起来,全球一年产生垃圾量高达20.17亿吨。这么多的垃圾如果填埋高度是一米的话,它可以埋掉三个深圳或者一个广州的面积。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-面对这组数据,你有什么样的感受跟大家分享一下。来,第一小组,垃圾好多。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-垃圾很多。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-其他小组有什么样的感受?第八小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-如果我们一直都以填埋的方式去处理垃圾的话,可能全球的土地都用于填埋垃圾了。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-你还告诉了大家处理垃圾的一种方式是的,这么多的垃圾如果没有得到及时的处理,他们会侵占大量的土地包围我们的城市家园,我们就会陷入到一种垃圾围城的现状,面对这么庞大的垃圾量,我们该怎么办? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-第七小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-我觉得我们可以按照垃圾的种类来进行分类,比如说回收垃圾,它可以是回收,然后再利用的或者就是有害垃圾,比如说电池会污染,将会人们将会对它处以专业的处理。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-你想到了垃圾分类,其他小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-第五小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-并且像很多我们要应该少用一次性的垃圾,比如说你买菜的时候要少用一次性的塑料袋,尽量用布袋,这样子的话可以节省既节省资源,又节省了垃圾的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-生产量,你说的是一个非常实用的方法,大家刚刚都说出来了,实际的行动是的。今天就让我们一起行动起来,一起共同想办法来解决垃圾问题。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-面对垃圾问题。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-正如第八小组刚刚说的,咱们国家早期的处理方式是直接填埋和焚烧发电,这两种方法在一定程度上减少了垃圾,但也存在着很严重的弊端。现在我们就一起来说一说这两种方法的好处和弊端。第一小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-直接填埋这种方法会占用大量土地,而且还会污染土地,焚烧发电这种方法会会污_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 				time: "2024-01-13 15:58:00", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 				content: `对爱整洁,有精神、不拖拉,多思考。老师你好,同学们好。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 请坐。前几天白老师关注到一则新闻,我们大鹏新区政府提出要将2024年作为旅游高质量发展年,为了吸引更多的游客来到咱们大鹏,你认为最重要的是什么来?第一小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 我认为最重要的是要先把环境、绿水青山环境弄好,这样才能吸引更多的人来,大鹏是的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 大家同意他的想法吗?保护大棚环境人人有责,上周咱们班的两位环境调查员就去到葵冲进行了实地调查,我们来看看他们发现了什么。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 大家好,我们是人大附中深圳学校五1班的张龙溪,何瑞一为了响应区政府的号召,今天我们作为环境调查员,准备实地调查一下葵冲的环境情况,走跟随我们的镜头一起去看一看我们调查到的情况有什么样,这样的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 应该是这样的,就是这样的,像这样的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 像这种情况。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 像这种情况。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 像这样的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 我们调查到的情况不是很好,同学们你们。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 谁知谁知。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 刚刚视频有一些小小的不同步,但不影响我们去观察里面的内容。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 好,来,同学们,通过刚才的视频,你看到了哪些环境问题?第五小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 我看到了菜市场上到处是垃圾,到处是那些烂掉的瓜果皮,是的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 其他小组呢?来第八小组我。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 看我看到了路上还有很多漂移的垃圾就路上了。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 你观察得很认真,是的,在咱们生活的这片区域确实存在很多的垃圾问题,这些垃圾主要是家庭里面产生的生活垃圾。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 根据调查,一个家庭一天产生的垃圾大约是三千克,咱们班一共有45位同学,所有同学的家庭一天产生的生活垃圾总质量是多少?老师还调查到一些数据。我校小学部一共有1556人,整个大鹏新区共有55,224户家庭,整个深圳市有6,424,556户家庭,他们一天分别产生多少垃圾呢?现在请小组长从材料框当中拿出实验记录单,我们用计算器来速算一下,将结果记录下来。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 好,可以开始计算。二十五六场这样做的之前工作。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 还差一些,这样更准确一点。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 用计算器这样更准确算完了没有? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 你们。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 算完了吗老师? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 拍一下照片。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 大家算完了吗? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 好,算完的小组面向老师坐,好好表扬第八小组。好,第五、第四、第三。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 好,这是第四小组的数据,我们来看跟大家的一样吗?一样,在刚刚大家记录数据的时候,你发现了什么?在你刚刚写下这些数据,有什么发现?第三小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 我发现每天生产的垃圾会非常多。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 垃圾很多多,到什么程度?我们来看。多到全班同学一天产生的垃圾,相当于一头成年公羊这么重,多到全校小学部家庭的垃圾,一天有一头非洲大象这么重。大鹏新区所有家庭一天产生的垃圾量相当于32头,非洲大象这么重,整个深圳市一天产生的垃圾高达3800头,非洲大象这么重。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 老师看到很多同学发出来很惊讶的表情,整个深圳市就产生这么多的垃圾,整个广东省全国23个省加起来,放眼全球,全世界一年产生的垃圾是多少?我们来看这个统计图,把各个地区的垃圾量加起来,全球一年产生垃圾量高达20.17亿吨。这么多的垃圾如果填埋高度是一米的话,它可以埋掉三个深圳或者一个广州的面积。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 面对这组数据,你有什么样的感受跟大家分享一下。来,第一小组,垃圾好多。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 垃圾很多。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 其他小组有什么样的感受?第八小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 如果我们一直都以填埋的方式去处理垃圾的话,可能全球的土地都用于填埋垃圾了。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 你还告诉了大家处理垃圾的一种方式是的,这么多的垃圾如果没有得到及时的处理,他们会侵占大量的土地包围我们的城市家园,我们就会陷入到一种垃圾围城的现状,面对这么庞大的垃圾量,我们该怎么办? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 第七小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 我觉得我们可以按照垃圾的种类来进行分类,比如说回收垃圾,它可以是回收,然后再利用的或者就是有害垃圾,比如说电池会污染,将会人们将会对它处以专业的处理。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 你想到了垃圾分类,其他小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 第五小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 并且像很多我们要应该少用一次性的垃圾,比如说你买菜的时候要少用一次性的塑料袋,尽量用布袋,这样子的话可以节省既节省资源,又节省了垃圾的。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 生产量,你说的是一个非常实用的方法,大家刚刚都说出来了,实际的行动是的。今天就让我们一起行动起来,一起共同想办法来解决垃圾问题。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 面对垃圾问题。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 正如第八小组刚刚说的,咱们国家早期的处理方式是直接填埋和焚烧发电,这两种方法在一定程度上减少了垃圾,但也存在着很严重的弊端。现在我们就一起来说一说这两种方法的好处和弊端。第一小组。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 直接填埋这种方法会占用大量土地,而且还会污染土地,焚烧发电这种方法会会污_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// `, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			chatList: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -488,10 +499,10 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	watch:{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		choseRoleList(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	watch: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		choseRoleList() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.roleListIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		handleBlur(event) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -502,11 +513,14 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		uploadRecording() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			let input = document.createElement("input"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			input.type = "file"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			input.accept = "audio/*, .txt, .pdf, .xlsx"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			input.accept = ".wav"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// input.accept = "audio/*, .txt, .pdf, .xlsx"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			input.click(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			input.onchange = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.loading = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				let file = input.files[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.uploadWavFileAndGetText(file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				var credentials = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					accessKeyId: "AKIATLPEDU37QV5CHLMH", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					secretAccessKey: "Q2SQw37HfolS7yeaR1Ndpy9Jl4E2YZKUuuy2muZR", 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -688,18 +702,23 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.continuousDialogue = newValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// 点击发送旁的录音 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tapeSubmit() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.$message.info("发送旁的录音"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.mainBtnStatus = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.pageStatus = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.TapeNum = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// tapeSubmit() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// this.$message.info("发送旁的录音"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// this.mainBtnStatus = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// this.pageStatus = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// this.TapeNum = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		async finishRecorded() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.loading = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			recorder.stop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.$message.success("已结束录音"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			let file = this.convertToMp3(recorder.getWAV()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const mp3Blob = recorder.getWAVBlob(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let audioFile = this.dataURLtoAudio(mp3Blob, "wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.uploadWavFileAndGetText(audioFile) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			file.lastModifiedDate = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			file.name = "recordedFile.mp3"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			var credentials = { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -831,24 +850,91 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// 发送消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		send(_text = this.textareaValue) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.textareaValue = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// 判断输入的文本是否为空 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (!_text.trim()) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 这里处理@的角色 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			let _atRoleList = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let _roleList = [...this.roleList,...this.publicRoleList]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			_roleList.forEach((i)=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(_text.indexOf(`@${i.assistantName}`)!=-1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_atRoleList.push(i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let _roleList = [...this.roleList, ...this.publicRoleList]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_roleList.forEach((i) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (_text.indexOf(`@${i.assistantName}`) != -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_atRoleList.push(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (_atRoleList.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				let _oldText = _text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				_atRoleList.forEach(i=>_oldText = _text.replace(`@${i.assistantName}`,``)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				console.log(_text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				console.log(_oldText) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				//有@角色 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				console.log(_atRoleList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let _replaceText = _text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let _htmlText = _text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				_atRoleList.forEach((_i) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_replaceText = _replaceText.replaceAll(`@${_i.assistantName}`, ``); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_htmlText = _htmlText.replaceAll( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						`@${_i.assistantName}`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						`<span class='aite-name'>@${_i.assistantName}</span>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				_atRoleList.forEach((_item, _index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					const _uid = uuidv4(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (_index == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.chatList.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							loading: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							role: "user", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							content: _htmlText, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							uid: _uid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							AI: "AI", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							aiContent: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							oldContent: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							isShowSynchronization: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							filename: _item.file_names, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							index: this.chatList.length, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							is_mind_map: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							fileid: _item.assistantName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.chatList.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							loading: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							role: "user", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							content: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							uid: _uid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							AI: "AI", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							aiContent: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							oldContent: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							isShowSynchronization: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							filename: _item.file_names, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							index: this.chatList.length, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							is_mind_map: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							fileid: _item.assistantName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.scrollBottom(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let params = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						assistant_id: _item.assistant_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						userId: "602def61-005d-11ee-91d8-005056b86db5", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						message: _replaceText, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						session_name: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						uid: _uid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						file_ids: this.fileId ? [this.fileId] : [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.ajax 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						.post("https://gpt4.cocorobo.cn/ai_agent_park_chat_new", params) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						.then((res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if (res.data.FunctionResponse.result == "发送成功") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								this.$message.warning(response.data.FunctionResponse.result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						.catch((err) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							console.log(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.getAtAuContent( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_uid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_htmlText, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_item.headUrl, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_item.assistantName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				//未@角色 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				let _uuid = uuidv4(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.chatList.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					role: "user", 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -863,78 +949,120 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					is_mind_map: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					loading: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.textareaValue = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.scrollBottom(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// 连续对话设置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				let _historyMessage = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// this.chatList.forEach(i=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				_historyMessage.push({role:'user',content:_text}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				_historyMessage.push({ role: "user", content: _text }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				let params = JSON.stringify({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          model: 'gpt-3.5-turbo', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          temperature: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          max_tokens: 4096, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          top_p: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          frequency_penalty: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          presence_penalty: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          messages: _historyMessage, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          uid: _uuid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          mind_map_question: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.ajax.post("https://gpt4.cocorobo.cn/chat",params).then(res=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if(res.data.FunctionResponse.result == '发送成功'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						this.getAiContent(_uuid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						this.$message.warning(response.data.FunctionResponse.result) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}).catch(e=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					console.log(e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					model: "gpt-3.5-turbo", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					temperature: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					max_tokens: 4096, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					top_p: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					frequency_penalty: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					presence_penalty: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					messages: _historyMessage, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					uid: _uuid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					mind_map_question: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.ajax 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					.post("https://gpt4.cocorobo.cn/chat", params) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					.then((res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (res.data.FunctionResponse.result == "发送成功") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							this.$message.warning(response.data.FunctionResponse.result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					.catch((e) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						console.log(e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.getAiContent(_uuid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		getAiContent(_uid){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let _source = new EventSource(`https://gpt4.cocorobo.cn/stream/${_uid}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		getAiContent(_uid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let _source = new EventSource(`https://gpt4.cocorobo.cn/stream/${_uid}`); //http://gpt4.cocorobo.cn:8011/stream/     https://gpt4.cocorobo.cn/stream/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			let _allText = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			let _mdText = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// const md = new MarkdownIt() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			_source.onmessage = (_e) =>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.chatList.find(i=>i.uid==_uid).loading = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(_e.data.replace("'", '').replace("'", '') == '[DONE]'){//对话已经完成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_mdText = _mdText.replace("_",''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const md = new MarkdownIt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_source.onmessage = (_e) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (_e.data.replace("'", "").replace("'", "") == "[DONE]") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//对话已经完成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_mdText = _mdText.replace("_", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					_source.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					this.chatList.find(i=>i.uid==_uid).aiContent = _mdText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					this.chatList.find(i=>i.uid==_uid).isalltext = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					this.chatList.find(i=>i.uid==_uid).isShowSynchronization = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).aiContent = _mdText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).isalltext = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).isShowSynchronization = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).loading = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					// 保存对话👇 #TODO保存对话 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}else{//对话还在继续 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					let _text = "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_text = _e.data.replaceAll("'", ''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if(_allText==""){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_allText = _text.replace(/^\n+/,'');//去掉回复消息中偶尔开头就存在的连续换行符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_allText +=_text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//对话还在继续 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let _text = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_text = _e.data.replaceAll("'", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (_allText == "") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_allText = _text.replace(/^\n+/, ""); //去掉回复消息中偶尔开头就存在的连续换行符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_allText += _text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					_mdText = _allText + "_"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_mdText = _mdText.replace(/\\n/g,'\n'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_mdText = _mdText.replace(/\\/g,''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if(_allText.split('```').length % 2 == 0)_mdText +='\n```\n'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_mdText = _mdText.replace(/\\n/g, "\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_mdText = _mdText.replace(/\\/g, ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (_allText.split("```").length % 2 == 0) _mdText += "\n```\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					//转化返回的回复流数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					_mdText = md.render(_mdText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					this.chatList.find(i=>i.uid==_uid).aiContent = _mdText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).aiContent = _mdText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).loading = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					this.scrollBottom(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					// 处理流数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		getAtAuContent(_uid,_text,_headUrl,_assistantName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			console.log(_uid,_text,_headUrl,_assistantName) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		getAtAuContent(_uid, _text, _headUrl, _assistantName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let _source = new EventSource( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				`https://gpt4.cocorobo.cn/question/${_uid}` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			); //http://gpt4.cocorobo.cn:8011/question/   https://gpt4.cocorobo.cn/question/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let _allText = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let _mdText = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const md = new MarkdownIt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_source.onmessage = (_e) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let _eData = JSON.parse(_e.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (_eData.content.replace("'", "").replace("'", "") == "[DONE]") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let _result = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if ("result" in _eData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_result = _eData.result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						for (let i = 0; i < _result.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							_mdText = _mdText.replace(_result[i].text, _result[i].fileName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_mdText = _mdText.replace("_", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).aiContent = _mdText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).isalltext = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).isShowSynchronization = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).loading = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.scrollBottom(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//#TODO 这里保存对话 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let _text = _eData.content.replace("'", "").replace("'", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (_allText == "") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_allText = _text.replace(/^\n+/, ""); //去掉回复消息中偶尔开头就存在的连续换行符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						_allText += _text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_mdText = _allText + "_"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_mdText = _mdText.replace(/\\n/g, "\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_mdText = _mdText.replace(/\\/g, ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (_allText.split("```").length % 2 == 0) _mdText += "\n```\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//转化返回的回复流数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					_mdText = md.render(_mdText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).aiContent = _mdText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.chatList.find((i) => i.uid == _uid).loading = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.scrollBottom(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// 处理流数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		textareaChange() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (this.textareaValue.at(-1) == "@") { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1003,6 +1131,23 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return new Blob(buffer, { type: "audio/mp3" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		uploadWavFileAndGetText(audioFile) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let iiframe = this.$refs["iiframe"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let _this = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			iiframe.contentWindow.onRecognizedResult = function (e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				console.log("onRecognizedResult", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let privText = e.privText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				console.log(privText) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				_this.transcriptionData.content = privText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			iiframe.contentWindow.doContinuousPronunciationAssessment("", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				files: [audioFile], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 录音转wav 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		dataURLtoAudio(blob, filename) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return new File([blob], filename, { type: "audio/wav" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		getRoleList() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.roleList = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			let params = { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1046,25 +1191,30 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// 选择了@的角色 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		choseRole(_data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			let _lastAtIndex = this.textareaValue.lastIndexOf("@"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.textareaValue = `${this.textareaValue.slice(0,_lastAtIndex)}@${_data.assistantName} ` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.textareaValue = `${this.textareaValue.slice(0, _lastAtIndex)}@${ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				_data.assistantName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} `; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.$refs.textareaRef.focus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.showRoleList = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// 输入框键盘按下监听 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		textareaKeydown(_e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(this.showRoleList && this.choseRoleList.length>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				switch(_e.keyCode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					case 38://小键盘上 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		textareaKeydown(_e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (this.showRoleList && this.choseRoleList.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				switch (_e.keyCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					case 38: //小键盘上 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						_e.preventDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if(this.roleListIndex==0)return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (this.roleListIndex == 0) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						this.roleListIndex--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						// 修改滚动条高度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.$refs.roleListRef.scrollTop = this.roleListIndex * 105; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					case 40://小键盘下 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					case 40: //小键盘下 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						_e.preventDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if(this.roleListIndex==this.choseRoleList.length-1)return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (this.roleListIndex == this.choseRoleList.length - 1) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						this.roleListIndex++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.$refs.roleListRef.scrollTop = this.roleListIndex * 105; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					case 13://回车 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					case 13: //回车 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						_e.preventDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						this.choseRole(this.choseRoleList[this.roleListIndex]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						break; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1075,9 +1225,14 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.getRoleList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.getPublicRoleList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//保存消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		insertChat(answer, problem, type, alltext, assistant_id, headUrl, file_id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			let params = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	mounted() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.getData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.scrollBottom(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </script> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1548,11 +1703,7 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	padding: 10px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-.ca_b_o_m_rl_item:hover { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	background-color: #c3ddfa; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-.ca_b_o_m_rl_itemActive{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.ca_b_o_m_rl_itemActive { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	background-color: #c3ddfa; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |