y595705120 3 jaren geleden
bovenliggende
commit
28a70ab249
3 gewijzigde bestanden met toevoegingen van 195 en 276 verwijderingen
  1. 37 3
      src/store/module/menu.js
  2. 74 120
      src/view/course/info.vue
  3. 84 153
      src/view/course/list.vue

+ 37 - 3
src/store/module/menu.js

@@ -1,11 +1,12 @@
 export default {
 	"exams": [
+		// 题库管理
 		{
 			path: "exam",
 			name: "exam",
 			component: "view/exam/index.vue",
 			meta: {
-				title: "课程管理",
+				title: "题库管理",
 				icon: "goods"
 			},
 			children:[
@@ -21,7 +22,7 @@ export default {
 			]
 		},
 		
-		
+		// 用户管理
 		{
 			path: "study",
 			name: "study",
@@ -51,6 +52,39 @@ export default {
 				
 			]
 		}
-	
+		,
+		// 课程管理
+		{
+			path: "course_index",
+			name: "course_index",
+			component: "view/course/index.vue",
+			meta: {
+				title: "课程管理",
+				icon: "menu",
+				keepalive: true,
+			},
+			children:[
+				{
+					path: "course_list",
+					name: "course_list",
+					meta: {
+						title: "课程管理",
+						icon: "monitor"
+					},
+					component: "view/course/list.vue",
+				},
+				{
+					path: "course_info",
+					name: "course_info",
+					hidden: true,
+					meta: {
+						title: "课程详情",
+						
+						icon: "eleme"
+					},
+					component: "view/course/info.vue",
+				},
+			]
+		}
 	]	
 }

+ 74 - 120
src/view/course/info.vue

@@ -1,73 +1,48 @@
 <template>
   <div>
-
-    <div class="search-term">
-      <el-form :inline="true" class="demo-form-inline">
-		<el-form-item>
-		    <DropSearch  type="media"  @select="selectMedia" placeholder="点击选择视频" ></DropSearch>
-		</el-form-item>
-		<el-form-item>
-		    <el-button type="text">目前只支持从库中选视频新建课程</el-button>
-		</el-form-item>
+	<div class="button-box clearflex fr p20">
+		<el-button @click="$router.go(-1)" type="primary">
+			返回列表
+		</el-button>
 		
-      </el-form>
-    </div>
-    <el-table :data="tableData"  border stripe>
+		<el-button @click="dialogFormVisible = true" type="primary"
+	    >新增章节</el-button>
+	</div>
+	
+    <el-table :data="tableData.slice(page*size-size, page*size)"  border stripe>
       <el-table-column label="序号" width="70" prop="mediaId">
 
       </el-table-column>
 	  
-      <el-table-column label="课程名字"  prop="name" min-width="160">
+      <el-table-column label="视频名字"  prop="name" min-width="200">
 		  <template slot-scope="{row}">
-		    <el-input v-if="row.edit" v-model="row.name" type="text" clearable></el-input>
+		  	<el-input v-if="row.edit"  v-model="row.name"></el-input>
 		    <span v-else>{{row.name}}</span>
 		  </template>
-      </el-table-column>
-
-      <el-table-column label="视频信息"  prop="duration" width="160">
-        <template slot-scope="{row, $index}">  
-		  <DropSearch  v-if="row.edit" type="media"  @select="updateMedia" :id="$index" placeholder="点击选择视频" ></DropSearch>
-          <span v-else>{{ parseInt(row.duration/60) }}分钟</span>
-        </template>
-      </el-table-column>
-	  
-	  <el-table-column label="视频学时"  prop="xs" width="100" >
-	    <template slot-scope="{row}">  
-		  <el-input v-if="row.edit" v-model="row.xs" type="number" clearable></el-input>
-	      <span v-else>{{row.xs/10}}学时</span>
-	    </template>
-	  </el-table-column>
-	  
-	  <el-table-column label="提速百分比" prop="playRate">
-	    <template slot-scope="{ row }">
-	      <el-input
-	        v-if="row.edit"
-	        v-model="row.playRate"
-	        type="number" :max="1000" :min="0"
-	      >
-	      </el-input>
-	      <span v-else>{{ row.playRate }}%</span>
-	    </template>
-	  </el-table-column>
-	  
-	  
-	  <el-table-column label="视频分类"  prop="chapter" width="100">
-	    <template slot-scope="{row}"> 
-			<el-select v-if="row.edit"  v-model="row.chapter" placeholder="请选择">
-				<el-option :value="1" label="通用"></el-option>
-				<el-option :value="2" label="专业"></el-option>
-				<el-option :value="3" label="其他"></el-option>
-			</el-select>
-	      <span v-else>{{chapters[row.chapter]}}</span>
-	    </template>
-	  </el-table-column>
-	  
-	  <el-table-column label="加入时间"  prop="xs" width="160">
-	    <template slot-scope="{row}">  
-	      <span>{{row.publishAt}}</span>
-	    </template>
 	  </el-table-column>
 	  
+	  <el-table-column label="视频章节"  prop="chapter" min-width="140">
+		<template slot-scope="{row}">
+			<el-input v-if="row.edit"  v-model="row.chapter"></el-input>
+		  <span v-else>{{row.chapter}}</span>
+		</template>  
+		</el-table-column>
+
+	
+		<el-table-column label="视频地址"  prop="url" >
+			<template slot-scope="{row}">
+				<el-input v-if="row.edit"  v-model="row.url"></el-input>
+			  <span v-else>{{row.url}}</span>
+			</template>  
+		</el-table-column>
+		
+		
+		<el-table-column label="章节排序"  prop="orderId" >
+			<template slot-scope="{row}">
+				<el-input v-if="row.edit"  v-model="row.orderId"></el-input>
+			  <span v-else>{{row.orderId}}</span>
+			</template>  
+		</el-table-column>
       
       <el-table-column
         align="center"
@@ -101,7 +76,7 @@
 		
 		 <el-button
 		   v-if="!row.edit"
-		   type="primary"
+		   type="warning"
 		   size="small"
 		   icon="el-icon-edit"
 		   @click="dropMedia(row, $index)"
@@ -110,12 +85,13 @@
 		
       </el-table-column>
     </el-table>
+	
     <el-pagination
       :current-page="page"
       :page-size="size"
       :page-sizes="[10, 30, 50, 100]"
       :style="{float:'right',padding:'20px'}"
-      :total="total"
+      :total="tableData.length"
       @current-change="handleCurrentChange"
       @size-change="handleSizeChange"
       layout="total, sizes, prev, pager, next, jumper"
@@ -123,34 +99,22 @@
 	
 	<el-dialog title="新增课程" center :visible.sync="dialogFormVisible"  >
 	  <el-form :model="form" :rules="rules" label-width="120px" ref="elForm">
-	    <el-form-item  label="课程标题" prop="name" >
+	    <el-form-item  label="视频名字" prop="name" >
 	      <el-input  v-model="form.name" type="text" class="user-form-item" clearable></el-input>
 	    </el-form-item>
 		
-		<el-form-item  label="视频分类" prop="name">
-			<el-radio-group v-model="form.chapter">
-				<el-radio :label="0">其他</el-radio>
-				<el-radio :label="1">通用</el-radio>
-				<el-radio :label="2">专业</el-radio>
-			</el-radio-group>
-		</el-form-item>
-		
-		<el-form-item  label="课程学时" prop="name">
-			<el-input  v-model="form.xs" type="number" class="user-form-item" clearable></el-input>
+		<el-form-item  label="视频章节" prop="chapter" >
+		  <el-input  v-model="form.chapter" type="text" class="user-form-item" clearable></el-input>
 		</el-form-item>
 		
-		<el-form-item  label="视频时长(秒)" prop="name">
-			<el-input  v-model="form.duration" type="number" class="user-form-item" clearable></el-input>
+		<el-form-item  label="视屏地址" prop="name">
+			<el-input  v-model="form.url" type="text" class="user-form-item" clearable></el-input>
 		</el-form-item>
 		
-		<el-form-item  label="提速百分比" prop="name">
-			<el-input  v-model="form.playRate" type="number" :max="1000" :min="0" class="user-form-item" clearable></el-input>
-		</el-form-item>
-		
-		
-		<el-form-item  label="视频地址" prop="name">
-			<span>{{form.url}}</span>
+		<el-form-item  label="章节排序" prop="orderId">
+			<el-input  v-model="form.orderId" type="number" class="user-form-item" clearable></el-input>
 		</el-form-item>
+
 		
 	  </el-form>
 	  <div class="dialog-footer" slot="footer">
@@ -165,8 +129,7 @@
 
 <script>
 import DropSearch from '@/components/select/DropSearch.vue';
-import infoList from "@/mixins/infoList";
-import { getCourseMediaList, deleteCourseMedia, addCourseMedia} from "@/api/course.js";
+import { deleteCourseMedia, addCourseMedia, getCourseMediaList} from "@/api/course.js";
 import PreviewImg from "@/components/customPic/previewImg.vue";
 export default {
   name: "Api",
@@ -176,25 +139,25 @@ export default {
 		listApi: getCourseMediaList,
 		dialogFormVisible: false,
 		info:{},
+		searchInfo:{courseName:''},
+		tableData:[],
+		page:1,
+		size:10,
 		form:{
-			xs:0,
-			chapter:1,
+			name:'',
+			chapter:'',
+			orderId:'',
+			url:'',
 			courseId:+this.$route.query.id,
 		},
-		chapters:{
-			1:'通用',
-			2:'专业',
-			0:'其他'
-		},
 		rules:{
 			name: [{ required: true, message: "请输入标题", trigger: "blur" }],
-			groupName: [ { required: true, message: "请输入考题组", trigger: "blur" }],
-			startTime: [ { required: true, message: "请输入开始时间", trigger: "blur" }],
-			duration: [ { required: true, message: "请输入时长", trigger: "blur" }],
+			chapter: [ { required: true, message: "请输入章节", trigger: "blur" }],
+			url: [ { required: true, message: "请输入地址", trigger: "blur" }],
+			orderId: [ { required: true, message: "请输入章节排序", trigger: "blur" }],
 		}
     }
   },
-  mixins: [infoList],
   components:{PreviewImg,DropSearch},
   filters:{
 	toFiexd(val){
@@ -202,31 +165,25 @@ export default {
 	}  
   },
   methods: {
-	  onSubmit() {
-	    this.page = 1;
-	    this.size = 10;
-	    this.getTableData();
+	  getTableData(){
+		  let courseId = this.courseId;
+		 getCourseMediaList({courseId}).then( res=>{
+			if( res.code == 200){
+				this.tableData = res.data.map( v=>{
+					v.edit= false
+					return v
+				})
+			}
+		 })
 	  },
-	  selectMedia(row){
-		if( !row.id ) return
-		this.form = Object.assign( this.form, row);
-		this.form.xs = parseInt(row.duration /360)
-		this.form.name = row.name.split(".")[0];
-		this.form.url = `https://media.ndjsxh.cn:8443/mp4/study/${row.id}.mp4`
-		this.dialogFormVisible= true
+	  handleCurrentChange(page){
+		  this.page = page
 	  },
-	  updateMedia( item, index ){ 
-		let row = this.tableData[index];
-		row.url = `https://media.ndjsxh.cn:8443/mp4/study/${item.id}.mp4`
-		row.name = item.name.split(".")[0];
-		row.duration = item.duration
+	  handleSizeChange(size){
+		this.size = size;  
 	  },
 	  addCoursemedia( ){
 		let param = Object.assign( {}, this.form)
-		param.chapter = +param.chapter
-		param.xs = parseInt( 10*param.xs)
-		param.duration = +param.duration;
-		param.playRate = +param.playRate;
 		addCourseMedia( param ).then(res=>{
 			if( res.code == 200){
 				this.tableData.push( res.data )
@@ -237,14 +194,12 @@ export default {
 	  },
 	  doAddCoursemedia( row  ){
 		let param = Object.assign( {}, row )
-		param.chapter = +param.chapter
-		param.xs = parseInt( 10*param.xs )
-		param.duration = +param.duration;
-		param.playRate = +param.playRate;
+		delete param["temp"]
 		addCourseMedia( param ).then(res=>{
 			if( res.code == 200){
 				row= Object.assign( row, param )
 				row.edit = false
+				delete row["temp"]
 				this.$message.successMsg("编辑成功")
 			}
 		}) 
@@ -257,7 +212,6 @@ export default {
 	  initEdit(row, index) {
 	    let form = Object.assign({}, row);
 	    row.edit = true;
-		row.xs = row.xs/10
 	    row.temp = form;
 	  },
 	  dropMedia(row, index){
@@ -272,8 +226,8 @@ export default {
 	  }
   },
   beforeMount() {
-	let id  = + this.$route.query.id;
-	this.searchInfo.courseId = id
+	let id  = +this.$route.query.id;
+	this.courseId = id
     this.getTableData();
   }
 };

+ 84 - 153
src/view/course/list.vue

@@ -1,179 +1,127 @@
 <template>
   <div>
-    <div class="button-box clearflex fr p20">
-      <el-button @click="dialogFormVisible = true" type="primary"
-        >新增课程</el-button
-      >
-    </div>
-
     <div class="search-term">
       <el-form :inline="true" :model="searchInfo" class="demo-form-inline">
-        <el-form-item label="课程名字" prop="name">
+        <el-form-item label="课程名字" prop="courseName">
           <el-input
             placeholder="请输入课程名字"
-            v-model="searchInfo.name"
+            v-model="searchInfo.courseName"
             type="text"
             class="user-form-item"
             clearable
           ></el-input>
         </el-form-item>
-
-        <el-form-item label="年度" prop="nd">
-          <el-input
-            placeholder="请输入年度"
-            v-model="searchInfo.nd"
-            type="text"
-            class="user-form-item"
-            clearable
-          ></el-input>
+	
+        <el-form-item label="课程性质" prop="nd">
+          <el-select v-model="searchInfo.compulsory" placeholder="选择课程性质" clearable style="width:190px;">
+            <el-option label="必修" value="必修"></el-option>
+            <el-option label="选修" value="选修"></el-option>
+          </el-select>
         </el-form-item>
+		
+		<el-form-item label="课程形式" prop="nd">
+		  <el-select v-model="searchInfo.studyType" placeholder="选择课程形式" clearable style="width:190px;">
+		    <el-option label="网络" value="网络"></el-option>
+		    <el-option label="线下" value="线下"></el-option>
+		  </el-select>
+		</el-form-item>
 
-        <el-form-item label="课程分类" prop="type">
-            <drop-search
-              :info="searchInfo.type"
-              type="type"
-              class="user-form-item"
-              @select="okSearchType"
-            />
-        </el-form-item>
       </el-form>
     </div>
 
     <el-table :data="tableData" border stripe>
       <el-table-column label="序号" width="70" prop="courseId">
       </el-table-column>
-      <el-table-column label="岗位名称" prop="name">
+      <el-table-column label="课程名字" prop="courseName" min-width="100">
         <template slot-scope="{ row }">
           <el-input
             v-if="row.edit"
             class="edit-input"
             size="small"
-            v-model="row.name"
-            clearable
-          />
-          <span v-else>{{ row.name }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column label="岗位编码" prop="courseCode">
-        <template slot-scope="{ row }">
-          <el-input
-            v-if="row.edit"
-            type="text"
-            size="small"
-            v-model="row.courseCode"
-            clearable
-          />
-          <span v-else>{{ row.courseCode }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column label="课程类型" prop="marks">
-        <template slot-scope="{ row }">
-          <DropSearch
-            v-if="row.edit"
-            :info="row.type"
-            type="type"
-            @select="row.select"
-          ></DropSearch>
-          <span v-else>{{ row.type }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column label="学习年度" prop="marks">
-        <template slot-scope="{ row }">
-          <el-input
-            v-if="row.edit"
-            type="text"
-            size="small"
-            v-model="row.nd"
-            clearable
-          />
-          <span v-else>{{ row.nd }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column label="课程学时" prop="marks">
-        <template slot-scope="{ row }">
-          <el-input
-            v-if="row.edit"
-            type="text"
-            size="small"
-            v-model="row.xs"
+            v-model="row.courseName"
             clearable
           />
-          <span v-else>{{ row.xs / 10 }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column label="课程费用" prop="marks">
-        <template slot-scope="{ row }">
-          <el-input
-            v-if="row.edit"
-            type="text"
-            size="small"
-            v-model="row.fee"
-            clearable
-          />
-          <span v-else>{{ row.fee ? row.fee / 100 + "元" : "免费" }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column label="是否发布" prop="isPublish">
-        <template slot-scope="{ row }">
-          <el-switch
-            v-if="row.edit"
-            v-model="row.isPublish"
-            :active-value="1"
-            :inactive-value="0"
-          >
-          </el-switch>
-
-          <span v-else>{{ row.isPublish ? "是" : "否" }}</span>
+          <span v-else>{{ row.courseName }}</span>
         </template>
       </el-table-column>
 	  
-	  <el-table-column label="可以购买" prop="isPublish">
+	  <el-table-column label="课程类别" prop="type">
+	    <template slot-scope="{ row }">
+	      <el-input
+	        v-if="row.edit"
+	        class="edit-input"
+	        size="small"
+	        v-model="row.type"
+	        clearable
+	      />
+	      <span v-else>{{ row.type }}</span>
+	    </template>
+	  </el-table-column>
+	  
+	  
+	  <el-table-column label="学期" prop="semester" align="center">
 	    <template slot-scope="{ row }">
-	      <el-switch
+	      <el-input
 	        v-if="row.edit"
-	        v-model="row.canBuy"
-	        :active-value="1"
-	        :inactive-value="0"
-	      >
-	      </el-switch>
+	        class="edit-input"
+	        size="small"
+	        v-model="row.semester"
+	        clearable
+	      />
+	      <span v-else>{{ row.semester }}</span>
+	    </template>
+	  </el-table-column>
 	  
-	      <span v-else>{{ row.canBuy ? "是" : "否" }}</span>
+	  <el-table-column label="学分" prop="xf" align="center">
+	    <template slot-scope="{ row }">
+	      <el-input
+	        v-if="row.edit"
+	        class="edit-input"
+	        size="small"
+	        v-model="row.xf"
+	        clearable
+	      />
+	      <span v-else>{{ row.xf }}</span>
 	    </template>
 	  </el-table-column>
+	 
 
-      <el-table-column label="学时模板" prop="marks">
+      <el-table-column label="考核方式" prop="checkType" align="center">
         <template slot-scope="{ row }">
-          <div v-if="row.edit">
-            <el-radio
-              v-for="(item, index) in typeList"
-              v-model="row.tplId"
-              :key="index"
-              :label="+index"
-              >{{ item }}</el-radio
-            >
-          </div>
-          <span v-else>{{ typeList[row.tplId] || "--" }}</span>
+		  <el-select v-if="row.edit" v-model="row.checkType" placeholder="选择考核方式" clearable style="width:80px;">
+		    <el-option label="考" value="考"></el-option>
+		    <el-option label="查" value="查"></el-option>
+		  </el-select>
+          <span v-else>{{ row.checkType }}</span>
         </template>
       </el-table-column>
+		
+	  <el-table-column label="学习形式" prop="checkType" align="center">
+	    <template slot-scope="{ row }">
+	  		  <el-select v-if="row.edit" v-model="row.studyType" placeholder="选择学习形式" clearable style="width:80px;">
+	  		    <el-option label="网络" value="网络"></el-option>
+	  		    <el-option label="线下" value="线下"></el-option>
+	  		  </el-select>
+	      <span v-else>{{ row.studyType }}</span>
+	    </template>
+	  </el-table-column>
+     
+
+
 	  
-	  <el-table-column label="考试题组" prop="marks">
+	  <el-table-column label="考试题组" prop="examId">
 	    <template slot-scope="{ row }">
 	      <div v-if="row.edit">
 	        <el-radio
 	          v-for="(item, index) in examList"
-	          v-model="row.examGroupId"
+	          v-model="row.examId"
 	          :key="index"
 	          :label="+index"
+			  style="display: block;"
 	          >{{ item }}</el-radio
 	        >
 	      </div>
-	      <span v-else>{{ examList[row.examGroupId] || "--" }}</span>
+	      <span v-else>{{ examList[row.examId] || "--" }}</span>
 	    </template>
 	  </el-table-column>
 
@@ -181,11 +129,11 @@
         <template slot-scope="{ row }">
           <UploadImg
             v-if="row.edit"
-            v-model="row.tb"
+            v-model="row.courseImg"
             placeholder="课程图片"
-            @rmImage="row.tb = ''"
+            @rmImage="row.courseImg = ''"
           ></UploadImg>
-          <PreviewImg v-else :src="row.tb" title="查看图片" />
+          <PreviewImg v-else :src="row.courseImg" title="查看图片" />
         </template>
       </el-table-column>
 
@@ -363,24 +311,7 @@ export default {
 		7:'三类人员',
 		8:'特种工'
       },
-	  examList:{
-		0:"无需考试",
-		34:"三类人员",
-		35:	"劳务员",
-		36:"机械员",
-		37:	"土建施工员",
-		38:"装饰装修施工员",
-		39:	"设备安装施工员",
-		40:"土建质量员",
-		41:"装饰装修质量员",
-		42:"设备安装质量员",
-		43:"市政质量员",
-		44:"材料员",
-		45:"标准员",
-		81:"资料员",
-		46:"市政施工员"
-		
-	  },
+	  examList:{ },
       form: {
         type: "",
         xs: 0,
@@ -413,10 +344,11 @@ export default {
   mixins: [infoList],
   methods: {
 	 loadExamList(){
-		searchApi( {type:'examGroup'}).then(res=>{
+		searchApi( {type:'exam'}).then(res=>{
 		    if( res.code == 200){
 				for (let i in res.data){
-					this.examList[ res.data[i].id] = res.data[i].name
+					if( res.data[i].examId==1) continue;
+					this.examList[ res.data[i].examId] = res.data[i].name
 				}
 		    }
 		})
@@ -447,8 +379,7 @@ export default {
     },
     confirmEdit(row) {
       let param = Object.assign({}, row);
-      param.xs = parseInt(param.xs * 10);
-      param.fee = parseInt(param.fee * 100);
+      param.xf = +param.xf;
 	  delete param["temp"]
       addCourse(param).then((res) => {
         if (res.code == 200) {