Browse Source

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_adminUI

wjj 1 ngày trước cách đây
mục cha
commit
5e273860af

+ 9 - 0
src/api/course/userCourseVideo.js

@@ -75,6 +75,15 @@ export function delUserCourseVideo(videoId) {
   })
 }
 
+// 同步课程模板
+export function syncTemplate(courseId) {
+  console.log(courseId)
+  return request({
+    url: '/course/userCourse/syncTemplate/' + courseId,
+    method: 'post'
+  })
+}
+
 // 导出课堂视频
 export function exportUserCourseVideo(query) {
   return request({

+ 100 - 61
src/views/components/course/userCourseCatalogDetails.vue

@@ -6,7 +6,7 @@
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="小节名称" prop="title">
         <el-input v-model="queryParams.title" placeholder="请输入小节名称" clearable size="small"
-                  @keyup.enter.native="handleQuery" />
+                  @keyup.enter.native="handleQuery"/>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -16,34 +16,45 @@
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
-                   v-hasPermi="['course:userCourseVideo:add']">新增目录</el-button>
+                   v-hasPermi="['course:userCourseVideo:add']">新增目录
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button type="primary" plain :disabled="!ids || ids.length <= 0" size="mini" @click="openUpdates"
-                   v-hasPermi="['course:userCourseVideo:updateTime']">修改时间</el-button>
+                   v-hasPermi="['course:userCourseVideo:updateTime']">修改时间
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button type="primary" plain size="mini" @click="openAdds"
-                   v-hasPermi="['course:userCourseVideo:batchAdd']">批量添加</el-button>
+                   v-hasPermi="['course:userCourseVideo:batchAdd']">批量添加
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button type="primary" plain size="mini" @click="updateRedPageckeOpen"
-                   v-hasPermi="['course:userCourseVideo:updateRed']">修改红包</el-button>
+                   v-hasPermi="['course:userCourseVideo:updateRed']">修改红包
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
-                   v-hasPermi="['course:userCourseVideo:remove']">删除</el-button>
+                   v-hasPermi="['course:userCourseVideo:remove']">删除
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button type="warning" plain icon="el-icon-edit" size="mini" @click="handleCourseSort"
-                   v-hasPermi="['course:userCourseVideo:sort']">修改课节排序</el-button>
+                   v-hasPermi="['course:userCourseVideo:sort']">修改课节排序
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-delete" size="mini" @click="handleSync"
+                   v-hasPermi="['course:userCourseVideo:sync']">同步模板数据
+        </el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <el-table border v-loading="loading" :data="userCourseVideoList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="视频ID" align="center" prop="videoId" />
-      <el-table-column label="小节名称" align="center" show-overflow-tooltip prop="title" />
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="视频ID" align="center" prop="videoId"/>
+      <el-table-column label="小节名称" align="center" show-overflow-tooltip prop="title"/>
       <el-table-column label="视频文件名称" align="center" show-overflow-tooltip prop="fileName">
       </el-table-column>
       <el-table-column label="视频时长" align="center" prop="duration">
@@ -69,30 +80,33 @@
           <el-tag type="danger" v-if="!row.lastJoinTime">无</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="红包金额" align="center" prop="redPacketMoney" />
-      <el-table-column label="排序" align="center" prop="courseSort" />
-      <el-table-column label="上传时间" align="center" prop="createTime" />
+      <el-table-column label="红包金额" align="center" prop="redPacketMoney"/>
+      <el-table-column label="排序" align="center" prop="courseSort"/>
+      <el-table-column label="上传时间" align="center" prop="createTime"/>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-                     v-hasPermi="['course:userCourseVideo:edit']">修改</el-button>
+                     v-hasPermi="['course:userCourseVideo:edit']">修改
+          </el-button>
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleComment(scope.row)"
-                     v-hasPermi="['course:courseWatchComment:list']">查看评论</el-button>
+                     v-hasPermi="['course:courseWatchComment:list']">查看评论
+          </el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
-                     v-hasPermi="['course:userCourseVideo:remove']">删除</el-button>
+                     v-hasPermi="['course:userCourseVideo:remove']">删除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
 
     <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
-                @pagination="getList" />
+                @pagination="getList"/>
     <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="110px" v-loading="uploadLoading">
         <el-form-item label="视频标题" prop="title">
-          <el-input v-model="form.title" placeholder="请输入内容" />
+          <el-input v-model="form.title" placeholder="请输入内容"/>
         </el-form-item>
         <el-form-item label="视频描述" prop="description">
-          <el-input v-model="form.description" type="textarea" :rows="2" placeholder="请输入内容" />
+          <el-input v-model="form.description" type="textarea" :rows="2" placeholder="请输入内容"/>
         </el-form-item>
         <el-form-item label="课程排序" prop="courseSort">
           <el-input-number v-model="form.courseSort" :min="1"></el-input-number>
@@ -110,7 +124,8 @@
                       :line_2.sync="form.lineTwo" :line_3.sync="form.lineThree" :thumbnail.sync="form.thumbnail"
                       :uploadType.sync="form.uploadType" :isTranscode.sync="form.isTranscode"
                       :transcodeFileKey.sync="form.transcodeFileKey" @video-duration="handleVideoDuration"
-                      @change="handleVideoChange" @selectProjects="handleSelectProjects" ref="videoUpload" append-to-body />
+                      @change="handleVideoChange" @selectProjects="handleSelectProjects" ref="videoUpload"
+                      append-to-body/>
 
         <el-form-item label="课题选择" prop="questionBankId">
           <el-button size="small" type="primary" @click="chooseQuestionBank">选取课题</el-button>
@@ -127,14 +142,15 @@
             </el-table-column>
             <el-table-column label="类别" align="center" prop="type">
               <template slot-scope="scope">
-                <dict-tag :options="typeOptions" :value="scope.row.type" />
+                <dict-tag :options="typeOptions" :value="scope.row.type"/>
               </template>
             </el-table-column>
-            <el-table-column label="答案" align="center" prop="answer" />
+            <el-table-column label="答案" align="center" prop="answer"/>
             <el-table-column label="操作" align="center" width="100px" fixed="right">
               <template slot-scope="scope">
                 <el-button size="mini" type="text" icon="el-icon-delete"
-                           @click="handleQuestionBankDelete(scope.row)">删除</el-button>
+                           @click="handleQuestionBankDelete(scope.row)">删除
+                </el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -155,14 +171,15 @@
         <el-form-item label="商品选择" v-if="form.isProduct === 1">
           <el-button size="small" type="primary" @click="chooseCourseProduct">选取商品</el-button>
           <el-table border width="100%" style="margin-top:5px;" :data="form.courseProducts">
-            <el-table-column label="商品名称" align="center" prop="productName" />
-            <el-table-column label="产品条码" align="center" prop="barCode" />
-            <el-table-column label="商品价格" align="center" prop="productPrice" />
-            <el-table-column label="库存" align="center" prop="stock" />
+            <el-table-column label="商品名称" align="center" prop="productName"/>
+            <el-table-column label="产品条码" align="center" prop="barCode"/>
+            <el-table-column label="商品价格" align="center" prop="productPrice"/>
+            <el-table-column label="库存" align="center" prop="stock"/>
             <el-table-column label="操作" align="center" width="100px" fixed="right">
               <template slot-scope="scope">
                 <el-button size="mini" type="text" icon="el-icon-delete"
-                           @click="handleCourseProductDelete(scope.row)">删除</el-button>
+                           @click="handleCourseProductDelete(scope.row)">删除
+                </el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -188,7 +205,8 @@
     <el-dialog :title="title" :visible.sync="updateBatchData.open" width="1000px" append-to-body>
       <el-form ref="form" :model="updateBatchData.form" label-width="110px">
         <el-form-item label="看课时间" prop="timeRange">
-          <el-time-picker is-range v-model="updateBatchData.form.timeRange" range-separator="至" start-placeholder="开始时间"
+          <el-time-picker is-range v-model="updateBatchData.form.timeRange" range-separator="至"
+                          start-placeholder="开始时间"
                           value-format="HH:mm:ss" end-placeholder="结束时间" placeholder="选择时间范围">
           </el-time-picker>
         </el-form-item>
@@ -215,19 +233,20 @@
       <el-form :inline="true" :model="addBatchData.queryParams" class="library-search">
         <el-form-item label="素材名称">
           <el-input v-model="addBatchData.queryParams.resourceName" placeholder="请输入素材名称" clearable size="small"
-                    @keyup.enter.native="resourceList" />
+                    @keyup.enter.native="resourceList"/>
         </el-form-item>
         <el-form-item label="类型">
-          <el-select v-model="addBatchData.queryParams.typeId" @change="changeCateType" placeholder="请选择素材类型" clearable
+          <el-select v-model="addBatchData.queryParams.typeId" @change="changeCateType" placeholder="请选择素材类型"
+                     clearable
                      size="small">
             <el-option v-for="item in addBatchData.typeOptions" :key="item.dictValue" :label="item.dictLabel"
-                       :value="item.dictValue" />
+                       :value="item.dictValue"/>
           </el-select>
         </el-form-item>
         <el-form-item label="子类型">
           <el-select v-model="addBatchData.queryParams.typeSubId" placeholder="请选择素材子类型" clearable size="small">
             <el-option v-for="item in addBatchData.typeSubOptions" :key="item.dictValue" :label="item.dictLabel"
-                       :value="item.dictValue" />
+                       :value="item.dictValue"/>
           </el-select>
         </el-form-item>
         <el-form-item>
@@ -238,15 +257,15 @@
       <!-- 视频列表 -->
       <el-table v-loading="addBatchData.loading" :data="addBatchData.list"
                 @selection-change="handVideoleSelectionChange" height="400px">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="素材名称" align="center" prop="resourceName" />
-        <el-table-column label="文件名称" align="center" prop="fileName" />
-        <el-table-column label="排序" align="center" prop="sort" />
+        <el-table-column type="selection" width="55" align="center"/>
+        <el-table-column label="素材名称" align="center" prop="resourceName"/>
+        <el-table-column label="文件名称" align="center" prop="fileName"/>
+        <el-table-column label="排序" align="center" prop="sort"/>
         <el-table-column label="缩略图" align="center">
           <template slot-scope="scope">
             <el-popover placement="right" title="" trigger="hover">
-              <img alt="" slot="reference" :src="scope.row.thumbnail" style="width: 80px; height: 50px" />
-              <img alt="" :src="scope.row.thumbnail" style="max-width: 150px;" />
+              <img alt="" slot="reference" :src="scope.row.thumbnail" style="width: 80px; height: 50px"/>
+              <img alt="" :src="scope.row.thumbnail" style="max-width: 150px;"/>
             </el-popover>
           </template>
         </el-table-column>
@@ -260,7 +279,7 @@
       <!-- 分页 -->
       <pagination v-show="addBatchData.total > 0" :total="addBatchData.total"
                   :page.sync="addBatchData.queryParams.pageNum" :limit.sync="addBatchData.queryParams.pageSize"
-                  @pagination="resourceList" />
+                  @pagination="resourceList"/>
 
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="batchVideoSave">确 定</el-button>
@@ -268,7 +287,7 @@
     </el-dialog>
     <el-dialog title="章节红包" :visible.sync="redData.open" width="900px" append-to-body>
       <el-table border v-loading="redData.loading" :data="redData.list" height="600px">
-        <el-table-column label="小节名称" align="center" show-overflow-tooltip prop="title" />
+        <el-table-column label="小节名称" align="center" show-overflow-tooltip prop="title"/>
         <el-table-column label="视频文件名称" align="center" show-overflow-tooltip prop="fileName">
         </el-table-column>
         <el-table-column label="视频时长" align="center" prop="duration">
@@ -278,11 +297,11 @@
         </el-table-column>
         <el-table-column label="红包金额" align="center" prop="redPacketMoney">
           <template slot-scope="scope">
-            <el-input class="el-input" v-model="scope.row.redPacketMoney" />
+            <el-input class="el-input" v-model="scope.row.redPacketMoney"/>
           </template>
         </el-table-column>
-        <el-table-column label="排序" align="center" prop="courseSort" />
-        <el-table-column label="上传时间" align="center" prop="createTime" />
+        <el-table-column label="排序" align="center" prop="courseSort"/>
+        <el-table-column label="上传时间" align="center" prop="createTime"/>
       </el-table>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="batchRedSave">确 定</el-button>
@@ -298,7 +317,8 @@
 
     <el-dialog title="修改课节排序" :visible.sync="openVideoSort" style="width: 1600px;" append-to-body>
       <draggable v-model="userCourseVideoSortList" @end="onDragEndDay" style="padding: 10px">
-        <el-button style="margin: 8px 4px;" v-for="(item, index) in userCourseVideoSortList" :class="item.newCourseSort != item.courseSort ? 'red':''">第{{
+        <el-button style="margin: 8px 4px;" v-for="(item, index) in userCourseVideoSortList"
+                   :class="item.newCourseSort != item.courseSort ? 'red':''">第{{
             item.newCourseSort
           }}序(原排序第{{ item.courseSort }})
         </el-button>
@@ -314,27 +334,31 @@
 <script>
 import {
   addUserCourseVideo,
+  batchSaveVideo,
+  batchUpdateRed,
   delUserCourseVideo,
   getSort,
   getUserCourseVideo,
   getVideoListByCourseId,
+  getVideoListByCourseIdAll,
+  sortCourseVideo,
   updates,
-  batchSaveVideo,
-  batchUpdateRed,
-  updateUserCourseVideo, getVideoListByCourseIdAll, sortCourseVideo
+  updateUserCourseVideo,
+  syncTemplate
 } from '@/api/course/userCourseVideo'
+// import {syncTemplate} from '@/api/course/userCourse'
 import QuestionBank from "@/views/course/courseQuestionBank/QuestionBank.vue";
 import CourseProduct from "@/views/course/fsCourseProduct/CourseProduct.vue";
 import VideoUpload from "@/components/VideoUpload/index.vue";
-import { listVideoResource } from '@/api/course/videoResource';
-import { getByIds } from '@/api/course/courseQuestionBank'
+import {listVideoResource} from '@/api/course/videoResource';
+import {getByIds} from '@/api/course/courseQuestionBank'
 import CourseWatchComment from "./courseWatchComment.vue";
-import { getCateListByPid, getCatePidList } from '@/api/course/userCourseCategory'
+import {getCateListByPid, getCatePidList} from '@/api/course/userCourseCategory'
 import draggable from 'vuedraggable'
 
 export default {
   name: "userCourseCatalog",
-  components: { VideoUpload, QuestionBank, CourseWatchComment, CourseProduct, draggable },
+  components: {VideoUpload, QuestionBank, CourseWatchComment, CourseProduct, draggable},
   data() {
     return {
       duration: null,
@@ -357,8 +381,8 @@ export default {
       isPrivate: null,
       videoUrl: "",
       uploadTypeOptions: [
-        { dictLabel: "线路一", dictValue: 2 },
-        { dictLabel: "线路二", dictValue: 3 },
+        {dictLabel: "线路一", dictValue: 2},
+        {dictLabel: "线路二", dictValue: 3},
       ],
       uploadLoading: false,
       courseId: null,
@@ -390,8 +414,7 @@ export default {
         list: [],
         open: false,
         loading: true,
-        form: {
-        }
+        form: {}
       },
       queryParams: {
         pageNum: 1,
@@ -440,10 +463,10 @@ export default {
       // 表单校验
       rules: {
         title: [
-          { required: true, message: "小节名称不能为空", trigger: "change" }
+          {required: true, message: "小节名称不能为空", trigger: "change"}
         ],
         courseSort: [
-          { required: true, message: "排序不能为空", trigger: "change" }
+          {required: true, message: "排序不能为空", trigger: "change"}
         ],
 
       },
@@ -581,7 +604,7 @@ export default {
         return
       }
 
-      const params = { ids: projectIds }
+      const params = {ids: projectIds}
       getByIds(params).then(response => {
         if (response.code === 200) {
           response.data.forEach(item => {
@@ -851,7 +874,23 @@ export default {
       }).then(() => {
         this.getList();
         this.msgSuccess("删除成功");
-      }).catch(() => { });
+      }).catch(() => {
+      });
+    },
+    /** 同步模板数据*/
+    handleSync() {
+      const courseId = this.courseId;
+      this.$confirm('是否同步课程数据至模板', "确认", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return syncTemplate(courseId);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("同步成功");
+      }).catch(() => {
+      });
     },
 
     handleCourseSort() {
@@ -879,7 +918,7 @@ export default {
 
     saveSorts() {
       let list = this.userCourseVideoSortList.filter(e => e.courseSort != e.newCourseSort).map(e => {
-        return { courseSort: e.newCourseSort, videoId: e.videoId }
+        return {courseSort: e.newCourseSort, videoId: e.videoId}
       })
       this.loading3 = true;
       sortCourseVideo(list).then(e => {