소스 검색

课堂观察

SanHQin 1 년 전
부모
커밋
0fc52dda01

+ 5 - 1
src/common/axios.config.js

@@ -23,7 +23,11 @@ axios.interceptors.request.use((config) => {
     // }
     if(config.url === 'https://gpt.cocorobo.cn/search_image' || config.url === 'https://gpt.cocorobo.cn/chat' || config.url === 'https://gpt4.cocorobo.cn/create_free_assistants' || config.url === 'https://gpt4.cocorobo.cn/assistants_completion_response') {
         config.data = config.data//序列化post 参数
-    } else if (config.data && config.data[0].post == '1' && config.method === 'post') {
+    }else if(config.url.indexOf('https://gpt4.cocorobo.cn/')!=-1){
+			config.headers = {
+				'Content-Type': 'application/json',
+		}
+		}else if (config.data && config.data[0].post == '1' && config.method === 'post') {
         config.data = 'mode=' + (Object.values(config.data[0]).join(','))//序列化post 参数
     } else if (config.method === 'post') {
 

+ 4 - 6
src/components/pages/classroomObservation/components/analysisItem.vue

@@ -5,7 +5,7 @@
 				<span
 					:class="['ai-h-l-icon', openItem ? 'ai-h-l-iconActive' : '']"
 				></span>
-				<span class="ai-h-l-text">{{ data.title }}</span>
+				<span class="ai-h-l-text">{{ data.jsonData.name }}</span>
 			</div>
 			<div class="ai-h-right">
 				<!-- <span class="ai-h-r-icon1" @click.stop="backLeft()"></span> -->
@@ -25,11 +25,9 @@
 			</div> -->
 
 			<div class="a-m-brief">
-				{{
-					data.title
-				}}分析图表描述了9个关键步骤,帮助教师设计有效教学并促进学生学习。它涵盖引起注意、呈现信息、引导练习等环节,确保学生掌握知识并能运用所学。
+				{{ data.jsonData.result }}
 			</div>
-			<p style="margin: 10px 0">
+			<!-- <p style="margin: 10px 0">
 				该课程设计紧密遵循了{{
 					data.title
 				}}理论,特别是在引起注意、提供学习指导、促进表现、提供反馈和增强保持和迁移方面做得较为突出。课程通过引人入胜的新闻引入、分组讨论、实地调查和数据计算等多种方式,有效地吸引了学生的注意力,激发了学生的学习兴趣,促进了学生的主动学习和深入思考。
@@ -123,7 +121,7 @@
 			</table>
 			<p style="margin-top: 10px">
 				建议未来的课程设计可以进一步强化对学习目标的明确告知和评估表现的环节,以确保学生对学习成果有清晰的认识,同时通过更多样化的评估方式来检验学习效果。
-			</p>
+			</p> -->
 			<!-- <img src="https://s3-alpha-sig.figma.com/img/719a/101b/0eb2f1ec890d08098f77e24a3b439a5f?Expires=1714348800&Key-Pair-Id=APKAQ4GOSFWCVNEHN3O4&Signature=k~x0ZFu7OCJ7260cD8vH-PKLIg9hKpdCRUphSqBc5xJC2nxO5vcOZulwOsINPimQVlLpmxUtXGv-k8BYl8Qz0dMOD-HS3sfdZmLviC1PhvQ-vJvXg9IC4crPanqi31dfoWN6lEACN8MWJZVIc3bp013dQ2MjK2jQD7LROaoaceuuThlVvjggQR1mbAtK03KwgAqCxjVz9hT730xon-Dsvym4EX4iEl7L9pdXVTiFN0rNnpD6WqcjSHnI12h3MF42STF8BrzjDFjXHpB-cx-xIbI-SGFM5DlnJGUC2GX~cOrz~wk5hTmx~uJm9jnnj2~SXKY6WbvB6QrxddzXX06Puw__" style="max-width:100%"> -->
 			<!-- <div class="a-m-content">该课程设计紧密遵循了{{data.title}}理论,特别是在引起注意、提供学习指导、促进表现、提供反馈和增强保持和迁移方面做得较为突出。课程通过引人入胜的新闻引入、分组讨论、实地调查和数据计算等多种方式,有效地吸引了学生的注意力,激发了学生的学习兴趣,促进了学生的主动学习和深入思考。</div> -->
 

+ 14 - 6
src/components/pages/classroomObservation/components/baseMessage.vue

@@ -10,7 +10,7 @@
 					<div class="m-m-fi-label">课程名称</div>
 					<div class="m-m-fi-input">
 						<el-input
-							v-model="from.courseName"
+							v-model="data.courseName"
 							placeholder="请输入课程名称"
 						></el-input>
 					</div>
@@ -20,7 +20,7 @@
 					<div class="m-m-formItemBot">
 						<div class="m-m-fi-label">授课年级</div>
 						<div class="m-m-fi-input">
-							<el-select v-model="from.grade" placeholder="请选择年级">
+							<el-select v-model="data.grade" placeholder="请选择年级">
 								<el-option
 									v-for="(item, index) in gradeList"
 									:key="index"
@@ -34,7 +34,7 @@
 					<div class="m-m-formItemBot">
 						<div class="m-m-fi-label">授课科目</div>
 						<div class="m-m-fi-input">
-							<el-select v-model="from.subject" placeholder="请选择年级">
+							<el-select v-model="data.subject" placeholder="请选择年级">
 								<el-option
 									v-for="(item, index) in subjectList"
 									:key="index"
@@ -49,7 +49,7 @@
 						<div class="m-m-fi-label">授课班级</div>
 						<div class="m-m-fi-input">
 							<el-input
-								v-model="from.class"
+								v-model="data.class"
 								placeholder="请输入班级"
 							></el-input>
 						</div>
@@ -63,7 +63,7 @@
 					<div class="m-m-fi-label">授课老师</div>
 					<div class="m-m-fi-input">
 						<el-input
-							v-model="from.teacherName"
+							v-model="data.teacherName"
 							placeholder="请输入授课老师"
 						></el-input>
 					</div>
@@ -73,7 +73,7 @@
 					<div class="m-m-fi-label">学生人数</div>
 					<div class="m-m-fi-input">
 						<el-input
-							v-model.number="from.studentNum"
+							v-model.number="data.studentNum"
 							placeholder="请输入学生人数"
 						></el-input>
 					</div>
@@ -148,6 +148,14 @@
 
 <script>
 export default {
+	props:{
+		data:{
+			type:Object,
+			default:()=>{
+				return {}
+			}
+		}
+	},
 	data() {
 		return {
 			title: "基本信息",

+ 7 - 1
src/components/pages/classroomObservation/components/chatArea.vue

@@ -59,7 +59,7 @@
 								class="ca-b-o-h-s-l-text"
 								@click.stop="languageShow = !languageShow"
 							>
-								设置
+								{{ languageList.find(i=>i.label == languageRadio).lang }}
 							</div>
 
 							<div
@@ -342,6 +342,12 @@ export default {
 直接填埋这种方法会占用大量土地,而且还会污染土地,焚烧发电这种方法会会污_
 `,
 			},
+			/* [
+				{
+					time:'00:01'k,
+					content:''
+				}
+			]*/
 			chatList: [
 				{
 					role: "ai",

+ 4 - 4
src/components/pages/classroomObservation/components/currencyAnalysis.vue

@@ -22,6 +22,7 @@
 <script>
 import analysisItem from "./analysisItem";
 export default {
+	emits:["delItem"],
 	props: {
 		analysisItemList:{
 			type:Array,
@@ -39,8 +40,6 @@ export default {
 			showDialog: false,
 			showItem: true,
 			tagIndex: 0,
-
-			analysisList: [],
 		};
 	},
 	methods: {
@@ -51,8 +50,9 @@ export default {
 			this.showItem = newValue;
 		},
 		delItem(index){
-			this.analysisList.splice(index,1)
-			this.$message.success("删除成功");
+			this.$emit("delItem",this.tagIndex,index)
+			// this.analysisList.splice(index,1)
+			// this.$message.success("删除成功");
 		}
 	},
 };

+ 5 - 3
src/components/pages/classroomObservation/components/extendAnalysis.vue

@@ -110,6 +110,7 @@
 <script>
 import analysisItem from "./analysisItem";
 export default {
+	emits:["delItem"],
 	props:{
 		analysisItemList:{
 			type:Array,
@@ -139,9 +140,10 @@ export default {
 		changeShowItem(newValue) {
 			this.showItem = newValue;
 		},
-		delItem(id){
-			this.analysisList.splice(index,1)
-			this.$message.success("删除成功");
+		delItem(index){
+			this.$emit("delItem",this.tagIndex,index)
+			// this.analysisList.splice(index,1)
+			// this.$message.success("删除成功");
 		}
 	},
 };

+ 147 - 31
src/components/pages/classroomObservation/components/messageArea.vue

@@ -18,25 +18,31 @@
 			<div class="m-o-btn" @click.stop="saveAsTemplate()">另存为模板</div>
 		</div>
 		<div class="ma-main">
-			<baseMessage />
+			<baseMessage :data="bmData.jsonData"	v-loading="currencyLoading"/>
 
 			<currencyAnalysis
 				@updateMessage="updateMessage"
-				:analysisItemList="analysisItemList[0]"
+				@delItem="delAnalysisItem"
+				:analysisItemList="dataList[0]"
+				v-loading="currencyLoading"
 			/>
 
 			<scienceAnalysis
 				@updateMessage="updateMessage"
-				:analysisItemList="analysisItemList[1]"
+				@delItem="delAnalysisItem"
+				:analysisItemList="dataList[1]"
+				v-loading="scienceLoading"
 			/>
 
 			<extendAnalysis
 				@updateMessage="updateMessage"
-				:analysisItemList="analysisItemList[2]"
+				@delItem="delAnalysisItem"
+				:analysisItemList="dataList[2]"
+				v-loading="extendLoading"
 			/>
 			<!-- <div style="height: 10000px;"></div> -->
 		</div>
-		<el-dialog :visible.sync="dialogVisible" width="1200px" close-on-click-modal="true" :before-close="handleClose">
+		<el-dialog :center="true" :visible.sync="dialogVisible" width="1200px">
 			<!-- <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>
@@ -83,12 +89,7 @@
 					>
 						推荐
 					</div>
-					<div
-						style="
-							display: flex;
-							flex-wrap: wrap;
-						"
-					>
+					<div style="display: flex; flex-wrap: wrap">
 						<div
 							class="a-d-b-item"
 							v-for="(item, index) in dialogTagDataList[tagIndex]"
@@ -150,10 +151,14 @@ export default {
 			showBrief: true, //是否显示模块简介
 			dialogVisible: false,
 			tagIndex: 0,
-			input2:'',
+			loading: "",
+			currencyLoading:false,
+			scienceLoading:false,
+			extendLoading:false,
+			input2:"",
 			dialogTagList: [
 				{ id: 1, name: "通用课堂分析" },
-				{ id: 2, name: "学科课堂分析" },
+				{ id: 2, name: "科课堂分析" },
 				{ id: 3, name: "扩展分析" },
 			],
 			dialogTagDataList: [
@@ -799,32 +804,36 @@ BSCS 5E教学模型是一种广泛应用于科学教育的教学策略,它鼓
 					},
 				],
 			],
-			analysisItemList:[
-				[//通用课堂分析
-
+			bmData:{},
+			dataList: [
+				[
+					//通用课堂分析
 				],
-				[//学科课堂分析
-
+				[
+					//学科课堂分析
 				],
-				[//扩展分析
-
+				[
+					//扩展分析
 				],
 			],
 		};
 	},
 	methods: {
+		delAnalysisItem(tag,index){
+			this.dataList[tag].splice(index,1);
+			this.$message.success("删除成功")
+		},
 		updateMessage(val) {
 			// console.log(val);
 			this.dialogVisible = true;
 			this.tagIndex = val;
 		},
 		handleClose(done) {
-			// this.$confirm("确认关闭?")
-			// 	.then((_) => {
-			// 		done();
-			// 	})
-			// 	.catch((_) => {});
-			this.dialogVisible = false;
+			this.$confirm("确认关闭?")
+				.then((_) => {
+					done();
+				})
+				.catch((_) => {});
 		},
 		// 切换显示模板简介
 		changeShowBrief(newValue) {
@@ -839,14 +848,121 @@ BSCS 5E教学模型是一种广泛应用于科学教育的教学策略,它鼓
 			this.$message.info("另存为模板");
 		},
 		addAnalysisItem(_data) {
-			this.analysisItemList[this.tagIndex].push({
-				title:_data.title,
-				brief:_data.brief,
-				cueWord:_data.cueWord,
-			})
+			this.dataList[this.tagIndex].push({
+				title: _data.title,
+				brief: _data.brief,
+				cueWord: _data.cueWord,
+			});
 			this.dialogVisible = false;
+			// this.loading = this.tagIndex;
+			// setTimeout(()=>this.loading = '',4000)
 		},
+		getCurrencyAndBaseMessageData(){
+			let pram = {
+				tid:"01",
+				type:'0'
+			}
+			this.currencyLoading = true;
+			this.ajax.post("https://gpt4.cocorobo.cn/get_classroom_observation_new",pram).then(res=>{
+				let _data = JSON.parse(res.data.FunctionResponse.result)
+				let _bmData = _data[0]
+				// 基础信息
+				_bmData.jsonData = JSON.parse(_bmData.jsonData)
+				// 图片
+				let imageList = _data[1]
+				//通用分析 
+				let currency = []
+				for(let i = 2;i<_data.length;i++){
+						let _currency = _data[i];
+						_currency.jsonData = JSON.parse(_currency.jsonData)
+						currency.push(_currency)
+				}
+				this.dataList[0].push(...currency)
+				this.bmData = _bmData;
+				this.currencyLoading = false;
+			})
+		},
+		getScienceData(){
+			let pram = {
+				tid:"01",
+				type:'1'
+			}
+			this.scienceLoading = true;
+			this.ajax.post("https://gpt4.cocorobo.cn/get_classroom_observation_new",pram).then(res=>{
+				console.log('👇科学分析👇')
+				let _data = JSON.parse(res.data.FunctionResponse.result)
+				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;
+			})
+		},
+		getExtendData(){
+			let pram = {
+				tid:"01",
+				type:'2'
+			}
+			this.extendLoading = true;
+			this.ajax.post("https://gpt4.cocorobo.cn/get_classroom_observation_new",pram).then(res=>{
+				console.log('👇扩展分析👇')
+				let _data = JSON.parse(res.data.FunctionResponse.result)
+				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;
+			})
+		},
+		saveData(fn){
+			let saveDataList = []
+
+			// 保存基础信息
+			saveDataList.push({
+				id:this.bmData.id,
+				json_data:JSON.stringify(this.bmData.jsonData),
+			})
+
+			// 所有分析
+			this.dataList.forEach(i1=>{
+				i1.forEach(i2=>{
+					saveDataList.push({
+						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();
+					})
+				}))
+			})
+
+			Promise.all(promises).then(res=>{
+				this.$message.success('保存成功');
+				fn?fn():'';
+			})
+		}
 	},
+	mounted(){
+		this.getCurrencyAndBaseMessageData()
+		this.getScienceData()
+		this.getExtendData()
+	}
 };
 </script>
 

+ 5 - 3
src/components/pages/classroomObservation/components/scienceAnalysis.vue

@@ -110,6 +110,7 @@
 <script>
 import analysisItem from "./analysisItem";
 export default {
+	emits:["delItem"],
 	props:{
 		analysisItemList:{
 			type:Array,
@@ -123,7 +124,7 @@ export default {
 	},
 	data() {
 		return {
-			title: "科课堂分析",
+			title: "科课堂分析",
 			showDialog: false,
 			showItem: true,
 			tagIndex: 1,
@@ -140,8 +141,9 @@ export default {
 			this.showItem = newValue;
 		},
 		delItem(index){
-			this.analysisList.splice(index,1)
-			this.$message.success("删除成功");
+			this.$emit("delItem",this.tagIndex,index)
+			// this.analysisList.splice(index,1)
+			// this.$message.success("删除成功");
 		}
 	},
 };

+ 8 - 5
src/components/pages/classroomObservation/index.vue

@@ -48,7 +48,7 @@
 				<chatArea />
 			</div>
 			<div class="co-m-right">
-				<messageArea />
+				<messageArea ref="messageAreaRef"/>
 			</div>
 		</div>
 	</div>
@@ -77,12 +77,15 @@ export default {
 		},
 		// 生成报告
 		getReport() {
+			// this.loading = true;
 			this.loading = true;
-
-			setTimeout(() => {
-				this.$message.success("生成成功");
+			this.$refs.messageAreaRef.saveData(()=>{
 				this.loading = false;
-			}, 5000);
+			});
+			// setTimeout(() => {
+			// 	this.$message.success("生成成功");
+			// 	this.loading = false;
+			// }, 5000);
 		},
 		//预览
 		preview() {