浏览代码

Merge branch 'develop5.0-tmd' of http://106.12.23.251:10000/TEAMMODEL/TEAMModelOS into develop5.0-tmd

CrazyIter_Bin 4 年之前
父节点
当前提交
6913a36a34

+ 141 - 0
TEAMModelOS/ClientApp/src/common/BaseUpload.vue

@@ -0,0 +1,141 @@
+<template>
+	<div class="base-upload-container">
+		<Upload multiple type="drag" action="" :before-upload="onBeforeUpload" :show-upload-list="false">
+			<div style="padding: 40px 0">
+				<Icon type="ios-cloud-upload" size="100"
+					style="color: #848484;margin: 40px 0;"></Icon>
+				<p style="color: #ddd">选择或者拖拽文件到该区域进行上传</p>
+			</div>
+		</Upload>
+		<div class="file-list-box">
+			<div class="file-item" v-for="(item,index) in fileArr" :key="index">
+				<p>
+					<span>{{ item.name }}</span>
+					<span class="tool-remove" v-if="isShowTool">
+						<Icon type="md-close" @click="onRemoveFile(index)"/>
+					</span>
+				</p>
+				<Progress :percent="progressArr[index]" :stroke-width="12"/>
+			</div>
+		</div>
+		<Button  @click="onConfirmUpload" style="width: 100%;" class="modal-btn" :disabled="!fileArr.length">确认上传</Button>
+	</div>
+</template>
+
+<script>
+	import BlobTool from '@/utils/blobTool.js'
+	export default {
+		props: {
+			auth: {
+				type: Object,
+				default: () => {
+					return {
+						sas: '',
+						url: '',
+						name: ''
+					}
+				}
+			},
+			scope: {
+				type: String,
+				default: 'school'
+			}
+		},
+		data() {
+			return {
+				isShowTool:true,
+				containerClient: null,
+				fileArr:[],
+				progressArr:[]
+			}
+		},
+		created() {
+
+		},
+		methods: {
+			async onBeforeUpload(file) {
+				file.progress = 0
+				this.fileArr.push(file)
+				this.progressArr.push(0)
+				return false
+				
+			},
+			
+			onRemoveFile(index){
+				this.fileArr.splice(index,1)
+			},
+			
+			async onConfirmUpload(){
+				this.isShowTool = false
+				let result = []
+				let containerClient = this.containerClient
+				let list = this.fileArr
+				let that = this
+				for(let i = 0 ; i < list.length; i++){
+					let file = list[i]
+					try{
+						let blobFile = await containerClient.upload(file, "syllabus",{
+							onProgress: function (e) {
+								that.$set(that.progressArr,i,parseInt(e.loadedBytes * 100 / file.size))
+							}
+						});
+						result.push(blobFile)
+					}catch(e){
+						this.$Message.error(e)
+						return
+					}
+				}
+				this.fileArr = []
+				this.progressArr = []
+				this.$emit('uploadFinish',result)
+			}
+		},
+		mounted() {
+			if(this.auth.sas){
+				let n = this.auth
+				this.containerClient = new BlobTool(n.url, n.name, n.sas, this.scope)
+			}
+		},
+		watch: {
+			auth: {
+				handler(n, o) {
+					this.containerClient = new BlobTool(n.url, n.name, n.sas, this.scope)
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="less">
+	.base-upload-container{
+		.file-list-box{
+			margin: 20px 5px;
+			width: 100%;
+			max-height: 200px;
+			overflow: auto;
+			
+			.file-item{
+				margin: 10px 0;
+				
+				.tool-remove{
+					color: #b3b3b3;
+					margin-left: 15px;
+					font-size: 14px;
+					cursor: pointer;
+				}
+			}
+			
+			.ivu-progress{
+				margin-top: 10px;
+			}
+			
+			.ivu-progress-text-inner{
+				color: #ddd;
+			}
+			
+			&::-webkit-scrollbar-thumb{
+				background:#dadada !important;
+			}
+		}
+	}
+</style>

+ 2 - 2
TEAMModelOS/ClientApp/src/common/UploadModal.vue

@@ -1,4 +1,4 @@
-<template>
+<template>
     <Modal v-model="uploadStatus" :ok-text="textLoading ? $t('updModal.uploading') : isComplete ? $t('updModal.complete'):$t('updModal.comfirmUpd')" :cancel-text="$t('updModal.cancelUpd')" :title="$t('teachContent.btnUpload')" class="upload-modal dark-iview-modal" width="800" :mask-closable="false" :closable="false" @on-ok="modalOk" @on-cancel="modalCancel" :loading="modalLoading">
         <div class="upload-file-box">
             <!-- <p>上传到:{{pdInfo.filterPeriodName}}</p> -->
@@ -52,7 +52,7 @@
                         <Checkbox class="upload-info-wrap parse-label" v-if="item.extension == 'PPTX'" v-model="item.isParse">
                             {{$t('updModal.resolve')}}
                         </Checkbox>
-                        <Progress style="top:-10px;" v-if="item.status == 0" :percent="item.loadedBytes * 100 / item.size" status="active" stroke-color="#1CC0F3" :stroke-width="2" hide-info />
+                        <Progress style="top:-10px;" v-if="item.status == 0" :percent="item.progress" status="active" stroke-color="#1CC0F3" :stroke-width="2" hide-info />
                     </div>
                     <!-- 暂时去掉删除功能 -->
                     <!-- <div class="upload-item-right">

+ 22 - 2
TEAMModelOS/ClientApp/src/components/selflearn/NewChooseContent.vue

@@ -108,10 +108,19 @@
             <TabPane label="题目" name="question" v-if="showQuestion" tab="chooseContent">
                 <div class="tab-wrap">
                     <vuescroll>
-                        <ExerciseList @chooseQuChange="chooseQuChange"></ExerciseList>
+                        <ExerciseList ref="exListRef" @chooseQuChange="chooseQuChange"></ExerciseList>
+						<!-- <BaseExerciseList></BaseExerciseList> -->
                     </vuescroll>
                 </div>
             </TabPane>
+			<!-- 选择试卷 -->
+			<TabPane label="试卷" name="paper" v-if="showPaper" tab="chooseContent">
+			    <div class="tab-wrap">
+			        <vuescroll>
+						<BasePaperList ref="paperListRef" chooseModel @previewPaper="onPreviewPaper"></BasePaperList>
+			        </vuescroll>
+			    </div>
+			</TabPane>
         </Tabs>
     </div>
 </template>
@@ -120,9 +129,12 @@ import JSONPath from 'jsonpath'
 import BlobTool from '@/utils/blobTool.js'
 import E from '@/utils/wangEditor.js'
 import ExerciseList from '@/components/selflearn/ExerciseList.vue'
+import BasePaperList from '@/view/evaluation/bank/TestPaperList.vue'
+import BaseExerciseList from '@/view/evaluation/bank/ExerciseList.vue'
 export default {
     components: {
-        ExerciseList
+        ExerciseList,
+		BasePaperList,
     },
     props: {
         questionSize: {
@@ -141,6 +153,10 @@ export default {
             type: Boolean,
             default: true
         },
+		showPaper: {
+		    type: Boolean,
+		    default: true
+		},
         showOther: {
             type: Boolean,
             default: true
@@ -270,6 +286,9 @@ export default {
         }
     },
     methods: {
+		onPreviewPaper(paper){
+			this.$emit('previewPaper',paper)
+		},
         //选择题目
         chooseQuChange(qus){
             this.$emit('quChange',qus)
@@ -389,6 +408,7 @@ export default {
         },
         //Tab切换事件
         clickTab(name) {
+			console.log(name)
 			this.tabName = name
             switch (name) {
                 case 'content':

+ 1 - 5
TEAMModelOS/ClientApp/src/components/syllabus/DragTree.less

@@ -78,11 +78,7 @@
     color: #fff;
   }
   
-  .content-wrap{
-	  height: 600px !important;
-	  overflow: auto;
-	  padding-bottom: 200px;
-  }
+
   
   .ivu-modal-footer{
 	  border: none;

+ 9 - 0
TEAMModelOS/ClientApp/src/view/evaluation/bank/TestPaperList.less

@@ -187,6 +187,15 @@
                 display: flex;
             }
         }
+		
+		 &-select{
+			 position: absolute;
+			 height: 100%;
+			 right: 50px;
+			 top: 0;
+			 font-size: 14px;
+			 .fl-row-center;
+		 }
     }
 	
 	

+ 32 - 1
TEAMModelOS/ClientApp/src/view/evaluation/bank/TestPaperList.vue

@@ -29,7 +29,7 @@
 								class="info-bold">{{ paper.scoring ? paper.scoring.length : 0 }}</span></span>
 						<!-- <span class="info-item">难度系数:<span class="info-bold">{{ paper.item ? handleDiffCalc(paper.item) : 0 }}</span></span> -->
 					</div>
-					<div class="paper-item-tools">
+					<div class="paper-item-tools" v-if="!chooseModel">
 						<!-- <span class="paper-item-tools-edit" @click.stop="goToDownload(paper)">
 							<Icon type="md-download" />
 							<span>下载试卷</span>
@@ -49,6 +49,17 @@
 							<span>{{$t('evaluation.deleteItem')}}</span>
 						</span>
 					</div>
+					<div v-if="chooseModel" class="paper-item-select">
+						<div @click.stop="onCheckPaper(paper)" v-if="!checkedPaperList.length || (checkedPaperList.length && !checkedPaperList.map(i => i.id).includes(paper.id))">
+							<Icon type="md-add" />
+							<span>选择试卷</span>
+						</div>
+						<div @click.stop="onCancelCheck(paper)" v-else>
+							<Icon type="md-checkmark-circle" color="#32b67b"/>
+							<span>已选择</span>
+						</div>
+						
+					</div>
 				</div>
 
 				<!-- 底部分页区域 -->
@@ -99,6 +110,12 @@
 	import TestPaper from '../index/TestPaper.vue'
 	import AnswerSheet from '../../answersheet/index.vue'
 	export default {
+		props:{
+			chooseModel:{
+				type:Boolean,
+				default:false
+			}
+		},
 		components: {
 			Loading,
 			BaseFilter,
@@ -108,6 +125,7 @@
 		},
 		data() {
 			return {
+				checkedPaperList:[],
 				isShowSheet:false,
 				containerClient: null,
 				schoolCode: '',
@@ -153,8 +171,21 @@
 
 		},
 		methods: {
+			
+			onCheckPaper(item){
+				console.log(item)
+				this.checkedPaperList.push(item)
+			},
+			
+			onCancelCheck(item){
+				this.checkedPaperList.splice(this.checkedPaperList.indexOf(item),1)
+			},
 
 			async onPreviewPaper(paper) {
+				if(this.chooseModel){
+					this.$emit('previewPaper',paper)
+					return
+				}
 				this.dataLoading = true
 				let curPaper = paper
 				try {

+ 19 - 19
TEAMModelOS/ClientApp/src/view/evaluation/components/BaseFilter.vue

@@ -9,25 +9,25 @@
 			</RadioGroup>
 		</div>
 		<div class="filter-item" v-show="(isShowSchoolBank || (filterOrigin === schoolCode)) &&  hasSchool">
-			<span class="filter-title">{{$t('evaluation.filter.period')}}:</span>
-			<RadioGroup v-model="filterPeriod" type="button" @on-change="filterPeriodChange">
-				<Radio v-for="(item, index) in periodList" :key="index" :label="index">{{ item.name }}<span class="filter-count">({{ filterCounts.periodCountArr.length ? filterCounts.periodCountArr[index] : 0 }})</span></Radio>
-			</RadioGroup>
-		</div>
-		<div class="filter-item" v-show="(isShowSchoolBank || (filterOrigin === schoolCode)) &&  hasSchool">
-			<span class="filter-title">{{$t('evaluation.filter.grade')}}:</span>
-			<CheckboxGroup v-model="filterGrade" border @on-change="filterGradeChange">
-				<Checkbox lable="all">{{$t('evaluation.filter.all')}}</Checkbox>
-				<Checkbox v-for="(item, index) in gradeList" :key="index" :label="index">{{ item }}<span class="filter-count">({{ filterCounts.gradeCountArr.length ? filterCounts.gradeCountArr[index] : 0 }})</span></Checkbox>
-			</CheckboxGroup>
-		</div>
-		<div class="filter-item" v-show="(isShowSchoolBank || (filterOrigin === schoolCode)) &&  hasSchool">
-			<span class="filter-title">{{$t('evaluation.filter.subject')}}:</span>
-			<CheckboxGroup v-model="filterSubject" border @on-change="filterSubjectChange">
-				<Checkbox lable="all">{{$t('evaluation.filter.all')}}</Checkbox>
-				<Checkbox v-for="(item, index) in subjectList" :key="index" :label="item.id">{{ item.name }}<span class="filter-count">({{ filterCounts.subjectCountArr.length ? filterCounts.subjectCountArr[index] : 0 }})</span></Checkbox>
-			</CheckboxGroup>
-		</div>
+					<span class="filter-title">{{$t('evaluation.filter.period')}}:</span>
+					<RadioGroup v-model="filterPeriod" type="button" @on-change="filterPeriodChange">
+						<Radio v-for="(item, index) in periodList" :key="index" :label="index">{{ item.name }}<span class="filter-count"></span></Radio>
+					</RadioGroup>
+				</div>
+				<div class="filter-item" v-show="(isShowSchoolBank || (filterOrigin === schoolCode)) &&  hasSchool">
+					<span class="filter-title">{{$t('evaluation.filter.grade')}}:</span>
+					<CheckboxGroup v-model="filterGrade" border @on-change="filterGradeChange">
+						<Checkbox lable="all">{{$t('evaluation.filter.all')}}</Checkbox>
+						<Checkbox v-for="(item, index) in gradeList" :key="index" :label="index">{{ item }}<span class="filter-count"></span></Checkbox>
+					</CheckboxGroup>
+				</div>
+				<div class="filter-item" v-show="(isShowSchoolBank || (filterOrigin === schoolCode)) &&  hasSchool">
+					<span class="filter-title">{{$t('evaluation.filter.subject')}}:</span>
+					<CheckboxGroup v-model="filterSubject" border @on-change="filterSubjectChange">
+						<Checkbox lable="all">{{$t('evaluation.filter.all')}}</Checkbox>
+						<Checkbox v-for="(item, index) in subjectList" :key="index" :label="item.id">{{ item.name }}<span class="filter-count"></span></Checkbox>
+					</CheckboxGroup>
+				</div>
 		<div class="filter-item">
 			<span class="filter-title">{{$t('evaluation.filter.sort')}}:</span>
 			<RadioGroup v-model="filterSort" type="button" @on-change="filterSortChange">

+ 0 - 1
TEAMModelOS/ClientApp/src/view/homepage/HomePage.less

@@ -280,7 +280,6 @@
     text-align: center;
     margin-top: 40px;
     font-size: 14px;
-    
 }
 .tips-icon{
     display: block;

+ 0 - 1
TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue

@@ -219,7 +219,6 @@ export default {
     methods: {
         //保存阅卷配置
         saveMarkSetting() {
-            console.log(this.$refs['markSetting'])
             this.$refs['markSetting'].saveSetting()
         },
         filterByName() {

+ 57 - 6
TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue

@@ -1,6 +1,13 @@
 <template>
     <div class="mark-setting-wrap dark-iview-form">
-        <vuescroll>
+        <div v-show="!isSetting" class="publish-status-box">
+            <Icon type="ios-information-circle-outline" class="tips-icon" />
+            <p class="status-text">
+                <span style="font-size:16px;color:white">暂未发布阅卷任务</span>
+            </p>
+            <span class="setting-btn" @click="isSetting = !isSetting">发布任务</span>
+        </div>
+        <vuescroll v-show="isSetting">
             <!-- 基础设置 -->
             <div class="setting-block">
                 <!-- <p class="block-title">
@@ -26,7 +33,7 @@
                             <FormItem label="分配方式" class="setting-item-wrap" prop="mode">
                                 <RadioGroup v-model="setting.mode" style="color:white">
                                     <Radio label="full">按人分配</Radio>
-                                    <Radio label="qu" style="margin-left:20px">按题分配</Radio>
+                                    <Radio disabled label="qu" style="margin-left:20px">按题分配 (开发中)</Radio>
                                 </RadioGroup>
                             </FormItem>
                             </Col>
@@ -36,8 +43,8 @@
                                 <!-- <InputNumber :max="2" class="attr-value-wrap" :min="1" v-model="setting.point"></InputNumber> -->
                                 <RadioGroup v-model="setting.num" style="color:white">
                                     <Radio :label="1">单评制</Radio>
-                                    <Radio :label="2" style="margin-left:20px">双评制</Radio>
-                                    <Radio :label="3" style="margin-left:20px">三评制</Radio>
+                                    <Radio disabled :label="2" style="margin-left:0px">双评制 (开发中)</Radio>
+                                    <Radio disabled :label="3" style="margin-left:0px">三评制 (开发中)</Radio>
                                 </RadioGroup>
                             </FormItem>
                             </Col>
@@ -75,7 +82,7 @@
                     {{$t('learnActivity.mark.markRole')}}
                 </p> -->
                 <div class="setting-content" id="teacher-wrap-content">
-                    <Form ref="teacherSet" :model="subsInfo" label-colon :label-width="100" :rules="ruleValidate">
+                    <Form ref="teacherSet" :model="subsInfo" label-colon :label-width="100" :rules="ruleValidate" style="margin-top:15px">
                         <Row>
                             <Col :md="24" :lg="24" :xl="24" :xxl="24" v-if="setting.isErr">
                             <!-- 异常处理老师 -->
@@ -159,6 +166,7 @@ export default {
     data() {
         let _this = this
         return {
+            isSetting: false,
             ruleValidate: {
                 startTime: [
                     { required: true, type: 'number', message: '请设置阅卷开始时间', trigger: 'blur' }
@@ -288,7 +296,6 @@ export default {
                     align: 'center'
                 },
             ],
-
             dateOpt: {
                 disabledDate(date) {
                     return date && date.valueOf() < Date.now() - 86400000
@@ -424,6 +431,7 @@ export default {
                     if (res.correct) {
                         this.setting = res.correct
                     } else {
+                        this.isSetting = false
                         if (this.evInfo.subjects) {
                             this.setting.id = this.evInfo.id
                             this.setting.name = this.evInfo.name
@@ -523,6 +531,49 @@ export default {
 }
 </script>
 <style scoped lang="less">
+.publish-status-box {
+    width: 360px;
+    height: 315px;
+    background: #37363a;
+    margin: 60px auto;
+    padding: 20px;
+    border-radius: 20px;
+    position: relative;
+    box-shadow: 0 0px 10px 0px rgb(0 0 0);
+
+    &:hover {
+        // background: #3c3c41;
+    }
+    .tips-icon {
+        display: block;
+        margin: auto;
+        margin-top: 6%;
+        font-size: 80px;
+        margin-right: 5px;
+        color: #eeeeee;
+    }
+    .status-text {
+        color: #ccc;
+        text-align: center;
+        margin-top: 40px;
+        font-size: 14px;
+    }
+    .setting-btn {
+        display: block;
+        color: white;
+        background: #2db7f5;
+        width: 120px;
+        padding: 4px 0px;
+        border-radius: 4px;
+        position: absolute;
+        text-align: center;
+        bottom: 50px;
+        left: 50%;
+        font-size: 16px;
+        margin-left: -60px;
+        cursor: pointer;
+    }
+}
 .subject-wrap {
     margin-top: 30px;
     color: #a5a5a5;

+ 7 - 1
TEAMModelOS/ClientApp/src/view/syllabus/Syllabus.less

@@ -137,6 +137,12 @@
 			width: 50%;
 			border-right: 1px solid @borderColor;
 			
+			.syllabus-tree-box{
+				height: 100%;
+				overflow: auto;
+				padding-bottom: 80px;
+			}
+			
 			.node-resource-box{
 				display: flex;
 				flex-direction: column;
@@ -227,4 +233,4 @@
 	        padding:2px;
 	    }
 	}
-}
+}

文件差异内容过多而无法显示
+ 446 - 223
TEAMModelOS/ClientApp/src/view/syllabus/Syllabus.vue