Forráskód Böngészése

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

JAELYS 3 éve
szülő
commit
70a13643b6

+ 10 - 18
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/QuesNaire.vue

@@ -290,22 +290,20 @@
 			// 获取blob里的问卷内容
 			getBlobItems(qnItem) {
 				return new Promise(async (resolve, reject) => {
-					let profile = localStorage.student_profile || localStorage.user_profile
-					let curBlobHost = JSON.parse(decodeURIComponent(profile, "utf-8")).blob_uri
-					let schoolBlobHost = curBlobHost.slice(0, curBlobHost.lastIndexOf('/')) + '/' +  localStorage.getItem('login_schoolCode')
-					let privateBlobHost = curBlobHost.slice(0, curBlobHost.lastIndexOf('/')) + '/' +  qnItem.creatorId
-					let cntr = qnItem.scope === 'school' ? this.$store.state.userInfo.azp : qnItem.creatorId
-					let blobHost = qnItem.scope === 'school' ?  schoolBlobHost : privateBlobHost
+					console.log(qnItem);
+					let blobHost = this.$tools.getBlobHost()
+					let cntr = qnItem.scope === 'school' ? qnItem.school : qnItem.code.replace('Survey-','')
+					let sasString = await this.$tools.getBlobSas(cntr)
+					let fullIndexJsonPath = blobHost + '/' + cntr + qnItem.blob + sasString
 					// 根据试卷的Blob地址 去读取JSON文件
-					let sasString = qnItem.scope === 'private' ? await this.$tools.getPrivateSas(cntr) : await this.$tools.getSchoolSas(cntr)
 					let promiseArr = []
-					let indexJson = await this.getBlobJsonFile(qnItem.scope, qnItem.blob, cntr)
+					let indexJson = await this.getBlobJsonFile(fullIndexJsonPath)
 					if(indexJson.slides.length) {
 						for (let item of indexJson.slides) {
 							promiseArr.push(new Promise(async (r, j) => {
 								try {
-									let itemJson = JSON.parse(await this.$tools.getFile(blobHost +
-										item + sasString.sas))
+									let itemFullPath = blobHost + '/' +  cntr + item + sasString
+									let itemJson = JSON.parse(await this.$tools.getFile(itemFullPath))
 									r(itemJson)
 								} catch (e) {
 									j(e)
@@ -325,16 +323,10 @@
 			},
 			
 			// 获取blob里的问卷信息
-			getBlobJsonFile(scope, url, container) {
+			getBlobJsonFile(indexJsonUrl) {
 				return new Promise(async (resolve, reject) => {
-					console.log(...arguments)
-					let profile = localStorage.student_profile || localStorage.user_profile
-					let blobUrl = JSON.parse(decodeURIComponent(profile, "utf-8")).blob_uri
-					let blobHost = blobUrl.slice(0, blobUrl.lastIndexOf('/')) + '/' +  container
-					// 根据试卷的Blob地址 去读取JSON文件
-					let sasString = scope === 'private' ? await this.$tools.getPrivateSas(container) : await this.$tools.getSchoolSas(container)
 					try {
-						let itemJson = JSON.parse(await this.$tools.getFile(blobHost + url + sasString.sas))
+						let itemJson = JSON.parse(await this.$tools.getFile(indexJsonUrl))
 						resolve(itemJson)
 					} catch(e) {
                         this.$Message.error(this.$t('studentWeb.queNaire.fileErr'))

+ 7 - 5
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/Vote.vue

@@ -267,10 +267,10 @@
                 }
             },
             async getVoteRes() {
-                if (this.voteInfo.recordUrl !== "") {
-                    let data = await this.getBlobItems(this.voteInfo)
-                    this.setData(data[0])
-                }
+                // if (this.voteInfo.recordUrl !== "") {
+                //     let data = await this.getBlobItems(this.voteInfo)
+                //     this.setData(data[0])
+                // }
             },
             // 删除不存在的投票
             delActivity() {
@@ -301,14 +301,16 @@
             getBlobItems(qnItem) {
                 let key = this.voteInfo.code.split('-')
                 let code = key[key.length - 1]
+                console.log(qnItem)
                 return new Promise(async (resolve, reject) => {
                     let blobHost = 'https://teammodelstorage.blob.core.chinacloudapi.cn/' + code
                     // 根据试卷的Blob地址 去读取JSON文件
                     let sasString = qnItem.scope === 'private' ? await this.$tools.getPrivateSas(code) : await this.$tools.getSchoolSas(code)
+                    let fullPath = await this.$tools.getFileSas(blobHost + qnItem.recordUrl)
                     let promiseArr = []
                         promiseArr.push(new Promise(async (r, j) => {
                             try {
-                                let itemJson = JSON.parse(await this.$tools.getFile(blobHost + qnItem.recordUrl + sasString.sas))
+                                let itemJson = JSON.parse(await this.$tools.getFile(fullPath.url))
                                 r(itemJson)
                             } catch (e) {
                                 j(e)

+ 15 - 9
TEAMModelOS/ClientApp/src/utils/evTools.js

@@ -496,14 +496,17 @@ export default {
 	/* 获取完整的试卷数据 */
 	getStuPaper(paper, examScope) {
 		let curScope = examScope || paper.scope
+		console.log(...arguments);
 		return new Promise(async (r, j) => {
-			let profile = localStorage.student_profile || localStorage.user_profile
-			let blobHost = JSON.parse(decodeURIComponent(profile, "utf-8")).blob_uri
-			let splitHost = blobHost.split('/')
+			let blobHost = this.getBlobHost()
 			// 根据试卷的Blob地址 去读取JSON文件
-			let sasString = curScope === 'school' ? await $tools.getSchoolSas(paper.code) : await $tools.getPrivateSas(paper.code)
+			let cntr = paper.code
+			let sasString = await $tools.getBlobSas(cntr)
+			let paperBlobPath = blobHost + '/' + cntr + paper.blob
+			let fullPath = paperBlobPath + '/index.json' + sasString
+			console.log(fullPath);
 			try {
-				let jsonInfo = await $tools.getFile(sasString.url + '/' + paper.code + paper.blob + '/index.json' + sasString.sas)
+				let jsonInfo = await $tools.getFile(fullPath)
 				let jsonData = JSON.parse(jsonInfo)
 				jsonData.scope = curScope
 				jsonData.code = paper.code
@@ -511,12 +514,12 @@ export default {
 				// 获取试卷包含的试题数据并包装好
 				if (jsonData.slides && jsonData.slides.length) {
 					jsonData.item = []
-					const path = sasString.url + '/' + paper.code + paper.blob
 					let promiseArr = []
 					jsonData.slides.forEach((item, index) => {
 						promiseArr.push(new Promise(async (resolve, reject) => {
 							// 获取题目JSON并且包装成完整试题对象
-							let itemJson = JSON.parse(await $tools.getFile(path + '/' + item.url + sasString.sas))
+							let itemFullPath = paperBlobPath + '/' + item.url + sasString
+							let itemJson = JSON.parse(await $tools.getFile(itemFullPath))
 							itemJson.exercise.question = itemJson.item[0].question
 							itemJson.exercise.option = itemJson.item[0].option
 							itemJson.exercise.id = itemJson.id 
@@ -555,10 +558,13 @@ export default {
 	/* 获取完整的试卷数据 */
 	getComposeItem(paper) {
 		return new Promise(async (r, j) => {
+			console.log(paper);
 			// 根据试卷的Blob地址 去读取JSON文件
-			let sasString = paper.scope === 'school' ? await $tools.getSchoolSas(paper.code) : await $tools.getPrivateSas(paper.code)
+			let cntr = paper.code
+			let sasString = await $tools.getBlobSas(cntr)
+			let fullPath = paper.blob + sasString
 			try {
-				let jsonInfo = await $tools.getFile(paper.blob + sasString.sas)
+				let jsonInfo = await $tools.getFile(fullPath)
 				let jsonData = JSON.parse(jsonInfo)
 				// 获取试卷包含的试题数据并包装好
 				if (jsonData.length) {

+ 43 - 29
TEAMModelOS/ClientApp/src/utils/public.js

@@ -169,11 +169,11 @@ export default {
 		'table', // 表格
 	],
 	// 生成随机UUID工具
-	randomId: function() {
+	randomId: function () {
 		return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
 	},
 	// 生成随机UUID工具
-	guid: function() {
+	guid: function () {
 		return (this.randomId() + this.randomId() + '-' + this.randomId() + '-' + this.randomId() + '-' + this
 			.randomId() +
 			'-' + this.randomId() + this.randomId() + this.randomId())
@@ -251,7 +251,7 @@ export default {
 		for (var k in o)
 			if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((
 				'00' + o[
-					k]).substr(('' + o[k]).length)))
+				k]).substr(('' + o[k]).length)))
 		return fmt
 	},
 
@@ -274,8 +274,8 @@ export default {
 			var formData = new FormData();
 			xhr.open('get', url); //url填写后台的接口地址,如果是post,在formData append参数(参考原文地址)
 			// xhr.responseType = 'arraybuffer';
-			xhr.onload = function(e) {
-				switch (e.currentTarget.status){
+			xhr.onload = function (e) {
+				switch (e.currentTarget.status) {
 					case 200:
 						resolve(e.currentTarget.response)
 						break;
@@ -286,7 +286,7 @@ export default {
 					case 403:
 						Message.error(app.$t('http.error403'))
 						reject(403)
-						break;		
+						break;
 					default:
 						break;
 				}
@@ -368,8 +368,8 @@ export default {
 			}
 		})
 	},
-	
-	getBlobHost(){
+
+	getBlobHost() {
 		let s = store.state.user.userProfile.blob_uri || store.state.user.studentProfile.blob_uri || 'https://teammodelstorage.blob.core.chinacloudapi.cn/hbcn'
 		return s.split(s.substring(s.lastIndexOf('/')))[0]
 	},
@@ -398,9 +398,9 @@ export default {
 				)
 			} else {
 				r({
-					sas:'?' + store.state.user.userProfile.blob_sas,
-					name:code || store.state.userInfo.TEAMModelId,
-					url:this.getBlobHost()
+					sas: '?' + store.state.user.userProfile.blob_sas,
+					name: code || store.state.userInfo.TEAMModelId,
+					url: this.getBlobHost()
 				})
 			}
 		})
@@ -429,9 +429,9 @@ export default {
 				)
 			} else {
 				r({
-					sas:'?' + store.state.user.schoolProfile.blob_sas,
-					name:code || store.state.userInfo.schoolCode,
-					url:this.getBlobHost()
+					sas: '?' + store.state.user.schoolProfile.blob_sas,
+					name: code || store.state.userInfo.schoolCode,
+					url: this.getBlobHost()
 				})
 			}
 		})
@@ -440,7 +440,7 @@ export default {
 	 * 获取单个文件授权
 	 */
 	getFileSas(param) {
-		console.log('获取单个文件授权',param)
+		console.log('获取单个文件授权', param)
 		return new Promise((r, j) => {
 			$api.blob.urlSasR({
 				url: param
@@ -460,9 +460,23 @@ export default {
 		})
 	},
 
+	/* 根据容器名称获取完整授权码 */
+	getBlobSas(code) {
+		return new Promise((r, j) => {
+			$api.blob.blobSasR({
+				name: code,
+				role: 'teacher'
+			}).then(res => {
+				if (!res.error) {
+					r('?' + res.sas)
+				}
+			})
+		})
+	},
+
 	/* 获取视频第一帧 */
 	getVideoBase64(url) {
-		return new Promise(function(resolve, reject) {
+		return new Promise(function (resolve, reject) {
 			let dataURL = '';
 			let video = document.createElement("video");
 			video.setAttribute('crossOrigin', 'anonymous'); //处理跨域
@@ -470,7 +484,7 @@ export default {
 			video.setAttribute('preload', 'auto');
 			video.setAttribute('width', 150);
 			video.setAttribute('height', 90);
-			video.addEventListener('loadeddata', function() {
+			video.addEventListener('loadeddata', function () {
 				let canvas = document.createElement("canvas"),
 					width = video.width, //canvas的尺寸和图片一样
 					height = video.height;
@@ -482,7 +496,7 @@ export default {
 				var img = new Image()
 				img.src = require('@/assets/icon/icon_play.png')
 				img.setAttribute('crossOrigin', 'anonymous');
-				img.onload = function() {
+				img.onload = function () {
 					//画图
 					canvas.getContext("2d").drawImage(img, 55, 25, 40, 40);
 					var data = canvas.toDataURL('image/jpeg');
@@ -591,9 +605,9 @@ export default {
 			editor.selection.getSelectionStartElem().elems[0].innerHTML += `<span><span>&nbsp;&nbsp;</span><span class="richText-audio" contenteditable="false" >
 					<span class="audio-info">
 						<i class="ivu-icon ivu-icon-ios-musical-notes" style="font-size: 24px;margin:0 10px"></i>
-						<span class="audio-name">${ file.name }</span>
+						<span class="audio-name">${file.name}</span>
 					</span>
-					<audio src="${ fileBlobUrl }"  id="audio" controls="controls" controlsList="nodownload"></audio>
+					<audio src="${fileBlobUrl}"  id="audio" controls="controls" controlsList="nodownload"></audio>
 				</span><span>&nbsp;</span></span>`
 			editor.change.emit()
 			vm.$EventBus.$emit('noSave', {
@@ -628,13 +642,13 @@ export default {
 			}))
 		}
 		Promise.all(promiseArr).then(result => {
-			localStorage.setItem('noSave','[]')
+			localStorage.setItem('noSave', '[]')
 		}).catch(err => {
 			console.log(err)
 		})
 
 	},
-	isEqual: function(x, y) {
+	isEqual: function (x, y) {
 		// If both x and y are null or undefined and exactly the same 
 		if (x === y) {
 			return true;
@@ -660,7 +674,7 @@ export default {
 					continue;
 				}
 				// Numbers, Strings, Functions, Booleans must be strictly equal 
-				if (typeof(x[p]) !== "object") {
+				if (typeof (x[p]) !== "object") {
 					return false;
 				}
 				// Objects and Arrays must be tested recursively 
@@ -688,7 +702,7 @@ export default {
 				val.fScores[subjectIndex].value[index],
 				stu.subjects[subjectIndex].fieldPoint[index],
 				val.fScores[subjectIndex].value[index] == 0 ? 0 : (stu.subjects[subjectIndex].fieldPoint[index] / val.fScores[subjectIndex].value[index])
-				.toFixed(2)
+					.toFixed(2)
 			])
 		})
 		return result
@@ -697,7 +711,7 @@ export default {
 	getLevelClassPercent(val, subjectIndex, index) {
 		let result = []
 		val.classes.forEach(classItem => {
-			result.push(classItem.subjects[subjectIndex].field.map((score,index) => val.fieldwrong[subjectIndex].value[index][1] == 0 ? 0 : Number(score / val.fieldwrong[subjectIndex].value[index][1]) * 100)[index])
+			result.push(classItem.subjects[subjectIndex].field.map((score, index) => val.fieldwrong[subjectIndex].value[index][1] == 0 ? 0 : Number(score / val.fieldwrong[subjectIndex].value[index][1]) * 100)[index])
 		})
 		return result
 	},
@@ -709,7 +723,7 @@ export default {
 			stuResult[item] = this.getLevelStuPercent(val, subjectIndex, index)
 			classResult[item] = this.getLevelClassPercent(val, subjectIndex, index)
 		})
-		stuResult.grade = val.fieldAllPer[subjectIndex].value.map((score,index) => (val.fieldwrong[subjectIndex].value[index][1] == 0 ? 0 : Number(score / val.fieldwrong[subjectIndex].value[index][1]).toFixed(2)) * 100)
+		stuResult.grade = val.fieldAllPer[subjectIndex].value.map((score, index) => (val.fieldwrong[subjectIndex].value[index][1] == 0 ? 0 : Number(score / val.fieldwrong[subjectIndex].value[index][1]).toFixed(2)) * 100)
 		stuResult.keys = val.knowKey
 		classResult.keys = val.knowkey
 		classResult.className = val.classes.map(i => i.className)
@@ -731,7 +745,7 @@ export default {
 				val.kScores[subjectIndex].value[index],
 				stu.subjects[subjectIndex].point[index],
 				val.kScores[subjectIndex].value[index] == 0 ? 0 : (stu.subjects[subjectIndex].point[index] / val.kScores[subjectIndex].value[index])
-				.toFixed(2)
+					.toFixed(2)
 			])
 		})
 		return result
@@ -741,7 +755,7 @@ export default {
 		let result = []
 		val.classes.forEach(classItem => {
 			// 取当前班级在每个知识点的得分 除以知识点的总分 得到每个班在该知识点的得分率 index=>知识点下标
-			result.push(classItem.subjects[subjectIndex].point.map((score,pointIndex) => val.wrong[subjectIndex].value[pointIndex][1] == 0 ? 0 : Number(score / val.wrong[subjectIndex].value[pointIndex][1]) * 100)[index])
+			result.push(classItem.subjects[subjectIndex].point.map((score, pointIndex) => val.wrong[subjectIndex].value[pointIndex][1] == 0 ? 0 : Number(score / val.wrong[subjectIndex].value[pointIndex][1]) * 100)[index])
 		})
 		return result
 	},
@@ -754,7 +768,7 @@ export default {
 			classResult[item] = this.getKnowClassPercent(val, subjectIndex, index)
 		})
 		// 取当前年级在每个知识点的得分 除以知识点的总分 得到年级在该知识点的得分率
-		stuResult.grade = val.knowAllper[subjectIndex].value.map((score,index) => val.wrong[subjectIndex].value[index][1] == 0 ? 0 : Number(score / val.wrong[subjectIndex].value[index][1]) * 100)
+		stuResult.grade = val.knowAllper[subjectIndex].value.map((score, index) => val.wrong[subjectIndex].value[index][1] == 0 ? 0 : Number(score / val.wrong[subjectIndex].value[index][1]) * 100)
 		stuResult.keys = val.knowKey
 		classResult.keys = val.knowkey
 		classResult.className = val.classes.map(i => i.className)