Browse Source

Merge branch 'develop' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop

XW 3 năm trước cách đây
mục cha
commit
88e289de78
27 tập tin đã thay đổi với 1880 bổ sung1595 xóa
  1. 21 0
      TEAMModelBI/ClientApp/src/api/index.js
  2. 4 2
      TEAMModelBI/ClientApp/src/components/echarts/commonBar.vue
  3. 5 5
      TEAMModelBI/ClientApp/src/components/echarts/commonLine.vue
  4. 1 1
      TEAMModelBI/ClientApp/src/components/echarts/test/HiteachBar.vue
  5. 6 4
      TEAMModelBI/ClientApp/src/components/echarts/test/onlineType.vue
  6. 1079 873
      TEAMModelBI/ClientApp/src/view/index/index.vue
  7. 1 1
      TEAMModelBI/appsettings.json
  8. 3 3
      TEAMModelOS.FunctionV4/TEAMModelOS.FunctionV4.csproj
  9. 1 1
      TEAMModelOS.SDK/TEAMModelOS.SDK.csproj
  10. 9 0
      TEAMModelOS/ClientApp/public/lang/en-US.js
  11. 10 1
      TEAMModelOS/ClientApp/public/lang/zh-CN.js
  12. 10 1
      TEAMModelOS/ClientApp/public/lang/zh-TW.js
  13. 1 1
      TEAMModelOS/ClientApp/src/access/login.js
  14. 20 3
      TEAMModelOS/ClientApp/src/api/login.js
  15. 40 2
      TEAMModelOS/ClientApp/src/common/BaseLayout.vue
  16. 1 0
      TEAMModelOS/ClientApp/src/components/evaluation/ExerciseList.less
  17. 4 0
      TEAMModelOS/ClientApp/src/components/evaluation/ExerciseList.vue
  18. 1 1
      TEAMModelOS/ClientApp/src/components/homework/BaseHwForm.vue
  19. 509 596
      TEAMModelOS/ClientApp/src/components/selflearn/ExerciseList.less
  20. 2 2
      TEAMModelOS/ClientApp/src/components/syllabus/InviteTeacher.vue
  21. 130 82
      TEAMModelOS/ClientApp/src/view/dashboard/Index.vue
  22. 1 3
      TEAMModelOS/ClientApp/src/view/evaluation/index/CommonExercise.less
  23. 7 2
      TEAMModelOS/ClientApp/src/view/login/page/Student.vue
  24. 5 2
      TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue
  25. 1 1
      TEAMModelOS/ClientApp/src/view/research-center/BaseCleanCond.vue
  26. 5 5
      TEAMModelOS/Controllers/Common/ExamController.cs
  27. 3 3
      TEAMModelOS/TEAMModelOS.csproj

+ 21 - 0
TEAMModelBI/ClientApp/src/api/index.js

@@ -257,5 +257,26 @@ export default {
     //变更BI权限和身份
     setRolesandPower(data) {
         return post('/tabledd/set-rolesper', data)
+    },
+
+
+
+
+    //首页运维数据
+    //首页基础数据统计
+    getAllcount(data) {
+        return post('/online/get-count', data)
+    },
+    //获得在线人数
+    getOnline(data) {
+        return post('/online/get-trend', data)
+    },
+    //获取课例活跃和Hiteach开课
+    getLessontrend(data) {
+        return post('/online/get-lessontrend', data)
+    },
+    //获取版本占比
+    getVersions(data) {
+        return post('/online/get-edition', data)
     }
 }

+ 4 - 2
TEAMModelBI/ClientApp/src/components/echarts/commonBar.vue

@@ -18,7 +18,7 @@ export default {
         },
         barData: {
             type: Object,
-            default: () => {},
+            default: () => { },
         },
         title: {
             type: String,
@@ -59,6 +59,7 @@ class InitChart {
         this.state.chart && this.destory()
         this.state.chart = echarts.init(this.myEcharts.value)
         this.state.chart.setOption({
+            color: datas.color ? datas.color : '',
             title: datas.title ? datas.title : '',
             tooltip: datas.tooltip ? datas.tooltip : '',
             legend: datas.legend ? datas.legend : '',
@@ -81,5 +82,6 @@ class InitChart {
     }
 }
 </script>
-<style lang="less"></style>
+<style lang="less">
+</style>
 

+ 5 - 5
TEAMModelBI/ClientApp/src/components/echarts/commonLine.vue

@@ -5,7 +5,6 @@
 import { ref, onMounted, nextTick, watch, getCurrentInstance } from 'vue'
 import * as echarts from 'echarts'
 export default {
-    name: 'baseBar',
     props: {
         width: {
             type: String,
@@ -17,7 +16,7 @@ export default {
         },
         lineData: {
             type: Array,
-            default: () => {},
+            default: () => { },
         },
         title: {
             type: String,
@@ -59,9 +58,9 @@ class InitChart {
         this.state.chart = echarts.init(this.myEcharts.value)
         this.state.chart.setOption({
             title: datas.title ? datas.title : {},
-            backgroundColor: datas.backgroundColor ? datas.backgroundColor :'',
+            backgroundColor: datas.backgroundColor ? datas.backgroundColor : '',
             grid: datas.grid ? datas.grid : '',
-            legend:datas.legend? datas.legend:{},
+            legend: datas.legend ? datas.legend : {},
             tooltip: {
                 trigger: 'axis',
                 axisPointer: {
@@ -89,5 +88,6 @@ class InitChart {
     }
 }
 </script>
-<style lang="less"></style>
+<style lang="less">
+</style>
 

+ 1 - 1
TEAMModelBI/ClientApp/src/components/echarts/test/HiteachBar.vue

@@ -136,7 +136,7 @@ class InitChart {
                             color: 'rgba(189, 195, 199,0.5)',
                         },
                     },
-                      splitLine: { lineStyle: { color: ['rgba(189, 195, 199,0.5)'], type: [5, 8], dashOffset: 3 } },
+                    splitLine: { lineStyle: { color: ['rgba(189, 195, 199,0.5)'], type: [5, 8], dashOffset: 3 } },
                 },
                 {
                     type: 'value',

+ 6 - 4
TEAMModelBI/ClientApp/src/components/echarts/test/onlineType.vue

@@ -16,7 +16,7 @@ export default {
         },
         lineData: {
             type: Array,
-            default: () => {},
+            default: () => { },
         },
         title: {
             type: String,
@@ -141,10 +141,11 @@ class InitChart {
                     end: 100,
                 },
             ],
-            color: ['#62F4D1', '#52A8FF', '#006EFE', '#A3D7FF'],
+            color: ['#62F4D1', '#52A8FF', '#A3D7FF', '#006EFE'],
             series: [
                 { name: '老师', type: 'bar', barWidth: 20, stack: 'total', itemStyle: { borderRadius: 0 }, data: [10, 15, 1, 10, 0, 0, 0] },
-                { name: '学生', type: 'bar', barWidth: 20, stack: 'total', itemStyle: { borderRadius: 0 }, data: [5, 0, 0, 8, 0, 0, 2] },
+                { name: '学校学生', type: 'bar', barWidth: 20, stack: 'total', itemStyle: { borderRadius: 0 }, data: [5, 0, 0, 8, 0, 0, 2] },
+                { name: '醍摩豆学生', type: 'bar', barWidth: 20, stack: 'total', itemStyle: { borderRadius: 0 }, data: [5, 0, 0, 8, 0, 0, 2] },
             ],
         })
         window.addEventListener('resize', () => {
@@ -160,5 +161,6 @@ class InitChart {
     }
 }
 </script>
-<style lang="less"></style>
+<style lang="less">
+</style>
 

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1079 - 873
TEAMModelBI/ClientApp/src/view/index/index.vue


+ 1 - 1
TEAMModelBI/appsettings.json

@@ -28,7 +28,7 @@
   "Azure": {
     //
     "Storage": {
-      "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn"
+      "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodeltest;AccountKey=O2W2vadCqexDxWO+px+QK7y1sHwsYj8f/WwKLdOdG5RwHgW/Dupz9dDUb4c1gi6ojzQaRpFUeAAmOu4N9E+37A==;EndpointSuffix=core.chinacloudapi.cn"
       //"ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelos;AccountKey=Dl04mfZ9hE9cdPVO1UtqTUQYN/kz/dD/p1nGvSq4tUu/4WhiKcNRVdY9tbe8620nPXo/RaXxs+1F9sVrWRo0bg==;EndpointSuffix=core.chinacloudapi.cn"
     },
     "Cosmos": {

+ 3 - 3
TEAMModelOS.FunctionV4/TEAMModelOS.FunctionV4.csproj

@@ -5,9 +5,9 @@
 		<OutputType>Exe</OutputType>
 		<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
 		<SignAssembly>true</SignAssembly>
-		<AssemblyVersion>5.2205.7.1</AssemblyVersion>
-		<FileVersion>5.2205.7.1</FileVersion>
-		<Version>5.2205.7</Version>
+		<AssemblyVersion>5.2205.11.1</AssemblyVersion>
+		<FileVersion>5.2205.11.1</FileVersion>
+		<Version>5.2205.11</Version>
 		<PackageId>TEAMModelOS.FunctionV4</PackageId>
 		<Authors>teammodel</Authors>
 		<Company>醍摩豆(成都)信息技术有限公司</Company>

+ 1 - 1
TEAMModelOS.SDK/TEAMModelOS.SDK.csproj

@@ -27,7 +27,7 @@
     <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.3" />
     <PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
     <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.3" />
-    <PackageReference Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.4" />
+    <PackageReference Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.5" />
     <PackageReference Include="Microsoft.Identity.Client" Version="4.39.0" />
     <PackageReference Include="MSTest.TestFramework" Version="2.2.8" />
     <PackageReference Include="NUnit" Version="3.13.2" />

+ 9 - 0
TEAMModelOS/ClientApp/public/lang/en-US.js

@@ -580,6 +580,7 @@ const LANG_EN_US = {
             studentTableC8: 'Type',
             studentTableC9: 'IRS Number',
             studentTableC10: 'Admin Class',
+            studentTableC11: 'Nickname',
             addClassroomProp1: 'Select Default classroom',
             addClassroomProp2: 'New personal classroom',
             chooseClassroom: 'Please select system classroom',
@@ -2086,6 +2087,7 @@ const LANG_EN_US = {
     },
     // 活动模块
     learnActivity: {
+        noStartTimeTip:'不設置則默認為立即發佈',
         school: 'School',
         area: 'District',
         noFound: "Can't find the current activity!",
@@ -3016,6 +3018,10 @@ const LANG_EN_US = {
             block2: 'Classroom IoT',
             block3: 'Moral Education Evaluation',
             block4: 'Learning Status Analysis',
+            block5: '教學看闆',
+            block6: '德育看闆',
+            block7: '體育看闆',
+            block8: '藝術看闆',
             comingSoon: 'Coming Soon',
             loading: 'Loading',
             quit: 'Exit',
@@ -4690,6 +4696,8 @@ const LANG_EN_US = {
         receiveBtn: 'Confirm Receive',
         noMatchTerm: 'No Match Semester',
         emptyTip: 'Empty books are not available for sharing!',
+        chooseTargetTip:'Please select the sharing object first!',
+        chooseShareChapterTip:'Please select the topic you want to share first!',
         chooseChapterTip: 'Please select the topic you want to save first!',
         chooseVolumeTip: 'Please select an existing book or create a new one!',
         playFailTip: 'Resource temporarily does not support playing',
@@ -4906,6 +4914,7 @@ const LANG_EN_US = {
             discuss: 'Discussion Center',
             policy: 'Policy Document',
             research: 'Lesson',
+            toSokrates:'蘇格拉底',
             researchBoard: 'Data Board',
             cusVideos: 'Lesson Data',
             cusVideoMgt: 'Records',

+ 10 - 1
TEAMModelOS/ClientApp/public/lang/zh-CN.js

@@ -580,6 +580,7 @@ const LANG_ZH_CN = {
             studentTableC8: '类型',
             studentTableC9: 'IRS号码',
             studentTableC10: '行政班',
+            studentTableC11: '昵称',
             addClassroomProp1: '选择预设教室',
             addClassroomProp2: '新建个人教室',
             chooseClassroom: '请选择系统的教室',
@@ -2087,6 +2088,7 @@ const LANG_ZH_CN = {
     },
     // 活动模块
     learnActivity: {
+        noStartTimeTip:'不设置则默认为立即发布',
         school: '校',
         area: '区',
         noFound: '未查询到当前活动!',
@@ -3017,6 +3019,10 @@ const LANG_ZH_CN = {
             block2: '教室物联',
             block3: '德育评价',
             block4: '学情分析',
+            block5: '教学看板',
+            block6: '德育看板',
+            block7: '体育看板',
+            block8: '艺术看板',
             comingSoon: '即将上线',
             loading: '加载中',
             quit: '退出',
@@ -4690,6 +4696,8 @@ const LANG_ZH_CN = {
         receiveBtn: '确认接收',
         noMatchTerm: '无匹配学期',
         emptyTip: '空目录册别无法进行分享!',
+        chooseTargetTip:'请先选择分享对象!',
+        chooseShareChapterTip:'请先选择需要分享的章节!',
         chooseChapterTip: '请先选择需要收藏的章节!',
         chooseVolumeTip: '请选择已创建的册别或者新建册别!',
         playFailTip: '资源暂不支持播放',
@@ -4906,9 +4914,10 @@ const LANG_ZH_CN = {
             discuss: '讨论中心',
             policy: '政策文件',
             research: '课例中心',
+            toSokrates:'苏格拉底',
             researchBoard: '数据看板',
             cusVideos: '课例数据',
-            cusVideoMgt: '课例管理',
+            cusVideoMgt: '课堂记录',
             lockTips: '锁定菜单栏',
             unlockTips: '解锁菜单栏',
             platform: '资源平台',

+ 10 - 1
TEAMModelOS/ClientApp/public/lang/zh-TW.js

@@ -580,6 +580,7 @@ const LANG_ZH_TW = {
             studentTableC8: '類型',
             studentTableC9: 'IRS號碼',
             studentTableC10: '編制班',
+            studentTableC11: '暱稱',
             addClassroomProp1: '選擇預設教室',
             addClassroomProp2: '新建個人教室',
             chooseClassroom: '請選擇系統的教室',
@@ -2087,6 +2088,7 @@ const LANG_ZH_TW = {
     // 活动模块
     learnActivity: {
         //MgtSchoolEva.vue
+        noStartTimeTip:'不設置則默認為立即發佈',
         school: '校',
         area: '區',
         noFound: '未查詢到當前活動!',
@@ -3017,6 +3019,10 @@ const LANG_ZH_TW = {
             block2: '教室物聯',
             block3: '多元評量',
             block4: '學情分析',
+            block5: '教學看闆',
+            block6: '德育看闆',
+            block7: '體育看闆',
+            block8: '藝術看闆',
             comingSoon: '即將上線',
             loading: '載入中',
             quit: '退出',
@@ -4692,6 +4698,8 @@ const LANG_ZH_TW = {
         receiveBtn: '確認接收',
         noMatchTerm: '無匹配學期',
         emptyTip: '空目錄冊別無法進行分享!',
+        chooseTargetTip:'請先選擇分享對象!',
+        chooseShareChapterTip:'請先選擇需要分享的章節!',
         chooseChapterTip: '請先選擇需要收藏的章節!',
         chooseVolumeTip: '請選擇已新增的冊別或者新建冊別!',
         playFailTip: '資源暫不支援播放',
@@ -4908,9 +4916,10 @@ const LANG_ZH_TW = {
             discuss: '討論中心',
             policy: '政策文件',
             research: '課堂中心',
+            toSokrates:'蘇格拉底',
             researchBoard: '校園大數據',
             cusVideos: '課例數據',
-            cusVideoMgt: '紀錄管理',
+            cusVideoMgt: '課堂記錄',
             lockTips: '鎖定菜單欄',
             unlockTips: '解鎖菜單欄',
             platform: '資源平臺',

+ 1 - 1
TEAMModelOS/ClientApp/src/access/login.js

@@ -106,6 +106,7 @@ export default {
 			try{
 				let studentInfo = withToken ? await $api.login.getStuInfoByToken(params) : await $api.login.getStudentInfoByAccount(params)
 				if(studentInfo.error){
+					app.$Message.warning(studentInfo.message)
 					j(studentInfo)
 					return
 				}
@@ -136,7 +137,6 @@ export default {
 				})
 			}catch(e){
 				j(500)
-				console.log(e)
 			}
 		})
 		

+ 20 - 3
TEAMModelOS/ClientApp/src/api/login.js

@@ -161,7 +161,7 @@ export default {
 			// 進行API呼叫
 			await post('/student/login', data).then(res => {
 				if (res.error == 0) {
-					console.log('学生账号登录数据 > ',res,data)
+					console.log('学生账号登录数据 > ', res, data)
 					// 儲存大雲Token
 					localStorage.setItem("access_token", res.token.access_token)
 					// localStorage.setItem("auth_token", res.auth_token)
@@ -228,7 +228,7 @@ export default {
 	 * 绑定手机号
 	 */
 	bandOpenAccount(data) {
-		return new Promise((resolve,reject) => {
+		return new Promise((resolve, reject) => {
 			let srvAdr = localStorage.getItem('srvAdr')
 			let url = store.state.config[srvAdr].coreAPIUrl
 			let nonceStr = 'habook'  // 檢查項目
@@ -265,5 +265,22 @@ export default {
 				}
 			)
 		})
-	}
+	},
+	/**
+	 * 获取快速登录code
+	 * 登录成功后根据idToken获取快读登录code
+	 * @returns 
+	 */
+	getCode: function (idToken) {
+		let srvAdr = localStorage.getItem('srvAdr') || 'China'
+		let url = store.state.config[srvAdr].coreAPIUrl
+		let nonceStr = 'habook' // 檢查項目
+		let data = {
+			'client_id': store.state.config[srvAdr].clientID,
+			'grant_type': 'code',
+			'nonce': nonceStr,
+			'id_token': idToken
+		}
+		return corePost(url + '/oauth2/login', data)
+	},
 }

+ 40 - 2
TEAMModelOS/ClientApp/src/common/BaseLayout.vue

@@ -18,6 +18,7 @@
             </div>
             <Menu style="margin-top:0px" width="auto" :class="['menu-item', isCollapsed ? 'collapsed-menu' : '']" accordion :active-name="activeName" :open-names="openNames">
                 <vuescroll :ops="ops">
+                    <!-- 学校菜单 -->
                     <MenuGroup :title="$t('system.menu.school')">
                         <!-- 暂未提供判断是否购买服务的字段 -->
                         <p class="school-menu-tips" v-show="schoolStatusInfo">
@@ -33,7 +34,7 @@
                                         <Icon v-show="!isCollapsed" :custom="item.icon" :class="isCollapsed ? 'collapse-icon-size':''" size="16" />
                                         <span>{{item.name}}</span>
                                     </template>
-                                    <MenuItem :name="menuItem.menuName" :to="menuItem.router" v-for="(menuItem,i) in item.child" :key="i" v-show="$access.ability(menuItem.role,menuItem.permission).validateAll && menuItem.isShow">
+                                    <MenuItem :name="menuItem.menuName" @click.native.capture="menuClick(menuItem)" :to="menuItem.router" v-for="(menuItem,i) in item.child" :key="i" v-show="$access.ability(menuItem.role,menuItem.permission).validateAll && menuItem.isShow">
                                     <!-- <Tooltip :content="menuItem.name" placement="right" transfer v-show="isCollapsed"> -->
                                     <Icon v-show="isCollapsed" class="sub-menu-icon" :custom="menuItem.icon" size="16" />
                                     <!-- </Tooltip> -->
@@ -67,6 +68,7 @@
                             </div>
                         </div>
                     </MenuGroup>
+                    <!-- 个人菜单 -->
                     <MenuGroup :title="$t('system.menu.private')">
                         <div v-for="(item,index) in teacherMenu" :key="index">
                             <Submenu :name="item.subName" v-if="$access.ability(item.role,item.permission).validateAll && item.child.length && item.isShow" v-show="(index == 0 && $store.state.userInfo.hasSchool) || index > 0">
@@ -116,6 +118,7 @@
                 <Icon :title="isLock ? $t('system.menu.unlockTips') : $t('system.menu.lockTips')" :custom="isLock ? 'iconfont icon-lock' : 'iconfont icon-unlock'" @click="isLock = !isLock" class="lock-menu-btn" />
             </p>
         </Sider>
+        <Loading v-if="isLoading"></Loading>
         <!-- Body内容部分 -->
         <Layout :class="!isLock ?'collapsed-padding content-wrap':'content-wrap'">
             <slot name="content"></slot>
@@ -127,6 +130,7 @@ import { mapGetters } from 'vuex'
 export default {
     data() {
         return {
+            isLoading: false,
             systemLevel: this.$t('system.basic'),
             isLock: false,
             isShowAreaSelect: true,
@@ -194,6 +198,29 @@ export default {
             const proInfo = this.$store.state.user?.schoolProfile?.svcStatus || null
             console.log(proInfo)
             return proInfo && proInfo.YMPCVCIM
+        },
+        //获取快速登录的code
+        getLoginCode() {
+            this.isLoading = true
+            let idToken = localStorage.getItem('id_token')
+            this.$api.login.getCode(idToken).then(
+                res => {
+                    this.loginCode = res.code
+                    window.location = `https://sokrates.teammodel.cn/auth/login/callback-habook?code=${this.loginCode}`
+                },
+                err => {
+                    console.log('获取code失败', err)
+                }
+            ).finally(() => {
+                setTimeout(() => {
+                    this.isLoading = false
+                }, 500)
+            })
+        },
+        menuClick(menu) {
+            if (menu.router == '#') {
+                this.getLoginCode()
+            }
         }
     },
     computed: {
@@ -444,7 +471,18 @@ export default {
                             role: 'admin',
                             permission: 'research-read|research-upd',
                             menuName: 'courseCenter',
-                            isShow: this.$store.state.config.srvAdrType != 'product'
+                            isShow: this.$store.state.config.srvAdrType === 'test'
+                        },
+                        // 名师课堂
+                        {
+                            icon: 'iconfont icon-course-videos',
+                            name: this.$t('system.menu.toSokrates'),
+                            router: '#',
+                            tag: '',
+                            role: 'admin',
+                            permission: 'research-read|research-upd',
+                            menuName: 'courseCenter',
+                            isShow: true
                         },
                         {
                             icon: 'iconfont icon-data-count',

+ 1 - 0
TEAMModelOS/ClientApp/src/components/evaluation/ExerciseList.less

@@ -160,6 +160,7 @@
   }
   img {
     vertical-align: middle;
+    max-width: 100%;
   }
   .item-btn-toggle {
     position: absolute;

+ 4 - 0
TEAMModelOS/ClientApp/src/components/evaluation/ExerciseList.vue

@@ -466,6 +466,10 @@
 </style>
 
 <style>
+	.cp-exercise-item .item-question-text img{
+		max-width: 100%;
+	}
+
 	.circle {
 		border: solid 1px red;
 		background-color: red;

+ 1 - 1
TEAMModelOS/ClientApp/src/components/homework/BaseHwForm.vue

@@ -21,7 +21,7 @@
 							</BaseClassSelectPri>
 						</div>
 					</FormItem>
-					<FormItem :label="$t('learnActivity.createEv.startTime') + '(不设置则视为立即发布)'" prop="startTime" v-show="!isEdit || isDraft">
+					<FormItem :label="$t('learnActivity.createEv.startTime') + '(' + $t('learnActivity.noStartTimeTip') + ')'" prop="startTime" v-show="!isEdit || isDraft">
 						<DatePicker v-show="voteFormEdit" type="datetime" :options="startOption"
 							format="yyyy/MM/dd HH:mm" v-model="voteForm.startTime" split-panels
 							:placeholder="$t('learnActivity.createEv.sTimeHolder')" style="width:100%"

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 509 - 596
TEAMModelOS/ClientApp/src/components/selflearn/ExerciseList.less


+ 2 - 2
TEAMModelOS/ClientApp/src/components/syllabus/InviteTeacher.vue

@@ -224,7 +224,7 @@
 			/* 分享课纲操作 */
 			doShare(){
 				if(!this.curTeacher){
-					this.$Message.warning('请先选择分享对象!')
+					this.$Message.warning(this.$t('syllabus.chooseTargetTip'))
 					return
 				}
 				if(this.curTeacher.id === this.$store.state.userInfo.TEAMModelId){
@@ -232,7 +232,7 @@
 					return
 				}
 				if(!this.selectedChapters.length){
-					this.$Message.warning('请先选择需要分享的章节!')
+					this.$Message.warning(this.$t('syllabus.chooseShareChapterTip'))
 					return
 				}
 				this.isShareLoading = true

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 130 - 82
TEAMModelOS/ClientApp/src/view/dashboard/Index.vue


+ 1 - 3
TEAMModelOS/ClientApp/src/view/evaluation/index/CommonExercise.less

@@ -122,8 +122,6 @@
         display: unset;
       }
     }
-    p {
-    }
   }
 }
 .content-wrap .exercise-item table, .content-wrap .exercise-item td {
@@ -582,7 +580,7 @@
   }
   &::-webkit-scrollbar-thumb {
     border-radius: 10px;
-    -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
+    box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
     background: #70707026;
   }
   &::-webkit-scrollbar-track {

+ 7 - 2
TEAMModelOS/ClientApp/src/view/login/page/Student.vue

@@ -449,7 +449,12 @@
 									id: this.loginForm.id,
 									pass: this.loginForm.pass
 								}).then(res => {
-									result = res
+									if(!res.error){
+										result = res
+									}else{
+										this.$Message.warning(res.message)
+										this.loading = false
+									}
 								}).catch(err => {
 									isFail = true
 								})
@@ -461,7 +466,7 @@
 								}
 								break;
 							case 'studForm':
-								this.$loginTools.stuLoginByAccount({ school_code: this.studForm.schoolCode,id: this.studForm.id,pw: this.studForm.pass })
+								this.$loginTools.stuLoginByAccount({ school_code: this.studForm.schoolCode,id: this.studForm.id,pw: this.studForm.pass }).then().catch(err => {this.loading = false})
 								break;
 						}
 						return false;

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

@@ -243,7 +243,10 @@
                                             </span>
                                             <!-- 过期时间 -->
                                             <span class="record-info" v-if="item.expire > -1">
-                                                <Time :time="item.expire" style="color:red;font-weight:800"/>
+                                                <!-- <Time :time="item.expire" style="color:red;font-weight:800"/> -->
+                                                <span style="color:red">
+                                                    {{$tools.getRelativeTime(item.expire)}}
+                                                </span>
                                                 <span style="color:red">
                                                     {{$t('cusMgt.rcdExpired')}}
                                                 </span>
@@ -673,7 +676,7 @@ export default {
                     align: 'center '
                 },
                 {
-                    title: '昵称',
+                    title: this.$t('courseManage.classroom.studentTableC11'),
                     slot: 'nickname',
                     align: 'center ',
                     width: '180'

+ 1 - 1
TEAMModelOS/ClientApp/src/view/research-center/BaseCleanCond.vue

@@ -2,7 +2,7 @@
   <div class="base-clean-container">
     <div style="display:flex;align-items:center">
       <span style="font-weight: bold;font-size: 14px;">
-        {{ $t('lessonRecord.customSettins') }}
+        {{ $t('lessonRecord.customSetting') }}
       </span>
       <i-switch size="large" v-model="openAutoClean" style="margin-left:10px">
         <span slot="open">{{ $t('lessonRecord.open') }}</span>

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

@@ -524,8 +524,8 @@ namespace TEAMModelOS.Controllers
 
 
         [ProducesDefaultResponseType]
-        [Authorize(Roles = "IES")]
-        [AuthToken(Roles = "teacher,admin")]
+/*        [Authorize(Roles = "IES")]
+        [AuthToken(Roles = "teacher,admin")]*/
         [HttpPost("find-by-analysis")]
         public async Task<IActionResult> FindByAnalysis(JsonElement requert)
         {
@@ -617,7 +617,7 @@ namespace TEAMModelOS.Controllers
                     int end = yy.GetInt32() + 1;
                     long stime = DateTimeOffset.Parse($"{yy.GetInt32()}-1-1").ToUnixTimeMilliseconds();
                     long etime = DateTimeOffset.Parse($"{end}-1-1").ToUnixTimeMilliseconds();
-                    stringBuilder.Append($" and (c.startTime >= {stime} && c.startTime < {etime})");
+                    stringBuilder.Append($" and c.startTime >= {stime} and c.startTime < {etime} ");
                 }
                 if (requert.TryGetProperty("name", out JsonElement name) && !string.IsNullOrWhiteSpace($"{name}"))
                 {
@@ -689,12 +689,12 @@ namespace TEAMModelOS.Controllers
                         }
                     }                   
                 }
-                var groups = exams.Where(e => null != e.examType && !string.IsNullOrWhiteSpace(e.examType.id)).GroupBy(x =>x.examType).Select(y => new { key = y.Key.name,count = y.ToList().Count}).ToList();
+                var groups = exams.Where(e => null != e.examType && !string.IsNullOrWhiteSpace(e.examType.id)).GroupBy(x =>x.examType.name).Select(y => new { key = y.Key,count = y.ToList().Count}).ToList();
                 return Ok(new { examInfo, token = token, year,count = exams.Count, groups });
             }
             catch (Exception e)
             {
-                await _dingDing.SendBotMsg($"OS,{_option.Location},exam/find-by-analysis()\n{e.Message}", GroupNames.醍摩豆服務運維群組);
+                await _dingDing.SendBotMsg($"OS,{_option.Location},exam/find-by-analysis()\n{e.Message}\n{e.StackTrace}", GroupNames.醍摩豆服務運維群組);
                 return BadRequest();
             }
 

+ 3 - 3
TEAMModelOS/TEAMModelOS.csproj

@@ -32,9 +32,9 @@
     <SpaRoot>ClientApp\</SpaRoot>
     <DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
     <UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
-    <Version>5.2205.7</Version>
-    <AssemblyVersion>5.2205.7.1</AssemblyVersion>
-    <FileVersion>5.2205.7.1</FileVersion>
+    <Version>5.2205.11</Version>
+    <AssemblyVersion>5.2205.11.1</AssemblyVersion>
+    <FileVersion>5.2205.11.1</FileVersion>
     <Description>TEAMModelOS(IES5)</Description>
     <PackageReleaseNotes>6.0版本说明</PackageReleaseNotes>
     <PackageId>TEAMModelOS</PackageId>