SanHQin 10 kuukautta sitten
vanhempi
commit
ed30389251

+ 1 - 0
package.json

@@ -29,6 +29,7 @@
     "nprogress": "^0.2.0",
     "opencc-js": "^1.0.5",
     "papaparse": "^5.4.1",
+    "qrcodejs2": "0.0.2",
     "regenerator-runtime": "^0.13.5",
     "vant": "^2.12.7",
     "vconsole": "^3.3.4",

+ 72 - 103
src/views/classObserve/addTel.vue

@@ -1,19 +1,18 @@
 <template>
-  <div class="stencilled">
-    <bar @cutPage="cutPage" :tit="'添加模块'" :backPage="0"></bar>
-    <div style="height: 55px;width: 100%;"></div>
+  <div class="stencilled" v-if="show">
+    <bar @cutPage="close()" :tit="'添加模块'" :backPage="0" style="z-index: 1000;"></bar>
     <div class="selectInp">
       <van-search shape="round" v-model="selectValue" placeholder="搜索表单" />
       <span>搜索</span>
     </div>
     <div class="sortList">
-      <div>通用</div>
-      <div>学科</div>
-      <div>扩展</div>
+      <div :class="[showIndex == 0 ? 'sl_active' : '']" @click.stop="showIndex = 0">通用</div>
+      <div :class="[showIndex == 1 ? 'sl_active' : '']" @click.stop="showIndex = 1">学科</div>
+      <div :class="[showIndex == 2 ? 'sl_active' : '']" @click.stop="showIndex = 2">扩展</div>
     </div>
     <div class="stencilList">
-      <div style="margin-bottom: 15px;" v-for="item in 10" :key="item">
-        <addStencil></addStencil>
+      <div style="margin-bottom: 15px;" v-for="(item, index) in showDataList" :key="item.value+index">
+        <addStencil :data="item" :isChoice="choiceList.includes(item.value)"></addStencil>
       </div>
     </div>
     <!-- <div class="stencilList">
@@ -27,131 +26,85 @@
       </div>
     </div> -->
     <div class="botBtn">
-      <div class="btn">
-        添加()
+      <div :class="['btn', choiceList.length == 0 ? 'b_disabled' : '']" @click.stop="addYes">
+        添加({{ choiceList.length }})
       </div>
     </div>
-
-    <div style="height: 50px;width: 100%;"></div>
   </div>
 </template>
 
 <script>
 import bar from './components/bar.vue'
 import addStencil from './components/addStencil'
-
+import { Dialog } from 'vant'
 export default {
   components: {
     bar,
     addStencil
   },
   props: {
-    page: {
-      type: Number,
-      default: 1,
-			tagIndex:0,
+    data: {
+      type: Array,
+      default: () => []
+    }
+  },
+  computed: {
+    showDataList() {
+      let result = []
+      result = this.data.filter(i => {
+        return i.type == this.showIndex && i.title.indexOf(this.selectValue) != -1
+      })
+      return result
     }
   },
   data() {
     return {
       selectValue: '',
-			dataList:[],
-			tagSubject:"",
+      dataList: [],
+      tagSubject: '',
+      show: false,
+      showIndex: 0,
+      choiceList: []
     }
   },
   methods: {
-    cutPage() {
-      this.$emit('cutPage', 6)
+    open(index = 0) {
+      this.show = true
+			this.showIndex = index;
+			this.choiceList = [];
     },
-		getMyselfData() {
-			this.loading = true;
-			this.templateData = [];
-			let params = {
-				uid: this.userId,
-				txt: this.text,
-				sub: this.tagSubject,
-				type1: 1,
-			};
-			this.ajax
-				.get(this.$store.state.api + "selectClassroomTemplate", params)
-				.then((res) => {
-					let _data = res.data[0];
-					this.templateData = _data;
-				})
-				.catch((e) => {
-					console.log(e);
-					this.$message.error("获取数据失败");
-				})
-				.finally(() => {
-					this.loading = false;
-				});
-		},
-		getCollectData(flag = true) {
-			this.loading = true;
-			if (flag) {
-				this.templateData = [];
-			}
-			let params = {
-				uid: this.userId,
-				txt: this.selectValue,
-				sub: this.tagSubject,
-				type1: 2,
-			};
-			this.ajax
-				.get(this.$store.state.api + "selectClassroomTemplate", params)
-				.then((res) => {
-					let _data = res.data[0];
-					if (flag) {
-						this.templateData = _data;
-					}
-					this.collectData = _data;
-				})
-				.catch((e) => {
-					console.log(e);
-					this.$message.error("获取数据失败");
-				})
-				.finally(() => {
-					this.loading = false;
-				});
-		},
-		getPublicData() {
-			this.loading = true;
-			this.templateData = [];
-			let params = {
-				uid: this.userId,
-				txt: this.text,
-				sub: this.tagSubject,
-				type1: 0,
-			};
-			this.ajax
-				.get(this.$store.state.api + "selectClassroomTemplate", params)
-				.then((res) => {
-					let _data = res.data[0];
-					this.templateData = _data;
-				})
-				.catch((e) => {
-					console.log(e);
-					this.$message.error("获取数据失败");
-				})
-				.finally(() => {
-					this.loading = false;
-				});
-		},
-		getData() {
-			if (this.tagIndex == 0) {
-				this.getPublicData();
-			} else if (this.tagIndex == 1) {
-				this.getMyselfData();
-			} else if (this.tagIndex == 2) {
-				this.getCollectData();
+    close() {
+      this.show = false
+    },
+    addYes() {
+      if (this.choiceList.length == 0) return this.$toast('请选择你需要添加的分析')
+      Dialog.confirm({
+        title: '确定添加分析',
+        message: `确定添加 ${this.choiceList.length} 个分析吗?`
+      })
+        .then(_ => {
+					this.$emit("success",this.choiceList);
+        })
+        .catch(_ => {
+          console.log('不添加')
+        })
+    },
+		addChoice(id){
+			if(this.choiceList.includes(id)){
+				this.choiceList = this.choiceList.filter(i => i != id)
+			}else{
+				this.choiceList.push(id)
 			}
 		},
+  },
+  mounted() {
+    this.dataList = JSON.parse(JSON.stringify(this.data))
   }
 }
 </script>
 
 <style lang="scss" scoped>
-.actionTel {
+.stencilled {
   height: 100% !important;
   // height: 500px;
   display: flex;
@@ -159,6 +112,14 @@ export default {
   justify-content: space-between;
   // padding: 10px 15px;
   box-sizing: border-box;
+  position: fixed;
+  width: 100vw;
+  height: 100vh;
+  top: 0;
+  left: 0;
+  z-index: 1000;
+  background-color: #fff;
+  padding-top: 55px;
   .telCon {
     flex: 1;
     overflow: auto;
@@ -258,6 +219,10 @@ export default {
     justify-content: center;
     border-left: 0.5px rgba(231, 231, 231, 1) solid;
   }
+  .sl_active {
+    color: rgba(54, 129, 252, 1);
+    font-weight: bold;
+  }
 }
 .stencilList {
   flex: 1;
@@ -284,6 +249,10 @@ export default {
     justify-content: center;
     align-items: center;
   }
+  .b_disabled {
+    background-color: #ccc;
+    color: #fff;
+  }
 }
 .actionCon {
   height: 100% !important;

+ 16 - 6
src/views/classObserve/components/addStencil.vue

@@ -1,22 +1,32 @@
 <template>
-    <div class="stencilledCon">
+    <div class="stencilledCon" @click.stop="$parent.addChoice(data.value)">
       <div class="top">
-        <div class="tit">OMO智慧课堂分析</div>
+        <div class="tit" v-text="data.title"></div>
         <div class="btn">
-          <img src="../../../assets/images/classObserve/Selected.png" alt="" />
+          <img src="../../../assets/images/classObserve/Selected.png" alt="" v-if="isChoice"/>
         </div>
       </div>
-      <div class="con">
-        针对性分析科学课堂,包含通用分析模块以及科学学科分析模块,并采用5E和5EX课程设计模型对课堂进行改编。
+      <div class="con" v-text="data.brief">
+        
       </div>
       <div class="bom">
-        <div>14人已使用</div>
+        <div>{{data.sum}}人已使用</div>
       </div>
     </div>
   </template>
   
   <script>
   export default {
+		props:{
+			data:{
+				type:Object,
+				default:()=>{}
+			},
+			isChoice:{
+				type:Boolean,
+				default:false
+			}
+		},
     data() {
       return {}
     },

+ 243 - 1
src/views/classObserve/components/analysisItem.vue

@@ -136,6 +136,7 @@ export default {
 				}
 			let _msg = `使用文件检索的方式完整的去分析文件内容,并请完全按照要求输出。`
 
+			if(['st1','st2','st3'].includes(assistant.value))return this.optimize2(assistant.value)
 			if(assistant.value=='6b4a9650-48be-11ef-936b-12e77c4cb76b'){
 					_msg  = `使用文件检索的方式完整的去分析文件内容,并基于以下的课堂基本内容,使用cpote课程设计模型改编一堂同主题的课程。
 课堂名称:${this.bmData.courseName}  搜课年级:${this.bmData.grade}  授课科目:${this.bmData.subject}`
@@ -174,6 +175,242 @@ export default {
 				})
 				
     },
+		optimize2(value){
+			this.status = 2;
+			return console.log('特殊处理');
+			if(this.bmData.jsonData.editorBarData.type != 0){
+				this.status = 2;
+				return this.$toast.fail("请上传表格形式的转录文稿");
+			}
+			try {
+				let _result = [];
+				let _data = this.bmData.jsonData.editorBarData.content;
+				let _div = document.createElement("div");
+				_div.innerHTML = _data;
+				let _tableRows = _div.querySelectorAll(`table tbody tr`);
+				_tableRows.forEach((i, index) => {
+					if (index == 0) return;
+					if(!i.cells[0].innerText)return;
+					let obj = {
+						index: i.cells[0].innerText,
+						startTime: i.cells[1].innerText,
+						endTime: i.cells[2].innerText,
+						message: i.cells[3].innerText,
+						time: i.cells[4].innerText,
+						role: i.cells[5].innerText,
+						behavior: i.cells[6].innerText,
+					};
+					_result.push(obj);
+				});
+				if (_result.length == 0){
+					this.status = 2;
+					return this.$toast.fail("未找到表格数据")
+				};
+				if (value=='st1') {
+					this.getTimeAllocationData(_result);
+				} else if (value=='st2') {
+					this.getInteractionAnalysisData(_result);
+				} else if (value=='st3') {
+					this.getTeachingModeData(_result);
+				} else {
+					this.status = 2;
+					return this.$toast.fail("未找到对应的分析");
+				}
+			} catch (e) {
+				console.log(e)
+				return this.status = 2;
+			}
+		},
+		// 课堂时间分配
+		getTimeAllocationData(_dataList) {
+			this.status = 1;
+			let _data = _dataList.reduce((pre,cur)=>{
+				if(cur.role == '学生'){
+					pre[1].value += this.convertToSeconds(cur.time)
+				}else if(cur.role=='老师'){
+					pre[0].value += this.convertToSeconds(cur.time)
+				}
+				return pre;
+			},[
+				{value:0,name:"老师"},
+				{value:0,name:'学生'}
+			])
+			const _option = {
+				tooltip: {
+					trigger: "item",
+					formatter: "{a} <br/>{b}: {d}%"  // {a}为系列名,{b}为数据名,{d}为百分比
+				},
+				legend: {
+					top: "5%",
+					left: "center",
+				},
+				series: [
+					{
+						name: "课堂时间分配",
+						type: "pie",
+						radius: ["40%", "70%"],
+						avoidLabelOverlap: false,
+						label: {
+							show: false,
+							position: "center",
+						},
+						emphasis: {
+							label: {
+								show: true,
+								fontSize: 40,
+								fontWeight: "bold",
+								// formatter: "{b}: {d}%"  // 显示百分比
+							},
+						},
+						labelLine: {
+							show: false,
+						},
+						data: _data
+					},
+				],
+			};
+			let _copyData = JSON.parse(JSON.stringify(this.data));
+			_copyData.jsonData.eChartData = _option;
+			_copyData.json_data = JSON.stringify(_copyData.jsonData);
+			if (this.history.length == 0) {
+				this.history.push(_copyData.jsonData);
+			} else {
+				this.history.splice(this.historyIndex + 1, 0, _copyData.jsonData);
+			}
+			this.up();
+			this.status = 3;
+		},
+		// 师生互动分析
+		getInteractionAnalysisData(_dataList) {
+			this.status = 1;
+			let _pushData = [0,0]
+			let _result = []
+			_dataList.forEach(i=>{
+				if(i.role=='老师'){
+					_pushData[0] += this.convertToSeconds(i.time)
+				}else if(i.role=='学生'){
+					_pushData[1] += this.convertToSeconds(i.time)
+				}
+				return _result.push(JSON.parse(JSON.stringify(_pushData)))
+			})
+			let _flatArray = _result.flat();
+			const _max = Math.max(..._flatArray)
+			const _maxValue =Math.ceil(_max / 100) * 100;
+			const _option = {
+				xAxis: {
+					name: "老师", // X轴标题
+					nameLocation: "end", // 标题位置
+					scale: true,
+        	min: 0,
+					max:_maxValue
+				},
+				yAxis: {
+					name: "学生", // Y轴标题
+					nameLocation: "end", // 标题位置
+					scale: true,
+        	min: 0,
+					max:_maxValue
+				},
+				grid: {
+        	containLabel: true
+    		},
+				series: [
+					{
+						name: "数据",
+            step: "start",
+						data: _result,
+						type: "line",
+						
+					},
+					{
+            name: "对角线",
+            type: "line",
+            data: [[0, 0], [_maxValue, _maxValue]],
+            lineStyle: {
+                type: "dashed"
+            },
+            markLine: {
+                "symbol": ["none", "none"]
+            }
+        }
+				],
+			};
+
+			let _copyData = JSON.parse(JSON.stringify(this.data));
+			_copyData.jsonData.eChartData = _option;
+			_copyData.json_data = JSON.stringify(_copyData.jsonData);
+			if (this.history.length == 0) {
+				this.history.push(_copyData.jsonData);
+			} else {
+				this.history.splice(this.historyIndex + 1, 0, _copyData.jsonData);
+			}
+			this.up();
+			this.status = 3;
+
+		},
+		// 教学模式分析
+		getTeachingModeData(_dataList) {
+			this.status = 1;
+			let _continuousTime = 0;
+			let _totalTime = 0;
+			let _continuousRole = "老师"
+			let _teacherTime = 0;
+			console.log(_dataList)
+			_dataList.forEach((item,index)=>{
+				if(index==0){//第一个
+					_continuousRole = item.role
+				}else if(_dataList.length-1==index){//最后一个
+					if(_continuousRole==item.role){//连续对话了
+						_continuousTime += this.convertToSeconds(_dataList[index-1].time)
+						_continuousTime += this.convertToSeconds(item.time)
+					}else{//没连续对话
+						if(index>=2){
+							if(_dataList[index-2].role==_dataList[index-1].role){
+								_continuousTime += this.convertToSeconds(_dataList[index-1].time)
+							}else{
+								_continuousRole = item.role;
+							}
+						}else{
+							_continuousRole = item.role;
+						}
+					}
+				}else{
+					if(_continuousRole==item.role){//连续对话了
+						_continuousTime += this.convertToSeconds(_dataList[index-1].time)
+					}else{//没连续对话
+						if(index>=2){
+							if(_dataList[index-2].role==_dataList[index-1].role){
+								_continuousTime += this.convertToSeconds(_dataList[index-1].time)
+							}else{
+								_continuousRole = item.role;
+							}
+						}else{
+							_continuousRole = item.role;
+						}
+					}
+				}
+
+				if(item.role == "老师"){
+					_teacherTime+=this.convertToSeconds(item.time);
+				}
+
+				_totalTime += this.convertToSeconds(item.time);
+			})
+
+			let _RT = (_teacherTime/_totalTime).toFixed(2)
+			let _CH = (_continuousTime/_totalTime).toFixed(2)
+			let _copyData = JSON.parse(JSON.stringify(this.data));
+			_copyData.jsonData.RT = _RT;
+			_copyData.jsonData.CH = _CH;
+			_copyData.json_data = JSON.stringify(_copyData.jsonData);
+			if (this.history.length == 0) {
+				this.history.push(_copyData.jsonData);
+			} else {
+				this.history.splice(this.historyIndex + 1, 0, _copyData.jsonData);
+			}
+			this.up();
+			this.status = 3;
+		},
 		saveData(params){
 			return new Promise((resolve, reject) => {
         updateObsRequest({
@@ -193,7 +430,12 @@ export default {
 		},
     del() {
       this.$parent.delItem(this.data)
-    }
+    },
+		convertToSeconds(time) {
+		  let parts = time.split(':');
+		  let seconds = (+parts[0]) * 3600 + (+parts[1]) * 60 + (+parts[2]);
+		  return seconds;
+		}
   },
 	mounted(){
 		this.historyIndex = 0;

+ 5 - 3
src/views/classObserve/homePage.vue

@@ -385,6 +385,8 @@ export default {
         })
           .then(() => {
             let iiframe = this.$refs['iiframe']
+						console.log(iiframe.contentWindow.window)
+						console.log(iiframe.contentWindow)
             // 设置语言
             iiframe.contentWindow.window.document.getElementById(
               'languageOptions'
@@ -656,8 +658,6 @@ export default {
                 .then(res => {
                   let _data = res.FunctionResponse
                   if (_data.result && _data.result.id) {
-										console.log("👇")
-										console.log(_data.result.id)
                     _this.$parent.changeFileId(_data.result.id)
                     // _this.$emit("updateFileId", _data.result.id);
                     // _this.$message.success("成功获取fileId");
@@ -672,9 +672,11 @@ export default {
                         _this.$parent.bmData.jsonData.editorBarData.type = '0'
                         // _this.$parent.bmData.jsonData.transcriptionData = _res.data
                         if (flag) {
+													console.log(_res.data)
                           const arr = Papa.parse(_res.data, {
                             header: false
-                          }).data.slice(1)
+                          }).data
+													console.log(arr)
                           const _editorBarDataContent = `<table border="0" width="100%" cellpadding="0" cellspacing="0" style="text-align: center"><tbody><tr><th>序号</th><th>开始时间</th><th>结束时间</th><th>发言内容</th><th>时长</th><th>说话人身份</th><th>行为编码</th></tr>${arr
                             .map(
                               row =>

+ 283 - 290
src/views/classObserve/index.vue

@@ -29,17 +29,18 @@
     ></classInfo>
     <stencilled ref="stencilledRef" @cutPage="cutPage" :page="page" v-if="page == 5 && userId"></stencilled>
     <editTel ref="editTelRef" @cutPage="cutPage" :dataList="dataList" :page="page" v-if="page == 6"></editTel>
-    <addTel ref="addTelRef" @cutPage="cutPage" :page="page" v-if="page == 7"></addTel>
+    <!-- <addTel ref="addTelRef" @cutPage="cutPage" :page="page" v-if="page == 7"></addTel> -->
     <outcome
       ref="outcomeRef"
       @cutPage="cutPage"
       :page="page"
       v-show="page == 8"
-			:bmData="bmData"
+      :bmData="bmData"
       :loading="[currencyLoading, scienceLoading, extendLoading]"
-			:analysisList="analysisList"
-			:fileId="fileId"
+      :analysisList="analysisList"
+      :fileId="fileId"
       :dataList="dataList"
+			:tid="tid"
     />
   </div>
 </template>
@@ -95,227 +96,222 @@ export default {
       imageList: {},
       dataList: [],
       tid: '',
-      editorBarData: {
-        type: '0', //0---文字   1-文件
-        content: '',
-        url: ''
-      },
-			fileId:"",
-			fileIdId:"",
+      fileId: '',
+      fileIdId: '',
       actionTypesMap: {},
-			analysisList: [
-				{
-					title: "OMO智慧课堂分析",
-					brief: "多维度分析课堂整体情况",
-					value: "4cc367c1-0076-11ef-aaca-12e77c4cb76b",
-					type: 0,
-					sum: 157,
-				},
-				{
-					title: "教学阶段九事件分析",
-					brief: "使用加涅九事件分析教学环节",
-					value: "5e0466b3-0075-11ef-aaca-12e77c4cb76b",
-					type: 0,
-					sum: 540,
-				},
-				{
-					title: "布鲁姆问题分类",
-					brief: "不同认知层次问题分布情况",
-					value: "eac63117-00a7-11ef-aaca-12e77c4cb76b",
-					type: 0,
-					sum: 405,
-				},
-				{
-					title: "麦卡锡问题分类",
-					brief: "不同类型问题分布情况",
-					value: "18545cf7-0125-11ef-aaca-12e77c4cb76b",
-					type: 0,
-					sum: 360,
-				},
-				{
-					title: "学生回答情况",
-					brief: "学生回答情况分析",
-					value: "2c6ede88-0125-11ef-aaca-12e77c4cb76b",
-					type: 0,
-					sum: 206,
-				},
-				{
-					title: "S-T分析:课堂时间分配",
-					brief: "多维度分析课堂整体情况",
-					value: "st1",
-					type: 0,
-					sum: 451,
-				},
-				{
-					title: "S-T分析:师生互动分析",
-					brief: "多维度分析课堂整体情况",
-					value: "st2",
-					type: 0,
-					sum: 342,
-				},
-				{
-					title: "S-T分析:教学模式分析",
-					brief: "多维度分析课堂整体情况",
-					value: "st3",
-					type: 0,
-					sum: 143,
-				},
-				{
-					title: "课堂活动类型",
-					brief: "识别特定的课堂活动类型",
-					value: "41d2d2d4-0125-11ef-aaca-12e77c4cb76b",
-					subject: "科学",
-					type: 1,
-					sum: 430,
-				},
-				{
-					title: "学科核心素养发展",
-					brief: "分析与学科核心素养的匹配情况",
-					value: "a6c0b92b-06de-11ef-aaca-12e77c4cb76b",
-					subject: "科学",
-					type: 1,
-					sum: 234,
-				},
-				{
-					title: "科学教育目标分析",
-					brief: "分析四类科学教育目标的情况",
-					value: "d6cd48ab-0125-11ef-aaca-12e77c4cb76b",
-					subject: "科学",
-					type: 1,
-					sum: 513,
-				},
-				{
-					title: "PORTAAL课堂观察",
-					brief: "使用PORTAAL框架分析科学课堂",
-					value: "8ab07d41-e143-11ee-aaca-12e77c4cb76b",
-					subject: "科学",
-					type: 1,
-					sum: 173,
-				},
-				{
-					title: "UTOP课堂观察",
-					brief: "使用UTOP框架分析科学课堂",
-					value: "8e3a389b-014f-11ef-aaca-12e77c4cb76b",
-					subject: "科学",
-					type: 1,
-					sum: 329,
-				},
-				{
-					title: "L-PST模型",
-					brief: "使用L-PST框架分析科学课堂",
-					value: "e649112e-0150-11ef-aaca-12e77c4cb76b", //e649112e-0150-11ef-aaca-12e77c4cb76b  7daa4c3f-016f-11ef-aaca-12e77c4cb76b
-					subject: "科学",
-					type: 1,
-					sum: 421,
-				},
-				// {
-				// 	title: "RST模型",
-				// 	brief: "多维度分析课堂整体情况",
-				// 	value: "e649112e-0150-11ef-aaca-12e77c4cb76b",
-				// 	type: 1,
-				// },
-				{
-					title: "RTOP课堂观察",
-					brief: "使用RTOP框架分析科学课堂",
-					value: "68265b18-0151-11ef-aaca-12e77c4cb76b", //a7107221-f7f5-11ee-aaca-12e77c4cb76b   bc254ab9-0142-11ef-aaca-12e77c4cb76b    c912ece9-0148-11ef-aaca-12e77c4cb76b  68265b18-0151-11ef-aaca-12e77c4cb76b  2ace7ff6-0154-11ef-aaca-12e77c4cb76b
-					subject: "科学",
-					type: 1,
-					sum: 527,
-				},
-				{
-					title: "课程质量评价",
-					brief: "多维度分析课堂整体情况",
-					value: "25e53379-0152-11ef-aaca-12e77c4cb76b",
-					subject: "科学",
-					type: 1,
-					sum: 391,
-				},
-				{
-					title: "SCOP课堂观察",
-					brief: "使用SCOP框架分析科学课堂",
-					value: "d0c76d35-0152-11ef-aaca-12e77c4cb76b",
-					subject: "科学",
-					type: 1,
-					sum: 407,
-				},
-				{
-					title: "KWL教学策略",
-					brief: "分析课前、课中、课后的教学成果",
-					value: "a5d8664b-1748-11ef-aaca-12e77c4cb76b",
-					subject: "语文",
-					type: 1,
-					sum: 135,
-				},
-				{
-					title: "LICC课堂观察",
-					brief: "崔允漷教授团队的观察框架",
-					value: "9e8e6356-1769-11ef-aaca-12e77c4cb76b",
-					subject: "语文",
-					type: 1,
-					sum: 614,
-				},
-				{
-					title: "读思达教学法",
-					brief: "分析课堂阅读、思考、表达的情况",
-					value: "d139ed78-176c-11ef-aaca-12e77c4cb76b",
-					subject: "语文",
-					type: 1,
-					sum: 346,
-				},
-				{
-					title: "教学内容分析",
-					brief: "从教学内容角度观课评教",
-					value: "9e8e6356-1769-11ef-aaca-12e77c4cb76b",
-					subject: "语文",
-					type: 1,
-					sum: 527,
-				},
-				{
-					title: "提问策略分析",
-					brief: "基于提问观察表分析课堂提问",
-					value: "eb815b01-1769-11ef-aaca-12e77c4cb76b",
-					subject: "语文",
-					type: 1,
-					sum: 389,
-				},
-				{
-					title: "教师反馈分析",
-					brief: "分析语文课堂师生言语互动行为",
-					value: "55ae5176-176a-11ef-aaca-12e77c4cb76b",
-					subject: "语文",
-					type: 1,
-					sum: 319,
-				},
-				{
-					title: "师生互动分析",
-					brief: "分析语文课堂四种不同的互动状态",
-					value: "8e4b6b48-176a-11ef-aaca-12e77c4cb76b",
-					subject: "语文",
-					type: 1,
-					sum: 191,
-				},
-				{
-					title: "5E课程改编",
-					brief: "基于5E教学模型设计一堂课",
-					value: "f757826e-0125-11ef-aaca-12e77c4cb76b",
-					type: 2,
-					sum: 510,
-				},
-				{
-					title: "5EX课程改编",
-					brief: "基于5EX教学模型设计一堂课",
-					value: "0b6b08b7-0126-11ef-aaca-12e77c4cb76b",
-					type: 2,
-					sum: 611,
-				},
-				{
-					title: "C-POTE课程改编",
-					brief: "C-POTE课程改编",
-					value: "6b4a9650-48be-11ef-936b-12e77c4cb76b",
-					type: 2,
-					sum: 165,
-				},
-			],
+      analysisList: [
+        {
+          title: 'OMO智慧课堂分析',
+          brief: '多维度分析课堂整体情况',
+          value: '4cc367c1-0076-11ef-aaca-12e77c4cb76b',
+          type: 0,
+          sum: 157
+        },
+        {
+          title: '教学阶段九事件分析',
+          brief: '使用加涅九事件分析教学环节',
+          value: '5e0466b3-0075-11ef-aaca-12e77c4cb76b',
+          type: 0,
+          sum: 540
+        },
+        {
+          title: '布鲁姆问题分类',
+          brief: '不同认知层次问题分布情况',
+          value: 'eac63117-00a7-11ef-aaca-12e77c4cb76b',
+          type: 0,
+          sum: 405
+        },
+        {
+          title: '麦卡锡问题分类',
+          brief: '不同类型问题分布情况',
+          value: '18545cf7-0125-11ef-aaca-12e77c4cb76b',
+          type: 0,
+          sum: 360
+        },
+        {
+          title: '学生回答情况',
+          brief: '学生回答情况分析',
+          value: '2c6ede88-0125-11ef-aaca-12e77c4cb76b',
+          type: 0,
+          sum: 206
+        },
+        {
+          title: 'S-T分析:课堂时间分配',
+          brief: '多维度分析课堂整体情况',
+          value: 'st1',
+          type: 0,
+          sum: 451
+        },
+        {
+          title: 'S-T分析:师生互动分析',
+          brief: '多维度分析课堂整体情况',
+          value: 'st2',
+          type: 0,
+          sum: 342
+        },
+        {
+          title: 'S-T分析:教学模式分析',
+          brief: '多维度分析课堂整体情况',
+          value: 'st3',
+          type: 0,
+          sum: 143
+        },
+        {
+          title: '课堂活动类型',
+          brief: '识别特定的课堂活动类型',
+          value: '41d2d2d4-0125-11ef-aaca-12e77c4cb76b',
+          subject: '科学',
+          type: 1,
+          sum: 430
+        },
+        {
+          title: '学科核心素养发展',
+          brief: '分析与学科核心素养的匹配情况',
+          value: 'a6c0b92b-06de-11ef-aaca-12e77c4cb76b',
+          subject: '科学',
+          type: 1,
+          sum: 234
+        },
+        {
+          title: '科学教育目标分析',
+          brief: '分析四类科学教育目标的情况',
+          value: 'd6cd48ab-0125-11ef-aaca-12e77c4cb76b',
+          subject: '科学',
+          type: 1,
+          sum: 513
+        },
+        {
+          title: 'PORTAAL课堂观察',
+          brief: '使用PORTAAL框架分析科学课堂',
+          value: '8ab07d41-e143-11ee-aaca-12e77c4cb76b',
+          subject: '科学',
+          type: 1,
+          sum: 173
+        },
+        {
+          title: 'UTOP课堂观察',
+          brief: '使用UTOP框架分析科学课堂',
+          value: '8e3a389b-014f-11ef-aaca-12e77c4cb76b',
+          subject: '科学',
+          type: 1,
+          sum: 329
+        },
+        {
+          title: 'L-PST模型',
+          brief: '使用L-PST框架分析科学课堂',
+          value: 'e649112e-0150-11ef-aaca-12e77c4cb76b', //e649112e-0150-11ef-aaca-12e77c4cb76b  7daa4c3f-016f-11ef-aaca-12e77c4cb76b
+          subject: '科学',
+          type: 1,
+          sum: 421
+        },
+        // {
+        // 	title: "RST模型",
+        // 	brief: "多维度分析课堂整体情况",
+        // 	value: "e649112e-0150-11ef-aaca-12e77c4cb76b",
+        // 	type: 1,
+        // },
+        {
+          title: 'RTOP课堂观察',
+          brief: '使用RTOP框架分析科学课堂',
+          value: '68265b18-0151-11ef-aaca-12e77c4cb76b', //a7107221-f7f5-11ee-aaca-12e77c4cb76b   bc254ab9-0142-11ef-aaca-12e77c4cb76b    c912ece9-0148-11ef-aaca-12e77c4cb76b  68265b18-0151-11ef-aaca-12e77c4cb76b  2ace7ff6-0154-11ef-aaca-12e77c4cb76b
+          subject: '科学',
+          type: 1,
+          sum: 527
+        },
+        {
+          title: '课程质量评价',
+          brief: '多维度分析课堂整体情况',
+          value: '25e53379-0152-11ef-aaca-12e77c4cb76b',
+          subject: '科学',
+          type: 1,
+          sum: 391
+        },
+        {
+          title: 'SCOP课堂观察',
+          brief: '使用SCOP框架分析科学课堂',
+          value: 'd0c76d35-0152-11ef-aaca-12e77c4cb76b',
+          subject: '科学',
+          type: 1,
+          sum: 407
+        },
+        {
+          title: 'KWL教学策略',
+          brief: '分析课前、课中、课后的教学成果',
+          value: 'a5d8664b-1748-11ef-aaca-12e77c4cb76b',
+          subject: '语文',
+          type: 1,
+          sum: 135
+        },
+        {
+          title: 'LICC课堂观察',
+          brief: '崔允漷教授团队的观察框架',
+          value: '9e8e6356-1769-11ef-aaca-12e77c4cb76b',
+          subject: '语文',
+          type: 1,
+          sum: 614
+        },
+        {
+          title: '读思达教学法',
+          brief: '分析课堂阅读、思考、表达的情况',
+          value: 'd139ed78-176c-11ef-aaca-12e77c4cb76b',
+          subject: '语文',
+          type: 1,
+          sum: 346
+        },
+        {
+          title: '教学内容分析',
+          brief: '从教学内容角度观课评教',
+          value: '9e8e6356-1769-11ef-aaca-12e77c4cb76b',
+          subject: '语文',
+          type: 1,
+          sum: 527
+        },
+        {
+          title: '提问策略分析',
+          brief: '基于提问观察表分析课堂提问',
+          value: 'eb815b01-1769-11ef-aaca-12e77c4cb76b',
+          subject: '语文',
+          type: 1,
+          sum: 389
+        },
+        {
+          title: '教师反馈分析',
+          brief: '分析语文课堂师生言语互动行为',
+          value: '55ae5176-176a-11ef-aaca-12e77c4cb76b',
+          subject: '语文',
+          type: 1,
+          sum: 319
+        },
+        {
+          title: '师生互动分析',
+          brief: '分析语文课堂四种不同的互动状态',
+          value: '8e4b6b48-176a-11ef-aaca-12e77c4cb76b',
+          subject: '语文',
+          type: 1,
+          sum: 191
+        },
+        {
+          title: '5E课程改编',
+          brief: '基于5E教学模型设计一堂课',
+          value: 'f757826e-0125-11ef-aaca-12e77c4cb76b',
+          type: 2,
+          sum: 510
+        },
+        {
+          title: '5EX课程改编',
+          brief: '基于5EX教学模型设计一堂课',
+          value: '0b6b08b7-0126-11ef-aaca-12e77c4cb76b',
+          type: 2,
+          sum: 611
+        },
+        {
+          title: 'C-POTE课程改编',
+          brief: 'C-POTE课程改编',
+          value: '6b4a9650-48be-11ef-936b-12e77c4cb76b',
+          type: 2,
+          sum: 165
+        }
+      ]
     }
   },
   methods: {
@@ -377,8 +373,8 @@ export default {
       if (_flag) {
         this.getData()
       }
-			// 获取fileId
-			this.getFileIdId();
+      // 获取fileId
+      this.getFileIdId()
       if (!this.tid) {
         this.actionTypesMap = undefined
         return
@@ -436,29 +432,28 @@ export default {
       delClassRequest({ tid: item.id }).then(_ => {
         this.$toast.success('删除成功')
         this.getCourseList().then(_ => {
-          // if (this.tid == item.value || (this.tid == '' && this.classList.length > 0)) {
-          //   this.changeTid(this.classList[0].value)
-          // }
-          this.tid = ''
-					this.fileId = "";
-					this.fileIdId = "";
-          this.dataList = []
-          this.bmData = {
-            id: '',
-            tId: '',
-            tIndex: 0,
-            jsonData: {
-              activity_methods: '',
-              activity_structure: '',
-              classroom_resources: '',
-              courseName: '',
-              name: '',
-              studentNum: 0,
-              subject: '',
-              textbook: ''
+					if (item.value == this.tid) {
+            this.tid = ''
+            this.fileId = ''
+            this.fileIdId = ''
+            this.dataList = []
+            this.bmData = {
+              id: '',
+              tId: '',
+              tIndex: 0,
+              jsonData: {
+                activity_methods: '',
+                activity_structure: '',
+                classroom_resources: '',
+                courseName: '',
+                name: '',
+                studentNum: 0,
+                subject: '',
+                textbook: ''
+              }
             }
+            this.imageList = {}
           }
-          this.imageList = {}
           this.$refs.homePageRef.historyListLoading = false
         })
       })
@@ -474,8 +469,8 @@ export default {
             resolve()
           })
           .catch(e => {
-						console.log(e)
-						console.log("保存失败")
+            console.log(e)
+            console.log('保存失败')
             // this.$toast.fail('保存失败')
             resolve()
           })
@@ -495,8 +490,8 @@ export default {
             // 基础信息
             _bmData.jsonData = JSON.parse(_bmData.jsonData)
             _bmData.jsonData.time ? '' : (_bmData.jsonData.time = '')
-						_bmData.jsonData.editorBarData ? '' :(_bmData.jsonData.editorBarData = { type: '0',content: '',url: ''})
-						_bmData.jsonData.transcriptionData ? '' :(_bmData.jsonData.transcriptionData = '')
+            _bmData.jsonData.editorBarData ? '' : (_bmData.jsonData.editorBarData = { type: '0', content: '', url: '' })
+            _bmData.jsonData.transcriptionData ? '' : (_bmData.jsonData.transcriptionData = '')
             // 图片
             let _imageList = _data.find(i => i.tIndex == 1)
             _imageList.jsonData = JSON.parse(_imageList.jsonData)
@@ -715,7 +710,7 @@ export default {
                 this.$nextTick(() => {
                   this.getCourseList().then(_ => {})
                   // 	this.getCourseList().then((_) => {
-                  		this.getFileIdId();
+                  this.getFileIdId()
                   // 		this.$refs.messageAreaRef.getData();
                   // 		this.$refs.chatAreaRef.getData();
                   // 		resolve();
@@ -736,42 +731,41 @@ export default {
         })
       })
     },
-		// 获取修改fileId的ID
-		getFileIdId() {
-			if (!this.tid) return;
-			let pram = {
-				tid: this.tid,
-				type: "10",
-			};
-			this.fileIdId = "";
-			this.fileId = "";
-			getObsRequest(pram)
-				.then((res) => {
-					console.log(res);
-					let _data = res.FunctionResponse.result.length
-						? JSON.parse(res.FunctionResponse.result)
-						: [];
-					if (_data.length <= 0) return;
-					this.fileIdId = _data[0].id;
-					if (_data[0].jsonData != "") {
-						this.fileId = JSON.parse(_data[0].jsonData).file_ids;
-					} else {
-						this.fileId = "";
-					}
-				});
-		},
-		changeFileId(newFileId){
-			let params = {
-				id:this.fileIdId,
-				jsonData:{file_ids: newFileId}
-			}
-			this.saveData(params).then(res=>{
-				console.log("更改并保存fileID成功")
-				this.getFileIdId();
-			}).catch(e=>{
-				console.log("更改并保存fileID失败",e)
-			})
-		},
+    // 获取修改fileId的ID
+    getFileIdId() {
+      if (!this.tid) return
+      let pram = {
+        tid: this.tid,
+        type: '10'
+      }
+      this.fileIdId = ''
+      this.fileId = ''
+      getObsRequest(pram).then(res => {
+        console.log(res)
+        let _data = res.FunctionResponse.result.length ? JSON.parse(res.FunctionResponse.result) : []
+        if (_data.length <= 0) return
+        this.fileIdId = _data[0].id
+        if (_data[0].jsonData != '') {
+          this.fileId = JSON.parse(_data[0].jsonData).file_ids
+        } else {
+          this.fileId = ''
+        }
+      })
+    },
+    changeFileId(newFileId) {
+      let params = {
+        id: this.fileIdId,
+        jsonData: { file_ids: newFileId }
+      }
+      this.saveData(params)
+        .then(res => {
+          console.log('更改并保存fileID成功')
+          this.getFileIdId()
+        })
+        .catch(e => {
+          console.log('更改并保存fileID失败', e)
+        })
+    },
     // 切换录音文件
     changeAudioUrl(data) {
       this.imageList.jsonData.fileList = []
@@ -818,7 +812,6 @@ export default {
             while (i.cells.length > 7) {
               i.removeChild(i.lastElementChild)
             }
-						console.log(i)
             const actionTypeCell = i.cells[6] && i.removeChild(i.cells[6])
             _editorBarDataContentRows.push(i.outerHTML)
             if (index == 0) return
@@ -853,7 +846,7 @@ export default {
           })
         }
         this.saveData(this.bmData).then(_ => {
-					console.log("转录问稿已保存")
+          console.log('转录问稿已保存')
           this.loading = false
         })
         // // TODO 不同板块用id做key

+ 214 - 29
src/views/classObserve/outcome.vue

@@ -5,6 +5,7 @@
       <div :class="[showIndex == 0 ? 'sortActive' : '']" @click.stop="changeShowIndex(0)">通用</div>
       <div :class="[showIndex == 1 ? 'sortActive' : '']" @click.stop="changeShowIndex(1)">学科</div>
       <div :class="[showIndex == 2 ? 'sortActive' : '']" @click.stop="changeShowIndex(2)">扩展</div>
+      <span @click.stop="addAnalysis">+</span>
     </div>
 
     <div class="stencilList" v-loading="loading[showIndex]">
@@ -31,8 +32,8 @@
         <div class="btn" @click.stop="saveTemplate()">
           保存模板
         </div>
-				<!-- :class="['btn', fileId ? '' : 'btnDis']" -->
-        <div class="btn"  @click.stop="AllAnalysis()">
+        <!-- :class="['btn', fileId ? '' : 'btnDis']" -->
+        <div class="btn" @click.stop="AllAnalysis()">
           一键分析
         </div>
 
@@ -69,18 +70,36 @@
       </div>
     </van-popup>
 
-		<van-popup v-model="sharePopup">
+    <van-popup v-model="sharePopup">
       <div class="saveBox">
-				<div class="sb_imgArea">
-
-				</div>
-				<div class="sb_inputArea"></div>
+        <div class="sb_imgArea">
+          <span class="qrcodeUrl" ref="qrCodeUrl"></span>
+        </div>
+        <div class="sb_inputArea">
+          <el-input class="sc_fu_input" style="color: black" disabled v-model="origin">
+            <template slot="append"
+              ><div class="sc_fu_copyBtn" @click.stop="copy(origin)">
+                复制链接
+              </div></template
+            >
+          </el-input>
+        </div>
       </div>
       <div class="btnS">
         <div @click="sharePopup = false">取消</div>
         <div style="color: rgba(54, 129, 252, 1);" @click="sharePopup = false">确定</div>
       </div>
     </van-popup>
+    <div class="o_report" v-if="showReport">
+      <div class="o_r_top">
+        <span>查看报告</span>
+        <div @click.stop="showReport = false">×</div>
+      </div>
+      <div class="o_r_box">
+        <iframe v-if="origin" :src="origin" width="100%" height="100%"></iframe>
+      </div>
+    </div>
+    <addTel ref="addTelRef" :data="analysisList" @success="addAnalysisByList" />
   </div>
 </template>
 
@@ -88,11 +107,15 @@
 import bar from './components/bar.vue'
 import analysisItem from './components/analysisItem.vue'
 import { Dialog } from 'vant'
-import { insertClassroomTemplateRequest } from '@/api/classObserve'
+import { insertClassroomTemplateRequest,insertNewObsRequest } from '@/api/classObserve'
+import QRCode from 'qrcodejs2'
+import addTel from './addTel.vue'
+let OpenCC = require("opencc-js");
 export default {
   components: {
     bar,
-    analysisItem
+    analysisItem,
+    addTel
   },
   props: {
     page: {
@@ -118,6 +141,10 @@ export default {
     fileId: {
       type: String,
       default: ''
+    },
+    tid: {
+      type: String,
+      default: ''
     }
   },
   data() {
@@ -126,7 +153,7 @@ export default {
       abuShow: false,
       cellShow: false,
       showPopup: false,
-			sharePopup:false,
+      sharePopup: false,
       showIndex: 0,
       saveLoading: false,
       form: {
@@ -146,13 +173,18 @@ export default {
         { value: '8', label: '历史' },
         { value: '9', label: '地理' },
         { value: '10', label: '政治' }
-      ]
+      ],
+      origin: '',
+      showReport: false
     }
   },
   methods: {
     cutPage(page) {
       this.$emit('cutPage', page)
     },
+    addAnalysis() {
+      this.$refs.addTelRef.open(this.showIndex)
+    },
     ctrlShow() {
       this.cellShow = !this.cellShow
     },
@@ -177,18 +209,49 @@ export default {
     },
     share() {
       // return;
-			this.sharePopup = true;
+      this.sharePopup = true
+      this.$nextTick(() => {
+        let url = `https://beta.cloud.cocorobo.cn/aigpt/#/classroom_observation_board?tid=${this.tid}`
+        this.origin = url
+        this.$refs.qrCodeUrl.innerHTML = ''
+        var qrcode = new QRCode(this.$refs.qrCodeUrl, {
+          text: url, // 需要转换为二维码的内容
+          width: 250,
+          height: 250,
+          colorDark: '#000000',
+          colorLight: '#ffffff',
+          correctLevel: QRCode.CorrectLevel.H
+        })
+      })
+    },
+    copy(content) {
+      // 创建临时textarea元素
+      const tempInput = document.createElement('textarea')
+      tempInput.value = content // 设置要复制的内容
+      // 隐藏元素
+      tempInput.style.position = 'absolute'
+      tempInput.style.left = '-9999px'
+      // 将元素添加到DOM中
+      document.body.appendChild(tempInput)
+      // 选中元素内容
+      tempInput.select()
+      // 执行复制操作
+      document.execCommand('copy')
+      // 移除临时元素
+      document.body.removeChild(tempInput)
+      this.$toast.success('复制成功')
     },
     viewTheReport() {
-      console.log('查看报告')
+      this.showReport = true
+      let url = `https://beta.cloud.cocorobo.cn/aigpt/#/classroom_observation_board?tid=${this.tid}`
+      this.origin = url
     },
     AllAnalysis() {
-			return;
-      if(!this.fileId)return this.$toast("请先上传文件或者录音");
-			this.$refs.analysisItemRef.forEach(i=>{
-				i.optimize();
-			})
-			this.$toast.success("一键分析成功")
+      if (!this.fileId) return this.$toast('请先上传文件或者录音')
+      this.$refs.analysisItemRef.forEach(i => {
+        i.optimize()
+      })
+      this.$toast.success('一键分析成功')
     },
     saveTemplate() {
       this.showPopup = !this.showPopup
@@ -242,7 +305,68 @@ export default {
           this.$toast.fail('另存为模板失败')
           console.log(e)
         })
-    }
+    },
+    addAnalysisByList(list) {
+			this.saveLoading = true;
+      this.$refs.addTelRef.close()
+			let promises = [];
+			list.forEach((item,index)=>{
+				promises.push(this.addAnalysisItem(item,index))
+			})
+			Promise.all(promises).then(()=>{
+				this.saveLoading = false;
+				this.$toast.success('添加成功')
+			})
+    },
+    addAnalysisItem(id,index = 0) {
+      return new Promise(resolve => {
+        
+				let converter = OpenCC.Converter({
+						from:'hk',
+						to:'cn'
+				})
+        let assistant = this.analysisList.find(i => i.value == id)
+        let newIndexData = this.dataList
+          .filter(i => i.Type == assistant.type)
+          .sort((a, b) => new Date(a.createtime) - new Date(b.createtime))
+        newIndexData = newIndexData.length ? newIndexData[newIndexData.length - 1] : null
+        let newIndex = newIndexData ? newIndexData.tIndex + 1 : assistant.type == 0 ? 2 : 0
+        let params = {
+          index: newIndex+index,
+          userid: this.userId,
+          json_data: JSON.stringify({
+            name: assistant.title,
+            result: '',
+            fileList: [],
+            dataFileList: [],
+            content: ''
+          }),
+          tid: this.tid,
+          type: assistant.type.toString()
+        }
+				insertNewObsRequest(params).then(res=>{
+					let _data = res.FunctionResponse;
+						if (_data.message && converter(_data.message) == converter("创建成功")) {
+							let _result = JSON.parse(_data.result)[0];
+							_result.jsonData = JSON.parse(_result.jsonData);
+							this.$parent.dataList.push(_result)
+							this.$nextTick(()=>{
+								this.$refs.analysisItemRef.forEach(i=>{
+									if(i.data.id===_result.id){
+										i.optimize();
+									}
+								})
+							})
+							resolve();
+						} else {
+							this.$toast.fail(`"${assistant.title}"添加失败`);
+							resolve();
+						}
+				})
+				
+      })
+    },
+		
   }
 }
 </script>
@@ -261,15 +385,26 @@ export default {
   box-sizing: border-box;
   justify-content: space-between;
   margin-top: 55px;
-  padding: 15px;
+  height: auto;
+  // padding: 15px;
   border-bottom: 0.5px rgba(231, 231, 231, 1) solid;
+  span {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    width: 40px;
+    height: auto;
+    font-size: 20px;
+    margin-right: 15px;
+  }
   div {
-    width: 33%;
+    flex: 1;
     text-align: center;
     font-size: 16px;
     font-weight: 400;
     transition: 0.3s;
     position: relative;
+    padding: 10px;
   }
   .sortImg {
     display: flex;
@@ -439,12 +574,62 @@ export default {
   }
 }
 
-.saveBox{
-	padding: 10px 15px;
-	.sb_imgArea{
-		width: 100%;
-		height: auto;
-		background-color: red;
-	}
+.saveBox {
+  padding: 10px 15px;
+  .sb_imgArea {
+    width: 100%;
+    height: auto;
+    display: flex;
+    justify-content: center;
+    padding: 20px 0;
+  }
+}
+
+.o_report {
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100vw;
+  height: 100vh;
+  background-color: red;
+  z-index: 999;
+  .o_r_top {
+    width: 100%;
+    height: 40px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    background-color: #15233e;
+    position: relative;
+    span {
+      font-size: 16px;
+      font-weight: bold;
+      color: #fff;
+    }
+    div {
+      position: absolute;
+      right: 10px;
+      color: #fff;
+      font-size: 18px;
+      height: auto;
+      width: auto;
+      padding: 2px 7px;
+      border-radius: 5px;
+      display: flex;
+      box-sizing: border-box;
+      // border: solid 1px #fff;
+      justify-content: center;
+      align-items: center;
+      // background-color: #93b0eb;
+    }
+  }
+  .o_r_box {
+    width: 100%;
+    height: calc(100% - 40px);
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    background-color: #fff;
+  }
 }
 </style>

+ 10 - 10
src/views/layouts/index.vue

@@ -63,16 +63,16 @@ export default {
         },
 
       )
-			if(this.orgArray.includes(this.$store.state.user.userinfo.organizeid)){
-				this.tabbars.push(        {
-          title: '课堂观察',
-          to: {
-            path: '/classObserve'
-          },
-          activeIcon: require('../../assets/images/course/commmt-active1.png'),
-          normalIcon: require('../../assets/images/course/comment1.png')
-        })
-			}
+			// if(this.orgArray.includes(this.$store.state.user.userinfo.organizeid)){
+			// 	this.tabbars.push(        {
+      //     title: '课堂观察',
+      //     to: {
+      //       path: '/classObserve'
+      //     },
+      //     activeIcon: require('../../assets/images/course/commmt-active1.png'),
+      //     normalIcon: require('../../assets/images/course/comment1.png')
+      //   })
+			// }
     }
   }
 }