Browse Source

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

XW 4 năm trước cách đây
mục cha
commit
86993c0b26
43 tập tin đã thay đổi với 2251 bổ sung3103 xóa
  1. 7 0
      TEAMModelOS/ClientApp/src/api/evaluation.js
  2. 1 1
      TEAMModelOS/ClientApp/src/components/evaluation/ExerciseList.vue
  3. 5 8
      TEAMModelOS/ClientApp/src/components/questionnaire/BaseQuestionnaire.vue
  4. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/cusMgt.js
  5. 84 21
      TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js
  6. 1 0
      TEAMModelOS/ClientApp/src/locale/lang/en-US/system.js
  7. 10 0
      TEAMModelOS/ClientApp/src/locale/lang/en-US/task.js
  8. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/cusMgt.js
  9. 74 10
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/learnActivity.js
  10. 2 2
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/serviceDriveAuth.js
  11. 1 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/system.js
  12. 10 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/task.js
  13. 5 7
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/teachermgmt.js
  14. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/cusMgt.js
  15. 72 9
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js
  16. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/schoolBaseInfo.js
  17. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/stuAccount.js
  18. 1 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/system.js
  19. 10 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/task.js
  20. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/teachermgmt.js
  21. 10 10
      TEAMModelOS/ClientApp/src/router/routes.js
  22. 10 0
      TEAMModelOS/ClientApp/src/store/module/user.js
  23. 1 1
      TEAMModelOS/ClientApp/src/utils/blobTool.js
  24. 124 36
      TEAMModelOS/ClientApp/src/utils/evTools.js
  25. 17 1
      TEAMModelOS/ClientApp/src/utils/public.js
  26. 22 19
      TEAMModelOS/ClientApp/src/view/evaluation/bank/TestPaperList.vue
  27. 19 103
      TEAMModelOS/ClientApp/src/view/evaluation/components/BaseFilter.vue
  28. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/index/index.vue
  29. 1 1
      TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue
  30. 58 59
      TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue
  31. 0 1364
      TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkView.vue
  32. 5 5
      TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue
  33. 53 49
      TEAMModelOS/ClientApp/src/view/student-account/ClassMgt.vue
  34. 4 4
      TEAMModelOS/ClientApp/src/view/student-account/MgtStuList.vue
  35. 424 186
      TEAMModelOS/ClientApp/src/view/syllabus/Syllabus.vue
  36. 39 29
      TEAMModelOS/ClientApp/src/view/task/mark/ByQu.vue
  37. 45 37
      TEAMModelOS/ClientApp/src/view/task/mark/ByStu.vue
  38. 8 4
      TEAMModelOS/ClientApp/src/view/task/mark/ProgPie.vue
  39. 2 2
      TEAMModelOS/ClientApp/src/view/task/mark/QuProg.vue
  40. 13 9
      TEAMModelOS/ClientApp/src/view/task/mark/StuProg.vue
  41. 6 6
      TEAMModelOS/ClientApp/src/view/teachcontent/index.vue
  42. 1 1
      TEAMModelOS/ClientApp/src/view/teachermgmt/Index.vue
  43. 1097 1110
      TEAMModelOS/ClientApp/src/view/teachermgmt/components/userList/Index.vue

+ 7 - 0
TEAMModelOS/ClientApp/src/api/evaluation.js

@@ -0,0 +1,7 @@
+import { fetch, post } from '@/api/http'
+
+export default {
+    getFilterCount: function (data) {        
+        return post('/item/cond-count', data)
+    }
+}

+ 1 - 1
TEAMModelOS/ClientApp/src/components/evaluation/ExerciseList.vue

@@ -182,7 +182,7 @@
 			}
 		},
 		data() {
-			return {
+			return { 
 				examPropScope:null,
 				dataLoading: false,
 				exersicesType: this.$GLOBAL.EXERCISE_TYPES(),

+ 5 - 8
TEAMModelOS/ClientApp/src/components/questionnaire/BaseQuestionnaire.vue

@@ -182,7 +182,7 @@
 			// 提取富文本内容中的文本
 			getSimpleText(html) {
 				var r = /<(?!img|video|audio).*?>/g;
-				return html.replace(r, "");
+				return html.replace(r, "").replace(/&nbsp;/g, ' ');
 			},
 			
 			// 检测是否有空选项
@@ -354,12 +354,7 @@
 					return 0 
 				}
 			},
-			
-			// 提取富文本内容中的文本
-			getSimpleText(html) {
-				var r = /<(?!img|video|audio).*?>/g;
-				return html.replace(r, "");
-			},
+
 			
 			async getQnRecord(item) {
 				return new Promise(async (r, j) => {
@@ -434,7 +429,9 @@
 			isEdit:{
 				handler(n,o){
 					this.editable = n
-				}
+					console.log(n)
+				},
+				immediate:true
 			}
 		}
 	};

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/en-US/cusMgt.js

@@ -3,7 +3,7 @@ export default {
     searchHolder:'搜索',
     delBatch:'批量删除',
     delCus:'删除课程',
-    addCus:'添加课程',
+    addCus:'新增课程',
     editCus:'编辑课程',
     noTeacher:'暂无',
     cusName:'课程名称',

+ 84 - 21
TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js

@@ -22,7 +22,7 @@ export default{
         autoTips2:'此功能仅用于展示情景快速模拟教师评分数据,且分数为随机生成,仅供参考!',
         autoScore:'一键评分',
         autoAnswer:'一键作答',
-        evSubject:'测试科:',
+        evSubject:'测试科:',
         returnTop:'返回顶部',
         mockOk:'模拟成功',
         mockErr:'模拟失败',
@@ -56,7 +56,7 @@ export default{
         evType:'评测类型',
         examType:'考试类别',
         courseType:'课程类别',
-        cusLabel1:'校课程',
+        cusLabel1:'校课程',
         cusLabel2:'个人课程',
         evTarget:'施测对象',
         publishType:'发布方式',
@@ -65,7 +65,7 @@ export default{
         endTime:'结束时间',
         eTimeHolder:'请选择结束时间',
         addSubject:'添加学科',
-        noSubject:'暂无科,请添加科',
+        noSubject:'暂无科,请添加科',
         noSubject1:'* 请先选择测试学段',
         papersLabel:'试卷库',
         perviewLabel:'试卷预览',
@@ -87,13 +87,13 @@ export default{
         formWarning:'请先完善评测基础信息!',
         paperWarning:'请挑选或导入试卷!',
         paperWarning1:'还没有试卷,请挑选或导入试卷!',
-        pdWarning:'请添加测试科!',
+        pdWarning:'请添加测试科!',
         publishOk:'评测发布成功!',
         togglePeriod:'切换学段',
         togglePdTip1:'您已添加',
-        togglePdTip2:'的测试科,如果现在切换学段会清空已选科,确定切换学段吗?',
+        togglePdTip2:'的测试科,如果现在切换学段会清空已选科,确定切换学段吗?',
         toggleOkText:'切换',
-        delPdTitle:'删除科',
+        delPdTitle:'删除科',
         delPdContent:'是否确认删除',
         delOk:'删除成功',
         pdTips:'请先选择测试学段!',
@@ -103,12 +103,12 @@ export default{
     manual:{
         source:'来源:',
         sourceP:'个人试卷库',
-        sourceS:'校试卷库',
+        sourceS:'校试卷库',
         pdLabel:'学段:',
         subjectLabel:'学科:',
         gradeLabel:'年级:',
         fitPd:'适用学段:',
-        fitSubject:'适用科:',
+        fitSubject:'适用科:',
         quCount:'题量:',
         useCount:'使用次数:',
         stdPaper:'已选试卷',
@@ -213,19 +213,14 @@ export default{
     },
 
     mark:{
-        baseSetting:'基础设置',
-        markMode:'阅卷模式',
-        full:'完整阅卷',
-        question:'指定题目',
         markNum:'阅卷次数',
-        allocation:'分配方式',
-        random:'随机分配',
-        class:'按班分配',
-        scoreDiff:'分差',
+        markNum1:'单评制',
+        markNum2:'双评制',
+        markNum3:'三评制',
         markRole:'阅卷角色',
-        errRole:'异常处理',
-        arb:'仲裁教师',
-        markRole:'阅卷教师',
+        errRole:'异常处理',
+        arb:'仲裁教师',
+        markRole:'阅卷教师',
         noTea:'暂无教师',
         remove:'移除',
         addTea:'添加阅卷老师',
@@ -252,7 +247,7 @@ export default{
         unassigned:'未分配',
         teaProgress:'教师阅卷进度',
         schedule:'调度',
-        subject:'科',
+        subject:'科',
         stuNum:'考试人数',
         scanProg:'扫描进度',
         assignStatus:'阅卷分配',
@@ -264,6 +259,74 @@ export default{
         progress:'进度',
         action:'操作',
         addTeaTitle:'添加阅卷老师',
-        markNum:'阅卷量'
+        markNum:'阅卷量',
+        noPublish:'暫未發布閱卷任務',
+        publish:'發布任務',
+        startTime:'開始時間',
+        endTime:'結束時間',
+        allocation:'分配方式',
+        allocationByStu:'按人分配',
+        allocationByQu:'按題分配',
+        openArb:'啟用仲裁',
+        yes:'是',
+        no:'否',
+        allQu:'所有題目',
+        noSet:'暫未設置',
+        quNoSet:'題號設置',
+        startErr:'請設置閱卷開始時間',
+        endErr:'請設置閱卷結束時間',
+        typeErr:'請設置分配方式',
+        numErr:'請設置閱卷次數',
+        markerErr:'請設置閱卷老師',
+        markQuNo:'批閱題號',
+        rmvTitle:'移除老師',
+        rmvContent:'是否確認移除',
+        baseErr:'請完成閱卷基礎設置',
+        teacherErr:'閱捲和相關老師設置',
+        saveOk:'保存成功! ',
+        saveErr:'保存失敗! ',
+        //ByqU.vue & ByStu.vue
+        quit:'退出阅卷',
+        examName:'考试名称:',
+        reviewType:'阅卷方式:',
+        byQu:'按题阅卷',
+        byStu:'按人阅卷',
+        stuId:'学生Id',
+        score:'分数:',
+        curQu:'当前题号:',
+        quProg:'题目进度',
+        exception:'异常申报',
+        move:'移动',
+        text:'文字',
+        brush:'画笔',
+        arrow:'箭头',
+        oval:'椭圆',
+        rect:'方框',
+        seal:'印章',
+        clear:'清除批注',
+        marked:'已阅',
+        unmark:'未阅',
+        fullScore:'满分',
+        zeroScore:'零分',
+        submit:'提交分数',
+        setting1:'打分自动切换学生',
+        setting2:'完成批阅自动弹出切换',
+        setting3:'打分自动切换题目',
+        setting4:'完成阅卷自动获取新学生',
+        toggleQu:'切换题目',
+        toggleStu:'切换学生',
+        saveErr:'保存失败',
+        noSocreErr:'请先打分',
+        completeQu:'当前题目已阅完,请切换题目',
+        completeStu:'当前完成当前学生评分,如果继续评分,请切换学生',
+        noAnswer:'未作答',
+        stuInfoErr:'学生信息异常',
+        ummarkQu:'未阅题目',
+        unmarkContent:'题目尚未评分,是否跳转到对应题目继续评分?',
+        finished:'已阅完',
+        noUnMarkStu:'已无未阅学生,请挑选进行中的学生继续阅卷。',
+        completeTask:'您已完成阅卷任务',
+        // ProgPie.vue
+        marking:'进行中'
     }
 }

+ 1 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/system.js

@@ -2,6 +2,7 @@ export default {
     preview:'P',
     title:'TEAM Model Cloud',
     loading:'加载中',
+    authErr:'权限不足!',
     menu:{
         school:'学校',
         private:'个人',

+ 10 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/task.js

@@ -13,4 +13,14 @@ export default {
     mLabel6:'人數',    
     markProg:'批閱進度',    
     mark:'批閱',
+    objectiveQu:'客观题已由系统自动完成评分。',
+    lastLabel1:'还剩',
+    lastLabel2:'人未阅,',
+    continue:'继续阅卷',
+    totalLabel1:'阅卷总量',
+    totalLabel2:'人,',
+    start:'开始阅卷',
+    noUnmark:'暂无未阅学生',
+    noMarking:'暂无进行中学生',
+    noMarked:'暂无已阅学生',
 }

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/cusMgt.js

@@ -3,7 +3,7 @@ export default {
     searchHolder:'搜索',
     delBatch:'批量删除',
     delCus:'删除课程',
-    addCus:'添加课程',
+    addCus:'新增课程',
     editCus:'编辑课程',
     noTeacher:'暂无',
     cusName:'课程名称',

+ 74 - 10
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/learnActivity.js

@@ -12,7 +12,8 @@ export default{
         finish:'已结束',
         endTime:'结束时间:',
         stop:'立即结束',
-        evType:'测试类型:',
+        evType:'评测类型:',
+        evMode:'评测模式:',
         stuCount:'施测人数:',
         nodata:'暂无评测',
         tab1:'评测数据',
@@ -212,15 +213,10 @@ export default{
     },
 
     mark:{
-        baseSetting:'基础设置',
-        markMode:'阅卷模式',
-        full:'完整阅卷',
-        question:'指定题目',
         markNum:'阅卷次数',
-        allocation:'分配方式',
-        random:'随机分配',
-        class:'按班分配',
-        scoreDiff:'分差',
+        markNum1:'单评制',
+        markNum2:'双评制',
+        markNum3:'三评制',
         markRole:'阅卷角色',
         errRole:'异常处理',
         arb:'仲裁教师',
@@ -263,6 +259,74 @@ export default{
         progress:'进度',
         action:'操作',
         addTeaTitle:'添加阅卷老师',
-        markNum:'阅卷量'
+        markNum:'阅卷量',
+        noPublish:'暂未发布阅卷任务',
+        publish:'发布任务',
+        startTime:'开始时间',
+        endTime:'结束时间',
+        allocation:'分配方式',
+        allocationByStu:'按人分配',
+        allocationByQu:'按题分配',
+        openArb:'启用仲裁',
+        yes:'是',
+        no:'否',
+        allQu:'所有题目',
+        noSet:'暂未设置',
+        quNoSet:'题号设置',
+        startErr:'请设置阅卷开始时间',
+        endErr:'请设置阅卷结束时间',
+        typeErr:'请设置分配方式',
+        numErr:'请设置阅卷次数',
+        markerErr:'请设置阅卷老师',
+        markQuNo:'批阅题号',
+        rmvTitle:'移除老师',
+        rmvContent:'是否确认移除',
+        baseErr:'请完成阅卷基础设置',
+        teacherErr:'阅卷和相关老师设置',
+        saveOk:'保存成功!',
+        saveErr:'保存失败!',
+        //ByqU.vue & ByStu.vue
+        quit:'退出阅卷',
+        examName:'考试名称:',
+        reviewType:'阅卷方式:',
+        byQu:'按题阅卷',
+        byStu:'按人阅卷',
+        stuId:'学生Id',
+        score:'分数:',
+        curQu:'当前题号:',
+        quProg:'题目进度',
+        exception:'异常申报',
+        move:'移动',
+        text:'文字',
+        brush:'画笔',
+        arrow:'箭头',
+        oval:'椭圆',
+        rect:'方框',
+        seal:'印章',
+        clear:'清除批注',
+        marked:'已阅',
+        unmark:'未阅',
+        fullScore:'满分',
+        zeroScore:'零分',
+        submit:'提交分数',
+        setting1:'打分自动切换学生',
+        setting2:'完成批阅自动弹出切换',
+        setting3:'打分自动切换题目',
+        setting4:'完成阅卷自动获取新学生',
+        toggleQu:'切换题目',
+        toggleStu:'切换学生',
+        saveErr:'保存失败',
+        noSocreErr:'请先打分',
+        completeQu:'当前题目已阅完,请切换题目',
+        completeStu:'当前完成当前学生评分,如果继续评分,请切换学生',
+        noAnswer:'未作答',
+        stuInfoErr:'学生信息异常',
+        ummarkQu:'未阅题目',
+        unmarkContent:'题目尚未评分,是否跳转到对应题目继续评分?',
+        finished:'已阅完',
+        noUnMarkStu:'已无未阅学生,请挑选进行中的学生继续阅卷。',
+        completeTask:'您已完成阅卷任务',
+        // ProgPie.vue
+        marking:'进行中'
     }
 }

+ 2 - 2
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/serviceDriveAuth.js

@@ -52,7 +52,7 @@ export default {
 
   //SpaceStatus.vue
   智慧教学服務空間狀態: '智慧教学服务空间状态',
-  分配教空間: '分配教学空间',
+  分配教空間: '分配教学空间',
   空間總數: '空间总数',
   已使用空間總數: '已使用空间总数',
   空間使用狀況: '空间使用状况',
@@ -175,7 +175,7 @@ export default {
   '先輸入有效數字,並進行勾選,再套用': '先输入有效数字,并进行勾选,再套用',
 
   //store/spaceAuth.js
-  校已使用空間:'学校已使用空间',
+  校已使用空間:'学校已使用空间',
   已分配給教師空間:'已分配给教师空间',
   剩餘空間:'剩余空间'
 }

+ 1 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/system.js

@@ -2,6 +2,7 @@ export default {
     preview:'预览',
     title:'醍摩豆云平台',
     loading:'加载中',
+    authErr:'权限不足!',
     menu:{
         school:'学校',
         private:'个人',

+ 10 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/task.js

@@ -13,4 +13,14 @@ export default {
     mLabel6:'人数',
     markProg:'批阅进度',
     mark:'批阅',
+    objectiveQu:'客观题已由系统自动完成评分。',
+    lastLabel1:'还剩',
+    lastLabel2:'人未阅,',
+    continue:'继续阅卷',
+    totalLabel1:'阅卷总量',
+    totalLabel2:'人,',
+    start:'开始阅卷',
+    noUnmark:'暂无未阅学生',
+    noMarking:'暂无进行中学生',
+    noMarked:'暂无已阅学生',
 }

+ 5 - 7
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/teachermgmt.js

@@ -62,12 +62,12 @@ export default {
         'teacher':'教师'
     },
     authority:{
-        'classroom':'班级教室管理',
+        'classroom':'教室管理',
         'system':'学校基础数据管理',
         'studentAccount':'学生账号管理',
         'teachermgmt':'教师账号管理',
-        'classroom-read':'检视班级教室资料',
-        'classroom-upd':'变更班级教室设定',
+        'classroom-read':'检视教室资料',
+        'classroom-upd':'变更教室设定',
         'schoolSetting-read':'检视学校基础设定',
         'schoolSetting-upd':'变更学校基础设定',
         'student-read':'检视学生账号',
@@ -96,15 +96,13 @@ export default {
         'knowledge': '知识点库管理',
         'knowledge-read': '查看知识点库信息',
         'knowledge-upd': '修改知识点库信息',
-        'totalIndex': '学情分析',
+        'analysis': '学情分析',
         'analysis-read': '查看学校学情分析',
         'scboard': '统计分析',
         'scboard-read': '查看统计分析',
         'schoolAc': '学校活动',
         'schoolAc-read': '查看学校活动',
-        'schoolAc-upd':'发布学校活动',
-        'schoolEvaluation':'模拟评测数据',
-        'mock-eva':'一键模拟评测作答和评分数据'
+        'schoolAc-upd':'发布学校活动'
     },
     modal:{
         text1: '此账号权限已变更,是否要给此账号更加合适的职称',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/cusMgt.js

@@ -3,7 +3,7 @@ export default {
     searchHolder: '搜尋',
     delBatch: '批量刪除',
     delCus: '刪除課程',
-    addCus: '添加課程',
+    addCus: '新增課程',
     editCus: '編輯課程',
     noTeacher: '暫無',
     cusName: '課程名稱',

+ 72 - 9
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js

@@ -213,15 +213,10 @@ export default {
     },
 
     mark: {
-        baseSetting: '基礎設定',
-        markMode: '閱卷模式',
-        full: '完整閱卷',
-        question: '指定題目',
         markNum: '閱卷次數',
-        allocation: '分配方式',
-        random: '隨機分配',
-        class: '按班分配',
-        scoreDiff: '分差',
+        markNum1:'單評制',
+        markNum2:'雙評制',
+        markNum3:'三評制',
         markRole: '閱卷職務',
         errRole: '異常處理:',
         arb: '仲裁教師:',
@@ -264,6 +259,74 @@ export default {
         progress: '進度',
         action: '操作',
         addTeaTitle: '增加閱卷老師',
-        markNum: '閱卷量'
+        markNum: '閱卷量',
+        noPublish:'暫未發布閱卷任務',
+        publish:'發布任務',
+        startTime:'開始時間',
+        endTime:'結束時間',
+        allocation:'分配方式',
+        allocationByStu:'按人分配',
+        allocationByQu:'按題分配',
+        openArb:'啟用仲裁',
+        yes:'是',
+        no:'否',
+        allQu:'所有題目',
+        noSet:'暫未設置',
+        quNoSet:'題號設置',
+        startErr:'請設置閱卷開始時間',
+        endErr:'請設置閱卷結束時間',
+        typeErr:'請設置分配方式',
+        numErr:'請設置閱卷次數',
+        markerErr:'請設置閱卷老師',
+        markQuNo:'批閱題號',
+        rmvTitle:'移除老師',
+        rmvContent:'是否確認移除',
+        baseErr:'請完成閱卷基礎設置',
+        teacherErr:'閱捲和相關老師設置',
+        saveOk:'保存成功! ',
+        saveErr:'保存失敗! ',
+        //ByqU.vue & ByStu.vue
+        quit:'退出閱卷',
+        examName:'考試名稱:',
+        reviewType:'閱卷方式:',
+        byQu:'按題閱卷',
+        byStu:'按人閱卷',
+        stuId:'學生Id',
+        score:'分數:',
+        curQu:'當前題號:',
+        quProg:'題目進度',
+        exception:'異常申報',
+        move:'移動',
+        text:'文字',
+        brush:'畫筆',
+        arrow:'箭頭',
+        oval:'橢圓',
+        rect:'方框',
+        seal:'印章',
+        clear:'清除批註',
+        marked:'已閱',
+        unmark:'未閱',
+        fullScore:'滿分',
+        zeroScore:'零分',
+        submit:'提交分數',
+        setting1:'打分自動切換學生',
+        setting2:'完成批閱自動彈出切換',
+        setting3:'打分自動切換題目',
+        setting4:'完成閱卷自動獲取新學生',
+        toggleQu:'切換題目',
+        toggleStu:'切換學生',
+        saveErr:'保存失敗',
+        noSocreErr:'請先打分',
+        completeQu:'當前題目已閱完,請切換題目',
+        completeStu:'當前完成當前學生評分,如果繼續評分,請切換學生',
+        noAnswer:'未作答',
+        stuInfoErr:'學生信息異常',
+        ummarkQu:'未閱題目',
+        unmarkContent:'題目尚未評分,是否跳轉到對應題目繼續評分? ',
+        finished:'已閱完',
+        noUnMarkStu:'已無未閱學生,請挑選進行中的學生繼續閱卷。 ',
+        completeTask:'您已完成閱卷任務',
+        // ProgPie.vue
+        marking:'進行中'
     }
 }

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/schoolBaseInfo.js

@@ -32,7 +32,7 @@ export default {
   startDate: '開始於',
   semesterDuration: '學期時長:',
   dayUnit: '天',
-  saveInfo: '變更',
+  saveInfo: '存儲變更',
   noSemester: '沒有設定學期',
   editLabel: '編輯',
   monthHolder: '月',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/stuAccount.js

@@ -54,7 +54,7 @@ export default {
   classroomInfo: '班級',
   classroomInfoHolder: '請選擇班級',
   newClassroom: '建立新班級',
-  periodInfo: '學制資訊',
+  periodInfo: '學制',
   gradeInfo: '年級',
   submitAccount: '建立帳號',
   submitActive: '儲存',

+ 1 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/system.js

@@ -2,6 +2,7 @@ export default {
     preview:'預覽',
     title:'醍摩豆雲平台',
     loading: '加載中',
+    authErr:'權限不足! ',
     menu: {
         school: '學校',
         private: '個人',

+ 10 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/task.js

@@ -13,4 +13,14 @@ export default {
     mLabel6:'人數',    
     markProg:'批閱進度',    
     mark:'批閱',
+    objectiveQu:'客觀題已由系統自動完成評分。 ',
+    lastLabel1:'還剩',
+    lastLabel2:'人未閱,',
+    continue:'繼續閱卷',
+    totalLabel1:'閱卷總量',
+    totalLabel2:'人,',
+    start:'開始閱卷',
+    noUnmark:'暫無未閱學生',
+    noMarking:'暫無進行中學生',
+    noMarked:'暫無已閱學生',
 }

+ 3 - 3
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/teachermgmt.js

@@ -62,12 +62,12 @@ export default {
         'teacher':'教師'
     },
     authority:{
-        'classroom':'班級教室管理',
+        'classroom':'教室管理',
         'system':'學校基礎數據管理',
         'studentAccount':'學生帳號管理',
         'teachermgmt':'教師帳號管理',
-        'classroom-read':'檢視班級教室資料',
-        'classroom-upd':'變更班級教室設定',
+        'classroom-read':'檢視教室資料',
+        'classroom-upd':'變更教室設定',
         'schoolSetting-read':'檢視學校基礎設定',
         'schoolSetting-upd':'變更學校基礎設定',
         'student-read':'檢視學生帳號',

+ 10 - 10
TEAMModelOS/ClientApp/src/router/routes.js

@@ -91,11 +91,11 @@ export const routes = [
 		path: '/joinclass',
 		component: resolve => require(['@/view/joinclass/JoinClass.vue'], resolve)
 	},
-	{
-		path: '/MarkView',
-		name:'FullMarkView',
-		component: resolve => require(['@/view/learnactivity/markpaper/MarkView.vue'], resolve)
-	},
+	// {
+	// 	path: '/MarkView',
+	// 	name:'FullMarkView',
+	// 	component: resolve => require(['@/view/learnactivity/markpaper/MarkView.vue'], resolve)
+	// },
 	{
 		path: '/schoolList',
 		component: Home,
@@ -238,11 +238,11 @@ export const routes = [
 			]
 		},
 		//废弃 阅卷和批注代码混合,不方便维护
-		{
-			path: 'MarkView',
-			name:'MarkView',
-			component: resolve => require(['@/view/learnactivity/markpaper/MarkView.vue'], resolve)
-		},
+		// {
+		// 	path: 'MarkView',
+		// 	name:'MarkView',
+		// 	component: resolve => require(['@/view/learnactivity/markpaper/MarkView.vue'], resolve)
+		// },
 		// 按人阅卷
 		{
 			path: 'ByStu',

+ 10 - 0
TEAMModelOS/ClientApp/src/store/module/user.js

@@ -483,6 +483,16 @@ export default {
                 (resolve, reject) => {
                     apiTools.schoolUser.getSchoolAuthorityList().then(
                         res => {
+                            // 暂时去掉四类(课纲、内容、题库、知识点)校本资源的读取权限,老师加入学校默认会添加这四个权限
+                            let auth = ['content-read','exercise-read','knowledge-read','syllabus-read']
+                            for (let i = 0; i < res.authoritylist.length; i++) {
+                                if(auth.includes(res.authoritylist[i].rowKey)){
+                                    res.authoritylist.splice(i,1)
+                                    --i
+                                }
+                            }
+                            
+
                             //設定權限總列表
                             context.commit('setSchoolSettingAuthList', res.authoritylist)
                             //設定老師權限值

+ 1 - 1
TEAMModelOS/ClientApp/src/utils/blobTool.js

@@ -537,7 +537,7 @@ export default class BlobTool {
                                     }], cont)
                                 }
                             }
-                            r('复制结束后')
+                            r(blobItem)
                         }
                     })
                 })

+ 124 - 36
TEAMModelOS/ClientApp/src/utils/evTools.js

@@ -10,13 +10,11 @@ import { app } from '@/boot-app.js'
 
 
 export default {
-	
 	/* 根据登录后的用户信息获取blobHOST域名 */
 	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]
 	},
-	
 	/* 获取试题保存在Blob的JSON文件 */
 	createBlobItem(item){
 		return new Promise((r,j) => {
@@ -53,7 +51,6 @@ export default {
 			r(itemJson)
 		})
 	},
-	
 	/* 获取保存在COSMOS里面的试题格式 */
 	createCosmosItem(item){
 		return new Promise((r,j) => {
@@ -81,7 +78,6 @@ export default {
 			r(cosmosItem)
 		})
 	},
-	
 	/* 生成试卷的index.json文件格式 */
 	createBlobPaper(paper,slides){
 		return new Promise((r,j) => {
@@ -102,7 +98,6 @@ export default {
 			r(paperItem)
 		})
 	},
-	
 	/* 生成试卷保存在cosmos的数据结构 */
 	createCosmosPaper(paper){
 		return new Promise((r,j) => {
@@ -124,7 +119,41 @@ export default {
 			r(paperItem)
 		})
 	},
-	
+	/* 根据醍摩豆ID获取对应用户Blob内部的完整试题 */
+	getFullItemByTmdId(tmdId,blob){
+		return new Promise(async (r,j) => {
+			let privateSas = await this.getBlobPrivateSas(tmdId)
+			let fullPath = this.getBlobHost() +  '/' + tmdId + blob + privateSas
+			let jsonData = JSON.parse(await $tools.getFile(fullPath))
+			// 如果是综合题 那就拿到children里面的小题id集合 去换取小题的blobJSON文件 然后替换children的内容
+			if(jsonData.exercise.children.length && jsonData.exercise.type === 'compose'){
+				let childrenUrls = jsonData.exercise.children.map(i => this.getBlobHost() +  '/' + tmdId + '/item/' + i + '/' + i + '.json' + privateSas)
+				jsonData.exercise.children = await this.getFullChildren(childrenUrls,tmdId)
+			}
+			// 调整渲染试题数据结构
+			jsonData.exercise.question = jsonData.item[0].question
+			jsonData.exercise.blob = fullPath
+			jsonData.exercise.code = tmdId
+			jsonData.exercise.option = jsonData.item[0].option
+			jsonData.exercise.id = jsonData.id
+			jsonData.exercise.pid = jsonData.pid
+			jsonData.exercise = await this.doAddHost(jsonData.exercise,null,tmdId)
+			r(jsonData.exercise)
+		})
+	},
+	/* 根据醍摩豆ID获取对应BLOB个人容器授权信息 */
+	getBlobPrivateSas(tmdId){
+		return new Promise((r,j) => {
+			$api.blob.blobSasR({
+				name:tmdId,
+				role:'teacher'
+			}).then(res => {
+				if(!res.error){
+					r('?' + res.sas)
+				}
+			})
+		})
+	},
 	/* 获取完整的试题数据 */
 	getFullItem(list,examScope){
 		console.log('接受到的examScope',examScope)
@@ -140,24 +169,30 @@ export default {
 						const blobHost = curScope === 'school' ?  JSON.parse(decodeURIComponent(localStorage.school_profile, "utf-8")).blob_uri :  JSON.parse(decodeURIComponent(localStorage.user_profile, "utf-8")).blob_uri
 						// 根据试题的Blob地址 去读取JSON文件
 						let sasString = curScope === 'school' ?  await $tools.getSchoolSas() : await $tools.getPrivateSas()
-						let jsonInfo = list[i].blob.includes('https://') ? await $tools.getFile(list[i].blob + sasString.sas) : await $tools.getFile(blobHost + list[i].blob + sasString.sas)
-						let jsonData = JSON.parse(jsonInfo)
-						// 如果是综合题 那就拿到children里面的小题id集合 去换取小题的blobJSON文件 然后替换children的内容
-						if(jsonData.exercise.children.length && jsonData.exercise.type === 'compose'){
-							let childrenUrls = jsonData.exercise.children.map(i => blobHost + '/item/' + i + '/' + i + '.json' + sasString.sas)
-							jsonData.exercise.children = await this.getFullChildren(childrenUrls,list[i].code)
+						try{
+							let jsonInfo = list[i].blob.includes('https://') ? await $tools.getFile(list[i].blob + sasString.sas) : await $tools.getFile(blobHost + list[i].blob + sasString.sas)
+							let jsonData = JSON.parse(jsonInfo)
+							// 如果是综合题 那就拿到children里面的小题id集合 去换取小题的blobJSON文件 然后替换children的内容
+							if(jsonData.exercise.children.length && jsonData.exercise.type === 'compose'){
+								let childrenUrls = jsonData.exercise.children.map(i => blobHost + '/item/' + i + '/' + i + '.json' + sasString.sas)
+								jsonData.exercise.children = await this.getFullChildren(childrenUrls,list[i].code)
+							}
+							// 调整渲染试题数据结构
+							jsonData.id = list[i].id
+							jsonData.exercise.question = jsonData.item[0].question
+							jsonData.exercise.createTime = list[i].createTime || 0
+							jsonData.exercise.blob = list[i].blob
+							jsonData.exercise.code = list[i].code
+							jsonData.exercise.option = jsonData.item[0].option
+							jsonData.exercise.id = list[i].id
+							jsonData.exercise.pid = jsonData.pid
+							jsonData.exercise = await this.doAddHost(jsonData.exercise)
+							r(jsonData.exercise)
+						}catch(e){
+							console.log(e)
+							this.$Message.error(e)
 						}
-						// 调整渲染试题数据结构
-						jsonData.id = list[i].id
-						jsonData.exercise.question = jsonData.item[0].question
-						jsonData.exercise.createTime = list[i].createTime || 0
-						jsonData.exercise.blob = list[i].blob
-						jsonData.exercise.code = list[i].code
-						jsonData.exercise.option = jsonData.item[0].option
-						jsonData.exercise.id = list[i].id
-						jsonData.exercise.pid = jsonData.pid
-						jsonData.exercise = await this.doAddHost(jsonData.exercise)
-						r(jsonData.exercise)
+						
 					}else{
 						r(null)
 					}
@@ -172,12 +207,11 @@ export default {
 			})
 		})
 	},
-	
-	/* 给富文本添加 */
-	doAddHost(exerciseItem,paperItem){
+	/* 给富文本添加 cntr是防止读取的是其他用户的BLOB */
+	doAddHost(exerciseItem,paperItem,cntr){
 		/* 如果操作的是试卷内的试题 则需要拿试卷的code来作为containerName */
 		let curScope = paperItem ? paperItem.scope : exerciseItem.scope
-		let container = curScope === 'school' ? store.state.userInfo.schoolCode : store.state.userInfo.TEAMModelId
+		let container = cntr || (curScope === 'school' ? store.state.userInfo.schoolCode : store.state.userInfo.TEAMModelId)
 		let isSubjective = exerciseItem.type === 'complete' || exerciseItem.type === 'subjective' || exerciseItem.type === 'compose'
 		let richTextObj = {
 			question: exerciseItem.question,
@@ -245,7 +279,6 @@ export default {
 			})
 		})
 	},
-	
 	/* 保存综合题小题 */
 	saveChildren(children,containerClient){
 		return new Promise((resolve,reject) => {
@@ -289,7 +322,6 @@ export default {
 		})
 		
 	},
-	
 	/* 获取综合题子题的Blob数据 */
 	getFullChildren(urls,code){
 		return new Promise((resolve,reject) => {
@@ -317,7 +349,66 @@ export default {
 			})
 		})
 	},
-	
+	/* 根据醍摩豆ID获取对应用户Blob内部的完整试卷 */
+	getFullPaperByTmdId(tmdId,blob){
+		return new Promise(async (r,j) => {
+			console.log('根据ID获取试题')
+			let privateSas = await this.getBlobPrivateSas(tmdId)
+			let fullPath = this.getBlobHost() +  '/' + tmdId + blob + '/index.json' + privateSas
+			try{
+				let jsonInfo = await $tools.getFile(fullPath)
+				let jsonData = JSON.parse(jsonInfo)
+				// 获取试卷包含的试题数据并包装好
+				if(jsonData.slides && jsonData.slides.length){
+					let promiseArr = []
+					let allItems = []
+					jsonData.item = []
+					const path = this.getBlobHost() +  '/' + tmdId + blob
+					jsonData.slides.forEach(async (item,index) => {
+						promiseArr.push(new Promise(async (resolve,reject) => {
+							try{
+								// 获取题目JSON并且包装成完整试题对象
+								let itemJson = JSON.parse(await $tools.getFile(path + '/' + item.url + privateSas))
+								itemJson.exercise.question = itemJson.item[0].question
+								itemJson.exercise.option = itemJson.item[0].option
+								itemJson.exercise.id = itemJson.id 
+								itemJson.exercise.pid = itemJson.pid 
+								itemJson.exercise.blob = path + '/' + item.url // 添加blob是方便在保存试卷是 refresh 与导入的试题区分开
+								itemJson.exercise.score = item.scoring ? item.scoring.score : 0
+								try{
+									itemJson.exercise = await this.doAddHost(itemJson.exercise,{ name : jsonData.name },tmdId) // 检测试题中的富文本 为有src为相对路径的音视频文件添加blob的HOST地址
+									resolve(itemJson.exercise)
+								}catch(e){
+									reject(e)
+								}
+							}catch(e){
+								reject(e)
+							}
+						}))
+					})
+					
+					Promise.all(promiseArr).then(res => {
+						res.forEach((resItem,resIndex) => {
+							resItem.children = []
+							if(resItem.pid){
+								let pItem = res.filter(i => i.id === resItem.pid)[0]
+								pItem.children.push(resItem)
+								pItem.score = pItem.score + resItem.score
+							}
+						})
+						jsonData.item = res.filter(i => !i.pid)
+						r(jsonData)
+					}).catch(e => {
+						// Message.error('试卷文件读取失败')
+						j(e)
+					})
+				}
+			}catch(e){
+				console.log(e)
+				j(e)
+			}
+		})
+	},
 	/* 获取完整的试卷数据 */
 	getFullPaper(paper,examScope){
 		console.log(paper)
@@ -385,8 +476,6 @@ export default {
 			}
 		})
 	},
-	
-	
 	/* 获取完整的试卷数据 */
 	getStuPaper(paper, examScope) {
 		let curScope = examScope || paper.scope
@@ -458,18 +547,17 @@ export default {
 			}
 		})
 	},
-	
-	// 提取富文本内容中的文本
+	/* 提取富文本内容中的文本 */
 	getSimpleText(html) {
 		var r = /<\/?(img)[^>]*>/gi;
 		return html.replace(r, "");
 	},
-	
+	/* 判断是否为客观题 */
 	getItemType(type){
 		const objective = ['single','multiple','judge']
 		return objective.includes(type)
 	},
-	
+	/* 获取img标签内的src */
 	getImgSrc(richtext) {
 	    let imgList = [];
 	    richtext.replace(/<video [^>]*src=['"]([^'"]+)[^>]*>/g, (match, capture) => {

+ 17 - 1
TEAMModelOS/ClientApp/src/utils/public.js

@@ -1,6 +1,9 @@
 import $api from '@/api'
 import store from '@/store'
 import { app } from '@/boot-app.js'
+import {
+	Message
+} from 'view-design'
 /**
  * 校验blob授权是否过期
  * */
@@ -272,7 +275,19 @@ export default {
 			xhr.open('get', url); //url填写后台的接口地址,如果是post,在formData append参数(参考原文地址)
 			// xhr.responseType = 'arraybuffer';
 			xhr.onload = function(e) {
-				resolve(e.currentTarget.response)
+				switch (e.currentTarget.status){
+					case 200:
+						resolve(e.currentTarget.response)
+						break;
+					case 404:
+						Message.error('未访问到资源!')
+						break;
+					case 403:
+						Message.error('授权异常,无法访问!')
+						break;		
+					default:
+						break;
+				}
 			};
 			xhr.send(formData);
 		})
@@ -423,6 +438,7 @@ export default {
 	 * 获取单个文件授权
 	 */
 	getFileSas(param) {
+		console.log('获取单个文件授权',param)
 		return new Promise((r, j) => {
 			$api.blob.urlSasR({
 				url: param

+ 22 - 19
TEAMModelOS/ClientApp/src/view/evaluation/bank/TestPaperList.vue

@@ -1,7 +1,11 @@
 <template>
 	<div class="pl-container" ref="plContainer">
 		<!-- 条件筛选部分 -->
-		<BaseFilter ref="baseFilter" @onChange="onFilterChange" :filterCounts="filterCounts" :isFilterPaper="isFilterPaper"  v-if="!isPreview"></BaseFilter>
+		<BaseFilter ref="baseFilter" @onChange="onFilterChange" :filterCounts="filterCounts"
+		 :isFilterPaper="isFilterPaper"
+		 @onSearchChange="onSearchChange"
+		 @onCloseSearch="onCloseSearch"
+		   v-if="!isPreview"></BaseFilter>
 
 		<!-- 空数据展示 -->
 		<div v-if="paperList.length === 0" class="no-data-text">
@@ -142,6 +146,7 @@
 				filterParams: {},
 				findCountParams: {},
 				originList: [],
+				originRes:[],
 				schoolInfo: {},
 				filterSort: 'createTime',
 				evaluationInfo: null,
@@ -277,6 +282,7 @@
 					this.getItemsCount(list,filterKey)
 					this.paperList = list
 					this.originList = list
+					this.originRes = JSON.parse(JSON.stringify(list))
 					this.totalNum = list.length
 					this.pageChange(1)
 					setTimeout(() => {
@@ -291,6 +297,20 @@
 				})
 			},
 			
+			/* 搜索词汇发生变化 */
+			onSearchChange(val) {
+				this.originList = this.originRes.filter(i => i.name.indexOf(val) > -1)
+				this.totalNum = this.originList.length
+				this.pageChange(1)
+			},
+			/* 关闭搜索 */
+			onCloseSearch() {
+				this.$refs.baseFilter.searchVal = ''
+				this.originList = JSON.parse(JSON.stringify(this.originRes))
+				this.totalNum = this.originList.length
+				this.pageChange(1)
+			},
+			
 			/* 获取所有学段下的试题总数 */
 			getPeriodCount(papers){
 				let periodIdArr = this.periodList.map(i => i.id)
@@ -349,24 +369,7 @@
 				console.log('要下载的试卷', fullPaperJson)
 			},
 			
-			// async renderAnswerSheet(paper){
-			// 	this.dataLoading = true
-			// 	try{
-			// 		let fullPaperJson = this.fullPaperJson.id === paper.id ? this.fullPaperJson : await this.$evTools.getFullPaper(paper)
-			// 		// this.isShowSheet = true
-			// 		this.dataLoading = false
-			// 		this.$router.push({
-			// 			name: 'answerSheet',
-			// 			params: {
-			// 				paper: fullPaperJson
-			// 			}
-			// 		})
-			// 	}catch(e){
-			// 		this.$Message.error(this.$t('evaluation.paperList.paperErrorTip'))
-			// 		this.dataLoading = false
-			// 	}
-				
-			// },
+
 
 			/**
 			 * 删除试卷

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

@@ -38,6 +38,8 @@
 					<Icon type="md-arrow-round-down" />
 				</Radio>
 			</RadioGroup>
+			<!-- 试卷列表的搜索功能 -->
+			<Input v-model="searchVal" clearable  placeholder="输入试卷名称进行搜索..." style="width: 300px" @on-click="onCloseSearch" @on-change="onSearchChange"/>
 		</div>
 	</div>
 </template>
@@ -67,6 +69,7 @@
 				userId: "",
 				schoolCode: "",
 				schoolInfo: {},
+				searchVal:'',
 				isShowSchoolBank: false,
 				isShowUploadList: false,
 				exersicesType: this.$GLOBAL.EXERCISE_TYPES(),
@@ -257,6 +260,15 @@
 				});
 				return list;
 			},
+			
+			/* 搜索词汇发生变化 */
+			onSearchChange() {
+				this.$emit('onSearchChange',this.searchVal)
+			},
+			/* 关闭搜索 */
+			onCloseSearch() {
+				this.$emit('onCloseSearch')
+			},
 		},
 
 		mounted() {},
@@ -275,109 +287,13 @@
 	};
 </script>
 
-<style scoped>
-	.filter-wrap {
-		width: 100%;
-		padding: 20px;
-		background: #fff;
-	}
-
-	.filter-wrap .filter-item:first-child {
-		margin-top: 0px;
-	}
-
-	.filter-wrap .filter-item {
-		margin-top: 10px;
-		display: flex;
-	}
-
-	.filter-wrap .filter-title {
-		font-size: 16px;
-		font-weight: bold;
-		margin-right: 10px;
-		min-width: 40px;
-	}
-
-	.filter-wrap .ivu-radio-group {
-		padding-bottom: 4px;
+<style>
+	.filter-wrap .filter-item .ivu-input{
+		border-radius: 100px;
+		padding: 4px 12px;
 	}
-
-	.filter-wrap .ivu-radio-wrapper {
-		padding: 0 10px;
-		margin-left: 15px;
-		height: 28px;
-		line-height: 28px;
-		box-shadow: none !important;
-		border: none !important;
-		font-size: 14px;
-		border-radius: 0 !important;
-	}
-
-	.filter-wrap .ivu-radio-wrapper .ivu-icon {
-		margin-bottom: 2px;
-	}
-
-	.filter-wrap .ivu-radio-wrapper:after,
-	.ivu-radio-group-button .ivu-radio-wrapper:before {
-		content: none;
-	}
-
-	.filter-wrap .ivu-radio-group-item {
-		border-radius: 5px !important;
-	}
-
-	.filter-wrap .ivu-radio-wrapper-checked {
-		background: rgb(16, 171, 231);
-		box-shadow: none !important;
-		color: white;
-	}
-
-	.filter-wrap .ivu-radio-group-button .ivu-radio-wrapper-checked:hover {
-		color: #fff !important;
-	}
-
-	.filter-wrap .ivu-checkbox-group {
-		padding-bottom: 4px;
-		display: inline-block;
-	}
-
-	.filter-wrap .ivu-checkbox-inner,
-	.filter-wrap .ivu-checkbox-checked,
-	.filter-wrap .ivu-checkbox {
-		display: none;
-	}
-
-	.filter-wrap .ivu-checkbox-wrapper {
-		padding: 0 10px;
-		margin-left: 15px;
-		height: 28px;
-		line-height: 28px;
-		box-shadow: none !important;
-		border: none !important;
-		font-size: 14px;
-		border-radius: 0 !important;
-	}
-
-	.filter-wrap .ivu-checkbox-wrapper .ivu-icon {
-		margin-bottom: 2px;
-	}
-
-	.filter-wrap .ivu-checkbox-wrapper:after,
-	.ivu-checkbox-group-button .ivu-checkbox-wrapper:before {
-		content: none;
-	}
-
-	.filter-wrap .ivu-checkbox-group-item {
-		border-radius: 5px !important;
-	}
-
-	.filter-wrap .ivu-checkbox-wrapper-checked {
-		background: rgb(16, 171, 231);
-		box-shadow: none !important;
-		color: white;
-	}
-
-	.filter-wrap .ivu-checkbox-group-button .ivu-checkbox-wrapper-checked:hover {
-		color: #fff !important;
+	
+	.filter-wrap .filter-item .ivu-input-wrapper{
+		margin-left: 30px;
 	}
 </style>

+ 1 - 1
TEAMModelOS/ClientApp/src/view/evaluation/index/index.vue

@@ -44,7 +44,7 @@
       },
 	  // 判断容器滚动距离
 	  handleScroll(vertical, horizontal, nativeEvent) {
-	  	console.log(vertical.scrollTop)
+	  	// console.log(vertical.scrollTop)
 	  },
 
       

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

@@ -131,7 +131,7 @@
                     </div>-->
 
                     <!-- 保存阅卷配置 -->
-                    <div style="float:right;" class="common-save-btn" v-show="curBarIndex == 2 && isSetting">
+                    <div style="float:right;" class="common-save-btn" v-if="$access.can('admin.*|schoolAc-upd')" v-show="curBarIndex == 2 && isSetting">
                         <Button class="mock-stu-answer" type="text" :loading="btnLoading" @click="saveMarkSetting" icon="ios-albums-outline">
                             {{$t('schoolBaseInfo.saveInfo')}}
                         </Button>

+ 58 - 59
TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue

@@ -3,9 +3,9 @@
         <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>
+                <span style="font-size:16px;color:white">{{$t('learnActivity.mark.noPublish')}}</span>
             </p>
-            <span class="setting-btn" @click="isSetting = !isSetting">发布任务</span>
+            <span class="setting-btn" @click="isSetting = !isSetting">{{$t('learnActivity.mark.publish')}}</span>
         </div>
         <vuescroll v-show="isSetting">
             <!-- 基础设置 -->
@@ -18,51 +18,46 @@
                         <Row>
                             <!-- 开始时间 -->
                             <Col :md="24" :lg="24" :xl="12" :xxl="8">
-                            <FormItem label="开始时间" class="setting-item-wrap" prop="startTime">
+                            <FormItem :label="$t('learnActivity.mark.startTime')" class="setting-item-wrap" prop="startTime">
                                 <DatePicker :options="dateOpt" class="attr-value-wrap" type="datetime" format="yyyy/MM/dd HH:mm" v-model="startTime" split-panels :placeholder="$t('learnActivity.createEv.sTimeHolder')" style="width:100%" @on-change="getDate($event,0)"></DatePicker>
                             </FormItem>
                             </Col>
                             <!-- 结束时间 -->
                             <Col :md="24" :lg="24" :xl="12" :xxl="8">
-                            <FormItem label="结束时间" class="setting-item-wrap" prop="endTime">
+                            <FormItem :label="$t('learnActivity.mark.endTime')" class="setting-item-wrap" prop="endTime">
                                 <DatePicker :options="dateOpt1" class="attr-value-wrap" type="datetime" format="yyyy/MM/dd HH:mm" v-model="endTime" split-panels :placeholder="$t('learnActivity.createEv.eTimeHolder')" style="width:100%" @on-change="getDate($event,1)"></DatePicker>
                             </FormItem>
                             </Col>
                             <!-- 分配方式 -->
                             <Col :md="24" :lg="24" :xl="12" :xxl="8">
-                            <FormItem label="分配方式" class="setting-item-wrap" prop="mode">
+                            <FormItem :label="$t('learnActivity.mark.allocation')" class="setting-item-wrap" prop="mode">
                                 <RadioGroup v-model="setting.mode" style="color:white">
-                                    <Radio label="full">按人分配</Radio>
-                                    <Radio disabled label="qu" style="margin-left:20px">按题分配 (开发中)</Radio>
+                                    <Radio label="full">
+                                        {{$t('learnActivity.mark.allocationByStu')}}
+                                    </Radio>
+                                    <Radio disabled label="qu" style="margin-left:20px">
+                                        {{$t('learnActivity.mark.allocationByQu')}}(开发中)
+                                    </Radio>
                                 </RadioGroup>
                             </FormItem>
                             </Col>
                             <!-- 阅卷次数 -->
                             <Col :md="24" :lg="24" :xl="12" :xxl="8">
-                            <FormItem label="阅卷次数" class="setting-item-wrap" prop="num">
+                            <FormItem :label="$t('learnActivity.mark.markNum')" class="setting-item-wrap" prop="num">
                                 <!-- <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 disabled :label="2" style="margin-left:0px">双评制 (开发中)</Radio>
-                                    <Radio disabled :label="3" style="margin-left:0px">三评制 (开发中)</Radio>
+                                    <Radio :label="1">{{$t('learnActivity.mark.markNum1')}}</Radio>
+                                    <Radio disabled :label="2" style="margin-left:0px">{{$t('learnActivity.mark.markNum2')}}(开发中)</Radio>
+                                    <Radio disabled :label="3" style="margin-left:0px">{{$t('learnActivity.mark.markNum3')}}(开发中)</Radio>
                                 </RadioGroup>
                             </FormItem>
                             </Col>
-                            <!-- 启用异常处理 -->
-                            <!-- <Col :md="24" :lg="24" :xl="12" :xxl="8">
-                            <FormItem label="异常申报" class="setting-item-wrap" prop="isErr">
-                                <RadioGroup v-model="setting.isErr" style="color:white">
-                                    <Radio :label="1">是</Radio>
-                                    <Radio :label="0" style="margin-left:20px">否</Radio>
-                                </RadioGroup>
-                            </FormItem>
-                            </Col> -->
                             <!-- 启用仲裁 -->
                             <Col :md="24" :lg="24" :xl="12" :xxl="8" v-show="setting.num > 1">
-                            <FormItem label="启用仲裁" class="setting-item-wrap" prop="isArb">
+                            <FormItem :label="$t('learnActivity.mark.openArb')" class="setting-item-wrap" prop="isArb">
                                 <RadioGroup v-model="setting.isArb" style="color:white">
-                                    <Radio :label="1"></Radio>
-                                    <Radio :label="0" style="margin-left:20px"></Radio>
+                                    <Radio :label="1">{{$t('learnActivity.mark.yes')}}</Radio>
+                                    <Radio :label="0" style="margin-left:20px">{{$t('learnActivity.mark.no')}}</Radio>
                                 </RadioGroup>
                             </FormItem>
                             </Col>
@@ -108,7 +103,9 @@
                                         <PersonalPhoto :name="row.name" :picture="row.picture" />
                                     </template>
                                     <template slot-scope="{ row,index }" slot="action">
-                                        <Button v-show="setting.mode == 'qu'" type="info" size="small" style="margin-right:10px" @click="setQuStatus = true">题号</Button>
+                                        <Button v-show="setting.mode == 'qu'" type="info" size="small" style="margin-right:10px" @click="setQuStatus = true">
+                                            {{$t('learnActivity.mark.quIndex')}}
+                                        </Button>
                                         <Button type="error" size="small" @click="removeMarker(row,index)">{{$t('learnActivity.mark.remove')}}</Button>
                                     </template>
                                     <template slot-scope="{ row }" slot="count">
@@ -116,11 +113,11 @@
                                     </template>
                                     <template slot-scope="{ row }" slot="qu">
                                         <span :style="{color:setting.mode == 'full' ? '#2db7f5' : row.qu.length ? '#FFFFFF' : '#ed4014'}">
-                                            {{setting.mode == 'full' ? '所有题目' : row.qu.length ? row.qu.join(',') : '暂未设置'}}
+                                            {{setting.mode == 'full' ? $t('learnActivity.mark.allQu') : row.qu.length ? row.qu.join(',') : $t('learnActivity.mark.noSet')}}
                                         </span>
                                     </template>
                                 </Table>
-                                <span class="add-tea-btn" @click="addTeaStatus = true">
+                                <span class="add-tea-btn" v-if="$access.can('admin.*|schoolAc-upd')" @click="addTeaStatus = true">
                                     <Icon type="md-add" />
                                     {{$t('learnActivity.mark.addTea')}}
                                 </span>
@@ -141,7 +138,7 @@
                 </template>
             </Table>
         </Modal>
-        <Modal v-model="setQuStatus" title="题号设置" class-name="dark-iview-modal dark-iview-table" @on-ok="okSetQu" :width="1000">
+        <Modal v-model="setQuStatus" :title="$t('learnActivity.mark.quNoSet')" class-name="dark-iview-modal dark-iview-table" @on-ok="okSetQu" :width="1000">
 
         </Modal>
     </div>
@@ -174,31 +171,28 @@ export default {
             isSetting: false,
             ruleValidate: {
                 startTime: [
-                    { required: true, type: 'number', message: '请设置阅卷开始时间', trigger: 'blur' }
+                    { required: true, type: 'number', message: this.$t('learnActivity.mark.startErr'), trigger: 'blur' }
                 ],
                 endTime: [
-                    { required: true, type: 'number', message: '请设置阅卷结束时间', trigger: 'blur' }
+                    { required: true, type: 'number', message: this.$t('learnActivity.mark.endErr'), trigger: 'blur' }
                 ],
                 mode: [
-                    { required: true, message: '请设置分配方式', trigger: 'change' }
+                    { required: true, message: this.$t('learnActivity.mark.typeErr'), trigger: 'change' }
                 ],
                 num: [
-                    { required: true, type: 'number', message: '请设置阅卷次数', trigger: 'change' }
-                ],
-                isErr: [
-                    { required: true, type: 'number', message: '请设置是否有异常申报功能', trigger: 'change' }
-                ],
-                isArb: [
-                    { required: true, type: 'number', message: '请设置分差超过1/6的题目是否需要仲裁', trigger: 'change' }
-                ],
-                arb: [
-                    { required: true, type: 'array', message: '请设置仲裁老师', trigger: 'change' }
-                ],
-                err: [
-                    { required: true, type: 'array', message: '请设置异常处理老师', trigger: 'change' }
+                    { required: true, type: 'number', message: this.$t('learnActivity.mark.numErr'), trigger: 'change' }
                 ],
+                // isArb: [
+                //     { required: true, type: 'number', message: '请设置分差超过1/6的题目是否需要仲裁', trigger: 'change' }
+                // ],
+                // arb: [
+                //     { required: true, type: 'array', message: '请设置仲裁老师', trigger: 'change' }
+                // ],
+                // err: [
+                //     { required: true, type: 'array', message: '请设置异常处理老师', trigger: 'change' }
+                // ],
                 markers: [
-                    { required: true, type: 'array', message: '请设置阅卷老师', trigger: 'change' }
+                    { required: true, type: 'array', message: this.$t('learnActivity.mark.markerErr'), trigger: 'change' }
                 ],
             },
             setQuStatus: false,
@@ -291,7 +285,7 @@ export default {
                     align: 'center'
                 },
                 {
-                    title: '批阅题号',
+                    title: this.$t('learnActivity.mark.markQuNo'),
                     slot: 'qu',
                     align: 'center'
                 },
@@ -322,15 +316,20 @@ export default {
     methods: {
         //移除阅卷老师
         removeMarker(row, index) {
-            this.$Modal.confirm({
-                title: '移除老师',
-                content: `是否确认移除${row.name}?`,
-                okText: '是',
-                cancelText: '否',
-                onOk: () => {
-                    this.markers.splice(index, 1)
-                }
-            })
+            if (this.$access.can('admin.*|schoolAc-upd')) {
+                this.$Modal.confirm({
+                    title: this.$t('learnActivity.mark.rmvTitle'),
+                    content: `${this.$t('learnActivity.mark.rmvContent')}${row.name}?`,
+                    okText: this.$t('learnActivity.mark.yes'),
+                    cancelText: this.$t('learnActivity.mark.no'),
+                    onOk: () => {
+                        this.markers.splice(index, 1)
+                    }
+                })
+            } else {
+                this.$Message.error(this.$t('system.authErr'))
+            }
+
 
         },
         //确认设置阅卷题号
@@ -364,7 +363,7 @@ export default {
             this.$refs['baseSetting'].validate((valid) => {
                 if (!valid) {
                     full = false
-                    this.$Message.error('请完成阅卷基础设置')
+                    this.$Message.error(this.$t('learnActivity.mark.baseErr'))
                 }
             })
             if (!full) return
@@ -372,7 +371,7 @@ export default {
             this.$refs['teacherSet'].validate((valid) => {
                 if (!valid) {
                     full = false
-                    this.$Message.error('阅卷和相关老师设置')
+                    this.$Message.error(this.$t('learnActivity.mark.teacherErr'))
                 }
             })
             if (!full) return
@@ -381,10 +380,10 @@ export default {
             this.setting.code = this.$store.state.userInfo.schoolCode
             this.$api.mark.UpsertMarkSet(this.setting).then(
                 res => {
-                    this.$Message.success('保存成功!')
+                    this.$Message.success(this.$t('learnActivity.mark.saveOk'))
                 },
                 err => {
-                    this.$Message.error('保存失败!')
+                    this.$Message.error(this.$t('learnActivity.mark.saveErr'))
                 }
             )
         },
@@ -483,7 +482,7 @@ export default {
                 if (this.evInfo.id) {
                     this.findSettingInfo()
                 } else {
-                    this.$Message.warning('暂无评测id')
+                    this.$Message.warning('no exam id!')
                 }
 
             },

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 1364
TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkView.vue


+ 5 - 5
TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue

@@ -58,8 +58,8 @@
                     <div slot="left" class="teacher-list">
                         <div class="teacher-list-header">
                             <span>{{$t('cusMgt.teaLabel')}}</span>
-                            <Icon type="md-add" size="16" class="tea-action-icon" @click="toggleAddTea" />
-                            <Icon type="md-trash" size="16" class="tea-action-icon" @click="removeTeacher" />
+                            <Icon v-if="$access.can('admin.*|course-upd')" type="md-add" size="16" class="tea-action-icon" @click="toggleAddTea" />
+                            <Icon v-if="$access.can('admin.*|course-upd')" type="md-trash" size="16" class="tea-action-icon" @click="removeTeacher" />
                         </div>
                         <div class="tea-list-content">
                             <vuescroll v-show="teaList.length > 0">
@@ -81,15 +81,15 @@
                                 {{$t('cusMgt.cusNameList')}}
                             </span>
                             <div class="action-btn-wrap">
-                                <span class="action-btn" style="margin-right:30px" @click="updCusInfo()" v-if="isUpd">
+                                <span v-if="$access.can('admin.*|course-upd') && isUpd" class="action-btn" style="margin-right:30px" @click="updCusInfo()">
                                     <Icon type="ios-albums-outline" size="16" />
                                     <span>{{$t('cusMgt.saveLabel')}}</span>
                                 </span>
-                                <span class="action-btn" v-show="curTab == 0" :style="{marginRight:isUpd ? '20px':'30px'}" @click="addNameList">
+                                <span v-if="$access.can('admin.*|course-upd')" class="action-btn" v-show="curTab == 0" :style="{marginRight:isUpd ? '20px':'30px'}" @click="addNameList">
                                     <Icon type="md-add" size="16" />
                                     <span>{{$t('cusMgt.addStuList')}}</span>
                                 </span>
-                                <span class="action-btn" v-show="curTab == 0" @click="removeStuList">
+                                <span v-if="$access.can('admin.*|course-upd')" class="action-btn" v-show="curTab == 0" @click="removeStuList">
                                     <Icon type="md-remove-circle" size="16" />
                                     <span>{{$t('cusMgt.removeList')}}</span>
                                 </span>

+ 53 - 49
TEAMModelOS/ClientApp/src/view/student-account/ClassMgt.vue

@@ -28,8 +28,8 @@
                 </Dropdown>
                 <div v-if="!isSearch" style="float:right;">
                     <Icon class="action-btn-icon" type="ios-search" @click="isSearch = true" />
-                    <Icon v-if="$access.can('admin.*|classroom-upd')" class="action-btn-icon" type="md-trash" @click.stop="showConfirmDelete()" />
-                    <Icon v-if="$access.can('admin.*|classroom-upd')" class="action-btn-icon" type="md-add" @click="addClassroom()" />
+                    <Icon v-if="$access.can('admin.*|student-upd')" class="action-btn-icon" type="md-trash" @click.stop="showConfirmDelete()" />
+                    <Icon v-if="$access.can('admin.*|student-upd')" class="action-btn-icon" type="md-add" @click="addClassroom()" />
                 </div>
                 <div v-else class="dark-iview-input" style="float:right;width:calc(100% - 200px);padding-right:10px;">
                     <Input icon="ios-close" v-model="keyword" :placeholder="$t('schoolBaseInfo.codeSearchHolder')" autofocus style="width:100%" @on-click="closeKeySearch" @on-change="filterClassname" />
@@ -291,7 +291,7 @@ export default {
                     { required: true, message: this.$t('schoolBaseInfo.typeWarning'), trigger: 'change' }
                 ],
                 year: [
-                    { required: true, type:'number', message: this.$t('schoolBaseInfo.gradeWarning'), trigger: 'change' }
+                    { required: true, type: 'number', message: this.$t('schoolBaseInfo.gradeWarning'), trigger: 'change' }
                 ]
             }
         }
@@ -627,57 +627,61 @@ export default {
             this.currentTabIndex = index
         },
         saveClassroom() {
-            this.$refs['classInfo'].validate((valid) => {
-                if (!valid) {
-                    this.$Message.error(this.$t('schoolBaseInfo.formWarning'))
-                } else {
-                    let option = this.classListShow[this.curClassIndex].option
-                    if (!option) {
-                        option = 'update'
+            if (this.$access.can('admin.*|student-upd')) {
+                this.$refs['classInfo'].validate((valid) => {
+                    if (!valid) {
+                        this.$Message.error(this.$t('schoolBaseInfo.formWarning'))
                     } else {
-                        this.classListShow[this.curClassIndex]['code'] = this.$store.state.userInfo.schoolCode
-                    }
-                    delete this.classListShow[this.curClassIndex].option
-                    this.isSaveLoading = true
-                    this.isListLoading = true
-                    if (this.classListShow[this.curClassIndex].openType == '2') {
-                        this.classListShow[this.curClassIndex].teacher.id = ''
-                        this.classListShow[this.curClassIndex].teacher.name = ''
-                    }
-                    this.$api.schoolSetting.classUpsert({
-                        classroom: this.classListShow[this.curClassIndex],
-                        option: option,
-                        school_code: this.$store.state.userInfo.schoolCode
-                    }).then(
-                        res => {
-                            if (res) {
-                                if (res.error) {
-                                    this.classListShow[this.curClassIndex].option = option
-                                    this.$Message.error(res.v)
-                                } else {
-                                    this.$Message.success(this.$t('schoolBaseInfo.csTips3'))
-                                    this.updated = false
-                                    if (option == 'insert') {
-                                        this.classListShow[this.curClassIndex].code = 'Class-' + this.classListShow[this.curClassIndex].code
-                                        this.classList.unshift(this.classListShow[this.curClassIndex])
-                                        this.$store.dispatch('user/addSchoolClasses', this.classListShow[this.curClassIndex]);
+                        let option = this.classListShow[this.curClassIndex].option
+                        if (!option) {
+                            option = 'update'
+                        } else {
+                            this.classListShow[this.curClassIndex]['code'] = this.$store.state.userInfo.schoolCode
+                        }
+                        delete this.classListShow[this.curClassIndex].option
+                        this.isSaveLoading = true
+                        this.isListLoading = true
+                        if (this.classListShow[this.curClassIndex].openType == '2') {
+                            this.classListShow[this.curClassIndex].teacher.id = ''
+                            this.classListShow[this.curClassIndex].teacher.name = ''
+                        }
+                        this.$api.schoolSetting.classUpsert({
+                            classroom: this.classListShow[this.curClassIndex],
+                            option: option,
+                            school_code: this.$store.state.userInfo.schoolCode
+                        }).then(
+                            res => {
+                                if (res) {
+                                    if (res.error) {
+                                        this.classListShow[this.curClassIndex].option = option
+                                        this.$Message.error(res.v)
+                                    } else {
+                                        this.$Message.success(this.$t('schoolBaseInfo.csTips3'))
+                                        this.updated = false
+                                        if (option == 'insert') {
+                                            this.classListShow[this.curClassIndex].code = 'Class-' + this.classListShow[this.curClassIndex].code
+                                            this.classList.unshift(this.classListShow[this.curClassIndex])
+                                            this.$store.dispatch('user/addSchoolClasses', this.classListShow[this.curClassIndex]);
+                                        }
                                     }
+                                } else {
+                                    this.$Message.error('API error!')
                                 }
-                            } else {
+                            },
+                            err => {
                                 this.$Message.error('API error!')
                             }
-                        },
-                        err => {
-                            this.$Message.error('API error!')
-                        }
-                    ).finally(
-                        () => {
-                            this.isSaveLoading = false
-                            this.isListLoading = false
-                        }
-                    )
-                }
-            })
+                        ).finally(
+                            () => {
+                                this.isSaveLoading = false
+                                this.isListLoading = false
+                            }
+                        )
+                    }
+                })
+            }else{
+                this.$Message.error(this.$t('system.authErr'))
+            }
         },
         /**显示确认删除班级对话框 */
         showConfirmDelete() {

+ 4 - 4
TEAMModelOS/ClientApp/src/view/student-account/MgtStuList.vue

@@ -5,9 +5,9 @@
                 <div class="list-header">
                     {{$t('cusMgt.nameList')}}
                     <div v-if="!isSearch" style="float:right;">
-                        <Icon class="action-btn-icon" type="md-trash" @click="delStuList()" />
+                        <Icon v-if="$access.can('admin.*|student-upd')" class="action-btn-icon" type="md-trash" @click="delStuList()" />
                         <!-- <Icon class="action-btn-icon" type="md-create" /> -->
-                        <Icon class="action-btn-icon" type="md-add" @click="createList" />
+                        <Icon v-if="$access.can('admin.*|student-upd')" class="action-btn-icon" type="md-add" @click="createList" />
                         <!-- <Icon class="action-btn-icon" type="ios-search" @click="isSearch = true" /> -->
                     </div>
                     <Input v-else icon="ios-close" v-model="keyWord" :placeholder="$t('cusMgt.searchHolder')" @on-click="isSearch = false" size="small" style="float:right;width: 180px;margin-top:10px;margin-right:10px" />
@@ -33,11 +33,11 @@
             <div slot="right" class="stu-info-box">
                 <div class="stu-info-header">
                     <div class="action-btn-wrap">
-                        <span class="action-btn" style="margin-right:30px" @click="pushStudents">
+                        <span v-if="$access.can('admin.*|student-upd')" class="action-btn" style="margin-right:30px" @click="pushStudents">
                             <Icon type="md-add" size="16" />
                             <span>{{$t('cusMgt.addStu')}}</span>
                         </span>
-                        <span class="action-btn" @click="batchRemove">
+                        <span v-if="$access.can('admin.*|student-upd')" class="action-btn" @click="batchRemove">
                             <Icon type="md-remove-circle" size="16"/>
                             <span>{{$t('cusMgt.remvStu')}}</span>
                         </span>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 424 - 186
TEAMModelOS/ClientApp/src/view/syllabus/Syllabus.vue


+ 39 - 29
TEAMModelOS/ClientApp/src/view/task/mark/ByQu.vue

@@ -4,23 +4,23 @@
         <!-- 头部基础信息 -->
         <div class="mark-header">
             <span class="quit-marking-text">
-                <Icon type="ios-arrow-back" class="quit-marking-icon" title="退出阅卷" @click="quit" />
+                <Icon type="ios-arrow-back" class="quit-marking-icon" :title="$t('learnActivity.mark.quit')" @click="quit" />
             </span>
-            <span class="info-label">考试名称:</span>
+            <span class="info-label">{{$t('learnActivity.mark.examName')}}</span>
             <span class="info-value">{{taskInfo.name}}</span>
-            <span class="info-label">阅卷方式:</span>
-            <span class="info-value">按题阅卷</span>
-            <span class="info-label">当前题号:</span>
+            <span class="info-label">{{$t('learnActivity.mark.reviewType')}}</span>
+            <span class="info-value">{{$t('learnActivity.mark.byQu')}}</span>
+            <span class="info-label">{{$t('learnActivity.mark.curQu')}}</span>
             <span class="info-value cur-qu-index" v-if="childIndex > -1">{{`${quIndex + 1}-${childIndex + 1}`}}</span>
             <span class="info-value cur-qu-index" v-else>{{quIndex + 1}}</span>
-            <span class="info-label">题目进度:</span>
+            <span class="info-label">{{$t('learnActivity.mark.quProg')}}</span>
             <span class="info-value stu-id-info">{{curProg}}</span>
-            <span class="info-label">学生:</span>
+            <span class="info-label">{{$t('learnActivity.mark.stuId')}}</span>
             <span class="info-value stu-id-info">{{stusInfo[stuIndex] ? stusInfo[stuIndex].stuId : ''}}</span>
             <div class="btn-wrap">
                 <span class="action-btn" @click="toggleStatus = !toggleStatus">
                     <Icon type="md-shuffle" class="action-btn-icon" />
-                    切换题目
+                    {{$t('learnActivity.mark.toggleQu')}}
                 </span>
                 <!-- <span class="action-btn">
                     <Icon type="md-refresh" class="action-btn-icon" />
@@ -28,26 +28,26 @@
                 </span> -->
                 <span class="action-btn"  @click="exception">
                     <Icon custom="iconfont icon-exception" class="action-btn-icon" />
-                    异常申报
+                    {{$t('learnActivity.mark.exception')}}
                 </span>
             </div>
         </div>
         <div class="mark-main">
             <!-- 工具条 -->
             <div class="mark-tools-wrap">
-                <Icon custom="iconfont icon-move" class="tool-icon" title="移动" @click="mouseStatus = 'move'" />
-                <Icon custom="iconfont icon-text" class="tool-icon" title="文字批注" @click="mouseStatus = 'text'" />
-                <Icon custom="iconfont icon-mark" class="tool-icon" title="画笔" @click="mouseStatus = 'line'" />
-                <Icon custom="iconfont icon-arrow-mark" class="tool-icon" title="箭头" @click="mouseStatus = 'arrow'" />
-                <Icon custom="iconfont icon-oval" class="tool-icon" title="椭圆" @click="mouseStatus = 'oval'" />
-                <Icon custom="iconfont icon-rect" class="tool-icon" title="方框" @click="mouseStatus = 'rect'" />
+                <Icon custom="iconfont icon-move" class="tool-icon" :title="$t('learnActivity.mark.move')" @click="mouseStatus = 'move'" />
+                <Icon custom="iconfont icon-text" class="tool-icon" :title="$t('learnActivity.mark.text')" @click="mouseStatus = 'text'" />
+                <Icon custom="iconfont icon-mark" class="tool-icon" :title="$t('learnActivity.mark.brush')" @click="mouseStatus = 'line'" />
+                <Icon custom="iconfont icon-arrow-mark" class="tool-icon" :title="$t('learnActivity.mark.arrow')" @click="mouseStatus = 'arrow'" />
+                <Icon custom="iconfont icon-oval" class="tool-icon" :title="$t('learnActivity.mark.oval')" @click="mouseStatus = 'oval'" />
+                <Icon custom="iconfont icon-rect" class="tool-icon" :title="$t('learnActivity.mark.rect')" @click="mouseStatus = 'rect'" />
                 <Poptip transfer placement="right">
-                    <Icon custom="iconfont icon-smile" class="tool-icon" title="图标" />
+                    <Icon custom="iconfont icon-smile" class="tool-icon" :title="$t('learnActivity.mark.seal')" />
                     <div slot="content" class="expression-box">
                         <img v-for="(item,index) in imgs" :key="index" :src="item" alt="" class="expression-img" @click="drawImg(index)">
                     </div>
                 </Poptip>
-                <Icon custom="iconfont icon-fresh" class="tool-icon" title="清除批注" @click="clear" />
+                <Icon custom="iconfont icon-fresh" class="tool-icon" :title="$t('learnActivity.mark.clear')" @click="clear" />
                 <!-- <Icon :custom="isFull ? 'iconfont icon-cancel-full' : 'iconfont icon-full-screen'" class="tool-icon" :title="isFull ? '取消全屏' : '全屏'" @click="togglefull" /> -->
             </div>
             <div class="mark-stage">
@@ -56,12 +56,16 @@
             <!-- 打分部分 -->
             <div class="score-wrap">
                 <div class="quick-score-box score-input-box">
-                    <span>分数:</span>
+                    <span>{{$t('learnActivity.mark.score')}}</span>
                     <InputNumber style="flex:1" :max="10" :min="1" v-model="score" @on-change="setScore"></InputNumber>
                 </div>
                 <div class="quick-score-box">
-                    <Button size="small" type="info" style="margin-right:8px" ghost @click="score = quScoreArr.length - 1">满分</Button>
-                    <Button size="small" type="error" ghost @click="score = 0">零分</Button>
+                    <Button size="small" type="info" style="margin-right:8px" ghost @click="score = quScoreArr.length - 1">
+                        {{$t('learnActivity.mark.fullScore')}}
+                    </Button>
+                    <Button size="small" type="error" ghost @click="score = 0">
+                        {{$t('learnActivity.mark.zeroScore')}}
+                    </Button>
                     <Icon :type="isShowNum ? 'md-eye-off' : 'md-eye'" class="toggle-num-status" @click="isShowNum = !isShowNum" />
                     <div :class="['score-key-box', isShowNum ? '':'hind-key-box']">
                         <vuescroll>
@@ -71,14 +75,20 @@
                         </vuescroll>
                     </div>
                 </div>
-                <Button type="success" class="submit-score" @click="submit()">提交分数</Button>
+                <Button type="success" class="submit-score" @click="submit()">
+                    {{$t('learnActivity.mark.submit')}}
+                </Button>
                 <div class="score-setting-wrap">
                     <div class="score-setting-item">
-                        <span>打分自动切换学生</span>
+                        <span>
+                            {{$t('learnActivity.mark.setting1')}}
+                        </span>
                         <i-switch v-model="autoStu" size="small" />
                     </div>
                     <div class="score-setting-item">
-                        <span>完成整题批阅自动弹出切换</span>
+                        <span>
+                            {{$t('learnActivity.mark.setting2')}}
+                        </span>
                         <i-switch v-model="autoQu" size="small" />
                     </div>
                 </div>
@@ -86,7 +96,7 @@
         </div>
         <!-- 用来单独渲染学生作答数据,提高tocanvas 的效率 -->
         <iframe id="markIframe1" :srcdoc="curAnswer" v-if="curAnswer"></iframe>
-        <Modal v-model="toggleStatus" title="切换题目" :width="800" footer-hide>
+        <Modal v-model="toggleStatus" :title="$t('learnActivity.mark.toggleQu')" :width="800" footer-hide>
             <div class="qu-prog-wrap" style="height:600px">
                 <vuescroll>
                     <QuProg :paperData="paperData" :stusData="stusInfo" :total="taskInfo.count || 1" @getQuIndex="setQuIndex"></QuProg>
@@ -213,11 +223,11 @@ export default {
                         this.getDefStu()
                     },
                     err => {
-                        this.$Message.error('保存失败')
+                        this.$Message.error(this.$t('learnActivity.mark.saveErr'))
                     }
                 )
             } else {
-                this.$Message.warning('请先打分')
+                this.$Message.warning(this.$t('learnActivity.mark.noSocreErr'))
             }
         },
         quit() {
@@ -268,7 +278,7 @@ export default {
                 if (this.autoQu) {
                     this.toggleStatus = true
                 } else {
-                    this.$Message.warning('当前题目已阅完,请切换题目')
+                    this.$Message.warning(this.$t('learnActivity.mark.completeQu'))
                 }
             } else if (!has && this.stusInfo.length < this.taskInfo.count) {
                 //当前学生数据已阅,需要继续随机获取学生进行阅卷
@@ -348,10 +358,10 @@ export default {
                 if (this.stusInfo[this.stuIndex].info.answer) {
                     return this.stusInfo[this.stuIndex].info.answer[this.getScoreIndex(this.quIndex, this.childIndex)]
                 } else {
-                    return this.stusInfo[this.stuIndex].stuId + '未作答'
+                    return this.stusInfo[this.stuIndex].stuId + this.$t('learnActivity.mark.noAnswer')
                 }
             } else {
-                return '学生信息异常'
+                return this.$t('learnActivity.mark.stuInfoErr')
             }
         },
         /**当期题目分数数组 */

+ 45 - 37
TEAMModelOS/ClientApp/src/view/task/mark/ByStu.vue

@@ -4,23 +4,23 @@
         <!-- 头部基础信息 -->
         <div class="mark-header">
             <span class="quit-marking-text">
-                <Icon type="ios-arrow-back" class="quit-marking-icon" title="退出阅卷" @click="quit" />
+                <Icon type="ios-arrow-back" class="quit-marking-icon" :title="$t('learnActivity.mark.quit')" @click="quit" />
             </span>
-            <span class="info-label">考试名称:</span>
+            <span class="info-label">{{$t('learnActivity.mark.examName')}}</span>
             <span class="info-value">{{taskInfo.name}}</span>
-            <span class="info-label">阅卷方式:</span>
-            <span class="info-value">按人阅卷</span>
-            <span class="info-label">学生id:</span>
+            <span class="info-label">{{$t('learnActivity.mark.reviewType')}}</span>
+            <span class="info-value">{{$t('learnActivity.mark.byStu')}}</span>
+            <span class="info-label">{{$t('learnActivity.mark.stuId')}}</span>
             <span class="info-value stu-id-info">{{stuId}}</span>
-            <span class="info-label">分数:</span>
+            <span class="info-label">{{$t('learnActivity.mark.score')}}</span>
             <span class="info-value score-info">{{totalScore}}</span>
-            <span class="info-label">当前题号:</span>
+            <span class="info-label">{{$t('learnActivity.mark.curQu')}}</span>
             <span class="info-value cur-qu-index" v-if="childIndex > -1">{{`${quIndex + 1}-${childIndex + 1}`}}</span>
             <span class="info-value cur-qu-index" v-else>{{quIndex + 1}}</span>
             <div class="btn-wrap">
                 <span class="action-btn" @click="toggleStatus = !toggleStatus">
                     <Icon type="md-shuffle" class="action-btn-icon" />
-                    切换学生
+                    {{$t('learnActivity.mark.toggleStu')}}
                 </span>
                 <!-- <span class="action-btn">
                     <Icon type="md-refresh" class="action-btn-icon" />
@@ -28,26 +28,26 @@
                 </span> -->
                 <span class="action-btn" @click="exception">
                     <Icon custom="iconfont icon-exception" class="action-btn-icon"/>
-                    异常申报
+                    {{$t('learnActivity.mark.exception')}}
                 </span>
             </div>
         </div>
         <div class="mark-main">
             <!-- 工具条 -->
             <div class="mark-tools-wrap">
-                <Icon custom="iconfont icon-move" class="tool-icon" title="移动" @click="mouseStatus = 'move'" />
-                <Icon custom="iconfont icon-text" class="tool-icon" title="文字批注" @click="mouseStatus = 'text'" />
-                <Icon custom="iconfont icon-mark" class="tool-icon" title="画笔" @click="mouseStatus = 'line'" />
-                <Icon custom="iconfont icon-arrow-mark" class="tool-icon" title="箭头" @click="mouseStatus = 'arrow'" />
-                <Icon custom="iconfont icon-oval" class="tool-icon" title="椭圆" @click="mouseStatus = 'oval'" />
-                <Icon custom="iconfont icon-rect" class="tool-icon" title="方框" @click="mouseStatus = 'rect'" />
+                <Icon custom="iconfont icon-move" class="tool-icon" :title="$t('learnActivity.mark.move')" @click="mouseStatus = 'move'" />
+                <Icon custom="iconfont icon-text" class="tool-icon" :title="$t('learnActivity.mark.text')" @click="mouseStatus = 'text'" />
+                <Icon custom="iconfont icon-mark" class="tool-icon" :title="$t('learnActivity.mark.brush')" @click="mouseStatus = 'line'" />
+                <Icon custom="iconfont icon-arrow-mark" class="tool-icon" :title="$t('learnActivity.mark.arrow')" @click="mouseStatus = 'arrow'" />
+                <Icon custom="iconfont icon-oval" class="tool-icon" :title="$t('learnActivity.mark.oval')" @click="mouseStatus = 'oval'" />
+                <Icon custom="iconfont icon-rect" class="tool-icon" :title="$t('learnActivity.mark.rect')" @click="mouseStatus = 'rect'" />
                 <Poptip transfer placement="right">
-                    <Icon custom="iconfont icon-smile" class="tool-icon" title="图标" />
+                    <Icon custom="iconfont icon-smile" class="tool-icon" :title="$t('learnActivity.mark.seal')" />
                     <div slot="content" class="expression-box">
                         <img v-for="(item,index) in imgs" :key="index" :src="item" alt="" class="expression-img" @click="drawImg(index)">
                     </div>
                 </Poptip>
-                <Icon custom="iconfont icon-fresh" class="tool-icon" title="清除批注" @click="clear" />
+                <Icon custom="iconfont icon-fresh" class="tool-icon" :title="$t('learnActivity.mark.clear')" @click="clear" />
                 <!-- <Icon :custom="isFull ? 'iconfont icon-cancel-full' : 'iconfont icon-full-screen'" class="tool-icon" :title="isFull ? '取消全屏' : '全屏'" @click="togglefull" /> -->
             </div>
             <div class="mark-stage">
@@ -56,10 +56,10 @@
                 <div class="qu-index-box">
                     <div class="qu-tips-box">
                         <span class="qu-tips-tag">
-                            已阅
+                            {{$t('learnActivity.mark.marked')}}
                         </span>
                         <span class="qu-tips-tag">
-                            未阅
+                            {{$t('learnActivity.mark.unmark')}}
                         </span>
                     </div>
                     <div>
@@ -81,12 +81,16 @@
             <!-- 打分部分 -->
             <div class="score-wrap">
                 <div class="quick-score-box score-input-box">
-                    <span>分数:</span>
+                    <span>{{$t('learnActivity.mark.score')}}</span>
                     <InputNumber style="flex:1" :max="10" :min="1" v-model="score" @on-change="setScore"></InputNumber>
                 </div>
                 <div class="quick-score-box">
-                    <Button size="small" type="info" style="margin-right:8px" ghost @click="score = 10">满分</Button>
-                    <Button size="small" type="error" ghost @click="score = 0">零分</Button>
+                    <Button size="small" type="info" style="margin-right:8px" ghost @click="score = 10">
+                        {{$t('learnActivity.mark.fullScore')}}
+                    </Button>
+                    <Button size="small" type="error" ghost @click="score = 0">
+                        {{$t('learnActivity.mark.zeroScore')}}
+                    </Button>
                     <Icon :type="isShowNum ? 'md-eye-off' : 'md-eye'" class="toggle-num-status" @click="isShowNum = !isShowNum" />
                     <div :class="['score-key-box', isShowNum ? '':'hind-key-box']">
                         <vuescroll>
@@ -96,14 +100,20 @@
                         </vuescroll>
                     </div>
                 </div>
-                <Button type="success" class="submit-score" @click="submit()">提交分数</Button>
+                <Button type="success" class="submit-score" @click="submit()">
+                    {{$t('learnActivity.mark.submit')}}
+                </Button>
                 <div class="score-setting-wrap">
                     <div class="score-setting-item">
-                        <span>打分自动切换题目</span>
+                        <span>
+                            {{$t('learnActivity.mark.setting3')}}
+                        </span>
                         <i-switch v-model="autoQu" size="small" />
                     </div>
                     <div class="score-setting-item">
-                        <span>完成阅卷自动获取新学生</span>
+                        <span>
+                            {{$t('learnActivity.mark.setting4')}}
+                        </span>
                         <i-switch v-model="autoStu" size="small" />
                     </div>
                 </div>
@@ -111,7 +121,7 @@
         </div>
         <!-- 用来单独渲染学生作答数据,提高tocanvas 的效率 -->
         <iframe id="markIframe" :srcdoc="curAnswer"></iframe>
-        <Modal v-model="toggleStatus" title="切换学生" :width="800" footer-hide>
+        <Modal v-model="toggleStatus" :title="$t('learnActivity.mark.toggleStu')" :width="800" footer-hide>
             <StuProg @getStuId="toByStuView" class="light-stu-prog" :total="taskInfo.count" :stusData="stusData"></StuProg>
         </Modal>
     </div>
@@ -260,17 +270,16 @@ export default {
                 }
                 this.$api.mark.saveScore(requstData).then(
                     res => {
-                        this.$Message.success('保存成功')
                         // 按人阅卷自动跳转下一题
                         this.nextQuestion()
                         this.ansToImg()
                     },
                     err => {
-                        this.$Message.error('保存失败')
+                        this.$Message.error(this.$t('learnActivity.mark.saveErr'))
                     }
                 )
             } else {
-                this.$Message.warning('请先打分')
+                this.$Message.warning(this.$t('learnActivity.mark.noSocreErr'))
             }
         },
         nextQuestion() {
@@ -279,7 +288,7 @@ export default {
                 if (this.autoStu) {
                     this.toggleStatus = true
                 } else {
-                    this.$Message.warning('当前完成当前学生评分,如果继续评分,请切换学生')
+                    this.$Message.warning(this.$t('learnActivity.mark.completeStu'))
                 }
                 return
             }
@@ -356,21 +365,20 @@ export default {
                         }
                         qu = childIndex > -1 ? `${(quIndex + 1)}-${(childIndex + 1)}` : quIndex
                         this.$Modal.confirm({
-                            title: '未阅题目',
-                            content: `${qu}题目尚未评分,是否跳转到对应题目继续评分?`,
+                            title: this.$t('learnActivity.mark.ummarkQu'),
+                            content: `${qu}${this.$t('learnActivity.mark.unmarkContent')}`,
                             onOk: () => {
                                 this.quIndex = quIndex
                                 this.childIndex = childIndex
                             }
                         })
                     } else {
-                        this.$Message.success('已阅完')
+                        this.$Message.success(this.$t('learnActivity.mark.finished'))
                         if (this.autoStu) {
                             //TODE 随机获取下一位学生
                             this.toggleStatus = true
                         }
                     }
-
                 }
             }
             this.score = this.stuScore[this.getScoreIndex(this.quIndex, this.childIndex)] == -1 ? null : this.stuScore[this.getScoreIndex(this.quIndex, this.childIndex)]
@@ -409,10 +417,10 @@ export default {
                         return item.info.score.includes(-1)
                     })
                     if (res.length) {
-                        this.$Message.warning('已无未阅学生,请挑选进行中的学生继续阅卷。')
+                        this.$Message.warning(this.$t('learnActivity.mark.noUnMarkStu'))
                         this.toggleStatus = true
                     } else {
-                        this.$Message.success('您已完成阅卷任务')
+                        this.$Message.success(this.$t('learnActivity.mark.completeTask'))
                     }
 
                 } else {
@@ -505,7 +513,7 @@ export default {
                 this.score = this.stuScore[index] == -1 ? null : this.stuScore[index]
                 return this.stuAnswer[index]
             } else {
-                return this.stuId + '未作答'
+                return this.stuId + this.$t('learnActivity.mark.noAnswer')
             }
 
         },

+ 8 - 4
TEAMModelOS/ClientApp/src/view/task/mark/ProgPie.vue

@@ -34,7 +34,11 @@ export default {
                     itemWidth: 10,
                     itemHeight: 10,
                     left: 'center',
-                    data: ['已阅', '进行中', '未阅'],
+                    data: [
+                        this.$t('learnActivity.mark.marked'),
+                        this.$t('learnActivity.mark.marking'),
+                        this.$t('learnActivity.mark.unmark')
+                    ],
                     textStyle: {
                         color: '#ddd',
                         fontSize: 11,
@@ -49,21 +53,21 @@ export default {
                         data: [
                             {
                                 value: 0,
-                                name: '已阅',
+                                name: this.$t('learnActivity.mark.marked'),
                                 itemStyle: {
                                     color: "#9ff080"
                                 },
                             },
                             {
                                 value: 0,
-                                name: '进行中',
+                                name: this.$t('learnActivity.mark.marking'),
                                 itemStyle: {
                                     color: "#5c7bd9"
                                 },
                             },
                             {
                                 value: 0,
-                                name: '未阅',
+                                name: this.$t('learnActivity.mark.unmark'),
                                 itemStyle: {
                                     color: "#ffdc60"
                                 },

+ 2 - 2
TEAMModelOS/ClientApp/src/view/task/mark/QuProg.vue

@@ -11,7 +11,7 @@
                         <Progress :percent="objectiveQu.includes(childItem.type) ? 100 : byQuPct[getScoreIndex(index,childIndex)]" />
                         <!-- <Progress :percent="byQuPct[getScoreIndex(index,childIndex)]" /> -->
                         <p v-if="objectiveQu.includes(childItem.type)" class="prog-tips" style="color: #19be6b">
-                            客观题已由系统自动完成评分。
+                            {{$t('task.objectiveQu')}}
                         </p>
                         <p v-else class="prog-tips">
                             <span style="margin-right:10px">
@@ -38,7 +38,7 @@
                     <Progress :percent="objectiveQu.includes(item.type) ? 100 : byQuPct[getScoreIndex(index)]" />
                     <!-- <Progress :percent="byQuPct[getScoreIndex(index)]" /> -->
                     <p v-if="objectiveQu.includes(item.type)" class="prog-tips" style="color: #19be6b">
-                        客观题已由系统自动完成评分。
+                        {{$t('task.objectiveQu')}}
                     </p>
                     <p v-else>
                         <span style="margin-right:10px">

+ 13 - 9
TEAMModelOS/ClientApp/src/view/task/mark/StuProg.vue

@@ -18,26 +18,30 @@
                 <div class="stu-wrap">
                     <div class="stu-list-wrap no-stu-wrap" v-show="tabIndex == 0">
                         <p class="no-mark-text" v-if="unmarked > 0 && unmarked < total">
-                            还剩
+                            {{$t('task.lastLabel1')}}
                             <span class="no-mark-count">{{unmarked}}</span>
-                            人未阅,
-                            <span class="continue-mark" @click="toByStuView()">继续阅卷</span>
+                            {{$t('task.lastLabel2')}}
+                            <span class="continue-mark" @click="toByStuView()">
+                                {{$t('task.continue')}}
+                            </span>
                         </p>
                         <p class="no-mark-text" v-else-if="unmarked > 0">
-                            阅卷总量
+                            {{$t('task.totalLabel1')}}
                             <span class="no-mark-count">{{unmarked}}</span>
-                            人,
-                            <span class="continue-mark" @click="toByStuView()">开始阅卷</span>
+                            {{$t('task.totalLabel2')}}
+                            <span class="continue-mark" @click="toByStuView()">
+                                {{$t('task.start')}}
+                            </span>
                         </p>
-                        <EmptyData v-else textContent="暂无未阅学生"></EmptyData>
+                        <EmptyData v-else :textContent="$t('task.noUnmark')"></EmptyData>
                     </div>
                     <div class="stu-list-wrap" v-show="tabIndex == 1">
                         <span class="stu-name" v-for="(item,index) in marking" :key="index" @click="toByStuView(item.stuId)">{{item.stuId}}</span>
-                        <EmptyData textContent="暂无进行中学生" v-show="!marking.length"></EmptyData>
+                        <EmptyData :textContent="$t('task.noMarking')" v-show="!marking.length"></EmptyData>
                     </div>
                     <div class="stu-list-wrap" v-show="tabIndex == 2">
                         <span class="stu-name" v-for="(item,index) in marked" :key="index" @click="toByStuView(item.stuId)">{{item.stuId}}</span>
-                        <EmptyData :top="0" textContent="暂无已阅学生" v-show="!marked.length"></EmptyData>
+                        <EmptyData :top="0" :textContent="$t('task.noMarked')" v-show="!marked.length"></EmptyData>
                     </div>
                 </div>
             </div>

+ 6 - 6
TEAMModelOS/ClientApp/src/view/teachcontent/index.vue

@@ -14,7 +14,7 @@
                         </Tooltip>
                     </div>
                     <!-- Blob空间计算 -->
-                    <div :class="($access.can('admin.*|content-school-upd') || routerScope == 'private') ? 'space-box animated fadeIn fast' : 'space-box animated fadeOut fast'">
+                    <div :class="($access.can('admin.*|content-upd') || routerScope == 'private') ? 'space-box animated fadeIn fast' : 'space-box animated fadeOut fast'">
                         <div class="percent-box">
                             <span class="percent-item-span storage-full" :style="{ width: '100%' }" v-if="sizeInfo.total > storageSpace"></span>
                             <span class="percent-item-span storage-res" :style='{ width: getPercent(sizeInfo.res) }'></span>
@@ -99,11 +99,11 @@
                             </Checkbox>
                         </CheckboxGroup>
                     </div>
-                    <span v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" class="action-btn-wrap" @click="delFileBatch">
+                    <span v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" class="action-btn-wrap" @click="delFileBatch">
                         <Icon type="md-trash" class="toggle-btn-icon" />
                         {{$t('teachContent.delBatch')}}
                     </span>
-                    <span v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" @click="showUpload" class="action-btn-wrap">
+                    <span v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" @click="showUpload" class="action-btn-wrap">
                         <Icon type="md-cloud-upload" class="toggle-btn-icon" size="16" />
                         {{$t('teachContent.btnUpload')}}
                     </span>
@@ -168,8 +168,8 @@
                                 <div class="item-tools">
                                     <Icon type="md-download" size="18" color="white" :title="$t('teachContent.tips3')" @click="downloadFile(index)" />
                                     <Icon v-if="activeType !== 'other' && activeType != 'res'" type="md-eye" size="18" color="white" :title="$t('teachContent.tips4')" @click="openPreviewFile(index)" />
-                                    <Icon v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" type="md-trash" size="18" color="white" :title="$t('teachContent.tips7')" @click="delFile(row,index)" />
-                                    <Icon v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" type="md-create" size="18" color="white" :title="$t('teachContent.tips6')" @click="rename(row,index)" />
+                                    <Icon v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" type="md-trash" size="18" color="white" :title="$t('teachContent.tips7')" @click="delFile(row,index)" />
+                                    <Icon v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" type="md-create" size="18" color="white" :title="$t('teachContent.tips6')" @click="rename(row,index)" />
                                 </div>
                             </template>
                         </Table>
@@ -182,7 +182,7 @@
                                 <div class="item-tools">
                                     <Icon type="md-download" size="18" color="white" :title="$t('teachContent.tips3')" @click.stop="downloadFile(props.index)" />
                                     <Icon type="md-eye" size="18" color="white" :title="$t('teachContent.tips4')" @click="openPreviewFile(props.index)" />
-                                    <Icon v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" type="md-trash" size="18" color="white" :title="$t('teachContent.tips7')" @click.stop="delFile(props.value, props.index)" />
+                                    <Icon v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" type="md-trash" size="18" color="white" :title="$t('teachContent.tips7')" @click.stop="delFile(props.value, props.index)" />
                                     <span style="color:white; float:right;margin-right:10px;">{{$jsFn.formatBytes(props.value.size)}}</span>
                                 </div>
                             </div>

+ 1 - 1
TEAMModelOS/ClientApp/src/view/teachermgmt/Index.vue

@@ -14,7 +14,7 @@
     <div class="mgmt-top">
       <div class="tab-box">
         <span class="pane" @click="paneBtn('userList')" :class="{ active: compts === 'userList' }">{{ $t('teachermgmt.page.text1') }}</span>
-        <span class="pane" @click="paneBtn('personnel')" :class="{ active: compts === 'personnel' }">{{ $t('teachermgmt.page.text2') }} <Badge :count="requestedUserCount" class-name="badgesty"></Badge></span>
+        <span v-if="$access.can('admin.*|teacher-upd')" class="pane" @click="paneBtn('personnel')" :class="{ active: compts === 'personnel' }">{{ $t('teachermgmt.page.text2') }} <Badge :count="requestedUserCount" class-name="badgesty"></Badge></span>
       </div>
     </div>
     <div class="mgmt-main">

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1097 - 1110
TEAMModelOS/ClientApp/src/view/teachermgmt/components/userList/Index.vue