Просмотр исходного кода

Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/pbl-student-table into beta

lsc 1 неделя назад
Родитель
Сommit
f8e8f3921f

+ 1 - 1
dist/index.html

@@ -27,7 +27,7 @@
     html,
     body{
       font-family: '黑体';
-    }</style><link href=./static/css/app.be576daaa07f241daf815959e225b25a.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.b2299056e030e9dd4cb8.js></script><script type=text/javascript src=./static/js/app.637a0846b122b5d64b1d.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.9cc0c4da63ea6ccab8cc4265c4daaf51.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.becc9317549795ada446.js></script><script type=text/javascript src=./static/js/app.146c234c6d453c666231.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/css/app.9cc0c4da63ea6ccab8cc4265c4daaf51.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/css/app.9cc0c4da63ea6ccab8cc4265c4daaf51.css.map


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/css/app.be576daaa07f241daf815959e225b25a.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/css/app.be576daaa07f241daf815959e225b25a.css.map


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/app.146c234c6d453c666231.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/app.146c234c6d453c666231.js.map


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/manifest.3ad1d5771e9b13dbdad2.js.map


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/vendor.becc9317549795ada446.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
dist/static/js/vendor.becc9317549795ada446.js.map


+ 64 - 2
src/components/components/cocoFlowDia.vue

@@ -17,7 +17,20 @@
             <div class="markDialog">
                 <template v-if="listData.length && showListData(listData)">
                     <div v-for="(item,index) in listData" :key="index">
-                        <div class="BodyCon" v-if="item.messages.length"  >
+                        <div class="BodyCon" v-if="item.imageUrls && item.imageUrls.length">
+                            <div class="BodyConTit">节点{{ index + 1}}</div>
+                            <div style="display: flex;flex-wrap: wrap;gap: 10px;">
+                                <img 
+                                    style="max-width: 360px;object-fit: cover;cursor: pointer;" 
+                                    v-for="(image,imgIndex) in item.imageUrls" 
+                                    :key="index+'-image-'+imgIndex" 
+                                    :src="image" 
+                                    alt="" 
+                                    @click="previewImage(image)"
+                                />
+                            </div>
+                        </div>
+                        <div class="BodyCon" v-if="item.messages && item.messages.length" >
                             <div class="BodyConTit">节点{{ index + 1}}</div>
                             <div class="BodyConChat" v-for="(po, index2) in item.messages" :key="index+'-'+index2">
                                 <div class="left" v-if="po.role == 'assistant'">
@@ -46,6 +59,22 @@
 
         </el-dialog>
 
+        <!-- 图片预览对话框 -->
+        <el-dialog
+            :visible.sync="imagePreviewVisible"
+            width="90%"
+            :close-on-click-modal="true"
+            :show-close="true"
+            class="image-preview-dialog"
+            @close="imagePreviewVisible = false">
+            <div style="text-align: center;">
+                <img 
+                    :src="previewImageUrl" 
+                    alt="预览图片" 
+                    style="max-width: 100%; max-height: 80vh; object-fit: contain;"
+                />
+            </div>
+        </el-dialog>
     </div>
 </template>
 
@@ -96,7 +125,9 @@ const getFile = url => {
                 username:'',
                 FlowVisible:false,
                 listData:[],
-                markfullscreen:false
+                markfullscreen:false,
+                imagePreviewVisible: false,
+                previewImageUrl: ''
             }
         },
         computed: {
@@ -175,6 +206,11 @@ const getFile = url => {
                 this.listData = []
                 this.FlowVisible = false;
             },
+            // 预览图片
+            previewImage(imageUrl) {
+                this.previewImageUrl = imageUrl;
+                this.imagePreviewVisible = true;
+            },
         },
     }
 </script>
@@ -303,7 +339,33 @@ const getFile = url => {
         box-sizing: border-box; */
     }
 
+    /* 图片预览对话框样式 */
+    .image-preview-dialog >>> .el-dialog__body {
+        padding: 20px;
+        /* background: rgba(0, 0, 0, 0.8); */
+        display: flex;
+        justify-content: center;
+        align-items: center;
+    }
+
+    .image-preview-dialog >>> .el-dialog {
+        background: transparent;
+        box-shadow: none;
+    }
+
+    .image-preview-dialog >>> .el-dialog__header {
+        background: transparent;
+        border: none;
+    }
 
+    .image-preview-dialog >>> .el-dialog__close {
+        color: #fff;
+        font-size: 24px;
+    }
+
+    .image-preview-dialog >>> .el-dialog__close:hover {
+        color: #409EFF;
+    }
 
     
 </style>

+ 81 - 4
src/components/components/studentWorkPreviewDialog.vue

@@ -1,11 +1,12 @@
 <template>
-  <div class="studentWorkPreviewDialog">
+  <div>
     <el-dialog
       :visible.sync="show"
       width="100%"
       height="100%"
       fullscreen
       :modal="true"
+      class="studentWorkPreviewDialog"
       :close-on-click-modal="false"
       :show-close="false"
     >
@@ -271,9 +272,22 @@
               </div>
             </div>
             <div class="s_b_m_tool40" v-if="[72].includes(tool)">
-              <template v-if="JSON.parse(studentWork.works).length && JSON.parse(studentWork.works)[0].messages.length">
+              <template  v-if="JSON.parse(studentWork.works).length && showListData(JSON.parse(studentWork.works))">
                 <div v-for="(item,index) in JSON.parse(studentWork.works)" :key="index">
-                    <div class="BodyCon" v-if="item.messages.length" >
+                  <div class="BodyCon" v-if="item.imageUrls && item.imageUrls.length">
+                      <div class="BodyConTit">节点{{ index + 1}}</div>
+                       <div style="display: flex;flex-wrap: wrap;gap: 10px;">
+                            <img 
+                                style="max-width: 360px;object-fit: cover;cursor: pointer;" 
+                                v-for="(image,imgIndex) in item.imageUrls"
+                                :key="index+'-image-'+imgIndex" 
+                                :src="image" 
+                                alt="" 
+                                @click="previewImage(image)"
+                            />
+                        </div>
+                  </div>  
+                  <div class="BodyCon" v-if="item.messages && item.messages.length" >
                         <div class="BodyConTit">节点{{ index + 1}}</div>
                         <div class="BodyConChat" v-for="(po, index2) in item.messages" :key="index+'-'+index2">
                             <div class="left" v-if="po.role == 'assistant'">
@@ -302,6 +316,22 @@
         </div>
       </div>
     </el-dialog>
+     <!-- 图片预览对话框 -->
+    <el-dialog
+        :visible.sync="imagePreviewVisible"
+        width="90%"
+        :close-on-click-modal="true"
+        :show-close="true"
+        class="image-preview-dialog"
+        @close="imagePreviewVisible = false">
+        <div style="text-align: center;">
+            <img 
+                :src="previewImageUrl" 
+                alt="预览图片" 
+                style="max-width: 100%; max-height: 80vh; object-fit: contain;"
+            />
+        </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -414,6 +444,8 @@ export default {
       testData: null,
       testJson: null,
       tool: null,
+      imagePreviewVisible: false,
+      previewImageUrl: '',
 			optionTypeList:['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
 
     };
@@ -453,9 +485,24 @@ export default {
     },
     init() {
       this.studentWork = null;
-    }
+    },
+    // 预览图片
+    previewImage(imageUrl) {
+        this.previewImageUrl = imageUrl;
+        this.imagePreviewVisible = true;
+    },
   },
   computed: {
+    showListData(){
+        return function (val) {
+            let kk = val.map(e=> e.messages).flat()
+            console.log('kk',kk);
+            if (kk.length == 0) {
+            return false
+            }
+            return true
+        };
+    },
     renderedFormula() {
       return function(val){
        try {
@@ -994,5 +1041,35 @@ export default {
         flex-direction: column;
     }
 
+    /* 图片预览对话框样式 */
+    .image-preview-dialog >>> .el-dialog__body {
+        padding: 20px;
+        /* background: rgba(0, 0, 0, 0.8); */
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        height: auto;
+        width: 90%;
+    }
+
+    .image-preview-dialog >>> .el-dialog {
+        background: transparent;
+        box-shadow: none;
+    }
+
+    .image-preview-dialog >>> .el-dialog__header {
+        background: transparent;
+        border: none;
+        display: block;
+    }
+
+    .image-preview-dialog >>> .el-dialog__close {
+        color: #fff;
+        font-size: 24px;
+    }
+
+    .image-preview-dialog >>> .el-dialog__close:hover {
+        color: #409EFF;
+    }
 
 </style>

Разница между файлами не показана из-за своего большого размера
+ 190 - 193
src/components/courseDetail.vue


+ 8 - 8
src/components/dialog/addClassDialog.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog
-      title="选择班级"
+      :title="lang.ssSelectClass"
       :visible.sync="show"
       :append-to-body="true"
       width="800px"
@@ -10,13 +10,13 @@
     >
       <div class="check_classBox" v-loading="isLoading">
         <div class="check_class_right">
-          <span>年级</span>
+          <span>{{ lang.ssGrade }}</span>
           <div
             class="check_class"
             :class="{ activeX: gradeId == '' }"
             @click="(gradeId = ''), getClass()"
           >
-            全部年级
+            {{ lang.ssAllGrades }}
           </div>
           <el-tooltip
             placement="top"
@@ -35,7 +35,7 @@
         </div>
         <div class="check_class_left">
           <div class="check_class_all_box">
-            <div class="check_class_left_title">班级</div>
+            <div class="check_class_left_title">{{ lang.ssClass }}</div>
             <!-- <div style="display:flex;align-items:center;margin-left:auto;">
               <el-checkbox
                 v-model="checkAll"
@@ -63,20 +63,20 @@
           <div class="classItem" @click="classItemClick(item)" :class="{classActiveItem:checkboxList2.map(i=>i.id).includes(item.id)}" v-for="item in grade2" :key="item.id">
             <div class="ci_left">
               <div>{{ item.name }}</div>
-              <span v-if="item.studentNum>=0">{{ item.studentNum }}名学生</span>
+              <span v-if="item.studentNum>=0">{{ lang.ssStudentNum.replace(/\*/g, item.studentNum) }}</span>
             </div>
             <div class="ci_right">
 
               <svg v-show="checkboxList2.map(i=>i.id).includes(item.id)" t="1756864121172" class="icon" viewBox="0 0 1098 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4441" width="200" height="200"><path d="M476.808045 0.000043C213.401753 0.106685-0.031993 213.68973 0 477.074693S213.551052 953.98938 476.94668 954.021373s476.957344-213.412417 477.085315-476.808045A477.010665 477.010665 0 0 0 476.808045 0.000043z m273.761252 353.369671L441.861388 661.853674a43.1901 43.1901 0 0 1-62.023117 0L202.214984 484.251715a43.864079 43.864079 0 1 1 62.033781-62.033782l147.21959 147.21959 277.89897-276.86454a43.861946 43.861946 0 1 1 62.023117 62.033781z m0 0" p-id="4442" fill="#4CAF51"></path></svg>
             </div>
           </div>
-          <div v-if="!grade2.length">暂无数据</div>
+          <div v-if="!grade2.length">{{ lang.ssNoData }}</div>
         </div>
       </div>
       <span slot="footer" class="dialog-footer">
         <div class="b_bottom">
-					<div @click="close()">取消</div>
-          <div class="b_b_submit" @click="submit()">确定</div>
+					<div @click="close()">{{ lang.ssCancel }}</div>
+          <div class="b_b_submit" @click="submit()">{{ lang.ssConfirm }}</div>
 				</div>
         <!-- <el-button @click="close()">取 消</el-button>
         <el-button type="primary" @click="submit()">确定</el-button> -->

+ 6 - 6
src/components/dialog/selectTeachingClassDialog.vue

@@ -12,7 +12,7 @@
 		>
 			<div class="box">
 				<div class="b_head">
-					<span>选择授课班级</span>
+					<span>{{ lang.ssSelectTeachingClass }}</span>
 					<svg
 						@click="close()"
 						t="1748587270371"
@@ -41,7 +41,7 @@
           <template v-for="item in classList">
             <div class="b_m_classItem" :class="{'b_m_classItem_active':selectId == item.id}" :key="item.id" v-if="item.name" @click="selectId == item.id ? selectId = '' : selectId = item.id" >
             <div>{{ item.name }}</div>
-            <span v-if="item.studentNum>=0">{{ item.studentNum }}名学生</span>
+            <span v-if="item.studentNum>=0">{{ lang.ssStudentNum.replace(/\*/g, item.studentNum) }}</span>
           </div>
           </template>
 
@@ -51,16 +51,16 @@
                 <svg t="1756867649445" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10274" width="200" height="200"><path d="M417.664 921.6l317.184-824.32h-63.616L353.152 921.6z" fill="#999999" p-id="10275"></path></svg>
                 <span>-</span>
               </div>
-            <div>添加/修改班级</div>
+            <div>{{ lang.ssAddOrModifyClass }}</div>
           </div>
 
           <div class="b_m_noClassMsg" v-if="classList.length<=0 && courseDetail.userid != userId">
-            <span>创建人暂未添加班级</span>
+            <span>{{ lang.ssCreatorNotAddedClass }}</span>
           </div>
 				</div>
 				<div class="b_bottom">
-					<div @click="close()">取消</div>
-          <div class="b_b_submit" @click="submit()">{{selectId ? '确定' : '直接进入'}}</div>
+					<div @click="close()">{{ lang.ssCancel }}</div>
+          <div class="b_b_submit" @click="submit()">{{selectId ? lang.ssConfirm : lang.ssEnterDirectly}}</div>
 				</div>
 			</div>
 		</el-dialog>

+ 53 - 43
src/components/index.vue

@@ -6,28 +6,24 @@
         AI通识课
       </div>
       <div class="student_head" v-else>
-
-        <!-- <img src="../assets/banner.png" alt="" /> -->
-         <!-- //pbl.cocorobo.cn/pbl-teacher-table/dist -->
         <el-carousel trigger="click" style="width: 100%; height: 100%">
           <el-carousel-item v-for="item in bannerList" :key="item.id">
-            <!-- <h3 class="small">{{ item }}</h3> -->
             <img class="imgS" :src="item.poster" alt="" />
           </el-carousel-item>
         </el-carousel>
       </div>
       <div class="reBox">
         <div class="reTop">
-          <div>课程</div>
+          <div>{{ lang.ssCourse }}</div>
           <div>
             <div class="search" @click="search">
               <img src="../assets/icon/search.png" alt="" />
             </div>
-            <input class="sInput" type="text" placeholder="请输入关键字" v-model="sCourse" @keyup.enter="search"/>
+            <input class="sInput" type="text" :placeholder="lang.ssEnterKeyword" v-model="sCourse" @keyup.enter="search"/>
           </div>
         </div>
         <div class="pType_box all_choose"  v-if="oid == '69893dca-1d47-11ed-8c78-005056b86db5'">
-          <span>类型</span>
+          <span>{{ lang.ssType }}</span>
           <el-radio-group v-model="pTypeCheckName" style="display: flex; align-items: center">
             <div class="all_choose" style="width: 100px" v-for="(item, index) in CourseType3" :key="index">
               <el-radio :label="item.name" @click.native.prevent="CourseType2Click(item.name)">{{
@@ -49,7 +45,7 @@
                                   : true)">
               <div class="cName" @click="getCourse(item.name, '', item.id, 1)"
                 :class="typeE.indexOf(item.id) != -1 ? 'isCType' : ''">
-                全部
+                {{ lang.ssAll }}
               </div>
               <div v-for="(item1, index1) in CourseTypeJson[item.id]" :key="index + '-' + index1" :label="item1.id"
                 @click="getCourse(item.name, item.id, item1.id, 2)">
@@ -67,9 +63,9 @@
       </div>
       <div class="body_student" v-loading="loading">
         <div class="typeCheck">
-          <div><el-switch v-model="orderBy"></el-switch><span>按名字排序</span></div>
-          <div><el-switch v-model="typeCheck"></el-switch><span>分类显示</span></div>
-          <div v-if="oidArray.indexOf(oid) !== -1"><el-switch v-model="typeCheck2"></el-switch><span>按年级显示</span></div>
+          <div><el-switch v-model="orderBy"></el-switch><span>{{ lang.ssSortByName }}</span></div>
+          <div><el-switch v-model="typeCheck"></el-switch><span>{{ lang.ssCategoryDisplay }}</span></div>
+          <div v-if="oidArray.indexOf(oid) !== -1"><el-switch v-model="typeCheck2"></el-switch><span>{{ lang.ssDisplayByGrade }}</span></div>
         </div>
         <div>
            <div class="main_box">
@@ -110,8 +106,9 @@
                     <el-tooltip class="typeN" effect="light" :content="item.typename" placement="top">
                       <div>{{ item.typename }}</div>
                     </el-tooltip>
-
-                    <div>{{ JSON.parse(item.chapters).length }}阶段</div>
+                    <template v-if="item.state != 7">
+                      <div>{{ lang.ssStage.replace(/\*/g, JSON.parse(item.chapters).length) }}</div>
+                    </template>
                   </div>
                   <div class="school_box">
                     <el-tooltip effect="light" :content="item.school" placement="top">
@@ -140,7 +137,7 @@
                     screenType,item.courseId
                   )
                 ">
-                  立即学习
+                  {{ lang.ssStartLearning }}
                 </div>
               </div>
             </div>
@@ -184,8 +181,9 @@
                         <el-tooltip class="typeN" effect="light" :content="item.typename" placement="top">
                           <div>{{ item.typename }}</div>
                         </el-tooltip>
-
-                        <div>{{ JSON.parse(item.chapters).length }}阶段</div>
+                        <template v-if="item.state != 7">
+                          <div>{{ lang.ssStage.replace(/\*/g, JSON.parse(item.chapters).length) }}</div>
+                        </template>
                       </div>
                       <div class="school_box">
                         <el-tooltip effect="light" :content="item.school" placement="top">
@@ -214,14 +212,14 @@
                         screenType,item.courseId
                       )
                     ">
-                      立即学习
+                      {{ lang.ssStartLearning }}
                     </div>
                   </div>
                 </div>
               </div>
             </div>
             <div class="course_empty" v-if="zoneClass.length == 0">
-              暂无课程
+              {{ lang.ssNoCourse }}
             </div>
           </div>
         </div>
@@ -411,7 +409,7 @@ export default {
             }
           }
         }
-      } else if (typeName == "专栏") {
+      } else if (typeName == this.lang.ssColumn) {
         if (type == 1) {
           if (this.typeE.indexOf(typeid) != -1) {
              if(this.oid == '69893dca-1d47-11ed-8c78-005056b86db5'){
@@ -438,7 +436,7 @@ export default {
             }
           }
         }
-      } else if (typeName == "栏目") {
+      } else if (typeName == this.lang.ssCategory) {
         if (type == 1) {
           if (this.typeE.indexOf(typeid) != -1) {
              if(this.oid == '69893dca-1d47-11ed-8c78-005056b86db5'){
@@ -465,7 +463,7 @@ export default {
             }
           }
         }
-      } else if (typeName == "主题") {
+      } else if (typeName == this.lang.ssTopic) {
         if (type == 1) {
           if (this.typeE.indexOf(typeid) != -1) {
              if(this.oid == '69893dca-1d47-11ed-8c78-005056b86db5'){
@@ -492,7 +490,7 @@ export default {
             }
           }
         }
-      } else if (typeName == "学院") {
+      } else if (typeName == this.lang.ssCollege) {
         if (type == 1) {
           if (this.typeE.indexOf(typeid) != -1) {
              if(this.oid == '69893dca-1d47-11ed-8c78-005056b86db5'){
@@ -669,7 +667,7 @@ export default {
           if (noTypeCourse.length > 0 && !this.pTypeCheckName.length) {
             CourseType2.push({
               course: noTypeCourse,
-              name: '其他'
+              name: this.lang.ssOther
             })
           }
           CourseType2 = CourseType2.filter(item => {
@@ -809,9 +807,9 @@ export default {
           this.CourseTypeJson = {};
           this.CourseType = res.data;
           this.CourseType3 = [
-            { name: "智见课程", id: [] },
-            { name: "智行课程", id: [] },
-            { name: "智创课程", id: [] },
+            { name: this.lang.ssWisdomSeeCourse, id: [] },
+            { name: this.lang.ssWisdomDoCourse, id: [] },
+            { name: this.lang.ssWisdomCreateCourse, id: [] },
           ];
 
           for (var cti = 0; cti < res.data[0].length; cti++) {
@@ -827,11 +825,11 @@ export default {
               this.CourseType3[2].id.push(res.data[0][cti].id);
             }
             if(res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86db5" || res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86ac5"){
-              res.data[0][cti].name = "年级";
+              res.data[0][cti].name = this.lang.ssGrade;
             }else if(res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86db5" || res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86ac5"){
-              res.data[0][cti].name = "学科";
+              res.data[0][cti].name = this.lang.ssSubjectName;
             }else if(res.data[0][cti].id == "34629bcc-d02f-11ec-8c78-005056b86db5"){
-              res.data[0][cti].name = "主题";
+              res.data[0][cti].name = this.lang.ssTopic;
             }
           }
           for (var i = 0; i < res.data[0].length; i++) {
@@ -842,8 +840,8 @@ export default {
               this.CourseTypeJson[res.data[0][i].id] = [];
             }
             if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
-              if (res.data[0][i].name == "栏目") {
-                this.CourseType[0][i].name = "主题";
+              if (res.data[0][i].name == this.lang.ssCategory) {
+                this.CourseType[0][i].name = this.lang.ssTopic;
               }
             }
 
@@ -873,6 +871,10 @@ export default {
               }
             }
           }
+
+          if (this.CourseType[0] && this.CourseType[0].length && this.lang.lang == 'com') {
+            this.CourseType[0] = this.CourseType[0].filter(item => item.id != '34629bcc-d02f-11ec-8c78-005056b86db5');
+          }
           if (this.typeCheck || this.typeCheck2) {
             this.selectAll();
           } else {
@@ -895,8 +897,8 @@ export default {
           this.courseTypeId[res.data[0][i].id] = "";
         }
         if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
-          if (res.data[0][i].name == "栏目") {
-            this.CourseType[0][i].name = "主题";
+          if (res.data[0][i].name == this.lang.ssCategory) {
+            this.CourseType[0][i].name = this.lang.ssTopic;
           }
         }
         for (var j = 0; j < res.data[1].length; j++) {
@@ -1186,6 +1188,7 @@ export default {
   justify-content: space-evenly;
   align-items: flex-start;
   padding: 10px 0;
+  gap: 10px;
 }
 
 .all_choose {
@@ -1196,10 +1199,10 @@ export default {
   width: 100%;
 }
 
-.all_choose>span {
+.all_choose > span {
   min-width: 85px;
   display: block;
-  letter-spacing: 14px;
+  /* letter-spacing: 14px; */
 }
 
 .all_choose>span:nth-child(1) {
@@ -1238,13 +1241,17 @@ export default {
 
 .cName {
   cursor: pointer;
-  margin: 0 10px 10px 0;
+  /* margin: 0 10px 10px 0; */
   color: #b9b6b9;
-  min-width: 80px;
-  width: 80px;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
+  /* min-width: 80px; */
+  /* width: 80px; */
+  flex-shrink: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  /* white-space: nowrap; */
+  /* overflow: hidden;
+  text-overflow: ellipsis; */
 }
 
 .reBox {
@@ -1333,9 +1340,12 @@ export default {
 
 .typeCss {
   display: flex;
-  flex-direction: row;
+  /* flex-direction: row; */
   flex-wrap: wrap;
-  justify-content: flex-start;
+  /* align-items: center; */
+  /* justify-content: center; */
+  gap: 15px;
+  /* justify-content: flex-start; */
   align-items: center;
 }
 

+ 232 - 0
src/lang/cn.json

@@ -0,0 +1,232 @@
+{
+  "lang": "cn",
+  "ssExpand": "展开",
+  "ssReset": "一键重置",
+  "ssAiScore": "AI评分",
+  "ssCollapse": "收缩",
+  "ssInviteCode": "识别码",
+  "ssTask": "任务",
+  "ssTool": "工具",
+  "ssSimulateDrive": "模拟驾驶",
+  "ssPathSearch": "路径搜索",
+  "ssDeepLearning": "深度学习",
+  "ssCountdown": "倒计时",
+  "ssPickPerson": "挑人",
+  "ssMindGrid": "思维网格",
+  "ssWhiteboard": "电子白板",
+  "ssDocument": "文档",
+  "ssMindMap": "思维导图",
+  "ssTable": "表格",
+  "ssStudentGroup": "学生分组",
+  "ssSurvey": "问卷调查",
+  "ssChoice": "选择题",
+  "ssQa": "问答",
+  "ssHomework": "作业提交",
+  "ssBatchUpload": "批量上传",
+  "ssMatch": "选择匹配",
+  "ssSort": "排序",
+  "ssPersonalEval": "个人评价",
+  "ssTraining": "训练平台",
+  "ssCodeEdit": "源码编辑",
+  "ssTurtle": "海龟编程",
+  "ssTranslate": "翻译",
+  "ssDigitalBoard": "数字画板",
+  "ssFormula": "公式编辑",
+  "ssMolecule": "分子结构",
+  "ssTimeline": "时间轴",
+  "ssEnglishWrite": "英语写作",
+  "ssEnglishSpeak": "英语口语",
+  "ssGoalManage": "目标管理",
+  "ssCourseDesign": "课程设计",
+  "ssInteractiveVideo": "交互视频",
+  "ssAiAgent": "AI智能体",
+  "ssAiExperience": "AI体验",
+  "ssAppCenter": "应用中心",
+  "ssRefresh": "刷新",
+  "ssComment": "评论",
+  "ssRecord": "录制",
+  "ssDownload": "下载",
+  "ssPrevious": "上一步",
+  "ssNext": "下一步",
+  "ssPermission": "权限",
+  "ssReturn": "返回",
+  "ssNoDesc": "暂无描述",
+  "ssViewDoc": "查看文档",
+  "ssContentList": "内容列表",
+  "ssNoPreview": "以下文件不支持预览",
+  "ssOpenLink": "打开链接",
+  "ssTime": "时间",
+  "ssWorkArea": "工作区",
+  "ssAnalyze": "分析",
+  "ssCoDoc": "协同文档",
+  "ssMaterialLib": "素材库",
+  "ssLearningMaterial": "学习资料",
+  "ssNote": "便签",
+  "ssStatisticalAnalysis": "统计分析",
+  "ssTrainingServer": "训练服务器",
+  "ssMathBoard": "数学画板",
+  "ssMohe": "魔盒识字",
+  "ss24Game": "24点",
+  "ssHanziPalace": "汉字宫",
+  "ssAllHistory": "全历史",
+  "ssToolDesc": "工具描述",
+  "ssEnterTaskDesc": "请输入任务描述",
+  "ssUploadHomework": "上传作业",
+  "ssGenerateWordCloud": "生成词云",
+  "ssExportHomework": "导出作业",
+  "ssHomeworkPreview": "作业预览",
+  "ssScore": "分",
+  "ssMarkScore": "评分",
+  "ssFold": "折叠",
+  "ssNotSubmitted": "未提交",
+  "ssScoring": "正在评分",
+  "ssNoHomework": "暂无提交作业",
+  "ssScoringIn": "评分中",
+  "ssCorrectRate": "正确率",
+  "ssQuestionNum": "第*题",
+  "ssRightPerson": "答对人数",
+  "ssGroupSetting": "分组设置",
+  "ssCurrentCount": "目前人数",
+  "ssPerson": "人",
+  "ssEvaluate": "评一评",
+  "ssTarget": "目标",
+  "ssEvalDimension": "评价维度",
+  "ssEvalStandard": "评价标准",
+  "ssDimensionDesc": "维度描述",
+  "ssDetail": "细则",
+  "ssView": "查看",
+  "ssCollapseTarget": "收起目标",
+  "ssExpandTarget": "展开目标",
+  "ssTargetTree": "目标树",
+  "ssTargetCompass": "目标罗盘",
+  "ssUpFile": "上传文件",
+  "ssSubmit": "提交",
+  "ssTotalEval": "总评",
+  "ssTimeDesc": "时间降序",
+  "ssTimeAsc": "时间升序",
+  "ssMyComment": "我的评课",
+  "ssEval": "评",
+  "ssCommentOf": "的评论",
+  "ssDelete": "删除",
+  "ssReply": "回复",
+  "ssAddComment": "添加评论",
+  "ssNewTool": "新增工具",
+  "ssInteract": "互动类",
+  "ssThinking": "思维类",
+  "ssEvalType": "测评类",
+  "ssProgram": "编程类",
+  "ssSubject": "学科类",
+  "ssCancel": "取消",
+  "ssConfirm": "确定",
+  "ssAddReply": "添加回复",
+  "ssEnterReply": "请输入回复描述",
+  "ssTeacherComment": "教师评论",
+  "ssText": "文本",
+  "ssAudio": "音频",
+  "ssUploading": "上传中请稍后",
+  "ssViewSurvey": "查看问卷",
+  "ssTitle": "标题",
+  "ssQuestionContent": "题目内容",
+  "ssQuestion": "题目",
+  "ssStudentName": "学生姓名",
+  "ssViewChoice": "查看选择题",
+  "ssSingleChoice": "单选题",
+  "ssMultiChoice": "多选题",
+  "ssAiGeneralCourse": "AI通识课",
+  "ssCourse": "课程",
+  "ssEnterKeyword": "请输入关键字",
+  "ssType": "类型",
+  "ssAll": "全部",
+  "ssSortByName": "按名字排序",
+  "ssCategoryDisplay": "分类显示",
+  "ssDisplayByGrade": "按年级显示",
+  "ssStage": "* 阶段",
+  "ssStartLearning": "立即学习",
+  "ssNoCourse": "暂无课程",
+  "ssColumn": "专栏",
+  "ssCategory": "栏目",
+  "ssTopic": "主题",
+  "ssCollege": "学院",
+  "ssOther": "其他",
+  "ssWisdomSeeCourse": "智见课程",
+  "ssWisdomDoCourse": "智行课程",
+  "ssWisdomCreateCourse": "智创课程",
+  "ssGrade": "年级",
+  "ssSubjectName": "学科",
+  "ssCreator": "创建者:",
+  "ssParticipants": "参与人数:",
+  "ssCollaborativeMembers": "协同成员:",
+  "ssExpandText": "展开",
+  "ssCollapseText": "收起",
+  "ssGenerateQRCode": "生成二维码",
+  "ssJoinGroup": "加入分组",
+  "ssSetGroup": "设置分组",
+  "ssTeachByClass": "以班级授课",
+  "ssCourseDetail": "课程详情",
+  "ssOptimize": "优化",
+  "ssGenerating": "小可正在努力生成中,请稍等...",
+  "ssStageSelect": "阶段选择",
+  "ssStageMode": "阶段模式",
+  "ssTaskMode": "任务模式",
+  "ssSimpleMode": "极简模式",
+  "ssAiMode": "AI模式",
+  "ssClassMode": "上课模式",
+  "ssCourseAnalysis": "课程分析",
+  "ssCourseEvaluation": "课程评价",
+  "ssStageNum": "第*阶段",
+  "ssTaskView": "任务查看",
+  "ssTasks": "个任务",
+  "ssEnterCourse": "进入课程",
+  "ssClickEnterCourse": "点击进入课程",
+  "ssZeroTasks": "0个任务",
+  "ssToolAnalysis": "工具分析",
+  "ssAllStages": "全部阶段:",
+  "ssInProgress": "已进行:",
+  "ssNotStarted": "未进行:",
+  "ssTaskNum": "任务*:",
+  "ssActiveFrequency": "活跃频率",
+  "ssImplementationTime": "实施时间",
+  "ssStepNum": "步骤*:",
+  "ssHomeworkCount": "作业数量:",
+  "ssTaskCompletionRate": "任务完成率:",
+  "ssLike": "点赞:",
+  "ssCommentColon": "评论:",
+  "ssHomeworkEvaluationCount": "作业评价量:",
+  "ssAverageScore": "评价平均分:",
+  "ssScoreUnit": "分",
+  "ssSelectStage": "请选择阶段",
+  "ssCourseQRCode": "课程二维码",
+  "ssSelectTeachingClass": "选择授课班级",
+  "ssTeachingClass": "授课班级:",
+  "ssInGroup": "所在分组:",
+  "ssCategoryColon": "分类:",
+  "ssStageText": "阶段",
+  "ssTaskText": "任务",
+  "ssStageNumFormat": "第*阶段",
+  "ssTaskNumFormat": "任务*:",
+  "ssStepNumFormat": "步骤*:",
+  "ssTasksFormat": "*个任务",
+  "ssStartTeachingFor": "开始为",
+  "ssTeaching": "授课",
+  "ssClickToTeachByClass": "点击",
+  "ssAllClassesText": "全部班级",
+  "ssTaskDescription": "任务描述",
+  "ssFileLoading": "文件加载中...",
+  "ssOptimizing": "正在优化中,请稍后",
+  "ssSendSuccess": "发送成功",
+  "ssModifySuccess": "修改成功",
+  "ssSaveOperationSuccess": "保存操作成功",
+  "ssSaveOperationFailed": "保存操作失败",
+  "ssSummarizeCourseBrief": "总结以下内容为150字左右的课程简介:",
+  "ssBack": "返回",
+  "ssOwner": "创建者:",
+  "ssStage2": "阶段*",
+  "ssStudentNum": "*名学生",
+  "ssAddOrModifyClass": "添加/修改班级",
+  "ssCreatorNotAddedClass": "创建人暂未添加班级",
+  "ssEnterDirectly": "直接进入",
+  "ssSelectClass": "选择班级",
+  "ssAllGrades": "全部年级",
+  "ssClass": "班级",
+  "ssNoData": "暂无数据"
+}

+ 232 - 0
src/lang/en.json

@@ -0,0 +1,232 @@
+{
+  "lang": "com",
+  "ssExpand": "Expand",
+  "ssReset": "Reset",
+  "ssAiScore": "AI Score",
+  "ssCollapse": "Collapse",
+  "ssInviteCode": "Invite Code",
+  "ssTask": "Task",
+  "ssTool": "Tool",
+  "ssSimulateDrive": "Simulate Drive",
+  "ssPathSearch": "Path Search",
+  "ssDeepLearning": "Deep Learning",
+  "ssCountdown": "Countdown",
+  "ssPickPerson": "Pick Person",
+  "ssMindGrid": "Mind Grid",
+  "ssWhiteboard": "Whiteboard",
+  "ssDocument": "Document",
+  "ssMindMap": "Mind Map",
+  "ssTable": "Table",
+  "ssStudentGroup": "Student Group",
+  "ssSurvey": "Survey",
+  "ssChoice": "Choice",
+  "ssQa": "Q&A",
+  "ssHomework": "Homework",
+  "ssBatchUpload": "Batch Upload",
+  "ssMatch": "Match",
+  "ssSort": "Sort",
+  "ssPersonalEval": "Personal Evaluation",
+  "ssTraining": "Training Platform",
+  "ssCodeEdit": "Code Editor",
+  "ssTurtle": "Turtle Programming",
+  "ssTranslate": "Translate",
+  "ssDigitalBoard": "Digital Board",
+  "ssFormula": "Formula Editor",
+  "ssMolecule": "Molecule Structure",
+  "ssTimeline": "Timeline",
+  "ssEnglishWrite": "English Writing",
+  "ssEnglishSpeak": "English Speaking",
+  "ssGoalManage": "Goal Management",
+  "ssCourseDesign": "Course Design",
+  "ssInteractiveVideo": "Interactive Video",
+  "ssAiAgent": "AI Agent",
+  "ssAiExperience": "AI Experience",
+  "ssAppCenter": "App Center",
+  "ssRefresh": "Refresh",
+  "ssComment": "Comment",
+  "ssRecord": "Record",
+  "ssDownload": "Download",
+  "ssPrevious": "Previous",
+  "ssNext": "Next",
+  "ssPermission": "Permission",
+  "ssReturn": "Return",
+  "ssNoDesc": "No description",
+  "ssViewDoc": "View Document",
+  "ssContentList": "Content List",
+  "ssNoPreview": "The following files do not support preview",
+  "ssOpenLink": "Open Link",
+  "ssTime": "Time",
+  "ssWorkArea": "Work Area",
+  "ssAnalyze": "Analyze",
+  "ssCoDoc": "Collaborative Document",
+  "ssMaterialLib": "Material Library",
+  "ssLearningMaterial": "Learning Material",
+  "ssNote": "Note",
+  "ssStatisticalAnalysis": "Statistical Analysis",
+  "ssTrainingServer": "Training Server",
+  "ssMathBoard": "Math Board",
+  "ssMohe": "Mohe Literacy",
+  "ss24Game": "24 Game",
+  "ssHanziPalace": "Hanzi Palace",
+  "ssAllHistory": "All History",
+  "ssToolDesc": "Tool Description",
+  "ssEnterTaskDesc": "Please enter task description",
+  "ssUploadHomework": "Upload Homework",
+  "ssGenerateWordCloud": "Generate Word Cloud",
+  "ssExportHomework": "Export Homework",
+  "ssHomeworkPreview": "Homework Preview",
+  "ssScore": "Score",
+  "ssMarkScore": "Mark Score",
+  "ssFold": "Fold",
+  "ssNotSubmitted": "Not Submitted",
+  "ssScoring": "Scoring",
+  "ssNoHomework": "No homework submitted",
+  "ssScoringIn": "Scoring",
+  "ssCorrectRate": "Correct Rate",
+  "ssQuestionNum": "Question *",
+  "ssRightPerson": "Correct Answers",
+  "ssGroupSetting": "Group Setting",
+  "ssCurrentCount": "Current Count",
+  "ssPerson": "Person",
+  "ssEvaluate": "Evaluate",
+  "ssTarget": "Target",
+  "ssEvalDimension": "Evaluation Dimension",
+  "ssEvalStandard": "Evaluation Standard",
+  "ssDimensionDesc": "Dimension Description",
+  "ssDetail": "Detail",
+  "ssView": "View",
+  "ssCollapseTarget": "Collapse Target",
+  "ssExpandTarget": "Expand Target",
+  "ssTargetTree": "Target Tree",
+  "ssTargetCompass": "Target Compass",
+  "ssUpFile": "Upload File",
+  "ssSubmit": "Submit",
+  "ssTotalEval": "Total Evaluation",
+  "ssTimeDesc": "Time Descending",
+  "ssTimeAsc": "Time Ascending",
+  "ssMyComment": "My Comment",
+  "ssEval": "Eval",
+  "ssCommentOf": "'s Comment",
+  "ssDelete": "Delete",
+  "ssReply": "Reply",
+  "ssAddComment": "Add Comment",
+  "ssNewTool": "New Tool",
+  "ssInteract": "Interactive",
+  "ssThinking": "Thinking",
+  "ssEvalType": "Evaluation",
+  "ssProgram": "Programming",
+  "ssSubject": "Subject",
+  "ssCancel": "Cancel",
+  "ssConfirm": "Confirm",
+  "ssAddReply": "Add Reply",
+  "ssEnterReply": "Please enter reply description",
+  "ssTeacherComment": "Teacher Comment",
+  "ssText": "Text",
+  "ssAudio": "Audio",
+  "ssUploading": "Uploading, please wait",
+  "ssViewSurvey": "View Survey",
+  "ssTitle": "Title",
+  "ssQuestionContent": "Question Content",
+  "ssQuestion": "Question",
+  "ssStudentName": "Student Name",
+  "ssViewChoice": "View Choice",
+  "ssSingleChoice": "Single Choice",
+  "ssMultiChoice": "Multiple Choice",
+  "ssAiGeneralCourse": "AI General Course",
+  "ssCourse": "Course",
+  "ssEnterKeyword": "Enter Keywords",
+  "ssType": "Type",
+  "ssAll": "All",
+  "ssSortByName": "Sort by Name",
+  "ssCategoryDisplay": "Group by Category",
+  "ssDisplayByGrade": "Display by Grade",
+  "ssStage": "phase(s) *",
+  "ssStartLearning": "Start Learning",
+  "ssNoCourse": "No Course",
+  "ssColumn": "Column",
+  "ssCategory": "Category",
+  "ssTopic": "Topic",
+  "ssCollege": "College",
+  "ssOther": "Other",
+  "ssWisdomSeeCourse": "Wisdom See Course",
+  "ssWisdomDoCourse": "Wisdom Do Course",
+  "ssWisdomCreateCourse": "Wisdom Create Course",
+  "ssGrade": "Grade",
+  "ssSubjectName": "Subject",
+  "ssCreator": "Creator:",
+  "ssParticipants": "Participants:",
+  "ssCollaborativeMembers": "Collabotators:",
+  "ssExpandText": "More",
+  "ssCollapseText": "Collapse",
+  "ssGenerateQRCode": "QR Code",
+  "ssJoinGroup": "Join Group",
+  "ssSetGroup": "Set Group",
+  "ssTeachByClass": "Start Class",
+  "ssCourseDetail": "Course Information",
+  "ssOptimize": "Optimize",
+  "ssGenerating": "Generating, please wait...",
+  "ssStageSelect": "Phase",
+  "ssStageMode": "Stage Mode",
+  "ssTaskMode": "Task Mode",
+  "ssSimpleMode": "Simple Mode",
+  "ssAiMode": "AI Mode",
+  "ssClassMode": "Class Mode",
+  "ssCourseAnalysis": "Analysis",
+  "ssCourseEvaluation": "Evaluation",
+  "ssStageNum": "Phase *",
+  "ssTaskView": "Task View",
+  "ssTasks": " task(s)",
+  "ssEnterCourse": "Enter Course",
+  "ssClickEnterCourse": "Click to enter course",
+  "ssZeroTasks": "0 task(s)",
+  "ssToolAnalysis": "Analysis Tools",
+  "ssAllStages": "All Stages:",
+  "ssInProgress": "Completed:",
+  "ssNotStarted": "Not Yet Started:",
+  "ssTaskNum": "Task *:",
+  "ssActiveFrequency": "Active Frequency",
+  "ssImplementationTime": "Implementation Time",
+  "ssStepNum": "Step *:",
+  "ssHomeworkCount": "Homework Count:",
+  "ssTaskCompletionRate": "Task Completion Rate:",
+  "ssLike": "Like:",
+  "ssCommentColon": "Comment:",
+  "ssHomeworkEvaluationCount": "Homework Evaluation Count:",
+  "ssAverageScore": "Average Score:",
+  "ssScoreUnit": " points",
+  "ssSelectStage": "Please select stage",
+  "ssCourseQRCode": "Course QR Code",
+  "ssSelectTeachingClass": "Select Teaching Class",
+  "ssTeachingClass": "Teaching Class:",
+  "ssInGroup": "In Group:",
+  "ssCategoryColon": "Category:",
+  "ssStageText": "Stage",
+  "ssTaskText": "Task",
+  "ssStageNumFormat": "stage(s) *",
+  "ssTaskNumFormat": "task(s) *:",
+  "ssStepNumFormat": "Step *:",
+  "ssTasksFormat": "task(s) *",
+  "ssStartTeachingFor": "Start teaching for",
+  "ssTeaching": "teaching",
+  "ssClickToTeachByClass": "Click",
+  "ssAllClassesText": "All Classes",
+  "ssTaskDescription": "Task Description",
+  "ssFileLoading": "Loading File...",
+  "ssOptimizing": "Optimizing, please wait",
+  "ssSendSuccess": "Send Success",
+  "ssModifySuccess": "Modify Success",
+  "ssSaveOperationSuccess": "Save operation successful",
+  "ssSaveOperationFailed": "Save operation failed",
+  "ssSummarizeCourseBrief": "Summarize the following content as a course introduction of about 150 words:",
+  "ssBack": "Back",
+  "ssOwner": "Owner:",
+  "ssStage2": "Stage *",
+  "ssStudentNum": "* students",
+  "ssAddOrModifyClass": "Add/Modify Class",
+  "ssCreatorNotAddedClass": "Creator has not added class yet",
+  "ssEnterDirectly": "Enter Directly",
+  "ssSelectClass": "Select Class",
+  "ssAllGrades": "All Grades",
+  "ssClass": "Class",
+  "ssNoData": "No Data"
+}

+ 232 - 0
src/lang/hk.json

@@ -0,0 +1,232 @@
+{
+  "lang": "hk",
+  "ssExpand": "展開",
+  "ssReset": "一鍵重置",
+  "ssAiScore": "AI評分",
+  "ssCollapse": "收縮",
+  "ssInviteCode": "識別碼",
+  "ssTask": "任務",
+  "ssTool": "工具",
+  "ssSimulateDrive": "模擬駕駛",
+  "ssPathSearch": "路徑搜索",
+  "ssDeepLearning": "深度學習",
+  "ssCountdown": "倒計時",
+  "ssPickPerson": "挑人",
+  "ssMindGrid": "思維網格",
+  "ssWhiteboard": "電子白板",
+  "ssDocument": "文檔",
+  "ssMindMap": "思維導圖",
+  "ssTable": "表格",
+  "ssStudentGroup": "學生分組",
+  "ssSurvey": "問卷調查",
+  "ssChoice": "選擇題",
+  "ssQa": "問答",
+  "ssHomework": "作業提交",
+  "ssBatchUpload": "批量上傳",
+  "ssMatch": "選擇匹配",
+  "ssSort": "排序",
+  "ssPersonalEval": "個人評價",
+  "ssTraining": "訓練平台",
+  "ssCodeEdit": "源碼編輯",
+  "ssTurtle": "海龜編程",
+  "ssTranslate": "翻譯",
+  "ssDigitalBoard": "數字畫板",
+  "ssFormula": "公式編輯",
+  "ssMolecule": "分子結構",
+  "ssTimeline": "時間軸",
+  "ssEnglishWrite": "英語寫作",
+  "ssEnglishSpeak": "英語口語",
+  "ssGoalManage": "目標管理",
+  "ssCourseDesign": "課程設計",
+  "ssInteractiveVideo": "交互視頻",
+  "ssAiAgent": "AI智能體",
+  "ssAiExperience": "AI體驗",
+  "ssAppCenter": "應用中心",
+  "ssRefresh": "刷新",
+  "ssComment": "評論",
+  "ssRecord": "錄製",
+  "ssDownload": "下載",
+  "ssPrevious": "上一步",
+  "ssNext": "下一步",
+  "ssPermission": "權限",
+  "ssReturn": "返回",
+  "ssNoDesc": "暫無描述",
+  "ssViewDoc": "查看文檔",
+  "ssContentList": "內容列表",
+  "ssNoPreview": "以下文件不支持預覽",
+  "ssOpenLink": "打開鏈接",
+  "ssTime": "時間",
+  "ssWorkArea": "工作區",
+  "ssAnalyze": "分析",
+  "ssCoDoc": "協同文檔",
+  "ssMaterialLib": "素材庫",
+  "ssLearningMaterial": "學習資料",
+  "ssNote": "便簽",
+  "ssStatisticalAnalysis": "統計分析",
+  "ssTrainingServer": "訓練服務器",
+  "ssMathBoard": "數學畫板",
+  "ssMohe": "魔盒識字",
+  "ss24Game": "24點",
+  "ssHanziPalace": "漢字宮",
+  "ssAllHistory": "全歷史",
+  "ssToolDesc": "工具描述",
+  "ssEnterTaskDesc": "請輸入任務描述",
+  "ssUploadHomework": "上傳作業",
+  "ssGenerateWordCloud": "生成詞雲",
+  "ssExportHomework": "導出作業",
+  "ssHomeworkPreview": "作業預覽",
+  "ssScore": "分",
+  "ssMarkScore": "評分",
+  "ssFold": "折疊",
+  "ssNotSubmitted": "未提交",
+  "ssScoring": "正在評分",
+  "ssNoHomework": "暫無提交作業",
+  "ssScoringIn": "評分中",
+  "ssCorrectRate": "正確率",
+  "ssQuestionNum": "第*題",
+  "ssRightPerson": "答對人數",
+  "ssGroupSetting": "分組設置",
+  "ssCurrentCount": "目前人數",
+  "ssPerson": "人",
+  "ssEvaluate": "評一評",
+  "ssTarget": "目標",
+  "ssEvalDimension": "評價維度",
+  "ssEvalStandard": "評價標準",
+  "ssDimensionDesc": "維度描述",
+  "ssDetail": "細則",
+  "ssView": "查看",
+  "ssCollapseTarget": "收起目標",
+  "ssExpandTarget": "展開目標",
+  "ssTargetTree": "目標樹",
+  "ssTargetCompass": "目標羅盤",
+  "ssUpFile": "上傳文件",
+  "ssSubmit": "提交",
+  "ssTotalEval": "總評",
+  "ssTimeDesc": "時間降序",
+  "ssTimeAsc": "時間升序",
+  "ssMyComment": "我的評課",
+  "ssEval": "評",
+  "ssCommentOf": "的評論",
+  "ssDelete": "刪除",
+  "ssReply": "回復",
+  "ssAddComment": "添加評論",
+  "ssNewTool": "新增工具",
+  "ssInteract": "互動類",
+  "ssThinking": "思維類",
+  "ssEvalType": "測評類",
+  "ssProgram": "編程類",
+  "ssSubject": "學科類",
+  "ssCancel": "取消",
+  "ssConfirm": "確定",
+  "ssAddReply": "添加回復",
+  "ssEnterReply": "請輸入回復描述",
+  "ssTeacherComment": "教師評論",
+  "ssText": "文本",
+  "ssAudio": "音頻",
+  "ssUploading": "上傳中請稍後",
+  "ssViewSurvey": "查看問卷",
+  "ssTitle": "標題",
+  "ssQuestionContent": "題目內容",
+  "ssQuestion": "題目",
+  "ssStudentName": "學生姓名",
+  "ssViewChoice": "查看選擇題",
+  "ssSingleChoice": "單選題",
+  "ssMultiChoice": "多選題",
+  "ssAiGeneralCourse": "AI通識課",
+  "ssCourse": "課程",
+  "ssEnterKeyword": "請輸入關鍵字",
+  "ssType": "類型",
+  "ssAll": "全部",
+  "ssSortByName": "按名字排序",
+  "ssCategoryDisplay": "分類顯示",
+  "ssDisplayByGrade": "按年級顯示",
+  "ssStage": "* 階段",
+  "ssStartLearning": "立即學習",
+  "ssNoCourse": "暫無課程",
+  "ssColumn": "專欄",
+  "ssCategory": "欄目",
+  "ssTopic": "主題",
+  "ssCollege": "學院",
+  "ssOther": "其他",
+  "ssWisdomSeeCourse": "智見課程",
+  "ssWisdomDoCourse": "智行課程",
+  "ssWisdomCreateCourse": "智創課程",
+  "ssGrade": "年級",
+  "ssSubjectName": "學科",
+  "ssCreator": "創建者:",
+  "ssParticipants": "參與人數:",
+  "ssCollaborativeMembers": "協同成員:",
+  "ssExpandText": "展開",
+  "ssCollapseText": "收起",
+  "ssGenerateQRCode": "生成二維碼",
+  "ssJoinGroup": "加入分組",
+  "ssSetGroup": "設置分組",
+  "ssTeachByClass": "以班級授課",
+  "ssCourseDetail": "課程詳情",
+  "ssOptimize": "優化",
+  "ssGenerating": "小可正在努力生成中,請稍等...",
+  "ssStageSelect": "階段選擇",
+  "ssStageMode": "階段模式",
+  "ssTaskMode": "任務模式",
+  "ssSimpleMode": "極簡模式",
+  "ssAiMode": "AI模式",
+  "ssClassMode": "上課模式",
+  "ssCourseAnalysis": "課程分析",
+  "ssCourseEvaluation": "課程評價",
+  "ssStageNum": "第*階段",
+  "ssTaskView": "任務查看",
+  "ssTasks": "個任務",
+  "ssEnterCourse": "進入課程",
+  "ssClickEnterCourse": "點擊進入課程",
+  "ssZeroTasks": "0個任務",
+  "ssToolAnalysis": "工具分析",
+  "ssAllStages": "全部階段:",
+  "ssInProgress": "已進行:",
+  "ssNotStarted": "未進行:",
+  "ssTaskNum": "任務*:",
+  "ssActiveFrequency": "活躍頻率",
+  "ssImplementationTime": "實施時間",
+  "ssStepNum": "步驟*:",
+  "ssHomeworkCount": "作業數量:",
+  "ssTaskCompletionRate": "任務完成率:",
+  "ssLike": "點讚:",
+  "ssCommentColon": "評論:",
+  "ssHomeworkEvaluationCount": "作業評價量:",
+  "ssAverageScore": "評價平均分:",
+  "ssScoreUnit": "分",
+  "ssSelectStage": "請選擇階段",
+  "ssCourseQRCode": "課程二維碼",
+  "ssSelectTeachingClass": "選擇授課班級",
+  "ssTeachingClass": "授課班級:",
+  "ssInGroup": "所在分組:",
+  "ssCategoryColon": "分類:",
+  "ssStageText": "階段",
+  "ssTaskText": "任務",
+  "ssStageNumFormat": "第*階段",
+  "ssTaskNumFormat": "任務*:",
+  "ssStepNumFormat": "步驟*:",
+  "ssTasksFormat": "*個任務",
+  "ssStartTeachingFor": "開始為",
+  "ssTeaching": "授課",
+  "ssClickToTeachByClass": "點擊",
+  "ssAllClassesText": "全部班級",
+  "ssTaskDescription": "任務描述",
+  "ssFileLoading": "文件加載中...",
+  "ssOptimizing": "正在優化中,請稍等",
+  "ssSendSuccess": "發送成功",
+  "ssModifySuccess": "修改成功",
+  "ssSaveOperationSuccess": "保存操作成功",
+  "ssSaveOperationFailed": "保存操作失敗",
+  "ssSummarizeCourseBrief": "總結以下內容為150字左右的課程簡介:",
+  "ssBack": "返回",
+  "ssOwner": "創建者:",
+  "ssStage2": "階段*",
+  "ssStudentNum": "*名學生",
+  "ssAddOrModifyClass": "添加/修改班級",
+  "ssCreatorNotAddedClass": "創建人暫未添加班級",
+  "ssEnterDirectly": "直接進入",
+  "ssSelectClass": "選擇班級",
+  "ssAllGrades": "全部年級",
+  "ssClass": "班級",
+  "ssNoData": "暫無數據"
+}

+ 6 - 12
src/main.js

@@ -4,7 +4,7 @@ import Vue from 'vue'
 import App from './App'
 import router from './router'
 import store from './config/config'
-import {  Loading } from 'element-ui';
+import {  Loading  } from 'element-ui';
 // Message,
 import { myMessage } from './components/tools/message';
 import ajax from './common/axios.config'
@@ -20,6 +20,8 @@ import drag from './components/directive/el-drag-dialog';
 import VueAudio from 'vue-audio-better'
 import './assets/css/markdownCss.css'
 
+
+
 Vue.use(VideoPlayer).use(VueAudio).use(VueCookies).use(hevueImgPreview, {
     clickMaskCLose: true
 }).use(drag)
@@ -44,18 +46,9 @@ Vue.prototype.openLoading = function(target) {
     return loading;
 }
 Vue.prototype.$qs = qs
+//注册到vue原型上
+
 
-let region = 'cn'
-if (window.location.href.includes('beta') || window.location.href.includes('localhost')) {
-  region = 'beta'
-} else if (window.location.href.includes('cn')) {
-  region = 'cn'
-} else if (window.location.href.includes('hk')) {
-  region = 'hk'
-} else if (window.location.href.includes('com')) {
-  region = 'com'
-} 
-Vue.prototype.$region = region
 
 /* eslint-disable no-new */
 new Vue({
@@ -65,6 +58,7 @@ new Vue({
     template: '<App/>'
 })
 
+
 VueCookies.config('30d')
 
 router.beforeEach((to, from, next) => {

+ 29 - 1
src/router/index.js

@@ -2,6 +2,7 @@ import Vue from 'vue'
 import Router from 'vue-router'
 import ElementUI from 'element-ui'
 import 'element-ui/lib/theme-chalk/index.css'
+import locale from 'element-ui/lib/locale/lang/en'
 import login from '@/components/login'
 import index from '@/components/index'
 import indexGM from '@/components/GM/indexGM'
@@ -39,9 +40,36 @@ import studyStudentTrain from '@/components/trainCourse/studyStudent'
 import studyStudentE2Train from '@/components/trainCourse/easy2/studyStudent'
 import studyStudentE3Train from '@/components/trainCourse/easy3/studyStudent'
 import pptEasyClass from '@/components/pptEasyClass'
+
+import cn from "../lang/cn.json";
+import hk from "../lang/hk.json";
+import en from "../lang/en.json";
+
 // 全局修改默认配置,点击空白处不能关闭弹窗
 ElementUI.Dialog.props.closeOnClickModal.default = false
-Vue.use(Router).use(ElementUI)
+Vue.use(Router)
+let lang = new Object();
+let domain_name = "";
+
+if (window.location.href.includes("cocorobo.cn")) {
+  domain_name="cn";
+  lang = cn;
+} else if (window.location.href.includes("cocorobo.hk")) {
+  domain_name="hk";
+  lang = hk;
+} else if (window.location.href.includes("cocorobo.com")) {
+  domain_name="com";
+  lang=en;
+}else{
+  domain_name="cn";
+  lang=cn;
+}
+Vue.prototype.lang =lang;
+if(domain_name==='com'){//英文版
+	Vue.use(ElementUI,{locale})
+}else{
+	Vue.use(ElementUI)
+}
 
 export default new Router({
     routes: [

Некоторые файлы не были показаны из-за большого количества измененных файлов