Procházet zdrojové kódy

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

CrazyIter_Bin před 4 roky
rodič
revize
9e1da790ea
22 změnil soubory, kde provedl 1594 přidání a 201 odebrání
  1. 69 0
      TEAMModelOS/ClientApp/src/assets/iconfont/demo_index.html
  2. 18 6
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.css
  3. binární
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.eot
  4. 1 1
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.js
  5. 21 0
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.json
  6. 9 0
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.svg
  7. binární
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.ttf
  8. binární
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff
  9. binární
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff2
  10. 1 1
      TEAMModelOS/ClientApp/src/css/dark-iview-table.less
  11. 214 159
      TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js
  12. 55 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/learnActivity.js
  13. 56 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js
  14. 3 3
      TEAMModelOS/ClientApp/src/view/learnactivity/MgtPrivEva.vue
  15. 19 15
      TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.less
  16. 35 14
      TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue
  17. 118 0
      TEAMModelOS/ClientApp/src/view/learnactivity/echarts/CptCount.vue
  18. 118 0
      TEAMModelOS/ClientApp/src/view/learnactivity/echarts/MarkProgress.vue
  19. 118 0
      TEAMModelOS/ClientApp/src/view/learnactivity/echarts/ScanProgress.vue
  20. 398 0
      TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkData.vue
  21. 336 0
      TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue
  22. 5 0
      TEAMModelOS/Controllers/Common/ExamController.cs

+ 69 - 0
TEAMModelOS/ClientApp/src/assets/iconfont/demo_index.html

@@ -31,6 +31,24 @@
       <div class="content unicode" style="display: block;">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+              <span class="icon iconfont">&#xe636;</span>
+                <div class="name">多评仲裁</div>
+                <div class="code-name">&amp;#xe636;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60d;</span>
+                <div class="name">扫描有误拷贝</div>
+                <div class="code-name">&amp;#xe60d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe602;</span>
+                <div class="name">扫描</div>
+                <div class="code-name">&amp;#xe602;</div>
+              </li>
+          
             <li class="dib">
               <span class="icon iconfont">&#xe6a5;</span>
                 <div class="name">箭头</div>
@@ -597,6 +615,33 @@
       <div class="content font-class">
         <ul class="icon_lists dib-box">
           
+          <li class="dib">
+            <span class="icon iconfont icon-arb"></span>
+            <div class="name">
+              多评仲裁
+            </div>
+            <div class="code-name">.icon-arb
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-scanning-err"></span>
+            <div class="name">
+              扫描有误拷贝
+            </div>
+            <div class="code-name">.icon-scanning-err
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-scanning"></span>
+            <div class="name">
+              扫描
+            </div>
+            <div class="code-name">.icon-scanning
+            </div>
+          </li>
+          
           <li class="dib">
             <span class="icon iconfont icon-left-arrow"></span>
             <div class="name">
@@ -1400,6 +1445,30 @@
       <div class="content symbol">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-arb"></use>
+                </svg>
+                <div class="name">多评仲裁</div>
+                <div class="code-name">#icon-arb</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-scanning-err"></use>
+                </svg>
+                <div class="name">扫描有误拷贝</div>
+                <div class="code-name">#icon-scanning-err</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-scanning"></use>
+                </svg>
+                <div class="name">扫描</div>
+                <div class="code-name">#icon-scanning</div>
+            </li>
+          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#icon-left-arrow"></use>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 18 - 6
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.css


binární
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.eot


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.js


+ 21 - 0
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.json

@@ -5,6 +5,27 @@
   "css_prefix_text": "icon-",
   "description": "",
   "glyphs": [
+    {
+      "icon_id": "7361888",
+      "name": "多评仲裁",
+      "font_class": "arb",
+      "unicode": "e636",
+      "unicode_decimal": 58934
+    },
+    {
+      "icon_id": "10281808",
+      "name": "扫描有误拷贝",
+      "font_class": "scanning-err",
+      "unicode": "e60d",
+      "unicode_decimal": 58893
+    },
+    {
+      "icon_id": "13638619",
+      "name": "扫描",
+      "font_class": "scanning",
+      "unicode": "e602",
+      "unicode_decimal": 58882
+    },
     {
       "icon_id": "392156",
       "name": "箭头",

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 9 - 0
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.svg


binární
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.ttf


binární
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff


binární
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff2


+ 1 - 1
TEAMModelOS/ClientApp/src/css/dark-iview-table.less

@@ -8,7 +8,7 @@
     }
 
     .ivu-table-cell {
-        padding: 0px;
+        // padding: 0px;
     }
 
     .ivu-table-header thead tr th {

+ 214 - 159
TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js

@@ -1,148 +1,150 @@
 export default {
     //MgtSchoolEva.vue
     mgtScEv: {
-        listLabel: '评测列表',
-        period: '段:',
+        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: '是否确认删除',
+        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: '任课老师发布的评测'
+        deleteErr: '删除失敗',
+        noJoin: '此帳號暫未加入任何學校!',
+        myEv: '我發佈的評測',
+        teaEv: '任課老師發佈的評測',
+        markSetting: '閱卷配寘',
+        markData: '閱卷數據'
     },
 
-    //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: '切换学段',
+        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: '切',
+        togglePdTip2: '的測試科目,如果現在切換學段會清空已選科目,確定切換學段嗎?',
+        toggleOkText: '切',
         delPdTitle: '删除科目',
-        delPdContent: '是否确认删除',
+        delPdContent: '是否確認删除',
         delOk: '删除成功',
-        pdTips: '请先选择测试学段!',
-        defaultPaper: '(请先挑选或导入试卷)',
+        pdTips: '請先選擇測試學段!',
+        defaultPaper: '(請先挑選或導入試卷)',
     },
-    // ManualPaper.vue
+    //ManualPaper.vue
     manual: {
-        source: '源:',
-        sourceP: '个人试卷库',
-        sourceS: '校本试卷库',
-        pdLabel: '段:',
-        subjectLabel: '科:',
-        gradeLabel: '年:',
-        fitPd: '适用学段:',
-        fitSubject: '用科目:',
-        quCount: '量:',
-        useCount: '使用次:',
-        stdPaper: '已选试卷',
-        stPaper: '选择试卷',
-        previewPaper: '预览试卷',
-        noPaper: '暂无对应的试卷',
-        noPaper1: '暂无试卷'
+        source: '源:',
+        sourceP: '個人試卷庫',
+        sourceS: '校本試卷庫',
+        pdLabel: '段:',
+        subjectLabel: '科:',
+        gradeLabel: '年:',
+        fitPd: '適用學段:',
+        fitSubject: '用科目:',
+        quCount: '量:',
+        useCount: '使用次:',
+        stdPaper: '已選試卷',
+        stPaper: '選擇試卷',
+        previewPaper: '預覽試卷',
+        noPaper: '暫無對應的試卷',
+        noPaper1: '暫無試卷'
     },
-    // PaperScore.vue、Scoring.vue
+    //PaperScore.vue、Scoring.vue
     score: {
-        stuName: '生姓名:',
-        score: '分:',
+        stuName: '生姓名:',
+        score: '分:',
         scoreUnit: '分',
         saveScore: '保存打分',
-        showAns: '示答案',
-        hideAns: '藏答案',
-        showQu: '显示题干',
-        hideQu: '隐藏题干',
-        quIndex: '题号:',
-        quIndex1: '题号',
-        fullScore: '分',
+        showAns: '示答案',
+        hideAns: '藏答案',
+        showQu: '顯示題幹',
+        hideQu: '隱藏題幹',
+        quIndex: '題號:',
+        quIndex1: '題號',
+        fullScore: '滿分',
         zeroScore: '零分',
         zeroScore1: '0分',
-        stuAns: '【学 生 作 答】',
-        mark: '批',
+        stuAns: '【學生作答】',
+        mark: '批',
         quAns: '【答ㅤ案】',
-        noAnswer: '未设置答案',
+        noAnswer: '未設定答案',
         anaLabel: '【解ㅤ析】',
-        noAna: '暂无解析',
-        kdLabel: '【知识点】',
-        noKd: '暂未绑定知识点',
-        sQuLabel1: '【小',
+        noAna: '暫無解析',
+        kdLabel: '【知識點】',
+        noKd: '暫未綁定知識點',
+        sQuLabel1: '【小',
         sQuLabel2: '】',
-        quIndexLabel: '【题号',
-        nextStu: '下一位生>>>',
-        markOk: '批成功!',
-        markErr: '批注失败!',
-        isFullTips: '已经是小题满分了',
-        isZeroTips: '已是零分了',
-        saveScoreOk: '成保存成功!',
-        saveSocreErr: '成绩保存失败!',
+        quIndexLabel: '【題號',
+        nextStu: '下一位生>>>',
+        markOk: '批成功!',
+        markErr: '批註失敗!',
+        isFullTips: '已經是小題滿分了',
+        isZeroTips: '已是零分了',
+        saveScoreOk: '成保存成功!',
+        saveSocreErr: '成績保存失敗!',
         zero: '零',
         one: '一',
         two: '二',
@@ -156,52 +158,105 @@ export default {
         ten: '十',
         hundred: '百',
         thousand: '千',
-        tenThd: '',
-        hMillion: '亿',
+        tenThd: '',
+        hMillion: '',
         noStuAns: '未作答',
-        noStuAns1: '未作答',
-        trueAns: '正',
-        falseAns: '错误',
+        noStuAns1: '未作答',
+        trueAns: '正',
+        falseAns: '錯誤',
         //Scoring.vue
-        subjectLabel: '科:',
-        gradeLabel: '年:',
-        classLabel: '班:',
-        stuLabel: '生:',
-        scoreView: '分数概览',
-        scoring: '试卷评分',
-        classNoStu: '班级暂无学生',
-        status1: '未作答',
-        status2: '前往分',
-        status3: '查看分',
+        subjectLabel: '科:',
+        gradeLabel: '年:',
+        classLabel: '班:',
+        stuLabel: '生:',
+        scoreView: '分數概覽',
+        scoring: '試卷評分',
+        classNoStu: '班級暫無學生',
+        status1: '未作答',
+        status2: '前往分',
+        status3: '查看分',
         column1: '姓名',
-        column2: '分',
-        column3: '状态',
-        finishScore: '已完成所有学生作答的评分!',
-        unableScore: '学生尚未作答,无法评分',
-        stStuWarning: '请先选择学生!',
-        lastQu: '上一',
-        nextQu: '下一',
+        column2: '分',
+        column3: '狀態',
+        finishScore: '已完成所有學生作答的評分!',
+        unableScore: '學生尚未作答,無法評分',
+        stStuWarning: '請先選擇學生!',
+        lastQu: '上一',
+        nextQu: '下一',
     },
 
     //SimpleAnalysis.vue
     simple: {
-        totalPeople: '总人数',
-        missExam: '缺考',
-        classLabel: '班',
-        sjLabel: '科',
+        totalPeople: '總人數',
+        missExam: '缺考',
+        classLabel: '班',
+        sjLabel: '科',
         avgScore: '平均分',
-        classStuCount: '班级人数',
+        classStuCount: '班級人數',
         answered: '已作答',
         unanswer: '未作答',
-        scored: '已评分',
-        unscore: '未评分',
-        noPublish: '评测尚未发布,暂无统计数据',
-        calcing: '成绩数据结算中,',
-        clickFresh: '点此刷新',
-        inCalc: '数据结算中,请稍后查看',
-        total: '总分',
-        avgScore: '均分统计',
-        totalLabel: '总量',
-        scoreMat: '分数段统计'
+        scored: '已評分',
+        unscore: '未評分',
+        noPublish: '評測尚未發佈,暫無統計資料',
+        calcing: '成績數據結算中,',
+        clickFresh: '點此重繪',
+        inCalc: '數據結算中,請稍後查看',
+        total: '總分',
+        avgScore: '均分統計',
+        totalLabel: '總量',
+        scoreMat: '分數段統計'
+    },
+
+    mark: {
+        baseSetting: '基礎設定',
+        markMode: '閱卷模式',
+        full: '完整閱卷',
+        question: '指定題目',
+        markNum: '閱卷次數',
+        allocation: '分配管道',
+        random: '隨機分配',
+        class: '按班分配',
+        scoreDiff: '分差',
+        markRole: '閱卷角色',
+        errRole: '異常處理:',
+        arb: '仲裁教師:',
+        markRole: '閱卷教師:',
+        noTea: '暫無教師',
+        remove: '移除',
+        addTea: '添加閱卷老師',
+        quDistrub: '題目分配',
+        quIndex: '題號',
+        markNum: '閱卷人數',
+        markTea: '閱卷教師',
+        stage: '活動階段',
+        test: '施測',
+        complete: '已完成',
+        scan: '掃描',
+        success: '成功',
+        fail: '失敗',
+        miss: '缺考',
+        mark: '閱卷',
+        markProg: '閱卷進度',
+        data: '資料統計',
+        dataView: '數據概覽',
+        scanOk: '掃描成功',
+        scanErr: '掃描失敗',
+        arbPaper: '仲裁試卷',
+        subData: '各科概覽',
+        assigned: '已分配',
+        unassigned: '未分配',
+        teaProgress: '教師閱卷進度',
+        schedule: '調度',
+        subject: '科目',
+        stuNum: '考試人數',
+        scanProg: '掃描進度',
+        assignStatus: '閱卷分配',
+        errDeclare: '异常申報',
+        arbDeclare: '仲裁申報',
+        markProg: '閱卷進度',
+        name: '姓名',
+        progress: '進度',
+        action: '操作'
+
     }
 }

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

@@ -34,7 +34,9 @@ export default{
         deleteErr:'删除失败',
         noJoin:'此账号暂未加入任何学校!',
         myEv:'我发布的评测',
-        teaEv:'任课老师发布的评测'
+        teaEv:'任课老师发布的评测',
+        markSetting:'阅卷配置',
+        markData:'阅卷数据'
     },
 
     //CreateEv
@@ -203,5 +205,57 @@ export default{
         avgScore:'均分统计',
         totalLabel:'总量',
         scoreMat:'分数段统计'
+    },
+
+    mark:{
+        baseSetting:'基础设置',
+        markMode:'阅卷模式',
+        full:'完整阅卷',
+        question:'指定题目',
+        markNum:'阅卷次数',
+        allocation:'分配方式',
+        random:'随机分配',
+        class:'按班分配',
+        scoreDiff:'分差',
+        markRole:'阅卷角色',
+        errRole:'异常处理:',
+        arb:'仲裁教师:',
+        markRole:'阅卷教师:',
+        noTea:'暂无教师',
+        remove:'移除',
+        addTea:'添加阅卷老师',
+        quDistrub:'题目分配',
+        quIndex:'题号',
+        markNum:'阅卷人数',
+        markTea:'阅卷教师',
+        stage:'活动阶段',
+        test:'施测',
+        complete:'已完成',
+        scan:'扫描',
+        success:'成功',
+        fail:'失败',
+        miss:'缺考',
+        mark:'阅卷',
+        markProg:'阅卷进度',
+        data:'数据统计',
+        dataView:'数据概览',
+        scanOk:'扫描成功',
+        scanErr:'扫描失败',
+        arbPaper:'仲裁试卷',
+        subData:'各科概览',
+        assigned:'已分配',
+        unassigned:'未分配',
+        teaProgress:'教师阅卷进度',
+        schedule:'调度',
+        subject:'科目',
+        stuNum:'考试人数',
+        scanProg:'扫描进度',
+        assignStatus:'阅卷分配',
+        errDeclare:'异常申报',
+        arbDeclare:'仲裁申报',
+        markProg:'阅卷进度',
+        name:'姓名',
+        progress:'进度',
+        action:'操作'
     }
 }

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

@@ -34,7 +34,9 @@ export default {
         deleteErr: '删除失敗',
         noJoin: '此帳號暫未加入任何學校!',
         myEv: '我發佈的評測',
-        teaEv: '任課老師發佈的評測'
+        teaEv: '任課老師發佈的評測',
+        markSetting: '閱卷配寘',
+        markData: '閱卷數據'
     },
 
     //創建評測校本/個人
@@ -203,5 +205,58 @@ export default {
         avgScore: '均分統計',
         totalLabel: '總量',
         scoreMat: '分數段統計'
+    },
+
+    mark: {
+        baseSetting: '基礎設定',
+        markMode: '閱卷模式',
+        full: '完整閱卷',
+        question: '指定題目',
+        markNum: '閱卷次數',
+        allocation: '分配管道',
+        random: '隨機分配',
+        class: '按班分配',
+        scoreDiff: '分差',
+        markRole: '閱卷角色',
+        errRole: '異常處理:',
+        arb: '仲裁教師:',
+        markRole: '閱卷教師:',
+        noTea: '暫無教師',
+        remove: '移除',
+        addTea: '添加閱卷老師',
+        quDistrub: '題目分配',
+        quIndex: '題號',
+        markNum: '閱卷人數',
+        markTea: '閱卷教師',
+        stage: '活動階段',
+        test: '施測',
+        complete: '已完成',
+        scan: '掃描',
+        success: '成功',
+        fail: '失敗',
+        miss: '缺考',
+        mark: '閱卷',
+        markProg: '閱卷進度',
+        data: '資料統計',
+        dataView: '數據概覽',
+        scanOk: '掃描成功',
+        scanErr: '掃描失敗',
+        arbPaper: '仲裁試卷',
+        subData: '各科概覽',
+        assigned: '已分配',
+        unassigned: '未分配',
+        teaProgress: '教師閱卷進度',
+        schedule: '調度',
+        subject: '科目',
+        stuNum: '考試人數',
+        scanProg: '掃描進度',
+        assignStatus: '閱卷分配',
+        errDeclare: '异常申報',
+        arbDeclare: '仲裁申報',
+        markProg: '閱卷進度',
+        name: '姓名',
+        progress: '進度',
+        action: '操作'
+
     }
 }

+ 3 - 3
TEAMModelOS/ClientApp/src/view/learnactivity/MgtPrivEva.vue

@@ -461,7 +461,7 @@ export default {
         }
     }
 }
-.test-paper-detail .paper-container{
-    padding-bottom: 30px;
-}
+// .test-paper-detail .paper-container{
+//     padding-bottom: 30px;
+// }
 </style>

+ 19 - 15
TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.less

@@ -96,7 +96,7 @@
         }
 
         .evalustion-bar-item {
-            margin-right: 30px;
+            margin-right: 10px;
             display: inline-block;
             cursor: pointer;
             line-height: 38px;
@@ -132,11 +132,12 @@
         }
 
         .evaluation-test-paper-header {
-            height: 45px;
-            line-height: 45px;
-            color: @second-textColor;
-            border-bottom: 1px solid @borderColor;
-            margin-bottom:15px;
+            height: 35px;
+            line-height: 35px;
+            color: #a5a5a5;
+            /* border-bottom: 1px solid #424242; */
+            margin-bottom: 5px;
+            margin-top: 5px;
         }
     }
 }
@@ -144,26 +145,29 @@
 .subject-item {
     display: inline-block;
     margin-right: 15px;
-    color: @second-textColor;
+    color: #a5a5a5;
     cursor: pointer;
-    line-height: 40px;
-    min-width: 50px;
-    font-size: 15px;
+    line-height: 22px;
+    min-width: 45px;
+    letter-spacing: 1px;
+    font-size: 14px;
     text-align: center;
-    margin-left: 15px;
+    margin-left: 8px;
 }
 
 .subject-item-active {
     color: @primary-textColor;
     border-bottom: 2px solid white;
-    font-weight: 500;
+    // font-weight: 500;
 }
 
 .test-paper-detail {
-    width: 100%;
-    // height: ~"calc(100% - 45px)";
-    height: 100%;
+    width: ~"calc(100% - 5px)";
+    height: ~"calc(100% - 45px)";
     color: white;
+    overflow: hidden;
+    border-radius: 5px;
+    background: white;
 }
 
 .question-type-count {

+ 35 - 14
TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue

@@ -15,9 +15,9 @@
                             <DropdownItem :name="item.id">{{ item.name }}</DropdownItem>
                         </DropdownMenu>
                     </Dropdown>
-                    <Icon type="md-add" class=" to-create-icon" @click="goToCreate" :title="$t('learnActivity.mgtScEv.create')" v-if="$access.can('admin.*|schoolAc-upd')"/>
-                    <Icon type="md-trash" v-show="evaListShow.length" class="to-create-icon" :title="$t('learnActivity.mgtScEv.delete')" @click="deleteEvaluation" v-if="$access.can('admin.*|schoolAc-upd')"/>
-                    <Icon type="md-create" v-show="evaListShow.length && evaListShow[curEvaIndex] && evaListShow[curEvaIndex].progress == 'pending'" class="to-create-icon" @click="editEvaluation" :title="$t('learnActivity.mgtScEv.edit')" v-if="$access.can('admin.*|schoolAc-upd')"/>
+                    <Icon type="md-add" class=" to-create-icon" @click="goToCreate" :title="$t('learnActivity.mgtScEv.create')" v-if="$access.can('admin.*|schoolAc-upd')" />
+                    <Icon type="md-trash" v-show="evaListShow.length" class="to-create-icon" :title="$t('learnActivity.mgtScEv.delete')" @click="deleteEvaluation" v-if="$access.can('admin.*|schoolAc-upd')" />
+                    <Icon type="md-create" v-show="evaListShow.length && evaListShow[curEvaIndex] && evaListShow[curEvaIndex].progress == 'pending'" class="to-create-icon" @click="editEvaluation" :title="$t('learnActivity.mgtScEv.edit')" v-if="$access.can('admin.*|schoolAc-upd')" />
                 </div>
                 <div class="evaluation-list-main">
                     <vuescroll>
@@ -63,6 +63,12 @@
                     <span :class="curBarIndex == 1 ? 'evalustion-bar-item line-bottom-active line-bottom':'evalustion-bar-item line-bottom'" @click="selectBar(1)">
                         {{$t('learnActivity.mgtScEv.tab2')}}
                     </span>
+                    <span v-show="evaListShow[curEvaIndex] && evaListShow[curEvaIndex].source == '2'" :class="curBarIndex == 2 ? 'evalustion-bar-item line-bottom-active line-bottom':'evalustion-bar-item line-bottom'" @click="selectBar(2)">
+                        {{$t('learnActivity.mgtScEv.markSetting')}}
+                    </span>
+                    <span v-show="evaListShow[curEvaIndex] && evaListShow[curEvaIndex].source == '2'" :class="curBarIndex == 3 ? 'evalustion-bar-item line-bottom-active line-bottom':'evalustion-bar-item line-bottom'" @click="selectBar(3)">
+                        {{$t('learnActivity.mgtScEv.markData')}}
+                    </span>
                     <div style="float:right;" v-if="$access.ability('admin','mock-eva').validateAll" v-show="evaListShow[curEvaIndex] && evaListShow[curEvaIndex].progress == 'going'">
                         <Tooltip :content="$t('learnActivity.mgtScEv.autoTips1')" :max-width="240">
                             <Button type="success" size="small" :loading="answerLoading" class="mock-stu-answer" @click="mockAnswer">{{$t('learnActivity.mgtScEv.autoAnswer')}}</Button>
@@ -97,6 +103,20 @@
                 <div :class="curBarIndex == 0 ? 'animated fadeIn evaluation-base-info':'evaluation-base-info animated fadeOutRight'" v-show="curBarIndex == 0">
                     <Scoring :examInfo="examDetaiInfo" ref="score-box"></Scoring>
                 </div>
+                <!-- 阅卷基础设置 -->
+                <div :class="curBarIndex == 2 ? 'animated fadeIn evaluation-base-info':'evaluation-base-info animated fadeOutRight'" v-show="curBarIndex == 2">
+                    <div class="evaluation-test-paper-header" v-if="evaListShow[curEvaIndex]">
+                        <span>{{$t('learnActivity.mgtScEv.evSubject')}}</span>
+                        <span v-for="(item,index) in evaListShow[curEvaIndex].subjects" :key="index" :class="index == curSubIndex ? 'subject-item subject-item-active':'subject-item'" @click="selectSubject(index)">
+                            {{item.name}}
+                        </span>
+                    </div>
+                    <MarkSetting></MarkSetting>
+                </div>
+                <!-- 阅卷数据 -->
+                <div :class="curBarIndex == 3 ? 'animated fadeIn evaluation-base-info':'evaluation-base-info animated fadeOutRight'" v-show="curBarIndex == 3">
+                    <MarkData></MarkData>
+                </div>
             </div>
         </Split>
     </div>
@@ -104,10 +124,11 @@
 <script>
 import TestPaper from '@/view/evaluation/index/TestPaper.vue'
 import Scoring from './Scoring.vue'
+import MarkSetting from './markpaper/MarkSetting.vue'
+import MarkData from './markpaper/MarkData.vue'
 export default {
     components: {
-        TestPaper,
-        Scoring
+        TestPaper, Scoring, MarkSetting, MarkData
     },
     inject: ['reload'],
     data() {
@@ -307,8 +328,8 @@ export default {
         },
         editEvaluation() {
             this.$router.push({
-                name:'createSchoolEva',
-                params:{
+                name: 'createSchoolEva',
+                params: {
                     evaluationInfo: this.examDetaiInfo
                 }
             })
@@ -329,10 +350,10 @@ export default {
 
         //查询评测列表
         findEvaluation() {
-            console.log('123456',this.$access.hasRole('admin'))
+            console.log('123456', this.$access.hasRole('admin'))
             let requestData = {
                 code: this.scope == 'school' ? this.$store.state.userInfo.schoolCode : this.$store.state.userInfo.TEAMModelId,
-                classIds:this.$access.hasRole('admin') ? undefined : this.$store.state.userInfo.teachClasses.concat(this.$store.state.userInfo.mgtClasses)
+                classIds: this.$access.hasRole('admin') ? undefined : this.$store.state.userInfo.teachClasses.concat(this.$store.state.userInfo.mgtClasses)
             }
             this.$api.learnActivity.FindExamInfo(requestData).then(
                 res => {
@@ -402,8 +423,8 @@ export default {
                             resData.papers[index].examScope = resData.scope
                             resData.papers[index].examId = resData.id
                             resData.papers[index] = await this.$evTools.getFullPaper(resData.papers[index])
-                            if(!resData.papers[index].subjectId){
-                                resData.papers[index].subjectId = blob.substring(blob.lastIndexOf('/')+1)
+                            if (!resData.papers[index].subjectId) {
+                                resData.papers[index].subjectId = blob.substring(blob.lastIndexOf('/') + 1)
                             }
                             resData.papers[index].blob = blob
                             resData.score += resData.papers[index].score
@@ -503,7 +524,7 @@ export default {
         }
     }
 }
-.test-paper-detail .paper-container{
-    padding-bottom: 30px;
-}
+// .test-paper-detail .paper-container {
+//     padding-bottom: 30px;
+// }
 </style>

+ 118 - 0
TEAMModelOS/ClientApp/src/view/learnactivity/echarts/CptCount.vue

@@ -0,0 +1,118 @@
+<template>
+    <div id="complete-count-box"></div>
+</template>
+<script>
+import elementResizeDetectorMaker from "element-resize-detector"
+export default {
+    data() {
+        return {
+            techScoreGau: undefined,
+            option: {
+                title: [
+                    {
+                        text: '96',
+                        x: '40%',
+                        y: '28%',
+                        textAlign: 'center',
+                        textStyle: {
+                            fontSize: '30',
+                            fontWeight: '600',
+                            color: '#ffffff',
+                            textAlign: 'center',
+                        },
+                    },
+                    {
+                        text: '/100',
+                        x: '58%',
+                        y: '38%',
+                        textAlign: 'center',
+                        textStyle: {
+                            fontSize: '12',
+                            fontWeight: '600',
+                            color: '#ffffff',
+                            textAlign: 'center',
+                        },
+                    },
+                    {
+                        text: '扫描进度',
+                        left: '48%',
+                        top: '58%',
+                        textAlign: 'center',
+                        textStyle: {
+                            fontSize: '12',
+                            fontWeight: '400',
+                            color: '#0FF',
+                            textAlign: 'center',
+                        },
+                    }
+                ],
+                polar: {
+                    radius: ['90%', '75%'],
+                    center: ['50%', '50%'],
+                },
+                angleAxis: {
+                    max: 100,
+                    show: false,
+                },
+                radiusAxis: {
+                    type: 'category',
+                    show: true,
+                    axisLabel: {
+                        show: false,
+                    },
+                    axisLine: {
+                        show: false,
+
+                    },
+                    axisTick: {
+                        show: false
+                    },
+                },
+                series: [{
+                    name: '',
+                    type: 'bar',
+                    roundCap: true,
+                    barWidth: 60,
+                    showBackground: true,
+                    backgroundStyle: {
+                        color: '#2e2856',
+                    },
+                    data: [80],
+                    coordinateSystem: 'polar',
+                    itemStyle: {
+                        normal: {
+                            color: new this.$echarts.graphic.LinearGradient(0, 1, 0, 0, [{
+                                offset: 0,
+                                color: '#585fe1'
+                            }, {
+                                offset: 1,
+                                color: '#0ff'
+                            }]),
+                        }
+                    }
+                }
+                ]
+            }
+        }
+    },
+    mounted() {
+        this.techScoreGau = this.$echarts.init(document.getElementById('complete-count-box'))
+        this.techScoreGau.setOption(this.option)
+        this.erd = elementResizeDetectorMaker()
+        this.erd.listenTo(document.getElementById("complete-count-box"), () => {
+            this.$nextTick(() => {
+                //监听到事件后执行的业务逻辑
+                this.techScoreGau.resize()
+            })
+        })
+    }
+}
+</script>
+<style lang="less" scoped>
+#complete-count-box {
+    width: 200px;
+    height: 120px;
+}
+</style>
+<style>
+</style>

+ 118 - 0
TEAMModelOS/ClientApp/src/view/learnactivity/echarts/MarkProgress.vue

@@ -0,0 +1,118 @@
+<template>
+    <div id="mark-progress-box"></div>
+</template>
+<script>
+import elementResizeDetectorMaker from "element-resize-detector"
+export default {
+    data() {
+        return {
+            techScoreGau: undefined,
+            option: {
+                title: [
+                    {
+                        text: '80',
+                        x: '44%',
+                        y: '27%',
+                        textAlign: 'center',
+                        textStyle: {
+                            fontSize: '32',
+                            fontWeight: '600',
+                            color: '#ffffff',
+                            textAlign: 'center',
+                        },
+                    },
+                    {
+                        text: '%',
+                        x: '58%',
+                        y: '38%',
+                        textAlign: 'center',
+                        textStyle: {
+                            fontSize: '14',
+                            fontWeight: '600',
+                            color: '#ffffff',
+                            textAlign: 'center',
+                        },
+                    },
+                    {
+                        text: '阅卷进度',
+                        left: '48%',
+                        top: '60%',
+                        textAlign: 'center',
+                        textStyle: {
+                            fontSize: '12',
+                            fontWeight: '400',
+                            color: '#0FF',
+                            textAlign: 'center',
+                        },
+                    }
+                ],
+                polar: {
+                    radius: ['90%', '75%'],
+                    center: ['50%', '50%'],
+                },
+                angleAxis: {
+                    max: 100,
+                    show: false,
+                },
+                radiusAxis: {
+                    type: 'category',
+                    show: true,
+                    axisLabel: {
+                        show: false,
+                    },
+                    axisLine: {
+                        show: false,
+
+                    },
+                    axisTick: {
+                        show: false
+                    },
+                },
+                series: [{
+                    name: '',
+                    type: 'bar',
+                    roundCap: true,
+                    barWidth: 60,
+                    showBackground: true,
+                    backgroundStyle: {
+                        color: '#2e2856',
+                    },
+                    data: [80],
+                    coordinateSystem: 'polar',
+                    itemStyle: {
+                        normal: {
+                            color: new this.$echarts.graphic.LinearGradient(0, 1, 0, 0, [{
+                                offset: 0,
+                                color: '#585fe1'
+                            }, {
+                                offset: 1,
+                                color: '#0ff'
+                            }]),
+                        }
+                    }
+                }
+                ]
+            }
+        }
+    },
+    mounted() {
+        this.techScoreGau = this.$echarts.init(document.getElementById('mark-progress-box'))
+        this.techScoreGau.setOption(this.option)
+        this.erd = elementResizeDetectorMaker()
+        this.erd.listenTo(document.getElementById("mark-progress-box"), () => {
+            this.$nextTick(() => {
+                //监听到事件后执行的业务逻辑
+                this.techScoreGau.resize()
+            })
+        })
+    }
+}
+</script>
+<style lang="less" scoped>
+#mark-progress-box {
+    width: 200px;
+    height: 120px;
+}
+</style>
+<style>
+</style>

+ 118 - 0
TEAMModelOS/ClientApp/src/view/learnactivity/echarts/ScanProgress.vue

@@ -0,0 +1,118 @@
+<template>
+    <div id="scan-progress-box"></div>
+</template>
+<script>
+import elementResizeDetectorMaker from "element-resize-detector"
+export default {
+    data() {
+        return {
+            techScoreGau: undefined,
+            option: {
+                title: [
+                    {
+                        text: '80',
+                        x: '44%',
+                        y: '27%',
+                        textAlign: 'center',
+                        textStyle: {
+                            fontSize: '32',
+                            fontWeight: '600',
+                            color: '#ffffff',
+                            textAlign: 'center',
+                        },
+                    },
+                    {
+                        text: '%',
+                        x: '58%',
+                        y: '38%',
+                        textAlign: 'center',
+                        textStyle: {
+                            fontSize: '14',
+                            fontWeight: '600',
+                            color: '#ffffff',
+                            textAlign: 'center',
+                        },
+                    },
+                    {
+                        text: '1000/1001',
+                        x: '48%',
+                        y: '58%',
+                        textAlign: 'center',
+                        textStyle: {
+                            fontSize: '12',
+                            fontWeight: '200',
+                            color: '#0FF',
+                            textAlign: 'center',
+                        },
+                    }
+                ],
+                polar: {
+                    radius: ['90%', '75%'],
+                    center: ['50%', '50%'],
+                },
+                angleAxis: {
+                    max: 100,
+                    show: false,
+                },
+                radiusAxis: {
+                    type: 'category',
+                    show: true,
+                    axisLabel: {
+                        show: false,
+                    },
+                    axisLine: {
+                        show: false,
+
+                    },
+                    axisTick: {
+                        show: false
+                    },
+                },
+                series: [{
+                    name: '',
+                    type: 'bar',
+                    roundCap: true,
+                    barWidth: 60,
+                    showBackground: true,
+                    backgroundStyle: {
+                        color: '#2e2856',
+                    },
+                    data: [80],
+                    coordinateSystem: 'polar',
+                    itemStyle: {
+                        normal: {
+                            color: new this.$echarts.graphic.LinearGradient(0, 1, 0, 0, [{
+                                offset: 0,
+                                color: '#585fe1'
+                            }, {
+                                offset: 1,
+                                color: '#0ff'
+                            }]),
+                        }
+                    }
+                }
+                ]
+            }
+        }
+    },
+    mounted() {
+        this.techScoreGau = this.$echarts.init(document.getElementById('scan-progress-box'))
+        this.techScoreGau.setOption(this.option)
+        this.erd = elementResizeDetectorMaker()
+        this.erd.listenTo(document.getElementById("scan-progress-box"), () => {
+            this.$nextTick(() => {
+                //监听到事件后执行的业务逻辑
+                this.techScoreGau.resize()
+            })
+        })
+    }
+}
+</script>
+<style lang="less" scoped>
+#scan-progress-box {
+    width: 200px;
+    height: 120px;
+}
+</style>
+<style>
+</style>

+ 398 - 0
TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkData.vue

@@ -0,0 +1,398 @@
+<template>
+    <div class="mark-data-wrap">
+        <vuescroll>
+            <!-- 活动阶段 -->
+            <div class="setting-block">
+                <p class="block-title">{{$t('learnActivity.mark.stage')}}</p>
+                <div class="setting-content step-content">
+                    <Steps :current="2" class="mark-step">
+                        <Step :title="$t('learnActivity.mark.test')" :content="$t('learnActivity.mark.complete')"></Step>
+                        <Step :title="$t('learnActivity.mark.scan')" :content="`${$t('learnActivity.mark.success')}:560/563 ${$t('learnActivity.mark.fail')}:1 ${$t('learnActivity.mark.miss')}:2`"></Step>
+                        <Step :title="$t('learnActivity.mark.mark')" :content="`${$t('learnActivity.mark.markProg')}:80%(420/563)`"></Step>
+                        <Step :title="$t('learnActivity.mark.data')" content=""></Step>
+                    </Steps>
+                </div>
+            </div>
+            <!-- 数据概览 -->
+            <div class="setting-block">
+                <p class="block-title">{{$t('learnActivity.mark.dataView')}}</p>
+                <div class="setting-content count-content">
+                    <div class="count-wrap">
+                        <p class="count-num">100</p>
+                        <p class="count-label">
+                            <Icon custom="iconfont icon-scanning" class="count-icon" size="16" />
+                            {{$t('learnActivity.mark.scanOk')}}
+                        </p>
+                    </div>
+                    <div class="count-wrap">
+                        <p class="count-num">0</p>
+                        <p class="count-label">
+                            <Icon type="md-warning" class="count-icon" size="16" />
+                            {{$t('learnActivity.mark.scanErr')}}
+                        </p>
+                    </div>
+                    <div class="count-wrap">
+                        <p class="count-num">1</p>
+                        <p class="count-label">
+                            <Icon type="ios-bug" class="count-icon" size="16" />
+                            {{$t('learnActivity.mark.errDeclare')}}
+                        </p>
+                    </div>
+                    <div class="count-wrap">
+                        <p class="count-num">2</p>
+                        <p class="count-label">
+                            <Icon custom="iconfont icon-arb" class="count-icon" size="16" />
+                            {{$t('learnActivity.mark.arbDeclare')}}
+                        </p>
+                    </div>
+                </div>
+            </div>
+            <!-- 各科概览 -->
+            <div class="setting-block">
+                <p class="block-title">{{$t('learnActivity.mark.subData')}}</p>
+                <div class="setting-content dark-iview-table">
+                    <Table :columns="subCol" :data="subData" class="sub-info-table">
+                        <template slot-scope="{ row }" slot="scanPerc">
+                            {{ `${row.scanNum}/${row.num}` }}
+                        </template>
+                        <template slot-scope="{ row }" slot="markPerc">
+                            {{ `${row.markNum}/${row.num}` }}
+                        </template>
+                        <template slot-scope="{ row }" slot="err">
+                            {{ `${row.handleErr}/${row.err}` }}
+                        </template>
+                        <template slot-scope="{ row }" slot="arb">
+                            {{ `${row.handleArb}/${row.arb}` }}
+                        </template>
+                        <template slot-scope="{ row }" slot="status">
+                            {{ row.status == 0 ? $t('learnActivity.mark.unassigned') : $t('learnActivity.mark.assigned')}}
+                        </template>
+                        <template slot-scope="{ row }" slot="progress">
+                            <div style="display: flex;justify-content: center;">
+                                <i-circle :percent="20" :size="40" :stroke-width="8" :trail-width="7" stroke-color="#ff5500">
+                                    <span>20%</span>
+                                </i-circle>
+                            </div>
+                        </template>
+                    </Table>
+                </div>
+            </div>
+            <!-- 教师阅卷进度 -->
+            <div class="setting-block">
+                <p class="block-title">{{$t('learnActivity.mark.teaProgress')}}</p>
+                <div class="setting-content dark-iview-table">
+                    <Table :columns="teaCol" :data="teaData" class="sub-info-table">
+                        <template slot-scope="{ row }" slot="header">
+                            <PersonalPhoto :name="row.name" :picture="row.picture" />
+                        </template>
+                        <template slot-scope="{ row }" slot="progress">
+                            <div style="display: flex;justify-content: center;">
+                                <i-circle :percent="100" :size="40" :stroke-width="8" :trail-width="7" stroke-color="#5cb85c">
+                                    <!-- <span class="demo-Circle-inner">80%</span> -->
+                                    <Icon type="ios-checkmark" size="30" style="color:#5cb85c"></Icon>
+                                </i-circle>
+                            </div>
+                        </template>
+                        <template slot-scope="{ row }" slot="err">
+                            {{ `${row.handleErr}/${row.err}` }}
+                        </template>
+                        <template slot-scope="{ row }" slot="arb">
+                            {{ `${row.handleArb}/${row.arb}` }}
+                        </template>
+                        <template slot-scope="{ row }" slot="status">
+                            {{ row.status == 0 ? $t('learnActivity.mark.unassigned') : $t('learnActivity.mark.assigned') }}
+                        </template>
+                        <template slot-scope="{ row }" slot="action">
+                            <Button type="info" size="small">{{$t('learnActivity.mark.schedule')}}</Button>
+                        </template>
+                    </Table>
+                </div>
+            </div>
+        </vuescroll>
+    </div>
+</template>
+<script>
+import MarkProgress from '../echarts/MarkProgress.vue'
+import ScanProgress from '../echarts/ScanProgress.vue'
+import CptCount from '../echarts/CptCount.vue'
+import PersonalPhoto from "@/components/public/personalPhoto/Index.vue"
+export default {
+    components: {
+        MarkProgress, CptCount, ScanProgress, PersonalPhoto
+    },
+    data() {
+        return {
+            isShowSet: true,
+            subCol: [
+                {
+                    title: this.$t('learnActivity.mark.subject'),
+                    key: 'name',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.stuNum'),
+                    key: 'num',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.scanProg'),
+                    slot: 'scanPerc',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.assignStatus'),
+                    slot: 'status',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.errDeclare'),
+                    slot: 'err',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.arbDeclare'),
+                    slot: 'arb',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.markProg'),
+                    slot: 'markPerc',
+                    align: 'center'
+                },
+                {
+                    title: ' ',
+                    slot: 'progress',
+                    align: 'center'
+                }
+            ],
+            subData: [
+                {
+                    name: '语文',
+                    num: 563,
+                    scanNum: 560,
+                    status: 0,
+                    markNum: 400,
+                    err: 1,
+                    handleErr: 1,
+                    arb: 0,
+                    handleArb: 0
+                },
+                {
+                    name: '数学',
+                    num: 563,
+                    scanNum: 560,
+                    status: 0,
+                    markNum: 400,
+                    err: 1,
+                    handleErr: 1,
+                    arb: 0,
+                    handleArb: 0
+                },
+                {
+                    name: '英语',
+                    num: 563,
+                    scanNum: 560,
+                    status: 0,
+                    markNum: 400,
+                    err: 1,
+                    handleErr: 1,
+                    arb: 0,
+                    handleArb: 0
+                }
+            ],
+            teaCol: [
+                {
+                    title: ' ',
+                    slot: 'header',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.name'),
+                    key: 'name',
+                    align: 'center'
+                },
+                {
+                    title:  this.$t('learnActivity.mark.subject'),
+                    key: 'subject',
+                    align: 'center'
+                },
+
+                {
+                    title: this.$t('learnActivity.mark.errDeclare'),
+                    slot: 'err',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.arbDeclare'),
+                    slot: 'arb',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.progress'),
+                    slot: 'progress',
+                    align: 'center'
+                },
+                {
+                    title: this.$t('learnActivity.mark.action'),
+                    slot: 'action',
+                    align: 'center'
+                }
+            ],
+            teaData: [
+                {
+                    name: '李芷萱',
+                    subject: '语文',
+                    compNum: 23,
+                    num: 50,
+                    err: 1,
+                    handleErr: 1,
+                    arb: 0,
+                    handleArb: 0
+                },
+                {
+                    name: '李芷萱',
+                    subject: '语文',
+                    compNum: 2,
+                    num: 50,
+                    err: 1,
+                    handleErr: 1,
+                    arb: 0,
+                    handleArb: 0
+                },
+                {
+                    name: '李芷萱',
+                    subject: '语文',
+                    compNum: 18,
+                    num: 50,
+                    err: 1,
+                    handleErr: 1,
+                    arb: 0,
+                    handleArb: 0
+                },
+                {
+                    name: '李芷萱',
+                    subject: '语文',
+                    compNum: 39,
+                    num: 50,
+                    err: 1,
+                    handleErr: 1,
+                    arb: 0,
+                    handleArb: 0
+                },
+            ]
+        }
+    },
+    methods: {
+
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="less">
+.mark-data-wrap {
+    height: 100%;
+}
+.setting-block:first-child {
+    margin-top: 20px;
+}
+.setting-block:first-child .setting-content {
+    // background: none;
+    padding: 25px 10px 25px 25px;
+}
+
+.setting-content {
+    background: #404042;
+    padding: 15px 10px;
+    border-radius: 5px;
+    margin-right: 12px;
+    margin-top: 8px;
+    box-shadow: 0 26px 40px -24px rgb(30, 31, 33);
+}
+.setting-item-wrap {
+    margin-bottom: 10px;
+    padding-right: 15px;
+}
+.block-title {
+    color: white;
+    border-left: 2px solid #1cc0f3;
+    line-height: 12px;
+    padding-left: 4px;
+    user-select: none;
+}
+.setting-block {
+    margin-top: 30px;
+}
+.count-wrap {
+    flex: 1;
+    text-align: center;
+    color: white;
+    width: 200px;
+    position: relative;
+    .count-icon {
+        color: #a5a5a5;
+    }
+    .count-num {
+        font-size: 40px;
+    }
+    .count-label {
+        color: #a5a5a5;
+    }
+}
+.count-wrap::after {
+    content: "";
+    width: 2px;
+    height: 30px;
+    background: #a5a5a5;
+    position: absolute;
+    right: 0px;
+    top: 50%;
+    margin-top: -15px;
+}
+.count-wrap:last-child::after {
+    display: none;
+}
+.count-content {
+    display: flex;
+}
+.chart-wrap {
+    flex: 1;
+    color: #fff;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+}
+.mark-step {
+    padding: 0px 40px 0px 20px;
+}
+</style>
+<style lang="less">
+.step-content {
+    .ivu-steps .ivu-steps-title,
+    .ivu-steps .ivu-steps-head {
+        background: #404042;
+    }
+    .ivu-steps-item.ivu-steps-status-finish .ivu-steps-title,
+    .ivu-steps-item.ivu-steps-status-process .ivu-steps-title {
+        color: white;
+    }
+    .ivu-steps-item.ivu-steps-status-finish .ivu-steps-head-inner {
+        background-color: #404042;
+        border-color: #1cc0f3;
+    }
+    .ivu-steps-item.ivu-steps-status-finish .ivu-steps-tail > i:after {
+        background: #1cc0f3;
+    }
+    .ivu-steps-item.ivu-steps-status-finish .ivu-steps-head-inner span,
+    .ivu-steps-item.ivu-steps-status-finish
+        .ivu-steps-head-inner
+        > .ivu-steps-icon {
+        color: #1cc0f3;
+    }
+    .ivu-steps-item.ivu-steps-status-process .ivu-steps-content {
+        color: white;
+    }
+}
+</style>

+ 336 - 0
TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue

@@ -0,0 +1,336 @@
+<template>
+    <div class="mark-setting-wrap dark-iview-form">
+        <vuescroll>
+            <div class="setting-block">
+                <p class="block-title">
+                    {{$t('learnActivity.mark.baseSetting')}}
+                </p>
+                <div class="setting-content">
+                    <Form :model="setting" label-colon :label-width="80">
+                        <Row>
+                            <Col :md="24" :lg="24" :xl="12" :xxl="12">
+                            <FormItem :label="$t('learnActivity.mark.markMode')" class="setting-item-wrap">
+                                <RadioGroup v-model="setting.mode">
+                                    <Radio :label="$t('learnActivity.mark.full')"></Radio>
+                                    <Radio :label="$t('learnActivity.mark.question')"></Radio>
+                                </RadioGroup>
+                            </FormItem>
+                            </Col>
+                            <Col :md="24" :lg="24" :xl="12" :xxl="12">
+                            <FormItem :label="$t('learnActivity.mark.markNum')" class="setting-item-wrap">
+                                <InputNumber :max="2" :min="1" v-model="setting.num"></InputNumber>
+                            </FormItem>
+                            </Col>
+                        </Row>
+                        <Row>
+                            <Col :md="24" :lg="24" :xl="12" :xxl="12">
+                            <FormItem :label="$t('learnActivity.mark.allocation')" class="setting-item-wrap">
+                                <RadioGroup v-model="setting.mode">
+                                    <Radio :label="$t('learnActivity.mark.random')"></Radio>
+                                    <Radio :label="$t('learnActivity.mark.class')"></Radio>
+                                </RadioGroup>
+                            </FormItem>
+                            </Col>
+                            <Col :md="24" :lg="24" :xl="12" :xxl="12">
+                            <FormItem :label="$t('learnActivity.mark.scoreDiff')" class="setting-item-wrap">
+                                <InputNumber :max="2" :min="1" v-model="setting.err"></InputNumber>
+                            </FormItem>
+                            </Col>
+                        </Row>
+                    </Form>
+                </div>
+            </div>
+
+            <div class="setting-block">
+                <p class="block-title">
+                    {{$t('learnActivity.mark.markRole')}}
+                </p>
+                <div class="setting-content">
+                    <Row>
+                        <Col :md="24" :lg="24" :xl="12" :xxl="12">
+                        <div class="role-item-wrap">
+                            <span class="role-label">{{$t('learnActivity.mark.errRole')}}</span>
+                            <Select v-model="setting.err" style="width:400px" multiple>
+                                <Option value="beijing">New York</Option>
+                                <Option value="shanghai">London</Option>
+                                <Option value="shenzhen">Sydney</Option>
+                            </Select>
+                        </div>
+                        </Col>
+                        <Col :md="24" :lg="24" :xl="12" :xxl="12">
+                        <div class="role-item-wrap">
+                            <span class="role-label">{{$t('learnActivity.mark.arb')}}</span>
+                            <Select v-model="setting.err1" style="width:400px" multiple>
+                                <Option value="beijing">New York</Option>
+                                <Option value="shanghai">London</Option>
+                                <Option value="shenzhen">Sydney</Option>
+                            </Select>
+                        </div>
+                        </Col>
+                    </Row>
+                    <div class="role-item-wrap dark-iview-table">
+                        <span class="role-label" style="vertical-align: top;">{{$t('learnActivity.mark.markRole')}}</span>
+                        <div class="scan-tea-table">
+                            <Table :columns="teaCol" :data="teaData" border :no-data-text="$t('learnActivity.mark.noTea')">
+                                <template slot-scope="{ row }" slot="header">
+                                    <PersonalPhoto :name="row.name" :picture="row.picture" />
+                                </template>
+                                <template slot-scope="{ row }" slot="action">
+                                    <Button type="error" size="small">{{$t('learnActivity.mark.remove')}}</Button>
+                                </template>
+                            </Table>
+                            <span class="add-tea-btn">
+                                <Icon type="md-add" />
+                                {{$t('learnActivity.mark.addTea')}}
+                            </span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="setting-block">
+                <p class="block-title">
+                    {{$t('learnActivity.mark.quDistrub')}}
+                </p>
+                <div class="setting-content dark-iview-table">
+                    <Table :columns="quCol" :data="quData" border :no-data-text="$t('learnActivity.mark.noTea')">
+                        <template slot-scope="{ row }" slot="quNo">
+                            {{row.quNo.join(',')}}
+                        </template>
+                        <template slot-scope="{ row }" slot="teaNum">
+                            {{row.teachers.length}}
+                        </template>
+                        <template slot-scope="{ row }" slot="teachers">
+                            {{row.teachers.join(',')}}
+                        </template>
+                    </Table>
+                </div>
+            </div>
+        </vuescroll>
+    </div>
+</template>
+<script>
+import MarkProgress from '../echarts/MarkProgress.vue'
+import ScanProgress from '../echarts/ScanProgress.vue'
+import CptCount from '../echarts/CptCount.vue'
+import PersonalPhoto from "@/components/public/personalPhoto/Index.vue"
+export default {
+    data() {
+        return {
+            setting: {
+                mode: '',//阅卷模式
+                num: 0,//阅卷次数
+                err: [],//处理异常卷人员
+                arb: [],//处理冲裁卷人员
+                marker: [],//阅卷老师
+                point: 2,//分差(仲裁条件)
+                quRule: [],//题目分配规则
+            },
+            teaCol: [
+                {
+                    title: ' ',
+                    slot: 'header',
+                    align: 'center'
+                },
+                {
+                    title: '姓名',
+                    key: 'name',
+                    align: 'center'
+                },
+                {
+                    title: '手机',
+                    key: 'phone',
+                    align: 'center'
+                },
+                {
+                    title: '阅卷量',
+                    key: 'num',
+                    align: 'center'
+                },
+                {
+                    title: '',
+                    slot: 'action',
+                    align: 'center'
+                },
+            ],
+            teaData: [
+                {
+                    name: '测试老师',
+                    phone: '13096300695',
+                    num: '100/563'
+                },
+                {
+                    name: '测试老师',
+                    phone: '13096300695',
+                    num: '100/563'
+                },
+                {
+                    name: '测试老师',
+                    phone: '13096300695',
+                    num: '100/563'
+                }
+            ],
+            quCol: [
+                {
+                    title: this.$t('learnActivity.mark.quIndex'),
+                    slot: 'quNo',
+                    align: 'center',
+                    width: 180
+                },
+                {
+                    title: this.$t('learnActivity.mark.markNum'),
+                    slot: 'teaNum',
+                    align: 'center',
+                    width: 150
+                },
+                {
+                    title: this.$t('learnActivity.mark.markTea'),
+                    slot: 'teachers',
+                },
+            ],
+            quData: [
+                {
+                    quNo: [1, 2, 3],
+                    teachers: [
+                        'JK',
+                        '尹航',
+                        '向奕然',
+                        '高嘉妍',
+                        '刘雨菡',
+                        'jefftest',
+                        '李芷萱',
+                    ]
+                },
+                {
+                    quNo: [4, 5, 6],
+                    teachers: [
+                        'JK',
+                        '尹航',
+                        '向奕然',
+                        '高嘉妍',
+                        '刘雨菡',
+                        'jefftest',
+                        '李芷萱',
+                        '刘雨菡',
+                        'jefftest',
+                        '李芷萱',
+                    ]
+                },
+                {
+                    quNo: [7, 8],
+                    teachers: [
+                        'JK',
+                        '尹航',
+                        '向奕然',
+                        '高嘉妍',
+                        '刘雨菡',
+                        'jefftest',
+                        '李芷萱',
+                    ]
+                }
+            ]
+        }
+    },
+    components: {
+        MarkProgress, CptCount, ScanProgress, PersonalPhoto
+    },
+    methods: {
+
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="less">
+.mark-setting-wrap {
+    height: calc(100% - 45px);
+    padding-bottom: 5px;
+    color: white;
+}
+.setting-block:first-child {
+    margin-top: 10px;
+}
+
+.setting-content {
+    background: #404042;
+    padding: 10px;
+    border-radius: 5px;
+    margin-right: 12px;
+    margin-top: 5px;
+}
+.setting-item-wrap {
+    margin-bottom: 10px;
+    padding-right: 15px;
+}
+.block-title {
+    color: white;
+    border-left: 2px solid #1cc0f3;
+    line-height: 14px;
+    padding-left: 5px;
+    user-select: none;
+}
+.setting-block {
+    margin-top: 30px;
+}
+.count-wrap {
+    flex: 1;
+    text-align: center;
+    color: white;
+    width: 200px;
+    position: relative;
+    .count-icon {
+        color: #a5a5a5;
+    }
+    .count-num {
+        font-size: 40px;
+    }
+    .count-label {
+        color: #a5a5a5;
+    }
+}
+.count-wrap::after {
+    content: "";
+    width: 2px;
+    height: 30px;
+    background: #a5a5a5;
+    position: absolute;
+    right: 0px;
+    top: 50%;
+    margin-top: -15px;
+}
+.count-wrap:last-child::after {
+    display: none;
+}
+.count-content {
+    display: flex;
+}
+.chart-wrap {
+    flex: 1;
+    color: #fff;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+}
+.role-item-wrap {
+    margin: 5px 0px;
+    .role-label {
+        color: #a5a5a5;
+        display: inline-block;
+        width: 120px;
+        text-align: right;
+        padding-right: 10px;
+    }
+}
+.scan-tea-table {
+    width: calc(100% - 120px);
+    display: inline-block;
+}
+.add-tea-btn {
+    color: white;
+    margin-top: 8px;
+    display: inline-block;
+    cursor: pointer;
+    user-select: none;
+}
+</style>

+ 5 - 0
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -67,6 +67,11 @@ namespace TEAMModelOS.Controllers
                 string code = request.code;
                 request.code = "Exam-" + request.code;
                 request.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                request.startTime = request.startTime == -1 ? DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() : request.startTime;
+/*
+                if (request.startTime == -1) {
+                    request.startTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                }*/
                 int stuCount = 0;
                 for (int i = 0; i < request.classes.Count; i++)
                 {