From db905ecd14f63dba9337b4f4715584ef2d7e8c7e Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期五, 07 三月 2025 14:45:00 +0800
Subject: [PATCH] 修改

---
 src/views/onlineEducation/courseSupervision/components/courseDialog.vue |  285 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 192 insertions(+), 93 deletions(-)

diff --git a/src/views/onlineEducation/courseSupervision/components/courseDialog.vue b/src/views/onlineEducation/courseSupervision/components/courseDialog.vue
index a45dcb5..0c113ae 100644
--- a/src/views/onlineEducation/courseSupervision/components/courseDialog.vue
+++ b/src/views/onlineEducation/courseSupervision/components/courseDialog.vue
@@ -3,42 +3,61 @@
     :visible.sync="dialogVisible"
     :modal-append-to-body="false"
     :close-on-click-modal="false"
-    width="600px"
+    width="50%"
     :before-close="handleClose"
   >
     <div style="margin:  0 25px">
-      <div style="display: flex;flex-direction: column">
-        <div style="display: flex;align-items: center;justify-content: space-between">
-          <span style="font-size: 20px;font-weight: 550">课程大纲</span>
-          <span style="color: #1890ff;cursor: pointer;" @click="clickOpen">收起/展开</span>
-        </div>
-        <div :class="{'open':isClose}" style="overflow: hidden">
-          <div v-for="(item,index) in courseList" :key="index" style="font-size: 16px;margin: 20px 35px">
-            <span>{{item.name}}</span>
-          </div>
-        </div>
+<!--      <div style="display: flex;flex-direction: column">-->
+<!--        <div style="display: flex;align-items: center;justify-content: space-between">-->
+<!--          <span style="font-size: 20px;font-weight: 550">课程大纲</span>-->
+<!--          <span style="color: #1890ff;cursor: pointer;" @click="clickOpen">收起/展开</span>-->
+<!--        </div>-->
+<!--        <div :class="{'open':isClose}" style="overflow: hidden">-->
+<!--          <div v-for="(item,index) in courseList" :key="index" style="font-size: 16px;margin: 20px 35px">-->
+<!--            <span>{{item.chapterName}}</span>-->
+<!--            <div v-if="item.children">-->
+<!--              <div v-for="(child,index) in item.children" :key="index"  style="font-size: 16px;margin: 20px 8px">-->
+<!--                <span>{{child.chapterName}}</span>-->
+<!--              </div>-->
+<!--            </div>-->
 
-      </div>
+<!--          </div>-->
+<!--        </div>-->
+
+<!--      </div>-->
       <div style="display: flex;flex-direction: column">
-        <span style="font-size: 20px;font-weight: 550">课程章节资源</span>
+        <span style="font-size: 20px;font-weight: 550">课程内容</span>
         <el-table
+          border
           :data="courseTable"
-          style="width: 80%;margin: 20px 35px">
+          :span-method="objectSpanMethod"
+          style="width: 100%;margin-top: 20px">
+<!--          <el-table-column-->
+<!--            prop="chapterParentCode"-->
+<!--            label="章节UUID">-->
+<!--          </el-table-column>-->
           <el-table-column
-            prop="catalogCode"
-            label="章节UUID">
+            prop="chapterParentName"
+            label="章节" align="center">
           </el-table-column>
           <el-table-column
-            prop="catalogName"
-            label="章节名称">
+            prop="chapterName"
+            label="小节名称" align="center">
+          </el-table-column>
+          <el-table-column
+            prop="teacher"
+            label="讲师" align="center">
+            <template #default="scope">
+              <span>{{scope.row.teacher ? scope.row.teacher : '--'}}</span>
+            </template>
           </el-table-column>
           <el-table-column
             label="资源类别"
-            prop="resourceType">
+            prop="resourceType" align="center">
           </el-table-column>
           <el-table-column
-            label="章节学时"
-            prop="lessonNum">
+            label="小节学时"
+            prop="lessonNum" align="center">
           </el-table-column>
           <el-table-column label="预览" align="center" class-name="small-padding fixed-width">
             <template #default="scope">
@@ -46,18 +65,24 @@
                 size="mini"
                 type="text"
                 style="color: #1890ff"
+                @click="openUrl(scope.row.url)"
               >预览课程</el-button>
             </template>
           </el-table-column>
         </el-table>
-
       </div>
 
     </div>
+    <span slot="footer" class="dialog-footer" v-if="showBtn">
+    <el-button type="primary" @click="examine('pass')">审核通过</el-button>
+    <el-button type="warning" @click="examine('reject')">审核驳回</el-button>
+    </span>
   </el-dialog>
 </template>
 
 <script >
+import { checkCourse, listCourse } from '@/api/onlineEducation/course'
+
 export default {
   name: 'addUser',
   components: {
@@ -68,101 +93,175 @@
       dialogVisible: false,
       dialogStatus: '',
       dataForm: {},
-      courseTable: [
-        {
-          catalogCode: '1',
-          catalogName: '测试',
-          resourceType: '视频',
-          lessonNum: '2h'
-        },
-        {
-          catalogCode: '1',
-          catalogName: '测试3',
-          resourceType: '音频',
-          lessonNum: '45min'
-        }
-      ],
-      courseList: [
-        {
-          name: '1.1  ……'
-        },
-        {
-          name: '1.2  ……'
-        },
-        {
-          name: '1.3  ……'
-        }
-
-      ]
+      courseTable: [],
+      courseList: [],
+      showBtn:false
     }
   },
   created() {
   },
   methods: {
-    openDialog (type, data) {
-      this.resetDataForm();
+    openDialog (data,type,courseType) {
       this.dialogVisible = true;
-      this.dialogStatus = type;
+      this.dataForm = data;
+      console.log('dataForm ',this.dataForm )
+      if(type === 'course'){
+        this.courseList = data.outline
+        this.courseTable = this.recursion(data.outline,type)
+
+        if(courseType == 'check'){
+          this.showBtn = true
+          console.log('this.showBtn ',this.showBtn )
+        }
+      }else {
+        console.log('courseT2222222222able',data.chapterList)
+        this.courseList = data.chapterList
+        this.courseTable = this.recursion(data.chapterList,type)
+      }
+
+      console.log('coursee',this.courseTable)
+    },
+    recursion (data,type) {
+      let tmp = []
+      if(data && data.length > 0){
+        for (let i = 0; i < data.length; i++) {
+          let item = data[i]
+          // children为空
+          if (item.children && item.children.length==0) {
+            // 有children
+          } else {
+            if(type === 'course'){
+              item.children.forEach(child => {
+                tmp.push({
+                  chapterParentCode: item.uuid,
+                  chapterParentName: item.chapterName,
+                  chapterCode: child.uuid,
+                  chapterName: child.chapterName,
+                  resourceType: child.haveResource == 0 ? '视频' : '音频' ,
+                  lessonNum: child.lessonNum,
+                  url: child.url,
+                  children: this.recursion(child.children),
+                  teacher: child.teacher
+                })
+              })
+            }else {
+              item.children.forEach(child => {
+                tmp.push({
+                  chapterParentCode: item.chapterUuid,
+                  chapterParentName: item.chapterName,
+                  chapterCode: child.chapterUuid,
+                  chapterName: child.chapterName,
+                  resourceType: child.haveResource == 0 ? '视频' : '音频' ,
+                  lessonNum: child.lessonNum,
+                  url: child.url,
+                  children: this.recursion(child.children),
+                  teacher: child.teacher
+                })
+              })
+            }
+
+          }
+        }
+      }
+      return tmp;
+    },
+    openUrl(url) {
+      window.open(url,'_blank')
     },
     clickOpen() {
       this.isClose = !this.isClose
     },
     handleClose() {
+      this.showBtn = false
       this.dialogVisible = false;
       this.$emit("getList");
     },
     onSubmit() {
-      this.$refs["dataForm"].validate( async valid => {
-        if (valid) {
-          if(this.dialogStatus == 'add'){
-            // this.dataForm.isCm = 1;
-            // console.log("this.dataForm",this.dataForm)
-            // const res = await addExam(this.dataForm);
-            // if(res.code == 200) {
-              this.$emit("getList");
-              this.dialogVisible = false;
-            //   this.$message({
-            //     type:'success',
-            //     message: '新增成功'
-            //   })
-            // }else{
-            //   this.$message({
-            //     type:'warning',
-            //     message: res.msg
-            //   })
-            // }
-          }else {
-            // this.dataForm.isCm = 1;
-            // console.log("this.dataForm",this.dataForm)
-            // const res = await updateExam(this.dataForm);
-            // if(res.code == 200) {
-              this.$emit("getList");
-              this.dialogVisible = false;
-            //   this.$message({
-            //     type:'success',
-            //     message: '编辑成功'
-            //   })
-            // }else{
-            //   this.$message({
-            //     type:'warning',
-            //     message: res.msg
-            //   })
-            // }
-          }
-        }
-      })
-
+        this.$emit("getList");
+        this.dialogVisible = false;
     },
-    resetDataForm() {
-      this.dataForm = {
+    examine(type){
+      let msg = '';
+      const param = {
+        id: this.dataForm.id,
+        status: null
       }
+      if(type === 'pass'){
+        param.status = 2
+        msg = '审核通过'
+      }else {
+        param.status = 3
+        msg = '审核驳回'
+      }
+      this.$confirm(`确定${msg}该条数据?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async () => {
+        checkCourse(param).then((res) => {
+          if (res.code == 200) {
+            this.$message({
+              message: '成功',
+              type: 'success'
+            })
+            this.handleClose()
+          }else {
+            this.$message({
+              message: res.msg,
+              type: 'warning'
+            })
+          }
+        })
+      })
     },
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      if(columnIndex === 0) {
+        const currentValue = row[column.property];
+        // 获取上一行相同列的值
+        const preRow = this.courseTable[rowIndex - 1];
+        const preValue = preRow ? preRow[column.property] : null;
+        // 如果当前值和上一行的值相同,则将当前单元格隐藏
+        if (currentValue === preValue) {
+          return { rowspan: 0, colspan: 0 };
+        } else {
+          // 否则计算当前单元格应该跨越多少行
+          let rowspan = 1;
+          for (let i = rowIndex + 1; i < this.courseTable.length; i++) {
+            const nextRow = this.courseTable[i];
+            const nextValue = nextRow[column.property];
+            if (nextValue === currentValue) {
+              rowspan++;
+            } else {
+              break;
+            }
+          }
+          return { rowspan, colspan: 1 };
+        }
+        // if(rowIndex%2 === 0){
+        //   return {
+        //     rowspan: 2,
+        //     colspan: 1
+        //   }
+        // }else {
+        //   return {
+        //     rowspan: 0,
+        //     colspan: 0
+        //   }
+        // }
+      }
+    }
   }
 }
+
 
 </script>
 <style scoped>
 .open{
   height: 15px;
 }
+.dialog-footer{
+  display: flex;
+  align-items: center;
+  justify-content: space-around;
+}
 </style>

--
Gitblit v1.9.2