Jelajahi Sumber

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

CrazyIter_Bin 4 tahun lalu
induk
melakukan
ddcf85629f
70 mengubah file dengan 2387 tambahan dan 1650 penghapusan
  1. 2 1
      TEAMModelFunction/MonitorCosmosDB.cs
  2. 141 3
      TEAMModelOS/ClientApp/src/assets/iconfont/demo_index.html
  3. 27 3
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.css
  4. 1 1
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.js
  5. 42 0
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.json
  6. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.ttf
  7. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff
  8. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff2
  9. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/image/1-1.jpg
  10. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/1-1.jpg
  11. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/1-2.png
  12. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/1-3.png
  13. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/1-4.png
  14. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/1-5.png
  15. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/1-7.png
  16. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/2-1.png
  17. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/2-2.jpg
  18. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/3-1.jpg
  19. TEMPAT SAMPAH
      TEAMModelOS/ClientApp/src/assets/login/3-2.png
  20. 1 1
      TEAMModelOS/ClientApp/src/components/public/frontEndMain/Index.less
  21. 149 109
      TEAMModelOS/ClientApp/src/components/public/frontEndMain/Index.vue
  22. 6 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/home.js
  23. 93 47
      TEAMModelOS/ClientApp/src/locale/lang/en-US/settings.js
  24. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/classMgmt.js
  25. 6 6
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/courseManage.js
  26. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/cusMgt.js
  27. 7 7
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/evaluation.js
  28. 6 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/home.js
  29. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/knowledge.js
  30. 9 9
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/learnActivity.js
  31. 10 10
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/login.js
  32. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/regist.js
  33. 5 5
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/schoolBaseInfo.js
  34. 4 4
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/schoolMgmt.js
  35. 21 21
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/serviceDriveAuth.js
  36. 6 6
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/stuAccount.js
  37. 9 9
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/studentWeb.js
  38. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/survey.js
  39. 6 6
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/system.js
  40. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/talMgmt.js
  41. 34 34
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/teachermgmt.js
  42. 4 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/totalAnalysis.js
  43. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/vote.js
  44. 2 2
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/classMgmt.js
  45. 4 4
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/courseManage.js
  46. 9 9
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/cusMgt.js
  47. 6 6
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/evaluation.js
  48. 6 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/home.js
  49. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/knowledge.js
  50. 8 8
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js
  51. 20 20
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/schoolBaseInfo.js
  52. 11 11
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/serviceDriveAuth.js
  53. 104 86
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/settings.js
  54. 6 6
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/stuAccount.js
  55. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/studentWeb.js
  56. 12 12
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/survey.js
  57. 12 12
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/system.js
  58. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/talMgmt.js
  59. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/teachContent.js
  60. 16 13
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/teachermgmt.js
  61. 8 8
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/totalAnalysis.js
  62. 5 6
      TEAMModelOS/ClientApp/src/view/homepage/HomePage.vue
  63. 128 132
      TEAMModelOS/ClientApp/src/view/login/page/Student.less
  64. 595 402
      TEAMModelOS/ClientApp/src/view/login/page/Student.vue
  65. 126 132
      TEAMModelOS/ClientApp/src/view/login/page/Teacher.less
  66. 426 270
      TEAMModelOS/ClientApp/src/view/login/page/Teacher.vue
  67. 231 187
      TEAMModelOS/ClientApp/src/view/login/test.vue
  68. 3 3
      TEAMModelOS/ClientApp/src/view/teachermgmt/components/personnel/Index.vue
  69. 31 7
      TEAMModelOS/Controllers/Client/HiTeachController.cs
  70. 10 7
      TEAMModelOS/Controllers/School/StudentController.cs

+ 2 - 1
TEAMModelFunction/MonitorCosmosDB.cs

@@ -40,7 +40,8 @@ namespace TEAMModelFunction
             databaseName: "TEAMModelOS",
             collectionName: "Common",
             ConnectionStringSetting = "Azure:Cosmos:ConnectionString",
-            LeaseCollectionName = "leases")]IReadOnlyList<Document> inputs, ILogger log)
+            LeaseCollectionName = "leases",
+            LeaseCollectionPrefix = "TEAMModelOS")]IReadOnlyList<Document> inputs, ILogger log)
         {
             if (inputs != null && inputs.Count > 0)
             {

+ 141 - 3
TEAMModelOS/ClientApp/src/assets/iconfont/demo_index.html

@@ -54,6 +54,42 @@
       <div class="content unicode" style="display: block;">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+              <span class="icon iconfont">&#xe718;</span>
+                <div class="name">在籍学生</div>
+                <div class="code-name">&amp;#xe718;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe633;</span>
+                <div class="name">icon_icon_ 学生管理</div>
+                <div class="code-name">&amp;#xe633;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe637;</span>
+                <div class="name">教师</div>
+                <div class="code-name">&amp;#xe637;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe630;</span>
+                <div class="name">学生</div>
+                <div class="code-name">&amp;#xe630;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe659;</span>
+                <div class="name">微信 (1)</div>
+                <div class="code-name">&amp;#xe659;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe643;</span>
+                <div class="name">地球</div>
+                <div class="code-name">&amp;#xe643;</div>
+              </li>
+          
             <li class="dib">
               <span class="icon iconfont">&#xe603;</span>
                 <div class="name">手机未认证</div>
@@ -774,9 +810,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1621999720250') format('woff2'),
-       url('iconfont.woff?t=1621999720250') format('woff'),
-       url('iconfont.ttf?t=1621999720250') format('truetype');
+  src: url('iconfont.woff2?t=1623427872430') format('woff2'),
+       url('iconfont.woff?t=1623427872430') format('woff'),
+       url('iconfont.ttf?t=1623427872430') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -802,6 +838,60 @@
       <div class="content font-class">
         <ul class="icon_lists dib-box">
           
+          <li class="dib">
+            <span class="icon iconfont icon-student1"></span>
+            <div class="name">
+              在籍学生
+            </div>
+            <div class="code-name">.icon-student1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-student2"></span>
+            <div class="name">
+              icon_icon_ 学生管理
+            </div>
+            <div class="code-name">.icon-student2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-teacher"></span>
+            <div class="name">
+              教师
+            </div>
+            <div class="code-name">.icon-teacher
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-student"></span>
+            <div class="name">
+              学生
+            </div>
+            <div class="code-name">.icon-student
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-wechat"></span>
+            <div class="name">
+              微信 (1)
+            </div>
+            <div class="code-name">.icon-wechat
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-earth"></span>
+            <div class="name">
+              地球
+            </div>
+            <div class="code-name">.icon-earth
+            </div>
+          </li>
+          
           <li class="dib">
             <span class="icon iconfont icon-phone-unverify"></span>
             <div class="name">
@@ -1882,6 +1972,54 @@
       <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-student1"></use>
+                </svg>
+                <div class="name">在籍学生</div>
+                <div class="code-name">#icon-student1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-student2"></use>
+                </svg>
+                <div class="name">icon_icon_ 学生管理</div>
+                <div class="code-name">#icon-student2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-teacher"></use>
+                </svg>
+                <div class="name">教师</div>
+                <div class="code-name">#icon-teacher</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-student"></use>
+                </svg>
+                <div class="name">学生</div>
+                <div class="code-name">#icon-student</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-wechat"></use>
+                </svg>
+                <div class="name">微信 (1)</div>
+                <div class="code-name">#icon-wechat</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-earth"></use>
+                </svg>
+                <div class="name">地球</div>
+                <div class="code-name">#icon-earth</div>
+            </li>
+          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#icon-phone-unverify"></use>

+ 27 - 3
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 2000444 */
-  src: url('iconfont.woff2?t=1621999720250') format('woff2'),
-       url('iconfont.woff?t=1621999720250') format('woff'),
-       url('iconfont.ttf?t=1621999720250') format('truetype');
+  src: url('iconfont.woff2?t=1623427872430') format('woff2'),
+       url('iconfont.woff?t=1623427872430') format('woff'),
+       url('iconfont.ttf?t=1623427872430') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,30 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-student1:before {
+  content: "\e718";
+}
+
+.icon-student2:before {
+  content: "\e633";
+}
+
+.icon-teacher:before {
+  content: "\e637";
+}
+
+.icon-student:before {
+  content: "\e630";
+}
+
+.icon-wechat:before {
+  content: "\e659";
+}
+
+.icon-earth:before {
+  content: "\e643";
+}
+
 .icon-phone-unverify:before {
   content: "\e603";
 }

File diff ditekan karena terlalu besar
+ 1 - 1
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.js


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

@@ -5,6 +5,48 @@
   "css_prefix_text": "icon-",
   "description": "",
   "glyphs": [
+    {
+      "icon_id": "8827519",
+      "name": "在籍学生",
+      "font_class": "student1",
+      "unicode": "e718",
+      "unicode_decimal": 59160
+    },
+    {
+      "icon_id": "19109549",
+      "name": "icon_icon_ 学生管理",
+      "font_class": "student2",
+      "unicode": "e633",
+      "unicode_decimal": 58931
+    },
+    {
+      "icon_id": "8156489",
+      "name": "教师",
+      "font_class": "teacher",
+      "unicode": "e637",
+      "unicode_decimal": 58935
+    },
+    {
+      "icon_id": "3904398",
+      "name": "学生",
+      "font_class": "student",
+      "unicode": "e630",
+      "unicode_decimal": 58928
+    },
+    {
+      "icon_id": "1382584",
+      "name": "微信 (1)",
+      "font_class": "wechat",
+      "unicode": "e659",
+      "unicode_decimal": 58969
+    },
+    {
+      "icon_id": "2678587",
+      "name": "地球",
+      "font_class": "earth",
+      "unicode": "e643",
+      "unicode_decimal": 58947
+    },
     {
       "icon_id": "21777109",
       "name": "手机未认证",

TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.ttf


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff2


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/image/1-1.jpg


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/1-1.jpg


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/1-2.png


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/1-3.png


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/1-4.png


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/1-5.png


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/1-7.png


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/2-1.png


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/2-2.jpg


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/3-1.jpg


TEMPAT SAMPAH
TEAMModelOS/ClientApp/src/assets/login/3-2.png


+ 1 - 1
TEAMModelOS/ClientApp/src/components/public/frontEndMain/Index.less

@@ -1,7 +1,7 @@
 .login{
     width: 100%;
     height: 100%;
-    background-image: url('../../../assets/image/lgoin_bg.jpg');
+    // background-image: url('../../../assets/login/1-1.jpg');
     background-repeat: no-repeat;
     background-attachment: fixed;
     background-position: center;

File diff ditekan karena terlalu besar
+ 149 - 109
TEAMModelOS/ClientApp/src/components/public/frontEndMain/Index.vue


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

@@ -30,5 +30,10 @@ export default{
     verifySchool:'加入学校',
     toSchool:'加入学校>>>',
     schoolSuccess:'您已加入学校!',
-    hasJoin:'已加入'
+    hasJoin:'已加入',
+    myCourse:'我的課表',
+    tmwCus:'明日課程',
+    course:'課程:',
+    className:'班級:',
+    tmwNoCus:'明天沒有課程安排'
 }

+ 93 - 47
TEAMModelOS/ClientApp/src/locale/lang/en-US/settings.js

@@ -1,52 +1,56 @@
 export default {
-    setting_title1: 'School Manage',
-	setting_title2: 'Normal Settings',
-    setting_title3: '开放平台',
-	schoolList:'已添加或申请学校',
-	langSetting:'网站语言设定',
-	langTips:'请选择网站要用来显示选单、互动页面以及通知信息的语言',
-	langCheck:'使用浏览器语系展示',
-	themeSetting:'网站色彩模式',
-	themeTips:'请选择网站显示的色彩模式,以便提供最佳的用户体验',
-	menuSetting:'菜单显示设置',
-	menuTips:'选择左侧Menu在网站载入时的预设显示模式',
-	menuOpen:'预设展开显示',
-	menuClose:'预设关闭显示',
-	logoSetting:'Logo显示设置',
-	logoTips:'选择是否隐藏左上角平台Logo',
-	logoOpen:'预设显示',
-	logoHide:'预设隐藏',
-	defaultSchool:'默认学校',
-	curSchool:'当前学校',
-	courseNum:'课程数',
-	activityNum:'活动数',
-	joinStatus:'提出加入请求',
-	requestStatus:'送出添加邀请',
-	goSchool:'前往学校',
-	agreeJoin:'同意加入',
-	cancelAdd:'拒绝加入',
-	undoJoin:'撤销申请',
-	requestJoin:'申请加入',
-	inputSearch:'输入要搜索的学校名称',
-	modalTip1:'注意',
-	modalTip2:'此举动将使您离开当前学校的 IES5 站台,并前往',
-	modalTip3:'当前页面未保存的资料将会丢失,是否同意此操作?',
-	columnName:'学校名称',
-	columnArea:'地区',
-	columnId:'校代码',
-	columnTool:'操作',
-	modalTip4:'温馨提示',
-	modalTip5:'确认加入',
-	modalTip6:'确认取消加入',
-	submitSucTips:'提交成功',
-	submitFailTips:'操作失败',
-	joinSucTips:'加入成功!',
-	status1:'已加入',
-	status2:'收到邀请',
-	status3:'申请中',
-	openList: '开放平台列表',
-	openInfo: '平台信息',
+	setting_title1: '学校管理',
+	setting_title2: '一般设置',
+	setting_title3: '开放平台',
+	schoolList: '已添加或申请学校',
+	langSetting: '网站语言设定',
+	langTips: '请选择网站要用来显示选单、互动页面以及通知信息的语言',
+	langCheck: '使用浏览器语系展示',
+	themeSetting: '网站色彩模式',
+	themeTips: '请选择网站显示的色彩模式,以便提供最佳的用户体验',
+	menuSetting: '菜单显示设置',
+	menuTips: '选择左侧Menu在网站载入时的预设显示模式',
+	menuOpen: '预设展开显示',
+	menuClose: '预设关闭显示',
+	logoSetting: 'Logo显示设置',
+	logoTips: '选择是否隐藏左上角平台Logo',
+	logoOpen: '预设显示',
+	logoHide: '预设隐藏',
+	defaultSchool: '默认学校',
+	curSchool: '当前学校',
+	courseNum: '课程数',
+	activityNum: '活动数',
+	joinStatus: '提出加入请求',
+	requestStatus: '送出添加邀请',
+	goSchool: '前往学校',
+	agreeJoin: '同意加入',
+	cancelAdd: '拒绝加入',
+	undoJoin: '撤销申请',
+	requestJoin: '申请加入',
+	inputSearch: '输入要搜索的学校名称',
+	modalTip1: '注意',
+	modalTip2: '此举动将使您离开当前学校的 IES5 站台,并前往',
+	modalTip3: '当前页面未保存的资料将会丢失,是否同意此操作?',
+	columnName: '学校名称',
+	columnArea: '地区',
+	columnId: '校代码',
+	columnTool: '操作',
+	modalTip4: '温馨提示',
+	modalTip5: '确认加入',
+	modalTip6: '确认取消加入',
+	submitSucTips: '提交成功',
+	submitFailTips: '操作失败',
+	joinSucTips: '加入成功!',
+	status1: '已加入',
+	status2: '收到邀请',
+	status3: '申请中',
+	searchTip: '请输入<span>学校名称</span>或者<span>学校代码</span>进行搜索',
+	searchNone: '* 如未搜索到您想要的学校,可点击下方申请建立您的学校',
+	applyBtn: '申请建立学校',
+	openList: '开放平台应用列表',
+	openInfo: '应用信息',
 	openName: '应用名称',
+	opName: "开放平台应用",
 	token: 'ApiToken',
 	des: '描述',
 	openStatus: '状态',
@@ -55,6 +59,48 @@ export default {
 	apiName: '接口名称',
 	apiAddress: '接口地址',
 	apiMethod: '请求方法',
+	apiParams: '参数示例',
 	openKeep: '保存平台',
+	edit: "编辑应用",
 	unedit: '取消编辑',
+	delModal1: "您确定删除",
+	delModal2: "吗?",
+	delModal3: "删除成功",
+	delModal4: "删除失败",
+	delModal5: "已取消删除",
+	keepModal1: "保存成功",
+	keepModal2: "保存失败",
+	refreshModal1: "刷新成功",
+	refreshModal2: "刷新失败",
+	refreshModal3: "刷新后,原有的金钥会失效,您确定要刷新吗?",
+	refreshModal4: "已取消刷新",
+	copyModal1: "复制成功",
+	copyModal2: "复制失败",
+	openModal1: "应用列表获取失败",
+	openModal2: "api列表获取失败",
+	applyForm: {
+		title: '申请建立AI智慧学校',
+		name: '学校/机构名称',
+		id: '学校/机构简码',
+		code: '学校/机构代码',
+		address: '学校/机构地址',
+		manager: '学校/机构负责人',
+		cellphone: '学校/机构联系电话',
+		content: '备注信息',
+		place1: '选择学校所在地区',
+		place2: '请输入学校详细地址',
+		place3: '请输入您的手机号,邮箱等联系方式',
+		place4: '可填写您的备注信息',
+		place5: '请输入管理员的称呼',
+		place6: '请选择学校所在地区',
+		submit: '提交申请',
+		submitSuc: '已成功提交申请!',
+		errTip1: '请选择正确的地区!',
+		errTip2: '请将信息填写完整!',
+		rule1: '学校名称不能为空',
+		rule2: '管理员信息不能为空',
+		rule3: '联系方式不能为空',
+		rule4: '学校地址不能为空',
+		applyTip: '* 提交申请后,将会于5个工作日内审核完毕,并通知申请人。'
+	}
 }

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

@@ -70,9 +70,9 @@ export default {
     grade12: '十二年级',
     smartClass: '智慧教室',
     sokratesClass: '议课教室',
-    selfpace: '书面问答',
+    selfpace: '测验模式',
     blankPageAdd: '新增档案',
-    pptImport: '入.pptx',
+    pptImport: '入.pptx',
     powerclick: 'PowerClick',
     hteOpen: '开启.hte',
     Other: '白板',
@@ -80,7 +80,7 @@ export default {
     ActIrsMode: '互动模式',
     edit: '编辑模式',
     ActPowerClickMode: 'Power Click',
-    ActSelfPaceMode: '书面问答',
+    ActSelfPaceMode: '测验模式',
     ActDscMode: '远距模式',
     ActElimitedMode: '挑战赛模式',
 

+ 6 - 6
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/courseManage.js

@@ -17,7 +17,7 @@ export default {
         courseName: '课程名称',
         coursePeriod: '设置学段',
         courseGrade: '设置年级',
-        courseSubject: '设置科',
+        courseSubject: '设置科',
         courseNotice: '课程公告',
         teachers: '协同教师设置',
         teachers1: '任课教师设置',
@@ -33,17 +33,17 @@ export default {
         selectClassroomHolder: '请选择教室'
     },
     syllabus: {
-        schoolSyllabus: '校课纲',
+        schoolSyllabus: '校课纲',
         personalSyllabus: '个人课纲',
-        period: '学:',
+        period: '学:',
         subject: '学科:',
         grade: '年级:',
         text: '显示未选择的所有课纲',
         knowledge: '知识点:',
         content: '内容:',
         question: '题库:',
-        placeHolder1: '请选择学',
-        placeHolder2: '请选择科',
+        placeHolder1: '请选择学',
+        placeHolder2: '请选择科',
         placeHolder3: '请选择年级'
     },
     classroom: {
@@ -80,7 +80,7 @@ export default {
         searchHolder1: '关键字搜索',
         classroomTableC1: '教室编码',
         classroomTableC2: '教室名称',
-        classroomTableC3: '学',
+        classroomTableC3: '学',
         classroomTableC4: '年级',
         classroomTableC5: '学生人数',
         personalClassroomTitle: '创建个人教室',

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

@@ -52,7 +52,7 @@ export default {
     //MyCourse.vue
     scCus:'标准课程',
     cusInfo:'课程信息',
-    noScCus:'暂无校课程',
+    noScCus:'暂无校课程',
     privCus:'个人课程',
     noPrivCus:'暂未创建课程',
     noCusClass:'暂未安排课程名单',
@@ -95,7 +95,7 @@ export default {
     sl:'自主学习',
     acTime:'活动时间',
     private:'个人',
-    school:'校',
+    school:'校',
     noRecord:'暂无课堂记录',
 
     //ManageClass.vue
@@ -234,7 +234,7 @@ export default {
     sat:'星期六',
     sun:'星期日',
     nameListType:'类型',
-    scClass:'校班级',
+    scClass:'校班级',
     customNameList:'自定义名单',
 
 }

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

@@ -12,7 +12,7 @@ export default {
 	},
 	filter:{
 		origin:'来源',
-		schoolBank:'校题库',
+		schoolBank:'校题库',
 		privateBank:'个人题库',
 		all:'全部',
 		diff:'难度',
@@ -20,7 +20,7 @@ export default {
 		type:'题型',
 		period:'学段',
 		grade:'年级',
-		subject:'科',
+		subject:'科',
 		sort:'排序',
 		createTime:'新增时间',
 		useCount:'使用次数'
@@ -68,12 +68,12 @@ export default {
 	cancelSuc:'取消成功',
 	addSuc:'添加成功',
 	newExercise:{
-		newSchoolItem:'新建校题目',
+		newSchoolItem:'新建校题目',
 		newPrivateItem:'新建个人题目',
 		backToBank:'返回题库',
 		choosePeriod:'选择学段',
 		chooseGrade:'选择年级',
-		chooseSubject:'选择科',
+		chooseSubject:'选择科',
 		gradePlaceholder:'不选择则默认选中全部年级',
 		diff:'题目难度',
 		field:'关联认知层次', 
@@ -200,8 +200,8 @@ export default {
 	createPaper:{
 		setAutoConditions:'设置自动出题条件',
 		origin:'题目来源',
-		schoolRate:'校占比',
-		rateTip:'默认相同比例校优先',
+		schoolRate:'校占比',
+		rateTip:'默认相同比例校优先',
 		doAutoCreate:'开始组题',
 		random:'随机',
 		average:'平均分配',
@@ -221,7 +221,7 @@ export default {
 	points:{
 		addPoint:'新增知识点',
 		searchPoint:'搜索知识点',
-		noPoint:'当前科下暂无知识点',
+		noPoint:'当前科下暂无知识点',
 		checkedPoint:'已选知识点',
 		pointName:'知识点名称',
 		inputNewPoint:'输入新知识点名称',

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

@@ -30,5 +30,10 @@ export default{
     verifySchool:'暂未加入学校',
     toSchool:'加入学校>>>',
     schoolSuccess:'您已加入学校!',
-    hasJoin:'已加入'
+    hasJoin:'已加入',
+    myCourse:'我的课表',
+    tmwCus:'明日课程',
+    course:'课程:',
+    className:'班级:',
+    tmwNoCus:'明天没有课程安排'
 }

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

@@ -1,5 +1,5 @@
 export default {
-    subject: '科',
+    subject: '科',
     label: '名称',
     blockP: '请输入知识块名称',
     confirm: '确认',

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

@@ -21,7 +21,7 @@ export default{
         autoTips2:'此功能仅用于展示情景快速模拟教师评分数据,且分数为随机生成,仅供参考!',
         autoScore:'一键评分',
         autoAnswer:'一键作答',
-        evSubject:'测试科:',
+        evSubject:'测试科:',
         returnTop:'返回顶部',
         mockOk:'模拟成功',
         mockErr:'模拟失败',
@@ -55,7 +55,7 @@ export default{
         evType:'评测类型',
         examType:'考试类别',
         courseType:'课程类别',
-        cusLabel1:'校课程',
+        cusLabel1:'校课程',
         cusLabel2:'个人课程',
         evTarget:'施测对象',
         publishType:'发布方式',
@@ -64,7 +64,7 @@ export default{
         endTime:'结束时间',
         eTimeHolder:'请选择结束时间',
         addSubject:'添加学科',
-        noSubject:'暂无科,请添加科',
+        noSubject:'暂无科,请添加科',
         noSubject1:'* 请先选择测试学段',
         papersLabel:'试卷库',
         perviewLabel:'试卷预览',
@@ -86,13 +86,13 @@ export default{
         formWarning:'请先完善评测基础信息!',
         paperWarning:'请挑选或导入试卷!',
         paperWarning1:'还没有试卷,请挑选或导入试卷!',
-        pdWarning:'请添加测试科!',
+        pdWarning:'请添加测试科!',
         publishOk:'评测发布成功!',
         togglePeriod:'切换学段',
         togglePdTip1:'您已添加',
-        togglePdTip2:'的测试科,如果现在切换学段会清空已选科,确定切换学段吗?',
+        togglePdTip2:'的测试科,如果现在切换学段会清空已选科,确定切换学段吗?',
         toggleOkText:'切换',
-        delPdTitle:'删除科',
+        delPdTitle:'删除科',
         delPdContent:'是否确认删除',
         delOk:'删除成功',
         pdTips:'请先选择测试学段!',
@@ -102,12 +102,12 @@ export default{
     manual:{
         source:'来源:',
         sourceP:'个人试卷库',
-        sourceS:'校试卷库',
+        sourceS:'校试卷库',
         pdLabel:'学段:',
         subjectLabel:'学科:',
         gradeLabel:'年级:',
         fitPd:'适用学段:',
-        fitSubject:'适用科:',
+        fitSubject:'适用科:',
         quCount:'题量:',
         useCount:'使用次数:',
         stdPaper:'已选试卷',
@@ -251,7 +251,7 @@ export default{
         unassigned:'未分配',
         teaProgress:'教师阅卷进度',
         schedule:'调度',
-        subject:'科',
+        subject:'科',
         stuNum:'考试人数',
         scanProg:'扫描进度',
         assignStatus:'阅卷分配',

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

@@ -1,34 +1,34 @@
 export default {
     title: {
         ser: '数据中心位置',
-        IDLogin: '醍摩豆号登入',
+        IDLogin: '醍摩豆号登入',
         QRLogin: 'QRCode 扫玛登入',
-        schoolLogin: '校内号登入'
+        schoolLogin: '校内号登入'
     },
     subTitle: {
         IDLogin: '系统管理者、教师、学生与家长登入口',
         QRLogin: '使用HiTA或AClassONE扫描进行登入',
-        schoolLogin: '由学校统一分配给学生使用的号登入口'
+        schoolLogin: '由学校统一分配给学生使用的号登入口'
     },
     serAdress: {
-        China: '中国',
+        China: '大陸',
         Global: '全球'
     },
     tooltip: {
-        text1: '藉由完整的醍摩豆号体验教师的多校教学资源与课程串联,以及学生的在升学过程中产生的完整学习历程。 ',
-        text2: '使用学校提供的学生专属号与密码登入本校,体验本校提供的活动、缴交作业或参与考试等任务。 '
+        text1: '藉由完整的醍摩豆号体验教师的多校教学资源与课程串联,以及学生的在升学过程中产生的完整学习历程。 ',
+        text2: '使用学校提供的学生专属号与密码登入本校,体验本校提供的活动、缴交作业或参与考试等任务。 '
     },
     placeholder: {
         id : '醍摩豆ID / 手机号码 / E-Mail',
         psw: '密码',
         schoolMenu: '选择学校',
-        schoolID : '号',
+        schoolID : '号',
         schoolPsw: '密码'
     },
     link: {
         QRLogin: 'QRCode登入',
-        IDLogin: '号登入',
-        regist: '注册号',
+        IDLogin: '号登入',
+        regist: '注册号',
         forgetPsw: '忘记密码'
     },
     communy:{
@@ -38,7 +38,7 @@ export default {
         wechat: 'WeChat',
     },
     apiError:{
-        text1:'您的号或密码不正确'
+        text1:'您的号或密码不正确'
     },
     sse:{
         error:{

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

@@ -1,5 +1,5 @@
 export default {
-    title: '建立号',
+    title: '建立号',
     form:{
         text1: '认证方式',
         text2: '手机',

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

@@ -20,15 +20,15 @@ export default {
   acType2:'新增通用学科',
   sltSubect:'选择学科',
   subName:'学科名称',
-  applyPd:'应用学',
-  periodSettingLabel: '学',
+  applyPd:'应用学',
+  periodSettingLabel: '学',
   order: '依建立时间排序',
   semesterSetting: '学期(季)设置',
   gradeSetting: '年级设置',
   subjectSetting: '学科设置',
   semesterNum: '学期数:',
   gradeNum: '年级数:',
-  periodNum: '科数:',
+  periodNum: '科数:',
   startDate: '开始于',
   semesterDuration: '学期时长:',
   dayUnit: '天',
@@ -83,7 +83,7 @@ export default {
   delCampusTitle: '删除校区',
   delSmTitle: '删除学期',
   delContent: '后与之关联的数据将不能查询,确认删除吗?',
-  campusWarning: '对不起,学/学院数量已到系统授权最多数量!',
+  campusWarning: '对不起,学/学院数量已到系统授权最多数量!',
   authWarning: '您暂无此操作权限!',
   saveErr: '保存失败!',
   saveWarning: '保存提醒',
@@ -113,7 +113,7 @@ export default {
   setGrade: '设置教室年级',
   setHiteachCode: 'HiTeach软件序号',
   addClassroom: '新增教室',
-  schoolPlan: '校平面图与教室位置设置',
+  schoolPlan: '校平面图与教室位置设置',
   uploadPlan: '上传平面图',
   hiteachList: 'HiTeach序号列表',
   codeSearchHolder: '请输入关键字搜索',

+ 4 - 4
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/schoolMgmt.js

@@ -1,10 +1,10 @@
 export default {
   pageButton1: '智慧教室管理仪表板',
   pageButton2: '智慧学校管理表板',
-  block1Title1: '号启用逐日变化 (每日启用)',
+  block1Title1: '号启用逐日变化 (每日启用)',
   block1Title2: '课程列表',
-  block1SubTitle1: '总教师号启用数',
-  block1SubTitle2: '总学生号启用数',
+  block1SubTitle1: '总教师号启用数',
+  block1SubTitle2: '总学生号启用数',
   block1SubTitle3: '今日启用数',
   block1SubTitle4: '学习历程',
   block1SubTitle5: '参与学生',
@@ -73,7 +73,7 @@ export default {
   text39: '题目数',
   text40: '教材数',
   text41: '分享课例数',
-  text42: '校课纲数',
+  text42: '校课纲数',
   text43: '各年级资源产出分佈',
   text44: '一年级',
   text45: '二年级',

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

@@ -48,11 +48,11 @@ export default {
   '僅顯示HiTeach TBL序號': '仅显示HiTeach TBL序号',
   僅顯示已完成綁定的序號: '仅显示已完成绑定的序号',
   僅顯示已到期序號: '仅显示已到期序号',
-  已成功解除授權: '已成功解除授',
+  已成功解除授權: '已成功解除授',
 
   //SpaceStatus.vue
-  智慧教服務空間狀態: '智慧教学服务空间状态',
-  分配教空間: '分配教学空间',
+  智慧教服務空間狀態: '智慧教学服务空间状态',
+  分配教空間: '分配教学空间',
   空間總數: '空间总数',
   已使用空間總數: '已使用空间总数',
   空間使用狀況: '空间使用状况',
@@ -64,11 +64,11 @@ export default {
   '基本 1GB 永久授權': '基本 1GB 永久授权',
   '到期後將變更為IES基本空間,超出基本空間值將被收回': '到期后将变更为IES基本空间,超出基本空间值将被收回',
   購買記錄: '购买记录',
-  醍摩豆智慧教服務空間: '醍摩豆智慧教学服务空间',
+  醍摩豆智慧教服務空間: '醍摩豆智慧教学服务空间',
   訂單日期: '订单日期:',
   到期日: '到期日:',
   添購其他服務: '添购其他服务',
-  '空間已到期,超過僅供檢視': '空間已到期,超過僅供檢視',
+  '空間已到期,超過僅供檢視': '空间已到期,超过仅供检视',
 
   //SpaceChart.vue
   文件: '文件',
@@ -77,19 +77,19 @@ export default {
   圖片: '图片',
   題目與試卷: '题目与试卷',
   其他: '其他',
-  生使用: '学生使用',
+  生使用: '学生使用',
   已分配至教師: '已分配至教师',
   未使用: '未使用',
   空間: '空間',
   空間數: '空間數',
   空間比率: '空間比率',
 
-  //生帳號頁面的授權管理控件 student-account / AclassOneAuth.vue
-  確定收回所有授權: '確定收回所有授權',
+  //生帳號頁面的授權管理控件 student-account / AclassOneAuth.vue
+  確定收回所有授權: '确定收回所有授权',
   '收回授權後使用數會直接設置為0,如欲給予授權可針對目標對象進行套用。': '收回授权后使用数会直接设置为0,如欲给予授权可针对目标对象进行套用。',
   服務授權管理: '服务授权管理',
-  AClassONE智慧伴服務授權: 'AClassONE智慧学伴服务授权',
-  '賦予持有該服務授權的學生TEAM Modal ID使用AClassONE智慧學伴App的權限': '赋予持有该服务授权的学生TEAM Modal ID使用AClassONE智慧学伴App的权限',
+  AClassONE智慧伴服務授權: 'AClassONE智慧学伴服务授权',
+  '賦予持有該服務授權的学生TEAM Modal ID使用AClassONE智慧学伴App的權限': '赋予持有该服务授权的学生TEAM Modal ID使用AClassONE智慧学伴App的权限',
   總授權數: '总授权数',
   本次套用數: '本次套用数',
   已使用數: '已使用数',
@@ -125,14 +125,14 @@ export default {
   個固定分配: '个固定分配',
   '保存失敗,超過可用授權數!': '保存失败,超过可用授权数! ',
   全部收回成功: '全部收回成功',
-  請先勾選欲授權之生: '请先勾选欲授权之学生',
+  請先勾選欲授權之生: '请先勾选欲授权之学生',
   '請設定有效的目標項 !': '请设定有效的目标项 !',
-  '目前所選學制人數為 0 人!': '目前所选学制人数为 0 人!',
-  '請先選學制!': '请先选学制!',
-  '目前所選級人數為 0 人!': '目前所选学级人数为 0 人!',
-  '請先選級!': '请先选学级!',
+  '目前所選学制人數為 0 人!': '目前所选学段人数为 0 人!',
+  '請先選学制!': '请先选学段!',
+  '目前所選級人數為 0 人!': '目前所选学级人数为 0 人!',
+  '請先選級!': '请先选学级!',
   '目前所選班級人數為 0 人!': '目前所选班级人数为 0 人!',
-  '請先選班級!': '请先选学级!',
+  '請先選班級!': '请先选班級!',
   '全校人數超過所購買授權數,無法使用': '全校人数超过所购买授权数,无法使用',
   全部收回成功: '全部收回成功',
 
@@ -150,14 +150,14 @@ export default {
   目前可被分配總量:'目前可被分配总量',
   至:'至',
   每人分配:'每人分配',
-  當前勾選之教師帳號:'当前勾选之教师号',
+  當前勾選之教師帳號:'当前勾选之教师号',
   所有:'所有',
   進階權限:'进阶权限',
   一般權限:'一般权限',
-  之教師帳號:'之教师号',
+  之教師帳號:'之教师号',
   職稱為:'职称为',
-  的教師帳號:'的教师号',
-  所有教師帳號:'所有教师号',
+  的教師帳號:'的教师号',
+  所有教師帳號:'所有教师号',
 
   //下方method區塊
   '請手動輸入數字!': '请手动输入数字!',
@@ -175,7 +175,7 @@ export default {
   '先輸入有效數字,並進行勾選,再套用': '先输入有效数字,并进行勾选,再套用',
 
   //store/spaceAuth.js
-  校已使用空間:'学校已使用空间',
+  校已使用空間:'学校已使用空间',
   已分配給教師空間:'已分配给教师空间',
   剩餘空間:'剩余空间'
 }

+ 6 - 6
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/stuAccount.js

@@ -13,12 +13,12 @@ export default {
 
   // Index.vue
   menuAuth: '授权管理',
-  importStu: '入名单',
+  importStu: '入名单',
   addStu: '新增学生',
   editInfo: '编辑资讯',
   delStu: '删除学生',
   searchHolder: '输入关键字或账号资讯搜索',
-  periodHolder: '选择学',
+  periodHolder: '选择学',
   gradeHolder: '选择年级',
   classroomHolder: '选择班级',
   tips1: '请选择需要修改的学生!',
@@ -54,7 +54,7 @@ export default {
   classroomInfo: '教室信息',
   classroomInfoHolder: '请选择教室',
   newClassroom: '建立新教室',
-  periodInfo: '学',
+  periodInfo: '学',
   gradeInfo: '年级',
   submitAccount: '建立账号',
   submitActive: '保存',
@@ -65,7 +65,7 @@ export default {
 
   // ImportStudent.vue
   importTitle: '导入学生名单',
-  importTips1: '拖拽欲入的学生账号和表格档案至此',
+  importTips1: '拖拽欲入的学生账号和表格档案至此',
   importTips2: '或',
   importTips3: '点击文件图示打开文件浏览上传',
   importTips4: '打开的文件已删除!',
@@ -82,7 +82,7 @@ export default {
   importInfo3: '座号重复:',
   importInfo4: '没有对应教室:',
   importInfo5: '系统已存在账号:',
-  importInfo6: '可入:',
+  importInfo6: '可入:',
   passwordTips: '*未找到密码的项目将默认密码与账号相同',
   submitList: '建立账号',
   lackAttr:'Excel栏位有缺:',
@@ -102,7 +102,7 @@ export default {
   authCount: '学校总授权数',
   alreadyUse: '今日已取用授权数',
   mayUse: '可使用授权数',
-  authNum: '各学授权使用状态',
+  authNum: '各学授权使用状态',
 
   //StudentList.vue
   filterLabel:'筛选条件:',

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

@@ -44,13 +44,13 @@ export default {
         makeupExam: '可补考',
         makeupHw: '可补交',
         selectActivity: '请从列表挑选一个活动',
-        allSubject: '综合科'
+        allSubject: '综合科'
     },
     'settingView-title': '个人设定',
     'teammodel-account-management': {
-        'page-title': 'TeamModel 号管理',
+        'page-title': 'TeamModel 号管理',
         name: '姓名',
-        account: '号',
+        account: '号',
         password: '密码',
         phone: '手机号码',
         'e-mail': 'E-mail',
@@ -67,7 +67,7 @@ export default {
     'change-school': {
         'page-title': '切换学校',
         'current-data-school': '目前资料来源学校',
-        'Habook-smart-school': 'Habook智慧校'
+        'Habook-smart-school': 'Habook智慧校'
     },
     'homeView-title': '首页资讯总览',
     calenderCardTitle: '行事历',
@@ -171,7 +171,7 @@ export default {
     makeupHW: '可补交',
     empty: '目前无资料 ~',
     baseInfo: {
-        subject: '科:',
+        subject: '科:',
         teacher: '教师:',
         period: '活动期限:',
         postTime: '发布时间:',
@@ -261,7 +261,7 @@ export default {
     exam: {
         examLink: '试卷链接',
         isSubject: '科试卷',
-        subjectNow: '当前科',
+        subjectNow: '当前科',
         examData: '评测内容',
         gradeReport: '成绩报告',
         gradeAnalyse: '成绩分析',
@@ -392,7 +392,7 @@ export default {
             comIndex: '综合难度',
             objItem: '客观',
             subItem: '主观',
-            subjects: '科',
+            subjects: '科',
             item: '题目',
             objItems: '客观题',
             subItems: '主观题',
@@ -455,7 +455,7 @@ export default {
     },
     'calendar-title': '行事历 - 109学年度第二学期',
     today: '今天',
-    importEvent: '校班级要事',
+    importEvent: '校班级要事',
     deadlineTasks: '截止活动任务',
     schedule: '表定课表',
     des: '描述',
@@ -463,7 +463,7 @@ export default {
     place: '地点',
     course: '课程',
     mockcourses: ['阅读与写作', '英文简报', '电子电路专题实验', '计算机概论', '微处理机实验'],
-    importEventTitle: '校班级要事',
+    importEventTitle: '校班级要事',
     Thatday: '当日',
     deadlineTasksTitle: '当日截止未完成活动任务'
 }

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

@@ -31,7 +31,7 @@ export default {
 		namePlace:'请输入问卷名称',
 		target:'问卷对象',
 		privateClass:'个人班级',
-		schoolClass:'校班级',
+		schoolClass:'校班级',
 		targetPlace:'请选择问卷发布对象',
 		noFoundText:'暂未创建班级',
 		time:'起止时间',

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

@@ -9,7 +9,7 @@ export default {
         noSchool2:'暂未加入学校',
         copyright:'©2021 HABOOK Group',
         schoolMgt:'学校管理',
-        schoolRes:'校资源',
+        schoolRes:'校资源',
         baseSetting:'基础设置',
         teacherMgt:'教师管理',
         stuMgt:'学生管理',
@@ -18,14 +18,14 @@ export default {
         cusPlanMgt:'排课管理',
         authMgt:'授权管理',
         preview:'预览',
-        scSyllabus:'校课纲',
-        scContent:'校内容',
-        scQuBack:'校题库',
+        scSyllabus:'校课纲',
+        scContent:'校内容',
+        scQuBack:'校题库',
         kdBack:'知识点库',
         staAna:'统计分析',
         evAna:'学情分析',
-        scAna:'校分析',
-        scAc:'校活动',
+        scAna:'校分析',
+        scAc:'校活动',
         scEv:'评量测验',
         scVote:'投票活动',
         scQu:'问卷调查',

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

@@ -9,7 +9,7 @@ export default {
     text8: '近30日',
     text9: '本学期',
     text10: '年级',
-    text11: '科',
+    text11: '科',
     text12: '一年级',
     text13: '二年级',
     text14: '三年级',
@@ -22,7 +22,7 @@ export default {
     text21: '艺术',
     text22: '其他',
     text23: '科技互动指数关系图(年级)',
-    text24: '科技互动指数关系图(科)',
+    text24: '科技互动指数关系图(科)',
     text25: '音乐',
     text26: '软件测试',
     text27: '语文',
@@ -55,7 +55,7 @@ export default {
     text55: '科学',
     text56: '综合',
     text57: '教法应用指数关系图(年级)',
-    text58: '教法应用指数关系图(科)',
+    text58: '教法应用指数关系图(科)',
     text59: '互动 = 技术互动指数',
     text60: '教法 = 教学应用指数',
     text61: '裡,',

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

@@ -1,9 +1,9 @@
 export default {
     page:{
-        text1: '教师号管理',
-        text2: '添加教师号'
+        text1: '教师号管理',
+        text2: '添加教师号'
     },
-    blurryFilter: '通过关键字或号资讯搜索',
+    blurryFilter: '通过关键字或号资讯搜索',
     mulitSet: '批量权限管理',
     table: {
         text1: '基本',
@@ -15,11 +15,11 @@ export default {
     },
     authSet:{
         title:'权限设定',
-        subTitle: '欲进行授权变更的号',
+        subTitle: '欲进行授权变更的号',
         area1:{
-            title:'区、班、校管理页面',
-            read: '允许检视区、班、校管理页面',
-            auth1: '允许编辑学制内容,包括年级、学期科目资讯'
+            title:'区、校、班管理页面',
+            read: '允许检视区、校、班理页面',
+            auth1: '允许编辑学段内容,包括年级、学期学科资讯'
         },
         reset: '回復预设',
         save: '保存变更',
@@ -63,13 +63,13 @@ export default {
     },
     authority:{
         'classroom':'班级教室管理',
-        'system':'校基础数据管理',
+        'system':'校基础数据管理',
         'studentAccount':'学生账号管理',
         'teachermgmt':'教师账号管理',
         'classroom-read':'检视班级教室资料',
         'classroom-upd':'变更班级教室设定',
-        'schoolSetting-read':'检视校基础设定',
-        'schoolSetting-upd':'变更校基础设定',
+        'schoolSetting-read':'检视校基础设定',
+        'schoolSetting-upd':'变更校基础设定',
         'student-read':'检视学生账号',
         'student-upd':'变更学生账号',
         'teacher-checkTeacher':'检查老师可否看',
@@ -84,30 +84,30 @@ export default {
         'serviceDriveAuth': '授权管理',
         'auth-read': '查看授权管理信息',
         'auth-upd': '修改授权管理信息',
-        'syllabus': '校课纲管理',
-        'syllabus-read': '查看校课纲信息',
-        'syllabus-upd': '修改校课纲信息',
-        'schoolContent': '校内容管理',
-        'content-read': '查看校内容信息',
-        'content-upd': '修改校内容信息',
-        'schoolBank': '校题库管理',
-        'exercise-read': '查看校题库信息',
-        'exercise-upd': '修改校题库信息',
+        'syllabus': '校课纲管理',
+        'syllabus-read': '查看校课纲信息',
+        'syllabus-upd': '修改校课纲信息',
+        'schoolContent': '校内容管理',
+        'content-read': '查看校内容信息',
+        'content-upd': '修改校内容信息',
+        'schoolBank': '校题库管理',
+        'exercise-read': '查看校题库信息',
+        'exercise-upd': '修改校题库信息',
         'knowledge': '知识点库管理',
         'knowledge-read': '查看知识点库信息',
         'knowledge-upd': '修改知识点库信息',
         'totalIndex': '学情分析',
-        'analysis-read': '查看校学情分析',
-        'scboard': '校园分析',
-        'scboard-read': '查看校园分析',
-        'schoolAc': '校活动',
-        'schoolAc-read': '查看校活动',
-        'schoolAc-upd':'发布校活动',
+        'analysis-read': '查看校学情分析',
+        'scboard': '统计分析',
+        'scboard-read': '查看统计分析',
+        'schoolAc': '校活动',
+        'schoolAc-read': '查看校活动',
+        'schoolAc-upd':'发布校活动',
         'schoolEvaluation':'模拟评测数据',
         'mock-eva':'一键模拟评测作答和评分数据'
     },
     modal:{
-        text1: '此帐号权限已变更,是否要给此帐号更加合适的职称',
+        text1: '此账号权限已变更,是否要给此账号更加合适的职称',
         text2: '保存'
     },
     users:{
@@ -126,24 +126,24 @@ export default {
         title: '添加教师',
         btn: {
             download: '下载范本',
-            upload: '入名单',
+            upload: '入名单',
             search: '搜寻教师',
             sendInvite:'发送邀请',
             backHome: '重新检索'
         },
-        content: '<span>请输入<span class="point">教师号</span>、<span class="point">电话</span>或<span class="point">电子信箱</span >等资讯进行搜寻</span>',
+        content: '<span>请输入<span class="point">教师号</span>、<span class="point">电话</span>或<span class="point">电子信箱</span >等资讯进行搜寻</span>',
         skyBox:{
             text1: '本次搜寻结果',
             text2: '档案资料数',
-            text3: '成功汇入帐号数',
-            text4: '重复号资料数',
-            text5: '汇入失败帐号数',
+            text3: '成功导入账号数',
+            text4: '重复号资料数',
+            text5: '导入失败账号数',
             unit: '笔',
-            error1: '检索到相同号',
-            error2: '重复邀请或找不到号'
+            error1: '检索到相同号',
+            error2: '重复邀请或找不到号'
         },
         impUsersBox:{
-            removeUser: '取消入'
+            removeUser: '取消入'
         },
         groundBox:{
             inviteAll: '全部发送邀请'

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

@@ -3,13 +3,14 @@ export default {
 		title:'学情分析仪表盘',
 		tab1:'统计数据',
 		tab2:'评测数据',
+        noData: '暂时找不到数据!'
 	},
 	rateLineTitle:'选项选答率分析',
 	trueAnswerRate:'正答率',
 	PHAnswerRate:'高分组正答率',
 	PLAnswerRate:'低分组正答率',
 	R1R6LineTitle:'R1-R6作答曲线',
-	noKnowPointTip:'该科下未收集到知识点数据',
+	noKnowPointTip:'该科下未收集到知识点数据',
 	lostStu:'缺考人数',
 	showAnalysis:'数据分析',
 	allSubjects:'全科',
@@ -90,7 +91,7 @@ export default {
     module4: '知识点掌握',
     module5: '认知层次掌握',
     exportTable: '导出表格',
-    currentSubject: '当前科',
+    currentSubject: '当前科',
 	goExamList:'查看更多评测',
 
     // AchievementAnalysis.vue
@@ -281,7 +282,7 @@ export default {
 		RLRate:'低分组选答率',
 		tip:'* 绿色代表进线,蓝色代表踩线'
 	},
-	paperSubject:'试卷科',
+	paperSubject:'试卷科',
 	paperItemsCount:'试卷题数',
 	backUp:'返回上级'
 

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

@@ -25,7 +25,7 @@ export default {
 		namePlace:'请输入投票名称',
 		target:'投票对象',
 		privateClass:'个人班级',
-		schoolClass:'校班级',
+		schoolClass:'校班级',
 		targetPlace:'请选择投票发布对象',
 		noFoundText:'暂未创建班级',
 		time:'起止时间',

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

@@ -70,7 +70,7 @@ export default {
     grade12: '十二年級',
     smartClass: '智慧教室',
     sokratesClass: '議課教室',
-    selfpace: '書面問答',
+    selfpace: '測驗模式',
     blankPageAdd: '新增檔案',
     pptImport: '匯入.pptx',
     powerclick: 'PowerClick',
@@ -78,7 +78,7 @@ export default {
     ActIrsMode: '互動模式',
     edit: '編輯模式',
     ActPowerClickMode: 'Power Click',
-    ActSelfPaceMode: '書面問答',
+    ActSelfPaceMode: '測驗模式',
     ActDscMode: '遠距模式',
     ActElimitedMode: '挑戰賽模式',
     Other: '白板',

+ 4 - 4
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/courseManage.js

@@ -15,9 +15,9 @@ export default {
     base: {
         baseTag: '基礎設定',
         courseName: '課程名稱',
-        coursePeriod: '設定學',
+        coursePeriod: '設定學',
         courseGrade: '設定年級',
-        courseSubject: '設定科',
+        courseSubject: '設定科',
         courseNotice: '課程公告',
         teachers: '協同教師設定',
         teachers1: '任課教師設定',
@@ -43,7 +43,7 @@ export default {
         content: '內容:',
         question: '題庫:',
         placeHolder1: '請選擇學制',
-        placeHolder2: '請選擇科',
+        placeHolder2: '請選擇科',
         placeHolder3: '請選擇年級'
     },
     classroom: {
@@ -81,7 +81,7 @@ export default {
         classroomTableC3: '學制',
         classroomTableC4: '年級',
         classroomTableC5: '學生人數',
-        personalClassroomTitle: '建個人教室',
+        personalClassroomTitle: '建個人教室',
         invitationCode: '教室邀請碼',
         classroomName: '教室名稱',
         closeChoose: '關閉選擇教室',

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

@@ -10,8 +10,8 @@ export default {
     nameHolder: '請輸入課程名稱',
     cusCode: '課程編碼',
     codeHolder: '請輸入課程編碼',
-    cusPd: '課程學',
-    pdHolder: '請選擇學',
+    cusPd: '課程學',
+    pdHolder: '請選擇學',
     cusSubject: '課程學科',
     sjHolder: '請選擇學科',
     cusTeachers: '授課教師',
@@ -22,7 +22,7 @@ export default {
     tableCol1: '序號',
     tableCol2: '課程名稱',
     tableCol3: '課程編碼',
-    tableCol4: '學',
+    tableCol4: '學',
     tableCol5: '學科',
     tableCol6: '教師人數',
     tableCol7: '授課教師',
@@ -32,7 +32,7 @@ export default {
     addErr: '新增成功!',
     editOk: '修改成功!',
     editErr: '修改失敗!',
-    formTips: '請先完善資訊,再存!',
+    formTips: '請先完善資訊,再存!',
     noSchool: '尚未加入學校,沒有學校數據',
     sltCusTips: '請選擇課程',
 
@@ -84,7 +84,7 @@ export default {
     lessonContent: '課例教材',
     share: '分享到頻道',
     noAc: '暫無記錄',
-    pdLabel: '學:',
+    pdLabel: '學:',
     noClassCus: '課程未安排教室:',
     noTImeCus: '課程未設定時間:',
     listMode: '清單模式',
@@ -127,13 +127,13 @@ export default {
     groupType3: '依座順序S形分組',
     action: '操作',
     atLeast: '至少保留一組',
-    checkName: '請先輸入組名再建組別',
+    checkName: '請先輸入組名再建組別',
     noStuTips: '暫無學生可以進行分組',
     groupCount: '分組數量最少為1',
     groupTypeTips: '請設定分組管道',
     groupUnit: '組',
     stuNameList: '學生名單',
-    saveGroup: '存分組',
+    saveGroup: '存分組',
 
     //NewCusMgt.vue
     schdTable: '課表模式',
@@ -148,7 +148,7 @@ export default {
     removeList: '移除名單',
     addrLabel:'上課教室:',
     nameLabel:'班級名單:',
-    defaultList: '默認名單',
+    defaultList: '預設名單',
     noSet: '未設定',
     defaultTips: '預設名單為教室對應的名單,否則需要指定自定義名單。',
     noStu: '暫無學生',
@@ -234,7 +234,7 @@ export default {
     sat: '星期六',
     sun: '星期日',
     nameListType:'類型',
-    scClass:'校班級',
+    scClass:'校班級',
     customNameList:'自定義名單',
     
 }

+ 6 - 6
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/evaluation.js

@@ -18,9 +18,9 @@ export default {
 		diff: '難度',
 		level: '層次',
 		type: '題型',
-		period: '學',
+		period: '學',
 		grade: '年級',
-		subject: '科',
+		subject: '科',
 		sort: '排序',
 		createTime: '建立時間',
 		useCount: '使用次數'
@@ -71,9 +71,9 @@ export default {
 		newSchoolItem: '新建學校題目',
 		newPrivateItem: '新建個人題目',
 		backToBank: '返回題庫',
-		choosePeriod: '選擇學',
+		choosePeriod: '選擇學',
 		chooseGrade: '選擇年級',
-		chooseSubject: '選擇科',
+		chooseSubject: '選擇科',
 		gradePlaceholder: '不選擇則預設選中全部年級',
 		diff: '題目難度',
 		field: '關聯認知層次',
@@ -132,7 +132,7 @@ export default {
 		noOptionTip: '試題題幹或選項資訊有誤,請刪除或者重新匯入正確檔案!'
 	},
 	paperList: {
-		usePeriod: '適用學',
+		usePeriod: '適用學',
 		useGrade: '適用年級',
 		itemCount: '題量',
 		paperAnalysis: '試卷分析',
@@ -221,7 +221,7 @@ export default {
 	points: {
 		addPoint: '新增知識點',
 		searchPoint: '搜尋知識點',
-		noPoint: '當前科下暫無知識點',
+		noPoint: '當前科下暫無知識點',
 		checkedPoint: '已選知識點',
 		pointName: '知識點名稱',
 		inputNewPoint: '輸入新知識點名稱',

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

@@ -30,5 +30,10 @@ export default {
     verifySchool:'加入學校',
     toSchool:'加入學校>>>',
     schoolSuccess:'您已加入學校! ',
-    hasJoin:'已加入'
+    hasJoin:'已加入',
+    myCourse:'我的課表',
+    tmwCus:'明日課程',
+    course:'課程:',
+    className:'班級:',
+    tmwNoCus:'明天沒有課程安排'
 }

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

@@ -16,7 +16,7 @@ export default {
     blockWarning2: '已存在相同名稱知識塊,請修改名稱! ',
     blockWarning3: '知識塊名稱不能為空',
     blockWarning4: '無現有知識塊選擇',
-    period: '當前學',
+    period: '當前學',
     searchSubject: '搜尋學科...',
     blockCount: '知識塊數',
     point: '知識點',

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

@@ -44,7 +44,7 @@ export default {
         search: '蒐索'
     },
 
-    //建評量學校/個人
+    //建評量學校/個人
     createEv: {
         createLabel: '建立評量',
         publishEv: '發佈評量',
@@ -69,7 +69,7 @@ export default {
         noSubject1: '*請先選擇測試學制',
         papersLabel: '試卷庫',
         perviewLabel: '試卷預覽',
-        importLabel: '入說明',
+        importLabel: '入說明',
         answerPreview: '作答預覽',
         errTips1: '評量名稱不能為空!',
         errTips2: '測試類型不能為空!',
@@ -207,7 +207,7 @@ export default {
         clickFresh: '點此重整',
         inCalc: '數據結算中,請稍後查看',
         total: '總分',
-        avgScore: '均統計',
+        avgScore: '均統計',
         totalLabel: '總量',
         scoreMat: '分數段統計'
     },
@@ -218,7 +218,7 @@ export default {
         full: '完整閱卷',
         question: '指定題目',
         markNum: '閱卷次數',
-        allocation: '分配管道',
+        allocation: '分配方式',
         random: '隨機分配',
         class: '按班分配',
         scoreDiff: '分差',
@@ -233,7 +233,7 @@ export default {
         quIndex: '題號',
         markNum: '閱卷人數',
         markTea: '閱卷教師',
-        stage: '活動階段',
+        stage: '進行階段',
         test: '施測',
         complete: '已完成',
         scan: '掃描',
@@ -256,14 +256,14 @@ export default {
         stuNum: '考試人數',
         scanProg: '掃描進度',
         assignStatus: '閱卷分配',
-        errDeclare: '異常報',
-        arbDeclare: '仲裁報',
+        errDeclare: '異常報',
+        arbDeclare: '仲裁報',
         markProg: '閱卷進度',
         name: '姓名',
         markTea:'閱卷老師',
         progress: '進度',
         action: '操作',
-        addTeaTitle: '加閱卷老師',
+        addTeaTitle: '加閱卷老師',
         markNum: '閱卷量'
     }
 }

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

@@ -1,12 +1,12 @@
 export default {
   // SystemSetting.vue
   commonset: '通用設定',
-  pdMgt: '學管理',
+  pdMgt: '學管理',
   cgMgt: '學院管理',
   updBadge: '上傳校徽',
   scType: '學校類型:',
-  scType1: '普教',
-  scType2: '高教',
+  scType1: '國教(K-12)',
+  scType2: '大專院校',
   proSetting: '專業設置',
   curSemSta: '當前狀態:',
   schoolNameLabel: '學校名稱:',
@@ -28,11 +28,11 @@ export default {
   subjectSetting: '學科設定',
   semesterNum: '學期數:',
   gradeNum: '年級數:',
-  periodNum: '科數:',
+  periodNum: '科數:',
   startDate: '開始於',
   semesterDuration: '學期時長:',
   dayUnit: '天',
-  saveInfo: '存儲變更',
+  saveInfo: '變更',
   noSemester: '沒有設定學期',
   editLabel: '編輯',
   monthHolder: '月',
@@ -40,13 +40,13 @@ export default {
   delete: '删除',
   ssTips1: '點擊設定名稱',
   ssTips2: '至少需要保留一項!',
-  ssTips3: '存/修改資訊成功!',
+  ssTips3: '存/修改資訊成功!',
   ssTips4: '已有相同的名字,請重新設定名字!',
   ssTips5: '學科數已達上限!',
   ssTips6: '年級數已達上限!',
   ssTips7: '學期數已達上限!',
-  ssTips8: '您修改資訊後還未存,如果離開數據將會遺失!',
-  presetPeriod: '學',
+  ssTips8: '您修改資訊後還未存,如果離開數據將會遺失!',
+  presetPeriod: '學',
   persetSemester: '學期',
   persetGrade: '年級',
   presetGrade1: '一年級',
@@ -56,7 +56,7 @@ export default {
   presetSubject1: '語文',
   presetSubject2: '數學',
   presetSubject3: '英語',
-  pdHolder: '設定學…',
+  pdHolder: '設定學…',
   tmzLabel: '時區設定:',
   tmzHolder: '請設定時區…',
   campusHolder: '請設定校區',
@@ -79,16 +79,16 @@ export default {
   delGradeTitle: '删除年級',
   delMajorTitle: '删除年級',
   delSubjectTitle: '删除學科',
-  delPdTitle: '删除學',
+  delPdTitle: '删除學',
   delCampusTitle: '删除校區',
   delSmTitle: '删除學期',
   delContent: '後與之關聯的數據將不能査詢,確認删除嗎?',
   campusWarning: '對不起,學制/學院數量已到系統授權最多數量!',
   authWarning: '您暫無此操作許可權!',
-  saveErr: '存失敗!',
-  saveWarning: '存提醒',
+  saveErr: '存失敗!',
+  saveWarning: '存提醒',
   leaveText: '離開',
-  pdWarning: '學名稱不能重複',
+  pdWarning: '學名稱不能重複',
   semWarning: '學期名稱不能重複',
   gdNameWarning: '年級名稱不能重複',
   subWarning: '學科名稱不能重複',
@@ -101,19 +101,19 @@ export default {
 
   // ClassroomSetting.vue
   classroomList: '教室清單',
-  pdLabel: '學:',
-  listOrder: '依建時間排序',
+  pdLabel: '學:',
+  listOrder: '依建時間排序',
   listOrder1: '依教室編號排序',
   listOrder2: '依智慧教室排序',
   classroomAttr: '教室内容',
   classroomCode: '教室編碼',
   classroomName: '教室名稱',
   headmaster: '班主任',
-  setPeriod: '選擇教室學',
+  setPeriod: '選擇教室學',
   setGrade: '設定教室年級',
   setHiteachCode: 'HiTeach軟件序號',
   addClassroom: '新增教室',
-  schoolPlan: '校平面圖與教室位置設定',
+  schoolPlan: '校平面圖與教室位置設定',
   uploadPlan: '上傳平面圖',
   hiteachList: 'HiTeach序號清單',
   codeSearchHolder: '請輸入關鍵字蒐索',
@@ -131,7 +131,7 @@ export default {
   hiTeach: 'HiTeach序號',
   csTips1: '已放大至最大倍數!',
   csTips2: '已縮小至最小倍數!',
-  csTips3: '存成功!',
+  csTips3: '存成功!',
   csTips4: '至少需要保留一項!',
   csTips5: '上傳成功!',
   csTips6: '此序號已綁定到教室!',
@@ -178,10 +178,10 @@ export default {
   expireLabel2: '無限期',
   findStuErr: '査詢班級學生名單失敗!',
   noStdClass: '當前班級未選中,不能移動!',
-  formWarning: '請先完善班級資訊再存!',
+  formWarning: '請先完善班級資訊再存!',
   bindingErr: 'Hiteach綁定失敗!',
   delClass: '删除班級',
-  saveClassWarning: '當前教室數據尚未保存。如果離開,修改的數據將不會保存!',
+  saveClassWarning: '當前教室數據尚未儲存。如果離開,修改的數據將不會儲存!',
   addStuBtn: '添加學生',
   delStuBtn: '移除學生',
   editSeat: '修改座號',

+ 11 - 11
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/serviceDriveAuth.js

@@ -113,18 +113,18 @@ export default {
   '大於總授權數,無法使用': '大於總授權數,無法使用',
   添購其他授權: '添購其他授權',
   收回所有授權: '收回所有授權',
-  保存所有變更: '保存所有變更',
+  儲存所有變更: '儲存所有變更',
   選擇班級: '選擇班級',
 
   //下方method區塊
   固定分配授權數: '固定分配授權數',
   今日動態取用數: '今日動態取用數',
   今日可用授權數: '今日可用授權數',
-  '請先選擇套用,再按保存': '請先選擇套用,再按保存',
-  '保存成功,本次尚無新增授權數量': '保存成功,本次尚無新增授權數量',
-  '保存成功,本次新增': '保存成功,本次新增',
+  '請先選擇套用,再按儲存': '請先選擇套用,再按儲存',
+  '儲存成功,本次尚無新增授權數量': '儲存成功,本次尚無新增授權數量',
+  '儲存成功,本次新增': '儲存成功,本次新增',
   個固定分配: '個固定分配',
-  '保存失敗,超過可用授權數!': '保存失敗,超過可用授權數!',
+  '儲存失敗,超過可用授權數!': '儲存失敗,超過可用授權數!',
   全部收回成功: '全部收回成功',
   請先勾選欲授權之學生: '請先勾選欲授權之學生',
   '請設定有效的目標項 !': '請設定有效的目標項 !',
@@ -141,10 +141,10 @@ export default {
   空間分配: '空間分配',
   確定收回所有空間: '確定收回所有空間',
   '確定後全部每位教師都直接設置為0GB。': '確定後全部每位教師都直接設置為0GB。',
-  保存提醒: '保存提醒',
-  '当前空間数据尚未保存。如果關閉,修改的数据将不会保存!': '當前空間數據尚未保存。如果關閉,修改的數據將不會保存!',
+  儲存提醒: '儲存提醒',
+  '当前空間数据尚未儲存。如果關閉,修改的数据将不会儲存!': '當前空間數據尚未儲存。如果關閉,修改的數據將不會儲存!',
   回收空間: '回收空間',
-  保存變更: '保存變更',
+  儲存變更: '儲存變更',
   空間分配狀態: '空間分配狀態',
   總空間量: '總空間量:',
   單人固定容量分配: '單人固定容量分配',
@@ -168,10 +168,10 @@ export default {
   更新成功: '更新成功',
   超出該校使用空間: '超出該校使用空間',
   有不存在老師的ID: '有不存在老師的ID',
-  保存失敗: '保存失敗',
-  '您未進行任何個別變更或批次套用,無需保存': '您未進行任何個別變更或批次套用,無需保存',
+  儲存失敗: '儲存失敗',
+  '您未進行任何個別變更或批次套用,無需儲存': '您未進行任何個別變更或批次套用,無需儲存',
   '超出剩餘空間量,套用失敗': '超出剩餘空間量,套用失敗',
-  '套用完成,記得按保存': '套用完成,記得按保存',
+  '套用完成,記得按儲存': '套用完成,記得按儲存',
   '先輸入有效數字,再進行套用': '先輸入有效數字,再進行套用',
   套用完成: '套用完成',
   '先輸入有效數字,並進行勾選,再套用': '先輸入有效數字,並進行勾選,再套用',

+ 104 - 86
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/settings.js

@@ -1,88 +1,106 @@
 export default {
-	setting_title1: '學校管理',
-	setting_title2: '一般設定',
-	setting_title3: '開放平臺',
-	schoolList: '已加入或申請學校',
-	langSetting: '網站語言設定',
-	langTips: '請選擇網站要用來顯示選單、互動頁面以及通知資訊的語言',
-	langCheck: '使用瀏覽器語系展示',
-	themeSetting: '網站色彩模式',
-	themeTips: '請選擇網站顯示的色彩模式,以便提供最佳的用戶體驗',
-	menuSetting: '選單顯示設定',
-	menuTips: '選擇左側Menu在網站載入時的預設顯示模式',
-	menuOpen: '預設展開顯示',
-	menuClose: '預設關閉顯示',
-	logoSetting: 'Logo顯示設定',
-	logoTips: '選擇是否隱藏左上角平臺Logo',
-	logoOpen: '預設顯示',
-	logoHide: '預設隱藏',
-	defaultSchool: '預設學校',
-	curSchool: '當前學校',
-	courseNum: '課程數',
-	activityNum: '活動數',
-	joinStatus: '提出加入請求',
-	requestStatus: '送出加入邀請',
-	goSchool: '前往學校',
-	agreeJoin: '同意加入',
-	cancelAdd: '拒絕加入',
-	undoJoin: '撤銷申請',
-	requestJoin: '申請加入',
-	inputSearch: '輸入要檢索的學校名稱',
-	modalTip1: '注意',
-	modalTip2: '此舉動將使您離開當前學校的IES5網站,並前往',
-	modalTip3: '當前頁面未保存的資料將會遺失,是否同意此操作?',
-	columnName: '學校名稱',
-	columnArea: '地區',
-	columnId: '校程式碼',
-	columnTool: '操作',
-	modalTip4: '溫馨提示',
-	modalTip5: '確認加入',
-	modalTip6: '確認取消加入',
-	submitSucTips: '提交成功',
-	submitFailTips: '操作失敗',
-	joinSucTips: '加入成功!',
-	status1: '已加入',
-	status2: '收到邀請',
-	status3: '申請中',
-	searchTip:'請輸入<span>學校名稱</span>或者<span>學校程式碼</span>進行搜尋',
-	searchNone:'*如未搜尋到您想要的學校,可點擊下方申請建立您的學校',
-	applyBtn:'申請建立學校',
-	openList: '開放平臺清單',
-	openInfo: '平臺資訊',
-	openName: '應用名稱',
-	token: 'ApiToken',
-	des: '描述',
-	openStatus: '狀態',
-	enable: '啟用',
-	disable: '禁用',
-	apiName: '介面名稱',
-	apiAddress: '介面地址',
-	apiMethod: '請求方法',
-	openKeep: '保存平臺',
-	unedit: '取消編輯',
-	applyForm:{
-	title:'申請建立AI智慧學校',
-	name:'學校/機構名稱',
-	id:'學校/機构簡碼',
-	code:'學校/機构程式碼',
-	address:'學校/機构地址',
-	manager:'學校/機构負責人',
-	cellphone:'學校/機构聯繫電話',
-	content:'備註資訊',
-	place1:'選擇學校所在地區',
-	place2:'請輸入學校詳細地址',
-	place3:'請輸入您的手機號,郵箱等聯繫方式',
-	place4:'可填寫您的備註資訊',
-	place5:'請輸入管理員的稱呼',
-	place6:'請選擇學校所在地區',
-	submit:'提交申請',
-	submitSuc:'已成功提交申請!',
-	errTip1:'請選擇正確的地區!',
-	errTip2:'請將資訊填寫完整!',
-	rule1:'學校名稱不能為空',
-	rule2:'管理員資訊不能為空',
-	rule3:'聯繫方式不能為空',
-	rule4:'學校地址不能為空',
-	applyTip:'*提交申請後,將會於5個工作日內稽核完畢,並通知申請人。'
-	}
+    setting_title1: '學校管理',
+    setting_title2: '一般設定',
+    setting_title3: '開放平臺',
+    schoolList: '已加入或申請學校',
+    langSetting: '網站語言設定',
+    langTips: '請選擇網站要用來顯示選單、互動頁面以及通知資訊的語言',
+    langCheck: '使用瀏覽器語系展示',
+    themeSetting: '網站色彩模式',
+    themeTips: '請選擇網站顯示的色彩模式,以便提供最佳的用戶體驗',
+    menuSetting: '選單顯示設定',
+    menuTips: '選擇左側Menu在網站載入時的預設顯示模式',
+    menuOpen: '預設展開顯示',
+    menuClose: '預設關閉顯示',
+    logoSetting: 'Logo顯示設定',
+    logoTips: '選擇是否隱藏左上角平臺Logo',
+    logoOpen: '預設顯示',
+    logoHide: '預設隱藏',
+    defaultSchool: '預設學校',
+    curSchool: '當前學校',
+    courseNum: '課程數',
+    activityNum: '活動數',
+    joinStatus: '提出加入請求',
+    requestStatus: '送出加入邀請',
+    goSchool: '前往學校',
+    agreeJoin: '同意加入',
+    cancelAdd: '拒絕加入',
+    undoJoin: '撤銷申請',
+    requestJoin: '申請加入',
+    inputSearch: '輸入要檢索的學校名稱',
+    modalTip1: '注意',
+    modalTip2: '此舉動將使您離開當前學校的IES5網站,並前往',
+    modalTip3: '當前頁面未儲存的資料將會遺失,是否同意此操作?',
+    columnName: '學校名稱',
+    columnArea: '地區',
+    columnId: '校程式碼',
+    columnTool: '操作',
+    modalTip4: '溫馨提示',
+    modalTip5: '確認加入',
+    modalTip6: '確認取消加入',
+    submitSucTips: '提交成功',
+    submitFailTips: '操作失敗',
+    joinSucTips: '加入成功!',
+    status1: '已加入',
+    status2: '收到邀請',
+    status3: '申請中',
+    searchTip: '請輸入<span>學校名稱</span>或者<span>學校程式碼</span>進行搜尋',
+    searchNone: '*如未搜尋到您想要的學校,可點擊下方申請建立您的學校',
+    applyBtn: '申請建立學校',
+    openList: '開放平臺清單',
+    openInfo: '平臺資訊',
+    openName: '應用名稱',
+    opName: "開放平台應用",
+    token: 'ApiToken',
+    des: '描述',
+    openStatus: '狀態',
+    enable: '啟用',
+    disable: '禁用',
+    apiName: '接口名稱',
+    apiAddress: '接口地址',
+    apiMethod: '請求方法',
+    apiParams: '参数示例',
+    openKeep: '儲存平臺',
+    edit: "編輯應用",
+    unedit: '取消編輯',
+    delModal1: '您確定刪除',
+    delModal2: '嗎?',
+    delModal3: '刪除成功',
+    delModal4: '刪除失敗',
+    delModal5: '已取消刪除',
+    keepModal1: '儲存成功',
+    keepModal2: '儲存失敗',
+    refreshModal1: '更新成功',
+    refreshModal2: '更新失敗',
+    refreshModal3: '更新後,原有的金鑰會失效,您確定要更新嗎?',
+    refreshModal4: '已取消更新',
+    copyModal1: '複製成功',
+    copyModal2: '複製失敗',
+    openModal1: '應用列表取得失敗',
+    openModal2: 'api列表取得失敗',
+    applyForm: {
+        title: '申請建立AI智慧學校',
+        name: '學校/機構名稱',
+        id: '學校/機构簡碼',
+        code: '學校/機构程式碼',
+        address: '學校/機构地址',
+        manager: '學校/機构負責人',
+        cellphone: '學校/機构聯繫電話',
+        content: '備註資訊',
+        place1: '選擇學校所在地區',
+        place2: '請輸入學校詳細地址',
+        place3: '請輸入您的手機號,郵箱等聯繫方式',
+        place4: '可填寫您的備註資訊',
+        place5: '請輸入管理員的稱呼',
+        place6: '請選擇學校所在地區',
+        submit: '提交申請',
+        submitSuc: '已成功提交申請!',
+        errTip1: '請選擇正確的地區!',
+        errTip2: '請將資訊填寫完整!',
+        rule1: '學校名稱不能為空',
+        rule2: '管理員資訊不能為空',
+        rule3: '聯繫方式不能為空',
+        rule4: '學校地址不能為空',
+        applyTip: '* 提交申請後,將會於5個工作日內審核完畢,並通知申請人。'
+    }
 }

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

@@ -57,21 +57,21 @@ export default {
   periodInfo: '學制資訊',
   gradeInfo: '年級',
   submitAccount: '建立帳號',
-  submitActive: '存',
+  submitActive: '存',
   chooseInfo: '選取項目',
   chooseNum: '總計:',
   numUnit: '條',
   academicYear: '學年度',
 
   //ImportStudent.vue
-  importTitle: '入學生名單',
+  importTitle: '入學生名單',
   importTips1: '拖移想匯入的學生帳號和表格檔案至此',
   importTips2: '或',
   importTips3: '點按檔案圖示以瀏覽檔案上傳',
   importTips4: '打開的檔案已刪除!',
   importTips5: '檔案類型錯誤',
   importTips6: '檔案:',
-  importTips7: '不是EXCEL檔案,請選擇尾碼為.xlsx或者.xls的EXCEL檔案。',
+  importTips7: '不是EXCEL檔案,請選擇附加檔名為.xlsx或者.xls的EXCEL檔案。',
   importTips8: '檔案讀取出錯',
   importTips9: '缺少',
   importTips10: '資訊,請完善,再匯入!',
@@ -83,14 +83,14 @@ export default {
   importInfo4: '沒有對應教室:',
   importInfo5: '系統已存在帳號:',
   importInfo6: '可匯入:',
-  passwordTips: '*未找到密碼的項目將默認密碼與帳號相同',
+  passwordTips: '*未找到密碼的項目將預設密碼與帳號相同',
   submitList: '建立帳號',
   lackAttr:'Excel欄位有缺:',
   noSetNo:'沒有座號:',
   gradeErr:'年級錯誤:',
   attrWarning:'警告:Excel 內欄位不完整! ',
-  setNoWarning:'警告:Excel 內的座號重覆! ',
-  idWarning:'警告:Excel 內號重複! ',
+  setNoWarning:'警告:Excel 內的座號重覆! ',
+  idWarning:'警告:Excel 內號重複! ',
   gradeWarning:'警告:年級錯誤',
   setNoErr:"錯誤:座位號已在校內重複",
   downloadText:'(下載名單模板)',

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

@@ -67,7 +67,7 @@ export default {
     'change-school': {
         'page-title': '切換學校',
         'current-data-school': '目前資料來源學校',
-        'Habook-smart-school': 'HABOOK智慧校'
+        'Habook-smart-school': 'HABOOK智慧校'
     },
     'homeView-title': '首頁資訊總覽',
     calenderCardTitle: '行事歷',
@@ -443,7 +443,7 @@ export default {
     },
     'calendar-title': '行事歷 - 109學年度第二學期',
     today: '今天',
-    importEvent: '校班級要事',
+    importEvent: '校班級要事',
     deadlineTasks: '截止活動任務',
     schedule: '表定課表',
     des: '描述',
@@ -451,7 +451,7 @@ export default {
     place: '地點',
     course: '課程',
     mockcourses: ['閱讀與寫作', '英文簡報', '電子電路專題實驗', '計算機概論', '微處理機實驗'],
-    importEventTitle: '校班級要事',
+    importEventTitle: '校班級要事',
     Thatday: '當日',
     deadlineTasksTitle: '當日截止未完成活動任務'
 }

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

@@ -6,17 +6,17 @@ export default {
 	surveyDetails: '問卷詳情',
 	undo: '撤銷發佈',
 	edit: '編輯問卷',
-	save: '存問卷',
+	save: '存問卷',
 	cancelEdit: '取消編輯',
 	surveyResult: '問卷數據',
 	addItem: '新增題目',
 	single: '單選題',
-	multiple: '复选题',
-	judge: '判斷題',
+	multiple: '複選题',
+	judge: '是非題',
 	subjective: '問答題',
 	defaultName: '預設問卷名稱',
-	isExistTip: '已存在未存的問卷活動!',
-	getDataFailTip: '獲取數據失敗!',
+	isExistTip: '已存在未存的問卷活動!',
+	getDataFailTip: '資料取得失敗!',
 	deletesurvey: '刪除問卷',
 	deleteConfirmTip: '確認刪除該問卷活動?',
 	cancelSurvey: '取消發佈',
@@ -25,7 +25,7 @@ export default {
 	deleteFail: '刪除失敗',
 	doSuc: '操作成功',
 	doFail: '操作失敗',
-	noData: '暫無數據',
+	noData: '暫無資料',
 	form: {
 		name: '問卷名稱',
 		namePlace: '請輸入問卷名稱',
@@ -33,8 +33,8 @@ export default {
 		privateClass: '個人班級',
 		schoolClass: '學校班級',
 		targetPlace: '請選擇問卷發佈對象',
-		noFoundText: '暫未建班級',
-		time: '起時間',
+		noFoundText: '暫未建班級',
+		time: '起時間',
 		endTimePlace: '請選擇問卷結束時間',
 		description: '問卷描述',
 		optionSetting: '選項設定',
@@ -42,7 +42,7 @@ export default {
 		selectNum: '可問卷數',
 		other: '其他',
 		openSecret: '開啟匿名問卷',
-		save: '存',
+		save: '存',
 		cancel: '取消',
 		editSuc: '修改成功',
 		addSuc: '添加成功',
@@ -56,7 +56,7 @@ export default {
 		ruleClasses: '問卷對象不能為空',
 		ruleTime: '請設定起止時間',
 		ruleDate: '日期不能為空',
-		ruleStartTime: '開始時間不能早於當前時間'
+		ruleStartTime: '開始時間不能比當前時間早'
 	},
 	questionaire: {
 		noItemData: '暫無題目數據',
@@ -67,8 +67,8 @@ export default {
 		item: '題目',
 		confirm: '確認',
 		single: '單選',
-		multiple: '選',
-		judge: '判斷',
+		multiple: '選',
+		judge: '是非',
 		subjective: '問答',
 		noCompleteTip: '請填寫完整',
 		confirmTitle: '溫馨提示',

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

@@ -9,7 +9,7 @@ export default {
         noSchool2: '暫未加入學校',
         copyright:'©2021 HABOOK Group',
         schoolMgt: '學校管理',
-        schoolRes: '校資源',
+        schoolRes: '校資源',
         baseSetting: '基礎設定',
         teacherMgt: '教師管理',
         stuMgt: '學生管理',
@@ -18,14 +18,14 @@ export default {
         cusPlanMgt: '排課管理',
         authMgt: '授權管理',
         preview: '預覽',
-        scSyllabus: '校課綱',
-        scContent: '校內容',
-        scQuBack: '校題庫',
+        scSyllabus: '校課綱',
+        scContent: '校內容',
+        scQuBack: '校題庫',
         kdBack: '知識點庫',
         staAna: '統計分析',
         evAna: '學情分析',
-        scAna: '校園分析',
-        scAc: '校活動',
+        scAna: '統計數據',
+        scAc: '校活動',
         scEv: '評量測驗',
         scVote: '投票活動',
         scQu: '問卷調查',
@@ -34,7 +34,7 @@ export default {
         myCus: '我的課程',
         cusContent: '我的資源',
         prtSyllabus: '個人課綱',
-        prtContent: '個人內容',
+        prtContent: '個人教材',
         prtQuBack: '個人題庫',
         stuAc: '我的活動',
         prtEv: '個人評測',
@@ -47,14 +47,14 @@ export default {
         taskList: '任務清單'
     },
     compt: {
-        cusWare: '課件',
-        sizeErr: '文件大小超出限制',
+        cusWare: '教材',
+        sizeErr: '檔案大小超出限制',
         typeErr: '檔案類型不支持',
         acRep: '警告:未找到指定班級',
         classErr: '警告:未找到指定班級',
-        setErr: '錯誤:座號重複',
-        tbColErr1: '導入數據沒有',
-        tbColErr2: ',請完善表格數據再導入',
+        setErr: '錯誤:座號重複',
+        tbColErr1: '沒有匯入到數據',
+        tbColErr2: ',請完善表格資料再匯入',
         fileReadErr: '檔案讀取失敗'
     }
 }

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

@@ -55,7 +55,7 @@ export default {
     text55: '科學',
     text56: '綜合',
     text57: '教法應用指數關系圖(年級)',
-    text58: '教法應用指數關系圖(科)',
+    text58: '教法應用指數關系圖(科)',
     text59: '互動 = 技術互動指數',
     text60: '教法 = 教學應用指數',
     text61: '裡,',

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

@@ -31,7 +31,7 @@ export default {
   props7: '儲存空間不足!',
   uploadText: '點按或者拖移上傳',
 
-  resTips: 'HiTeach生成的課件,只支持HTEX格式的教材預覽',
+  resTips: 'HiTeach生成的教材,只支持HTEX格式預覽',
   space: '空間:',
   calcing: '計算中…',
   blobFull: '(已滿)',

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

@@ -19,7 +19,7 @@ export default {
         area1:{
             title:'區、校、班管理頁面',
             read: '允許檢視區、校、班管理頁面',
-            auth1: '允許編輯學制內容,包括年級、學期科資訊'
+            auth1: '允許編輯學制內容,包括年級、學期科資訊'
         },
         reset: '恢復預設',
         save: '儲存變更',
@@ -44,8 +44,8 @@ export default {
         info5: '取消教師邀請',
         info6: '請問您確定要取消',
         info7: '的教師邀請',
-        info8: '拒教師申請',
-        info9: '請問您確定要拒',
+        info8: '拒教師申請',
+        info9: '請問您確定要拒',
         info10: '的教師申請',
         info11: '搜尋不能為空白',
         info12: '已對所有成員送出邀請',
@@ -63,13 +63,13 @@ export default {
     },
     authority:{
         'classroom':'班級教室管理',
-        'system':'校基礎數據管理',
+        'system':'校基礎數據管理',
         'studentAccount':'學生帳號管理',
         'teachermgmt':'教師帳號管理',
         'classroom-read':'檢視班級教室資料',
         'classroom-upd':'變更班級教室設定',
-        'schoolSetting-read':'檢視校基礎設定',
-        'schoolSetting-upd':'變更校基礎設定',
+        'schoolSetting-read':'檢視校基礎設定',
+        'schoolSetting-upd':'變更校基礎設定',
         'student-read':'檢視學生帳號',
         'student-upd':'變更學生帳號',
         'teacher-checkTeacher':'檢查老師是否可看',
@@ -97,12 +97,12 @@ export default {
         'knowledge-read':'查看知識點庫資訊',
         'knowledge-upd': '修改知識點庫資訊',
         'analysis':'學情分析',
-        'analysis-read':'查看校學情分析',
-        'scboard':'校園分析',
-        'scboard':'查看校園分析',
-        'schoolAc':'校活動',
-        'schoolAc-read':'查看校活動',
-        'schoolAc-upd':'發佈校活動'
+        'analysis-read':'查看校學情分析',
+        'scboard':'統計數據',
+        'scboard':'查看統計數據',
+        'schoolAc':'校活動',
+        'schoolAc-read':'查看校活動',
+        'schoolAc-upd':'發佈校活動'
     },
     modal:{
         text1: '此帳號權限已變更,是否要給此帳號更加合適的職稱',
@@ -146,5 +146,8 @@ export default {
         groundBox:{
             inviteAll: '全部發送邀請'
         }
-    }
+    },
+    saveWarning:'儲存提醒',
+    warningCnt:'當前空間資料尚未儲存。如果離開,所修改的資料將不會保留! ',
+    leaveText:'離開'
 }

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

@@ -10,7 +10,7 @@ export default {
 	PHAnswerRate: '高分組正答率',
 	PLAnswerRate: '低分組正答率',
 	R1R6LineTitle: 'R1-R6作答曲線',
-	noKnowPointTip: '該科下未收集到知識點數據',
+	noKnowPointTip: '該科下未收集到知識點數據',
 	lostStu: '缺考人數',
 	showAnalysis: '資料分析',
 	allSubjects: '全科',
@@ -28,8 +28,8 @@ export default {
 	text7: '參與人數',
 	text8: '考試日期',
 	text9: '無',
-	condition1: '關註學段',
-	condition2: '關年級',
+	condition1: '關注學制',
+	condition2: '關年級',
 	condition3: '學年期',
 	condition4: '評測類型',
 	condition5: '評測範圍',
@@ -41,11 +41,11 @@ export default {
 	ti_title1: '基本資料統計',
 	ti_title2: '學情分析',
 	ti_title3: '學科比較統計',
-	ti_title4: '年級優生率統計',
+	ti_title4: '年級優率統計',
 	ti_title5: '評量清單數據',
 	ti_text1: '教師人數',
 	ti_text2: '學生人數',
-	ti_text3: '學數',
+	ti_text3: '學數',
 	ti_text4: '年級數',
 	ti_text5: '班級數',
 	ti_text12: '全部評量',
@@ -71,8 +71,8 @@ export default {
 	echarts_text14: '參與率',
 	echarts_text15: '平均分',
 	echarts_text16: '成就指數',
-	echarts_text17: '優生率',
-	echarts_text18: '優生人數',
+	echarts_text17: '優率',
+	echarts_text18: '優生人數',
 
 	// Base Info
 	base_name: '姓名',
@@ -135,7 +135,7 @@ export default {
 	ach_table_text16: '穩定班級',
 
 	ach_chart_text1: '排序方式',
-	ach_chart_text2: '默認排序',
+	ach_chart_text2: '預設排序',
 	ach_chart_text3: '分數從高到低',
 	ach_chart_text4: '分數從低到高',
 

+ 5 - 6
TEAMModelOS/ClientApp/src/view/homepage/HomePage.vue

@@ -69,14 +69,13 @@
         </div> -->
         <div class="cus-table-area box-item">
             <p class="list-title">
-                <!-- {{$t('home.previewStudy')}} -->
-                我的课表
+                {{$t('home.myCourse')}}
             </p>
             <div class="card-content-box" style="padding:10px">
                 <vuescroll>
                     <MinTable @tmwCus="getTmwCus"></MinTable>
                     <p class="today-text-label">
-                        明日课程
+                        {{$t('home.tmwCus')}}
                     </p>
                     <div class="today-cus-item" v-for="(item,index) in tmwCus" :key="index">
                         <Icon type="md-time" class="label-icon" />
@@ -89,13 +88,13 @@
                             </p>
                             <p>
                                 <span class="cus-name">
-                                    课程:
+                                    {{$t('home.course')}}
                                     <span style="color:white">
                                         {{item.course}}
                                     </span>
                                 </span>
                                 <span class="cus-class">
-                                    班级:
+                                    {{$t('home.className')}}
                                     <span style="color:white">
                                         {{item.class}}
                                     </span>
@@ -103,7 +102,7 @@
                             </p>
                         </div>
                     </div>
-                    <EmptyData v-show="!tmwCus.length" textContent="明日没有课程哦"></EmptyData>
+                    <EmptyData v-show="!tmwCus.length" :textContent="$t('home.tmwNoCus')"></EmptyData>
                 </vuescroll>
             </div>
         </div>

+ 128 - 132
TEAMModelOS/ClientApp/src/view/login/page/Student.less

@@ -1,8 +1,6 @@
 .loginDiv{
-    height: 520px;
     display: flex;
     align-items: center;
-    flex-direction: column;
     justify-content: space-around;
     .iconFrame:before{
         border-radius: 50%;
@@ -31,141 +29,139 @@
         .loginBox{
             width: 300px;
             height: 310px;
-            .title{
-                display: flex;
-                align-items: center;
-                // align-content: center !important;
-                margin-bottom: 5px;
-                .logo{
-                    margin-right: 5px;
-                    height: 15px;
-                }
-                .text{
-                    margin-right: 15px;
-                    color: #ffffff;
-                    font-size: 16px;
-                }
-                .tooltip{
-                    height: 15px;
-                }
+            
+        }
+    }
+}
+.errlable{
+    text-align: right;
+    color: #f22613;
+    font-size: 12px;
+    margin-top: 3px;
+    height: 12px;
+}
+.title{
+    display: flex;
+    align-items: center;
+    // align-content: center !important;
+    margin-bottom: 5px;
+    .logo{
+        margin-right: 5px;
+        height: 15px;
+    }
+    .text{
+        margin-right: 15px;
+        color: #ffffff;
+        font-size: 16px;
+    }
+    .tooltip{
+        height: 15px;
+    }
+}
+.subTitle{
+    font-size: 14px;
+    color: #d1d1d3;
+    margin-bottom: 10px;
+}
+.loginForm{
+    margin-bottom: 10px;
+}
+.extra{
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin-bottom: 30px;
+    .qrlogin{
+        display: flex;
+        align-items: center;
+        .logo{
+            margin-right: 5px;
+            height: 15px;
+        }
+        a{
+            font-size: 12px;
+            color: #668fbc;
+            text-decoration: underline;
+        }
+    }
+    .link{
+        a{
+            font-size: 12px;
+            color: #668fbc;
+            text-decoration: underline;
+        }
+    }
+}
+.communyLoging{
+    .description{
+        text-align: center;
+        font-size: 12px;
+        color: #d1d1d3;
+        margin-bottom: 20px;
+        letter-spacing: 1.5px;
+    }
+    .links{
+        display: flex;
+        align-items: center;
+        justify-content: space-around;
+        .icon{
+            display: flex;
+            align-items: center;
+            flex-direction: column;
+            cursor: pointer;
+            img{
+                width: 35px;
             }
-            .subTitle{
-                font-size: 14px;
+            span{
+                font-size: 12px;
                 color: #d1d1d3;
-                margin-bottom: 25px;
-            }
-            .loginForm{
-                margin-bottom: 10px;
-                .formItem{
-                    margin: 0;
-                }
-                .errlable{
-                    text-align: right;
-                    color: #f22613;
-                    font-size: 12px;
-                    margin-top: 3px;
-                    height: 12px;
-                }
-            }
-            .extra{
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                margin-bottom: 30px;
-                .qrlogin{
-                    display: flex;
-                    align-items: center;
-                    .logo{
-                        margin-right: 5px;
-                        height: 15px;
-                    }
-                    a{
-                        font-size: 12px;
-                        color: #668fbc;
-                        text-decoration: underline;
-                    }
-                }
-                .link{
-                    a{
-                        font-size: 12px;
-                        color: #668fbc;
-                        text-decoration: underline;
-                    }
-                }
             }
-            .communyLoging{
-                .description{
-                    text-align: center;
-                    font-size: 12px;
-                    color: #d1d1d3;
-                    margin-bottom: 20px;
-                    letter-spacing: 1.5px;
-                }
-                .links{
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-around;
-                    .icon{
-                        display: flex;
-                        align-items: center;
-                        flex-direction: column;
-                        cursor: pointer;
-                        img{
-                            width: 35px;
-                        }
-                        span{
-                            font-size: 12px;
-                            color: #d1d1d3;
-                        }
-                    }
-                }
+        }
+    }
+}
+.qrloginMode{
+    .qrcodeBox{
+        width:240px;
+        height:240px;
+        margin:auto;
+        margin-bottom: 10px;
+        position: relative;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        .qrcode{
+            padding:20px;
+            background-color:white;
+        }
+        .expired{
+            position: absolute;
+            background-color: #ffffffde;
+            width: 200px;
+            height: 200px;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            .ivu-icon{
+                cursor: pointer;
             }
-            .qrloginMode{
-                .qrcodeBox{
-                    width:240px;
-                    height:240px;
-                    margin:auto;
-                    margin-bottom: 10px;
-                    position: relative;
-                    display: flex;
-                    justify-content: center;
-                    align-items: center;
-                    .qrcode{
-                        padding:20px;
-                        background-color:white;
-                    }
-                    .expired{
-                        position: absolute;
-                        background-color: #ffffffde;
-                        width: 200px;
-                        height: 200px;
-                        display: flex;
-                        justify-content: center;
-                        align-items: center;
-                        .ivu-icon{
-                            cursor: pointer;
-                        }
-                    }
-                }            
-                .links{
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                    .icon-a{
-                        display: flex;
-                        align-items: center;
-                        img{
-                            margin-right: 3px;
-                            width: 15px;
-                            height: 15px;
-                        }
-                    }
-                    a{
-                        font-size: 12px;
-                        color: #668fbc;
-                    }
-                }
+        }
+    }            
+    .links{
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .icon-a{
+            display: flex;
+            align-items: center;
+            img{
+                margin-right: 3px;
+                width: 15px;
+                height: 15px;
             }
         }
+        a{
+            font-size: 12px;
+            color: white;
+        }
     }
 }

File diff ditekan karena terlalu besar
+ 595 - 402
TEAMModelOS/ClientApp/src/view/login/page/Student.vue


+ 126 - 132
TEAMModelOS/ClientApp/src/view/login/page/Teacher.less

@@ -1,8 +1,7 @@
 .loginDiv{
-    height: 520px;
     display: flex;
     align-items: center;
-    flex-direction: column;
+    // flex-direction: column;
     justify-content: space-around;
     .iconFrame:before{
         border-radius: 50%;
@@ -26,141 +25,136 @@
         .loginBox{
             width: 300px;
             height: 310px;
-            .title{
-                display: flex;
-                align-items: center;
-                // align-content: center !important;
-                margin-bottom: 5px;
-                .logo{
-                    margin-right: 5px;
-                    height: 15px;
-                }
-                .text{
-                    margin-right: 15px;
-                    color: #ffffff;
-                    font-size: 16px;
-                }
-                .tooltip{
-                    height: 15px;
-                }
+            
+        }
+    }
+}
+.teacher-login-img{
+    width: 180px;
+}
+.title{
+    display: flex;
+    align-items: center;
+    // align-content: center !important;
+    margin-bottom: 5px;
+    .logo{
+        margin-right: 5px;
+        height: 15px;
+    }
+    .text{
+        margin-right: 15px;
+        color: #ffffff;
+        font-size: 16px;
+    }
+    .tooltip{
+        height: 15px;
+    }
+}
+.subTitle{
+    font-size: 14px;
+    color: #d1d1d3;
+    margin-bottom: 10px;
+}
+
+.extra{
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin-bottom: 30px;
+    .qrlogin{
+        display: flex;
+        align-items: center;
+        .logo{
+            margin-right: 5px;
+            height: 15px;
+        }
+        a{
+            font-size: 12px;
+            color: #668fbc;
+            text-decoration: underline;
+        }
+    }
+    .link{
+        a{
+            font-size: 12px;
+            color: #668fbc;
+            text-decoration: underline;
+        }
+    }
+}
+.communyLoging{
+    .description{
+        text-align: center;
+        font-size: 12px;
+        color: #d1d1d3;
+        margin-bottom: 20px;
+        letter-spacing: 1.5px;
+    }
+    .links{
+        display: flex;
+        align-items: center;
+        justify-content: space-around;
+        .icon{
+            display: flex;
+            align-items: center;
+            flex-direction: column;
+            cursor: pointer;
+            img{
+                width: 35px;
             }
-            .subTitle{
-                font-size: 14px;
+            span{
+                font-size: 12px;
                 color: #d1d1d3;
-                margin-bottom: 25px;
-            }
-            .loginForm{
-                margin-bottom: 10px;
-                .formItem{
-                    margin: 0;
-                }
-                .errlable{
-                    text-align: right;
-                    color: #f22613;
-                    font-size: 12px;
-                    margin-top: 3px;
-                    height: 12px;
-                }
-            }
-            .extra{
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                margin-bottom: 30px;
-                .qrlogin{
-                    display: flex;
-                    align-items: center;
-                    .logo{
-                        margin-right: 5px;
-                        height: 15px;
-                    }
-                    a{
-                        font-size: 12px;
-                        color: #668fbc;
-                        text-decoration: underline;
-                    }
-                }
-                .link{
-                    a{
-                        font-size: 12px;
-                        color: #668fbc;
-                        text-decoration: underline;
-                    }
-                }
             }
-            .communyLoging{
-                .description{
-                    text-align: center;
-                    font-size: 12px;
-                    color: #d1d1d3;
-                    margin-bottom: 20px;
-                    letter-spacing: 1.5px;
-                }
-                .links{
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-around;
-                    .icon{
-                        display: flex;
-                        align-items: center;
-                        flex-direction: column;
-                        cursor: pointer;
-                        img{
-                            width: 35px;
-                        }
-                        span{
-                            font-size: 12px;
-                            color: #d1d1d3;
-                        }
-                    }
-                }
+        }
+    }
+}
+.qrloginMode{
+    .qrcodeBox{
+        width:240px;
+        height:240px;
+        margin-bottom: 10px;
+        .qrcode{
+            padding:20px;
+            background-color:white;
+        }
+        .expired{
+            position: absolute;
+            background-color: #ffffffde;
+            width: 200px;
+            height: 200px;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            .ivu-icon{
+                cursor: pointer;
             }
-            .qrloginMode{
-                .qrcodeBox{
-                    width:240px;
-                    height:240px;
-                    margin:auto;
-                    margin-bottom: 10px;
-                    position: relative;
-                    display: flex;
-                    justify-content: center;
-                    align-items: center;
-                    .qrcode{
-                        padding:20px;
-                        background-color:white;
-                    }
-                    .expired{
-                        position: absolute;
-                        background-color: #ffffffde;
-                        width: 200px;
-                        height: 200px;
-                        display: flex;
-                        justify-content: center;
-                        align-items: center;
-                        .ivu-icon{
-                            cursor: pointer;
-                        }
-                    }
-                }            
-                .links{
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                    .icon-a{
-                        display: flex;
-                        align-items: center;
-                        img{
-                            margin-right: 3px;
-                            width: 15px;
-                            height: 15px;
-                        }
-                    }
-                    a{
-                        font-size: 12px;
-                        color: #668fbc;
-                    }
-                }
+        }
+    }            
+    .links{
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .icon-a{
+            display: flex;
+            align-items: center;
+            img{
+                margin-right: 3px;
+                width: 15px;
+                height: 15px;
             }
         }
+        a{
+            font-size: 12px;
+            color: white;
+        }
     }
+}
+.errlable{
+    text-align: right;
+    color: #f22613;
+    font-size: 12px;
+    margin-top: -4px;
+    margin-bottom: 6px;
+    height: 12px;
 }

+ 426 - 270
TEAMModelOS/ClientApp/src/view/login/page/Teacher.vue

@@ -1,77 +1,233 @@
 <style lang="less" scoped>
-  @import './Teacher.less';
+@import "./Teacher.less";
+.loginDiv {
+    background: rgba(75, 112, 136, 0.5);
+    border-radius: 20px;
+    overflow: hidden;
+    margin-top: -100px;
+}
+.left-box {
+    padding: 0px 55px;
+    height: 400px;
+    display: flex;
+    align-items: center;
+    box-shadow: 2px 0px 15px 0px rgba(75, 113, 136, 0.9);
+}
+.right-box {
+    padding: 40px 150px;
+    width: 600px;
+    height: 400px;
+    box-shadow: -2px 0px 15px 0px rgba(75, 113, 136, 0.9);
+}
+.teacher-login-title {
+    color: white;
+    font-size: 42px;
+    text-align: center;
+}
+.teacher-login-decr {
+    color: white;
+    font-size: 18px;
+    text-align: center;
+    font-weight: 200;
+}
+.loginForm {
+    margin: auto;
+    margin-top: 30px;
+    width: 300px;
+}
+.formItem {
+    margin-bottom: 8px;
+}
+.form-bottom {
+    color: white;
+    font-size: 12px;
+}
+.form-bottom-link {
+    float: right;
+    margin-left: 10px;
+}
+.qrcode-login {
+    cursor: pointer;
+}
+.other-login-box {
+    display: flex;
+    margin-top: 25px;
+}
+.other-login-item {
+    width: 50%;
+    color: white;
+    text-align: center;
+    cursor: pointer;
+}
+.other-login-icon {
+    font-size: 50px;
+    display: block;
+}
 </style>
 
 <style lang="less">
-.loginBox{
-  .loginForm{
-    .formItem{
-        input, select{
-            border-radius: 0;
-            font-size: 12px;
+.login-input-box .ivu-input {
+    border-radius: 25px;
+    line-height: 35px;
+    height: 35px;
+    padding: 0px 15px;
+}
+.login-input-box .ivu-input-prefix i,
+.login-input-box .ivu-input-suffix i {
+    line-height: 35px;
+}
+.loginBox {
+    .loginForm {
+        .formItem {
+            input,
+            select {
+                border-radius: 0;
+                font-size: 12px;
+            }
+            .ivu-select-selection {
+                border-radius: 0;
+            }
         }
-        .ivu-select-selection{
-          border-radius: 0;
+        .schoolAutoComplete {
+            height: 170px;
+            .schoolsBox {
+                border-bottom: 1px solid #e9e9e9;
+                padding: 5px 5px 5px 15px;
+                .area {
+                    font-size: 12px;
+                    padding: 5px;
+                }
+            }
         }
-    }
-    .schoolAutoComplete{
-      height: 170px;
-      .schoolsBox{
-        border-bottom: 1px solid #e9e9e9;
-        padding: 5px 5px 5px 15px;
-        .area{
-          font-size: 12px;
-          padding: 5px;
+        .ivu-select-dropdown {
+            border-radius: 0;
         }
-      }
-    }
-    .ivu-select-dropdown{
-      border-radius: 0;
     }
-  }
 }
-.identityModal{
-  .ivu-modal{
-    .ivu-modal-content{
-      background-color: #2a292e;
-      padding: 12px;
-      border: 1px solid #ccc;
-      .ivu-modal-header, .ivu-modal-footer{
-        border: 0;
-      }
-      .ivu-modal-footer{
-        padding: 0;
-      }
-      .ivu-modal-header{
-        padding: 5px 16px;
-        p{
-          color: whitesmoke;
-        }
-      }
-      .identity-body{
-        display: flex;
-        justify-content: space-around;
-        align-items: center;
-        .ivu-btn{
-          background-color: #1cc0f2;
-          color: white;
-          font-weight: bold;
-          border: 0;
-          padding: 0 22px;
+.identityModal {
+    .ivu-modal {
+        .ivu-modal-content {
+            background-color: #2a292e;
+            padding: 12px;
+            border: 1px solid #ccc;
+            .ivu-modal-header,
+            .ivu-modal-footer {
+                border: 0;
+            }
+            .ivu-modal-footer {
+                padding: 0;
+            }
+            .ivu-modal-header {
+                padding: 5px 16px;
+                p {
+                    color: whitesmoke;
+                }
+            }
+            .identity-body {
+                display: flex;
+                justify-content: space-around;
+                align-items: center;
+                .ivu-btn {
+                    background-color: #1cc0f2;
+                    color: white;
+                    font-weight: bold;
+                    border: 0;
+                    padding: 0 22px;
+                }
+            }
         }
-      }
-    }        
-  }
+    }
 }
-.demo-spin-col .ivu-spin-main{
-	background-color: transparent;
-	padding: 0;
+.demo-spin-col .ivu-spin-main {
+    background-color: transparent;
+    padding: 0;
 }
 </style>
 
 <template>
-  <div class="loginDiv">
-    <div class="schoolName">
+    <div class="loginDiv">
+        <div class="left-box">
+            <!-- 这张图片需要裁剪顶部 -->
+            <img src="@/assets/login/3-2.png" class="teacher-login-img" style="margin-top:-30px">
+        </div>
+        <div class="right-box" v-show="!qrloginFlag">
+            <p class="teacher-login-title">醍摩豆账号登录</p>
+            <p class="teacher-login-decr">系统管理者、教师、学生与家长登录</p>
+            <Form class="loginForm" ref="loginForm" :model="loginForm" :rules="loginRule" :show-message="false" @keydown.enter.native="loginSubmit('loginForm')">
+                <FormItem class="formItem" prop="id">
+                    <Input element-id="tmdID" class="login-input-box" v-model="loginForm.id" :placeholder="$t('login.placeholder.id')" />
+                </FormItem>
+                <FormItem class="formItem" prop="pass">
+                    <Input element-id="tmdpw" class="login-input-box" type="password" v-model="loginForm.pass" :placeholder="$t('login.placeholder.psw')">
+                    <Icon size="24" v-show="!loading && loginFormEnter" @click="loginSubmit('loginForm')" type="md-arrow-forward" slot="suffix" class="iconFrame" />
+                    <div v-show="loading" class="demo-spin-col" slot="suffix">
+                        <Spin>
+                            <Icon type="ios-loading" size="18" class="demo-spin-icon-load"></Icon>
+                        </Spin>
+                    </div>
+                    </Input>
+                </FormItem>
+                <div class="errlable">{{ loginErrText }}</div>
+            </Form>
+            <p class="form-bottom">
+                <span class="qrcode-login" @click="chgLoginType()">
+                    <Icon size="14" custom="iconfont icon-qr-code" style="vertical-align: text-bottom;" />
+                    {{ $t('login.link.QRLogin') }}
+                </span>
+                <router-link to="/regist" class="form-bottom-link">
+                    {{$t('login.link.regist')}}
+                </router-link>
+                <router-link to="/forgotpw" href="" class="form-bottom-link">
+                    {{$t('login.link.forgetPsw')}}
+                </router-link>
+            </p>
+            <div class="other-login-box">
+                <div class="other-login-item" @click="oauthLogin('facebook')">
+                    <Icon type="logo-facebook" class="other-login-icon" />
+                    <p class="other-login-text">Facebook</p>
+                </div>
+                <div class="other-login-item" v-if="!(srvAdr == 'Global')" @click="oauthLogin('wechat')">
+                    <Icon custom="iconfont icon-wechat" class="other-login-icon" />
+                    <p class="other-login-text">或使用第三方平台登录</p>
+                </div>
+            </div>
+        </div>
+        <div class="right-box" v-show="qrloginFlag">
+            <div style="width:fit-content;margin: auto;">
+                <div class="title">
+                    <div class="logo">
+                        <img width="15" height="15" src="@/assets/icon/tmd_account.svg">
+                    </div>
+                    <h4 class="text">
+                        {{ qrloginFlag ? $t('login.title.QRLogin'): $t('login.title.IDLogin') }}
+                    </h4>
+                    <Tooltip class="tooltip" placement="right-end" :transfer="true" max-width="200">
+                        <img src="@/assets/icon/icon_info.svg" width="15" height="15">
+                        <div slot="content">
+                            <p style="font-size: 12px;">{{ $t('login.tooltip.text1') }}</p>
+                        </div>
+                    </Tooltip>
+                </div>
+                <h4 class="subTitle">
+                    {{ qrloginFlag ? $t('login.subTitle.QRLogin') : $t('login.subTitle.IDLogin')}}
+                </h4>
+                <div class="qrloginMode">
+                    <div class="qrcodeBox">
+                        <div id="qrcode" :class="{'qrcode': joinQRcode != undefined}" ref="qrcode"></div>
+                        <div class="expired" v-if="joinQRcode != undefined && !sseSurvive">
+                            <Icon size="40" type="md-refresh-circle" @click="SEELink()" />
+                        </div>
+                    </div>
+                    <div class="links">
+                        <div class="icon-a">
+                            <a @click="chgLoginType()">{{ $t('login.link.IDLogin') }}</a>
+                        </div>
+                        <router-link to="/regist">{{ $t('login.link.regist') }}</router-link>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <!-- <div class="schoolName">
       <div style="width: 100px;height: 100px;background-color: #69b0d0;border-radius: 4px;cursor: pointer;">
         <img style="    display: block;
           width: 100%;
@@ -164,8 +320,8 @@
           </div>
         </div>
       </div>
+    </div> -->
     </div>
-  </div>
 </template>
 <script>
 import { EventSourcePolyfill } from 'event-source-polyfill';
@@ -174,228 +330,228 @@ import { User } from '@/service/User'
 import { mapState, mapGetters } from 'vuex'
 
 export default {
-  data() {
-    const validateID = (rule, value, callback) => {
-      if (value === '') {
-          callback(new Error());
-          this.loginErrText = this.$t('error.required')
-      } else if (value.search(/^\+/) == 0) {
-          callback(new Error());
-          this.loginErrText = this.$t('error.format.default')
-      } else {
-        if(value.indexOf('@') >=0){ //是否為Email
-          var emailRule = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z]+$/;
-          if(value.search(emailRule)!= -1){
-              callback();
-              this.loginErrText = ''
-          } else {
-              callback(new Error());
-              this.loginErrText = this.$t('error.format.email')
-          }
-        } else {
-          callback();
-          this.loginErrText = ''
-        }
-      }
-    };
-    const validatePW = (rule, value, callback) => {
-      if (value === '') {
-          callback(new Error());
-          this.loginErrText = this.$t('error.required')
-      }
-      else {
-          callback();
-          this.loginErrText = ''
-      }
-    };
-    return {
-      qrloginFlag: false,
-      loginForm: {
-          id: '',
-          pass: '',
-      },
-      loginRule: {
-          id: [
-              { validator: validateID, trigger: 'blur' },
-          ],
-          pass: [
-              { validator: validatePW, trigger: 'blur' },
-          ]
-      },
-      loginErrText: '',
-      schoolErrText: '',
-      userOauth: {        // 社群帳號
-          code: '',
-          state: ''
-      },
-      loading: false,
-      sseSurvive: false,
-      joinQRcode: undefined,
-      defaultSchool: {
-        name: '',
-        code: ''
-      },
-      identityFlag: false
-    }
-  },
-  computed: {
-    ...mapState({
-      config: state => state.config
-    }),
-    ...mapGetters({
-        srvAdr: 'config/getSrvAdr'
-    }),
-    loginFormEnter: function(){
-      let flag = false
-      if(this.loginForm.id && this.loginForm.pass) flag = true
-      return flag
-    }
-  },
-  created() {
-    // 此頁面為老師頁面
-    localStorage.setItem('identity', 'teacher')
-
-    // 取得學校設定簡碼
-    this.setDefSchool()
-  },
-  methods: {
-    chgLoginType: function(){ // 變更登入類型
-      this.qrloginFlag = !this.qrloginFlag
-      if(this.qrloginFlag && !this.sseSurvive) {
-        // SSE 連線
-        this.SEELink()
-      }
-    },
-    loginSubmit: function(name){  // 登入
-      this.$refs[name].validate( async(valid) => {        
-        if (valid) {
-          this.loading = true // 登入中動畫
-          let result; // 輸出暫存
-          let isFail = false // 失敗flag
-            // 詢問帳號是否有效
-            await this.$api.login.verification({id: this.loginForm.id, pass: this.loginForm.pass}).then(res => {
-              result = res
-            }).catch(err=>{
-              isFail = true
-            })
-            console.log('res***',result)
-            if(isFail){
-              this.loginErrText = this.$t('login.apiError.text1')
-              this.loading = false
+    data() {
+        const validateID = (rule, value, callback) => {
+            if (value === '') {
+                callback(new Error());
+                this.loginErrText = this.$t('error.required')
+            } else if (value.search(/^\+/) == 0) {
+                callback(new Error());
+                this.loginErrText = this.$t('error.format.default')
             } else {
-              this.loginProcess(result, this.defaultSchool.code)
+                if (value.indexOf('@') >= 0) { //是否為Email
+                    var emailRule = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z]+$/;
+                    if (value.search(emailRule) != -1) {
+                        callback();
+                        this.loginErrText = ''
+                    } else {
+                        callback(new Error());
+                        this.loginErrText = this.$t('error.format.email')
+                    }
+                } else {
+                    callback();
+                    this.loginErrText = ''
+                }
             }
+        };
+        const validatePW = (rule, value, callback) => {
+            if (value === '') {
+                callback(new Error());
+                this.loginErrText = this.$t('error.required')
+            }
+            else {
+                callback();
+                this.loginErrText = ''
+            }
+        };
+        return {
+            qrloginFlag: false,
+            loginForm: {
+                id: '',
+                pass: '',
+            },
+            loginRule: {
+                id: [
+                    { validator: validateID, trigger: 'blur' },
+                ],
+                pass: [
+                    { validator: validatePW, trigger: 'blur' },
+                ]
+            },
+            loginErrText: '',
+            schoolErrText: '',
+            userOauth: {        // 社群帳號
+                code: '',
+                state: ''
+            },
+            loading: false,
+            sseSurvive: false,
+            joinQRcode: undefined,
+            defaultSchool: {
+                name: '',
+                code: ''
+            },
+            identityFlag: false
         }
-      })
     },
-    oauthLogin: function(provider){ // 第三方登入
-      let redirect_uri = window.location.origin + '/login';
-      this.$api.BuildOauthUrl(provider, redirect_uri).then(res=>{
-          window.location.href = res
-      })
+    computed: {
+        ...mapState({
+            config: state => state.config
+        }),
+        ...mapGetters({
+            srvAdr: 'config/getSrvAdr'
+        }),
+        loginFormEnter: function () {
+            let flag = false
+            if (this.loginForm.id && this.loginForm.pass) flag = true
+            return flag
+        }
     },
-    SEELink: function() { // 開啟SSE連結
-      if(!this.sseSurvive){
-        let url = this.config[this.srvAdr].coreAPIUrl
+    created() {
+        // 此頁面為老師頁面
+        localStorage.setItem('identity', 'teacher')
 
-        let es = new EventSourcePolyfill(url+'/service/sse',{headers: {'X-Auth-Name': 'IES5'}});
-        let _this = this;
+        // 取得學校設定簡碼
+        this.setDefSchool()
+    },
+    methods: {
+        chgLoginType: function () { // 變更登入類型
+            this.qrloginFlag = !this.qrloginFlag
+            if (this.qrloginFlag && !this.sseSurvive) {
+                // SSE 連線
+                this.SEELink()
+            }
+        },
+        loginSubmit: function (name) {  // 登入
+            this.$refs[name].validate(async (valid) => {
+                if (valid) {
+                    this.loading = true // 登入中動畫
+                    let result; // 輸出暫存
+                    let isFail = false // 失敗flag
+                    // 詢問帳號是否有效
+                    await this.$api.login.verification({ id: this.loginForm.id, pass: this.loginForm.pass }).then(res => {
+                        result = res
+                    }).catch(err => {
+                        isFail = true
+                    })
+                    console.log('res***', result)
+                    if (isFail) {
+                        this.loginErrText = this.$t('login.apiError.text1')
+                        this.loading = false
+                    } else {
+                        this.loginProcess(result, this.defaultSchool.code)
+                    }
+                }
+            })
+        },
+        oauthLogin: function (provider) { // 第三方登入
+            let redirect_uri = window.location.origin + '/login';
+            this.$api.BuildOauthUrl(provider, redirect_uri).then(res => {
+                window.location.href = res
+            })
+        },
+        SEELink: function () { // 開啟SSE連結
+            if (!this.sseSurvive) {
+                let url = this.config[this.srvAdr].coreAPIUrl
 
-        var closeSSE = function(){
-          if(_this.sseSurvive) {
-            es.close();
-            _this.sseSurvive = false
-          }
-        }
+                let es = new EventSourcePolyfill(url + '/service/sse', { headers: { 'X-Auth-Name': 'IES5' } });
+                let _this = this;
 
-        es.addEventListener('open', function (e) {
-          _this.sseSurvive = true
-        }, false);
+                var closeSSE = function () {
+                    if (_this.sseSurvive) {
+                        es.close();
+                        _this.sseSurvive = false
+                    }
+                }
 
-        //取得登入網址
-        es.addEventListener('message', function (e) {
-          if (e.data) {
-            let data = JSON.parse(e.data)
-            
-            if(data.sid) {
-              let qrcodeURL = url + '/qrcode/login?sid=' + encodeURIComponent(data.sid, "utf-8") + '&info=' + encodeURIComponent(_this.$t('login.sse.text1'),"utf-8")
-              _this.crtQrcode(qrcodeURL)
-            } else if(data.code){
-              closeSSE()
-              _this.SSOLogin(data.code)
-            }
+                es.addEventListener('open', function (e) {
+                    _this.sseSurvive = true
+                }, false);
 
-          }
-        }, false);
+                //取得登入網址
+                es.addEventListener('message', function (e) {
+                    if (e.data) {
+                        let data = JSON.parse(e.data)
 
-        // 錯誤
-        es.addEventListener('error', function (e) {
-          closeSSE()
-        }, false);
+                        if (data.sid) {
+                            let qrcodeURL = url + '/qrcode/login?sid=' + encodeURIComponent(data.sid, "utf-8") + '&info=' + encodeURIComponent(_this.$t('login.sse.text1'), "utf-8")
+                            _this.crtQrcode(qrcodeURL)
+                        } else if (data.code) {
+                            closeSSE()
+                            _this.SSOLogin(data.code)
+                        }
 
-        // 設定五分鐘後關閉連接
-        setTimeout(() => {
-          closeSSE()
-        }, 300000);
-      }
-    },
-    crtQrcode: function(url) { // 開啟QRCODE
-      this.$nextTick(() => {
-        if(this.joinQRcode == undefined){
-          let qrcode = new QRCode('qrcode', {
-            width: 200, // 设置宽度,单位像素
-            height: 200, // 设置高度,单位像素
-            text: url, // 设置二维码内容或跳转地址
-          })
-          this.joinQRcode = qrcode
-        } else {
-          this.joinQRcode.clear()
-          this.joinQRcode.makeCode(url)
-        }
-      })
-    },
-    loginProcess: async function(item, schoolCode){ // 登入用function
-      let result;
+                    }
+                }, false);
 
-      await this.$api.login.loginIES(item, schoolCode).then( res => {
-        result = res
-      })
-      console.log('////',result)
-      //設定權限並登入
-      User.login(result).then(res => {
-        if(res) {
-          this.saveUserCodes({
-            TEAMModelId: result.id,
-            name:result.name,
-            schoolCode: result.defaultschool
-          })
-          this.$router.push({ path: '/home' })
-        }
-      })
-    },
-    saveUserCodes: function (res) {
-		  this.$store.commit('setUserInfo',res)
-	  },
-    setDefSchool: function(){
-      let defschool = sessionStorage.defaultSchool
-      if(defschool){
-        defschool = JSON.parse(decodeURIComponent(defschool), "utf-8")
-        this.defaultSchool.code = defSchool.code
-        this.defaultSchool.name = defSchool.name
-      }      
-    },
-    SSOLogin: function(code){ // 快速登入
-      this.$Spin.show(); //開啟加載畫面
-      this.$api.SSOLogin(code).then( async res=>{
-        this.$Spin.hide(); // 關閉加載畫面
-          if(!res.error){
-            // 登入大雲開始
-            this.loginProcess(res, this.defaultSchool.code)
-          } else {
-            this.$Message.warning(this.$t('login.sse.error.text1'));
-          }
-      })
-    },
-  }
+                // 錯誤
+                es.addEventListener('error', function (e) {
+                    closeSSE()
+                }, false);
+
+                // 設定五分鐘後關閉連接
+                setTimeout(() => {
+                    closeSSE()
+                }, 300000);
+            }
+        },
+        crtQrcode: function (url) { // 開啟QRCODE
+            this.$nextTick(() => {
+                if (this.joinQRcode == undefined) {
+                    let qrcode = new QRCode('qrcode', {
+                        width: 200, // 设置宽度,单位像素
+                        height: 200, // 设置高度,单位像素
+                        text: url, // 设置二维码内容或跳转地址
+                    })
+                    this.joinQRcode = qrcode
+                } else {
+                    this.joinQRcode.clear()
+                    this.joinQRcode.makeCode(url)
+                }
+            })
+        },
+        loginProcess: async function (item, schoolCode) { // 登入用function
+            let result;
+
+            await this.$api.login.loginIES(item, schoolCode).then(res => {
+                result = res
+            })
+            console.log('////', result)
+            //設定權限並登入
+            User.login(result).then(res => {
+                if (res) {
+                    this.saveUserCodes({
+                        TEAMModelId: result.id,
+                        name: result.name,
+                        schoolCode: result.defaultschool
+                    })
+                    this.$router.push({ path: '/home' })
+                }
+            })
+        },
+        saveUserCodes: function (res) {
+            this.$store.commit('setUserInfo', res)
+        },
+        setDefSchool: function () {
+            let defschool = sessionStorage.defaultSchool
+            if (defschool) {
+                defschool = JSON.parse(decodeURIComponent(defschool), "utf-8")
+                this.defaultSchool.code = defSchool.code
+                this.defaultSchool.name = defSchool.name
+            }
+        },
+        SSOLogin: function (code) { // 快速登入
+            this.$Spin.show(); //開啟加載畫面
+            this.$api.SSOLogin(code).then(async res => {
+                this.$Spin.hide(); // 關閉加載畫面
+                if (!res.error) {
+                    // 登入大雲開始
+                    this.loginProcess(res, this.defaultSchool.code)
+                } else {
+                    this.$Message.warning(this.$t('login.sse.error.text1'));
+                }
+            })
+        },
+    }
 }
 </script>

+ 231 - 187
TEAMModelOS/ClientApp/src/view/login/test.vue

@@ -1,222 +1,266 @@
 <style lang="less" scoped>
-  @import './Index.less';
+@import "./Index.less";
 </style>
 
 <style lang="less">
-.loginBox{
-  .loginForm{
-    .formItem{
-        input, select{
-            border-radius: 0;
-            font-size: 12px;
+.loginBox {
+    .loginForm {
+        .formItem {
+            input,
+            select {
+                border-radius: 0;
+                font-size: 12px;
+            }
+            .ivu-select-selection {
+                border-radius: 0;
+            }
         }
-        .ivu-select-selection{
-          border-radius: 0;
+        .schoolAutoComplete {
+            height: 170px;
+            .schoolsBox {
+                border-bottom: 1px solid #e9e9e9;
+                padding: 5px 5px 5px 15px;
+                .area {
+                    font-size: 12px;
+                    padding: 5px;
+                }
+            }
         }
-    }
-    .schoolAutoComplete{
-      height: 170px;
-      .schoolsBox{
-        border-bottom: 1px solid #e9e9e9;
-        padding: 5px 5px 5px 15px;
-        .area{
-          font-size: 12px;
-          padding: 5px;
+        .ivu-select-dropdown {
+            border-radius: 0;
         }
-      }
     }
-    .ivu-select-dropdown{
-      border-radius: 0;
-    }
-  }
 }
-.identityModal{
-  .ivu-modal{
-    .ivu-modal-content{
-      background-color: #2a292e;
-      padding: 12px;
-      border: 1px solid #ccc;
-      .ivu-modal-header, .ivu-modal-footer{
-        border: 0;
-      }
-      .ivu-modal-footer{
-        padding: 0;
-      }
-      .ivu-modal-header{
-        padding: 5px 16px;
-        p{
-          color: whitesmoke;
-        }
-      }
-      .identity-body{
-        display: flex;
-        justify-content: space-around;
-        align-items: center;
-        .ivu-btn{
-          background-color: #1cc0f2;
-          color: white;
-          font-weight: bold;
-          border: 0;
-          padding: 0 22px;
+.identityModal {
+    .ivu-modal {
+        .ivu-modal-content {
+            background-color: #2a292e;
+            padding: 12px;
+            border: 1px solid #ccc;
+            .ivu-modal-header,
+            .ivu-modal-footer {
+                border: 0;
+            }
+            .ivu-modal-footer {
+                padding: 0;
+            }
+            .ivu-modal-header {
+                padding: 5px 16px;
+                p {
+                    color: whitesmoke;
+                }
+            }
+            .identity-body {
+                display: flex;
+                justify-content: space-around;
+                align-items: center;
+                .ivu-btn {
+                    background-color: #1cc0f2;
+                    color: white;
+                    font-weight: bold;
+                    border: 0;
+                    padding: 0 22px;
+                }
+            }
         }
-      }
-    }        
-  }
+    }
 }
-.demo-spin-col .ivu-spin-main{
-	background-color: transparent;
-	padding: 0;
+.demo-spin-col .ivu-spin-main {
+    background-color: transparent;
+    padding: 0;
 }
-</style>
-
-<template>
-  <div style="display: flex;
+.login-main-wrap {
+    display: flex;
     justify-content: space-evenly;
     width: 100%;
     height: 600px;
     flex-direction: row;
-    align-items: center;">
-      <div style="width: 45%;
-        max-width: 600px;
-        height: 100%;padding: 12px;display: flex;
+    align-items: center;
+}
+.login-img-wrap {
+    width: 45%;
+    max-width: 600px;
+    height: 100%;
+    padding: 12px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.login-main-img {
+    width: 100%;
+    height: auto;
+}
+.login-enter-wrap {
+    width: 45%;
+    max-width: 600px;
+    height: 100%;
+    display: flex;
+    flex-direction: row;
+    flex-wrap: nowrap;
+    justify-content: space-evenly;
+    align-items: center;
+    margin-top: 0px;
+}
+.enter-box {
+    width: 150px;
+    border-radius: 4px;
+    cursor: pointer;
+    display: flex;
+    flex-direction: column;
     justify-content: center;
-    align-items: center;">
-        <div style="font-size:45px;
-            color: rgb(255, 255, 255);
-            font-weight: bolder;
-            letter-spacing: 2px;
-            word-break: break-all;
-            line-height: 1;
-            margin-bottom: 21px;">
-          Welcome to new IES5
+    align-items: center;
+}
+.enter-type-btn {
+    width: 136px;
+    margin-left: 5px;
+    background-image: url("./../../assets/login/1-7.png");
+    background-repeat: no-repeat;
+    background-size: cover;
+    height: 42px;
+    margin-top: 30px;
+    font-size: 26px;
+    line-height: 42px;
+    color: white;
+    text-align: center;
+}
+.icon-to-img {
+    display: block;
+    color: white;
+    font-size: 200px;
+}
+</style>
+
+<template>
+    <div class="login-main-wrap">
+        <div class="login-img-wrap">
+            <img src="@/assets/login/1-3.png" class="login-main-img">
         </div>
-        <!-- <p style="color: #9e9e9e;font-size: 14px; margin-bottom: 15px;" v-text="'calc() 是一個 CSS function 作用於屬性設定是數值的時候可以進行加減乘除的運算,例如: <length> 長度、<frequency> 頻率、<angle> 角度、<time> 時間、<number> 數字或者是 <integer> 整數這幾個屬性值都可以使用 calc()。'"></p> -->
-        <!-- <img style="max-width: 400px;" src="https://dozen168.com/wp-content/uploads/2019/06/%E6%B7%A1%E6%B0%B4%E6%99%AF%E9%BB%9E%E6%B7%A1%E6%B0%B4%E9%A2%A8%E6%99%AF%E6%B7%A1%E6%B0%B4%E4%BB%8B%E7%B4%B9%E6%B7%A1%E6%B0%B4%E6%97%85%E9%81%8A%E6%B7%A1%E6%B0%B4%E5%B0%8F%E5%90%83%E6%B7%A1%E6%B0%B4%E7%BE%8E%E9%A3%9F%E6%B7%A1%E6%B0%B4%E6%97%85%E9%81%8A%E6%9B%9C%E8%BC%97%E6%B7%A1%E6%B0%B4%E4%BB%8B%E7%B4%B9%E6%9B%9C%E8%BC%97%E6%B7%A1%E6%B0%B4%E6%99%AF%E9%BB%9E%E4%BB%8B%E7%B4%B9-1168x737.jpg"/> -->
-      </div>
-      <div style="width: 45%;
-              max-width: 600px;
-              height: 100%;
-              display: flex;
-              flex-direction: row;
-              flex-wrap: nowrap;
-              justify-content: space-evenly;
-              align-items: center;">
-            <div style="width: 200px;height: 200px;background-color: #69b0d0;border-radius: 4px;cursor: pointer;" @click="loginTo('teacher')">
-              <img style="display: block;width: 100%;" src="@/assets/icon/teacherIcon.png">
+        <div class="login-enter-wrap">
+            <div class="enter-box" @click="loginTo('teacher')">
+                <img style="display: block;width: 100%;" src="@/assets/login/1-5.png">
+                <!-- <Icon custom="iconfont icon-teacher" class="icon-to-img"></Icon> -->
+                <p class="enter-type-btn">
+                    教师端
+                </p>
             </div>
-            <div style="width: 200px;;height: 200px;background-color: #94ca87;border-radius: 4px;cursor: pointer;" @click="loginTo('student')">
-              <img style="display: block;width: 100%;" src="@/assets/icon/studentIcon.png">
+            <div class="enter-box" @click="loginTo('student')">
+                <img style="display: block;width: 100%;" src="@/assets/login/1-4.png">
+                <!-- <Icon custom="iconfont icon-student1" class="icon-to-img"></Icon> -->
+                <p class="enter-type-btn">
+                    学生端
+                </p>
             </div>
-      </div>
-    <!-- 提示視窗 -->
-    <Modal v-model="identityFlag" width="360" :mask-closable="false" :closable="false" class-name="identityModal">
-        <p slot="header">{{ $t('login.modal.title') }}</p>
-        <div class="identity-body">
-            <Button size="large" @click="goWhere('teacher')">{{ $t('login.modal.btn1') }}</Button>
-            <Button size="large" @click="goWhere('student')">{{ $t('login.modal.btn2') }}</Button>
         </div>
-        <div slot="footer"></div>
-    </Modal>
-  </div>
+        <!-- 提示視窗 -->
+        <Modal v-model="identityFlag" width="360" :mask-closable="false" :closable="false" class-name="identityModal">
+            <p slot="header">{{ $t('login.modal.title') }}</p>
+            <div class="identity-body">
+                <Button size="large" @click="goWhere('teacher')">{{ $t('login.modal.btn1') }}</Button>
+                <Button size="large" @click="goWhere('student')">{{ $t('login.modal.btn2') }}</Button>
+            </div>
+            <div slot="footer"></div>
+        </Modal>
+    </div>
 </template>
 <script>
 import { User } from '@/service/User'
 
 export default {
-  data() {
-    return {
-      defaultSchool: {
-        name: '',
-        code: ''
-      },
-      userOauth:{
-        code: '',
-        state: ''
-      },
-      identityFlag: false
-    }
-  },
-  created() {
-    // 取得學校設定簡碼
-    this.setDefSchool()
+    data() {
+        return {
+            defaultSchool: {
+                name: '',
+                code: ''
+            },
+            userOauth: {
+                code: '',
+                state: ''
+            },
+            identityFlag: false
+        }
+    },
+    created() {
+        // 取得學校設定簡碼
+        this.setDefSchool()
 
-    //TEAMModelID 社群登入資訊
-    this.userOauth.code = this.$route.query.code == undefined ? '' : this.$route.query.code;
-    this.userOauth.state = this.$route.query.state == undefined ? '' : this.$route.query.state;
+        //TEAMModelID 社群登入資訊
+        this.userOauth.code = this.$route.query.code == undefined ? '' : this.$route.query.code;
+        this.userOauth.state = this.$route.query.state == undefined ? '' : this.$route.query.state;
 
-    // 社群帳號登入
-    if(this.userOauth.code != '' & this.userOauth.state !='' ) {
-      this.putUserCode()
-    } else if(this.userOauth.code != ''){ // 大雲快速登入
-      this.SSOLogin(this.userOauth.code)
-    }
-  },
-  methods: {
-    putUserCode: function(){ //如果第三方登入會啟動的function
-      this.$Spin.show(); //開啟加載畫面
-      let redirect_uri = window.location.origin + '/login'
-      this.$api.OauthLogin(this.userOauth.state, this.userOauth.code, redirect_uri).then(res=>{
-        this.$Spin.hide(); //關閉加載畫面
-        this.loginProcess(res, this.defaultSchool.code)
-      })  
+        // 社群帳號登入
+        if (this.userOauth.code != '' & this.userOauth.state != '') {
+            this.putUserCode()
+        } else if (this.userOauth.code != '') { // 大雲快速登入
+            this.SSOLogin(this.userOauth.code)
+        }
     },
-    SSOLogin: function(code){ // 快速登入
-      this.$Spin.show(); //開啟加載畫面
-      this.$api.SSOLogin(code).then( async res=>{
-        this.$Spin.hide(); // 關閉加載畫面
-          if(!res.error){
-            // 登入大雲開始
-            this.loginProcess(res, this.defaultSchool.code)
-          } else {
-            this.$Message.warning(this.$t('login.sse.error.text1'));
-          }
+    methods: {
+        putUserCode: function () { //如果第三方登入會啟動的function
+            this.$Spin.show(); //開啟加載畫面
+            let redirect_uri = window.location.origin + '/login'
+            this.$api.OauthLogin(this.userOauth.state, this.userOauth.code, redirect_uri).then(res => {
+                this.$Spin.hide(); //關閉加載畫面
+                this.loginProcess(res, this.defaultSchool.code)
+            })
+        },
+        SSOLogin: function (code) { // 快速登入
+            this.$Spin.show(); //開啟加載畫面
+            this.$api.SSOLogin(code).then(async res => {
+                this.$Spin.hide(); // 關閉加載畫面
+                if (!res.error) {
+                    // 登入大雲開始
+                    this.loginProcess(res, this.defaultSchool.code)
+                } else {
+                    this.$Message.warning(this.$t('login.sse.error.text1'));
+                }
 
-          this.$router.push({ name: 'login' })
-      })
-    },
-    loginProcess: async function(item, schoolCode){ // 登入用function
-      let result;
+                this.$router.push({ name: 'login' })
+            })
+        },
+        loginProcess: async function (item, schoolCode) { // 登入用function
+            let result;
 
-      await this.$api.login.loginIES(item, schoolCode).then( res => {
-        result = res
-      })
-      console.log('////',result)
-      //設定權限並登入
-      let identity = localStorage.getItem('identity')
-      User.login(result).then(res => {
-        if(res && identity) {
-          this.saveUserCodes({
-            TEAMModelId: result.id,
-            name:result.name,
-            schoolCode: result.defaultschool
-          })
-          let path = identity == 'student' ? '/studentWeb' : '/home'
-          this.$router.push({ path: path })
-        } else {
-          this.identityFlag = true;
+            await this.$api.login.loginIES(item, schoolCode).then(res => {
+                result = res
+            })
+            console.log('////', result)
+            //設定權限並登入
+            let identity = localStorage.getItem('identity')
+            User.login(result).then(res => {
+                if (res && identity) {
+                    this.saveUserCodes({
+                        TEAMModelId: result.id,
+                        name: result.name,
+                        schoolCode: result.defaultschool
+                    })
+                    let path = identity == 'student' ? '/studentWeb' : '/home'
+                    this.$router.push({ path: path })
+                } else {
+                    this.identityFlag = true;
+                }
+            })
+        },
+        saveUserCodes: function (res) {
+            this.$store.commit('setUserInfo', res)
+        },
+        setDefSchool: function () {
+            let defschool = sessionStorage.defaultSchool
+            if (defschool) {
+                defschool = JSON.parse(decodeURIComponent(defschool), "utf-8")
+                this.defaultSchool.code = defSchool.code
+                this.defaultSchool.name = defSchool.name
+            }
+        },
+        goWhere: function (identity) {
+            localStorage.setItem('identity', identity)
+            let path = identity == 'student' ? '/studentWeb' : '/home'
+            this.$router.push({ path: path })
+        },
+        loginTo: function (identity) {
+            let pathname = identity == 'student' ? 'loginStudent' : 'loginTeacher'
+            this.$router.push({ name: pathname })
         }
-      })
-    },
-    saveUserCodes: function (res) {
-  		this.$store.commit('setUserInfo',res)
-	  },
-    setDefSchool: function(){
-      let defschool = sessionStorage.defaultSchool
-      if(defschool){
-        defschool = JSON.parse(decodeURIComponent(defschool), "utf-8")
-        this.defaultSchool.code = defSchool.code
-        this.defaultSchool.name = defSchool.name
-      }      
-    },
-    goWhere: function(identity){
-      localStorage.setItem('identity', identity)
-      let path = identity == 'student' ? '/studentWeb' : '/home'
-      this.$router.push({ path: path })
-    },
-    loginTo: function(identity) {
-      let pathname = identity == 'student' ? 'loginStudent' : 'loginTeacher'
-      this.$router.push({ name: pathname })
     }
-  }
 }
 </script>

+ 3 - 3
TEAMModelOS/ClientApp/src/view/teachermgmt/components/personnel/Index.vue

@@ -612,13 +612,13 @@ export default {
             // 暫時寫死 日後需要變動再更改
             switch (this.srvAdr) {
                 case 'China':
-                    window.location.href = 'https://teammodelstorage.blob.core.chinacloudapi.cn/example/teachermgmt_example.xlsx'
+                    window.location.href = 'https://teammodelstorage.blob.core.chinacloudapi.cn/download/%E6%95%99%E5%B8%AB%E6%89%B9%E6%AC%A1%E5%8C%AF%E5%85%A5.xlsx'
                     break;
                 case 'Global':
-                    window.location.href = 'https://teammodelstorage.blob.core.windows.net/example/teachermgmt_example.xlsx'
+                    window.location.href = 'https://teammodelstorage.blob.core.chinacloudapi.cn/download/%E6%95%99%E5%B8%AB%E6%89%B9%E6%AC%A1%E5%8C%AF%E5%85%A5.xlsx'
                     break;
                 default:
-                    window.location.href = 'https://teammodelstorage.blob.core.windows.net/example/teachermgmt_example.xlsx'
+                    window.location.href = 'https://teammodelstorage.blob.core.chinacloudapi.cn/download/%E6%95%99%E5%B8%AB%E6%89%B9%E6%AC%A1%E5%8C%AF%E5%85%A5.xlsx'
                     break;
             }
         },

File diff ditekan karena terlalu besar
+ 31 - 7
TEAMModelOS/Controllers/Client/HiTeachController.cs


+ 10 - 7
TEAMModelOS/Controllers/School/StudentController.cs

@@ -179,7 +179,7 @@ namespace TEAMModelOS.Controllers
 
 
                     //入學學年為必須,故若是無給值則將之紀錄並跳過該筆資料
-                    if (student.TryGetProperty("year", out var tmpYear) && !string.IsNullOrWhiteSpace(tmpYear.GetString())) studentInfo.year = tmpYear.GetInt32();
+                    if (student.TryGetProperty("year", out var tmpYear) && !string.IsNullOrWhiteSpace(Convert.ToString(tmpYear))) studentInfo.year = tmpYear.GetInt32();
                     else
                     {
                         errorYear.Add(id);
@@ -256,11 +256,13 @@ namespace TEAMModelOS.Controllers
                 Dictionary<string, List<(string id, string no)>> classStudNos = new Dictionary<string, List<(string id, string no)>>();
 
                 //Key:ClassNo Value:ClassId 存放教室no及id的變數
-                Dictionary<string, (string classId, string className, string periodId, string gradeId)> classNoId = new Dictionary<string, (string classId, string className, string periodId, string gradeId)>();
+                Dictionary<string, (string classId, string className, string periodId, string gradeId, int year)> classNoId = new Dictionary<string, (string classId, string className, string periodId, string gradeId, int year)>();
                 foreach (var classInfo in classInfos)
                 {
+                    string classGradeId = (classInfo.Value.TryGetProperty("gradeId", out JsonElement classGradeIdJson)) ? classGradeIdJson.GetString() : null;
+                    int classYear = (classInfo.Value.TryGetProperty("year", out JsonElement classYearJson)) ? classYearJson.GetInt32() : 0;
                     classNoId.Add(classInfo.Key,
-                        (classInfo.Value.GetProperty("id").GetString(), classInfo.Value.GetProperty("name").GetString(), classInfo.Value.GetProperty("periodId").GetString(), classInfo.Value.GetProperty("gradeId").GetString()));
+                        (classInfo.Value.GetProperty("id").GetString(), classInfo.Value.GetProperty("name").GetString(), classInfo.Value.GetProperty("periodId").GetString(), classGradeId, classYear));
                     tasks.Add(
                         Task.Run(
                             async () =>
@@ -296,10 +298,11 @@ namespace TEAMModelOS.Controllers
                             sortedImpData.classInfo[item].className,
                             item,
                             periodId,
-                            gradeId, year);
+                            gradeId, 
+                            year);
 
                         classStudNos.Add(retCreateClassInfo.classNo, new List<(string id, string no)>());
-                        classNoId.Add(retCreateClassInfo.classNo, (retCreateClassInfo.classId, retCreateClassInfo.className, periodId, gradeId));
+                        classNoId.Add(retCreateClassInfo.classNo, (retCreateClassInfo.classId, retCreateClassInfo.className, periodId, gradeId, year));
                     }
                 }
 
@@ -1824,12 +1827,12 @@ namespace TEAMModelOS.Controllers
                                         courseCode = code.GetString();
                                     }
                                     string courseId = "";
-                                    if (obj.TryGetProperty("courseCode", out var cosid))
+                                    if (obj.TryGetProperty("courseId", out var cosid))
                                     {
                                         courseId = cosid.GetString();
                                     }
                                     string stulistId = "";
-                                    if (obj.TryGetProperty("courseCode", out var listId))
+                                    if (obj.TryGetProperty("id", out var listId))
                                     {
                                         stulistId = listId.GetString();
                                     }