11wqe1 2 недель назад
Родитель
Сommit
b896ed19b3

+ 161 - 11
src/assets/course.json

@@ -742,7 +742,7 @@
                 {
                     "id": "d17def85-c5df-11f0-a424-005056924926",
                     "title": "第1课-人工智能基础(1)",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B9%BB%E7%81%AF%E7%89%87011763621537371.jpeg",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B0%81%E9%9D%A21764922332387.png",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -750,7 +750,7 @@
                 {
                     "id": "8ea99e65-c4ef-11f0-a424-005056924926",
                     "title": "第2课-人工智能基础(2)",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/20251121-1538001763710724363.jpg",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E7%AC%AC%E4%BA%8C%E8%AF%BE%E5%B8%A6_011764922434842.jpg",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -765,7 +765,7 @@
                 {
                     "id": "7ed2ec66-c683-11f0-a424-005056924926",
                     "title": "第1课-打造你的第一个智能体(上)",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/ppt%E5%B0%81%E9%9D%A21763692667014.png",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B0%81%E9%9D%A2%20%E6%89%93%E9%80%A0%E4%BD%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E6%99%BA%E8%83%BD%E4%BD%931764918355322.png",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -773,7 +773,7 @@
                 {
                     "id": "8bd6a3ee-c4f6-11f0-a424-005056924926",
                     "title": "第2课-打造你的第一个智能体(下)",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E6%88%AA%E5%B1%8F2025-11-21%20%E4%B8%8A%E5%8D%88101763692654734.png",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E6%88%AA%E5%B1%8F2025-12-05%20%E4%B8%8B%E5%8D%8821764917357351.png",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -781,7 +781,7 @@
                 {
                     "id": "2a258ff0-c452-11f0-a424-005056924926",
                     "title": "第3课-工作流的艺术-指挥你的AI军团(上)",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/20251121-1120351763695353994.png",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/20251205-1622091764923067721.jpeg",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -789,7 +789,7 @@
                 {
                     "id": "0e142364-c521-11f0-a424-005056924926",
                     "title": "第4课-工作流的艺术-指挥你的AI军团(下)",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/ScreenShot_2025-11-21_154127_6561763710898789.png",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E7%AC%AC%E5%9B%9B%E8%AF%BE%E5%B8%A6_011764922554771.jpg",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -804,7 +804,7 @@
                 {
                     "id": "18d6bbb5-c5e9-11f0-a424-005056924926",
                     "title": "第1课-中草药百科问答器",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/PixPin_2025-11-20_16-05-011763625908128.png",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/screenshot-20251205-1540021764920413084.png",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -812,7 +812,7 @@
                 {
                     "id": "990c38f5-c6c0-11f0-a424-005056924926",
                     "title": "第2课-智能体 &CocoPi 从0到1打造你的AI专属角色",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/default%2F20251125-1317381764047909181.jpg",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B9%BB%E7%81%AF%E7%89%8711764918152794.jpeg",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -820,7 +820,7 @@
                 {
                     "id": "ae086f8e-c5ee-11f0-a424-005056924926",
                     "title": "第3课-智能体 &CocoPi 当李白遇见科技",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/Slide11763971863505.jpeg",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/12121764918145093.jpeg",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -835,7 +835,7 @@
                 {
                     "id": "f69ef5aa-c456-11f0-a424-005056924926",
                     "title": "第1课-设计思维",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B9%BB%E7%81%AF%E7%89%8711763455735806.jpeg",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%9B%9B-1%20%E5%B0%81%E9%9D%A21764917940188.jpg",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"
@@ -843,7 +843,157 @@
                 {
                     "id": "07d4455c-c45a-11f0-a424-005056924926",
                     "title": "第2课-工作流设计",
-                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B9%BB%E7%81%AF%E7%89%8711763455136830.jpeg",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%9B%9B-2%20%E5%B0%81%E9%9D%A21764918017268.jpg",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                }
+            ],
+            "xia": [
+                
+            ]
+        }
+    },
+    "AI6one": {
+        "模块一":{
+            "shang": [
+                {
+                    "id": "0a2a7b5b-d1b1-11f0-a424-005056924926",
+                    "title": "第1课-人工智能基础(1)",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B0%81%E9%9D%A2111764922366628.png",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                },
+                {
+                    "id": "f040c599-d1b1-11f0-a424-005056924926",
+                    "title": "第2课-人工智能基础(2)",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E7%AC%AC%E4%BA%8C%E8%AF%BE%E4%B8%8D%E5%B8%A6_011764922464532.jpg",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                }
+            ],
+            "xia": [
+                
+            ]
+        },
+        "模块二":{
+            "shang": [
+                {
+                    "id": "3eecd434-d1a9-11f0-a424-005056924926",
+                    "title": "第1课-打造你的第一个智能体(上)",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B0%81%E9%9D%A2%20%E6%89%93%E9%80%A0%E7%AC%AC%E4%B8%80%E4%B8%AA%E6%99%BA%E8%83%BD%E4%BD%93%E6%97%A0logo1764918714627.png",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                },
+                {
+                    "id": "98fea3ea-d1a6-11f0-a424-005056924926",
+                    "title": "第2课-打造你的第一个智能体(下)",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E6%88%AA%E5%B1%8F2025-12-05%20%E4%B8%8B%E5%8D%8821764917571140.png",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                },
+                {
+                    "id": "ecd68ccf-d1b3-11f0-a424-005056924926",
+                    "title": "第3课-工作流的艺术-指挥你的AI军团(上)",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/20251205-1621581764923133393.jpeg",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                },
+                {
+                    "id": "0e142364-c521-11f0-a424-005056924926",
+                    "title": "第4课-工作流的艺术-指挥你的AI军团(下)",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E7%AC%AC%E5%9B%9B%E8%AF%BE%E4%B8%8D%E5%B8%A6_011764922667545.jpg",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                }
+            ],
+            "xia": [
+                
+            ]
+        },
+        "模块三": {
+            "shang": [
+                {
+                    "id": "cd24b29a-d1b0-11f0-a424-005056924926",
+                    "title": "第1课-设计思维",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B9%BB%E7%81%AF%E7%89%87011764921792240.jpeg",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                },
+                {
+                    "id": "5de2d452-d1b1-11f0-a424-005056924926",
+                    "title": "第2课-工作流设计",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%B9%BB%E7%81%AF%E7%89%8711764922039301.jpeg",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                }
+            ],
+            "xia": [
+                
+            ]
+        }
+    },
+    "AI6Two": {
+        "模块一":{
+            "shang": [
+                {
+                    "id": "00fce42a-d1bf-11f0-a424-005056924926",
+                    "title": "创意智造赛事解读",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%88%9B%E6%84%8F%E6%99%BA%E9%80%A0%E8%B5%9B%E4%BA%8B%E8%A7%A3%E8%AF%BB%EF%BC%88%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E7%89%88%EF%BC%891764929660050.png",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                }
+            ],
+            "xia": [
+                
+            ]
+        },
+        "模块二":{
+            "shang": [
+                {
+                    "id": "a4704da5-d17e-11f0-a424-005056924926",
+                    "title": "第1课 创意智造工作流",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/011764931136138.png",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                }
+            ],
+            "xia": [
+                
+            ]
+        },
+        "模块三": {
+            "shang": [
+                {
+                    "id": "94e86b2b-d1aa-11f0-a424-005056924926",
+                    "title": "第2课 开源硬件使用基础",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/021764930132815.png",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                },
+                {
+                    "id": "eba345e8-d1ac-11f0-a424-005056924926",
+                    "title": "第3课 设计思维",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/031764931027869.png",
+                    "dataId": "",
+                    "dataList": [],
+                    "courseType": "2"
+                },
+                {
+                    "id": "73ed1dc6-d1ad-11f0-a424-005056924926",
+                    "title": "第4课 人工智能知识基础",
+                    "url": "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/041764930877228.png",
                     "dataId": "",
                     "dataList": [],
                     "courseType": "2"

Разница между файлами не показана из-за своего большого размера
+ 6 - 0
src/assets/icon/backk.svg


Разница между файлами не показана из-за своего большого размера
+ 6 - 0
src/assets/icon/draCha.svg


+ 5 - 0
src/assets/icon/filemr.svg

@@ -0,0 +1,5 @@
+<svg width="25" height="20" viewBox="0 0 25 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="25" height="4" rx="2" fill="white"/>
+<rect y="8" width="25" height="4" rx="2" fill="white"/>
+<rect y="16" width="25" height="4" rx="2" fill="white"/>
+</svg>

BIN
src/assets/icon/xiazai.png


+ 35 - 55
src/components/main/AIexploration.vue

@@ -5,7 +5,7 @@
 		</div>
 	</h2>
 
-	<div class="aiex">
+	<div class="aiex" v-loading="loading">
 		<div
 			class="cont"
 			v-for="(i, ind) in listData"
@@ -21,86 +21,66 @@
 				查看更多
 		</div>
 	</div>
-	<div>
-		<el-dialog
-			v-model="dialogVisible"
-			:before-close="handleClose"
-			fullscreen
-		>
-			 <template #header>
-				<div class="dialog-header">
-					<span class="warning_text">{{ Tips }}</span>
-				</div>
-			</template>
-			<div class="courseL" @click="openCourseDetail">
-				<span>点击进入对应课程</span>
-                <img :src="dian" alt="">
-			</div>
-			<iframe 
-				allow="camera *; microphone *; display-capture; midi; encrypted-media; fullscreen; geolocation; clipboard-read; clipboard-write; accelerometer; autoplay; gyroscope; payment; picture-in-picture; usb; xr-spatial-tracking;"
-				ref="iframeRef1" 
-				:src="iframeRef1Url" 
-				style="width: 100%;height: 100%;"
-				frameborder="0">
-			</iframe>
-		</el-dialog>
-	</div>
+    <opendetail ref="opendetailRef"></opendetail>
 	 
 </template>
 
 <script setup>
-import { ref } from "vue";
+import axios from 'axios';
+
+import { ref,onMounted } from "vue";
 import { useRouter } from "vue-router";
 import taideng from '@/assets/img/taideng.png'
 import esy from '@/assets/img/esy.png'
 import ludeng from '@/assets/img/ludeng.png'
 import { userInfoStore } from '../../stores/counter'
 import dian from '@/assets/icon/dianji.png'
-
+import opendetail from './opendetail.vue'
+const opendetailRef = ref(null)
 const user = userInfoStore()
 
 const iframeRef1Url = ref('')
 const cid = ref('')
 const dialogVisible = ref(false)
+const loading = ref(false)
 const Tips = ref('')
 const router = useRouter();
-const listData = ref([
-	{
-		name: "CNN卷积神经网络模拟器",
-		url: "https://v0.cocorobo.cn/2/out/index.html",
-		img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/default%2F8+CNN%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E6%A8%A1%E6%8B%9F%E5%99%A81761284591830.png',
-		courselink: "02346267-888f-11f0-9c7b-005056924926"
-	},
-	{
-		name: "AI绘画",
-		url: "https://v0.cocorobo.cn/ai-painting-tutorial/out/index.html",
-		img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/default%2F12+AI%E7%BB%98%E7%94%BB1761284591835.png',
-		courselink: "60575080-87d7-11f0-9c7b-005056924926"
-	},
-	{
-		name: "AI训练师:教AI识别肺癌!",
-		url: "https://v0.cocorobo.cn/1/out/index.html",
-		img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/default%2F14+%E6%95%99AI%E8%AF%86%E5%88%AB%E8%82%BA%E7%99%8C1761284591837.png',
-		courselink: "e85a21cc-8870-11f0-9c7b-005056924926"
-	},
-]);
-const handleClose = (done) => {
-    done()
-}
+const listData = ref([]);
+
+onMounted(() => {
+    getdata()
+})
 // 打开课程弹框
 const gotoUrl = (val) => {
-	console.log('val',val);
+    opendetailRef.value.gotoPage(val)
+
+	// console.log('val',val);
 	
-	iframeRef1Url.value = val.url
-	cid.value = val.courselink
-	dialogVisible.value = true
-	Tips.value = val.name
+	// iframeRef1Url.value = val.url
+	// cid.value = val.courselink
+	// dialogVisible.value = true
+	// Tips.value = val.name
 	// window.open(val.url, "_blank");
 
 };
 const gotoPage = () => {
 	router.push("/details/AI探究中心");
 };
+const getdata =()=>{
+	loading.value = true
+	let kk = '4638538d-ad8c-11f0-99cb-005056924926,91d7d147-ad8c-11f0-99cb-005056924926,a4b3d989-ad8c-11f0-99cb-005056924926'
+	axios.get('https://pbl.cocorobo.cn/api/pbl/getAIcourseType?con='+kk)
+    .then(res => {
+        console.log(res);
+       
+        listData.value = res.data[0]        
+        loading.value = false
+    })
+    .catch(err=>{
+        console.log(err);
+        loading.value = false
+    })
+}
 
 const openCourseDetail = () => {
 	let id = cid.value

+ 74 - 16
src/components/main/AIexplorationCon.vue

@@ -16,20 +16,72 @@
         </div>
     </div>
     <div>
-        <el-dialog
+    <opendetail ref="opendetailRef"></opendetail>
+        <!-- <el-dialog
             v-model="dialogVisible"
             :before-close="handleClose"
             fullscreen
+            :show-close="false"
         >
             <template #header>
-                <div class="dialog-header">
-                    <span class="warning_text">{{ Tips }}</span>
-                </div>
+               <div class="topH">
+					<div class="backA"></div>
+					<div class="dialog-header">
+						{{ Tips }}
+					</div>
+					<div class="backA">
+						<div class="bABtn" style="flex-shrink: 0;" @click="openCourseDetail">进入课程</div>
+						<div @click="dialogVisible = false" style="cursor: pointer;display: flex;align-items: center;gap: 5px;">
+                            <img src="../../assets/icon/backk.svg" alt="">
+							<span style="flex-shrink: 0;">返回</span>
+						</div>
+					</div>
+				</div>
             </template>
-            <div class="courseL" @click="openCourseDetail">
-                <span>点击进入对应课程</span>
-                <img :src="dian" alt="">
+            <div class="fileArea" @click="openDra">
+                <img src="../../assets/icon/filemr.svg" alt="">
             </div>
+            <el-drawer
+                v-model="drawer"
+                direction="rtl"
+                size="500px"
+                :close-on-click-modal="false"
+                :show-close="false"
+                :before-close="handleClose"
+            >
+                <template #header>
+                    <div class="fileArea" @click="drawer = false">
+                        <img src="../../assets/icon/draCha.svg" alt="">
+                    </div>
+                </template>
+                <template #default>
+                    <div class="draCon">
+                        <div class="dratit">
+                            <div class="tit" :class="[drawertit == 0 ? 'tit2':'']" @click="drawertit = 0">文本</div>
+                            <div class="tit" :class="[drawertit == 1 ? 'tit2':'']" @click="drawertit = 1">附件({{ inst.file.length }})</div>
+                        </div>
+                        <div class="draconL" v-if="drawertit == 0">
+                             <div v-html="inst.content"></div>
+                        </div>
+                        <div class="draCon" v-if="drawertit == 1">
+                            <div class="pdflist" v-if="inst.file.length">
+                                <div v-for="item in inst.file" :key="item.id">
+                                    <div @click="cutPdf(item.url)" class="pdfCS" :class="[pdfUrl == item.url? 'pdfback' : '']">
+                                        <div class="pdfCSTit">{{ item.name }}</div>
+                                        <img style="flex-shrink: 0;" src="../../assets/icon/xiazai.png" alt="" >
+                                    </div>
+                                </div>
+                            </div>
+                            <div style="flex: 1;" v-if="inst.file.length">
+                                <iframe :src="pdfUrl" width="100%" height="100%" frameborder="0"></iframe>
+                            </div>
+                        </div>
+                    </div>
+                   
+
+                </template>
+            </el-drawer>
+          
             <iframe 
                 allow="camera *; microphone *; display-capture; midi; encrypted-media; fullscreen; geolocation; clipboard-read; clipboard-write; accelerometer; autoplay; gyroscope; payment; picture-in-picture; usb; xr-spatial-tracking;"
                 ref="iframeRef1" 
@@ -37,7 +89,7 @@
                 style="width: 100%;height: 100%;"
                 frameborder="0">
             </iframe>
-        </el-dialog>
+        </el-dialog> -->
     </div>
 </template>
 
@@ -45,16 +97,15 @@
 import axios from 'axios';
 import { ref,onMounted } from 'vue';
 import { userInfoStore } from '../../stores/counter'
-import dian from '@/assets/icon/dianji.png'
-
+import opendetail from './opendetail.vue'
 const user = userInfoStore()
 const iframeRef1Url = ref('')
 const cid = ref('')
 const dialogVisible = ref(false)
 const Tips = ref('')
-
 const listData = ref([])
 const loading = ref(false)
+const opendetailRef = ref(null)
 
 onMounted(() => {
     requestUser()
@@ -85,12 +136,19 @@ const handleClose = (done) => {
     done()
 }
 const gotoPage = (val)=>{
+    opendetailRef.value.gotoPage(val)
     // window.open(val.link, "_blank")
-    console.log('val',val);
-	iframeRef1Url.value = val.link
-	cid.value = val.courselink
-	dialogVisible.value = true
-	Tips.value = val.name
+    // console.log('val',val);
+	// iframeRef1Url.value = val.link
+	// cid.value = val.courselink
+    // inst.value = JSON.parse(val.inst)
+    // console.log('inst',{...inst.value});
+    
+    // if ({...inst.value}.file.length) {
+    //     pdfUrl.value = {...inst.value}.file[0].url
+    // }
+	// dialogVisible.value = true
+	// Tips.value = val.name
 }
 const openCourseDetail = () => {
 	let id = cid.value

+ 74 - 8
src/components/main/courseSelect.vue

@@ -4,7 +4,7 @@
       课程列表
     </div>
   </h2>
-  <div class="grandTitle2" v-if="gotype.gotype == 'bjs'">人工智能通识课</div>
+  <div class="grandTitle2">人工智能通识课</div>
   <div class="course_select">
     <span class="grandTitle">课程类型:</span>
     <el-button :class="courseTypeShow ? 'el_button_active' : ''" @click="SwitchCourseType(true)">AI通识课2025版</el-button>
@@ -148,20 +148,29 @@
       </el-row>
     </div>
   </div>
-  <div class="grandTitle2" v-if="gotype.gotype == 'bjs'" style="margin-top: 20px;">人工智能竞赛课</div>
-  <div class="course_select" v-if="gotype.gotype == 'bjs'">
+  <div style="margin-top: 20px;">
+    <span class="grandTitle2" v-if="gotype.gotype == 'bjs'">人工智能竞赛课</span>
+    <span class="grandTitle2" v-else>竞赛主题课程</span>
+  </div>
+  <div class="course_select">
     <span class="grandTitle">课程类型:</span>
-    <el-button class="el_button_active">智能体课程</el-button>
+    <el-button  @click="cutmodpage = 0" :class="[cutmodpage == 0 ? 'el_button_active' :'']">
+      <span v-if="gotype.gotype == 'bjs'">智能体课程</span>
+      <span v-else>智能体设计与应用课程</span>
+    </el-button>
+    <el-button @click="cutmodpage = 1" v-if="gotype.gotype != 'bjs'" :class="[cutmodpage == 1 ? 'el_button_active' :'']">
+      <span>创意智造课程</span>
+    </el-button>
     <!-- <el-button :class="!courseTypeShow ? 'el_button_active' : ''" @click="SwitchCourseType(false)">AI通识课2024版</el-button> -->
   </div>
-  <div class="course_select" v-if="gotype.gotype == 'bjs'">
+  <div class="course_select">
     <span class="grandTitle">模块:</span>
     <el-button :class="selectmod == '模块一' ? 'el_button_active' : ''" @click="clickmod('模块一')">模块一</el-button>
     <el-button :class="selectmod == '模块二' ? 'el_button_active' : ''" @click="clickmod('模块二')">模块二</el-button>
     <el-button :class="selectmod == '模块三' ? 'el_button_active' : ''" @click="clickmod('模块三')">模块三</el-button>
-    <el-button :class="selectmod == '模块四' ? 'el_button_active' : ''" @click="clickmod('模块四')">模块四</el-button>
+    <el-button v-if="gotype.gotype == 'bjs'" :class="selectmod == '模块四' ? 'el_button_active' : ''" @click="clickmod('模块四')">模块四</el-button>
   </div>
- <div class="course_select" v-if="gotype.gotype == 'bjs'">
+  <div class="course_select" v-if="gotype.gotype == 'bjs'">
     <div v-if="currentmodData && currentmodData.shang.length > 0">
       <el-row :gutter="20">
         <el-col :span="6" v-for="item in currentmodData.shang" :key="item.title" style="margin-top: 10px;">
@@ -181,6 +190,46 @@
       </el-row>
     </div>
   </div>
+  <div class="course_select" v-if="gotype.gotype != 'bjs' && cutmodpage == 1">
+    <div v-if="currentAI6TwoData && currentAI6TwoData.shang.length > 0">
+      <el-row :gutter="20">
+        <el-col :span="6" v-for="item in currentAI6TwoData.shang" :key="item.title" style="margin-top: 10px;">
+          <div class="grid-content ep-bg-purple">
+            <img :src="getImageUrl(item.url)" alt="">
+            <div class="course_content">
+              <div class="div_title">
+                {{ item.title }}
+              </div>
+            </div>
+            <div class="class_button" v-if="isupdateCourse">
+              <el-button :style="item.courseType == '1' ? 'width: 50%;' : 'width: 100%;'" class="el_button_active"
+                @click="openCourseDetail(item.id, item)">上课</el-button>
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+  <div class="course_select" v-if="gotype.gotype != 'bjs' && cutmodpage == 0">
+    <div v-if="currentAI6Data && currentAI6Data.shang.length > 0">
+      <el-row :gutter="20">
+        <el-col :span="6" v-for="item in currentAI6Data.shang" :key="item.title" style="margin-top: 10px;">
+          <div class="grid-content ep-bg-purple">
+            <img :src="getImageUrl(item.url)" alt="">
+            <div class="course_content">
+              <div class="div_title">
+                {{ item.title }}
+              </div>
+            </div>
+            <div class="class_button" v-if="isupdateCourse">
+              <el-button :style="item.courseType == '1' ? 'width: 50%;' : 'width: 100%;'" class="el_button_active"
+                @click="openCourseDetail(item.id, item)">上课</el-button>
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
   <el-dialog v-model="dialogVisible" :before-close="handleClose" width=500>
     <template #header>
       <div class="dialog-header img_text_middle">
@@ -230,6 +279,10 @@ const gotype = pageGotype()
 const isupdateCourse = ref(false)
 const currentData = ref(courseDataJson.old.三年级)
 const currentmodData = ref(courseDataJson.mod.模块一)
+const currentAI6Data = ref(courseDataJson.AI6one.模块一)
+const currentAI6TwoData = ref(courseDataJson.AI6Two.模块一)
+
+const cutmodpage = ref('0')
 
 const dialogVisible = ref(false)
 const updateReductionId = ref("")
@@ -241,6 +294,8 @@ const setIntervalNum = ref(null)
 
 const courseData = ref(courseDataJson.new)
 const modData = ref(courseDataJson.mod)
+const AI6Data = ref(courseDataJson.AI6one)
+const AI6TwoData = ref(courseDataJson.AI6Two)
 
 onMounted(() => {
   currentData.value = courseData.value["三年级"]
@@ -248,11 +303,22 @@ onMounted(() => {
 })
 const clickGrand = val => {
   selectGrand.value = val
+  console.log('courseData.value',courseData.value);
+  
   currentData.value = courseData.value[val]
 }
+const handleClose =(done)=>{
+  done()
+}
 const clickmod = val => {
   selectmod.value = val
-  currentmodData.value = modData.value[val]
+  if (gotype.gotype === 'bjs') {    
+    currentmodData.value = modData.value[val]
+  } else if (gotype.gotype != 'bjs' && cutmodpage.value == 1) {
+    currentAI6TwoData.value = AI6TwoData.value[val]
+  } else if (gotype.gotype != 'bjs' && cutmodpage.value == 0){
+    currentAI6Data.value = AI6Data.value[val]
+  }
 }
 const SwitchCourseType = (val) => {
   courseTypeShow.value = val

+ 396 - 0
src/components/main/opendetail.vue

@@ -0,0 +1,396 @@
+<template>
+    <div>
+        <el-dialog
+            v-model="dialogVisible"
+            :before-close="handleClose"
+            fullscreen
+            :show-close="false"
+        >
+            <template #header>
+               <div class="topH">
+					<div class="backA"></div>
+					<div class="dialog-header">
+						{{ Tips }}
+					</div>
+					<div class="backA">
+						<div class="bABtn" style="flex-shrink: 0;" @click="openCourseDetail">进入课程</div>
+						<div @click="dialogVisible = false" style="cursor: pointer;display: flex;align-items: center;gap: 5px;">
+                            <img src="../../assets/icon/backk.svg" alt="">
+							<span style="flex-shrink: 0;">返回</span>
+						</div>
+					</div>
+				</div>
+            </template>
+            <div class="fileArea" @click="openDra">
+                <img src="../../assets/icon/filemr.svg" alt="">
+            </div>
+            <el-drawer
+                v-model="drawer"
+                direction="rtl"
+                size="500px"
+                :close-on-click-modal="false"
+                :show-close="false"
+                :before-close="handleClose"
+            >
+                <template #header>
+                    <div class="fileArea" @click="drawer = false">
+                        <img src="../../assets/icon/draCha.svg" alt="">
+                    </div>
+                </template>
+                <template #default>
+                    <div class="draCon">
+                        <div class="dratit">
+                            <div class="tit" :class="[drawertit == 0 ? 'tit2':'']" @click="drawertit = 0">文本</div>
+                            <div class="tit" :class="[drawertit == 1 ? 'tit2':'']" @click="drawertit = 1">附件({{ inst.file && inst.file.length ? inst.file.length : 0 }})</div>
+                        </div>
+                        <div class="draconL" v-if="drawertit == 0">
+                             <div v-html="inst.content"></div>
+                        </div>
+                        <div class="draCon" v-if="drawertit == 1">
+                            <div class="pdflist" v-if="inst.file && inst.file.length">
+                                <div v-for="item in inst.file" :key="item.id">
+                                    <div @click="cutPdf(item.url)" class="pdfCS" :class="[pdfUrl == item.url? 'pdfback' : '']">
+                                        <div class="pdfCSTit">{{ item.name }}</div>
+                                        <!-- <img style="flex-shrink: 0;" src="../../assets/icon/xiazai.png" alt="" > -->
+                                        <!-- @click.stop="downloadPdf(item.url,item.name)" -->
+                                    </div>
+                                </div>
+                            </div>
+                            <div style="flex: 1;" v-if="inst.file && inst.file.length">
+                                <iframe :src="pdfUrl" width="100%" height="100%" frameborder="0"></iframe>
+                            </div>
+                        </div>
+                    </div>
+                   
+
+                </template>
+            </el-drawer>
+            <!-- <div class="courseL" @click="openCourseDetail">
+                <span>点击进入对应课程</span>
+                <img :src="dian" alt="">
+            </div> -->
+            <iframe 
+                allow="camera *; microphone *; display-capture; midi; encrypted-media; fullscreen; geolocation; clipboard-read; clipboard-write; accelerometer; autoplay; gyroscope; payment; picture-in-picture; usb; xr-spatial-tracking;"
+                ref="iframeRef1" 
+                :src="iframeRef1Url" 
+                style="width: 100%;height: 100%;"
+                frameborder="0">
+            </iframe>
+        </el-dialog>
+    </div>
+</template>
+
+<script setup>
+import axios from 'axios';
+import { ref,onMounted } from 'vue';
+import { userInfoStore } from '../../stores/counter'
+import { defineExpose } from 'vue'
+const user = userInfoStore()
+const iframeRef1Url = ref('')
+const cid = ref('')
+const dialogVisible = ref(false)
+const Tips = ref('')
+const drawer = ref(false)
+const drawertit = ref('0')
+const inst = ref('')
+const pdfUrl = ref('')
+const listData = ref([])
+const loading = ref(false)
+
+onMounted(() => {
+    requestUser()
+})
+
+const downloadPdf =(url, fileName = '')=>{
+
+  const a=document.createElement('a');
+  a.href= url;
+  a.download= fileName;
+  a.style.display='none';
+  document.body.appendChild(a);
+  a.click();
+  setTimeout(()=>{if(a.parentNode)a.parentNode.removeChild(a);},100);
+}
+
+// 拉取用户信息并处理
+const requestUser = () => {
+    loading.value = true
+
+    axios.get(`https://pbl.cocorobo.cn/api/pbl/selectAiExp?cl=1`)
+    .then(res => {
+        console.log(res);
+        let data = res.data
+        data[0].forEach(item1 => {
+            // 在第二个数组中查找匹配的数据
+            const matchedItems = data[1].filter(item2 => item2.levA === item1.id);
+            // 将匹配的数据存入ch属性
+            item1.ch = matchedItems;
+        });
+        listData.value = data[0]        
+        loading.value = false
+    })
+    .catch(err=>{
+        console.log(err);
+        loading.value = false
+    })
+};
+const handleClose = (done) => {
+    done()
+}
+const cutPdf = (val) =>{
+    pdfUrl.value = val
+}
+const gotoPage = (val)=>{
+    dialogVisible.value = true
+    // window.open(val.link, "_blank")
+    console.log('val',val);
+	iframeRef1Url.value = val.link
+	cid.value = val.courselink
+    if (inst.value) {
+        inst.value = JSON.parse(val.inst)
+        console.log('inst',{...inst.value});
+        if ({...inst.value}.file.length) {
+            pdfUrl.value = {...inst.value}.file[0].url
+        }
+    }
+
+	dialogVisible.value = true
+	Tips.value = val.name
+}
+defineExpose({
+  gotoPage
+})
+const openDra = () =>{
+    drawer.value = true
+}
+
+const openCourseDetail = () => {
+	let id = cid.value
+	console.log(user.user)
+	// 会返回复制得课程
+	top.U.A.Request("https://pbl.cocorobo.cn/api/pbl/getcopyCourseByUseridSz", [id, user.user.userid], function (res) {
+		console.log(res)
+		if (res.value[0].length > 0) {
+		// let isSave = res.value[0].filter(x => {
+		//   return x.courseId == id
+		// })
+		//这个是打开指定的课程接口
+		top.U.MD.D.I.openInApplication("studyDetail", res.value[0][0].courseId, 2, user.user.type);
+		} else {
+			updateCourseId(id, "studyDetail")
+		}
+	}, [], { "type": "POST", "withCredentials": true });
+}
+const updateCourseId = (id, type) => {
+  top.U.A.Request("https://pbl.cocorobo.cn/api/pbl/copyCourseSz", [id, user.user.userid], function (res) {
+    console.log(res)
+    if (res.value[0][0].courseId != "") {
+      if (type == "openCourseNewUpdate") {
+        top.U.MD.D.I.openInApplication("openCourseNewUpdate", res.value[0][0].courseId)
+      } else {
+        top.U.MD.D.I.openInApplication("studyDetail", res.value[0][0].courseId, 3, user.user.type);
+      }
+    }
+  }, [], { "type": "POST", "withCredentials": true });
+}
+</script>
+
+<style lang="scss" scoped>
+.alexp{
+    display: flex;
+    flex-direction: column;
+    gap: 20px;
+    .areaL{
+        display: flex;
+        flex-direction: column;
+        gap: 5px;
+    }
+    .tit{
+        font-size: 16px;
+        color: #000;
+        font-weight: 600;
+    }
+    .con{
+        display: grid;
+        grid-template-columns: repeat(6, 1fr);
+        // grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+        gap: 0px;
+        .conL{
+            flex: 1;
+            box-sizing: border-box;
+            // background: #fff;
+            // border-radius: 10px;
+            display: flex;
+            cursor: pointer;
+            flex-direction: column;
+            justify-content: space-between;
+            img{
+                width: 100%;
+                object-fit: cover;
+                cursor: pointer;
+            }
+        }
+    }
+}
+.aiex {
+	display: grid;
+	grid-template-columns: repeat(4, 1fr);
+	gap: 20px;
+	.cont {
+		border-radius: 4px;
+		position: relative;
+		display: flex;
+		flex-direction: column;
+		flex: 1;
+		cursor: pointer;
+		padding: 12px;
+		box-sizing: border-box;
+		min-height: 36px;
+		background: #fff;
+		img {
+			height: 170px;
+            width: 100%;
+            object-fit: cover;
+			border-radius: 5px;
+		}
+		.tit{
+			margin-top: 16px;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			overflow: hidden;
+            font-weight: normal;
+            color: #555555;
+            font-size: 14px;
+		}
+	}
+}
+:deep(.el-dialog__body){
+	width: 100% !important;
+	height: calc(100% - 65px);
+	padding: 0 !important;
+	position: relative;
+}
+.fileArea{
+    position: absolute;
+    top: 0;
+    right: 0;
+    padding: 15px 15px 10px 15px;
+    box-sizing: border-box;
+    background: #3781FC;
+}
+:deep(.el-dialog__header){
+	padding: 0 !important;
+	height: 58px;
+}
+.dialog-header{
+	font-size: 18px;
+	font-weight: 600;	
+	width: 70%;
+	text-align: center;
+	color: #000;
+}
+.courseL{
+	background: #FFFFFF;
+	cursor: pointer;
+	color: #F5A70C;
+	position: absolute;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	padding: 5px 10px;
+	box-sizing: border-box;
+	border-radius: 5px;
+	font-weight: 600;
+	font-size: 18px;
+	border: 2px #e7e7e7 solid;
+	top: 10px;
+	left: 65%;
+    gap: 5px;
+    img{
+        height: 25px;
+        object-fit: contain;
+    }
+}
+.topH{
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	height: 100%;
+}
+.backA{
+	display: flex;
+	gap: 30px;
+	height: 35px;
+	align-items: center;
+	width: 15%;
+	font-size: 16px;
+	justify-content: flex-end;
+	.bABtn{
+		padding: 3px 15px;
+		cursor: pointer;
+		box-sizing: border-box;
+		background: #3781FC;
+		color: #fff;
+		border-radius: 5px;
+	}
+}
+.draCon{
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+    .dratit{
+        display: flex;
+        border-bottom: 1px #C3C3C3 solid;
+        .tit{
+            font-family: PingFang TC;
+            font-weight: 600;
+            font-style: Semibold;
+            font-size: 20px;
+            line-height: 100%;
+            color: #000;
+            flex: 1;
+            text-align: center;
+            height: 35px;
+            cursor: pointer;
+        }
+        .tit2{
+            border-bottom: 1px #000 solid;
+        }
+    }
+    .draconL{
+        flex: 1;
+        overflow: auto;
+    }
+    .pdflist{
+        max-height: 100px;overflow: auto;padding: 20px 0;
+        box-sizing: border-box;
+        .pdfCS{
+            padding: 3px 10px;
+            box-sizing: border-box;
+            border-radius: 5px;
+            font-size: 15px;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            cursor: pointer;
+            .pdfCSTit{
+                -webkit-line-clamp: 1;
+                display: -webkit-box;
+                -webkit-box-orient: vertical;
+                overflow: hidden;
+                text-overflow: ellipsis; 
+            }
+            img{
+                height: 15px;
+                object-fit: cover;
+                cursor: pointer;
+            }
+        }
+        .pdfback{
+            background: #3781FC33;
+        }
+    }
+}
+
+
+</style>

Некоторые файлы не были показаны из-за большого количества измененных файлов