Prechádzať zdrojové kódy

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

OnePsycho 4 rokov pred
rodič
commit
be751bbc24
25 zmenil súbory, kde vykonal 1636 pridanie a 1485 odobranie
  1. 60 54
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReport.vue
  2. 28 18
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/StudentScore.vue
  3. 51 24
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperTest.vue
  4. 3 3
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperView.vue
  5. 45 42
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/QuesNaire.vue
  6. 110 100
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/Vote.vue
  7. 28 0
      TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js
  8. 1 0
      TEAMModelOS/ClientApp/src/locale/lang/en-US/system.js
  9. 28 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/learnActivity.js
  10. 1 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/system.js
  11. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/teachermgmt.js
  12. 28 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js
  13. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/schoolBaseInfo.js
  14. 1 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/system.js
  15. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/teachermgmt.js
  16. 10 0
      TEAMModelOS/ClientApp/src/store/module/user.js
  17. 1 1
      TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue
  18. 58 59
      TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue
  19. 5 5
      TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue
  20. 53 49
      TEAMModelOS/ClientApp/src/view/student-account/ClassMgt.vue
  21. 4 4
      TEAMModelOS/ClientApp/src/view/student-account/MgtStuList.vue
  22. 10 2
      TEAMModelOS/ClientApp/src/view/task/mark/MarkCanvas.vue
  23. 6 6
      TEAMModelOS/ClientApp/src/view/teachcontent/index.vue
  24. 1 1
      TEAMModelOS/ClientApp/src/view/teachermgmt/Index.vue
  25. 1097 1110
      TEAMModelOS/ClientApp/src/view/teachermgmt/components/userList/Index.vue

+ 60 - 54
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReport.vue

@@ -209,24 +209,25 @@
                         <div class="rightAnalys">
                             <div class="TitleRec2"><span style="margin-left:5px">{{$t("studentWeb.exam.report.testAns")}}:</span></div>
                             <br />
-                            <div style="display:flex">
+                            <div style="display: flex">
                                 <div v-for="(item,index) in question.answer" :key="index" v-html="item" style="margin-left:10px;"></div>
                             </div>
-                            <div class="TitleRec2"><span style="margin-left:5px">{{$t("studentWeb.exam.report.testAnalyse")}}:</span></div>
+                            <div class="TitleRec2"><span style="margin-left: 5px">{{$t("studentWeb.exam.report.testAnalyse")}}:</span></div>
                             <br />
-                            <div style="margin-left:10px;" v-html="question.explain != '' ?  question.explain : $t('studentWeb.exam.report.noAnalyse') "></div>
+                            <div style="margin-left: 10px;" v-html="question.explain != '' ?  question.explain : $t('studentWeb.exam.report.noAnalyse') "></div>
                             <div v-show="examInfo.stuScore[index] != -1 && examInfo.stuScore[index] != question.score" class="TitleRec2"><span style="margin-left:5px">{{$t("studentWeb.exam.report.repairSource")}}:</span></div>
                             <br />
-                            <div style="margin-left:10px;display:flex" v-show="examInfo.stuScore[index] != -1 && examInfo.stuScore[index] != question.score ">
+                            <div style="margin-left: 10px; display: flex" v-show="examInfo.stuScore[index] != -1 && examInfo.stuScore[index] != question.score">
                                 <span v-if="question.repair.length == 0">{{$t("studentWeb.exam.report.noSource")}}</span>
                                 <div v-if="question.repair && question.repair.length > 0" class="repair-box">
                                     <Collapse style="width:85%" accordion @on-change="getSource(question.repair,question)">
+                                        <!-- 网络资源 -->
                                         <Panel name="1">
                                             {{$t("studentWeb.exam.report.linkSource")}}
                                             <p slot="content">
                                                 <List border size="small">
                                                     <ListItem v-for="(item,normalIndex) in repairSource.normal" :key="normalIndex">
-                                                        <span style="margin-right:10px;" v-show="item.blobUrl">
+                                                        <span style="margin-right: 10px;" v-show="item.blobUrl">
                                                             <Icon color="#0066FF" custom="iconfont icon-share_link" size="20" />
                                                         </span><a :href="item.blobUrl" target="_blank">{{item.blobUrl}}</a>
                                                     </ListItem>
@@ -236,6 +237,7 @@
                                                 </List>
                                             </p>
                                         </Panel>
+                                        <!-- 文件资源 -->
                                         <Panel name="2">
                                             {{$t("studentWeb.exam.report.fileSource")}}
                                             <p slot="content">
@@ -315,7 +317,7 @@
     import LessonTestReportCharts from "./LessonTestReportCharts/LessonTestReportCharts";
     import Loading from "vue-loading-overlay";
     import "vue-loading-overlay/dist/vue-loading.css";
-import { mapGetters } from 'vuex';
+    import { mapGetters } from 'vuex';
     export default {
         name: "LessonTestReport",
         components: {
@@ -345,17 +347,17 @@ import { mapGetters } from 'vuex';
                 //loading畫面
                 closeAnsDetail: false,
                 checkedAns: ["right", "wrong", "noAns"],
-                testState: 0, //表示有没有作答
+                testState: 0, //1:未作答  2:未评分  3:已评分
                 paperData: [], //所有题目信息
                 ansData: [], //题目的作答答案
                 repairSource: {
-                    normal: [],
-                    file: []
+                    normal: [], //网络资源
+                    file: [] //文件资源
                 },
                 repairData: [],
                 previewStatus: false, //展示补救资源
                 previewFile: {},
-                numPages: null
+                numPages: null //pdf的页数
             };
         },
         mounted() {
@@ -363,10 +365,12 @@ import { mapGetters } from 'vuex';
             this.testJudge()
         },
         methods: {
+            // 关闭Modal
             closePreview() {
                 this.previewStatus = !this.previewStatus
                 this.previewFile = {}
             },
+            // 点击文件资源
             async getItemData(data) {
                this.previewStatus = false
                 if (data.file) {
@@ -448,6 +452,14 @@ import { mapGetters } from 'vuex';
                     this.$store.commit("ToggleLessonTestPopWithSubject", this.examInfo)
                 }
             },
+            // 判断题型
+            getTestType(data) {
+                for (let item of this.$t('global.testType')) {
+                    if (item.value == data) {
+                        return item.label
+                    }
+                }
+            },
             //判断作答情况
             testJudge() {
                 if (this.examInfo.subject !== undefined) {
@@ -471,44 +483,6 @@ import { mapGetters } from 'vuex';
                     }
                 }
             },
-            getTestType(data) {
-                for (let item of this.$t('global.testType')) {
-                    if (item.value == data) {
-                        return item.label
-                    }
-                }
-            },
-            // 获取学生作答数据
-            async getItem(data) {
-                let datas = []
-                if (data !== undefined) {
-                    let codes = this.getItemTitle
-                    let code = {
-                        scope: codes.scope,
-                        code: codes.scope === 'school' ? codes.school : codes.creatorId,
-                        blob: data
-                    }
-                    let blob = this.formUrl(code)
-                    code.blob = blob
-                    datas = await this.$evTools.getComposeItem(code)
-                    return datas
-                } else {
-                    return []
-                }
-            },
-            // 处理学生作答数据blob地址
-            formUrl(data) { 
-                let a = ""
-                if (data.blob.indexOf('https://teammodelstorage') > -1) {
-                    a = data.blob
-                } else {
-                    let blobUrl = JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri
-                    let studentBlob = blobUrl.split('/')
-                    let url = data.scope == 'school' ? blobUrl : "https://" + studentBlob[studentBlob.length - 2] + '/' + this.getItemTitle.creatorId
-                    a = `${url}/exam/${data.blob}`
-                }
-                return a 
-            },
             async formPaper() {
                 let paper = []
                 this.paperData.length = 0
@@ -545,8 +519,36 @@ import { mapGetters } from 'vuex';
                     this.ansData= await this.getItem(this.examInfo.stuAns[0])
                 }
             },
-            closeDetail() {
-                this.closeAnsDetail = !this.closeAnsDetail;
+            // 获取学生作答数据
+            async getItem(data) {
+                let datas = []
+                if (data !== undefined) {
+                    let codes = this.getItemTitle
+                    let code = {
+                        scope: codes.scope,
+                        code: codes.scope === 'school' ? codes.school : codes.creatorId,
+                        blob: data
+                    }
+                    let blob = this.formUrl(code)
+                    code.blob = blob
+                    datas = await this.$evTools.getComposeItem(code)
+                    return datas
+                } else {
+                    return []
+                }
+            },
+            // 处理学生作答数据blob地址
+            formUrl(data) { 
+                let a = ""
+                if (data.blob.indexOf('https://teammodelstorage') > -1) {
+                    a = data.blob
+                } else {
+                    let blobUrl = JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri
+                    let studentBlob = blobUrl.split('/')
+                    let url = data.scope == 'school' ? blobUrl : "https://" + studentBlob[studentBlob.length - 2] + '/' + this.getItemTitle.creatorId
+                    a = `${url}/exam/${data.blob}`
+                }
+                return a 
             },
             checkedAnsFilter(index) {
                 if (this.checkedAns.includes("right") == true && this.examInfo.stuScore[index] == this.paperData[index].score) {
@@ -560,6 +562,10 @@ import { mapGetters } from 'vuex';
                 else return false;
 
             },
+            /* =====未调用====== */
+            closeDetail() {
+                this.closeAnsDetail = !this.closeAnsDetail;
+            },
         },
         computed: {
             ...mapGetters([
@@ -573,7 +579,7 @@ import { mapGetters } from 'vuex';
                         data += item
                     }
                 }
-                if(String(data).indexOf(".") != -1) {
+                if (String(data).indexOf(".") != -1) {
                     data = data.toFixed(2)
                 }
                 return data
@@ -835,9 +841,9 @@ import { mapGetters } from 'vuex';
         }
 
     /**對問題進行篩選 */
-    .filterBtn {
-        /* display: inline-block; */
-    }
+    /* .filterBtn {
+        display: inline-block;
+    } */
 
     .filterBtn .wrong-exercises{
         /* border: 1px solid #515A6E; */

+ 28 - 18
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/StudentScore.vue

@@ -4,7 +4,7 @@
             <div class="stu-info">
                 <ul>
                     <li>
-                        <p><Icon type="ios-home" size="24" />{{$t("studentWeb.exam.studentScore.examName")}}:<span>{{$store.getters.getItemTitle.name}}</span></p>
+                        <p><Icon type="ios-home" size="24" />{{$t("studentWeb.exam.studentScore.examName")}}:<span>{{getItemTitle.name}}</span></p>
                     </li>
                     <li>
                         <p><Icon type="ios-paper" size="24" />{{$t("studentWeb.exam.studentScore.examType")}}:<span>--</span></p>
@@ -13,13 +13,13 @@
                         <p><Icon type="ios-list-box" size="24" />{{$t("studentWeb.exam.studentScore.stableIndex")}}:<span>--</span></p>
                     </li>
                     <li>
-                        <p><Icon type="ios-person" size="24" />{{$t("studentWeb.exam.studentScore.name")}}:<span>{{$store.state.userInfo.name}}</span></p>
+                        <p><Icon type="ios-person" size="24" />{{$t("studentWeb.exam.studentScore.name")}}:<span>{{userInfo.name}}</span></p>
                     </li>
                     <li>
-                        <p style="margin-top:5px">{{$t("studentWeb.exam.studentScore.stuNo")}}:<span>{{$store.state.userInfo.sub}}</span></p>
+                        <p style="margin-top:5px">{{$t("studentWeb.exam.studentScore.stuNo")}}:<span>{{userInfo.sub}}</span></p>
                     </li>
                     <li>
-                        <p style="margin-top:5px">{{$t("studentWeb.exam.studentScore.class")}}:<span>{{$store.state.user.studentProfile.classinfo.name}}</span></p>
+                        <p style="margin-top:5px">{{$t("studentWeb.exam.studentScore.class")}}:<span>{{classinfo.name}}</span></p>
                     </li>
                 </ul>
             </div>
@@ -214,6 +214,7 @@
     </div>
 </template>
 <script>
+    import { mapGetters, mapState } from 'vuex'
     export default {
         props: {
             stuData: {
@@ -231,7 +232,7 @@
         },
         data() {
             return {
-                testData: [],
+                testData: [], //试卷的题目信息
                 stuScore: [],
                 scoreInfo: {}
             }
@@ -256,11 +257,11 @@
                     this.scoreInfo = {}
                     let req = {
                         // "code": this.$store.state.user.schoolCode,
-                        "code": this.$store.getters.getItemTitle.owner == 'school' ? this.$store.getters.getItemTitle.school : this.$store.getters.getItemTitle.creatorId,
+                        "code": this.getItemTitle.owner == 'school' ? this.getItemTitle.school : this.getItemTitle.creatorId,
                         "id": this.examData[0].id,
-                        "sId": this.$store.state.userInfo.sub,
+                        "sId": this.userInfo.sub,
                         "cId": this.stuData.claId[0],
-                        "gId": this.$store.state.user.studentProfile.classinfo.gradeId
+                        "gId": this.classinfo.gradeId
                     }
                     this.$api.studentWeb.getStudentAnalysis(req).then(res => {
                         if (res.gradeAverage && this.stuScore.length) {
@@ -294,12 +295,12 @@
                 } else {
                     let blobUrl = JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri
                     let studentBlob = blobUrl.split('/')
-                    let url = data.scope == 'school' ? blobUrl : "https://" + studentBlob[studentBlob.length - 2] + '/' + this.$store.getters.getItemTitle.creatorId
+                    let url = data.scope == 'school' ? blobUrl : "https://" + studentBlob[studentBlob.length - 2] + '/' + this.getItemTitle.creatorId
                     a = `${url}/exam/${data.blob}`
                 }
                 return a 
             },
-            async getStudentData(data,score,ans) {
+            async getStudentData(data, score, ans) {
                 let paper = []
                 let item = {
                     objItem: [],
@@ -307,13 +308,13 @@
                 }
                 console.log('5636123322',data)
                 if (data !== undefined) {
-                    let codes = this.$store.getters.getItemTitle.scope == 'school' ? data.school : data.creatorId
-                        let code = {
-                            scope: data.scope,
-                            code: codes,
-                            blob: data.blob,
-                            examId:codes
-                        }
+                    let codes = this.getItemTitle.scope == 'school' ? data.school : data.creatorId
+                    let code = {
+                        scope: data.scope,
+                        code: codes,
+                        blob: data.blob,
+                        examId:codes
+                    }
                     let papers = await this.$evTools.getStuPaper(code)
                     let answer = await this.getItem(ans)
                     paper = await this.formPaper(papers)
@@ -344,7 +345,7 @@
             async getItem(data) {
                 let datas = []
                 if (data !== undefined) {
-                    let key = this.$store.getters.getItemTitle
+                    let key = this.getItemTitle
                     let code = {
                         scope: this.stuData.papers[0].scope,
                         code: key.scope == 'school' ? key.school : key.creatorId,
@@ -397,6 +398,15 @@
                 }
                 deep: true
             }
+        },
+        computed: {
+            ...mapState({
+                userInfo: state => state.userInfo,
+                classinfo: state => state.user.studentProfile.classinfo
+            }),
+            ...mapGetters([
+                "getItemTitle",
+            ])
         }
     }
 </script>

+ 51 - 24
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperTest.vue

@@ -289,6 +289,11 @@
                 // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
                 return "关闭提示";
             }
+            /* if (window.history && window.history.pushState) {
+                // 向历史记录中插入了当前页
+                // history.pushState(null, null, document.URL);
+                window.addEventListener('popstate', this.docGoBack, false);
+            } */
         },
         props: {
             papers: {
@@ -360,6 +365,24 @@
             };
         },
         methods: {
+            docGoBack() {
+                console.log("点击了浏览器的返回按钮");
+                this.$Modal.confirm({
+                    title: this.$t("studentWeb.exam.testpop.exitQuizhint"),
+                    content: "离开页面,您已作答的数据不会保存,是否确认退出?",
+                    onOk: () => {
+                        window.removeEventListener("popstate", this.docGoBack, false)
+                        // sessionStorage.clear(); //删除当前页面的数据
+                        // window.history.back();
+                        this.quitTest()
+                    },
+                    onCancel: () => {
+                        // window.removeEventListener("popstate", this.docGoBack, false)
+                    },
+                })
+                /* sessionStorage.clear();
+                window.history.back(); */
+            },
             getClassName(index){
                 let names = []
                 if(this.queNo == index) {
@@ -445,10 +468,6 @@
                     this.hintHandon()
                 }
             },
-            getJudge() {
-                this.checkers[this.queNo] = []
-                this.checkers[this.queNo].push(this.judgeSelect)
-            },
             getPaper() {
                 let paper = this.getCurrentSubject
                 this.paperData = { ...paper }
@@ -595,25 +614,6 @@
                     this.isLoading = false
                 }, 500)
             },
-            async getItem(data) {
-                let datas = []
-                if (data !== undefined) {
-                    let key = this.getExamInfo.code.split('-')
-                    let code = {
-                        scope: this.getExamInfo.scope,
-                        code: key[(key.length - 1)],
-                        blob: data
-                    }
-                    let blob = this.formUrl(code)
-                    code.blob = blob
-                    console.log(code);
-                    datas = await this.$evTools.getComposeItem(code)
-                    console.log(datas);
-                    return datas
-                } else {
-                    return []
-                }
-            },
             //处理学生作答数据blob地址
             formUrl(data) { 
                 let a = ""
@@ -648,11 +648,38 @@
                     }
                 }
             },
+            /* ======未调用====== */
+            getJudge() {
+                this.checkers[this.queNo] = []
+                this.checkers[this.queNo].push(this.judgeSelect)
+            },
+            async getItem(data) {
+                let datas = []
+                if (data !== undefined) {
+                    let key = this.getExamInfo.code.split('-')
+                    let code = {
+                        scope: this.getExamInfo.scope,
+                        code: key[(key.length - 1)],
+                        blob: data
+                    }
+                    let blob = this.formUrl(code)
+                    code.blob = blob
+                    console.log(code);
+                    datas = await this.$evTools.getComposeItem(code)
+                    console.log(datas);
+                    return datas
+                } else {
+                    return []
+                }
+            },
+        },
+        destroyed () {
+            // window.removeEventListener("popstate", this.docGoBack, false)
         },
 
         watch: {
             checkers:{
-                handler(n,o){
+                handler(n, o) {
                     // 未作答:0  对:1  错:2  主观题:3  已作答:4
                     // 已作答
                     if(n[this.queNo] && n[this.queNo].length) {

+ 3 - 3
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperView.vue

@@ -60,7 +60,7 @@
 <script>
     import Load from "vue-loading-overlay";
     import "vue-loading-overlay/dist/vue-loading.css";
-import { mapGetters } from 'vuex';
+    import { mapGetters } from 'vuex';
     import EventBasicInfo from "../../EventBasicInfo";
     import LessonTestReport from "./LessonTestReport";
     import StudentScore from "./LessonTestReportCharts/StudentScore";
@@ -90,14 +90,14 @@ import { mapGetters } from 'vuex';
                 nextItem: "", //存放下個活動預告
                 isHintNextItem: false,
                 showHint: false,
-                paperData: [],
+                paperData: [], //试卷信息
                 openEva: false,
                 selectData: {}, // 存放完整试卷接口的返回值
                 isExamDown: false,
                 chooseData: {},
                 examData: [],
                 isLoad: false,
-                stuData: {},
+                stuData: {}, //当前评测的所有信息:classId、学科、试卷、作答答案
                 isTestOver: false,
                 selectTab: "test",
                 paperCtn: null, // 当前评测的scope

+ 45 - 42
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/QuesNaire.vue

@@ -36,54 +36,56 @@
 		</div> -->
 		<br />
 		<EventBasicInfo />
-		<!-- 已提交 -->
-		<div v-if="alreadyAnswered" style="text-align: center;padding-top: 15%;">
-			<Icon type="md-checkmark-circle-outline" color="#00ad6c" size="80"/>
-			<p style="font-size: 30px;color:#00ad6c;font-weight: 600; margin:20px;">{{ $t('survey.studentWeb.already') }}</p>
-		</div>
-		<!-- 活动结束 -->
-		<div v-if="!alreadyAnswered && surveyInfo.progress === 'finish'" style="text-align: center;padding-top: 15%;">
-			<Icon type="md-stopwatch" color="#00ad6c" size="80"/>
-			<p style="font-size: 30px;color:#00ad6c;font-weight: 600; margin:20px;">{{ $t('survey.studentWeb.overtime') }}</p>
-		</div>
-		
-
-		<!--問卷完成後,在時間結束前仍可修改答案再提交-->
-		<div v-if="surveyInfo.progress !== 'finish' && !alreadyAnswered">
-			<BillBoardandLightBox :activityData="surveyInfo" />
-			<div class="title-rect-group">
-				<!-- <div class="title-rect" /> -->
-				<h2 class="title-rect-name">{{ $t('survey.studentWeb.content') }}</h2>
+		<div>
+			<!-- 已提交 -->
+			<div v-if="alreadyAnswered" style="text-align: center;padding-top: 15%;">
+				<Icon type="md-checkmark-circle-outline" color="#00ad6c" size="80"/>
+				<p style="font-size: 30px;color:#00ad6c;font-weight: 600; margin:20px;">{{ $t('survey.studentWeb.already') }}</p>
 			</div>
-			<br />
-			<!-- 问卷内容 -->
-			<div v-for="(item, index) in surveyInfo.items" :key="index" class="survey-item">
-				<!-- <br /> -->
-				<div style="display: flex;font-weight: bold;">
-					<span>{{ index + 1 }}. </span>
-					<span v-html="item.question"></span>({{ typeList[item.type] }})<span></span>
+			<!-- 活动结束 -->
+			<div v-if="!alreadyAnswered && surveyInfo.progress === 'finish'" style="text-align: center;padding-top: 15%;">
+				<Icon type="md-stopwatch" color="#00ad6c" size="80"/>
+				<p style="font-size: 30px;color:#00ad6c;font-weight: 600; margin:20px;">{{ $t('survey.studentWeb.overtime') }}</p>
+			</div>
+			
+
+			<!--問卷完成後,在時間結束前仍可修改答案再提交-->
+			<div v-if="surveyInfo.progress !== 'finish' && !alreadyAnswered">
+				<BillBoardandLightBox :activityData="surveyInfo" />
+				<div class="title-rect-group">
+					<!-- <div class="title-rect" /> -->
+					<h2 class="title-rect-name">{{ $t('survey.studentWeb.content') }}</h2>
 				</div>
-				<!-- 非问答 -->
-				<div v-if="item.type !== 'subjective'">
-					<div class="unitTestBtn" v-for="(option, optionIndex) in item.option" :key="optionIndex">
-						<div class="unitTestbg" @click="onOptionClick(item,index,option.code)"
-							:style="{ backgroundColor: submitArr[index].includes(option.code) ?  '#24b880' : 'transparent' }">
-							{{ option.code }}. <span v-html="option.value" style="margin-left: 10px;"></span>
+				<br />
+				<!-- 问卷内容 -->
+				<div v-for="(item, index) in surveyInfo.items" :key="index" class="survey-item">
+					<!-- <br /> -->
+					<div style="display: flex;font-weight: bold;">
+						<span>{{ index + 1 }}. </span>
+						<span v-html="item.question"></span>({{ typeList[item.type] }})<span></span>
+					</div>
+					<!-- 非问答 -->
+					<div v-if="item.type !== 'subjective'">
+						<div class="unitTestBtn" v-for="(option, optionIndex) in item.option" :key="optionIndex">
+							<div class="unitTestbg" @click="onOptionClick(item,index,option.code)"
+								:style="{ backgroundColor: submitArr[index].includes(option.code) ?  '#24b880' : 'transparent' }">
+								{{ option.code }}. <span v-html="option.value" style="margin-left: 10px;"></span>
+							</div>
 						</div>
 					</div>
+					<!-- 问答 -->
+					<div v-if="item.type === 'subjective'">
+						<Input v-model="submitArr[index][0]" type="textarea" :rows="8" :placeholder="$t('studentWeb.exam.inputAnswers')" />
+					</div>
+					<Divider v-if="index != surveyInfo.items.length - 1" />
 				</div>
-				<!-- 问答 -->
-				<div v-if="item.type === 'subjective'">
-					<Input v-model="submitArr[index][0]" type="textarea" :rows="8" :placeholder="$t('studentWeb.exam.inputAnswers')" />
-				</div>
-				<Divider v-if="index != surveyInfo.items.length - 1" />
+				<br />
+				<br />
+				<button class="uploadBtn" @click="submitMessage()">
+					<svg-icon icon-class="quesnaire" class="uloadBtn-icon" />
+					<span>{{ $t('survey.studentWeb.submit') }}</span>
+				</button>
 			</div>
-			<br />
-			<br />
-			<button class="uploadBtn" @click="submitMessage()">
-				<svg-icon icon-class="quesnaire" class="uloadBtn-icon" />
-				<span>{{ $t('survey.studentWeb.submit') }}</span>
-			</button>
 		</div>
 
 		<!-- {{ createdSaveCheckers() }} -->
@@ -228,6 +230,7 @@ import { mapGetters } from 'vuex';
 			//获取投票数据
 			// 获取surveyInfo的数据
 			async getSurveyInfo() {
+				// this.surveyInfo = {}
 				if (this.getItemTitle.id) {
 					let params = {
 						"id": this.getItemTitle.id,

+ 110 - 100
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/Vote.vue

@@ -9,113 +9,115 @@
         </div>
         <EventBasicInfo />
         <div>
+            <div>
             <!--超时-->
-            <div v-if="getItemTitle.endTime <= '2020.02.10'">
-                <br />
-                <div class="dec animate__animated animate__bounceInLeft">
-                    <svg-icon icon-class="handonHint" class="warm-icon" />
-                    <span class="warm-hint">{{ $t("studentWeb.vote.timeoutHint") }}</span>
-                </div>
-            </div>
-            <div v-if="!showResult">
-                <div class="load-box">
-                    <Load :active.sync="isLoad"
-                          background-color="#000">
-                        <template slot="default">
-                            <svg-icon icon-class="loader" class="loader-icon" />
-                        </template>
-                    </Load>
-                </div>
-                <BillBoardandLightBox :activityData="voteInfo" :voteRes="voteResData" />
-                <div class="vote-title">
-                    <div class="title-rect-group">
-                        <!-- <div class="title-rect" /> -->
-                        <h2 class="title-rect-name">{{ $t("studentWeb.vote.bollotbox") }}</h2>
-                        <p v-if="voteInfo.repeat" style="margin-left:15px;margin-top:2px">{{ $t("studentWeb.vote.surplusTickets")}} <span style="font-size:16px">{{voteCount}}</span><span> {{ $t("studentWeb.vote.tickets")}} </span></p>
+                <div v-if="getItemTitle.endTime <= '2020.02.10'">
+                    <br />
+                    <div class="dec animate__animated animate__bounceInLeft">
+                        <svg-icon icon-class="handonHint" class="warm-icon" />
+                        <span class="warm-hint">{{ $t("studentWeb.vote.timeoutHint") }}</span>
                     </div>
-                    <Button v-show="isResult"
-                            style="float:right;margin-top:-30px"
-                            size="small" type="success"
-                            @click="showRes"
-                    >
-                        <span style="margin-left:5px">{{$t("studentWeb.vote.voteRes")}}</span>
-                    </Button>
                 </div>
-                <!-- 投票内容 -->
-                <!-- <div class="question-box">
-                    <span v-html="voteInfo.description"></span>
-                </div> -->
-                <div class="vote-option">
-                    <!-- 1票
-                    <RadioGroup v-model="voteChecked" v-if="voteInfo.voteNum == 1" class="option-group">
-                        <Radio :label="item.code" v-for="(item, index) in voteInfo.options" :key="index" class="option-wrapper">
-                            <span v-html="item.value"></span>
-                        </Radio>
-                    </RadioGroup>
-                    多票  不重复
-                    <CheckboxGroup v-model="voteChecked" v-if="voteInfo.voteNum > 1 && !voteInfo.repeat" class="option-group">
-                        <Checkbox :label="item.code" v-for="(item, index) in voteInfo.options" :key="index" class="option-wrapper">
-                            <span v-html="item.value"></span>
-                        </Checkbox>
-                    </CheckboxGroup>
-                    多票  重复
-                    <CheckboxGroup v-model="voteChecked" v-if="voteInfo.voteNum > 1 && voteInfo.repeat" class="option-group option-repeat">
-                        <Checkbox :label="item.code" v-for="(item, index) in voteInfo.options" :key="index" class="option-wrapper">
-                            <InputNumber v-model="item.count"
-                                         :min="0"
-                                         size="small"
-                                         :formatter="value => `${value}` +$t('studentWeb.vote.tickets')"
-                            ></InputNumber>
-                            <span v-html="item.value"></span>
-                        </Checkbox>
-                    </CheckboxGroup> -->
-                    <div class="checkAnswer" v-for="(item, index) in voteInfo.options" :key="index">  
-                        <label class="testBtn">
-                            <input type="checkbox" :value="item" v-model="voteChecked" @click="getVote(item)" />
-                            <div class="testbg">
-                                <div class="vote-info">
-                                    <span style="display:flex;margin-right:5px">{{item.code}}.<span v-html="item.value"></span></span>
-                                </div>
+                <div v-if="!showResult">
+                    <div class="load-box">
+                        <Load :active.sync="isLoad"
+                            background-color="#000">
+                            <template slot="default">
+                                <svg-icon icon-class="loader" class="loader-icon" />
+                            </template>
+                        </Load>
+                    </div>
+                    <BillBoardandLightBox :activityData="voteInfo" :voteRes="voteResData" />
+                    <div class="vote-title">
+                        <div class="title-rect-group">
+                            <!-- <div class="title-rect" /> -->
+                            <h2 class="title-rect-name">{{ $t("studentWeb.vote.bollotbox") }}</h2>
+                            <p v-if="voteInfo.repeat" style="margin-left:15px;margin-top:2px">{{ $t("studentWeb.vote.surplusTickets")}} <span style="font-size:16px">{{voteCount}}</span><span> {{ $t("studentWeb.vote.tickets")}} </span></p>
+                        </div>
+                        <Button v-show="isResult"
+                                style="float:right;margin-top:-30px"
+                                size="small" type="success"
+                                @click="showRes"
+                        >
+                            <span style="margin-left:5px">{{$t("studentWeb.vote.voteRes")}}</span>
+                        </Button>
+                    </div>
+                    <!-- 投票内容 -->
+                    <!-- <div class="question-box">
+                        <span v-html="voteInfo.description"></span>
+                    </div> -->
+                    <div class="vote-option">
+                        <!-- 1票
+                        <RadioGroup v-model="voteChecked" v-if="voteInfo.voteNum == 1" class="option-group">
+                            <Radio :label="item.code" v-for="(item, index) in voteInfo.options" :key="index" class="option-wrapper">
+                                <span v-html="item.value"></span>
+                            </Radio>
+                        </RadioGroup>
+                        多票  不重复
+                        <CheckboxGroup v-model="voteChecked" v-if="voteInfo.voteNum > 1 && !voteInfo.repeat" class="option-group">
+                            <Checkbox :label="item.code" v-for="(item, index) in voteInfo.options" :key="index" class="option-wrapper">
+                                <span v-html="item.value"></span>
+                            </Checkbox>
+                        </CheckboxGroup>
+                        多票  重复
+                        <CheckboxGroup v-model="voteChecked" v-if="voteInfo.voteNum > 1 && voteInfo.repeat" class="option-group option-repeat">
+                            <Checkbox :label="item.code" v-for="(item, index) in voteInfo.options" :key="index" class="option-wrapper">
                                 <InputNumber v-model="item.count"
-                                             :formatter="value => `${value}` +$t('studentWeb.vote.tickets')"
-                                             :parser="value => value.replace($t('studentWeb.vote.tickets'), '')"
-                                             :min="0"
-                                             v-if="voteInfo.repeat"
-                                             @on-change="setVoteNum(item)"
-                                             :disabled="!voteStatus">
-                                </InputNumber>
-                            </div>
-                        </label>
+                                            :min="0"
+                                            size="small"
+                                            :formatter="value => `${value}` +$t('studentWeb.vote.tickets')"
+                                ></InputNumber>
+                                <span v-html="item.value"></span>
+                            </Checkbox>
+                        </CheckboxGroup> -->
+                        <div class="checkAnswer" v-for="(item, index) in voteInfo.options" :key="index">  
+                            <label class="testBtn">
+                                <input type="checkbox" :value="item" v-model="voteChecked" @click="getVote(item)" />
+                                <div class="testbg">
+                                    <div class="vote-info">
+                                        <span style="display:flex;margin-right:5px">{{item.code}}.<span v-html="item.value"></span></span>
+                                    </div>
+                                    <InputNumber v-model="item.count"
+                                                :formatter="value => `${value}` +$t('studentWeb.vote.tickets')"
+                                                :parser="value => value.replace($t('studentWeb.vote.tickets'), '')"
+                                                :min="0"
+                                                v-if="voteInfo.repeat"
+                                                @on-change="setVoteNum(item)"
+                                                :disabled="!voteStatus">
+                                    </InputNumber>
+                                </div>
+                            </label>
+                        </div>
                     </div>
-                </div>
-                <Button :disabled="!isVote" size="large" type="success" @click="submitMessage()">
-                    <svg-icon icon-class="vote" class="uploadBtn-icon" />
-                    <span style="margin-left:5px">{{ $t("studentWeb.vote.submitBVote") }}</span>
-                </Button>
-                <span class="clickbutnoChoosehint"
-                      v-if="clickbutnoChoose == true && voteChecked == ''">{{ $t("studentWeb.vote.note") }}</span>
-                <span v-if="isOverCount" style="margin-top:5px;margin-left:15px;color:red">{{$t("studentWeb.vote.warning2")}}</span>
+                    <Button :disabled="!isVote" size="large" type="success" @click="submitMessage()">
+                        <svg-icon icon-class="vote" class="uploadBtn-icon" />
+                        <span style="margin-left:5px">{{ $t("studentWeb.vote.submitBVote") }}</span>
+                    </Button>
+                    <span class="clickbutnoChoosehint"
+                        v-if="clickbutnoChoose == true && voteChecked == ''">{{ $t("studentWeb.vote.note") }}</span>
+                    <span v-if="isOverCount" style="margin-top:5px;margin-left:15px;color:red">{{$t("studentWeb.vote.warning2")}}</span>
 
-            </div>
-        </div>
-        <!-- 投票结果 -->
-        <div class="voteResults" v-if="showResult">
-            <h3 class="voteResultsMainRow ">
-                {{ $t("studentWeb.vote.voteResult") }}
-            </h3>
-            <div class="question-box">
-                <span style="display:block;width:90%" v-html="voteInfo.description"></span>
-                <Button style="float:right;margin-top:0px" size="small" type="success" @click="showRes">
-                    <span style="margin-left:5px">{{$t("studentWeb.vote.voteRecord")}}</span>
-                </Button>
-            </div>
-            <div v-for="(item,index) in voteInfo.options" :key="index">
-                <div class="voteResultsItem">
-                    <p style="display:flex">{{ item.code }}.<span v-html="item.value"></span></p>
                 </div>
             </div>
-            <div align="center">
-                <VoteResultChart :voteData="voteData" :voteList="voteList" />
+            <!-- 投票结果 -->
+            <div class="voteResults" v-if="showResult">
+                <h3 class="voteResultsMainRow ">
+                    {{ $t("studentWeb.vote.voteResult") }}
+                </h3>
+                <div class="question-box">
+                    <span style="display:block;width:90%" v-html="voteInfo.description"></span>
+                    <Button style="float:right;margin-top:0px" size="small" type="success" @click="showRes">
+                        <span style="margin-left:5px">{{$t("studentWeb.vote.voteRecord")}}</span>
+                    </Button>
+                </div>
+                <div v-for="(item,index) in voteInfo.options" :key="index">
+                    <div class="voteResultsItem">
+                        <p style="display:flex">{{ item.code }}.<span v-html="item.value"></span></p>
+                    </div>
+                </div>
+                <div align="center">
+                    <VoteResultChart :voteData="voteData" :voteList="voteList" />
+                </div>
             </div>
         </div>
     </div>
@@ -195,7 +197,15 @@
                     this.$api.studentWeb.getVoteInfo(params).then(res => {
                         if (res) {
                             if(res.status == 404) {
-                                this.delActivity()
+                                this.isLoad = false
+                                this.$Modal.confirm({
+                                    title: "投票已被删除,是否删除此条记录?",
+                                    okText: "删除",
+                                    cancelText: "取消",
+                                    onOk: () => {
+                                        this.delActivity()
+                                    }
+                                })
                             } else if(res.status == 200) {
                                 this.showResult = false
                                 this.isResult = false

+ 28 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js

@@ -214,6 +214,9 @@ export default{
 
     mark:{
         markNum:'阅卷次数',
+        markNum1:'单评制',
+        markNum2:'双评制',
+        markNum3:'三评制',
         markRole:'阅卷角色',
         errRole:'异常处理',
         arb:'仲裁教师',
@@ -257,6 +260,31 @@ export default{
         action:'操作',
         addTeaTitle:'添加阅卷老师',
         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:'考试名称:',

+ 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:'个人',

+ 28 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/learnActivity.js

@@ -214,6 +214,9 @@ export default{
 
     mark:{
         markNum:'阅卷次数',
+        markNum1:'单评制',
+        markNum2:'双评制',
+        markNum3:'三评制',
         markRole:'阅卷角色',
         errRole:'异常处理',
         arb:'仲裁教师',
@@ -257,6 +260,31 @@ export default{
         action:'操作',
         addTeaTitle:'添加阅卷老师',
         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:'考试名称:',

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

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

+ 3 - 3
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':'检视学生账号',

+ 28 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js

@@ -214,6 +214,9 @@ export default {
 
     mark: {
         markNum: '閱卷次數',
+        markNum1:'單評制',
+        markNum2:'雙評制',
+        markNum3:'三評制',
         markRole: '閱卷職務',
         errRole: '異常處理:',
         arb: '仲裁教師:',
@@ -257,6 +260,31 @@ export default {
         action: '操作',
         addTeaTitle: '增加閱卷老師',
         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:'考試名稱:',

+ 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 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/system.js

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

+ 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 - 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/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!')
                 }
 
             },

+ 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>

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

@@ -30,6 +30,14 @@ export default {
         drawImgData: {
             // type: [String, Object],
             default: ''
+        },
+        x:{
+            type:Number,
+            default:600
+        },
+        y:{
+            type:Number,
+            default:240
         }
     },
     data() {
@@ -580,8 +588,8 @@ export default {
         _this.stage = new Konva.Stage({
             container: 'container',
             id: 'canvas',
-            width: 600,
-            height: 240
+            width: this.x,
+            height: this.y
         })
         _this.orgLayer = new Konva.Layer()
         _this.markLayer = new Konva.Layer()

+ 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">

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1097 - 1110
TEAMModelOS/ClientApp/src/view/teachermgmt/components/userList/Index.vue