Sfoglia il codice sorgente

Merge branch 'develop3.0-tmd' of http://106.12.23.251:10080/TEAMMODEL/TEAMModelOS into develop3.0-tmd

OnePsycho 4 anni fa
parent
commit
3152c1fbfe
24 ha cambiato i file con 565 aggiunte e 819 eliminazioni
  1. 44 0
      TEAMModelOS.SDK/Models/Cosmos/Common/JoinList.cs
  2. 1 1
      TEAMModelOS/ClientApp/src/common/BaseLayout.vue
  3. 5 6
      TEAMModelOS/ClientApp/src/common/ImportExcel.vue
  4. 0 408
      TEAMModelOS/ClientApp/src/common/NewUploadFile.vue
  5. 2 2
      TEAMModelOS/ClientApp/src/common/UploadFile.vue
  6. 1 1
      TEAMModelOS/ClientApp/src/common/VideoPlayer2.vue
  7. 204 198
      TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js
  8. 152 87
      TEAMModelOS/ClientApp/src/locale/lang/en-US/schoolBaseInfo.js
  9. 13 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/system.js
  10. 8 2
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/learnActivity.js
  11. 80 79
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/schoolBaseInfo.js
  12. 13 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/system.js
  13. 8 2
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js
  14. 2 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/schoolBaseInfo.js
  15. 13 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/system.js
  16. 0 2
      TEAMModelOS/ClientApp/src/view/learnactivity/CreateSchoolEva.vue
  17. 4 4
      TEAMModelOS/ClientApp/src/view/learnactivity/PaperScore.vue
  18. 5 4
      TEAMModelOS/ClientApp/src/view/learnactivity/PrivScoring.vue
  19. 2 3
      TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.vue
  20. 3 4
      TEAMModelOS/ClientApp/src/view/learnactivity/echarts/AvgCompare.vue
  21. 2 3
      TEAMModelOS/ClientApp/src/view/learnactivity/echarts/ScoreMatrix.vue
  22. 1 2
      TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue
  23. 0 1
      TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue
  24. 2 4
      TEAMModelOS/ClientApp/src/view/schoolmgmt/ClassroomSetting/ClassroomSetting.vue

+ 44 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/JoinList.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace TEAMModelOS.SDK.Models.Cosmos.Common
+{
+
+    /*
+     * {
+            "id": "28936",
+            "code": "JoinList-hbcn",
+            "school": [
+                "schoolClassid1"
+            ],
+            "teacher": [
+                "stulistGUID"
+            ]
+        },
+        {
+            "id": "tmdid",
+            "code": "JoinList-tmdid",
+            "school": [
+                "schoolClassid1"
+            ],
+            "teacher": [
+                "schoolClassid1"
+            ]
+        }
+     */
+
+    /// <summary>
+    /// 学生已经加入的名单列表
+    /// 分学校创建的学生名单和教师创建的私人名单
+    /// </summary>
+    public class JoinList : CosmosEntity
+    {
+        public JoinList()
+        {
+            pk = "JoinList";
+        }
+        public List<string> school { get; set; } = new List<string>();
+        public List<string> teacher { get; set; } = new List<string>();
+    }
+}

+ 1 - 1
TEAMModelOS/ClientApp/src/common/BaseLayout.vue

@@ -120,7 +120,7 @@ export default {
                         // },
                         {
                             icon: 'iconfont icon-kecheng',
-                            name: '课程管理',
+                            name: this.$t('system.menu.cusMgt'),
                             router: '/home/NewCusMgt',
                             tag: '',
                             role: 'admin',

+ 5 - 6
TEAMModelOS/ClientApp/src/common/ImportExcel.vue

@@ -11,9 +11,9 @@
                     <p>{{(row.password == '' || row.password == null)? '— —' : row.password.value+''}}</p>
                 </template>
                 <template slot-scope="{ row,index }" slot="status">
-                    <p :class="(repeatAccounts.length == 0 || repeatAccounts.indexOf(row.account) == -1) ? 'account-success-tips':'account-error-tips'">{{(repeatAccounts.length == 0 || repeatAccounts.indexOf(row.account) == -1)?"":"错误:账号重复!" }}</p>
-                    <p :class="(row.classroomCode == '' || row.classroomCode == null) ? 'account-warning-tips':''">{{(row.classroomCode == '' || row.classroomCode == null)?"警告 :未找到指定班级":"" }}</p>
-                    <p :class="row.seatRepeat? 'account-error-tips':''">{{row.seatRepeat ? "错误:座位号重复":"" }}</p>
+                    <p :class="(repeatAccounts.length == 0 || repeatAccounts.indexOf(row.account) == -1) ? 'account-success-tips':'account-error-tips'">{{(repeatAccounts.length == 0 || repeatAccounts.indexOf(row.account) == -1)?"":$t('system.compt.acRep') }}</p>
+                    <p :class="(row.classroomCode == '' || row.classroomCode == null) ? 'account-warning-tips':''">{{(row.classroomCode == '' || row.classroomCode == null) ? $t('system.compt.classErr'):"" }}</p>
+                    <p :class="row.seatRepeat? 'account-error-tips':''">{{row.seatRepeat ? $t('system.compt.setErr'):"" }}</p>
                 </template>
             </Table>
         </div>
@@ -78,7 +78,7 @@
                     this.showProgress = true
                 }
                 reader.onerror = e => {
-                    this.$Message.error('文件读取失败!')
+                    this.$Message.error(this.$t('system.compt.fileReadErr'))
                 }
                 reader.onload = e => {
                     const data = e.target.result
@@ -100,12 +100,11 @@
                     if (flag) {
                         // 处理表格导入数据类型
                         this.tableData = [...results]
-                        //this.$Message.info('文件读取成功')
                         this.tableLoading = false
                         this.$emit('getTableData', this.tableData)
                     } else {
                         this.$Message.error({
-                            content: '导入数据没有' + column + ',请完善表格数据再导入',
+                            content: this.$t('system.compt.tbColErr1') + column + this.$t('system.compt.tbColErr2'),
                             duration: 4
                         })
                         this.tableLoading = false

+ 0 - 408
TEAMModelOS/ClientApp/src/common/NewUploadFile.vue

@@ -1,408 +0,0 @@
-<template>
-    <div class="upload-file-box">
-        <Upload type="drag" action="" :show-upload-list="false" multiple :before-upload="customUpload" class="upload-wrap">
-            <Icon class="upload-icon" custom="iconfont icon-upload" v-show="!uploadedList.length" />
-            <p class="upload-text" :style="{marginTop: uploadedList.length ? '25px':'0px'}">
-                <Icon size="24" style="font-size: 22px;vertical-align: baseline;margin-right: 5px;" custom="iconfont icon-upload" v-show="uploadedList.length" />
-                {{$t('teachContent.uploadText')}}
-            </p>
-            <p class="upload-text" style="font-size:12px;">* 上传相同名字的文件会自动覆盖</p>
-            <p class="upload-text" :style="{fontSize:'12px',marginBottom: uploadedList.length ? '25px':'50px'}">
-                * 勾选
-                <Icon custom="iconfont icon-convert" size="12"  class="is-parse-htex"/>
-                支持PPTX文档转换成HTEX教材
-            </p>
-        </Upload>
-        <div class="upload-file-box">
-            <div class="upload-file-item" v-for="(item,index) in uploadedList" :key="index">
-                <div class="upload-item-left">
-                    <p class="upload-file-name">
-                        <span v-if="item.type == 'res'" class="file-type-tag" style="color: #1FFCC5;border-color: #1FFCC5">教材</span>
-                        <span v-else-if="item.type == 'image'" class="file-type-tag" style="color: #45C84A;border-color: #45C84A">图片</span>
-                        <span v-else-if="item.type == 'video'" class="file-type-tag" style="color: #8E2BDD;border-color: #8E2BDD">视频</span>
-                        <span v-else-if="item.type == 'audio'" class="file-type-tag" style="color: #E1027B;border-color: #E1027B">音频</span>
-                        <span v-else-if="item.type == 'doc'" class="file-type-tag" style="color: #03C0C2;border-color: #03C0C2">{{item.isParse ? '转换':'文档'}}</span>
-                        <span v-else class="file-type-tag" style="color: #E87B22; border-color: #E87B22">其他</span>
-                        <span>{{item.name}}</span>
-                    </p>
-                    <span class="upload-info-wrap" style="color:white;">
-                        {{parseInt(item.loadedBytes * 100 / item.size)+'%'}}
-                    </span>
-                    <span class="upload-info-wrap">
-                        {{getSizeByBytes(item.loadedBytes)+'/'+getSizeByBytes(item.size)}}
-                    </span>
-                    <span v-if="item.extension == 'PPTX'" class="upload-info-wrap parse-label" @click="item.isParse = !item.isParse" :style="{color:item.isParse ? '#1cc0f3':'#808080'}">
-                        <Icon class="is-parse-htex" size="12" custom="iconfont icon-convert" />
-                        转成HTEX教材
-                    </span>
-                    <Progress style="top:-10px;" v-if="item.status == 0" :percent="item.loadedBytes * 100 / item.size" status="active" stroke-color="#1CC0F3" :stroke-width="2" hide-info />
-                </div>
-                <div class="upload-item-right">
-                    <Icon type="ios-close" class="delete-btn" color="red" size="30" style="float:right;" @click="deleteFile(index)" />
-                </div>
-            </div>
-        </div>
-    </div>
-</template>
-<script>
-import '@/icons/svg/loading3.svg';
-import BlobTool from '@/utils/blobTool.js';
-export default {
-    data() {
-        return {
-            uploadedList: [],
-            containerClient: null,
-            routerScope: ''
-        }
-    },
-    props: {
-        //默认文件列表
-        defaultFileList: {
-            default: () => {
-                return []
-            },
-            type: Array
-        },
-        //文件路径
-        path: {
-            default: '',
-            type: String,
-            required: true
-        },
-        //授权信息
-        sasString: {
-            default: '',
-            type: String,
-            required: true
-        },
-        //blob链接
-        urlString: {
-            default: '',
-            type: String,
-            required: true
-        },
-        //容器名称
-        containerName: {
-            default: '',
-            type: String,
-            required: true
-        },
-        //文件大小限制
-        maxSize: {
-            default: 2 * 1024 * 1024 * 1024,
-            type: Number
-        },
-        //文件格式限制
-        format: {
-            default: () => {
-                return []
-            },
-            type: Array
-        }
-    },
-    methods: {
-        //删除文件
-        deleteFile(index) {
-            this.containerClient.deleteBlob(this.uploadedList[index].blob).then(
-                res => {
-                    //删除缩略图和封面
-                    if (this.uploadedList[index].type == 'image') {
-                        let thum = this.uploadedList[index].blob.replace('/image/', '/thum/')
-                        this.containerClient.deleteBlob(thum)
-                    } else if (this.uploadedList[index].type == 'video') {
-                        let thum = this.uploadedList[index].blob.replace('/video/', '/thum/')
-                        thum = thum.slice(0, thum.lastIndexOf('.')) + '.png'
-                        this.containerClient.deleteBlob(thum)
-                    }
-                    this.$emit('deleteFile', this._.cloneDeep(this.uploadedList[index]))
-                    this.uploadedList.splice(index, 1)
-                    this.$Message.success('删除成功!')
-                },
-                err => {
-                    this.$Message.error('删除失败!')
-                }
-            )
-        },
-        getFileType(fileName) {
-            let extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length)
-            extension = extension.toUpperCase()
-            for (let key in this.$GLOBAL.CONTENT_TYPES) {
-                if (this.$GLOBAL.CONTENT_TYPES[key].indexOf(extension) != -1) {
-                    return key
-                }
-            }
-            return 'other'
-        },
-        getSizeByBytes(bytes) {
-            return bytes / 1024 < 1024 ? (bytes / 1024).toFixed(1) + 'KB' : bytes / 1024 / 1024 < 1024 ? (bytes / 1024 / 1024).toFixed(1) + 'M' : (bytes / 1024 / 1024 / 1024).toFixed(1) + 'G'
-        },
-        async customUpload(file) {
-            if (file.size > this.maxSize) {
-                this.$Message.error({
-                    content: "文件大小超出限制",
-                    duration: 3
-                })
-                return false
-            }
-
-            let extension = file.name.substring(file.name.lastIndexOf('.') + 1, file.name.length)
-            if (this.format.length > 0 && this.format.indexOf(extension) == -1) {
-                this.$Message.error({
-                    content: "文件类型不支持",
-                    duration: 3
-                })
-                return false
-            }
-
-            let fileType = this.getFileType(file.name)
-            //上传文件
-            let fileInfo = {
-                url: this.urlString + '/' + this.containerName + '/' + fileType + '/' + file.name,
-                name: file.name,
-                size: file.size,
-                loadedBytes: 0,
-                progress: 0,
-                status: 0,
-                type: fileType,
-                file: file,
-                extension: extension.toUpperCase(),
-                isParse: false
-            }
-            this.uploadedList.push(fileInfo)
-            let _this = this
-            let index = this.uploadedList.length - 1
-            // this.containerClient.upload(file, fileType, {
-            //     onProgress: function (e) {
-            //         _this.uploadedList[index].loadedBytes = e.loadedBytes
-            //         _this.uploadedList[index].progress = parseInt(e.loadedBytes * 100 / file.size)
-            //     }
-            // }).then(
-            //     res => {
-            //         this.uploadedList[index].status = 1
-            //         this.uploadedList[index].blob = res.blob
-            //         extension = extension.toUpperCase()
-            //         if (res.type == 'image') {
-            //             this.uploadThum(file)
-            //             this.$emit('successData', res)
-            //         } else if (res.type == 'video') {
-            //             this.uploadPoater(res)
-            //             this.$emit('successData', res)
-            //         } else if (extension == 'PPTX') {
-            //             this.$Modal.confirm({
-            //                 title: '文件解析',
-            //                 okText: '是',
-            //                 cancelText: '否',
-            //                 content: `<p>是否将<strong style='color:red;'>${file.name}</strong>转成HTEX文件?</p>`,
-            //                 onOk: () => {
-            //                     this.$emit('parsing')
-            //                     this.$emit('successData', res)
-            //                     let delBlob = res.blob
-            //                     this.$api.teachContent.ParseDoc({
-            //                         file: res.url,
-            //                         scope: this.routerScope
-            //                     }).then(
-            //                         parseRes => {
-            //                             this.containerClient.deleteBlob(delBlob)
-            //                             res.blob = `/res/${res.name}/index.json`
-            //                             res.extension = 'HTEX'
-            //                             res.name = res.name.replace('pptx', 'HTEX').replace('PPTX', 'HTEX')
-            //                             res.type = 'res'
-
-            //                             this.$emit('parseComplete')
-            //                             this.$Message.success('解析成功')
-            //                         },
-            //                         parseErr => {
-            //                             this.$Message.error('解析失败')
-            //                         }
-            //                     )
-            //                 },
-            //                 onCancel: () => {
-            //                     this.$emit('successData', res)
-            //                 }
-            //             })
-            //         } else if (extension == 'HTEX') {
-            //             let delBlob = res.blob
-            //             this.$emit('parsing')
-            //             res.blob = `/res/${res.name}/index.json`
-            //             this.$emit('successData', res)
-            //             this.$api.teachContent.ParseDoc({
-            //                 file: res.url,
-            //                 scope: this.routerScope
-            //             }).then(
-            //                 parseRes => {
-            //                     this.containerClient.deleteBlob(delBlob)
-            //                 },
-            //                 parseErr => {
-            //                     this.$Message.error('上传失败')
-            //                     this.containerClient.deleteBlob(delBlob)
-            //                 }
-            //             ).finally(() => {
-            //                 this.$emit('parseComplete')
-            //             })
-            //         }
-            //     },
-            //     err => {
-            //         this.uploadedList[index].status = 2
-            //         if (err.spaceError) {
-            //             this.$Message.error(err.spaceError)
-            //         } else {
-            //             this.$Message.error("上传失败")
-            //         }
-            //     }
-            // )
-            return false
-        },
-        //处理图片缩略图
-        async uploadThum(file) {
-            let dataUrl = await this.$jsFn.fileToURL(file)
-            dataUrl = await this.$jsFn.compressImgByUrl(dataUrl, file.name, 0.1)
-            let f = this.$jsFn.dataURLtoFile(dataUrl, file.name)
-            this.containerClient.upload(f, 'thum').then(
-                res => {
-                    console.log('压缩图上传成功')
-                },
-                err => {
-                    console.log('压缩图上传失败')
-                }
-            )
-        },
-        //处理视频封面
-        async uploadPoater(file) {
-            let n = file.name.substring(0, file.name.lastIndexOf('.'))
-            console.log(n)
-            console.log('视频蜂蜜昂')
-            let dataUrl = await this.$jsFn.createVideoPoster(file.url + this.sasString, file.name, 0.1)
-            let f = this.$jsFn.dataURLtoFile(dataUrl, n + '.png')
-            console.log(f)
-            this.containerClient.upload(f, 'thum').then(
-                res => {
-                    console.log('视频封面上传成功')
-                },
-                err => {
-                    console.log('视频封面上传失败')
-                }
-            )
-        }
-    },
-    created() {
-        let route = this.$route
-        if (route.name == 'personalcontent') {
-            this.routerScope = 'private'
-        } else {
-            this.routerScope = 'school'
-        }
-    },
-    watch: {
-        urlString: {
-            handler(v, o) {
-                if (this.urlString && this.containerName && this.sasString) {
-                    let scope = ''
-                    if (this.containerName == this.$store.state.userInfo.TEAMModelId) {
-                        scope = 'private'
-                    } else if (this.containerName == this.$store.state.userInfo.schoolCode) {
-                        scope = 'school'
-                    }
-                    //初始化Blob
-                    this.containerClient = new BlobTool(this.urlString, this.containerName, this.sasString, scope)
-                }
-            }
-        },
-        containerName: {
-            handler(v, o) {
-                if (this.urlString && this.containerName && this.sasString) {
-                    let scope = ''
-                    if (this.containerName == this.$store.state.userInfo.TEAMModelId) {
-                        scope = 'private'
-                    } else if (this.containerName == this.$store.state.userInfo.schoolCode) {
-                        scope = 'school'
-                    }
-                    //初始化Blob
-                    this.containerClient = new BlobTool(this.urlString, this.containerName, this.sasString, scope)
-                }
-            }
-        },
-        sasString: {
-            handler(v, o) {
-                if (this.urlString && this.containerName && this.sasString) {
-                    let scope = ''
-                    if (this.containerName == this.$store.state.userInfo.TEAMModelId) {
-                        scope = 'private'
-                    } else if (this.containerName == this.$store.state.userInfo.schoolCode) {
-                        scope = 'school'
-                    }
-                    //初始化Blob
-                    this.containerClient = new BlobTool(this.urlString, this.containerName, this.sasString, scope)
-                }
-            }
-        }
-    }
-}
-
-</script>
-<style scoped>
-.upload-text {
-    margin: 10px 0px;
-    font-size: 24px;
-}
-.upload-icon {
-    font-size: 50px;
-    margin-top: 60px;
-}
-.upload-file-item {
-    color: #909090;
-    margin-top: 5px;
-    padding: 5px 2px 0px 5px;
-    display: flex;
-}
-.upload-item-left {
-    width: calc(100% - 25px);
-}
-.upload-item-right {
-    width: 25px;
-}
-.upload-info-wrap {
-    float: right;
-    margin-left: 10px;
-    vertical-align: middle;
-    /* color: white; */
-    line-height: 30px;
-}
-
-.upload-file-item:hover {
-    /* color: white; */
-    /* background: #585858; */
-    border-radius: 5px;
-}
-
-.upload-file-item:hover .delete-btn {
-    display: inline-block;
-}
-.upload-loading-icon {
-    vertical-align: middle;
-}
-.upload-file-name {
-    display: inline-block;
-    color: #eeeeee;
-    line-height: 30px;
-}
-
-.delete-btn {
-    display: none;
-}
-.file-type-tag {
-    border: 1px solid;
-    /*border-color:white;*/
-    border-radius: 2px;
-    padding: 0px 4px;
-    margin-right: 5px;
-    font-size: 12px;
-}
-.parse-label {
-    cursor: pointer;
-    font-size: 12px;
-    user-select: none;
-}
-.is-parse-htex {
-    vertical-align: baseline;
-}
-</style>

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

@@ -236,7 +236,7 @@
                 let url = file.name
                 if (file.size > this.maxSize) {
                     this.$Message.error({
-                        content: "文件大小超出限制",
+                        content: this.$t('system.compt.sizeErr'),
                         duration: 3
                     })
                     return false
@@ -245,7 +245,7 @@
                 let extension = file.name.substring(file.name.lastIndexOf('.') + 1, file.name.length)
                 if (this.format.length > 0 && this.format.indexOf(extension) == -1) {
                     this.$Message.error({
-                        content: "文件类型不支持",
+                        content: this.$t('system.compt.typeErr'),
                         duration: 3
                     })
                     return false

+ 1 - 1
TEAMModelOS/ClientApp/src/common/VideoPlayer2.vue

@@ -60,7 +60,7 @@
                         "font-size": "16px",
                     },
                     text: function (marker) {
-                        return "课件 " + marker.text;
+                        return this.$t('system.compt.cusWare') + marker.text;
                     },
                 },
                 markerTip: {

+ 204 - 198
TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js

@@ -1,201 +1,207 @@
-export default {
-    //MgtSchoolEva.vue
-    mgtScEv:{
-        listLabel:'评测列表',
-        period:'学段:',
-        create:'新建',
-        delete:'删除',
-        edit:'编辑',
-        createTime:'施测时间:',
-        pending:'待发布',
-        going:'进行中',
-        finish:'已结束',
-        endTime:'结束时间:',
-        stop:'立即结束',
-        evType:'测试类型:',
-        stuCount:'施测人数:',
-        nodata:'暂无评测',
-        tab1:'评测数据',
-        tab2:'评测试卷',
-        autoTips1:'此功能仅用于展示情景快速模拟学生作答数据,且学生作答为随机生成,仅供参考!',
-        autoTips2:'此功能仅用于展示情景快速模拟教师评分数据,且分数为随机生成,仅供参考!',
-        autoScore:'一键评分',
-        autoAnswer:'一键作答',
-        evSubject:'测试科目:',
-        returnTop:'返回顶部',
-        mockOk:'模拟成功',
-        mockErr:'模拟失败',
-        stopTitle:'结束评测',
-        stopContent:'结束后学生将不能继续作答,是否立即结束',
-        stopOk:'评测已结束!',
-        deleteTitle:'删除评测',
-        deleteContent:'是否确认删除',
-        deleteOk:'删除成功',
-        deleteErr:'删除失败',
-        noJoin:'此账号暂未加入任何学校!',
-        myEv:'我发布的评测',
-        teaEv:'任课老师发布的评测'
-    },
+export default{
+  //MgtSchoolEva.vue
+  mgtScEv:{
+      listLabel:'评测列表',
+      period:'学段:',
+      create:'新建',
+      delete:'删除',
+      edit:'编辑',
+      createTime:'施测时间:',
+      pending:'待发布',
+      going:'进行中',
+      finish:'已结束',
+      endTime:'结束时间:',
+      stop:'立即结束',
+      evType:'测试类型:',
+      stuCount:'施测人数:',
+      nodata:'暂无评测',
+      tab1:'评测数据',
+      tab2:'评测试卷',
+      autoTips1:'此功能仅用于展示情景快速模拟学生作答数据,且学生作答为随机生成,仅供参考!',
+      autoTips2:'此功能仅用于展示情景快速模拟教师评分数据,且分数为随机生成,仅供参考!',
+      autoScore:'一键评分',
+      autoAnswer:'一键作答',
+      evSubject:'测试科目:',
+      returnTop:'返回顶部',
+      mockOk:'模拟成功',
+      mockErr:'模拟失败',
+      stopTitle:'结束评测',
+      stopContent:'结束后学生将不能继续作答,是否立即结束',
+      stopOk:'评测已结束!',
+      deleteTitle:'删除评测',
+      deleteContent:'是否确认删除',
+      deleteOk:'删除成功',
+      deleteErr:'删除失败',
+      noJoin:'此账号暂未加入任何学校!',
+      myEv:'我发布的评测',
+      teaEv:'任课老师发布的评测'
+  },
 
-    //创建评测校本/个人
-    createEv:{
-        createLabel:'创建评测',
-        publishEv:'发布评测',
-        return:'返回上级',
-        baseInfo:'基础信息',
-        evName:'评测名称',
-        evPeriod:'测试学段',
-        evMode:'评测模式',
-        evType:'评测类型',
-        examType:'考试类别',
-        courseType:'课程类别',
-        cusLabel1:'校本课程',
-        cusLabel2:'个人课程',
-        evTarget:'施测对象',
-        publishType:'发布方式',
-        startTime:'开始时间',
-        sTimeHolder:'请选择开始时间',
-        endTime:'结束时间',
-        eTimeHolder:'请选择结束时间',
-        addSubject:'添加学科',
-        noSubject:'暂无科目,请添加科目',
-        noSubject1:'* 请先选择测试学段',
-        papersLabel:'试卷库',
-        perviewLabel:'试卷预览',
-        importLabel:'导入说明',
-        answerPreview:'作答预览',
-        errTips1:'评测名称不能为空!',
-        errTips2:'测试类型不能为空!',
-        errTips3:'评量模式不能为空!',
-        errTips4:'请设置类别!',
-        errTips5:'请设置测试类型!',
-        errTips6:'请设置测试对象!',
-        errTips7:'请设置发布方式!',
-        errTips8:'请设置发布时间!',
-        errTips9:'请设置结束时间!',
-        errTips10:'请设置测试学段!',
-        stPaperTitle:'挑选试卷',
-        stPaperContent:'是否确认挑选',
-        inDev:'功能正在开发中,敬请期待!',
-        formWarning:'请先完善评测基础信息!',
-        paperWarning:'请挑选或导入试卷!',
-        paperWarning1:'还没有试卷,请挑选或导入试卷!',
-        pdWarning:'请添加测试科目!',
-        publishOk:'评测发布成功!',
-        togglePeriod:'切换学段',
-        togglePdTip1:'您已添加',
-        togglePdTip2:'的测试科目,如果现在切换学段会清空已选科目,确定切换学段吗?',
-        toggleOkText:'切换',
-        delPdTitle:'删除科目',
-        delPdContent:'是否确认删除',
-        delOk:'删除成功',
-        pdTips:'请先选择测试学段!',
-        defaultPaper:'(请先挑选或导入试卷)',
-    },
-    // ManualPaper.vue
-    manual:{
-        source:'来源:',
-        sourceP:'个人试卷库',
-        sourceS:'校本试卷库',
-        pdLabel:'学段:',
-        subjectLabel:'学科:',
-        gradeLabel:'年级:',
-        fitPd:'适用学段:',
-        fitSubject:'适用科目:',
-        quCount:'题量:',
-        useCount:'使用次数:',
-        stdPaper:'已选试卷',
-        stPaper:'选择试卷',
-        previewPaper:'预览试卷',
-        noPaper:'暂无对应的试卷',
-        noPaper1:'暂无试卷'
-    },
-    // PaperScore.vue、Scoring.vue
-    score:{
-        stuName:'学生姓名:',
-        score:'总分:',
-        scoreUnit:'分',
-        saveScore:'保存打分',
-        showAns:'显示答案',
-        hideAns:'隐藏答案',
-        showQu:'显示题干',
-        hideQu:'隐藏题干',
-        quIndex:'题号:',
-        quIndex1:'题号',
-        fullScore:'满分',
-        zeroScore:'零分',
-        zeroScore1:'0分',
-        stuAns:'【学 生 作 答】',
-        mark:'批注',
-        quAns:'【答ㅤ案】',
-        noAnswer:'未设置答案',
-        anaLabel:'【解ㅤ析】',
-        noAna:'暂无解析',
-        kdLabel:'【知识点】',
-        noKd:'暂未绑定知识点',
-        sQuLabel1:'【小题',
-        sQuLabel2:'】',
-        quIndexLabel:'【题号',
-        nextStu:'下一位学生>>>',
-        markOk:'批注成功!',
-        markErr:'批注失败!',
-        isFullTips:'已经是小题满分了',
-        isZeroTips:'已经是零分了',
-        saveScoreOk:'成绩保存成功!',
-        saveSocreErr:'成绩保存失败!',
-        zero:'零',
-        one:'一',
-        two:'二',
-        three:'三',
-        four:'四',
-        five:'五',
-        six:'六',
-        seven:'七',
-        eight:'八',
-        nine:'九',
-        ten:'十',
-        hundred:'百',
-        thousand:'千',
-        tenThd:'万',
-        hMillion:'亿',
-        noStuAns:'未作答',
-        noStuAns1:'暂未作答',
-        trueAns:'正确',
-        falseAns:'错误',
-        //Scoring.vue
-        subjectLabel:'学科:',
-        gradeLabel:'年级:',
-        classLabel:'班级:',
-        stuLabel:'学生:',
-        scoreView:'分数概览',
-        scoring:'试卷评分',
-        classNoStu:'班级暂无学生',
-        status1:'暂未作答',
-        status2:'前往评分',
-        status3:'查看分数',
-        column1:'姓名',
-        column2:'总分',
-        column3:'状态',
-        finishScore:'已完成所有学生作答的评分!',
-        unableScore:'学生尚未作答,无法评分',
-        stStuWarning:'请先选择学生!'
-    },
+  //CreateEv
+  createEv:{
+      createLabel:'创建评测',
+      publishEv:'发布评测',
+      return:'返回上级',
+      baseInfo:'基础信息',
+      evName:'评测名称',
+      evPeriod:'测试学段',
+      evMode:'评测模式',
+      evType:'评测类型',
+      examType:'考试类别',
+      courseType:'课程类别',
+      cusLabel1:'校本课程',
+      cusLabel2:'个人课程',
+      evTarget:'施测对象',
+      publishType:'发布方式',
+      startTime:'开始时间',
+      sTimeHolder:'请选择开始时间',
+      endTime:'结束时间',
+      eTimeHolder:'请选择结束时间',
+      addSubject:'添加学科',
+      noSubject:'暂无科目,请添加科目',
+      noSubject1:'* 请先选择测试学段',
+      papersLabel:'试卷库',
+      perviewLabel:'试卷预览',
+      importLabel:'导入说明',
+      answerPreview:'作答预览',
+      errTips1:'评测名称不能为空!',
+      errTips2:'测试类型不能为空!',
+      errTips3:'评量模式不能为空!',
+      errTips4:'请设置类别!',
+      errTips5:'请设置测试类型!',
+      errTips6:'请设置测试对象!',
+      errTips7:'请设置发布方式!',
+      errTips8:'请设置发布时间!',
+      errTips9:'请设置结束时间!',
+      errTips10:'请设置测试学段!',
+      stPaperTitle:'挑选试卷',
+      stPaperContent:'是否确认挑选',
+      inDev:'功能正在开发中,敬请期待!',
+      formWarning:'请先完善评测基础信息!',
+      paperWarning:'请挑选或导入试卷!',
+      paperWarning1:'还没有试卷,请挑选或导入试卷!',
+      pdWarning:'请添加测试科目!',
+      publishOk:'评测发布成功!',
+      togglePeriod:'切换学段',
+      togglePdTip1:'您已添加',
+      togglePdTip2:'的测试科目,如果现在切换学段会清空已选科目,确定切换学段吗?',
+      toggleOkText:'切换',
+      delPdTitle:'删除科目',
+      delPdContent:'是否确认删除',
+      delOk:'删除成功',
+      pdTips:'请先选择测试学段!',
+      defaultPaper:'(请先挑选或导入试卷)',
+  },
+  // ManualPaper.vue
+  manual:{
+      source:'来源:',
+      sourceP:'个人试卷库',
+      sourceS:'校本试卷库',
+      pdLabel:'学段:',
+      subjectLabel:'学科:',
+      gradeLabel:'年级:',
+      fitPd:'适用学段:',
+      fitSubject:'适用科目:',
+      quCount:'题量:',
+      useCount:'使用次数:',
+      stdPaper:'已选试卷',
+      stPaper:'选择试卷',
+      previewPaper:'预览试卷',
+      noPaper:'暂无对应的试卷',
+      noPaper1:'暂无试卷'
+  },
+  // PaperScore.vue、Scoring.vue
+  score:{
+      stuName:'学生姓名:',
+      score:'总分:',
+      scoreUnit:'分',
+      saveScore:'保存打分',
+      showAns:'显示答案',
+      hideAns:'隐藏答案',
+      showQu:'显示题干',
+      hideQu:'隐藏题干',
+      quIndex:'题号:',
+      quIndex1:'题号',
+      fullScore:'满分',
+      zeroScore:'零分',
+      zeroScore1:'0分',
+      stuAns:'【学 生 作 答】',
+      mark:'批注',
+      quAns:'【答ㅤ案】',
+      noAnswer:'未设置答案',
+      anaLabel:'【解ㅤ析】',
+      noAna:'暂无解析',
+      kdLabel:'【知识点】',
+      noKd:'暂未绑定知识点',
+      sQuLabel1:'【小题',
+      sQuLabel2:'】',
+      quIndexLabel:'【题号',
+      nextStu:'下一位学生>>>',
+      markOk:'批注成功!',
+      markErr:'批注失败!',
+      isFullTips:'已经是小题满分了',
+      isZeroTips:'已经是零分了',
+      saveScoreOk:'成绩保存成功!',
+      saveSocreErr:'成绩保存失败!',
+      zero:'零',
+      one:'一',
+      two:'二',
+      three:'三',
+      four:'四',
+      five:'五',
+      six:'六',
+      seven:'七',
+      eight:'八',
+      nine:'九',
+      ten:'十',
+      hundred:'百',
+      thousand:'千',
+      tenThd:'万',
+      hMillion:'亿',
+      noStuAns:'未作答',
+      noStuAns1:'暂未作答',
+      trueAns:'正确',
+      falseAns:'错误',
+      //Scoring.vue
+      subjectLabel:'学科:',
+      gradeLabel:'年级:',
+      classLabel:'班级:',
+      stuLabel:'学生:',
+      scoreView:'分数概览',
+      scoring:'试卷评分',
+      classNoStu:'班级暂无学生',
+      status1:'暂未作答',
+      status2:'前往评分',
+      status3:'查看分数',
+      column1:'姓名',
+      column2:'总分',
+      column3:'状态',
+      finishScore:'已完成所有学生作答的评分!',
+      unableScore:'学生尚未作答,无法评分',
+      stStuWarning: '请先选择学生!',
+      lastQu: '上一题',
+      nextQu: '下一题',
+  },
 
-    //SimpleAnalysis.vue
-    simple:{
-        total:'总人数',
-        missExam:'缺考数',
-        classLabel:'班级',
-        sjLabel:'学科',
-        avgScore:'平均分',
-        classStuCount:'班级人数',
-        answered:'已作答',
-        unanswer:'未作答',
-        scored:'已评分',
-        unscore:'未评分',
-        noPublish:'评测尚未发布,暂无统计数据',
-        calcing:'成绩数据结算中,',
-        clickFresh:'点此刷新',
-        inCalc:'数据结算中,请稍后查看'
-    }
+  //SimpleAnalysis.vue
+  simple:{
+      total:'总人数',
+      missExam:'缺考数',
+      classLabel:'班级',
+      sjLabel:'学科',
+      avgScore:'平均分',
+      classStuCount:'班级人数',
+      answered:'已作答',
+      unanswer:'未作答',
+      scored:'已评分',
+      unscore:'未评分',
+      noPublish:'评测尚未发布,暂无统计数据',
+      calcing:'成绩数据结算中,',
+      clickFresh:'点此刷新',
+      inCalc:'数据结算中,请稍后查看',
+      total:'总分',
+      avgScore:'均分统计',
+      totalLabel:'总量',
+      scoreMat:'分数段统计'
+  }
 }

+ 152 - 87
TEAMModelOS/ClientApp/src/locale/lang/en-US/schoolBaseInfo.js

@@ -1,100 +1,165 @@
 export default {
-  // Index.vue
-  createPeriod: 'establishing a school level system',
-  classroomSetting: 'classroom setting',
-
   // SystemSetting.vue
-  schoolNameLabel: 'school name setting:',
-  periodSettingLabel: 'school system establishment and setting',
-  order: 'sort by creation time',
-  semesterSetting: 'semester (quarter) setting',
-  gradeSetting: 'grade setting',
-  subjectSetting: 'subject setting',
-  semesterNum: 'semesters:',
-  gradeNum: 'grade number:',
-  periodNum: 'number of subjects:',
-  startDate: 'from',
-  semesterDuration: 'semester duration:',
-  dayUnit: 'day',
-  saveInfo: 'save changes',
-  noSemester: 'semester not set',
-  editLabel: 'Edit',
-  monthHolder: 'month',
-  dayHolder: 'day',
-  delete: 'delete',
-  ssTips1: 'click to set the name',
-  ssTips2: 'at least one item needs to be reserved! ',
-  ssTips3: 'saving / modifying information succeeded! ',
-  ssTips4: 'the same name already exists, please reset it! ',
-  ssTips5: 'the number of subjects has reached the maximum! ',
-  ssTips6: 'the number of grades has reached the upper limit! ',
-  ssTips7: 'the maximum number of semesters has been reached! ',
-  ssTips8: 'you have not saved the modified information. If you leave, the data will be lost!',
-  presetPeriod: 'preset period',
-  persetSemester: 'Default semester',
-  persetGrade: 'default grade',
-  presetGrade1: 'first year',
-  presetGrade2: 'second year',
-  presetGrade3: 'third grade',
-  presetSubject: 'preset subject',
-  presetSubject1: 'chinese',
-  presetSubject2: 'Mathematics',
-  presetSubject3: 'English',
+  schoolNameLabel: '学校名称:',
+  periodSettingLabel: '学制设置',
+  order: '依建立时间排序',
+  semesterSetting: '学期(季)设置',
+  gradeSetting: '年级设置',
+  subjectSetting: '学科设置',
+  semesterNum: '学期数:',
+  gradeNum: '年级数:',
+  periodNum: '科目数:',
+  startDate: '开始于',
+  semesterDuration: '学期时长:',
+  dayUnit: '天',
+  saveInfo: '存储变更',
+  noSemester: '没有设置学期',
+  editLabel: '编辑',
+  monthHolder: '月',
+  dayHolder: '日',
+  delete: '删除',
+  ssTips1: '点击设置名称',
+  ssTips2: '至少需要保留一项!',
+  ssTips3: '保存/修改 信息成功!',
+  ssTips4: '已有相同的名字,请重新设置名字!',
+  ssTips5: '学科数已达上限!',
+  ssTips6: '年级数已达上限!',
+  ssTips7: '学期数已达上限!',
+  ssTips8: '您修改信息后还未保存,如果离开数据将会丢失!',
+  presetPeriod: '学段',
+  persetSemester: '学期',
+  persetGrade: '年级',
+  presetGrade1: '一年级',
+  presetGrade2: '二年级',
+  presetGrade3: '三年级',
+  presetSubject: '学科',
+  presetSubject1: '语文',
+  presetSubject2: '数学',
+  presetSubject3: '英语',
+  pdHolder: '设置学段...',
+  tmzLabel: '时区设置:',
+  tmzHolder: '请设置时区...',
+  campusHolder: '请设置校区',
+  setCampus: '请设置校区',
+  smHolder: '设置学期...',
+  subjectHolder: '设置学科...',
+  noSubject: '暂无学科',
+  anaLabel: '学情设置',
+  exTypeLabel: '考试类型:',
+  examHolder: '设置考试类型...',
+  noExam: '暂无考试类型',
+  eugenicsLabel: '优生率:',
+  eugenicsTips: '优生率计算方式',
+  incomeLable: '进线率:',
+  incomeTips: '(进线人数)/(报名人数)×100%',
+  touchLabel: '踩线生:',
+  touchTips: '踩线生计算方式',
+  scoreUnit: '分',
+  delExamTitle: '删除考试类型',
+  delGradeTitle: '删除年级',
+  delSubjectTitle: '删除学科',
+  delPdTitle: '删除学段',
+  delCampusTitle: '删除校区',
+  delSmTitle: '删除学期',
+  delContent: '后与之关联的数据将不能查询,确认删除吗?',
+  campusWarning: '对不起,校区数量已到系统授权最多数量!',
+  authWarning: '您暂无此操作权限!',
+  saveErr: '保存失败!',
+  saveWarning: '保存提醒',
+  leaveText: '离开',
 
   // ClassroomSetting.vue
-  classroomList: 'classroom list',
-  listOrder: 'sort by creation time',
-  classroomAttr: 'classroom properties',
-  classroomCode: 'classroom code',
-  classroomName: 'classroom name',
-  headmaster: 'head teacher:',
-  setPeriod: 'select classroom segment',
-  setGrade: 'set classroom grade',
-  setHiteachCode: 'Hiteach software serial number',
-  addClassroom: 'new classroom',
-  schoolPlan: 'campus plan and classroom location setting',
-  uploadPlan: 'upload plan',
-  hiteachList: 'Hiteach sequence number list',
-  codeSearchHolder: 'please enter keyword search',
-  classroomCodeHolder: 'please enter the classroom code...',
-  classroomNameHolder: 'please enter the classroom name...',
-  headmasterHolder: 'please specify the teacher name...',
-  hiTeachHolder: 'please select available serial numbers in the list on the right...',
-  noHiTeachTips: 'no sequence number available',
-  suportCanvas: 'canvas is not supported in the current browser. Please change your browser and try again. ',
-  addCodeTitle: 'enter Hiteach serial number',
-  codeHolder: 'please enter Hiteach serial number...',
-  moreAuth: 'massive authorization',
-  yes: 'yes',
-  no: 'no',
-  hiTeach: 'HiTeach serial number',
-  csTips1: 'magnified to the maximum multiple! ',
-  csTips2: 'reduced to the minimum multiple! ',
-  csTips3: 'saved successfully! ',
-  csTips4: 'at least one item needs to be reserved! ',
-  csTips5: 'upload succeeded! ',
-  csTips6: 'this serial number has been bound to the classroom! ',
-  csTips7: 'Delete succese��',
-  presetClassroomName: 'preset classroom',
-  presetHeadmaster: 'no head teacher specified',
-  sokapp:'苏格拉底议课',
-  remotcls:'远距教室服务',
-  sokdesk:'苏格拉底桌面',
-  sokrpt:'苏格拉底报告',
-  sokvdo:'苏格拉底影片',
-  ezs:'录播系统',
+  classroomList: '教室列表',
+  pdLabel: '学段:',
+  listOrder: '依创建时间排序',
+  listOrder1: '依教室编号排序',
+  listOrder2: '依智慧教室排序',
+  classroomAttr: '教室属性',
+  classroomCode: '教室编码',
+  classroomName: '教室名称',
+  headmaster: '班主任:',
+  setPeriod: '选择教室学段',
+  setGrade: '设置教室年级',
+  setHiteachCode: 'HiTeach软件序号',
+  addClassroom: '新增教室',
+  schoolPlan: '校园平面图与教室位置设置',
+  uploadPlan: '上传平面图',
+  hiteachList: 'HiTeach序号列表',
+  codeSearchHolder: '请输入关键字搜索',
+  classroomCodeHolder: 'eg: HBCN0101',
+  classroomNameHolder: 'eg: 一年级一班',
+  headmasterHolder: '可通过名字搜索...',
+  hiTeachHolder: '请在右侧列表选择可用序号...',
+  noHiTeachTips: '没有可用序号',
+  suportCanvas: '当前浏览器不支持Canvas,请更换浏览器再试试。',
+  addCodeTitle: '录入HiTeach序列号',
+  codeHolder: '请输入HiTeach序号...',
+  moreAuth: '大量授权',
+  yes: '是',
+  no: '否',
+  hiTeach: 'HiTeach序列号',
+  csTips1: '已放大至最大倍数!',
+  csTips2: '已缩小至最小倍数!',
+  csTips3: '保存成功!',
+  csTips4: '至少需要保留一项!',
+  csTips5: '上传成功!',
+  csTips6: '此序号已绑定到教室!',
+  csTips7: '删除成功!',
+  presetClassroomName: '教室',
+  presetHeadmaster: '未指定班主任',
+  sokapp: '苏格拉底议课',
+  remotcls: '远距教室服务',
+  sokdesk: '苏格拉底桌面',
+  sokrpt: '苏格拉底报告',
+  sokvdo: '苏格拉底影片',
+  ezs: '录播系统',
   '3222NIYD': 'ezStation 2',
   'J223IZ6M': 'HiTeach STD',
   '3222C6D2': 'HiTeach TBL',
   'J223IZAM': 'HiTeach PRO',
-  addStuBtn: '添加學生',
-  delStuBtn: '移除學生',
-  editSeat: '修改座號',
+  tmdClass: 'TEAM Model 智慧教室',
+  normalClass: '普通教室',
+  dClass: '专科教室',
+  tab1: '基础信息',
+  tab2: '学生名单',
+  tab3: '位置设定',
+  tab4: '关联Hiteach',
+  classAttr: '教室属性',
+  relationHi: '关联Hiteach设备',
+  hiFilter1: '显示所有版本的Hiteach',
+  hiFilter2: '仅显示Hiteach Standard版本',
+  hiFilter3: '仅显示Hiteach Pro版本',
+  hiFilter4: '仅显示Hiteach TBL版本',
+  single: '单一',
+  mach: '大量',
+  expireLabel: '序号到期日',
+  related: '已被關聯',
+  noEnable: '此序号尚未启用',
+  onClassStu: '专科教室没有固定学生名单!',
+  classNoErr: '教室编码不能为空!',
+  classNoErr1: '教室编码只能由字母和数字组成!',
+  classAttr1: '常规教室(有固定学生)',
+  classAttr2: '专科教室(无固定学生)',
+  nameWarning: '请输入教室名称',
+  typeWarning: '请设置教室属性',
+  gradeWarning: '请设置年级',
+  expireLabel1: '已到期',
+  expireLabel2: '无限期',
+  findStuErr: '查询班级学生名单失败!',
+  noStdClass: '当前班级未选中,不能移动!',
+  formWarning: '请先完善班级信息再保存!',
+  bindingErr: 'Hiteach 绑定失败!',
+  delClass: '删除班级',
+  saveClassWarning: '当前教室数据尚未保存。如果离开,修改的数据将不会保存!',
+  addStuBtn: '添加学生',
+  delStuBtn: '移除学生',
+  editSeat: '修改座号',
   removeTile: '移除提醒',
-  removeContent: '是否確認移除',
+  removeContent: '是否确认移除',
   removeOk: '移除成功',
-  removeErr: '移除失敗',
+  removeErr: '移除失',
   deLink: '解除关联',
   link: '关联',
-  confirmDelink:'请问您确定要解除关联'
+  confirmDelink: '请问您确定要解除关联',
+  noStu: '暂无学生'
 }

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

@@ -33,6 +33,18 @@ export default {
         prtQu:'个人问卷',
         selfLearn:'自主学习',
         homework:'作业活动',
-        acRecord:'活动记录'
+        acRecord: '活动记录',
+        cusMgt:'课程管理'
+    },
+    compt: {
+        cusWare: '课件',
+        sizeErr: '文件大小超出限制',
+        typeErr: '文件类型不支持',
+        acRep: '警告 :未找到指定班级',
+        classErr: '警告 :未找到指定班级',
+        setErr: '错误:座位号重复',
+        tbColErr1:'导入数据没有',
+        tbColErr2: ',请完善表格数据再导入',
+        fileReadErr:'文件读取失败'
     }
 }

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

@@ -178,7 +178,9 @@ export default{
         column3:'状态',
         finishScore:'已完成所有学生作答的评分!',
         unableScore:'学生尚未作答,无法评分',
-        stStuWarning:'请先选择学生!'
+        stStuWarning: '请先选择学生!',
+        lastQu: '上一题',
+        nextQu: '下一题',
     },
 
     //SimpleAnalysis.vue
@@ -196,6 +198,10 @@ export default{
         noPublish:'评测尚未发布,暂无统计数据',
         calcing:'成绩数据结算中,',
         clickFresh:'点此刷新',
-        inCalc:'数据结算中,请稍后查看'
+        inCalc:'数据结算中,请稍后查看',
+        total:'总分',
+        avgScore:'均分统计',
+        totalLabel:'总量',
+        scoreMat:'分数段统计'
     }
 }

+ 80 - 79
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/schoolBaseInfo.js

@@ -36,41 +36,41 @@ export default {
   presetSubject1: '语文',
   presetSubject2: '数学',
   presetSubject3: '英语',
-  pdHolder:'设置学段...',
-  tmzLabel:'时区设置:',
-  tmzHolder:'请设置时区...',
-  campusHolder:'请设置校区',
-  setCampus:'请设置校区',
-  smHolder:'设置学期...',
-  subjectHolder:'设置学科...',
-  noSubject:'暂无学科',
-  anaLabel:'学情设置',
-  exTypeLabel:'考试类型:',
-  examHolder:'设置考试类型...',
-  noExam:'暂无考试类型',
-  eugenicsLabel:'优生率:',
-  eugenicsTips:'优生率计算方式',
-  incomeLable:'进线率:',
-  incomeTips:'(进线人数)/(报名人数)×100%',
-  touchLabel:'踩线生:',
-  touchTips:'踩线生计算方式',
-  scoreUnit:'分',
-  delExamTitle:'删除考试类型',
-  delGradeTitle:'删除年级',
-  delSubjectTitle:'删除学科',
-  delPdTitle:'删除学段',
-  delCampusTitle:'删除校区',
-  delSmTitle:'删除学期',
-  delContent:'后与之关联的数据将不能查询,确认删除吗?',
-  campusWarning:'对不起,校区数量已到系统授权最多数量!',
-  authWarning:'您暂无此操作权限!',
-  saveErr:'保存失败!',
-  saveWarning:'保存提醒',
-  leaveText:'离开',
+  pdHolder: '设置学段...',
+  tmzLabel: '时区设置:',
+  tmzHolder: '请设置时区...',
+  campusHolder: '请设置校区',
+  setCampus: '请设置校区',
+  smHolder: '设置学期...',
+  subjectHolder: '设置学科...',
+  noSubject: '暂无学科',
+  anaLabel: '学情设置',
+  exTypeLabel: '考试类型:',
+  examHolder: '设置考试类型...',
+  noExam: '暂无考试类型',
+  eugenicsLabel: '优生率:',
+  eugenicsTips: '优生率计算方式',
+  incomeLable: '进线率:',
+  incomeTips: '(进线人数)/(报名人数)×100%',
+  touchLabel: '踩线生:',
+  touchTips: '踩线生计算方式',
+  scoreUnit: '分',
+  delExamTitle: '删除考试类型',
+  delGradeTitle: '删除年级',
+  delSubjectTitle: '删除学科',
+  delPdTitle: '删除学段',
+  delCampusTitle: '删除校区',
+  delSmTitle: '删除学期',
+  delContent: '后与之关联的数据将不能查询,确认删除吗?',
+  campusWarning: '对不起,校区数量已到系统授权最多数量!',
+  authWarning: '您暂无此操作权限!',
+  saveErr: '保存失败!',
+  saveWarning: '保存提醒',
+  leaveText: '离开',
 
   // ClassroomSetting.vue
   classroomList: '教室列表',
-  pdLabel:'学段:',
+  pdLabel: '学段:',
   listOrder: '依创建时间排序',
   listOrder1: '依教室编号排序',
   listOrder2: '依智慧教室排序',
@@ -107,58 +107,59 @@ export default {
   csTips7: '删除成功!',
   presetClassroomName: '教室',
   presetHeadmaster: '未指定班主任',
-  sokapp:'苏格拉底议课',
-  remotcls:'远距教室服务',
-  sokdesk:'苏格拉底桌面',
-  sokrpt:'苏格拉底报告',
-  sokvdo:'苏格拉底影片',
-  ezs:'录播系统',
+  sokapp: '苏格拉底议课',
+  remotcls: '远距教室服务',
+  sokdesk: '苏格拉底桌面',
+  sokrpt: '苏格拉底报告',
+  sokvdo: '苏格拉底影片',
+  ezs: '录播系统',
   '3222NIYD': 'ezStation 2',
   'J223IZ6M': 'HiTeach STD',
   '3222C6D2': 'HiTeach TBL',
   'J223IZAM': 'HiTeach PRO',
-  tmdClass:'TEAM Model 智慧教室',
-  normalClass:'普通教室',
-  dClass:'专科教室',
-  tab1:'基础信息',
-  tab2:'学生名单',
-  tab3:'位置设定',
+  tmdClass: 'TEAM Model 智慧教室',
+  normalClass: '普通教室',
+  dClass: '专科教室',
+  tab1: '基础信息',
+  tab2: '学生名单',
+  tab3: '位置设定',
   tab4: '关联Hiteach',
-  classAttr:'教室属性',
-  relationHi:'关联Hiteach设备',
-  hiFilter1:'显示所有版本的Hiteach',
-  hiFilter2:'仅显示Hiteach Standard版本',
-  hiFilter3:'仅显示Hiteach Pro版本',
-  hiFilter4:'仅显示Hiteach TBL版本',
-  single:'单一',
-  mach:'大量',
-  expireLabel:'序号到期日',
-  related:'已被關聯',
-  noEnable:'此序号尚未启用',
-  onClassStu:'专科教室没有固定学生名单!',
-  classNoErr:'教室编码不能为空!',
-  classNoErr1:'教室编码只能由字母和数字组成!',
-  classAttr1:'常规教室(有固定学生)',
-  classAttr2:'专科教室(无固定学生)',
-  nameWarning:'请输入教室名称',
-  typeWarning:'请设置教室属性',
-  gradeWarning:'请设置年级',
-  expireLabel1:'已到期',
-  expireLabel2:'无限期',
-  findStuErr:'查询班级学生名单失败!',
-  noStdClass:'当前班级未选中,不能移动!',
-  formWarning:'请先完善班级信息再保存!',
-  bindingErr:'Hiteach 绑定失败!',
-  delClass:'删除班级',
-  saveClassWarning:'当前教室数据尚未保存。如果离开,修改的数据将不会保存!',
-  addStuBtn:'添加学生',
-  delStuBtn:'移除学生',
-  editSeat:'修改座号',
-  removeTile:'移除提醒',
-  removeContent:'是否确认移除',
-  removeOk:'移除成功',
-  removeErr:'移除失败',
+  classAttr: '教室属性',
+  relationHi: '关联Hiteach设备',
+  hiFilter1: '显示所有版本的Hiteach',
+  hiFilter2: '仅显示Hiteach Standard版本',
+  hiFilter3: '仅显示Hiteach Pro版本',
+  hiFilter4: '仅显示Hiteach TBL版本',
+  single: '单一',
+  mach: '大量',
+  expireLabel: '序号到期日',
+  related: '已被關聯',
+  noEnable: '此序号尚未启用',
+  onClassStu: '专科教室没有固定学生名单!',
+  classNoErr: '教室编码不能为空!',
+  classNoErr1: '教室编码只能由字母和数字组成!',
+  classAttr1: '常规教室(有固定学生)',
+  classAttr2: '专科教室(无固定学生)',
+  nameWarning: '请输入教室名称',
+  typeWarning: '请设置教室属性',
+  gradeWarning: '请设置年级',
+  expireLabel1: '已到期',
+  expireLabel2: '无限期',
+  findStuErr: '查询班级学生名单失败!',
+  noStdClass: '当前班级未选中,不能移动!',
+  formWarning: '请先完善班级信息再保存!',
+  bindingErr: 'Hiteach 绑定失败!',
+  delClass: '删除班级',
+  saveClassWarning: '当前教室数据尚未保存。如果离开,修改的数据将不会保存!',
+  addStuBtn: '添加学生',
+  delStuBtn: '移除学生',
+  editSeat: '修改座号',
+  removeTile: '移除提醒',
+  removeContent: '是否确认移除',
+  removeOk: '移除成功',
+  removeErr: '移除失败',
   deLink: '解除关联',
   link: '关联',
-  confirmDelink:'请问您确定要解除关联'
+  confirmDelink: '请问您确定要解除关联',
+  noStu: '暂无学生'
 }

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

@@ -33,6 +33,18 @@ export default {
         prtQu:'个人问卷',
         selfLearn:'自主学习',
         homework:'作业活动',
-        acRecord:'活动记录'
+        acRecord: '活动记录',
+        cusMgt:'课程管理'
+    },
+    compt: {
+        cusWare: '课件',
+        sizeErr: '文件大小超出限制',
+        typeErr: '文件类型不支持',
+        acRep: '警告 :未找到指定班级',
+        classErr: '警告 :未找到指定班级',
+        setErr: '错误:座位号重复',
+        tbColErr1:'导入数据没有',
+        tbColErr2: ',请完善表格数据再导入',
+        fileReadErr:'文件读取失败'
     }
 }

+ 8 - 2
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js

@@ -178,7 +178,9 @@ export default {
         column3: '狀態',
         finishScore: '已完成所有學生作答的評分!',
         unableScore: '學生尚未作答,無法評分',
-        stStuWarning: '請先選擇學生!'
+        stStuWarning: '請先選擇學生!',
+        lastQu: '上一題',
+        nextQu: '下一題',
     },
 
     //SimpleAnalysis.vue
@@ -196,6 +198,10 @@ export default {
         noPublish: '評測尚未發佈,暫無統計資料',
         calcing: '成績數據結算中,',
         clickFresh: '點此重繪',
-        inCalc: '數據結算中,請稍後查看'
+        inCalc: '數據結算中,請稍後查看',
+        total: '總分',
+        avgScore: '均分統計',
+        totalLabel: '總量',
+        scoreMat: '分數段統計'
     }
 }

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

@@ -68,9 +68,7 @@ export default {
   saveWarning: '保存提醒',
   leaveText: '離開',
 
-
   //ClassroomSetting.vue
-
   classroomList: '教室清單',
   pdLabel: '學段:',
   listOrder: '依創建時間排序',
@@ -162,5 +160,6 @@ export default {
   removeErr: '移除失敗',
   deLink: '解除關聯',
   link: '關聯',
-  confirmDelink:'請問您確定要解除關聯'
+  confirmDelink:'請問您確定要解除關聯',
+  noStu: '暫無學生'
 }

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

@@ -33,6 +33,18 @@ export default {
         prtQu: '個人問卷',
         selfLearn: '自主學習',
         homework: '工作活動',
-        acRecord: '活動記錄'
+        acRecord: '活動記錄',
+        cusMgt: '課程管理'
+    },
+    compt: {
+        cusWare: '課件',
+        sizeErr: '文件大小超出限制',
+        typeErr: '檔案類型不支持',
+        acRep: '警告:未找到指定班級',
+        classErr: '警告:未找到指定班級',
+        setErr: '錯誤:座位號重複',
+        tbColErr1: '導入數據沒有',
+        tbColErr2: ',請完善表格數據再導入',
+        fileReadErr: '檔案讀取失敗'
     }
 }

+ 0 - 2
TEAMModelOS/ClientApp/src/view/learnactivity/CreateSchoolEva.vue

@@ -672,7 +672,6 @@ export default {
                 }
             )
             this.activeTab = 'preview'
-            this.$Message.warning('编辑评测功能尚未完善')
         }
     },
     computed: {
@@ -698,7 +697,6 @@ export default {
                     })
                 }
             }
-            console.log('数据', data)
             return data
         },
         //计算当前学段下面的年级信息

+ 4 - 4
TEAMModelOS/ClientApp/src/view/learnactivity/PaperScore.vue

@@ -79,10 +79,10 @@
                             </div>
                             <!-- 滚动上下题目去掉 -->
                             <!-- <div style="display:flex;justify-content: space-evenly;margin-top:5px;display:none;" v-show="showQu">
-                                <span class="fast-score-tag" title="上一题" :style="{'background':'#aeaeae','cursor':(typeIndex + index) == 0 ? 'not-allowed':''}" @click="goToQuestion(getQuIndex(typeIndex,index) - 1)">
+                                <span class="fast-score-tag" :title="$t('learnActivity.score.lastQu')" :style="{'background':'#aeaeae','cursor':(typeIndex + index) == 0 ? 'not-allowed':''}" @click="goToQuestion(getQuIndex(typeIndex,index) - 1)">
                                     <Icon type="md-arrow-round-back" />
                                 </span>
-                                <span class="fast-score-tag" title="下一题" :style="{'background':'#aeaeae','cursor':(typeIndex + index + 1) == studentAnswer.scores.legnth ? 'not-allowed':''}" @click="goToQuestion(getQuIndex(typeIndex,index) + 1)">
+                                <span class="fast-score-tag" :title="$t('learnActivity.score.nextQu')" :style="{'background':'#aeaeae','cursor':(typeIndex + index + 1) == studentAnswer.scores.legnth ? 'not-allowed':''}" @click="goToQuestion(getQuIndex(typeIndex,index) + 1)">
                                     <Icon type="md-arrow-round-forward" />
                                 </span>
                             </div> -->
@@ -203,10 +203,10 @@
                                 </div>
                                 <!-- 滚动上下题目去掉 -->
                                 <!-- <div style="display:flex;justify-content: space-evenly;margin-top:5px;display:none;" v-show="showQu">
-                                        <span class="fast-score-tag" title="上一题" :style="{'background':'#aeaeae','cursor':(typeIndex + index + childIndex) == 0 ? 'not-allowed':''}" @click="goToQuestion((getQuIndex(typeIndex,index) + childIndex) - 1)">
+                                        <span class="fast-score-tag" :title="$t('learnActivity.score.lastQu')" :style="{'background':'#aeaeae','cursor':(typeIndex + index + childIndex) == 0 ? 'not-allowed':''}" @click="goToQuestion((getQuIndex(typeIndex,index) + childIndex) - 1)">
                                             <Icon type="md-arrow-round-back" />
                                         </span>
-                                        <span class="fast-score-tag" title="下一题" :style="{'background':'#aeaeae','cursor':(typeIndex + index + childIndex + 1) == studentAnswer.scores.length ? 'not-allowed':''}" @click="goToQuestion((getQuIndex(typeIndex,index) + childIndex) + 1)">
+                                        <span class="fast-score-tag" :title="$t('learnActivity.score.nextQu')" :style="{'background':'#aeaeae','cursor':(typeIndex + index + childIndex + 1) == studentAnswer.scores.length ? 'not-allowed':''}" @click="goToQuestion((getQuIndex(typeIndex,index) + childIndex) + 1)">
                                             <Icon type="md-arrow-round-forward" />
                                         </span>
                                     </div> -->

+ 5 - 4
TEAMModelOS/ClientApp/src/view/learnactivity/PrivScoring.vue

@@ -239,9 +239,10 @@ export default {
         },
         // 获取班级名单
         async getClassStudent() {
+            this.tableData = []
+            if (!this.chooseClass) return
             this.showTest = false
             this.tableLoading = true
-            if (!this.chooseClass) return
             let stuRes = undefined
             try {
                 //个人自定义名单则直接根据学生id换name
@@ -266,9 +267,9 @@ export default {
                     stuRes = await this.$api.schoolSetting.getClassroomStudent(requestData)
                 }
             } catch (e) {
-                this.$Message.error('获取学生名单失败')
+                this.$Message.error('API ERROR')
+                this.tableLoading = false
             }
-            console.log('***', stuRes)
             if (!stuRes.error) {
                 if (!this.paperInfo[this.chooseClass]) {
                     this.paperInfo[this.chooseClass] = {}
@@ -279,7 +280,7 @@ export default {
                 }
                 this.$set(this.paperInfo[this.chooseClass], "students", classStu)
                 this.students = []
-                this.tableData = []
+                
                 this.studentScore = []
                 this.tableColumn = [...this.scoreList]
                 let defSocre = []

+ 2 - 3
TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.vue

@@ -253,9 +253,10 @@ export default {
         },
         // 获取班级名单
         getClassStudent() {
+            this.tableData = []
+            if (!this.chooseClass) return
             this.showTest = false
             this.tableLoading = true
-            if (!this.chooseClass) return;
             let requestData = {
                 ids: [this.chooseClass],
                 scope: this.examInfo.scope == 'private' ? 'private' : 'school',
@@ -273,7 +274,6 @@ export default {
                     }
                     this.$set(this.paperInfo[this.chooseClass], "students", classStu)
                     this.students = []
-                    this.tableData = []
                     this.studentScore = []
                     this.tableColumn = [...this.scoreList]
                     let defSocre = []
@@ -290,7 +290,6 @@ export default {
                             defSocre.push(-1)
                         }
                         let classStu = this.paperInfo[this.chooseClass].students.students
-                        console.log('classStu', classStu)
                         for (let k = 0; k < classStu.length; k++) {
                             let score = {}
                             score.name = classStu[k].name

+ 3 - 4
TEAMModelOS/ClientApp/src/view/learnactivity/echarts/AvgCompare.vue

@@ -16,7 +16,7 @@ export default {
         return {
             progressPie: undefined,
             defaultSeries: {
-                name: '总分',
+                name: this.$t('learnActivity.simple.total'),
                 type: 'line',
                 itemStyle: {
                     color: '#11C2EE',
@@ -59,7 +59,7 @@ export default {
                     data: []
                 },
                 title: {
-                    "text": "均分统计",
+                    "text": this.$t('learnActivity.simple.avgScore'),
                     "left": 0,
                     "top": 0,
                     "textStyle": {
@@ -180,14 +180,13 @@ export default {
                             {
                                 name: item.subjectId,
                                 type: 'bar',
-                                stack: '总量',
+                                stack: this.$t('learnActivity.simple.totalLabel'),
                                 barMaxWidth: 30,
                                 data: item.ClassAverage
                             }
                         )
                     })
                     this.newOption.series.push(this.defaultSeries)
-                    console.log('option哈哈',this.newOption)
                     this.progressPie.setOption(this.newOption, true)
                 })
             },

+ 2 - 3
TEAMModelOS/ClientApp/src/view/learnactivity/echarts/ScoreMatrix.vue

@@ -18,10 +18,10 @@ export default {
             option: {
                 tooltip: {
                     trigger: 'item',
-                    formatter: '{b} : {c}人'
+                    formatter: '{b} : {c}' + this.$t('unit.text7')
                 },
                 title: {
-                    "text": "分数段统计",
+                    "text": this.$t('learnActivity.simple.scoreMat'),
                     "left": "center",
                     "top": 0,
                     "textStyle": {
@@ -92,7 +92,6 @@ export default {
     watch: {
         pieData: {
             handler(n, o) {
-                console.log('新的',this.pieData)
                 this.$nextTick(() => {
                     if (!this.progressPie) {
                         this.progressPie = this.$echarts.init(document.getElementById('ev-score-matrix'))

+ 1 - 2
TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue

@@ -60,7 +60,6 @@
                     <div class="course-classroom-list" slot="left">
                         <div class="course-classroom-list-header">
                             <span class="course-classroom-label">{{$t('courseManage.classroom.classroomList')}}</span>
-                            <!-- <Icon custom="iconfont icon-schedule" v-show="listType == 'school'" class="add-icon" size="16" title="课表模式" /> -->
                             <Icon type="md-add" v-show="listType == 'private'" class="add-icon" @click="newSlStatus = true" />
                             <!-- 暂未处理编辑个人自定义名单 -->
                             <!-- <Icon type="md-create" v-show="listType == 'private' && teaClassList.length" class="add-icon" @click="editClassStatus = true" /> -->
@@ -79,7 +78,7 @@
                                     </p>
                                     <p class="class-attr-item" v-show="listType == 'private'">
                                         <span class="attr-label">{{$t('cusMgt.stuCount')}}:</span>
-                                        <span class="class-name">{{item.students ? item.students.length : 0}}</span>
+                                        <span class="class-name">{{item.students ? item.students.length : 0}}{{$t('unit.text7')}}</span>
                                     </p>
                                 </div>
                                 <EmptyData v-if="teaClassList.length == 0" :top="160" :textContent="$t('cusMgt.noClassList')"></EmptyData>

+ 0 - 1
TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue

@@ -192,7 +192,6 @@
                                     <Radio label="class">{{$t('cusMgt.listType1')}}</Radio>
                                     <Radio label="stulist">{{$t('cusMgt.listType2')}}</Radio>
                                 </RadioGroup>
-                                <!-- <Input search placeholder="搜索" style="width:240px;margin-top:0px;margin-left:15px;" size="small" /> -->
                                 <div class="action-btn-wrap">
                                     <span class="action-btn" style="margin-right:40px" @click="confirmAddSchd">
                                         <Icon type="md-add" size="16" />

+ 2 - 4
TEAMModelOS/ClientApp/src/view/schoolmgmt/ClassroomSetting/ClassroomSetting.vue

@@ -269,7 +269,7 @@
                 <!--学生名单-->
                 <div id="sut-list-box" class="dark-iview-table dark-iview-input" style="width:100%;height:100%;" v-show="currentTabIndex == 2">
                     <vuescroll style="height:100%;" v-if="classroomListShow[curClassIndex] && classroomListShow[curClassIndex].openType == '1'">
-                        <Table :columns="studentColumn" :data="students" @on-selection-change="(selections)=>{delSelections = selections}" :height="tableHeight" class="system-classroom-table" :loading="stuLoading" no-data-text="暂无学生">
+                        <Table :columns="studentColumn" :data="students" @on-selection-change="(selections)=>{delSelections = selections}" :height="tableHeight" class="system-classroom-table" :loading="stuLoading" :no-data-text="$t('schoolBaseInfo.noStu')">
                             <Loading slot="loading" :top="0" bgColor="rgba(103, 103, 103, 0.27)"></Loading>
                             <template slot-scope="{ row }" slot="picture">
                                 <PersonalPhoto :name="row.name" :picture="row.picture" />
@@ -290,7 +290,7 @@
                                 <span>{{row.groupId ? row.groupId : '- -'}}</span>
                             </template>
                             <template slot-scope="{ row, index }" slot="groupName">
-                                <span>{{row.groupName ? row.groupName : '未分组'}}</span>
+                                <span>{{row.groupName ? row.groupName : '- -'}}</span>
                             </template> -->
                         </Table>
                     </vuescroll>
@@ -1184,9 +1184,7 @@ export default {
                         onOk: () => {
                             if (this.classroomListShow[this.curClassIndex].option == 'insert') {
                                 this.delClassroom(this.curClassIndex)
-                                console.log('删除')
                             } else {
-                                console.log('离开')
                                 this.updated = false
                                 this.updHiteachLink = []
                                 this.$set(this.classroomListShow, this.curClassIndex, JSON.parse(this.updateBefore))