SanHQin 1 年之前
父節點
當前提交
18353c5665

+ 131 - 9
src/components/pages/classroomObservation/components/analysisItem.vue

@@ -1,5 +1,5 @@
 <template>
-	<div class="analysisItem">
+	<div class="analysisItem" v-loading="loading">
 		<div class="ai-header">
 			<div class="ai-h-left" @click.stop="changeOpenItem(!openItem)">
 				<span
@@ -18,16 +18,17 @@
 				<!-- <span class="ai-h-r-icon4" @click.stop="delBtn()"></span> -->
 			</div>
 		</div>
-		<div class="ai-main" v-show="openItem">
+		<div class="ai-main" v-if="openItem" >
 			<!-- <div class="a-m-title">
 				<span></span>
 				<div>{{ data.title }}分析</div>
 			</div> -->
 
 			<div class="a-m-brief">
-				{{ data.jsonData.result }}
+				<mdView :text="data.jsonData.result"/>
+				<!-- {{ data.jsonData.result }} -->
 			</div>
-			<div v-for="(item,index) in data.jsonData.dataFileList" :key="index">
+			<div v-for="(item,index) in data.jsonData.dataFileList" :key="item.uid">
 				<div v-if="imgTypeList.includes(checkFileType(item.url))">
 					<img style="max-width: 100%;" :src="item.url" alt="" />
 				</div>
@@ -39,7 +40,7 @@
 				</div>
 			</div>
 
-			<div v-for="(item,index) in data.jsonData.fileList" :key="index">
+			<div v-for="(item,index) in data.jsonData.fileList" :key="item.uid">
 				<div v-if="imgTypeList.includes(checkFileType(item.url))">
 					<img style="max-width: 100%;" :src="item.url" alt="" />
 				</div>
@@ -58,7 +59,7 @@
 import mdView from './mdView.vue';
 import pieChart from './pieChart.vue';
 export default {
-	emits:["delItem"],
+	emits:["delItem","editItem"],
 	components:{
 		mdView,
 		pieChart
@@ -73,11 +74,16 @@ export default {
 		index:{
 			type:Number,
 			default:0
+		},
+		tid:{
+			type:String,
+			require:true,
 		}
 	},
 	data() {
 		return {
 			openItem: false,
+			loading:false,
 			imgTypeList:[
 				"png",
     		"jpg",
@@ -109,7 +115,123 @@ export default {
 			this.$message.info("回退右");
 		},
 		editBtn() {
-			this.$message.info("编辑");
+			this.loading = true;
+			let assistant_id = {
+					"课堂观察": { value: "8ab07d41-e143-11ee-aaca-12e77c4cb76b", type: 0 },
+					"教学阶段九事件分析": {
+						value: "5e0466b3-0075-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"OMO智慧课堂分析": {
+						value: "4cc367c1-0076-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"布鲁姆问题分类": {
+						value: "eac63117-00a7-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"麦克锡问题分类": {
+						value: "18545cf7-0125-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"学生回答统计": {
+						value: "2c6ede88-0125-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"课堂活动类型": {
+						value: "41d2d2d4-0125-11ef-aaca-12e77c4cb76b",
+						type: 1,
+					},
+					"素养目标分析": {
+						value: "b13a98de-0125-11ef-aaca-12e77c4cb76b",
+						type: 1,
+					},
+					"科学教育目标分析": {
+						value: "d6cd48ab-0125-11ef-aaca-12e77c4cb76b",
+						type: 1,
+					},
+					"5E课程改编": {
+						value: "f757826e-0125-11ef-aaca-12e77c4cb76b",
+						type: 2,
+					},
+					"5EX课程改编": {
+						value: "0b6b08b7-0126-11ef-aaca-12e77c4cb76b",
+						type: 2,
+					},
+					"UTOP课程观察":{
+						value: "8e3a389b-014f-11ef-aaca-12e77c4cb76b",
+						type: 2,
+					},
+					"RST模型":{
+						value:"e649112e-0150-11ef-aaca-12e77c4cb76b",
+						type:2,
+					},
+					"RTOP模型":{
+						value:"68265b18-0151-11ef-aaca-12e77c4cb76b",
+						type:2,
+					},
+					"课堂质量评价":{
+						value:"25e53379-0152-11ef-aaca-12e77c4cb76b",
+						type:0,
+					},
+					"scop课堂观察":{
+						value:"d0c76d35-0152-11ef-aaca-12e77c4cb76b",
+						type:2,
+					},
+					"rtop课堂观察":{
+						value:"2ace7ff6-0154-11ef-aaca-12e77c4cb76b",
+						type:2
+					}
+				};
+			let file_ids = {
+				'03':["file-ABGckMn6mYmZSsmsAkSf9w1j"],
+				'04':["file-o5Z4P3oLqoADwVbCv2waEEZf"],
+			}
+			let parm = {
+				assistant_id:assistant_id[this.data.jsonData.name]?assistant_id[this.data.jsonData.name].value:null,
+				message:"请帮我根据要求完整的分析,输出请按照要求。",
+				session_name:"获取data",
+				userId:"1cf9dc4b-d95f-11ea-af4c-52540005ab01",
+				file_ids:file_ids[this.tid],
+			}
+
+			if(!parm.assistant_id){
+				this.loading = false;
+				return this.$message.error("未找到对应的AI助手")
+			}
+
+			this.ajax.post("https://gpt4.cocorobo.cn/ai_agent_park_chat",parm).then(res=>{
+				console.log("👇👇")
+				let _data = res.data.FunctionResponse;
+				if(!_data.message || _data.message.indexOf('由于我无法直接访问您上传的文件内容')>-1){
+					this.loading = false;
+					return this.$message.error("AI无法识别优化")
+				}
+				let _copyData = JSON.parse(JSON.stringify(this.data))
+				_copyData.jsonData.result = _data.message;
+				_copyData.jsonData.dataFileList = [];
+				_copyData.jsonData.fileList = [];
+				_copyData.json_data = JSON.stringify(_copyData.jsonData)
+				this.$emit("editItem",this.data.id,_copyData);
+				let pram2 = {
+					id: _copyData.id,
+					json_data: _copyData.json_data,
+				};
+				this.ajax
+				.post(
+					"https://gpt4.cocorobo.cn/update_classroom_observation",
+					pram2
+				)
+				this.loading = false;
+			}).catch(err=>{
+				this.$message.error("AI无法识别优化")
+				this.loading = false;
+			})
+			// this.$emit
+			// setTimeout(()=>{
+			// 	this.loading = false;
+			// 	this.$emit("editItem", this.data);
+			// },1000)
 		},
 		delBtn() {
 			this.$confirm("确定删除?", "提示", {
@@ -118,7 +240,7 @@ export default {
 				type: "error",
 			})
 			.then(() => {
-				this.$emit("delItem", this.index)
+				this.$emit("delItem", this.data.id)
 			})
 		},
 	},
@@ -230,7 +352,7 @@ export default {
 .a-m-brief {
 	font-size: 16px;
 	/* 斜体 */
-	font-style: italic;
+	/* font-style: italic; */
 	margin-bottom: 10px;
 }
 

+ 33 - 47
src/components/pages/classroomObservation/components/baseMessage.vue

@@ -88,11 +88,13 @@
 					<div class="m-m-fi-imageList">
 						<div
 							class="m-m-fi-imageItem"
-							v-for="item in imageList"
-							:key="item.id"
-							@click.stop="previewImg(item.url)"
+							v-for="(value,key,index) in imageList"
+							:key="index"
+							v-if="key.indexOf('fileList')!=-1&&index!=0"
+							@click.stop="previewImg(value[0].url)"
 						>
-							<img class="itemUrl" :src="item.url" alt="" />
+
+							<img class="itemUrl" :src="value[0].url" alt="" />
 						</div>
 						<!-- 图片区域 -->
 					</div>
@@ -117,31 +119,6 @@
 				</div>
 				<!-- <div class="m-m-fi-btn" >添加课堂图片</div> -->
 			</div>
-
-			<!-- <el-form :inline="true" :model="form">
-				<el-form-item label="课程名称" >
-					<el-input v-model="from.courseName" placeholder="请输入课程名称"></el-input>
-				</el-form-item>
-				<el-form-item label="授课老师">
-					<el-input v-model="from.teacherName" placeholder="请输入授课老师"></el-input>
-				</el-form-item>
-				<el-form-item label="年级">
-					<el-select v-model="from.grade" placeholder="请选择年级">
-						<el-option v-for="(item,index) in gradeList" :key="index" :value="item.value" :label="item.label"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="科目">
-					<el-select v-model="from.subjectList" placeholder="请选择年级">
-						<el-option v-for="(item,index) in gradeList" :key="index" :value="item.value" :label="item.label"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="班级">
-					<el-input v-model="from.class" placeholder="请输入班级"></el-input>
-				</el-form-item>
-				<el-form-item label="学生人数">
-					<el-input v-model.number="from.studentNum" placeholder="请输入学生人数"></el-input>
-				</el-form-item>
-			</el-form> -->
 		</div>
 	</div>
 </template>
@@ -154,7 +131,13 @@ export default {
 			default:()=>{
 				return {}
 			}
-		}
+		},
+		imageList:{
+			type:Object,
+			default:()=>{
+				return {}
+			}
+		},
 	},
 	data() {
 		return {
@@ -168,23 +151,23 @@ export default {
 				class: "",
 				studentNum: 0,
 			},
-			imageList: [
-				{
-					id: 0,
-					url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E8%AF%BE%E5%A0%82%E7%85%A7%E7%89%8711713229346909.jpeg",
-					fileName: "课堂图片1.jpeg",
-				},
-				{
-					id: 1,
-					url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E8%AF%BE%E5%A0%82%E7%85%A7%E7%89%8721713229377830.jpeg",
-					fileName: "课堂图片2.jpeg",
-				},
-				{
-					id: 2,
-					url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E8%AF%BE%E5%A0%82%E7%85%A7%E7%89%8731713229401672.jpeg",
-					fileName: "课堂图片3.jpeg",
-				},
-			],
+			// imageList: [
+			// 	{
+			// 		id: 0,
+			// 		url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E8%AF%BE%E5%A0%82%E7%85%A7%E7%89%8711713229346909.jpeg",
+			// 		fileName: "课堂图片1.jpeg",
+			// 	},
+			// 	{
+			// 		id: 1,
+			// 		url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E8%AF%BE%E5%A0%82%E7%85%A7%E7%89%8721713229377830.jpeg",
+			// 		fileName: "课堂图片2.jpeg",
+			// 	},
+			// 	{
+			// 		id: 2,
+			// 		url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E8%AF%BE%E5%A0%82%E7%85%A7%E7%89%8731713229401672.jpeg",
+			// 		fileName: "课堂图片3.jpeg",
+			// 	},
+			// ],
 			gradeList: [
 				{ value: "小学一年级", label: "小学一年级" },
 				{ value: "小学二年级", label: "小学二年级" },
@@ -207,6 +190,9 @@ export default {
 			this.$hevueImgPreview(url);
 		},
 	},
+	mounted(){
+		console.log(this.imageList)
+	}
 };
 </script>
 

+ 12 - 7
src/components/pages/classroomObservation/components/currencyAnalysis.vue

@@ -13,7 +13,7 @@
 			</div>
 		</div>
 		<div class="a-main" v-show="showItem">
-			<analysisItem v-if="analysisItemList.length > 0" v-for="(item,index) in analysisItemList" :key="item.id" :data="item" :index="index" @delItem="delItem"/>
+			<analysisItem ref="analysisItemRef" v-if="analysisItemList.length > 0" v-for="(item,index) in analysisItemList" :key="item.id" :data="item" :tid="tid" :index="index" @delItem="delItem" @editItem="editItem"/>
 			<div class="a_m_empty" v-if="analysisItemList.length == 0">暂无模块...</div>
 		</div>
 	</div>
@@ -22,13 +22,17 @@
 <script>
 import analysisItem from "./analysisItem";
 export default {
-	emits:["delItem"],
+	emits:["delItem","editItem"],
 	props: {
 		analysisItemList:{
 			type:Array,
 			default:()=>{
 				return []
 			}
+		},
+		tid:{
+			type:String,
+			require:true,
 		}
 	},
 	components: {
@@ -49,11 +53,12 @@ export default {
 		changeShowItem(newValue) {
 			this.showItem = newValue;
 		},
-		delItem(index){
-			this.$emit("delItem",this.tagIndex,index)
-			// this.analysisList.splice(index,1)
-			// this.$message.success("删除成功");
-		}
+		delItem(id){
+			this.$emit("delItem",id)
+		},
+		editItem(id,_data){
+			this.$emit("editItem",id,_data)
+		},
 	},
 };
 </script>

+ 12 - 95
src/components/pages/classroomObservation/components/extendAnalysis.vue

@@ -13,110 +13,26 @@
 			</div>
 		</div>
 		<div class="a-main" v-show="showItem">
-			<analysisItem v-if="analysisItemList.length > 0" v-for="(item,index) in analysisItemList" :key="item.id" :data="item" :index="index" @delItem="delItem"/>
+			<analysisItem v-if="analysisItemList.length > 0" v-for="(item,index) in analysisItemList" :key="item.id" :data="item" :tid="tid" :index="index" @delItem="delItem" @editItem="editItem"/>
 			<div class="a_m_empty" v-if="analysisItemList.length == 0">暂无模块...</div>
 		</div>
-		<!-- <div v-if="showDialog == true" class="a-dialog" v-el-drag-dialog>
-			<div class="a-d-top">
-				<div class="a-d-topTit"><div style="width: 136px">添加模块</div></div>
-				<div>
-					<el-input
-						placeholder="请输入内容"
-						prefix-icon="el-icon-search"
-						v-model="input2"
-					>
-					</el-input>
-				</div>
-				<div class="a-d-t-right">
-					<span @click.stop="showDialog = false">×</span>
-				</div>
-			</div>
-			<div style="display: flex; height: 100%">
-				<div class="a-d-t-left">
-					<div class="itemTit">我的模块</div>
-					<div
-						:style="
-							tagIndex == index
-								? 'background: rgba(226, 238, 255, 1);color: rgba(54, 129, 252, 1)'
-								: ''
-						"
-						class="a-d-t-l-item"
-						v-for="(item, index) in dialogTagList"
-						:key="item.id"
-						@click.stop="tagIndex = index"
-					>
-						{{ item.name }}
-					</div>
-				</div>
-				<div class="a-d-box">
-					<div
-						style="
-							font-family: PingFang SC;
-							font-size: 16px;
-							font-weight: 600;
-							line-height: 22px;
-							text-align: left;
-							margin: 20px 0;
-							margin-bottom: 10px;
-						"
-					>
-						推荐
-					</div>
-					<div
-						style="
-							display: flex;
-							justify-content: space-between;
-							flex-wrap: wrap;
-						"
-					>
-						<div
-							class="a-d-b-item"
-							v-for="(item, index) in dialogTagDataList[tagIndex]"
-							:key="index"
-						>
-							<div class="a-d-b-i-top">
-								<img
-									style="height: 22px; width: 22px"
-									:src="
-										require('../../../../assets/icon/classroomObservation/digImg.png')
-									"
-								/>
-								<div class="a-d-b-i-t-title">{{ item.title }}</div>
-							</div>
-							<div class="a-d-b-i-bottom">{{ item.brief }}</div>
-							<div class="a-d-b-i-bottomPer" style="display: block">
-								3982人已使用
-							</div>
-							<div class="a-d-b-i-bottomBtn" style="display: none">
-								<div
-									style="
-										display: flex;
-										width: 100%;
-										justify-content: space-around;
-									"
-								>
-									<div class="a-d-b-i-t-btn">详情</div>
-									<div class="a-d-b-i-t-btn1">添加</div>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div> -->
 	</div>
 </template>
 
 <script>
 import analysisItem from "./analysisItem";
 export default {
-	emits:["delItem"],
+	emits:["delItem","editItem"],
 	props:{
 		analysisItemList:{
 			type:Array,
 			default:()=>{
 				return []
 			}
+		},
+		tid:{
+			type:String,
+			require:true,
 		}
 	},
 	components: {
@@ -140,11 +56,12 @@ export default {
 		changeShowItem(newValue) {
 			this.showItem = newValue;
 		},
-		delItem(index){
-			this.$emit("delItem",this.tagIndex,index)
-			// this.analysisList.splice(index,1)
-			// this.$message.success("删除成功");
-		}
+		delItem(id){
+			this.$emit("delItem",id)
+		},
+		editItem(id,_data){
+			this.$emit("editItem",id,_data)
+		},
 	},
 };
 </script>

+ 28 - 4
src/components/pages/classroomObservation/components/mdView.vue

@@ -44,7 +44,6 @@ const getFile = (url) => {
 			} else {
 				const fileContent = data.Body.toString('utf-8');
 				resolve({ data: fileContent });
-				console.log(fileContent);
 			} // sxuccessful response
 		});
 		// axios({
@@ -59,12 +58,21 @@ export default {
 			type: String,
 			default: "",
 		},
+		text:{
+			type:String,
+			default:"",
+		},
 	},
 	data() {
 		return {
-			markdownContent: "# Hello, Markdown!",
+			markdownContent: "",
 		};
 	},
+	watch:{
+		text(){
+			this.markdownContent = this.text;
+		}
+	},
 	// computed: {
 	// 	renderedMarkdown() {
 	// 		return this.md.render(this.markdownContent);
@@ -72,9 +80,8 @@ export default {
 	// },
 	methods: {
 		getMarkdown() {
+			if(this.text)return this.markdownContent = this.text;
 			if(!this.url)return;
-			console.log('👇👇👇')
-			console.log(this.url)
 			getFile(this.url).then(res=>{
 				this.markdownContent = res.data;
 			})
@@ -90,4 +97,21 @@ export default {
 	max-width: 100%;
 	height: 100%;
 }
+
+.mdView >>>.table{
+	width: 100%;
+  border-collapse: collapse;
+	margin: 10px 0;
+}
+
+.mdView >>>th,td{
+    border: 1px solid #999;
+    text-align: center;
+    padding: 10px 10px;
+}
+.mdView >>>td{
+    border: 1px solid #999;
+    text-align: center;
+    padding: 10px 10px;
+}
 </style>

+ 296 - 136
src/components/pages/classroomObservation/components/messageArea.vue

@@ -1,5 +1,5 @@
 <template>
-	<div class="messageArea">
+	<div class="messageArea" v-loading="loading">
 		<div class="m-operation">
 			<div class="m-o-switch">
 				<span class="m-o-s-text" @click.stop="changeShowBrief(!showBrief)"
@@ -18,27 +18,40 @@
 			<div class="m-o-btn" @click.stop="saveAsTemplate()">另存为模板</div>
 		</div>
 		<div class="ma-main">
-			<baseMessage :data="bmData.jsonData"	v-loading="currencyLoading"/>
+			<baseMessage
+				:data="bmData.jsonData"
+				:imageList="imageList.jsonData"
+				v-loading="currencyLoading"
+			/>
 
 			<currencyAnalysis
 				@updateMessage="updateMessage"
 				@delItem="delAnalysisItem"
-				:analysisItemList="dataList[0]"
+				@editItem="editAnalysisItem"
+				:analysisItemList="dataList.filter((i) => i.Type === 0)"
+				:tid="tid"
 				v-loading="currencyLoading"
+				ref="currencyAnalysisRef"
 			/>
 
 			<scienceAnalysis
 				@updateMessage="updateMessage"
 				@delItem="delAnalysisItem"
-				:analysisItemList="dataList[1]"
+				@editItem="editAnalysisItem"
+				:analysisItemList="dataList.filter((i) => i.Type === 1)"
+				:tid="tid"
 				v-loading="scienceLoading"
+				ref="scienceAnalysisRef"
 			/>
 
 			<extendAnalysis
 				@updateMessage="updateMessage"
 				@delItem="delAnalysisItem"
-				:analysisItemList="dataList[2]"
+				@editItem="editAnalysisItem"
+				:analysisItemList="dataList.filter((i) => i.Type === 2)"
+				:tid="tid"
 				v-loading="extendLoading"
+				ref="extendAnalysisRef"
 			/>
 			<!-- <div style="height: 10000px;"></div> -->
 		</div>
@@ -145,26 +158,26 @@ export default {
 		extendAnalysis,
 		analysisItem,
 	},
-	props:{
-		tid:{
-			type:String,
-			default:''
-		}
+	props: {
+		tid: {
+			type: String,
+			default: "",
+		},
 	},
 	data() {
 		return {
 			showBrief: true, //是否显示模块简介
 			dialogVisible: false,
 			tagIndex: 0,
-			loading: "",
-			currencyLoading:false,
-			scienceLoading:false,
-			extendLoading:false,
-			input2:"",
+			loading: false,
+			currencyLoading: false,
+			scienceLoading: false,
+			extendLoading: false,
+			input2: "",
 			dialogTagList: [
-				{ id: 1, name: "通用课堂分析" },
-				{ id: 2, name: "科学课堂分析" },
-				{ id: 3, name: "扩展分析" },
+				{ id: 0, name: "通用课堂分析" },
+				{ id: 1, name: "科学课堂分析" },
+				{ id: 2, name: "扩展分析" },
 			],
 			dialogTagDataList: [
 				[
@@ -809,24 +822,30 @@ BSCS 5E教学模型是一种广泛应用于科学教育的教学策略,它鼓
 					},
 				],
 			],
-			bmData:{},
-			dataList: [
-				[
-					//通用课堂分析
-				],
-				[
-					//学科课堂分析
-				],
-				[
-					//扩展分析
-				],
-			],
+			bmData: {},
+			dataList: [],
+			imageList: {},
 		};
 	},
 	methods: {
-		delAnalysisItem(tag,index){
-			this.dataList[tag].splice(index,1);
-			this.$message.success("删除成功")
+		delAnalysisItem(id) {
+			let _index = this.dataList.findIndex((i) => i.id == id);
+			if (_index > -1) {
+				this.dataList.splice(_index, 1);
+				this.$message.success("删除成功");
+			} else {
+				this.$message.error("删除失败");
+			}
+		},
+		editAnalysisItem(id, _data) {
+			let _index = this.dataList.findIndex((i) => i.id == id);
+			if (_index > -1) {
+				this.dataList[_index] = _data;
+				this.$forceUpdate();
+				this.$message.success("执行成功");
+			} else {
+				this.$message.info("执行错误");
+			}
 		},
 		updateMessage(val) {
 			// console.log(val);
@@ -853,133 +872,274 @@ BSCS 5E教学模型是一种广泛应用于科学教育的教学策略,它鼓
 			this.$message.info("另存为模板");
 		},
 		addAnalysisItem(_data) {
-			this.dataList[this.tagIndex].push({
-				title: _data.title,
-				brief: _data.brief,
-				cueWord: _data.cueWord,
+			return new Promise((resolve, reject) => {
+
+				this.loading = true;
+				let assistant_id = {
+					"课堂观察": { value: "8ab07d41-e143-11ee-aaca-12e77c4cb76b", type: 0 },
+					"教学阶段九事件分析": {
+						value: "5e0466b3-0075-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"OMO智慧课堂分析": {
+						value: "4cc367c1-0076-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"布鲁姆问题分类": {
+						value: "eac63117-00a7-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"麦克锡问题分类": {
+						value: "18545cf7-0125-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"学生回答统计": {
+						value: "2c6ede88-0125-11ef-aaca-12e77c4cb76b",
+						type: 0,
+					},
+					"课堂活动类型": {
+						value: "41d2d2d4-0125-11ef-aaca-12e77c4cb76b",
+						type: 1,
+					},
+					"素养目标分析": {
+						value: "b13a98de-0125-11ef-aaca-12e77c4cb76b",
+						type: 1,
+					},
+					"科学教育目标分析": {
+						value: "d6cd48ab-0125-11ef-aaca-12e77c4cb76b",
+						type: 1,
+					},
+					"5E课程改编": {
+						value: "f757826e-0125-11ef-aaca-12e77c4cb76b",
+						type: 2,
+					},
+					"5EX课程改编": {
+						value: "0b6b08b7-0126-11ef-aaca-12e77c4cb76b",
+						type: 2,
+					},
+					"UTOP课程观察":{
+						value: "8e3a389b-014f-11ef-aaca-12e77c4cb76b",
+						type: 2,
+					},
+					"RST模型":{
+						value:"e649112e-0150-11ef-aaca-12e77c4cb76b",
+						type:2,
+					},
+					"RTOP模型":{
+						value:"68265b18-0151-11ef-aaca-12e77c4cb76b",
+						type:2,
+					},
+					"课堂质量评价":{
+						value:"25e53379-0152-11ef-aaca-12e77c4cb76b",
+						type:0,
+					},
+					"scop课堂观察":{
+						value:"d0c76d35-0152-11ef-aaca-12e77c4cb76b",
+						type:2,
+					},
+					"rtop课堂观察":{
+						value:"2ace7ff6-0154-11ef-aaca-12e77c4cb76b",
+						type:2
+					}
+				};
+				let file_ids = {
+					'03':["file-ABGckMn6mYmZSsmsAkSf9w1j"],
+					'04':["file-o5Z4P3oLqoADwVbCv2waEEZf"],
+				};
+				let parm = {
+					assistant_id: assistant_id[_data.title]
+						? assistant_id[_data.title].value
+						: null,
+					message: "请帮我根据要求完整的分析,输出请按照要求。",
+					session_name: "获取data",
+					userId: "1cf9dc4b-d95f-11ea-af4c-52540005ab01",
+					file_ids: file_ids[this.tid],
+				};
+
+				if (!parm.assistant_id) {
+					this.loading = false;
+					resolve();
+					return this.$message.error("未找到对应的AI助手");
+				}
+				// console.log(parm);
+				// this.loading = false;
+				// return resolve()
+				this.ajax
+					.post("https://gpt4.cocorobo.cn/ai_agent_park_chat", parm)
+					.then((res) => {
+						let result = res.data.FunctionResponse;
+						if(!result.message || result.message.indexOf('由于我无法直接访问您上传的文件内容')>-1){
+							this.loading = false;
+							resolve();
+							return this.$message.error(`${_data.title}无法生成`)
+						}
+						this.dataList.push({
+							id:assistant_id[result.title].value,
+							Type:assistant_id[result.title].type,
+							createTime:new Date(),
+							tId:this.tid,
+							tIndex:2,
+							jsonData:{
+								dataFileList:[],
+								fileList:[],
+								fileList2:[],
+								name:result.title,
+								result:result.message
+							}
+						})
+						resolve();
+						this.loading = false;
+					})
+					.catch((e) => {
+						this.$message.error(`${_data.title}无法生成`)
+						this.loading = false;
+						resolve();
+					});
 			});
-			this.dialogVisible = false;
-			// this.loading = this.tagIndex;
-			// setTimeout(()=>this.loading = '',4000)
 		},
-		getCurrencyAndBaseMessageData(){
+		getCurrencyAndBaseMessageData() {
 			let pram = {
-				// tid:this.tid,
-				tid:'01',
-				type:'0'
-			}
+				tid: this.tid,
+				// tid:'02',
+				type: "0",
+			};
 			this.currencyLoading = true;
-			this.ajax.post("https://gpt4.cocorobo.cn/get_classroom_observation_new",pram).then(res=>{
-				let _data = res.data.FunctionResponse.result.length?JSON.parse(res.data.FunctionResponse.result):[]
-				if(_data.length==0){
-					return this.currencyLoading = false;
-				}
-				let _bmData = _data[0]
-				// 基础信息
-				_bmData.jsonData = JSON.parse(_bmData.jsonData)
-				// 图片
-				let imageList = _data[1]
-				//通用分析 
-				let currency = []
-				for(let i = 2;i<_data.length;i++){
+			this.ajax
+				.post("https://gpt4.cocorobo.cn/get_classroom_observation_new", pram)
+				.then((res) => {
+					let _data = res.data.FunctionResponse.result.length
+						? JSON.parse(res.data.FunctionResponse.result)
+						: [];
+					if (_data.length == 0) {
+						return (this.currencyLoading = false);
+					}
+					let _bmData = _data[0];
+					// 基础信息
+					_bmData.jsonData = JSON.parse(_bmData.jsonData);
+					// 图片
+					let _imageList = _data[1];
+					_imageList.jsonData = JSON.parse(_imageList.jsonData);
+					//通用分析
+					let currency = [];
+					for (let i = 2; i < _data.length; i++) {
 						let _currency = _data[i];
-						_currency.jsonData = JSON.parse(_currency.jsonData)
-						currency.push(_currency)
-				}
+						_currency.jsonData = JSON.parse(_currency.jsonData);
+						currency.push(_currency);
+					}
 
-				this.dataList[0].push(...currency)
-				this.bmData = _bmData;
-				this.currencyLoading = false;
-			})
+					this.dataList.push(...currency);
+					this.bmData = _bmData;
+					this.imageList = _imageList;
+					this.currencyLoading = false;
+				});
 		},
-		getScienceData(){
+		getScienceData() {
 			let pram = {
-				// tid:this.tid,
-				tid:'01',
-				type:'1'
-			}
+				tid: this.tid,
+				// tid:'02',
+				type: "1",
+			};
 			this.scienceLoading = true;
-			this.ajax.post("https://gpt4.cocorobo.cn/get_classroom_observation_new",pram).then(res=>{
-				let _data = res.data.FunctionResponse.result.length?JSON.parse(res.data.FunctionResponse.result):[]
-				if(_data.length==0){
-					return this.scienceLoading = false;
-				}
-				let science = []
-				for(let i = 0;i<_data.length;i++){
+			this.ajax
+				.post("https://gpt4.cocorobo.cn/get_classroom_observation_new", pram)
+				.then((res) => {
+					let _data = res.data.FunctionResponse.result.length
+						? JSON.parse(res.data.FunctionResponse.result)
+						: [];
+					if (_data.length == 0) {
+						return (this.scienceLoading = false);
+					}
+					let science = [];
+					for (let i = 0; i < _data.length; i++) {
 						let _science = _data[i];
-						_science.jsonData = JSON.parse(_science.jsonData)
-						science.push(_science)
-				}
-				this.dataList[1].push(...science)
-				this.scienceLoading = false;
-			})
+						_science.jsonData = JSON.parse(_science.jsonData);
+						science.push(_science);
+					}
+					this.dataList.push(...science);
+					this.scienceLoading = false;
+				});
 		},
-		getExtendData(){
+		getExtendData() {
 			let pram = {
-				// tid:this.tid,
-				tid:'01',
-				type:'2'
-			}
+				tid: this.tid,
+				// tid:'02',
+				type: "2",
+			};
 			this.extendLoading = true;
-			this.ajax.post("https://gpt4.cocorobo.cn/get_classroom_observation_new",pram).then(res=>{
-				let _data = res.data.FunctionResponse.result.length?JSON.parse(res.data.FunctionResponse.result):[]
-				if(_data.length==0){
-					return this.extendLoading = false;
-				}
-				let extent = []
-				for(let i = 0;i<_data.length;i++){
+			this.ajax
+				.post("https://gpt4.cocorobo.cn/get_classroom_observation_new", pram)
+				.then((res) => {
+					let _data = res.data.FunctionResponse.result.length
+						? JSON.parse(res.data.FunctionResponse.result)
+						: [];
+					if (_data.length == 0) {
+						return (this.extendLoading = false);
+					}
+					let extent = [];
+					for (let i = 0; i < _data.length; i++) {
 						let _extent = _data[i];
-						_extent.jsonData = JSON.parse(_extent.jsonData)
-						extent.push(_extent)
-				}
-				this.dataList[2].push(...extent)
-				this.extendLoading = false;
-			})
+						_extent.jsonData = JSON.parse(_extent.jsonData);
+						extent.push(_extent);
+					}
+					this.dataList.push(...extent);
+					this.extendLoading = false;
+				});
+		},
+		getData() {
+			this.dataList = [];
+			this.getCurrencyAndBaseMessageData();
+			this.getScienceData();
+			this.getExtendData();
 		},
-		saveData(fn){
-			let saveDataList = []
+		saveData(fn) {
+			return;
+			let saveDataList = [];
 
 			// 保存基础信息
 			saveDataList.push({
-				id:this.bmData.id,
-				json_data:JSON.stringify(this.bmData.jsonData),
-			})
+				id: this.bmData.id,
+				json_data: JSON.stringify(this.bmData.jsonData),
+			});
 
 			// 所有分析
-			this.dataList.forEach(i1=>{
-				i1.forEach(i2=>{
+			this.dataList.forEach((i1) => {
+				i1.forEach((i2) => {
 					saveDataList.push({
-						id:i2.id,
-						json_data:JSON.stringify(i2.jsonData),
-					})
-				})
-			})
+						id: i2.id,
+						json_data: JSON.stringify(i2.jsonData),
+					});
+				});
+			});
 			let promises = [];
-			saveDataList.forEach(i=>{
-				promises.push(new Promise(resolve=>{
-					let pram = {
-						id:i.id,
-						json_data:i.json_data
-					}
-					this.ajax.post("https://gpt4.cocorobo.cn/update_classroom_observation",pram).then(res=>{
-						console.log(res)
-						resolve();
+			saveDataList.forEach((i) => {
+				promises.push(
+					new Promise((resolve) => {
+						let pram = {
+							id: i.id,
+							json_data: i.json_data,
+						};
+						this.ajax
+							.post(
+								"https://gpt4.cocorobo.cn/update_classroom_observation",
+								pram
+							)
+							.then((res) => {
+								console.log(res);
+								resolve();
+							});
 					})
-				}))
-			})
-
-			Promise.all(promises).then(res=>{
-				this.$message.success('保存成功');
-				fn?fn():'';
-			})
-		}
+				);
+			});
+
+			Promise.all(promises).then((res) => {
+				this.$message.success("保存成功");
+				fn ? fn() : "";
+			});
+		},
+	},
+	mounted() {
+		this.getData();
 	},
-	mounted(){
-		console.log(this.tid)
-		this.getCurrencyAndBaseMessageData()
-		this.getScienceData()
-		this.getExtendData()
-	}
 };
 </script>
 

+ 21 - 5
src/components/pages/classroomObservation/components/pieChart.vue

@@ -1,6 +1,6 @@
 <template>
-	<div class="chart">
-		<div>{{chartData}}</div>
+	<div class="chart" id="charts_canvas" ref="chartRef">
+		
 	</div>
 </template>
 
@@ -53,14 +53,29 @@ export default {
 	},
 	data() {
 		return {
-			chartData:{},
+			chartObj:null,
+			chartData:null,
 		};
 	},
 	methods: {
 		getChartData() {
 			if (!this.url) return;
+			
 			getFile(this.url).then(res=>{
-				this.chartData = res.data;
+				let _chartData = res.data;
+
+				// 去除option
+				_chartData = _chartData.replace('option = ','');
+				// 去除注释
+				_chartData = _chartData.replace(/\/\/.*$/gm, '');
+
+				_chartData = _chartData.replace(";", '');
+				this.chartData = JSON.parse(_chartData);
+				const _chartObj = this.$echarts.init(
+          this.$refs.chartRef
+        );
+				this.chartObj = _chartObj;
+				this.chartObj.setOption(this.chartData);
 			})
 		},
 	},
@@ -73,6 +88,7 @@ export default {
 <style scoped>
 .chart {
 	max-width: 100%;
-	height: 100%;
+	width: 100%;
+	height: 550px;
 }
 </style>

+ 12 - 95
src/components/pages/classroomObservation/components/scienceAnalysis.vue

@@ -13,110 +13,26 @@
 			</div>
 		</div>
 		<div class="a-main" v-show="showItem">
-			<analysisItem v-if="analysisItemList.length > 0" v-for="(item,index) in analysisItemList" :key="item.id" :data="item" :index="index" @delItem="delItem"/>
+			<analysisItem v-if="analysisItemList.length > 0" v-for="(item,index) in analysisItemList" :key="item.id" :data="item" :tid="tid" :index="index" @delItem="delItem" @editItem="editItem"/>
 			<div class="a_m_empty" v-if="analysisItemList.length == 0">暂无模块...</div>
 		</div>
-		<!-- <div v-if="showDialog == true" class="a-dialog" v-el-drag-dialog>
-			<div class="a-d-top">
-				<div class="a-d-topTit"><div style="width: 136px">添加模块</div></div>
-				<div>
-					<el-input
-						placeholder="请输入内容"
-						prefix-icon="el-icon-search"
-						v-model="input2"
-					>
-					</el-input>
-				</div>
-				<div class="a-d-t-right">
-					<span @click.stop="showDialog = false">×</span>
-				</div>
-			</div>
-			<div style="display: flex; height: 100%">
-				<div class="a-d-t-left">
-					<div class="itemTit">我的模块</div>
-					<div
-						:style="
-							tagIndex == index
-								? 'background: rgba(226, 238, 255, 1);color: rgba(54, 129, 252, 1)'
-								: ''
-						"
-						class="a-d-t-l-item"
-						v-for="(item, index) in dialogTagList"
-						:key="item.id"
-						@click.stop="tagIndex = index"
-					>
-						{{ item.name }}
-					</div>
-				</div>
-				<div class="a-d-box">
-					<div
-						style="
-							font-family: PingFang SC;
-							font-size: 16px;
-							font-weight: 600;
-							line-height: 22px;
-							text-align: left;
-							margin: 20px 0;
-							margin-bottom: 10px;
-						"
-					>
-						推荐
-					</div>
-					<div
-						style="
-							display: flex;
-							justify-content: space-between;
-							flex-wrap: wrap;
-						"
-					>
-						<div
-							class="a-d-b-item"
-							v-for="(item, index) in dialogTagDataList[tagIndex]"
-							:key="index"
-						>
-							<div class="a-d-b-i-top">
-								<img
-									style="height: 22px; width: 22px"
-									:src="
-										require('../../../../assets/icon/classroomObservation/digImg.png')
-									"
-								/>
-								<div class="a-d-b-i-t-title">{{ item.title }}</div>
-							</div>
-							<div class="a-d-b-i-bottom">{{ item.brief }}</div>
-							<div class="a-d-b-i-bottomPer" style="display: block">
-								3982人已使用
-							</div>
-							<div class="a-d-b-i-bottomBtn" style="display: none">
-								<div
-									style="
-										display: flex;
-										width: 100%;
-										justify-content: space-around;
-									"
-								>
-									<div class="a-d-b-i-t-btn">详情</div>
-									<div class="a-d-b-i-t-btn1">添加</div>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div> -->
 	</div>
 </template>
 
 <script>
 import analysisItem from "./analysisItem";
 export default {
-	emits:["delItem"],
+	emits:["delItem","editItem"],
 	props:{
 		analysisItemList:{
 			type:Array,
 			default:()=>{
 				return []
 			}
+		},
+		tid:{
+			type:String,
+			require:true,
 		}
 	},
 	components: {
@@ -140,11 +56,12 @@ export default {
 		changeShowItem(newValue) {
 			this.showItem = newValue;
 		},
-		delItem(index){
-			this.$emit("delItem",this.tagIndex,index)
-			// this.analysisList.splice(index,1)
-			// this.$message.success("删除成功");
-		}
+		delItem(id){
+			this.$emit("delItem",id)
+		},
+		editItem(id,_data){
+			this.$emit("editItem",id,_data)
+		},
 	},
 };
 </script>

+ 43 - 14
src/components/pages/classroomObservation/index.vue

@@ -79,16 +79,19 @@ export default {
 			loading: false,
 			tid:'03',
 			optionData:[
-				{label:"03课",value:'03'},
-				{label:"04课",value:'04'},
+				{label:"03课",value:'03'},
+				{label:"04课",value:'04'},
 			],
 		};
 	},
 	methods: {
 		//切换了课堂
-		changeTid(){
-			console.log(this.tid)
-			this.$message.info(`切换了课堂:${this.tid}`)
+		changeTid(newValue){
+			// console.log(this.tid)
+			// console.log(newValue)
+			this.$nextTick(()=>{
+				this.$refs.messageAreaRef.getData();
+			})
 		},
 		// 跳转
 		goTo(path) {
@@ -96,15 +99,41 @@ export default {
 		},
 		// 生成报告
 		getReport() {
-			// this.loading = true;
-			this.loading = true;
-			this.$refs.messageAreaRef.saveData(()=>{
-				this.loading = false;
-			});
-			// setTimeout(() => {
-			// 	this.$message.success("生成成功");
-			// 	this.loading = false;
-			// }, 5000);
+			let assistant_title = [
+				"课堂观察",
+				"教学阶段九事件分析",
+				"OMO智慧课堂分析",
+				"布鲁姆问题分类",
+				"麦克锡问题分类",
+				"学生回答统计",
+				"课堂活动类型",
+				"素养目标分析",
+				"科学教育目标分析",
+				"5E课程改编",
+				"5EX课程改编",
+				"UTOP课程观察",
+				"RST模型",
+				"RTOP模型",
+				"课堂质量评价",
+				"scop课堂观察",
+				"rtop课堂观察",
+			]
+			let _index = 0;
+			let _this = this;
+			function addValue(){
+				_this.$refs.messageAreaRef.addAnalysisItem({title:assistant_title[_index]}).then(_=>{
+					_index+=1;
+					if(_index<assistant_title.length){
+							addValue()
+					}
+				}).catch(_=>{
+					_index+=1;
+					if(_index<assistant_title.length){
+						addValue()
+					}
+				})
+			}
+			addValue()
 		},
 		//预览
 		preview() {