Browse Source

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

CrazyIter_Bin 3 years ago
parent
commit
4ffbbda32f
30 changed files with 736 additions and 185 deletions
  1. 2 2
      TEAMModelOS/ClientApp/src/assets/student-web/component_styles/course-content.css
  2. 2 2
      TEAMModelOS/ClientApp/src/assets/student-web/component_styles/course-content.less
  3. 3 0
      TEAMModelOS/ClientApp/src/assets/student-web/component_styles/course-list.css
  4. 3 0
      TEAMModelOS/ClientApp/src/assets/student-web/component_styles/course-list.less
  5. 22 41
      TEAMModelOS/ClientApp/src/common/BaseLayout.vue
  6. 64 6
      TEAMModelOS/ClientApp/src/components/student-web/HomeView/CourseContent.vue
  7. 52 34
      TEAMModelOS/ClientApp/src/components/student-web/HomeView/CourseList.vue
  8. 2 0
      TEAMModelOS/ClientApp/src/locale/lang/en-US/index.js
  9. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/en-US/schoolBaseInfo.js
  10. 16 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/studentWeb.js
  11. 19 0
      TEAMModelOS/ClientApp/src/locale/lang/en-US/tip.js
  12. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/schoolBaseInfo.js
  13. 16 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/studentWeb.js
  14. 17 5
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/tip.js
  15. 12 12
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/schoolBaseInfo.js
  16. 17 2
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/studentWeb.js
  17. 13 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/tip.js
  18. 338 0
      TEAMModelOS/ClientApp/src/static/twJsonT.js
  19. 6 7
      TEAMModelOS/ClientApp/src/store/module/answerSheet.js
  20. 2 3
      TEAMModelOS/ClientApp/src/view/answersheet/BaseEditor.vue
  21. 7 1
      TEAMModelOS/ClientApp/src/view/learnactivity/CreatePrivEva.vue
  22. 7 1
      TEAMModelOS/ClientApp/src/view/learnactivity/CreateSchoolEva.vue
  23. 6 0
      TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue
  24. 18 6
      TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue
  25. 22 16
      TEAMModelOS/ClientApp/src/view/schoolmgmt/SystemSetting/SystemSetting.vue
  26. 31 10
      TEAMModelOS/ClientApp/src/view/settings/BaseApplyForm.vue
  27. 2 2
      TEAMModelOS/ClientApp/src/view/settings/SchoolMgmt.vue
  28. 3 0
      TEAMModelOS/ClientApp/src/view/student-account/stuMgt/ImportStudent.vue
  29. 9 7
      TEAMModelOS/ClientApp/src/view/student-account/stuMgt/StuMgt.vue
  30. 19 19
      TEAMModelOS/ClientApp/src/view/student-web/App.vue

+ 2 - 2
TEAMModelOS/ClientApp/src/assets/student-web/component_styles/course-content.css

@@ -5,7 +5,7 @@
 .course-content {
   position: relative;
   float: right;
-  width: 65%;
+  width: 50%;
   padding: 2% 3%;
   height: auto;
 }
@@ -133,7 +133,7 @@
   border: 1px solid rgba(0, 0, 0, 0.1);
   display: inline-block;
   padding: 10px;
-  width: 18%;
+  width: 22%;
   position: relative;
   margin: 10px;
 }

+ 2 - 2
TEAMModelOS/ClientApp/src/assets/student-web/component_styles/course-content.less

@@ -3,7 +3,7 @@
 .course-content {
   position: relative;
   float: right;
-  width: 65%;
+  width: 50%;
   padding: 2% 3%;
   height: auto;
   @media screen and (max-width: 991px){
@@ -133,7 +133,7 @@
     border: 1px solid @border;
     display: inline-block;
     padding: 10px;
-    width: 18%;
+    width: 22%;
     position: relative;
     margin: 10px;
 

+ 3 - 0
TEAMModelOS/ClientApp/src/assets/student-web/component_styles/course-list.css

@@ -2,6 +2,9 @@
 /*回傳的狀態文字,標題段落的方框,分頁*/
 /*標題類型的標記,編序教材附件按鈕*/
 /*各類項目的懸停與選中狀態*/
+.course-list .list {
+  width: 49.1%;
+}
 .course-list .tableViewBtn,
 .course-list .listViewBtn {
   display: inline-block;

+ 3 - 0
TEAMModelOS/ClientApp/src/assets/student-web/component_styles/course-list.less

@@ -1,6 +1,9 @@
 @import "color.less";
 
 .course-list {
+  .list{
+    width: 49.1%;
+  }
   .tableViewBtn,.listViewBtn{
     display: inline-block;
    position: fixed;

+ 22 - 41
TEAMModelOS/ClientApp/src/common/BaseLayout.vue

@@ -38,6 +38,9 @@
                                     <Icon v-show="!isCollapsed" class="sub-menu-icon" :custom="menuItem.icon" size="16" />
                                     <span>
                                         {{menuItem.name}}
+                                        <Tooltip v-show="menuItem.info" :content="menuItem.info" transfer theme="light" max-width="180">
+                                            <Icon type="ios-information-circle-outline" color="#1cc0f3"/>
+                                        </Tooltip>
                                         <span style="color: aqua;margin-left: 2px;font-size: 12px;vertical-align: text-top;">
                                             {{menuItem.tag}}
                                         </span>
@@ -51,11 +54,13 @@
                                 <Icon v-show="!isCollapsed" :custom="item.icon" :class="isCollapsed ? 'collapse-icon-size':''" size="16" />
                                 <span>
                                     {{item.name}}
+                                    <Tooltip v-show="item.info" :content="item.info" theme="light" transfer max-width="180">
+                                        <Icon type="ios-information-circle-outline" color="#1cc0f3" />
+                                    </Tooltip>
                                     <span style="color: aqua;margin-left: 2px;font-size: 12px;vertical-align: text-top;">
                                         {{item.tag}}
                                     </span>
                                 </span>
-
                                 </MenuItem>
                             </div>
                         </div>
@@ -77,6 +82,9 @@
                                 <Icon v-show="!isCollapsed" class="sub-menu-icon" :custom="menuItem.icon" size="16" />
                                 <span>
                                     {{menuItem.name}}
+                                    <Tooltip v-show="menuItem.info" :content="menuItem.info" transfer theme="light" max-width="180">
+                                        <Icon type="ios-information-circle-outline" color="#1cc0f3"/>
+                                    </Tooltip>
                                     <span style="color: aqua;margin-left: 2px;font-size: 12px;vertical-align: text-top;">
                                         {{menuItem.tag}}
                                     </span>
@@ -90,6 +98,9 @@
                             <Icon v-show="!isCollapsed" :custom="item.icon" :class="isCollapsed ? 'collapse-icon-size':''" size="16" />
                             <span>
                                 {{item.name}}
+                                <Tooltip v-show="item.info" :content="item.info" theme="light" transfer max-width="180">
+                                    <Icon type="ios-information-circle-outline" color="#1cc0f3"/>
+                                </Tooltip>
                                 <span style="color: aqua;margin-left: 2px;font-size: 12px;margin-top:3px">
                                     {{item.tag}}
                                 </span>
@@ -250,7 +261,8 @@ export default {
                             tag: '',
                             role: 'admin|teacher',
                             permission: 'knowledge-read|knowledge-upd',
-                            menuName: 'knowledge'
+                            menuName: 'knowledge',
+                            info: this.$t('tip.menuKlg')
                         }
                     ]
                 },
@@ -292,38 +304,6 @@ export default {
                         },
                     ]
                 },
-                // 统计分析 暂时隐藏,只保留学情分析
-                // {
-                //     icon: 'iconfont icon-analysis',
-                //     name: this.$t('system.menu.staAna'),
-                //     router: '',
-                //     role: 'admin',
-                //     subName: 'analysis',
-                //     permission: 'analysis-read|scboard-read',
-                //     child: [
-                //         // 学情分析
-                //         {
-                //             icon: 'iconfont icon-xueqing',
-                //             name: this.$t('system.menu.evAna'),
-                //             router: '/totalIndex',
-                //             tag: '',
-                //             role: 'admin',
-                //             permission: 'analysis-read',
-                //             menuName: 'totalIndex'
-                //         },
-                //         // 校园分析
-                //         {
-                //             icon: 'iconfont icon-school-analysis',
-                //             name: this.$t('system.menu.scAna'),
-                //             router: '/home/scboard',
-                //             tag: this.$t('system.menu.preview'),
-                //             role: 'admin',
-                //             permission: 'scboard-read',
-                //             menuName: 'scboard'
-                //         }
-                //     ]
-                // },
-
                 // 学情分析
                 {
                     icon: 'iconfont icon-xueqing',
@@ -370,7 +350,8 @@ export default {
                     permission: '',
                     child: [],
                     menuName: 'myCourse',
-                    isShow: true
+                    isShow: true,
+                    info: this.$t('tip.myCus')
                 },
                 // 我的资源
                 {
@@ -486,7 +467,8 @@ export default {
                     permission: '',
                     child: [],
                     menuName: 'taskList',
-                    isShow: this.$store.state.userInfo.hasSchool
+                    isShow: this.$store.state.userInfo.hasSchool,
+                    info: this.$t('tip.task')
                 }
             ]
         },
@@ -572,7 +554,7 @@ export default {
     position: relative;
     color: white;
 }
-.ivu-menu-item-group{
+.ivu-menu-item-group {
     position: relative;
 }
 .biz-menu .ivu-menu-vertical .ivu-menu-item-group::after {
@@ -583,16 +565,15 @@ export default {
     position: absolute;
     right: 0px;
     bottom: -10px;
-    box-shadow:0px 12px 8px -12px #000;
+    box-shadow: 0px 12px 8px -12px #000;
 }
-.biz-menu  .ivu-menu-item-group:nth-child(2)::after {
+.biz-menu .ivu-menu-item-group:nth-child(2)::after {
     background: transparent;
 }
-.biz-menu  .ivu-menu-item-group:nth-child(2) {
+.biz-menu .ivu-menu-item-group:nth-child(2) {
     margin-top: 30px;
 }
 
-
 .biz-menu .ivu-menu-item-group:first-child {
     margin-top: 0px;
 }

+ 64 - 6
TEAMModelOS/ClientApp/src/components/student-web/HomeView/CourseContent.vue

@@ -98,7 +98,26 @@
                 <!-- 同学名单 -->
                 <TabPane :label="$t('studentWeb.courseContent.classmates')" name="tab3">
                     <div v-if="isChangeGroupView == false">
-                        <Row :gutter="50">
+                        <div>
+                            <table>
+                                <tr>
+                                    <th>{{ $t("studentWeb.courseContent.seatNo") }}</th>
+                                    <th>{{ $t("studentWeb.courseContent.name") }}</th>
+                                    <th>{{ $t("studentWeb.courseContent.group") }}</th>
+                                </tr>
+                                <tr class="mates-list-item"
+                                    v-for="(item, index) in stuList"
+                                     :class="{ 'my-name': item.id == $store.state.userInfo.sub }"
+                                    :key="index"
+                                >
+                                    <td>{{ item.no }}</td>
+                                    <td>{{ item.name }}</td>
+                                    <td v-if="item.groupName">{{ item.groupName }}</td>
+                                    <td v-else>暂未分组</td>
+                                </tr>
+                            </table>
+                        </div>
+                        <!-- <Row :gutter="50">
                             <i-col :xs="24" :sm="24" :md="12" :lg="12">
                                 <table>
                                     <tr>
@@ -113,9 +132,9 @@
                                     >
                                         <td>{{ item.no }}</td>
                                         <td>{{ item.name }}</td>
-                                        <!-- <td v-if="currentLang == 'zh-cn'">第{{ item.group }}组</td>
+                                        <td v-if="currentLang == 'zh-cn'">第{{ item.group }}组</td>
                                         <td v-else-if="currentLang == 'zh-tw'">第{{ item.group }}組</td>
-                                        <td v-else-if="currentLang == 'en-us'">{{ item.group }}</td> -->
+                                        <td v-else-if="currentLang == 'en-us'">{{ item.group }}</td>
                                     </tr>
                                 </table>
                             </i-col>
@@ -148,11 +167,32 @@
                                     </tr>
                                 </table>
                             </i-col>
-                        </Row>
+                        </Row> -->
                     </div>
                     <!--小組模式-->
                     <div v-if="isChangeGroupView == true">
                         <Card class="group-student"
+                            v-for="(group, gIndex) in stuGroup"
+                            :key="gIndex">
+                            <h3 class="group-title" v-if="group.name">
+                                {{ group.name }}
+                            </h3>
+                            <h3 class="group-title" v-else>暂未分组</h3>
+                            <table>
+                                <tr v-for="item in group.info"
+                                    :key="item.no"
+                                >
+                                    <td class="student-no" :class="{ 'my-name': item.id == $store.state.userInfo.sub }">
+                                        {{ item.no }}
+                                    </td>
+                                    <td class="student-name" :class="{ 'my-name': item.id == $store.state.userInfo.sub }">
+                                        {{ item.name }}
+                                        <span v-if="item.id == $store.state.userInfo.sub">{{  currentLang == "en-us" ? "(me)" : "(我)" }}</span>
+                                    </td>
+                                </tr>
+                            </table>
+                        </Card>
+                        <!-- <Card class="group-student"
                             v-for="groupNo in 5"
                             :key="groupNo"
                             :class="{ 'group-studentEn': currentLang == 'en-us' }"
@@ -180,7 +220,7 @@
                                     </td>
                                 </tr>
                             </table>
-                        </Card>
+                        </Card> -->
                     </div>
                 </TabPane>
             </Tabs>
@@ -215,6 +255,7 @@ export default {
                 cn: "星期五"
             }],
             stuList: [],
+            stuGroup: [],
             teacherList: []
         };
     },
@@ -239,7 +280,21 @@ export default {
                 ids: [course.classId]
             }
             this.$api.studentWeb.getClassroomStudent(req).then(res => {
-                this.stuList = res.stus[0]
+                this.stuList = this._.cloneDeep(res.stus[0])
+                for (let i = 0; i < res.stus[0].length; i++) {
+                    this.stuGroup.push({
+                        id: res.stus[0][i].groupId,
+                        name: res.stus[0][i].groupName,
+                        info: [res.stus[0][i]]
+                    })
+                    for (let j = i + 1; j < res.stus[0].length; j++) {
+                        if(res.stus[0][i].groupId == res.stus[0][j].groupId) {
+                            this.stuGroup[i].info.push(res.stus[0][j])
+                            res.stus[0].splice(j,1)
+                            j--
+                        }
+                    }
+                }
             })
         },
         // 查找学生(个人)
@@ -291,6 +346,9 @@ export default {
                             }
                         }
                     }
+                    if(n.roomName == "") {
+                        n.roomName = "暂无教室"
+                    }
                     // 获取学生名单
                     if(n.course.classId != "") {
                         this.findStuInfor(this.courseNow.course)

+ 52 - 34
TEAMModelOS/ClientApp/src/components/student-web/HomeView/CourseList.vue

@@ -76,6 +76,7 @@
 
                             <div class="list-table">
                                 <Table :columns="courseTime"
+                                        border
                                         :data="timeTable"
                                         v-show="currentView == 'table'"
                                         :disabled-hover="true"
@@ -244,29 +245,44 @@ export default {
             onlyStu: true, //是不是学生
             courseTime: [
                 {
-                    title: "time",
+                    title: this.$t("studentWeb.week.time"),
                     slot: "time",
-                    width: "150"
+                    width: "140"
                 },
                 {
-                    title: "Mon",
+                    title: this.$t("studentWeb.week.mon"),
                     slot: "Mon",
+                    width: "115"
                 },
                 {
-                    title: "Tue",
-                    slot: "Tue"
+                    title: this.$t("studentWeb.week.tue"),
+                    slot: "Tue",
+                    width: "115"
                 },
                 {
-                    title: "Wed",
-                    slot: "Wed"
+                    title: this.$t("studentWeb.week.wed"),
+                    slot: "Wed",
+                    width: "115"
                 },
                 {
-                    title: "Thu",
-                    slot: "Thu"
+                    title: this.$t("studentWeb.week.thu"),
+                    slot: "Thu",
+                    width: "115"
                 },
                 {
-                    title: "Fri",
-                    slot: "Fri"
+                    title: this.$t("studentWeb.week.fri"),
+                    slot: "Fri",
+                    width: "115"
+                },
+                {
+                    title: this.$t("studentWeb.week.sat"),
+                    // slot: "Fri",
+                    width: "100"
+                },
+                {
+                    title: this.$t("studentWeb.week.sun"),
+                    // slot: "Fri",
+                    width: "100"
                 }
             ],
             courseList: this.$api.studentWeb.courseList, //moke数据
@@ -313,31 +329,33 @@ export default {
                     var personList = []
                     var list = res.courses
                     for (let i = 0; i < list.length; i++) {
-                        for (let j = 0; j < list[i].course.schedule.length; j++) {
-                            // 有classId,表定课程
-                            if(list[i].course.schedule[j].classId == list[i].stuCourse.classId[0]) {
-                                if(list[i].course.schedule[j].time.length > 0) {
-                                    for (let m = 0; m < list[i].course.schedule[j].time.length; m++) {
-                                        var data = this._.cloneDeep(list[i].course)
-                                        delete data.schedule
-                                        data.school = list[i].stuCourse.school
-                                        data.scope = list[i].stuCourse.scope
-                                        // 拼接得到一个唯一的标识
-                                        data.unique = 'class' + list[i].course.no + list[i].course.schedule[j].time[m].week + list[i].course.schedule[j].time[m].id
-                                        fixList.push(this.getNewClass(data, list[i].course.schedule[j], m))
+                        if(list[i].course) {
+                            for (let j = 0; j < list[i].course.schedule.length; j++) {
+                                // 有classId,表定课程
+                                if(list[i].course.schedule[j].classId == list[i].stuCourse.classId[0]) {
+                                    if(list[i].course.schedule[j].time.length > 0) {
+                                        for (let m = 0; m < list[i].course.schedule[j].time.length; m++) {
+                                            var data = this._.cloneDeep(list[i].course)
+                                            delete data.schedule
+                                            data.school = list[i].stuCourse.school
+                                            data.scope = list[i].stuCourse.scope
+                                            // 拼接得到一个唯一的标识
+                                            data.unique = 'class' + list[i].course.no + list[i].course.schedule[j].time[m].week + list[i].course.schedule[j].time[m].id
+                                            fixList.push(this.getNewClass(data, list[i].course.schedule[j], m))
+                                        }
                                     }
                                 }
-                            }
-                            // 有stulist,临时课程
-                            else if (list[i].course.schedule[j].stulist) {
-                                if(list[i].course.schedule[j].time.length > 0) {
-                                    for (let m = 0; m < list[i].course.schedule[j].time.length; m++) {
-                                        var data = this._.cloneDeep(list[i].course)
-                                        delete data.schedule
-                                        data.school = list[i].stuCourse.school
-                                        data.scope = list[i].stuCourse.scope
-                                        data.unique = 'person' + list[i].course.no + list[i].course.schedule[j].time[m].week + list[i].course.schedule[j].time[m].id
-                                        personList.push(this.getNewClass(data, list[i].course.schedule[j], m))
+                                // 有stulist,临时课程
+                                else if (list[i].course.schedule[j].stulist) {
+                                    if(list[i].course.schedule[j].time.length > 0) {
+                                        for (let m = 0; m < list[i].course.schedule[j].time.length; m++) {
+                                            var data = this._.cloneDeep(list[i].course)
+                                            delete data.schedule
+                                            data.school = list[i].stuCourse.school
+                                            data.scope = list[i].stuCourse.scope
+                                            data.unique = 'person' + list[i].course.no + list[i].course.schedule[j].time[m].week + list[i].course.schedule[j].time[m].id
+                                            personList.push(this.getNewClass(data, list[i].course.schedule[j], m))
+                                        }
                                     }
                                 }
                             }

+ 2 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/index.js

@@ -28,6 +28,7 @@ import updModal from './updModal'
 import task from './task'
 import utils from './utils'
 import user from './user'
+import tip from './tip'
 
 export default {
   schoolBaseInfo,
@@ -61,6 +62,7 @@ export default {
   task,
   utils,
   user,
+  tip,
   formConfigP: {
     input: 'Please Enter ',
     select: 'Please Sele',

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

@@ -70,10 +70,10 @@ export default {
   noExam: '暂无考试类型',
   eugenicsLabel: '优生率:',
   eugenicsTips: '优生率计算方式',
-  incomeLable: '进线:',
-  incomeTips: '(进线人数)/(报名人数)×100%',
+  incomeLable: '进线:',
+  incomeTips: '根据学校参考人数,设定考试前百分之多少人数为进线,取该范围内最后一名分数作为进线分数,计算进线生',
   touchLabel: '踩线生:',
-  touchTips: '踩线生计算方式',
+  touchTips: '学校预设一个分值,学生成绩在合格分数以上且不超过该分值范围',
   scoreUnit: '分',
   delExamTitle: '删除考试类型',
   delGradeTitle: '删除年级',

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

@@ -22,6 +22,19 @@ export default {
         search: 'Please enter the query content...',
         notice: '此功能暂未开放!'
     },
+    type: {
+        home: "首页",
+        activity: "活动",
+        studyview: "自主学习",
+        hiteach: "HiTeach课堂记录",
+        note: "通知",
+        all: "全部",
+        preview: "课前预习",
+        exam: "评测",
+        homework: "作业",
+        vote: "投票",
+        survey: "问卷",
+    },
     state: [
         {
             type: 'all',
@@ -449,7 +462,9 @@ export default {
         syllabus: 'Syllabus overview',
         seatNo: 'seat number',
         name: 'Name',
-        group: 'Group'
+        group: 'Group',
+        no1: "Group",
+        no2: ""
     },
     'calendar-title': 'Calendar-Second semester of 109 school year',
     today: 'Today',

+ 19 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/tip.js

@@ -0,0 +1,19 @@
+export default {
+	importPaper: '您可将设置好的试卷 Word 档案透过此功能转换成系统试卷运用于课堂测验、学生线上测验或是阅卷考试运用',
+	volumeList: '依照学科管理课纲清单,并建立该课纲的各个目录',
+	addVolumeResource: '建立课纲目录后依照各种资源来新增课纲教材',
+	knowledge: '依据学科建立对应的校本知识点,于题库中使用以利学情分析数据确实。教师所建立的线上试题,需遵循此知识点库所定义的知识点规范。',
+	knowledgeBlock: '各个建立完成的知识点,能够组合为该学科的知识块',
+	myCus: '提供课程学生名单管理、课堂纪录、评量活动纪录查询。',
+	task: '学校指派的阅卷批改任务',
+	menuKlg: '依据学科建立对应的校本知识点,题库中使用以利学情分析数据。教师所建立的线上试题,需遵循此知识点库所定义的知识点规范。',
+	cusClass: '1.學生可運用行動裝置掃碼加入您所建立的課程,參予此課程相關活動。\n2.若有學校指派課程名單,教師亦可選用該名單',
+	cusType: '标准课程:学校分配的课程,不允许自行新增、修改、删除。 \n个人课程:您自己创建的课程,可以根据需要进行修改和调整。',
+	semester: '您可自行设定学校的学期、学期区间以及目前的学期状态。',
+	time: '可设定学校作息时间,用于设置课程表。若未设置则无法设置课表。',
+	stuModel:'Id:学生学号\npw:密码(若不输入,预设值等于学生学号)\nname:学生姓名\nstuYear:学生入学年ex:2020\nclassName:学生班级ex:一年一班\nclassYear :班级年,通常与学生入学年相同ex:2020\nclassId:班级编号ex:20200101',
+	cusInfo:'依据学校定义的学科,建立所属归类的课程 Ex:”语文”学科下的 “阅读理解”',
+	cusTea:'加入负责该类课程授课的所有授课教师',
+	sCusClass:'加入教师该课程所负责的学生班级',
+	examMode:'进行评量的方式有三种:\n1.线上评量:具备授权的学生可直接登入醍摩豆云平台学生帐号,直接于平台上选择评量活动进行测验。 \n2.课中评量:教师于课堂上使用HiTeach智慧教学系统的测验模式直接进行评测。 \n3. 阅卷评量:透过纸本考试的方式进行测验,作答纸本透过阅卷方式导入平台运用。'
+}

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

@@ -70,10 +70,10 @@ export default {
   noExam: '暂无考试类型',
   eugenicsLabel: '优生率:',
   eugenicsTips: '优生率计算方式',
-  incomeLable: '进线:',
-  incomeTips: '(进线人数)/(报名人数)×100%',
+  incomeLable: '进线:',
+  incomeTips: '根据学校参考人数,设定考试前百分之多少人数为进线,取该范围内最后一名分数作为进线分数,计算进线生',
   touchLabel: '踩线生:',
-  touchTips: '踩线生计算方式',
+  touchTips: '学校预设一个分值,学生成绩在合格分数以上且不超过该分值范围',
   scoreUnit: '分',
   delExamTitle: '删除考试类型',
   delGradeTitle: '删除年级',

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

@@ -22,6 +22,19 @@ export default {
         search: '请输入查询内容...',
         notice: '此功能暂未开放!'
     },
+    type: {
+        home: "首页",
+        activity: "活动",
+        studyview: "自主学习",
+        hiteach: "HiTeach课堂记录",
+        note: "通知",
+        all: "全部",
+        preview: "课前预习",
+        exam: "评测",
+        homework: "作业",
+        vote: "投票",
+        survey: "问卷",
+    },
     state: [
         {
             type: 'all',
@@ -449,7 +462,9 @@ export default {
         syllabus: '课纲概览',
         seatNo: '座号',
         name: '姓名',
-        group: '组别'
+        group: '组别',
+        no1: "第",
+        no2: "组"
     },
     'calendar-title': '行事历 - 109学年度第二学期',
     today: '今天',

+ 17 - 5
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/tip.js

@@ -1,7 +1,19 @@
 export default {
-    importPaper:'您可将设置好的试卷 Word 档案透过此功能转换成系统试卷运用于课堂测验、学生线上测验或是阅卷考试运用',
-	volumeList:'依照学科管理课纲清单,并建立该课纲的各个目录',
-	addVolumeResource:'建立课纲目录后依照各种资源来新增课纲教材',
-	knowledge:'依据学科建立对应的校本知识点,于题库中使用以利学情分析数据确实。教师所建立的线上试题,需遵循此知识点库所定义的知识点规范。',
-	knowledgeBlock:'各个建立完成的知识点,能够组合为该学科的知识块'
+	importPaper: '您可将设置好的试卷 Word 档案透过此功能转换成系统试卷运用于课堂测验、学生线上测验或是阅卷考试运用',
+	volumeList: '依照学科管理课纲清单,并建立该课纲的各个目录',
+	addVolumeResource: '建立课纲目录后依照各种资源来新增课纲教材',
+	knowledge: '依据学科建立对应的校本知识点,于题库中使用以利学情分析数据确实。教师所建立的线上试题,需遵循此知识点库所定义的知识点规范。',
+	knowledgeBlock: '各个建立完成的知识点,能够组合为该学科的知识块',
+	myCus: '提供课程学生名单管理、课堂纪录、评量活动纪录查询。',
+	task: '学校指派的阅卷批改任务',
+	menuKlg: '依据学科建立对应的校本知识点,题库中使用以利学情分析数据。教师所建立的线上试题,需遵循此知识点库所定义的知识点规范。',
+	cusClass: '1.學生可運用行動裝置掃碼加入您所建立的課程,參予此課程相關活動。\n2.若有學校指派課程名單,教師亦可選用該名單',
+	cusType: '标准课程:学校分配的课程,不允许自行新增、修改、删除。 \n个人课程:您自己创建的课程,可以根据需要进行修改和调整。',
+	semester: '您可自行设定学校的学期、学期区间以及目前的学期状态。',
+	time: '可设定学校作息时间,用于设置课程表。若未设置则无法设置课表。',
+	stuModel:'Id:学生学号\npw:密码(若不输入,预设值等于学生学号)\nname:学生姓名\nstuYear:学生入学年ex:2020\nclassName:学生班级ex:一年一班\nclassYear :班级年,通常与学生入学年相同ex:2020\nclassId:班级编号ex:20200101',
+	cusInfo:'依据学校定义的学科,建立所属归类的课程 Ex:”语文”学科下的 “阅读理解”',
+	cusTea:'加入负责该类课程授课的所有授课教师',
+	sCusClass:'加入教师该课程所负责的学生班级',
+	examMode:'进行评量的方式有三种:\n1.线上评量:具备授权的学生可直接登入醍摩豆云平台学生帐号,直接于平台上选择评量活动进行测验。 \n2.课中评量:教师于课堂上使用HiTeach智慧教学系统的测验模式直接进行评测。 \n3. 阅卷评量:透过纸本考试的方式进行测验,作答纸本透过阅卷方式导入平台运用。'
 }

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

@@ -70,10 +70,10 @@ export default {
   noExam: '暫無考試類型',
   eugenicsLabel: '優生率:',
   eugenicsTips: '優生率計算方式',
-  incomeLable: '進線:',
-  incomeTips: '(進線人數)/(報名人數)×100%',
+  incomeLable: '進線:',
+  incomeTips: '根據學校參考人數,設定考試前百分之多少人數為進線,取該範圍內最後一名分數作為進線分數,計算進線生',
   touchLabel: '踩線生:',
-  touchTips: '踩線生計算方式',
+  touchTips: '學校預設一個分值,學生成績在合格分數以上且不超過該分值範圍',
   scoreUnit: '分',
   delExamTitle: '删除考試類型',
   delGradeTitle: '删除年級',
@@ -196,15 +196,15 @@ export default {
   addOk: '添加成功',
   addErr: '添加失敗',
   cusTabel: '課程表',
-  setCusTable:'設置課表',
+  setCusTable: '設置課表',
 
   //ClassMgt.vue
-  className:'名稱',
-  yearGrade:'學級/年級',
-  untimed:'未到入學時間',
-  graduated:'已畢業',
-  classLabel:'班級',
-  profession:'專業學科',
-  noProfession:'暫未設置專業',
-  all:'全部',
+  className: '名稱',
+  yearGrade: '學級/年級',
+  untimed: '未到入學時間',
+  graduated: '已畢業',
+  classLabel: '班級',
+  profession: '專業學科',
+  noProfession: '暫未設置專業',
+  all: '全部',
 }

+ 17 - 2
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/studentWeb.js

@@ -22,6 +22,19 @@ export default {
         search: '請輸入查詢內容...',
         notice: '此功能暫未開放!'
     },
+    type: {
+        home: "首頁",
+        activity: "活動",
+        studyview: "自主學習",
+        hiteach: "HiTeach課堂記錄",
+        note: "通知",
+        all: "全部",
+        preview: "課前預習",
+        exam: "評測",
+        homework: "作业",
+        vote: "投票",
+        survey: "問卷",
+    },
     state: [
         {
             type: 'all',
@@ -70,7 +83,7 @@ export default {
         'Habook-smart-school': 'HABOOK智慧學校'
     },
     'homeView-title': '首頁資訊總覽',
-    calenderCardTitle: '行事',
+    calenderCardTitle: '行事',
     recentClass: '近期上課提醒',
     defaultRecentClass: '微處理機基礎與應用概論',
     defaultClassTime: '星期三 13:30 - 16:30 (第7-9節)',
@@ -449,7 +462,9 @@ export default {
         syllabus: '課程要目概覽',
         seatNo: '座號',
         name: '姓名',
-        group: '組別'
+        group: '組別',
+        no1: "第",
+        no2: "組"
     },
     'calendar-title': '行事歷 - 109學年度第二學期',
     today: '今天',

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

@@ -4,5 +4,17 @@ export default {
 	volumeList:'依照學科管理課綱清單,並建立該課綱的各個目錄',
 	addVolumeResource:'建立課綱目錄後依照各種資源來新增課綱教材',
 	knowledge:'依據學科建立對應的校本知識點,於題庫中使用以利學情分析數據確實。教師所建立的線上試題,需遵循此知識點庫所定義的知識點規範。',
-	knowledgeBlock:'各個建立完成的知識點,能夠組合為該學科的知識塊'
+	knowledgeBlock:'各個建立完成的知識點,能夠組合為該學科的知識塊',
+	myCus:'提供課程學生名單管理、課堂紀錄、評量活動紀錄查詢。',
+	task:'學校指派的閱卷批改任務',
+	menuKlg:'依據學科建立對應的校本知識點,於題庫中使用以利學情分析數據確實。教師所建立的線上試題,需遵循此知識點庫所定義的知識點規範。',
+	cusClass:'1.學生可運用行動裝置掃碼加入您所建立的課程,參予此課程相關活動。\n2.若有學校指派課程名單,教師亦可選用該名單',
+	cusType:'標準課程:學校分配的課程,不允許自行新增、修改、刪除。 \n個人課程:您自己創建的課程,可以根據需要進行修改和調整。',
+	semester:'您可自行設定學校的學期、學期區間以及目前的學期狀態。',
+	time:'可設定學校作息時間,以利課程課表的產出。 若未設置則無法產出課表運用。',
+	stuModel:'Id:學生學號\npw:密碼(若不輸入,預設值等於學生學號)\nname:學生姓名\nstuYear:學生入學年 ex:2020\nclassName:學生班級 ex:一年一班\nclassYear:班級年,通常與學生入學年相同 ex:2020\nclassId:班級編號 ex:20200101',
+	cusInfo:'依據學校定義的學科,建立所屬歸類的課程 Ex:”語文”學科下的 “閱讀理解”',
+	cusTea:'加入負責該類課程授課的所有授課教師',
+	sCusClass:'加入教師於該課程所負責的學生班級',
+	examMode:'進行評量的方式有三種:\n1.線上自主評量,具備授權的學生可直接登入醍摩豆雲平台學生帳號,直接於平台上選擇評量活動進行測驗。\n2.智慧教室評量,教師於課堂上使用HiTeach智慧教學系統的測驗模式直接進行評測。\n3.	卷卡合一評量,透過紙本考試的方式進行測驗,作答紙本透過閱卷方式導入平台運用。'
 }

+ 338 - 0
TEAMModelOS/ClientApp/src/static/twJsonT.js

@@ -0,0 +1,338 @@
+export default [
+        {
+            "areas": [
+                {
+                    "area": "中正區",
+                    "areaID": "710101"
+                },
+                {
+                    "area": "大同區",
+                    "areaID": "710102"
+                },
+                {
+                    "area": "中山區",
+                    "areaID": "710103"
+                },
+                {
+                    "area": "松山區",
+                    "areaID": "710104"
+                },
+                {
+                    "area": "大安區",
+                    "areaID": "710105"
+                },
+                {
+                    "area": "萬華區",
+                    "areaID": "710106"
+                },
+                {
+                    "area": "信義區",
+                    "areaID": "710107"
+                },
+                {
+                    "area": "士林區",
+                    "areaID": "710108"
+                },
+                {
+                    "area": "北投區",
+                    "areaID": "710109"
+                },
+                {
+                    "area": "內湖區",
+                    "areaID": "710110"
+                },
+                {
+                    "area": "南港區",
+                    "areaID": "710111"
+                },
+                {
+                    "area": "文山區",
+                    "areaID": "710112"
+                },
+                {
+                    "area": "其它區",
+                    "areaID": "710113"
+                }
+            ],
+            "city": "臺北市",
+            "cityID": "710100"
+        },
+        {
+            "areas": [
+                {
+                    "area": "新興區",
+                    "areaID": "710201"
+                },
+                {
+                    "area": "前金區",
+                    "areaID": "710202"
+                },
+                {
+                    "area": "芩雅區",
+                    "areaID": "710203"
+                },
+                {
+                    "area": "鹽埕區",
+                    "areaID": "710204"
+                },
+                {
+                    "area": "鼓山區",
+                    "areaID": "710205"
+                },
+                {
+                    "area": "旗津區",
+                    "areaID": "710206"
+                },
+                {
+                    "area": "前鎮區",
+                    "areaID": "710207"
+                },
+                {
+                    "area": "三民區",
+                    "areaID": "710208"
+                },
+                {
+                    "area": "左營區",
+                    "areaID": "710209"
+                },
+                {
+                    "area": "楠梓區",
+                    "areaID": "710210"
+                },
+                {
+                    "area": "小港區",
+                    "areaID": "710211"
+                },
+                {
+                    "area": "其它區",
+                    "areaID": "710212"
+                }
+            ],
+            "city": "高雄市",
+            "cityID": "710200"
+        },
+        {
+            "areas": [
+                {
+                    "area": "中西區",
+                    "areaID": "710301"
+                },
+                {
+                    "area": "東區",
+                    "areaID": "710302"
+                },
+                {
+                    "area": "南區",
+                    "areaID": "710303"
+                },
+                {
+                    "area": "北區",
+                    "areaID": "710304"
+                },
+                {
+                    "area": "安平區",
+                    "areaID": "710305"
+                },
+                {
+                    "area": "安南區",
+                    "areaID": "710306"
+                },
+                {
+                    "area": "其它區",
+                    "areaID": "710307"
+                }
+            ],
+            "city": "臺南市",
+            "cityID": "710300"
+        },
+        {
+            "areas": [
+                {
+                    "area": "中區",
+                    "areaID": "710401"
+                },
+                {
+                    "area": "東區",
+                    "areaID": "710402"
+                },
+                {
+                    "area": "南區",
+                    "areaID": "710403"
+                },
+                {
+                    "area": "西區",
+                    "areaID": "710404"
+                },
+                {
+                    "area": "北區",
+                    "areaID": "710405"
+                },
+                {
+                    "area": "北屯區",
+                    "areaID": "710406"
+                },
+                {
+                    "area": "西屯區",
+                    "areaID": "710407"
+                },
+                {
+                    "area": "南屯區",
+                    "areaID": "710408"
+                },
+                {
+                    "area": "其它區",
+                    "areaID": "710409"
+                }
+            ],
+            "city": "臺中市",
+            "cityID": "710400"
+        },
+        {
+            "areas": [],
+            "city": "金門縣",
+            "cityID": "710500"
+        },
+        {
+            "areas": [],
+            "city": "南投縣",
+            "cityID": "710600"
+        },
+        {
+            "areas": [
+                {
+                    "area": "仁愛區",
+                    "areaID": "710701"
+                },
+                {
+                    "area": "信義區",
+                    "areaID": "710702"
+                },
+                {
+                    "area": "中正區",
+                    "areaID": "710703"
+                },
+                {
+                    "area": "中山區",
+                    "areaID": "710704"
+                },
+                {
+                    "area": "安樂區",
+                    "areaID": "710705"
+                },
+                {
+                    "area": "暖暖區",
+                    "areaID": "710706"
+                },
+                {
+                    "area": "七堵區",
+                    "areaID": "710707"
+                },
+                {
+                    "area": "其它區",
+                    "areaID": "710708"
+                }
+            ],
+            "city": "基隆市",
+            "cityID": "710700"
+        },
+        {
+            "areas": [
+                {
+                    "area": "東區",
+                    "areaID": "710801"
+                },
+                {
+                    "area": "北區",
+                    "areaID": "710802"
+                },
+                {
+                    "area": "香山區",
+                    "areaID": "710803"
+                },
+                {
+                    "area": "其它區",
+                    "areaID": "710804"
+                }
+            ],
+            "city": "新竹市",
+            "cityID": "710800"
+        },
+        {
+            "areas": [
+                {
+                    "area": "東區",
+                    "areaID": "710901"
+                },
+                {
+                    "area": "西區",
+                    "areaID": "710902"
+                },
+                {
+                    "area": "其它區",
+                    "areaID": "710903"
+                }
+            ],
+            "city": "嘉義市",
+            "cityID": "710900"
+        },
+        {
+            "areas": [],
+            "city": "新北市",
+            "cityID": "711100"
+        },
+        {
+            "areas": [],
+            "city": "宜蘭縣",
+            "cityID": "711200"
+        },
+        {
+            "areas": [],
+            "city": "新竹縣",
+            "cityID": "711300"
+        },
+        {
+            "areas": [],
+            "city": "桃園縣",
+            "cityID": "711400"
+        },
+        {
+            "areas": [],
+            "city": "苗栗縣",
+            "cityID": "711500"
+        },
+        {
+            "areas": [],
+            "city": "彰化縣",
+            "cityID": "711700"
+        },
+        {
+            "areas": [],
+            "city": "嘉義縣",
+            "cityID": "711900"
+        },
+        {
+            "areas": [],
+            "city": "雲林縣",
+            "cityID": "712100"
+        },
+        {
+            "areas": [],
+            "city": "屏東縣",
+            "cityID": "712400"
+        },
+        {
+            "areas": [],
+            "city": "臺東縣",
+            "cityID": "712500"
+        },
+        {
+            "areas": [],
+            "city": "花蓮縣",
+            "cityID": "712600"
+        },
+        {
+            "areas": [],
+            "city": "澎湖縣",
+            "cityID": "712700"
+        }
+    ]

+ 6 - 7
TEAMModelOS/ClientApp/src/store/module/answerSheet.js

@@ -105,12 +105,13 @@ export default {
 		},
 		// 设置信息填写区域的配置数据
 		setInfoConfig(state, val) {
-			val.index = state.config.contents.filter(i => i.pageNum === val.pageNum && !i.isFix).length + ''
+			val.index = 1
 			val.x = Number(val.x.toFixed())
 			val.y = Number(val.y.toFixed())
 			val.width = Number(val.width.toFixed())
 			val.height = Number(val.height.toFixed())
 			val.count = 0
+			val.id = val.pageNum + '-' + val.index
 			if(state.config.contents.length){
 				let infoItem = state.config.contents.find(i => i.type === 0)
 				if(infoItem){
@@ -124,11 +125,12 @@ export default {
 		},
 		// 设置客观题区域的配置数据
 		setObjectiveConfig(state,val){
-			val.index = state.config.contents.filter(i => i.pageNum === val.pageNum && !i.isFix).length + ''
+			val.index = state.config.contents.filter(i => i.pageNum === val.pageNum).length + 1
 			val.x = Number(val.x.toFixed())
 			val.y = Number(val.y.toFixed())
 			val.width = Number(val.width.toFixed())
 			val.height = Number(val.height.toFixed())
+			val.id = val.pageNum + '-' + val.index
 			if(state.config.contents.length){
 				let infoItem = state.config.contents.find(i => i.type === 1)
 				if(infoItem){
@@ -143,15 +145,12 @@ export default {
 		},
 		setSubjectiveConfig(state,val){
 			console.log(val.id,val.pageNum)
-			if(val.isFix){
-				val.index = null
-			}else{
-				val.index = state.config.contents.filter(i => i.pageNum === val.pageNum && !i.isFix).length + ''
-			}
+			val.index = state.config.contents.filter(i => i.pageNum === val.pageNum).length + 1
 			val.x = Number(val.x.toFixed())
 			val.y = Number(val.y.toFixed())
 			val.width = Number(val.width.toFixed())
 			val.height = Number(val.height.toFixed())
+			val.id = val.pageNum + '-' + val.index
 			val.count = 0
 			if(state.config.contents.length){
 				let infoItem = state.config.contents.find(i => i.id === val.id)

+ 2 - 3
TEAMModelOS/ClientApp/src/view/answersheet/BaseEditor.vue

@@ -133,7 +133,6 @@
 					"width": INFO_W,
 					"height": height,
 					"pageNum": pageNum,
-					"id":this.curItemId || '',
 					"isFix":isFix || false
 				} 
 				this.$store.commit('setSubjectiveConfig', itemConfig)
@@ -256,7 +255,7 @@
 								this.$store.commit("addPage");
 								let heightArr = []
 								this.myEditor.config.height = leftHeight + 20;
-								this.setSubjectiveConfig(curEditorY,leftHeight + 20,curItemWhichPage)
+								this.setSubjectiveConfig(curEditorY,leftHeight + 20,curItemWhichPage,true)
 								heightArr.push(leftHeight)
 								// 如果渲染的客观题高度在这个区间 才需要在下一页添加补充作答区域 其余全部按照正常 跨页处理不需要补充作答区域
 								let fixCount = Math.ceil(fixHeight / SVG_BORDER_PROP.height)
@@ -400,7 +399,7 @@
 								this.$store.commit("addPage");
 								let heightArr = []
 								this.myEditor.config.height = leftHeight + 20;
-								this.setSubjectiveConfig(curEditorY,leftHeight + 20,curItemWhichPage)
+								this.setSubjectiveConfig(curEditorY,leftHeight + 20,curItemWhichPage,true)
 								heightArr.push(leftHeight)
 								console.log(fixHeight)
 								// 如果渲染的客观题高度在这个区间 才需要在下一页添加补充作答区域 其余全部按照正常 跨页处理不需要补充作答区域

+ 7 - 1
TEAMModelOS/ClientApp/src/view/learnactivity/CreatePrivEva.vue

@@ -18,7 +18,13 @@
                             <FormItem :label="$t('learnActivity.createEv.evName')" prop="name">
                                 <Input v-model="evaluationInfo.name" :placeholder="$t('learnActivity.createEv.evName')"></Input>
                             </FormItem>
-                            <FormItem :label="$t('learnActivity.createEv.evMode')" prop="source">
+                            <FormItem prop="source">
+                                <label slot="label" style="width:200px">
+                                    <span>{{$t('learnActivity.createEv.evMode')}}</span>
+                                    <Tooltip :content="$t('tip.examMode')" transfer theme="light" max-width="300">
+                                        <Icon type="ios-information-circle-outline" color="#1cc0f3" style="margin-left:5px"/>
+                                    </Tooltip>
+                                </label>
                                 <Select v-model="evaluationInfo.source">
                                     <Option v-for="(item,index) in $GLOBAL.EV_MODE()" :value="item.value" :key="index">{{ item.label }}</Option>
                                 </Select>

+ 7 - 1
TEAMModelOS/ClientApp/src/view/learnactivity/CreateSchoolEva.vue

@@ -23,7 +23,13 @@
                                     <Option v-for="(item,index) in $store.state.user.schoolProfile.periods" :value="item.id" :key="index">{{ item.name }}</Option>
                                 </Select>
                             </FormItem>
-                            <FormItem :label="$t('learnActivity.createEv.evMode')" prop="source">
+                            <FormItem prop="source">
+                                <label slot="label" style="width:200px">
+                                    <span>{{$t('learnActivity.createEv.evMode')}}</span>
+                                    <Tooltip :content="$t('tip.examMode')" transfer theme="light" max-width="300">
+                                        <Icon type="ios-information-circle-outline" color="#1cc0f3" style="margin-left:5px"/>
+                                    </Tooltip>
+                                </label>
                                 <Select v-model="evaluationInfo.source">
                                     <Option v-for="(item,index) in $GLOBAL.EV_MODE()" :value="item.value" :key="index">{{ item.label }}</Option>
                                 </Select>

+ 6 - 0
TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue

@@ -11,6 +11,9 @@
                             <b class="title">{{ cusTypeLabel }}</b>
                             <Icon type="ios-arrow-down" style="margin-left:8px;"></Icon>
                         </span>
+                        <Tooltip :content="$t('tip.cusType')" transfer theme="light" max-width="200">
+                            <Icon type="ios-information-circle-outline" color="#1cc0f3" style="margin-left:5px" />
+                        </Tooltip>
                         <DropdownMenu slot="list" v-for="(item,index) in cusType" :value="item.value" :key="index">
                             <DropdownItem :name="item.value">{{ item.label }}</DropdownItem>
                         </DropdownMenu>
@@ -47,6 +50,9 @@
                     <div class="course-classroom-list" slot="left">
                         <div class="course-classroom-list-header">
                             <span class="course-classroom-label">{{$t('courseManage.classroom.classroomList')}}</span>
+                            <Tooltip :content="$t('tip.cusClass')" transfer theme="light" max-width="200">
+                                <Icon type="ios-information-circle-outline" color="#1cc0f3" style="margin-left:5px" />
+                            </Tooltip>
                             <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" /> -->

+ 18 - 6
TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue

@@ -24,7 +24,13 @@
             <!-- 课程列表 -->
             <div slot="left" class="cus-list-box">
                 <div class="cus-list-header dark-iview-input">
-                    <span>{{$t('cusMgt.course')}}</span>
+                    <span>
+                        {{$t('cusMgt.course')}}
+                        <Tooltip :content="$t('tip.cusInfo')" transfer theme="light" max-width="180">
+                            <Icon type="ios-information-circle-outline" color="#1cc0f3" />
+                        </Tooltip>
+                    </span>
+
                     <div v-if="!isSearch" style="float:right;">
                         <Icon class="action-btn-icon" v-if="$access.can('admin.*|course-upd')" type="md-trash" @click.stop="showConfirmDel(curCusIndex)" />
                         <Icon class="action-btn-icon" v-if="$access.can('admin.*|course-upd')" type="md-create" @click.stop="editCus(curCusIndex)" />
@@ -58,6 +64,9 @@
                     <div slot="left" class="teacher-list">
                         <div class="teacher-list-header">
                             <span>{{$t('cusMgt.teaLabel')}}</span>
+                            <Tooltip :content="$t('tip.cusTea')" transfer theme="light" max-width="180">
+                                <Icon type="ios-information-circle-outline" color="#1cc0f3" style="margin-left:5px"/>
+                            </Tooltip>
                             <Icon v-if="$access.can('admin.*|course-upd')" type="md-add" size="16" class="tea-action-icon" @click="toggleAddTea" />
                             <Icon v-if="$access.can('admin.*|course-upd')" type="md-trash" size="16" class="tea-action-icon" @click="removeTeacher" />
                         </div>
@@ -80,6 +89,9 @@
                             <span class="tab-label" style="padding-left:10px">
                                 {{$t('cusMgt.cusNameList')}}
                             </span>
+                            <Tooltip :content="$t('tip.sCusClass')" transfer theme="light" max-width="180">
+                                <Icon type="ios-information-circle-outline" color="#1cc0f3" style="margin-left:-10px"/>
+                            </Tooltip>
                             <div class="action-btn-wrap">
                                 <span v-if="$access.can('admin.*|course-upd') && isUpd" class="action-btn" style="margin-right:30px" @click="updCusInfo()">
                                     <Icon type="ios-albums-outline" size="16" />
@@ -273,7 +285,7 @@ export default {
                 callback(new Error(this.$t('cusMgt.codeErr2')))
             }
             // 验证编码在当前学校不能重复
-            let data = _this.courseList.filter(item=>{
+            let data = _this.courseList.filter(item => {
                 return item.id !== _this.courseBaseInfo.id
             })
             let allNo = data.map(item => {
@@ -291,7 +303,7 @@ export default {
                 callback(new Error(this.$t('cusMgt.cNameHolder')))
             }
             //验证名称在当前学段不能重复
-            let data = _this.courseList.filter(item=>{
+            let data = _this.courseList.filter(item => {
                 return item.id !== _this.courseBaseInfo.id
             })
             let names = data.map(item => {
@@ -1303,11 +1315,11 @@ export default {
                                     this.$Message.success(this.$t('cusMgt.addOk'))
                                 } else {
                                     this.$Message.success(this.$t('cusMgt.editOk'))
-                                    let index = this.courseList.findIndex(item=>{
+                                    let index = this.courseList.findIndex(item => {
                                         return item.id == this.courseBaseInfo.id
                                     })
-                                    if(index > -1){
-                                        this.courseList.splice(index,1,JSON.parse(JSON.stringify(this.courseBaseInfo)))
+                                    if (index > -1) {
+                                        this.courseList.splice(index, 1, JSON.parse(JSON.stringify(this.courseBaseInfo)))
                                     }
                                 }
                                 this.keyWord = ''

+ 22 - 16
TEAMModelOS/ClientApp/src/view/schoolmgmt/SystemSetting/SystemSetting.vue

@@ -42,7 +42,7 @@
             </div>
             <div class="base-info-item custom-radio">
                 <span class="setting-label">{{$t('schoolBaseInfo.scType')}}</span>
-                <RadioGroup v-model="schoolSetting.type" >
+                <RadioGroup v-model="schoolSetting.type">
                     <!-- 普教 -->
                     <Radio :label="1" :disabled="!$access.ability('admin','schoolSetting-upd').validateAll">
                         <span>{{$t('schoolBaseInfo.scType1')}}</span>
@@ -90,11 +90,14 @@
                             <div class="setting-content semester-content">
                                 <p class="block-title bf-color1">
                                     {{$t('schoolBaseInfo.semesterSetting')}}
+                                    <Tooltip :content="$t('tip.semester')" transfer theme="light" max-width="200">
+                                        <Icon type="ios-information-circle-outline" color="#1cc0f3" style="margin-left:5px" />
+                                    </Tooltip>
                                     <span class="semester-start-warning" v-show="startWarning">
                                         <Icon type="md-warning" />请设置入学期
                                     </span>
                                     <span class="block-action-box">
-                                        <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll" type="md-add" @click.stop="addSemester()" class="action-btn-icon"/>
+                                        <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll" type="md-add" @click.stop="addSemester()" class="action-btn-icon" />
                                     </span>
                                 </p>
                                 <div v-for="(item,index) in schoolSetting.period[curPriodIndex].semesters" :key="index" class="semster-item" @mousemove="chooseSemester(index)">
@@ -155,10 +158,10 @@
                                     </p>
                                     <div style="height:210px;">
                                         <vuescroll>
-                                            <Draggable  ghost-class="ghost" class="grade-list list-group" :list="schoolSetting.period[curPriodIndex].grades" :animation='200'>
+                                            <Draggable ghost-class="ghost" class="grade-list list-group" :list="schoolSetting.period[curPriodIndex].grades" :animation='200'>
                                                 <div class="grade-item list-group-item" v-for="(item,index) in schoolSetting.period[curPriodIndex].grades" :key="index" @click.stop>
                                                     <span class="grade-order">{{index + 1}}</span>
-                                                    <Input class="grade-name" v-model="schoolSetting.period[curPriodIndex].grades[index]"  :disabled="etGradeIndex !== index" :placeholder="$t('schoolBaseInfo.gradeWarning')" :style="{width: getWidth(index,item)+'px'}" />
+                                                    <Input class="grade-name" v-model="schoolSetting.period[curPriodIndex].grades[index]" :disabled="etGradeIndex !== index" :placeholder="$t('schoolBaseInfo.gradeWarning')" :style="{width: getWidth(index,item)+'px'}" />
                                                     <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll" type="md-create" @click.stop="etGradeIndex = index" class="grade-action-icon" />
                                                     <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll" type="md-trash" @click.stop="showDelGrade(index)" class="grade-action-icon" />
                                                 </div>
@@ -216,21 +219,21 @@
                                         <span v-if="!schoolSetting.period[curPriodIndex].analysis.type" style="line-height:32px;">{{$t('schoolBaseInfo.noExam')}}</span>
                                     </div>
                                 </div>
-                                <div class="attr-box-item">
+                                <!-- <div class="attr-box-item">
                                     <p>
-                                        <Tooltip :content="$t('schoolBaseInfo.eugenicsTips')" placement="right">
-                                            <Icon type="ios-information-circle-outline" color="aqua" size="16" style="margin-right: 5px;cursor: pointer;" />
+                                        <Tooltip :content="$t('schoolBaseInfo.eugenicsTips')" placement="right" theme="light"  max-width="200">
+                                            <Icon type="ios-information-circle-outline" color="#1cc0f3" size="16" style="margin-right: 5px;cursor: pointer;" />
                                         </Tooltip>
                                         <span>{{$t('schoolBaseInfo.eugenicsLabel')}}</span>
                                     </p>
                                     <div class="attr-content" @click.stop>
                                         <InputNumber :max="100" :min="0" :disabled="!editAnaStatus" v-model="schoolSetting.period[curPriodIndex].analysis.eugenics" :formatter="value => `${value}%`" :parser="value => value.replace('%', '')"></InputNumber>
                                     </div>
-                                </div>
+                                </div> -->
                                 <div class="attr-box-item">
                                     <p>
-                                        <Tooltip :content="$t('schoolBaseInfo.incomeTips')" placement="right">
-                                            <Icon type="ios-information-circle-outline" color="aqua" size="16" style="margin-right:5px;cursor:pointer;" />
+                                        <Tooltip :content="$t('schoolBaseInfo.incomeTips')" placement="right" theme="light" max-width="200">
+                                            <Icon type="ios-information-circle-outline" color="#1cc0f3" size="16" style="margin-right:5px;cursor:pointer;" />
                                         </Tooltip>
                                         <span>{{$t('schoolBaseInfo.incomeLable')}}</span>
                                     </p>
@@ -240,8 +243,8 @@
                                 </div>
                                 <div class="attr-box-item">
                                     <p>
-                                        <Tooltip :content="$t('schoolBaseInfo.touchTips')" placement="right">
-                                            <Icon type="ios-information-circle-outline" color="aqua" size="16" style="margin-right: 5px;cursor: pointer;" />
+                                        <Tooltip :content="$t('schoolBaseInfo.touchTips')" placement="right" theme="light"  max-width="200">
+                                            <Icon type="ios-information-circle-outline" color="#1cc0f3" size="16" style="margin-right: 5px;cursor: pointer;" />
                                         </Tooltip>
                                         <span>{{$t('schoolBaseInfo.touchLabel')}}</span>
                                     </p>
@@ -273,6 +276,9 @@
                         <div slot="right" class="time-setting-wrap">
                             <div class="col-title">
                                 <span>{{$t('cusMgt.timeSetTitle')}}</span>
+                                <Tooltip :content="$t('tip.time')" placement="right" theme="light" max-width="200">
+                                    <Icon type="ios-information-circle-outline" color="#1cc0f3" size="16" style="margin-left: 5px;cursor: pointer;" />
+                                </Tooltip>
                             </div>
                             <div class="time-setting-body">
                                 <TimeSetting :periodId="schoolSetting.period[curPriodIndex].id"></TimeSetting>
@@ -456,10 +462,10 @@ export default {
             this.semtInfo.start = this.schoolSetting.period[this.curPriodIndex].semesters[index].start
             this.semtInfo.id = this.schoolSetting.period[this.curPriodIndex].semesters[index].id
             this.addSemStatus = true
-            console.log('456',this.semtInfo.name)
+            console.log('456', this.semtInfo.name)
         },
         confirmSemester() {
-            console.log('123',this.semtInfo.id)
+            console.log('123', this.semtInfo.id)
             if (this.semtInfo.id) { //编辑
                 let s = this.schoolSetting.period[this.curPriodIndex].semesters.find(item => {
                     return item.id == this.semtInfo.id
@@ -542,8 +548,8 @@ export default {
             if (isRep) return
 
             // 检查年级名称
-            curPd.grades.forEach((item,index) => {
-                if(curPd.grades.indexOf(item) !== index){
+            curPd.grades.forEach((item, index) => {
+                if (curPd.grades.indexOf(item) !== index) {
                     this.$Message.warning(this.$t('schoolBaseInfo.gdNameWarning'))
                     isRep = true
                 }

+ 31 - 10
TEAMModelOS/ClientApp/src/view/settings/BaseApplyForm.vue

@@ -30,7 +30,7 @@
 					</Select>
 					<!-- 如果国际站选择的地区是台湾则要显示台湾的城市和区选择 -->
 					<template v-if="isShowTw">
-						<Select v-model="curTwCityIndex" filterable :placeholder="$t('settings.applyForm.place6')" @on-change="onTwCitySelect" style="margin: 10px 0;">
+						<Select v-model="curTwCityIndex" filterable :placeholder="$t('settings.applyForm.place6')" @on-change="onTwCitySelect" style="margin: 0 10px;">
 							<Option v-for="(city,index) in twCityArr" :value="index" :key="index" >{{ city.city }}</Option>
 						</Select>
 						<Select v-model="curTwAreaIndex" filterable :placeholder="$t('settings.applyForm.place6')">
@@ -71,7 +71,9 @@
 
 <script>
 	import countries from '@/static/countries.js'
+	import enCountries from '@/static/countryCodeData.js'
 	import twCitys from '@/static/twJson.js'
+	import twTCitys from '@/static/twJsonT.js'
 	export default {
 		data(vm) {
 			return {
@@ -136,16 +138,37 @@
 			}
 		},
 		created() {
-			this.countryArr = countries
-			this.twCityArr = twCitys
+			let curLocal = localStorage.getItem('local')
+			let attr = 'CountryEn'
+			if (curLocal.includes('cn') || curLocal.includes('CN')) {
+			    this.countryArr = countries
+				this.twCityArr = twCitys
+			} else if (curLocal.includes('tw') || curLocal.includes('TW')) {
+				this.twCityArr = twTCitys
+				for (const key in enCountries) {
+				    this.countryArr.push(
+				        {
+				            cn: enCountries[key].CountryTw,
+				        }
+				    )
+				}
+			}else{
+				this.twCityArr = twTCitys
+				for (const key in enCountries) {
+				    this.countryArr.push(
+				        {
+				            cn: enCountries[key].CountryEn,
+				        }
+				    )
+				}
+			}
+			
 		},
 		methods: {
 			// 提交建立学校申请
 			onSubmit() {
 				this.$refs.applyForm.validate((valid) => {
 					if (valid) {
-						console.log(this.curCountry)
-						console.log(this.isChinaSite)
 						let hasFullAddress = false
 						let fullAddress = ''
 						if(this.isChinaSite){
@@ -153,11 +176,9 @@
 							hasFullAddress = pickResult.province && pickResult.city && pickResult.area
 							fullAddress = hasFullAddress ? (pickResult.province + pickResult.city + pickResult.area + this.applyForm.address) : ''
 						}else{
-							console.log(this.curCountry)
 							hasFullAddress = this.curCountry
-							fullAddress = this.isShowTw ? (this.curCountry + this.curTwCity.city + this.curTwCity.area[this.curTwAreaIndex] + this.applyForm.address) : (this.curCountry + this.applyForm.address)
+							fullAddress = this.isShowTw ? (this.curCountry + this.curTwCity.city + this.curTwCity.areas[this.curTwAreaIndex].area + this.applyForm.address) : (this.curCountry + this.applyForm.address)
 						}
-						console.log(fullAddress)
 						if(hasFullAddress){
 							this.isBtnLoading = true
 							let formInfo = this.applyForm
@@ -206,7 +227,7 @@
 			},
 			/* 国家选择 */
 			onCountrySelect(val){
-				if(val === '台湾' || val === '灣'){
+				if(val === '台湾' || val === '灣'){
 					this.isShowTw = true
 					this.curTwCity = this.twCityArr[0]
 				}else{
@@ -232,7 +253,7 @@
 		padding: 50px 20px 0 20px;
 		
 		.country-select{
-			width: 200px;
+			display: flex;
 			margin: 10px 0;
 		}
 		

+ 2 - 2
TEAMModelOS/ClientApp/src/view/settings/SchoolMgmt.vue

@@ -115,9 +115,9 @@
 			<Button @click="onChangeSchool">{{ $t('evaluation.confirm')}}</Button>
 		</Modal>
 
-		<Modal v-model="applyModal" class-name="go-school-modal" footer-hide width="500">
+		<Modal v-model="applyModal" class-name="go-school-modal" footer-hide width="650">
 			<span class="apply-title">{{ $t('settings.applyForm.title')}}</span>
-			<BaseApplyForm @applySuc="applyModal = false"></BaseApplyForm>
+			<BaseApplyForm @applySuc="applyModal = false" v-if="applyModal"></BaseApplyForm>
 		</Modal>
 
 	</div>

+ 3 - 0
TEAMModelOS/ClientApp/src/view/student-account/stuMgt/ImportStudent.vue

@@ -13,6 +13,9 @@
             <p class="import-tips" style="margin-top:40px;">{{$t('stuAccount.importTips1')}}</p>
             <p class="import-tips">{{$t('stuAccount.importTips2') + $t('stuAccount.importTips3')}}</p>
             <span @click="downloadTemp" style="margin-top:10px;color:turquoise;display:inline-block;">{{$t('stuAccount.downloadText')}}</span>
+            <Tooltip :content="$t('tip.stuModel')" transfer theme="light" max-width="400">
+                <Icon type="ios-information-circle-outline" color="#1cc0f3" style="margin-left:5px" />
+            </Tooltip>
         </div>
         <div class="form-body" style="background:none;" v-else>
             <div class="ivu-upload-list-file">

+ 9 - 7
TEAMModelOS/ClientApp/src/view/student-account/stuMgt/StuMgt.vue

@@ -20,7 +20,7 @@
                     <Option v-show="!searchGrade" value="noclass">{{$t('stuAccount.noRelClass')}}</Option>
                 </Select>
                 <!-- 字串模糊搜尋 -->
-                <Input v-model="searchText" clearable :placeholder="$t('stuAccount.searchHolder')" style="width: 220px; margin-left: 20px" search @on-search="filterData" @on-clear="filterData" />
+                <Input v-model="searchText" clearable :placeholder="$t('stuAccount.searchHolder')" style="width: 180px; margin-left: 20px" search @on-search="filterData" @on-clear="filterData" />
             </div>
             <div class="sc-menu-right sc-text-no-select" v-if="authorizationStatus == false">
                 <ul v-if="$access.can('admin.*|student-upd')">
@@ -249,14 +249,14 @@ export default {
                 this.tableColumns = [
                     {
                         type: 'selection',
-                        width: 80,
+                        width: 60,
                         align: 'center'
                     },
                     {
                         slot: 'header',
                         title: ' ',
                         align: 'center',
-                        width: 120
+                        width: 50
                     },
                     {
                         key: 'id',
@@ -269,13 +269,15 @@ export default {
                             } else {
                                 return b.localeCompare(a)
                             }
-                        }
+                        },
+                        width: 100
                     },
                     {
                         key: 'name',
                         title: this.$t('stuAccount.stuName'),
                         align: 'center',
-                        sortable: true
+                        sortable: true,
+                        width: 150
                     },
                     {
                         slot: 'classId',
@@ -394,14 +396,14 @@ export default {
             this.tableColumns = [
                 {
                     type: 'selection',
-                    width: 80,
+                    width: 60,
                     align: 'center'
                 },
                 {
                     slot: 'header',
                     title: ' ',
                     align: 'center',
-                    width: 150
+                    width: 100
                 },
                 {
                     key: 'id',

+ 19 - 19
TEAMModelOS/ClientApp/src/view/student-web/App.vue

@@ -4,11 +4,11 @@
         <div class="myNav">
             <Menu mode="horizontal" :active-name="MyNo" class="menubar">
                 <span @click="clickSidebarToggle()"
-                      v-if="MyNo != '1' && MyNo != 'X'"
-                      class="sidebar-toggle">
+                    v-if="MyNo != '1' && MyNo != 'X'"
+                    class="sidebar-toggle">
                     <Icon class="menu-icon"
-                          type="md-menu"
-                          :class="{'menu-icon-close': this.$store.getters.getSidebarisOpen == false}" />
+                        type="md-menu"
+                        :class="{'menu-icon-close': this.$store.getters.getSidebarisOpen == false}" />
                 </span>
                 <span class="mytitle">{{ MyName }}</span>
                 <!--<span class="pixel">{{ windowWidth }} * {{ windowHeight }} px</span>-->
@@ -43,24 +43,24 @@
                 </span>
                 <!--通知彈窗區域-->
                 <!-- <span class="dropdown"> -->
-                <MenuItem name="6" @click.native="noData" title="通知">
+                <MenuItem name="6" @click.native="noData" :title="$t('studentWeb.type.note')">
                     <span class="info-badge" v-if="MyNo != 6"></span>
-                    <svg-icon icon-class="bell" class="tabIcon1" title="通知" />
+                    <svg-icon icon-class="bell" class="tabIcon1" />
                 </MenuItem>
                 <!-- </span> -->
                 <!-- hiteach课堂记录 -->
-                <MenuItem name="5" @click.native="noData" title="hiteach">
-                    <svg-icon icon-class="hiteach" class="tabIcon4" title="hiteach" />
+                <MenuItem name="5" @click.native="noData" :title="$t('studentWeb.type.hiteach')">
+                    <svg-icon icon-class="hiteach" class="tabIcon4" />
                 </MenuItem>
                 <!-- 自主学习 -->
-                <MenuItem name="3" @click.native="noData" title="自主学习">
-                    <svg-icon icon-class="note" class="tabIcon1" title="自主学习" />
+                <MenuItem name="3" @click.native="noData" :title="$t('studentWeb.type.studyview')">
+                    <svg-icon icon-class="note" class="tabIcon1" />
                 </MenuItem>
-                <MenuItem name="4" to="/studentWeb/eventView" title="活动">
-                    <svg-icon icon-class="selflearning" class="tabIcon2" title="活动" />
+                <MenuItem name="4" to="/studentWeb/eventView" :title="$t('studentWeb.type.activity')">
+                    <svg-icon icon-class="selflearning" class="tabIcon2" />
                 </MenuItem>
-                <MenuItem name="1" to="/studentWeb/homeView" title="首页">
-                    <svg-icon icon-class="home" class="tabIcon3" title="首页" />
+                <MenuItem name="1" to="/studentWeb/homeView" :title="$t('studentWeb.type.home')">
+                    <svg-icon icon-class="home" class="tabIcon3" />
                 </MenuItem>
                 <!-- 加入课程 -->
                 <!-- <button class="addcoursebtn"
@@ -69,11 +69,11 @@
                     {{$t("studentWeb.home.joinClass")}}
                 </button>
                 <input maxlength="6"
-                       class="addcourseinput"
-                       v-model="courseID"
-                       placeholder="輸入課程代碼.... ex:T10000"
-                       value="T"
-                       v-if="MyName == this.$t('studentWeb.courseList-title')" />
+                    class="addcourseinput"
+                    v-model="courseID"
+                    placeholder="輸入課程代碼.... ex:T10000"
+                    value="T"
+                    v-if="MyName == this.$t('studentWeb.courseList-title')" />
                 <div class="clearinput">
                     <Icon @click="clearInput()" v-if="isTyping == true" type="md-close" />
                 </div> -->