Kaynağa Gözat

ai创建课程

11wqe1 3 hafta önce
ebeveyn
işleme
57a1d9238a
29 değiştirilmiş dosya ile 3483 ekleme ve 1032 silme
  1. 23 23
      src/components/pages/EnglishVoice/index.vue
  2. 183 183
      src/components/pages/aiAddCourse/addCourse.vue
  3. 34 24
      src/components/pages/aiAddCourse/aiBox.vue
  4. 58 46
      src/components/pages/aiAddCourse/aiBoxCourseDetail.vue
  5. 69 58
      src/components/pages/aiAddCourse/aiBoxRight.vue
  6. 21 21
      src/components/pages/aiAddCourse/aiCreateDialog.vue
  7. 18 18
      src/components/pages/aiAddCourse/aiCreateVideoDialog.vue
  8. 10 10
      src/components/pages/aiAddCourse/aiDialog.vue
  9. 19 16
      src/components/pages/aiAddCourse/aiTips.vue
  10. 31 27
      src/components/pages/aiAddCourse/evaList.vue
  11. 24 19
      src/components/pages/aiAddCourse/record.vue
  12. 1 1
      src/components/pages/aiAddCourse/templateDialog.vue
  13. 23 23
      src/components/pages/aiAddCourse/tipsDialog.vue
  14. 8 8
      src/components/pages/components/CodeEditor.vue
  15. 316 305
      src/components/pages/components/appDialog.vue
  16. 20 20
      src/components/pages/components/englishRight.vue
  17. 80 103
      src/components/pages/evaBox/index.vue
  18. 32 31
      src/components/pages/interVideo/index.vue
  19. 48 45
      src/components/pages/teacherSource/dialog.vue
  20. 2 2
      src/components/pages/test/file/wOffice.vue
  21. 2 2
      src/components/pages/test/file/wPdf2.vue
  22. 13 2
      src/components/tools/table.vue
  23. 2 2
      src/components/tools/time.vue
  24. 16 5
      src/components/tools/wangEnduit.vue
  25. 797 1
      src/lang/cn.json
  26. 804 7
      src/lang/en.json
  27. 798 2
      src/lang/hk.json
  28. 2 28
      src/main.js
  29. 29 0
      src/router/index.js

+ 23 - 23
src/components/pages/EnglishVoice/index.vue

@@ -1,41 +1,41 @@
 <template>
-    <el-dialog title="英语口语" :visible.sync="EnglishVoiceDialog" :append-to-body="true" width="100%"
+    <el-dialog :title="lang.ssEnglishOral" :visible.sync="EnglishVoiceDialog" :append-to-body="true" width="100%"
         :before-close="handleClose" class="dialog_diy">
         <div class="ev_box">
             <div class="ev_info_box">
-                <div class="title">设置英语口语信息</div>
+                <div class="title">{{ lang.ssSetEnglishOralInfo }}</div>
                 <div class="ev_info_input_box">
                     <div class="box">
-                        <span class="title bi">标题</span>
-                        <el-input v-model="title" placeholder="请输入标题" class="input" />
+                        <span class="title bi">{{ lang.ssTitle }}</span>
+                        <el-input v-model="title" :placeholder="lang.ssEnterTitle" class="input" />
                     </div>
                     <div class="box">
-                        <span class="title">说明</span>
-                        <el-input v-model="detail" placeholder="请输入对该问题的描述" class="input" />
+                        <span class="title">{{ lang.ssDescription }}</span>
+                        <el-input v-model="detail" :placeholder="lang.ssEnterDesc" class="input" />
                     </div>
                 </div>
             </div>
             <div class="ev_info_box">
-                <div class="title">设置英语口语题目</div>
+                <div class="title">{{ lang.ssSetEnglishOralQ }}</div>
                 <div class="ev_create_box">
                     <div class="left">
-                        <div class="title">题目类型选择</div>
+                        <div class="title">{{ lang.ssQuestionTypeSel }}</div>
                         <check :checkJson="checkJson" @setJson="setJson"></check>
                     </div>
                     <div class="center">
-                        <div class="title">评测题目</div>
+                        <div class="title">{{ lang.ssEvalQuestion }}</div>
                         <order :checkJson="checkJson" @setJson="setJson" :editType="2" :checkType.sync="checkType"></order>
                     </div>
                     <div class="right">
-                        <div class="title">评测大纲</div>
+                        <div class="title">{{ lang.ssEvalOutline }}</div>
                         <order :checkJson="checkJson" @setJson="setJson" :editType="1" :checkType.sync="checkType"></order>
                     </div>
                 </div>
             </div>
         </div>
         <span slot="footer" class="dialog-footer">
-            <el-button type="primary" @click="confirm()">确 认</el-button>
-            <el-button @click="close()">关 闭</el-button>
+            <el-button type="primary" @click="confirm()">{{ lang.ssConfirm }}</el-button>
+            <el-button @click="close()">{{ lang.ssClose }}</el-button>
         </span>
     </el-dialog>
 </template>
@@ -85,9 +85,9 @@ export default {
                 this.$emit("update:EnglishVoiceDialog", false);
             } else {
                 this
-                    .$confirm("是否保存已编辑内容?", "提示", {
-                        confirmButtonText: "保存",
-                        cancelButtonText: "不保存",
+                    .$confirm(this.lang.ssSaveEditContent, this.lang.ssTip, {
+                        confirmButtonText: this.lang.ssSave,
+                        cancelButtonText: this.lang.ssNotSave,
                         type: "warning",
                     })
                     .then(() => {
@@ -104,44 +104,44 @@ export default {
         },
         confirm() {
             if(!this.title){
-                this.$message.error("请输入标题");
+                this.$message.error(this.lang.ssEnterTitle);
                 return;
             }
             if(!this.checkJson.length){
-                this.$message.error("请至少添加一道口语题目");
+                this.$message.error(this.lang.ssAddOneOralQ);
                 return
             }
             let type = 1
             for(let i=0;i<this.checkJson.length;i++){
                 if(this.checkJson[i].content == '' && this.checkJson[i].type != 'createRole' && this.checkJson[i].type != 'theme'){
-                    this.$message.error(`第${i + 1}题请输入内容`);
+                    this.$message.error(this.lang.ssEnterContentQ.replace(/\*/g, i + 1));
                     type = 2
                     break;
                 }
 
                 if(this.checkJson[i].content == '' && this.checkJson[i].type == 'theme'){
-                    this.$message.error(`第${i + 1}题请输入题目`);
+                    this.$message.error(this.lang.ssEnterQuestionQ.replace(/\*/g, i + 1));
                     type = 2
                     break;
                 }
                 if(this.checkJson[i].content2 == '' && this.checkJson[i].type == 'theme'){
-                    this.$message.error(`第${i + 1}题请输入要点`);
+                    this.$message.error(this.lang.ssEnterPointQ.replace(/\*/g, i + 1));
                     type = 2
                     break;
                 }
 
                 if(this.checkJson[i].content == '' && this.checkJson[i].type == 'createRole'){
-                    this.$message.error(`第${i + 1}题请输入角色名字`);
+                    this.$message.error(this.lang.ssEnterRoleNameQ.replace(/\*/g, i + 1));
                     type = 2
                     break;
                 }
                 if(this.checkJson[i].content2 == '' && this.checkJson[i].type == 'createRole'){
-                    this.$message.error(`第${i + 1}题请输入角色定义`);
+                    this.$message.error(this.lang.ssEnterRoleDefQ.replace(/\*/g, i + 1));
                     type = 2
                     break;
                 }
                 if(this.checkJson[i].content3 == '' && this.checkJson[i].type == 'createRole'){
-                    this.$message.error(`第${i + 1}题请输入角色问候`);
+                    this.$message.error(this.lang.ssEnterRoleGreetQ.replace(/\*/g, i + 1));
                     type = 2
                     break;
                 }

Dosya farkı çok büyük olduğundan ihmal edildi
+ 183 - 183
src/components/pages/aiAddCourse/addCourse.vue


+ 34 - 24
src/components/pages/aiAddCourse/aiBox.vue

@@ -3,7 +3,7 @@
     <div class="ai_body_dialog" v-loading="loading" ref="chatDialog">
       <div
         class="dialog_content"
-        v-for="(item, index) in array"
+        v-for="(item) in array"
         :key="item.uid"
       >
         <div v-if="item.content">
@@ -40,7 +40,7 @@
     <div class="ai_body_select">
       <div class="checkBox" v-if="checkBool">
         <div class="task">
-          <div class="title">选择需要优化的任务:</div>
+          <div class="title">{{ lang.ssSelectOptTask }}</div>
           <div class="content">
             <div class="span" @click="addAllTask()">
               <div class="check">
@@ -51,7 +51,7 @@
                 />
                 <img :src="checkIsImg" alt="" v-else />
               </div>
-              <span>全选</span>
+              <span>{{ lang.ssSelectAll }}</span>
             </div>
             <div
               class="span"
@@ -67,12 +67,12 @@
                 />
                 <img :src="checkIsImg" alt="" v-else />
               </div>
-              <span>任务{{ index + 1 }}</span>
+              <span>{{ lang.ssTask }}{{ index + 1 }}</span>
             </div>
           </div>
         </div>
         <div class="part">
-          <div class="title">选择优化的部分:</div>
+          <div class="title">{{ lang.ssSelectOptPart }}</div>
           <div class="content">
             <div
               class="span"
@@ -91,7 +91,7 @@
         :class="{ isCheck: checkBool }"
         v-if="!checkArray.length && !part"
         @click="checkBool = !checkBool"
-        >选择优化内容</span
+        >{{ lang.ssSelectOptContent }}</span
       >
       <span
         class="check"
@@ -112,16 +112,16 @@
         class="binfo_input binfo_textarea"
         cols
         v-model.trim="courseText"
-        placeholder="在此输入您想了解的内容"
+        :placeholder="lang.ssEnterWantKnow"
       ></textarea>
       <div
         class="c_pub_button_confirm"
         v-if="!loading && courseText"
         @click="addContent"
       >
-        发送
+        {{ lang.ssSend }}
       </div>
-      <div class="c_pub_button_confirm" @click="promptTit" v-else>发送</div>
+      <div class="c_pub_button_confirm" @click="promptTit" v-else>{{ lang.ssSend }}</div>
     </div>
   </div>
 </template>
@@ -149,13 +149,9 @@ export default {
       checkIsImg: checkIsImg,
 			userid: this.$route.query.userid,
       checkArray: [],
-      course: [{ title: "任务1" }, { title: "任务2" }, { title: "任务3" }],
-      partArray: [
-        { name: "全部内容" },
-        { name: "任务设计" },
-        { name: "评价设计" }
-      ],
-      part: "全部内容",
+      course: [],
+      partArray: [],
+      part: "",
       checkBool: false,
       loading: false,
       username: "",
@@ -174,12 +170,12 @@ export default {
     promptTit() {
       if (!this.loading && !this.courseText) {
         this.$message({
-          message: "请输入您想要了解的内容",
+          message: this.lang.ssEnterWantKnowPls,
           type: "warning"
         });
       } else {
         this.$message({
-          message: "请回答完毕后再次发送",
+          message: this.lang.ssAnswerFinishSend,
           type: "warning"
         });
       }
@@ -191,7 +187,7 @@ export default {
           ATTENTION: Use '##' to SPLIT SECTIONS, not '#'.Output format carefully referenced "Format example".`
         if(this.checkArray.length){
           let task = []
-          if(this.part == "全部内容"){
+          if(this.part == this.lang.ssAllContent){
             // msg += `--------
             // ## 示例
             // [
@@ -261,7 +257,7 @@ export default {
               let _index = this.checkArray[i]
               task.push(this.course[_index])
             }
-          }else if(this.part == "任务设计"){
+          }else if(this.part == this.lang.ssTaskDesign){
             // msg += `
             // --------
             // ## 示例
@@ -312,7 +308,7 @@ export default {
               let _index = this.checkArray[i]
               task.push(this.course[_index])
             }
-          }else if(this.part == "评价设计"){
+          }else if(this.part == this.lang.ssEvalDesign){
             // msg += `
             // --------
             // ## 示例
@@ -510,7 +506,7 @@ export default {
     // 获取对应的聊天记录
     getChatList() {
       return new Promise((resolve, reject) => {
-        if (this.loading) return this.$message.info("请稍等...");
+        if (this.loading) return this.$message.info(this.lang.ssWaitPls);
         this.array = [];
         this.loading = true;
         let params = {
@@ -551,7 +547,7 @@ export default {
           })
           .catch(err => {
             console.log(err);
-            this.$message.error("获取对话记录失败");
+            this.$message.error(this.lang.ssGetChatFail);
             this.loading = false;
             resolve();
           });
@@ -586,7 +582,7 @@ export default {
     taskName() {
       let task = "";
       if (this.checkArray.length) {
-        task = "任务";
+        task = this.lang.ssTask;
         this.checkArray = this.checkArray.sort((a, b) => a - b);
         let a = JSON.parse(JSON.stringify(this.checkArray));
         for (let index = 0; index < a.length; index++) {
@@ -598,6 +594,20 @@ export default {
     }
   },
   mounted() {
+    // 初始化默认的 course 数组(如果 unitJson 未提供数据时使用)
+    if (!this.course.length) {
+      this.course = [
+        { title: `${this.lang.ssTask}1` },
+        { title: `${this.lang.ssTask}2` },
+        { title: `${this.lang.ssTask}3` }
+      ];
+    }
+    this.partArray = [
+      { name: this.lang.ssAllContent },
+      { name: this.lang.ssTaskDesign },
+      { name: this.lang.ssEvalDesign }
+    ];
+    this.part = this.lang.ssAllContent;
     this.getChatList().then(_ => {
       this.$nextTick(() => {
 				console.log(this.$refs.chatDialog.scrollHeight)

+ 58 - 46
src/components/pages/aiAddCourse/aiBoxCourseDetail.vue

@@ -54,8 +54,8 @@
           </div>
           <div class="ai_tips_btn_box" v-if="chatTypeArray.includes(item.chatType) && !item.loading">
             <!-- @click="quickAdd(item.addedData, pr)" -->
-            <span v-if="item.chatType == 'start'" @click="quickAdd('start')">追加议题</span>
-            <span v-if="item.chatType == 'recordCourseD'" @click="setCourseText(item.aiContent)">采纳</span>
+            <span v-if="item.chatType == 'start'" @click="quickAdd('start')">{{ lang.ssAddTopic }}</span>
+            <span v-if="item.chatType == 'recordCourseD'" @click="setCourseText(item.aiContent)">{{ lang.ssAdopt }}</span>
           </div>
         </div>
       </div>
@@ -63,7 +63,7 @@
     <div class="ai_body_select" v-if="false">
       <div class="checkBox" v-if="checkBool">
         <div class="task">
-          <div class="title">选择需要优化的任务:</div>
+          <div class="title">{{ lang.ssSelectOptTask }}</div>
           <div class="content">
             <div class="span" @click="addAllTask()">
               <div class="check">
@@ -74,7 +74,7 @@
                 />
                 <img :src="checkIsImg" alt="" v-else />
               </div>
-              <span>全选</span>
+              <span>{{ lang.ssSelectAll }}</span>
             </div>
             <div
               class="span"
@@ -90,12 +90,12 @@
                 />
                 <img :src="checkIsImg" alt="" v-else />
               </div>
-              <span>任务{{ index + 1 }}</span>
+              <span>{{ lang.ssTask }}{{ index + 1 }}</span>
             </div>
           </div>
         </div>
         <div class="part">
-          <div class="title">选择优化的部分:</div>
+          <div class="title">{{ lang.ssSelectOptPart }}</div>
           <div class="content">
             <div
               class="span"
@@ -114,7 +114,7 @@
         :class="{ isCheck: checkBool }"
         v-if="!checkArray.length && !part"
         @click="checkBool = !checkBool"
-        >选择优化内容</span
+        >{{ lang.ssSelectOptContent }}</span
       >
       <span
         class="check"
@@ -159,16 +159,16 @@
               d="M12.465 11.507L15.9141 14.9048C16.1279 14.5365 16.25 14.1088 16.25 13.6521C16.25 12.2714 15.1307 11.1521 13.75 11.1521C13.2799 11.1521 12.8406 11.2815 12.465 11.507ZM15.0374 15.7957L11.5873 12.397C11.3726 12.7659 11.25 13.1944 11.25 13.6521C11.25 15.0328 12.3693 16.1521 13.75 16.1521C14.2211 16.1521 14.6613 16.0222 15.0374 15.7957ZM11.0797 11.0192C11.759 10.3303 12.7051 9.9021 13.75 9.9021C15.8211 9.9021 17.5 11.581 17.5 13.6521C17.5 14.6767 17.0882 15.6064 16.4226 16.2827C15.7431 16.9729 14.7961 17.4021 13.75 17.4021C11.6789 17.4021 10 15.7232 10 13.6521C10 12.6263 10.4127 11.6957 11.0797 11.0192Z"
             />
           </svg>
-          <span>清屏</span>
+          <span>{{ lang.ssClearScreen }}</span>
         </span>
         <!-- <span class="clear" @click.stop="quickAdd('more')">
           <span>更多课程灵感</span>
         </span> -->
         <span class="clear" @click.stop="quickAdd('recordCheckJindu')">
-          <span>总结讨论</span>
+          <span>{{ lang.ssSummaryDiscuss }}</span>
         </span>
         <span class="clear" @click.stop="quickAdd('recordCourseD')">
-          <span>总结并生成课程概况</span>
+          <span>{{ lang.ssSummaryCourse }}</span>
         </span>
         <!-- <div style="margin-left: auto;">
           <el-switch v-model="continuous"></el-switch>
@@ -203,7 +203,7 @@
             />
             <div class="ai_b_i_rlb_i_name">
               <span>{{ item.assistantName }}</span>
-              <span>作者:{{ item.username }}</span>
+              <span>{{ lang.ssAuthor }}{{ item.username }}</span>
             </div>
           </div>
           <div class="ai_b_i_rlb_itemBottom">
@@ -246,8 +246,8 @@
           isVoice
             ? isTalk
               ? ''
-              : '点击按钮开始录音'
-            : '在此输入您想了解的内容'
+              : lang.ssClickStartRec
+            : lang.ssEnterWantKnow
         "
       ></textarea>
 
@@ -311,7 +311,7 @@
         v-if="!faloading && !isVoice"
         @click="addContent"
       >
-        发送
+        {{ lang.ssSend }}
       </div>
 
       <div
@@ -360,7 +360,7 @@
 
       <div v-if="!faloading && isVoice"></div>
       <div class="c_pub_button_confirm" v-if="faloading" @click="stopSend">
-        终止
+        {{ lang.ssTerminate }}
       </div>
     </div>
     <iframe
@@ -453,13 +453,9 @@ export default {
       oid: this.$route.query.oid,
       org: this.$route.query.org,
       checkArray: [],
-      course: [{ title: "任务1" }, { title: "任务2" }, { title: "任务3" }],
-      partArray: [
-        { name: "全部内容" },
-        { name: "任务设计" },
-        { name: "评价设计" }
-      ],
-      part: "全部内容",
+      course: [],
+      partArray: [],
+      part: "",
       checkBool: false,
       loading: false,
       textareaHeight: 50,
@@ -614,23 +610,23 @@ export default {
     promptTit() {
       if (!this.loading && !this.courseText) {
         this.$message({
-          message: "请输入您想要了解的内容",
+          message: this.lang.ssEnterWantKnowPls,
           type: "warning"
         });
       } else {
         this.$message({
-          message: "请回答完毕后再次发送",
+          message: this.lang.ssAnswerFinishSend,
           type: "warning"
         });
       }
     },
     quickAdd(type){
       if(this.faloading){
-        this.$message.error('请等待回答完毕在发送')
+        this.$message.error(this.lang.ssWaitAnswerSend)
         return
       }
       if(!this.viedoText){
-        this.$message.error('请录制音频后发送')
+        this.$message.error(this.lang.ssRecordAudioSend)
         return
       }
       this.faloading = true;
@@ -723,9 +719,9 @@ ${this.viedoText}`
     },
     addContent() {
       if (this.courseText.trim().length == 0)
-        return this.$message.error("请输入内容");
+        return this.$message.error(this.lang.ssEnterContent);
       if(this.faloading){
-        this.$message.error('请等待回答完毕在发送')
+        this.$message.error(this.lang.ssWaitAnswerSend)
         return
       }
       let message = this.courseText;
@@ -736,17 +732,17 @@ ${this.viedoText}`
           msg = `
 ATTENTION: Use '##' to SPLIT SECTIONS, not '#'.Output format carefully referenced "Format example".`;
           let task = [];
-          if (this.part == "全部内容") {
+          if (this.part == this.lang.ssAllContent) {
             for (var i = 0; i < this.checkArray.length; i++) {
               let _index = this.checkArray[i];
               task.push(this.course[_index]);
             }
-          } else if (this.part == "任务设计") {
+          } else if (this.part == this.lang.ssTaskDesign) {
             for (var i = 0; i < this.checkArray.length; i++) {
               let _index = this.checkArray[i];
               task.push(this.course[_index]);
             }
-          } else if (this.part == "评价设计") {
+          } else if (this.part == this.lang.ssEvalDesign) {
             for (var i = 0; i < this.checkArray.length; i++) {
               let _index = this.checkArray[i];
               task.push(this.course[_index].eList);
@@ -1192,7 +1188,7 @@ ${message}`;
               this.agentJSON = {
                 model: _data[0].modelType == 'GPT' ? "gpt-4o-2024-11-20" : _data[0].modelType,
                 url: _data[0].modelType.includes('qwen') ? 'https://llm.cocorobo.cn' : 'https://gpt4.cocorobo.cn',
-                start: _data[0].prologue ? _data[0].prologue : '您好,我是您的创课助手小可,在创课中遇到什么问题,都可以与我对话~,我会尽量帮助您的'
+                start: _data[0].prologue ? _data[0].prologue : this.lang.ssHelloAssistant
               }
             }
             resolve();
@@ -1298,7 +1294,7 @@ ${message}`;
           })
           .catch(err => {
             console.log(err);
-            this.$message.error("获取对话记录失败");
+            this.$message.error(this.lang.ssGetChatFail);
             this.loading = false;
             resolve();
           });
@@ -1384,9 +1380,9 @@ ${message}`;
       }
     },
     clear() {
-      this.$confirm("确定清空聊天记录吗?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
+      this.$confirm(this.lang.ssClearChatConfirm, this.lang.ssTip, {
+        confirmButtonText: this.lang.ssConfirm,
+        cancelButtonText: this.lang.ssCancel,
         type: "warning"
       })
         .then(_ => {
@@ -1401,13 +1397,13 @@ ${message}`;
             .post("https://gpt4.cocorobo.cn/delete_park_session", params)
             .then(res => {
               this.array = [];
-              this.$message.success("清除聊天记录成功");
+              this.$message.success(this.lang.ssClearChatSuccess);
               this.loading = false;
               this.getChatList()
             })
             .catch(err => {
               this.loading = false;
-              this.$message.error("清除聊天记录失败");
+              this.$message.error(this.lang.ssClearChatFail);
             });
         })
         .catch(_ => {});
@@ -1506,7 +1502,7 @@ ${message}`;
       // 移除临时元素
       document.body.removeChild(tempInput);
       this.$message({
-        message: "复制成功",
+        message: this.lang.ssCopySuccess,
         type: "success"
       });
     },
@@ -1544,18 +1540,18 @@ ${message}`;
 
       // 新增的确认提示框
       if (this.courseText2) {
-        this.$confirm('课程简要描述已有内容,是否覆盖?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
+        this.$confirm(this.lang.ssCourseBriefHas, this.lang.ssTip, {
+          confirmButtonText: this.lang.ssConfirm,
+          cancelButtonText: this.lang.ssCancel,
           type: 'warning'
         }).then(() => {
           this.updatCourse(_content)
-          this.$message.success('采纳成功');
+          this.$message.success(this.lang.ssAdoptSuccess);
         }).catch(() => {
         });
       } else {
         this.updatCourse(_content)
-        this.$message.success('采纳成功');
+        this.$message.success(this.lang.ssAdoptSuccess);
       }
     },
     updatCourse(content){
@@ -1595,7 +1591,7 @@ ${message}`;
     },
     stopVoice() {
       try {
-        if (!this.isTalk) return this.$message.info("请先开始录音");
+        if (!this.isTalk) return this.$message.info(this.lang.ssStartRecPls);
         let iiframe = this.$refs["iiframe"];
         iiframe.contentWindow.window.document
           .getElementById("scenarioStopButton")
@@ -1631,7 +1627,7 @@ ${message}`;
     taskName() {
       let task = "";
       if (this.checkArray.length) {
-        task = "任务";
+        task = this.lang.ssTask;
         this.checkArray = this.checkArray.sort((a, b) => a - b);
         let a = JSON.parse(JSON.stringify(this.checkArray));
         for (let index = 0; index < a.length; index++) {
@@ -1655,6 +1651,22 @@ ${message}`;
     }
   },
   mounted() {
+    // 初始化需要从 lang 获取的数组
+    if (!this.course.length) {
+      this.course = [
+        { title: `${this.lang.ssTask}1` },
+        { title: `${this.lang.ssTask}2` },
+        { title: `${this.lang.ssTask}3` }
+      ];
+    }
+    this.partArray = [
+      { name: this.lang.ssAllContent },
+      { name: this.lang.ssTaskDesign },
+      { name: this.lang.ssEvalDesign }
+    ];
+    this.part = this.lang.ssAllContent;
+    
+
     // this.getChatList().then(_ => {
     //   this.$nextTick(() => {
     //     console.log(this.$refs.chatDialog.scrollHeight);

+ 69 - 58
src/components/pages/aiAddCourse/aiBoxRight.vue

@@ -51,7 +51,7 @@
               src="../../../assets/icon/course/pasete.png"
               @click="onCopy(item.aiContent)"
             />
-            <el-tooltip content="点击可将该内容以docx文件保存至附录栏" placement="top" effect="dark">
+            <el-tooltip :content="lang.ssClickSaveDocx" placement="top" effect="dark">
               <img
               src="../../../assets/icon/course/save.svg"
               @click="onSave(item.aiContent, item)"
@@ -60,7 +60,7 @@
           </div>
           <div class="ai_tips_btn_box" v-if="item.promptArray && item.promptArray.length">
             <span v-for="(pr, pindex) in item.promptArray" :key="pindex" @click="quickAdd(item.addedData, pr)">{{ pr.name }}</span>
-            <span @click="moreClick(item.uid, item.addedData)" v-loading="item.moreloading && !item.moreDisplay2" v-if="item.moreDisplay">更多</span>
+            <span @click="moreClick(item.uid, item.addedData)" v-loading="item.moreloading && !item.moreDisplay2" v-if="item.moreDisplay">{{ lang.ssMore }}</span>
           </div>
         </div>
       </div>
@@ -68,7 +68,7 @@
     <div class="ai_body_select" v-if="false">
       <div class="checkBox" v-if="checkBool">
         <div class="task">
-          <div class="title">选择需要优化的任务:</div>
+          <div class="title">{{ lang.ssSelectOptTask }}</div>
           <div class="content">
             <div class="span" @click="addAllTask()">
               <div class="check">
@@ -79,7 +79,7 @@
                 />
                 <img :src="checkIsImg" alt="" v-else />
               </div>
-              <span>全选</span>
+              <span>{{ lang.ssSelectAll }}</span>
             </div>
             <div
               class="span"
@@ -95,12 +95,12 @@
                 />
                 <img :src="checkIsImg" alt="" v-else />
               </div>
-              <span>任务{{ index + 1 }}</span>
+              <span>{{ lang.ssTask }}{{ index + 1 }}</span>
             </div>
           </div>
         </div>
         <div class="part">
-          <div class="title">选择优化的部分:</div>
+          <div class="title">{{ lang.ssSelectOptPart }}</div>
           <div class="content">
             <div
               class="span"
@@ -119,7 +119,7 @@
         :class="{ isCheck: checkBool }"
         v-if="!checkArray.length && !part"
         @click="checkBool = !checkBool"
-        >选择优化内容</span
+        >{{ lang.ssSelectOptContent }}</span
       >
       <span
         class="check"
@@ -164,18 +164,18 @@
               d="M12.465 11.507L15.9141 14.9048C16.1279 14.5365 16.25 14.1088 16.25 13.6521C16.25 12.2714 15.1307 11.1521 13.75 11.1521C13.2799 11.1521 12.8406 11.2815 12.465 11.507ZM15.0374 15.7957L11.5873 12.397C11.3726 12.7659 11.25 13.1944 11.25 13.6521C11.25 15.0328 12.3693 16.1521 13.75 16.1521C14.2211 16.1521 14.6613 16.0222 15.0374 15.7957ZM11.0797 11.0192C11.759 10.3303 12.7051 9.9021 13.75 9.9021C15.8211 9.9021 17.5 11.581 17.5 13.6521C17.5 14.6767 17.0882 15.6064 16.4226 16.2827C15.7431 16.9729 14.7961 17.4021 13.75 17.4021C11.6789 17.4021 10 15.7232 10 13.6521C10 12.6263 10.4127 11.6957 11.0797 11.0192Z"
             />
           </svg>
-          <span>清屏</span>
+          <span>{{ lang.ssClearScreen }}</span>
         </span>
         <span
           class="clear"
           @click.stop="showjList = !showjList"
           v-if="jArray.length"
         >
-          <span>查看</span>
+          <span>{{ lang.ssView }}</span>
         </span>
         <div style="margin-left: auto;">
           <el-switch v-model="continuous"></el-switch>
-          <span @click.stop="continuous = !continuous">连续对话</span>
+          <span @click.stop="continuous = !continuous">{{ lang.ssContinuous }}</span>
         </div>
       </div>
 
@@ -206,7 +206,7 @@
             />
             <div class="ai_b_i_rlb_i_name">
               <span>{{ item.assistantName }}</span>
-              <span>作者:{{ item.username }}</span>
+              <span>{{ lang.ssAuthor }}{{ item.username }}</span>
             </div>
           </div>
           <div class="ai_b_i_rlb_itemBottom">
@@ -250,8 +250,8 @@
           isVoice
             ? isTalk
               ? ''
-              : '点击按钮开始录音'
-            : '在此输入您想了解的内容'
+              : lang.ssClickStartRec
+            : lang.ssEnterWantKnow
         "
       ></textarea>
 
@@ -315,7 +315,7 @@
         v-if="!faloading && !isVoice"
         @click="addContent"
       >
-        发送
+        {{ lang.ssSend }}
       </div>
 
       <div
@@ -364,7 +364,7 @@
 
       <div v-if="!faloading && isVoice"></div>
       <div class="c_pub_button_confirm" v-if="faloading" @click="stopSend">
-        终止
+        {{ lang.ssTerminate }}
       </div>
     </div>
     <iframe
@@ -465,13 +465,9 @@ export default {
       oid: this.$route.query.oid,
       org: this.$route.query.org,
       checkArray: [],
-      course: [{ title: "任务1" }, { title: "任务2" }, { title: "任务3" }],
-      partArray: [
-        { name: "全部内容" },
-        { name: "任务设计" },
-        { name: "评价设计" }
-      ],
-      part: "全部内容",
+      course: [],
+      partArray: [],
+      part: "",
       checkBool: false,
       loading: false,
       textareaHeight: 50,
@@ -640,7 +636,7 @@ export default {
       immediate: true,
       deep: true,
       handler(newValue, oldValue) {
-        if (newValue.length > oldValue.length) {
+        if (newValue.length > oldValue ? oldValue.length : 0) {
           let addedData = newValue.filter((item, index) => {
             return !oldValue.some((oldItem, oldIndex) => {
               return JSON.stringify(oldItem) === JSON.stringify(item);
@@ -815,45 +811,45 @@ export default {
         let area = "";
         let text = "";
         if (string == "aiteacherTextDetail") {
-          area = "已有教案摘要";
+          area = this.lang.ssHasPlanSum;
           text = this.teacherCourseText;
         } else if (string == "aitargetTextDetail") {
-          area = "课程目标";
+          area = this.lang.ssCourseTarget;
           text = this.targetCourseText;
         } else if (string == "aiDetail") {
-          area = "课程简要描述";
+          area = this.lang.ssCourseBrief;
           text = this.courseText2;
         } else if (string == "aitargetTextDetail2") {
-          area = "课程目标";
+          area = this.lang.ssCourseTarget;
           text = this.targetCourseText2;
         } else if (string.indexOf("aiDetail1") != -1) {
           let index = parseInt(string.split("aiDetail1-")[1]);
-          area = `任务${index + 1}课程大纲`;
+          area = this.lang.ssTaskOutline.replace(/\*/g, index + 1);
           text = this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail2;
         } else if (string == "aiCpote1") {
-          area = "概念群";
+          area = this.lang.ssConceptGroup;
           text = this.cpote.cpote1;
         } else if (string == "aiCpote2") {
-          area = "问题链";
+          area = this.lang.ssProblemChain;
           text = this.cpote.cpote2;
         } else if (string == "aiCpote3") {
-          area = "目标层";
+          area = this.lang.ssTargetLayer;
           text = this.cpote.cpote3;
         } else if (string == "aiCpote4") {
-          area = "任务簇";
+          area = this.lang.ssTaskCluster;
           text = this.cpote.cpote4;
         } else if (string.indexOf("teacherDetail2") != -1) {
           let index = parseInt(string.split("teacherDetail2-")[1]);
-          area = `任务${index + 1}教案`;
+          area = this.lang.ssTaskPlan.replace(/\*/g, index + 1);
           text = this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3;
         } else if (string.indexOf("aiDetail2") != -1) {
           let index = parseInt(string.split("aiDetail2-")[1]);
-          area = `任务${index + 1}任务描述`;
+          area = this.lang.ssTaskDescL.replace(/\*/g, index + 1);
           text = this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail;
         } else if (string.indexOf("aiDetail3") != -1) {
           let index = parseInt(string.split("-")[1]);
           let index2 = parseInt(string.split("-")[2]);
-          area = `任务${index + 1}工具${index2 + 1}的工具描述`;
+          area = this.lang.ssTaskToolDesc.replace(/\*/g, index + 1).replace(/\$/g, index2 + 1);
           text = this.unitJson[0].chapterInfo[0].taskJson[index].toolChoose[
             index2
           ].toolDetail;
@@ -871,12 +867,12 @@ export default {
     promptTit() {
       if (!this.loading && !this.courseText) {
         this.$message({
-          message: "请输入您想要了解的内容",
+          message: this.lang.ssEnterWantKnowPls,
           type: "warning"
         });
       } else {
         this.$message({
-          message: "请回答完毕后再次发送",
+          message: this.lang.ssAnswerFinishSend,
           type: "warning"
         });
       }
@@ -885,7 +881,7 @@ export default {
       this.$emit('addCourseBehavior', 'courseBehavior', '点击对话框-推荐更多按钮')
 
       if(this.array.find(i => i.uid == uid).moreloading){
-        this.$message.error('生成中请稍后')
+        this.$message.error(this.lang.ssGenWait)
         return
       }
       let string = `NOTICE
@@ -946,7 +942,7 @@ Instruction: Based on the context, follow "Format example", write content.`
                     }
 
                 } catch (error) {
-                  _this.$message.error('返回json格式不正确')
+                  _this.$message.error(_this.lang.ssFormatErrJson)
                   // _this.aiGet2(messages, callback);
                   _this.array.find(i => i.uid == uid).moreloading = false;
                   console.log("error_________________" + error);
@@ -989,7 +985,7 @@ Instruction: Based on the context, follow "Format example", write content.`
     },
     quickAdd(data, pr){
       if(this.faloading){
-        this.$message.error('请等待回答完毕在发送')
+        this.$message.error(this.lang.ssWaitAnswerSend)
         return
       }
       this.$emit('addCourseBehavior', 'courseBehavior', '点击对话框-推荐按钮发送')
@@ -1056,9 +1052,9 @@ ${data.area + ':' + data.value}
     },
     addContent() {
       if (this.courseText.trim().length == 0)
-        return this.$message.error("请输入内容");
+        return this.$message.error(this.lang.ssEnterContent);
       if(this.faloading){
-        this.$message.error('请等待回答完毕在发送')
+        this.$message.error(this.lang.ssWaitAnswerSend)
         return
       }
       let message = this.courseText;
@@ -1070,17 +1066,17 @@ ${data.area + ':' + data.value}
           msg = `
 ATTENTION: Use '##' to SPLIT SECTIONS, not '#'.Output format carefully referenced "Format example".`;
           let task = [];
-          if (this.part == "全部内容") {
+          if (this.part == this.lang.ssAllContent) {
             for (var i = 0; i < this.checkArray.length; i++) {
               let _index = this.checkArray[i];
               task.push(this.course[_index]);
             }
-          } else if (this.part == "任务设计") {
+          } else if (this.part == this.lang.ssTaskDesign) {
             for (var i = 0; i < this.checkArray.length; i++) {
               let _index = this.checkArray[i];
               task.push(this.course[_index]);
             }
-          } else if (this.part == "评价设计") {
+          } else if (this.part == this.lang.ssEvalDesign) {
             for (var i = 0; i < this.checkArray.length; i++) {
               let _index = this.checkArray[i];
               task.push(this.course[_index].eList);
@@ -1567,9 +1563,9 @@ ${message}`;
                 uid: _uid,
                 AI: "AI",
                 aiContent:
-                  "您好,我是您的创课助手小可,在创课中遇到什么问题,都可以与我对话~,我会尽量帮助您的",
+                  this.lang.ssHelloAssistant,
                 oldContent:
-                  "您好,我是您的创课助手小可,在创课中遇到什么问题,都可以与我对话~,我会尽量帮助您的",
+                  this.lang.ssHelloAssistant,
                 isShowSynchronization: false,
                 filename: "",
                 index: 0,
@@ -1588,7 +1584,7 @@ ${message}`;
           })
           .catch(err => {
             console.log(err);
-            this.$message.error("获取对话记录失败");
+            this.$message.error(this.lang.ssGetChatFail);
             this.loading = false;
             resolve();
           });
@@ -1674,9 +1670,9 @@ ${message}`;
       }
     },
     clear() {
-      this.$confirm("确定清空聊天记录吗?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
+      this.$confirm(this.lang.ssClearChatConfirm, this.lang.ssTip, {
+        confirmButtonText: this.lang.ssConfirm,
+        cancelButtonText: this.lang.ssCancel,
         type: "warning"
       })
         .then(_ => {
@@ -1691,12 +1687,12 @@ ${message}`;
             .post("https://gpt4.cocorobo.cn/delete_park_session", params)
             .then(res => {
               this.array = [];
-              this.$message.success("清除聊天记录成功");
+              this.$message.success(this.lang.ssClearChatSuccess);
               this.loading = false;
             })
             .catch(err => {
               this.loading = false;
-              this.$message.error("清除聊天记录失败");
+              this.$message.error(this.lang.ssClearChatFail);
             });
         })
         .catch(_ => {});
@@ -1796,7 +1792,7 @@ ${message}`;
       // 移除临时元素
       document.body.removeChild(tempInput);
       this.$message({
-        message: "复制成功",
+        message: this.lang.ssCopySuccess,
         type: "success"
       });
     },
@@ -1837,12 +1833,12 @@ ${message}`;
           let ss = data.choices[0].message.content.replace(/^[‘“"']|[’”"']$/g, '');
           this.$emit("addChatAppendixFile", ss, content)
         }else{
-          this.$message.error('保存失败')
+          this.$message.error(this.lang.ssSaveFail)
         }
         item.loading = false
       }).catch(e => {
         item.loading = false
-        this.$message.error('保存失败')
+        this.$message.error(this.lang.ssSaveFail)
         console.log(e);
       });
     },
@@ -1876,7 +1872,7 @@ ${message}`;
     },
     stopVoice() {
       try {
-        if (!this.isTalk) return this.$message.info("请先开始录音");
+        if (!this.isTalk) return this.$message.info(this.lang.ssStartRecPls);
         let iiframe = this.$refs["iiframe"];
         iiframe.contentWindow.window.document
           .getElementById("scenarioStopButton")
@@ -1912,7 +1908,7 @@ ${message}`;
     taskName() {
       let task = "";
       if (this.checkArray.length) {
-        task = "任务";
+        task = this.lang.ssTask;
         this.checkArray = this.checkArray.sort((a, b) => a - b);
         let a = JSON.parse(JSON.stringify(this.checkArray));
         for (let index = 0; index < a.length; index++) {
@@ -1936,6 +1932,21 @@ ${message}`;
     }
   },
   mounted() {
+    // 初始化需要从 lang 获取的数组
+    if (!this.course.length) {
+      this.course = [
+        { title: `${this.lang.ssTask}1` },
+        { title: `${this.lang.ssTask}2` },
+        { title: `${this.lang.ssTask}3` }
+      ];
+    }
+    this.partArray = [
+      { name: this.lang.ssAllContent },
+      { name: this.lang.ssTaskDesign },
+      { name: this.lang.ssEvalDesign }
+    ];
+    this.part = this.lang.ssAllContent;
+    
     // this.getChatList().then(_ => {
     //   this.$nextTick(() => {
     //     console.log(this.$refs.chatDialog.scrollHeight);

+ 21 - 21
src/components/pages/aiAddCourse/aiCreateDialog.vue

@@ -1,8 +1,8 @@
 <template>
     <div>
-        <el-dialog :title="`任务${lineCount+1}的AI生成PPT`" :visible.sync="dialogVisibleAiCreate2" :append-to-body="true" width="700px" :before-close="handleClose" class="dialog_diy">
-            <div style="height: 500px; padding: 15px" v-loading="loading" element-loading-text="小可正在努力生成中,请稍等...">
-                <div class="c_pub_button_confirm stopBtn" v-if="loading && stopPpt" @click="cancelAjax()">停止</div>
+        <el-dialog :title="lang.ssTaskAiGenPPT.replace(/\*/g, lineCount+1)" :visible.sync="dialogVisibleAiCreate2" :append-to-body="true" width="700px" :before-close="handleClose" class="dialog_diy">
+            <div style="height: 500px; padding: 15px" v-loading="loading" :element-loading-text="lang.ssGenWaitPls">
+                <div class="c_pub_button_confirm stopBtn" v-if="loading && stopPpt" @click="cancelAjax()">{{ lang.ssStop }}</div>
 
                 <!-- <div class="t_box">
                     <span>选择:</span>
@@ -14,9 +14,9 @@
                 </div> -->
 
                 <div class="t_box" v-if="steps == 1" style="height: 100%">
-                    <textarea style="height: 100%; width: calc(100% - 260px)" rows="10" class="binfo_input binfo_textarea" cols placeholder="请生成大纲" v-model="outline"></textarea>
+                    <textarea style="height: 100%; width: calc(100% - 260px)" rows="10" class="binfo_input binfo_textarea" cols :placeholder="lang.ssGenOutline" v-model="outline"></textarea>
                     <div class="template_box">
-                        <span class="title">选择模板</span>
+                        <span class="title">{{ lang.ssSelectTemplate }}</span>
                         <div class="template_list">
                             <div class="template_item" :class="{ active: index == templateIndex }" v-for="(item, index) in templateList" :key="index" @click="changeTemplate(index)">
                                 <img :src="item.img" alt="" />
@@ -31,17 +31,17 @@
             </div>
 
             <span slot="footer" class="dialog-footer">
-                <el-button @click="aiGet()" type="primary" :disabled="loading || tloading">重新生成大纲</el-button>
-                <el-button @click="aiGetPPt()" type="primary" :disabled="loading || tloading">{{ url ? "重新生成PPT" : "生成PPT" }}</el-button>
-                <el-button @click="steps = 1" type="primary" v-if="steps == 2">上一步</el-button>
-                <el-button @click="steps = 2" type="primary" v-else-if="steps == 1 && url">下一步</el-button>
-                <el-button @click="confirm" type="primary">确 定</el-button>
-                <el-button @click="closeT" type="primary">收 起</el-button>
-                <el-button @click="closeAiPpt">关 闭</el-button>
+                <el-button @click="aiGet()" type="primary" :disabled="loading || tloading">{{ lang.ssRegenOutline }}</el-button>
+                <el-button @click="aiGetPPt()" type="primary" :disabled="loading || tloading">{{ url ? lang.ssRegenPPT : lang.ssGenPPT }}</el-button>
+                <el-button @click="steps = 1" type="primary" v-if="steps == 2">{{ lang.ssPrevStep }}</el-button>
+                <el-button @click="steps = 2" type="primary" v-else-if="steps == 1 && url">{{ lang.ssNextStep }}</el-button>
+                <el-button @click="confirm" type="primary">{{ lang.ssConfirm }}</el-button>
+                <el-button @click="closeT" type="primary">{{ lang.ssCollapse }}</el-button>
+                <el-button @click="closeAiPpt">{{ lang.ssClose }}</el-button>
             </span>
         </el-dialog>
         <div v-if="tanDialog" @click="dialogVisibleAiCreate2 = true" class="tanDialog">
-            <span>任务{{ lineCount + 1 }}的生成ppt </span><button class="c_pub_button_confirm">打开</button>
+            <span>{{ lang.ssTaskGenPPT.replace(/\*/g, lineCount + 1) }} </span><button class="c_pub_button_confirm">{{ lang.ssOpen }}</button>
         </div>
     </div>
 </template>
@@ -856,7 +856,7 @@ export default {
         },
         cancelAjax(type) {
             if(type != 2){
-                this.$message.success("已经成功停止")
+                this.$message.success(this.lang.ssStopSuccess)
             }
             this.stopPpt && this.stopPpt.cancel('Request canceled by the user.');
             this.stopPpt = null;
@@ -885,7 +885,7 @@ export default {
             if (this.url) {
                 this.$emit("createAiPpt", this.uJson, this.lineCount);
             } else {
-                this.$message.error("请点击“生成PPT”按钮");
+                this.$message.error(this.lang.ssClickGenPPT);
             }
         },
         changeRadio() {
@@ -923,7 +923,7 @@ export default {
         },
         async aiGetPPt() {
             if (this.loading || this.tloading) {
-                this.$message.error("正在生成中,请稍后");
+                this.$message.error(this.lang.ssGenWait);
                 return;
             }
             let _this = this;
@@ -967,7 +967,7 @@ export default {
             }
             let message = "";
             if (!_this.outline) {
-                _this.$message.error("请先生成大纲内容");
+                _this.$message.error(_this.lang.ssGenOutlinePls);
                 return;
             }
             message = `NOTICE
@@ -1031,7 +1031,7 @@ ${_this.outline.replaceAll('#', '').replaceAll('*', '').replaceAll('-', '').repl
                                 _this.steps = 2;
 
                             } catch (error) {
-                                _this.$message.error("生成失败,正在重新生成");
+                                _this.$message.error(_this.lang.ssGenFailRetry);
                                 _this.loading = false;
                                 _this.stopPpt = null
                                 _this.aiGetPPt();
@@ -1047,7 +1047,7 @@ ${_this.outline.replaceAll('#', '').replaceAll('*', '').replaceAll('-', '').repl
         },
         async aiGet() {
             if (this.loading || this.tloading) {
-                this.$message.error("正在生成中,请稍后");
+                this.$message.error(this.lang.ssGenWait);
                 return;
             }
             let _this = this;
@@ -1290,7 +1290,7 @@ ${mclass.length ? "面向年级:" + mclass.join(",") : ""}
             }
             const _slideWei = pres.addSlide();
             _slideWei.background = { path: this.templateList[this.templateIndex].imgEnd.img }
-            _slideWei.addText("谢谢观看,下课!", this.templateList[this.templateIndex].imgEnd.setting);
+            _slideWei.addText(this.lang.ssThanksWatch, this.templateList[this.templateIndex].imgEnd.setting);
             // 获取PPTX文件的ArrayBuffer
 
             // 保存为 Blob 并处理
@@ -1342,7 +1342,7 @@ ${mclass.length ? "面向年级:" + mclass.join(",") : ""}
                     .send(function(err, data) {
                         _this.loading = false;
                         if (err) {
-                            _this.$message.error("上传失败");
+                            _this.$message.error(_this.lang.ssUploadFail);
                         } else {
                             _this.url = data.Location;
                             _this.uJson = {

+ 18 - 18
src/components/pages/aiAddCourse/aiCreateVideoDialog.vue

@@ -1,26 +1,26 @@
 <template>
-    <el-dialog title="智能检索" :visible.sync="dialogVisibleAiCreateVideo" :append-to-body="true" width="90%"
+    <el-dialog :title="lang.ssSmartSearch" :visible.sync="dialogVisibleAiCreateVideo" :append-to-body="true" width="90%"
         :before-close="handleClose" class="dialog_diy">
-        <div style="box-sizing:border-box;padding:15px" v-loading="loading" element-loading-text="小可正在努力生成中,请稍等...">
+        <div style="box-sizing:border-box;padding:15px" v-loading="loading" :element-loading-text="lang.ssGenWaitPls">
             <div style="position: relative; width: 100%;height: 40px;margin-bottom: 10px;">
-                <el-input class="inputC" style="height: 100%;" placeholder="搜索视频关键字(如需搜索多个可“,”隔开)" v-model="detail"
+                <el-input class="inputC" style="height: 100%;" :placeholder="lang.ssSearchVideoKey" v-model="detail"
                     @keyup.enter.native="searchA()"></el-input>
                 <div class="search_img" @click="searchA" style="right: 10px">
                     <img src="../../../assets/icon/search.png" alt />
                 </div>
             </div>
             <div class="nav_box">
-                <div class="nav" :class="{ active: navActive == 0 }" @click="navClick(0)">综合排序</div>
-                <div class="nav" :class="{ active: navActive == 1 }" @click="navClick(1)">最多播放</div>
-                <div class="nav" :class="{ active: navActive == 2 }" @click="navClick(2)">最新发布</div>
-                <div class="nav" :class="{ active: navActive == 3 }" @click="navClick(3)">最多弹幕</div>
-                <div class="nav" :class="{ active: navActive == 4 }" @click="navClick(4)">最多收藏</div>
+                <div class="nav" :class="{ active: navActive == 0 }" @click="navClick(0)">{{ lang.ssComprehensive }}</div>
+                <div class="nav" :class="{ active: navActive == 1 }" @click="navClick(1)">{{ lang.ssMostPlayed }}</div>
+                <div class="nav" :class="{ active: navActive == 2 }" @click="navClick(2)">{{ lang.ssLatest }}</div>
+                <div class="nav" :class="{ active: navActive == 3 }" @click="navClick(3)">{{ lang.ssMostDanmu }}</div>
+                <div class="nav" :class="{ active: navActive == 4 }" @click="navClick(4)">{{ lang.ssMostFav }}</div>
             </div>
             <div class="Box">
                 <div class="video_box video_box2" v-for="(item, index) in data" :key="index">
                     <!-- <img :src="item.pic" /> -->
                     <span class="name" v-html="item.title"></span>
-                    <span class="author">作者:{{ item.author }}</span>
+                    <span class="author">{{ lang.ssAuthor }}{{ item.author }}</span>
                     <span class="detail">{{ item.description }}</span>
                     <div class="tag" v-if="item.tag.split(',').length > 0">
                         <el-tooltip :content="tag" placement="top" effect="dark" v-for="(tag, index) in item.tag.split(',').slice(0, 5)" :key="index">
@@ -30,15 +30,15 @@
                         
                     </div>
                     <div class="btn">
-                        <span @click="openUrl(item.bvid)">查看</span>
-                        <span @click="checkUrl(item.title, item.bvid)">加入</span>
+                        <span @click="openUrl(item.bvid)">{{ lang.ssView }}</span>
+                        <span @click="checkUrl(item.title, item.bvid)">{{ lang.ssAdd }}</span>
                     </div>
                 </div>
-                <div v-if="data.length == 0" class="no_data">暂无数据</div>
+                <div v-if="data.length == 0" class="no_data">{{ lang.ssNoData }}</div>
             </div>
         </div>
         <span slot="footer" class="dialog-footer">
-            <el-button @click="close">关 闭</el-button>
+            <el-button @click="close">{{ lang.ssClose }}</el-button>
         </span>
     </el-dialog>
 </template>
@@ -115,14 +115,14 @@ export default {
         },
         checkUrl(name, id) {
             let json = {
-                name: "链接",
+                name: this.lang.ssLink,
                 title: name.replace(/<[^>]*>?/gm, ''),
                 // url: 'https://www.youtube.com/embed/'+id,
                 url: `//player.bilibili.com/player.html?isOutside=true&bvid=${id}`,
                 type: 8,
             }
             this.$emit('createAiVideo', json)
-            this.$message.success('加入成功')
+            this.$message.success(this.lang.ssAddSuccess)
         },
         changeRadio() {
             if (this.radio == 0) {
@@ -216,7 +216,7 @@ export default {
             let _this = this
             try {
                 if(!_this.detail){
-                    _this.$message.error("请输入关键字")
+                    _this.$message.error(_this.lang.ssEnterKeyword)
                     return
                 }
                 _this.loading = true
@@ -289,7 +289,7 @@ export default {
                         // );
                         _this.againEva2();
                     }else {
-                        _this.$message.error("哎呀,请求太多了,服务器忙不过来了,请自行搜索关键词")
+                        _this.$message.error(_this.lang.ssServerBusy)
                         _this.loading = false
                     }
                     // _this.loading = false
@@ -297,7 +297,7 @@ export default {
                 })
                 .catch((error) => {
                     console.log(error);
-                    _this.$message.error("哎呀,请求太多了,服务器忙不过来了,请自行搜索关键词")
+                    _this.$message.error(_this.lang.ssServerBusy)
                     _this.loading = false
                 });
         },

+ 10 - 10
src/components/pages/aiAddCourse/aiDialog.vue

@@ -1,29 +1,29 @@
 <template>
-    <el-dialog title="提示词设置" :visible.sync="dialogVisibleAiD" :append-to-body="true" width="650px" :before-close="handleClose"
+    <el-dialog :title="lang.ssPromptSet" :visible.sync="dialogVisibleAiD" :append-to-body="true" width="650px" :before-close="handleClose"
         class="dialog_diy">
         <div style="height: 100%;padding:15px">
             <div class="ai_nav">
-                <span :class="{active: type == 1}">基础创建</span>
+                <span :class="{active: type == 1}">{{ lang.ssBasicCreate }}</span>
             </div>
             <div class="ai_detail" v-if="type == 1">
-                <span class="title">{{text2 ? '默认的提示词1' : '默认的提示词'}}</span>
+                <span class="title">{{text2 ? lang.ssDefaultPrompt1 : lang.ssDefaultPrompt}}</span>
                 <textarea rows="10" class="binfo_input binfo_textarea" cols v-model="text"
-                      placeholder="请输入...."></textarea>
+                      :placeholder="lang.ssEnterPls"></textarea>
             </div>
             <div class="ai_detail" v-if="text2 && type == 1" style="margin-top: 10px;">
-                <span class="title">默认的提示词2</span>
+                <span class="title">{{ lang.ssDefaultPrompt2 }}</span>
                 <textarea rows="10" class="binfo_input binfo_textarea" cols v-model="text2"
-                      placeholder="请输入...."></textarea>
+                      :placeholder="lang.ssEnterPls"></textarea>
             </div>
             <div class="ai_detail" v-if="text3 && type == 1" style="margin-top: 10px;">
-                <span class="title">默认的提示词3</span>
+                <span class="title">{{ lang.ssDefaultPrompt3 }}</span>
                 <textarea rows="10" class="binfo_input binfo_textarea" cols v-model="text3"
-                      placeholder="请输入...."></textarea>
+                      :placeholder="lang.ssEnterPls"></textarea>
             </div>
         </div>
         <span slot="footer" class="dialog-footer">
-            <el-button @click="confirm" type="primary">确 定</el-button>
-            <el-button @click="close">关 闭</el-button>
+            <el-button @click="confirm" type="primary">{{ lang.ssConfirm }}</el-button>
+            <el-button @click="close">{{ lang.ssClose }}</el-button>
         </span>
     </el-dialog>
 </template>

+ 19 - 16
src/components/pages/aiAddCourse/aiTips.vue

@@ -13,10 +13,10 @@
             <div class="at_text_detail">
                 <span v-if="!edtiPan">{{ detail }}</span>
                 <textarea v-else rows="5" class="binfo_input binfo_textarea" cols v-model="eDetail"
-                    placeholder="请输入提示词"></textarea>
+                    :placeholder="lang.ssEnterPrompt"></textarea>
             </div>
             <div class="at_btn" v-if="edtiPan">
-                <el-button type="primary" size="mini" @click="confrim">保存</el-button>
+                <el-button type="primary" size="mini" @click="confrim">{{ lang.ssSave }}</el-button>
             </div>
         </div>
     </div>
@@ -45,21 +45,24 @@ export default {
     },
     data() {
         return {
-            aiJson: {
-                aiDetail: "请根据<课程简要描述>设计一个名为<课程名字>的<课程学科>学科的,面向<面向年级>的项目式学习课程。",
-                aiOutline: "请根据<课程简要描述>及#补充参考资料为这个名为<课程名字>的<课程学科>学科的,面向<面向年级>的项目式学习课程设计序列教学活动(需要每个任务都需要至少50个token的详细描述),每个教学活动的活动设计(可以直接使用文件内容)以及每个教学活动的评价量规(学生能做到...)。",
-                aiTask: "请根据<教学任务教案>。",
-                aiDetail1: "请根据<课程描述>,重新设计该教学任务。任务需要至少50个token的详细描述,包含任务设计,评价标准。",
-                aiDetail2: "请你在考虑到整个课程的情况下,优化该任务描述和任务名:<任务名>:<任务描述>",
-                aiDetail3: "请你在考虑到整个课程的情况下,**重点考虑该任务及工具名和工具内容的情况下**,优化工具指引。",
-                aiDetail4: "请你在考虑到整个课程的情况下,**重点考虑该任务详情**以及工具的情况下,优化评价标准。",
-                aiTeacher: "请根据<任务大纲>为每个教学任务设计详细的教案,其中包括但不仅限于该任务的教学目标,教学过程,师生研讨,拓展,学生任务单,相关知识点的练习或Qui以及答案等。",
-                teacherDetail: "请根据<教案描述>重新设计该教案。其中包括但不仅限于该任务的教学目标,教学过程,师生研讨,拓展,学生任务单,相关知识点的练习或Qui以及答案等。",
-            },
+            aiJson: {},
             eDetail: "",
             edtiPan: false
         }
     },
+    mounted() {
+        this.aiJson = {
+            aiDetail: this.lang.ssAiDetail,
+            aiOutline: this.lang.ssAiOutline,
+            aiTask: this.lang.ssAiTask,
+            aiDetail1: this.lang.ssAiDetail1,
+            aiDetail2: this.lang.ssAiDetail2,
+            aiDetail3: this.lang.ssAiDetail3,
+            aiDetail4: this.lang.ssAiDetail4,
+            aiTeacher: this.lang.ssAiTeacher,
+            teacherDetail: this.lang.ssTeacherDetail,
+        };
+    },
     methods: {
         edit() {
             if (this.edtiPan) {
@@ -73,9 +76,9 @@ export default {
             this.edtiPan = false;
         },
         reset() {
-            this.$confirm("确定重置此提示词么?", "提示", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
+            this.$confirm(this.lang.ssConfirmResetPrompt, this.lang.ssTip, {
+                confirmButtonText: this.lang.ssConfirm,
+                cancelButtonText: this.lang.ssCancel,
                 type: "warning",
             })
                 .then(() => {

+ 31 - 27
src/components/pages/aiAddCourse/evaList.vue

@@ -1,16 +1,16 @@
 <template>
     <div style="position: relative;" v-loading="loading" :style="{ minHeight: loading ? '250px' : 'auto' }"
-        element-loading-text="小可正在努力生成中,请稍等...">
-        <div class="c_pub_button_confirm stopBtn" v-if="loading" @click="cancelAjax('elist')">停止</div>
+        :element-loading-text="lang.ssGenWaitPls">
+        <div class="c_pub_button_confirm stopBtn" v-if="loading" @click="cancelAjax('elist')">{{ lang.ssStop }}</div>
         <div class="elist_title">
             <div style=" display: flex; flex-direction: row;align-items: center; margin: 20px 0; ">
-                <div class="lineTitle clineTitle">评价设置</div>
+                <div class="lineTitle clineTitle">{{ lang.ssEvalSetting }}</div>
                 <div style="margin-left:auto;display: flex;">
                     <div class="r_pub_button_op" style="margin-left:10px;" @click="openAiDialog('elist')">{{ (eList &&
-                        eList.length) ? '重新生成评价' : '生成评价' }}</div>
+                        eList.length) ? lang.ssRegenEval : lang.ssGenEval }}</div>
                     <div  v-if="eList && eList.length" class="show_taskD" :class="{ show: interPan }" @click="toggleInterPan">
                         <img src="../../../assets/icon/new/u_up.png" />
-                        {{ interPan ? '收起' : '展开' }}
+                        {{ interPan ? lang.ssCollapse : lang.ssExpand }}
                     </div>
                 </div>
             </div>
@@ -20,17 +20,17 @@
                 <div v-if="eList && eList.length" class="elist_input">
                     <div v-for="(eItem, eIndex) in eList" :key="eIndex" class="elist_input_box">
                         <div class="elist_inptu_text">
-                            <span>素养:</span>
-                            <input type="input" v-model="eItem.target" placeholder="填写目标"
+                            <span>{{ lang.ssLiteracy }}</span>
+                            <input type="input" v-model="eItem.target" :placeholder="lang.ssFillTarget"
                                 style="width: calc(100% - 280px);" />
                             <el-switch @change="forceUpdate" class="rateSwitch" style="margin-left: auto;"
-                                v-model="eItem.isai" active-color="#0061FF" active-text="AI评分" inactive-text=""
+                                v-model="eItem.isai" active-color="#0061FF" :active-text="lang.ssAiScoring" inactive-text=""
                                 active-value="1" inactive-value="2">
                             </el-switch>
                         </div>
                         <div class="elist_inptu_text">
-                            <span>评价标准:</span>
-                            <input type="input" v-model="eItem.detail" placeholder="填写评价标准" />
+                            <span>{{ lang.ssEvalStandard }}</span>
+                            <input type="input" v-model="eItem.detail" :placeholder="lang.ssFillEvalStd" />
                             <div class="remove" @click="
                                 deletEList(
                                     eIndex
@@ -38,18 +38,18 @@
                                 "></div>
                         </div>
                         <div class="elist_inptu_text" style="align-items: flex-start;">
-                            <span>评价细则:</span>
+                            <span>{{ lang.ssEvalDetail }}</span>
                             <div style="width: calc(100%);">
-                                <div @click="openRule(eIndex)" class="ruleBtn">{{ eItem.isrule ? '收起细则' : '展开细则' }}
+                                <div @click="openRule(eIndex)" class="ruleBtn">{{ eItem.isrule ? lang.ssCollapseDetail : lang.ssExpandDetail }}
                                 </div>
-                                <div style="width: calc(100%);" class='op_task_box' v-if="eItem.isrule" v-loading="ruleLoading.length && ruleLoading[eIndex]" element-loading-text='小可正在努力生成中,请稍等...'>
-                                    <div class="c_pub_button_confirm stopBtn" v-if="ruleLoading.length && ruleLoading[eIndex]" @click="cancelAjax('rule', eIndex)">停止</div>
+                                <div style="width: calc(100%);" class='op_task_box' v-if="eItem.isrule" v-loading="ruleLoading.length && ruleLoading[eIndex]" :element-loading-text="lang.ssGenWaitPls">
+                                    <div class="c_pub_button_confirm stopBtn" v-if="ruleLoading.length && ruleLoading[eIndex]" @click="cancelAjax('rule', eIndex)">{{ lang.ssStop }}</div>
                                     <textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols
-                                        v-model="eItem.rule" placeholder="请输入评价细则"></textarea>
+                                        v-model="eItem.rule" :placeholder="lang.ssEnterEvalDetail"></textarea>
                                     <div class="op_box">
                                         <div class="op_remark"></div>
                                         <div style="display: flex;">
-                                                <div class="r_pub_button_op" @click="openAiDialog('rule', eIndex)">{{ eList[eIndex].rule ? '重新生成' : '生成细则'}}</div>
+                                                <div class="r_pub_button_op" @click="openAiDialog('rule', eIndex)">{{ eList[eIndex].rule ? lang.ssRegenDetail : lang.ssGenDetail}}</div>
                                         </div>
                                     </div>
                                 </div>
@@ -61,7 +61,7 @@
                 <div class="eva_btn_box" v-if="eList && eList.length">
                     <div class="eva_btn_left_box">
                         <button class="c_pub_button_add pub_btn_eval_img" @click="addEList()">
-                            添加
+                            {{ lang.ssAdd }}
                         </button>
                     </div>
                 </div>
@@ -167,7 +167,7 @@ export default {
         },
         cancelAjax(type, index) {
             if(type == 'elist'){
-                this.$message.success("已经成功停止生成评价设置")
+                this.$message.success(this.lang.ssStopGenEvalSet)
                 if (this.cancelToken) {
                     this.cancelToken.cancel('Request canceled by the user.');
                     this.cancelToken = null;
@@ -177,7 +177,7 @@ export default {
                 }
                 this.$forceUpdate()
             }else if(type == 'rule'){
-                this.$message.success("已经成功停止生成评价细则")
+                this.$message.success(this.lang.ssStopGenEvalDetail)
                 if (this.cancelRuleToken && this.cancelRuleToken[index]) {
                     this.cancelRuleToken[index].cancel('Request canceled by the user.');
                     this.cancelRuleToken[index] = null;
@@ -205,7 +205,7 @@ export default {
         },
         openAiDialog(type, index) {
             if(this.loading){
-                this.$message.error(`生成中,请等待生成完毕后再继续`)
+                this.$message.error(this.lang.ssGenWaitFinish)
                 return
             }
             if (type == 'elist') {
@@ -224,7 +224,7 @@ export default {
         aiElist() {
             let _this = this
             if(!_this.knowFileids.length){
-                _this.$message.error(`请上传参考标准后,再生成评价`)
+                _this.$message.error(_this.lang.ssUploadRefGenEval)
                 return
             }
             _this.loading = true
@@ -410,11 +410,11 @@ Language: ${this.getLang()}
         },
         aiRule(index) {
             if(!this.knowFileids.length){
-                this.$message.error(`请上传参考标准后,再生成评价`)
+                this.$message.error(this.lang.ssUploadRefGenEval)
                 return
             }
             if (!this.eList[index].target || !this.eList[index].detail) {
-                this.$message.error(`评价信息完善信息后再生成细则`)
+                this.$message.error(this.lang.ssCompleteInfoGen)
                 return;
             }
             this.ruleLoading[index] = true
@@ -477,8 +477,8 @@ ${this.aiJson['aiRateRule']}
                             content = match[1].trim().replaceAll(' ', '');
                             // 获取匹配到的内容并去除两端空格 
                             console.log('contentInsideDoubleEquals', content);
-                            if (content.indexOf('0星') == -1 || content.indexOf('2星') == -1 || content.indexOf('3星') == -1 || content.indexOf('4星') == -1 || content.indexOf('5星') == -1) {
-                                console.log("未有星级。");
+                            if (content.indexOf(this.lang.ssStar0) == -1 || content.indexOf(this.lang.ssStar2) == -1 || content.indexOf(this.lang.ssStar3) == -1 || content.indexOf(this.lang.ssStar4) == -1 || content.indexOf(this.lang.ssStar5) == -1) {
+                                console.log(this.lang.ssNoStarLevel);
                                 this.cancelRuleToken[index] = null
                                 this.aiRule(index)
                                 return
@@ -497,7 +497,7 @@ ${this.aiJson['aiRateRule']}
                         this.$forceUpdate();
                         this.ruleLoading[index] = false
                         this.cancelRuleToken[index] = null
-                        this.$message.success(`评价细则生成成功`)
+                        this.$message.success(this.lang.ssEvalDetailGenOk)
                     } else {
                         this.ruleLoading[index] = false
                         this.cancelRuleToken[index] = null
@@ -522,7 +522,11 @@ ${this.aiJson['aiRateRule']}
             })
         },
         deletEList(index) {
-            this.$confirm('确定删除吗?').then(() => {
+            this.$confirm(this.lang.ssConfirmDelete, this.lang.ssTip, {
+                confirmButtonText: this.lang.ssConfirm,
+                cancelButtonText: this.lang.ssCancel,
+                type: "warning",
+            }).then(() => {
                 this.eList.splice(index, 1)
                 if (!this.eList.length) {
                     this.$emit('setEvaList', this.itemTaskIndex, this.toolIndex, this.eList)

+ 24 - 19
src/components/pages/aiAddCourse/record.vue

@@ -2,11 +2,11 @@
   <div class="record_box">
     <div class="ca-b-o-main2" style="height: 25px;">
       <div class="select_box" v-if="audioUrlArray.length">
-        <span>音频:</span>
+        <span>{{ lang.ssAudio }}</span>
         <el-select v-model="audioUrl">
-          <el-option v-for="(item, index) in audioUrlArray" :key="index" :label="'音频'+(index+1)" :value="item">
+          <el-option v-for="(item, index) in audioUrlArray" :key="index" :label="lang.ssAudioNum.replace(/\*/g, index+1)" :value="item">
             <div class="selectBox">
-              <span>{{ '音频'+(index+1) }}</span>
+              <span>{{ lang.ssAudioNum.replace(/\*/g, index+1) }}</span>
               <div class="controlsBox">
                 <span class="delSelect" @click.stop="delAudio(index)"></span>
               </div>
@@ -15,7 +15,7 @@
         </el-select>
       </div>
       <div class="select_box">
-        <span>语言:</span>
+        <span>{{ lang.ssLanguage }}</span>
         <el-select v-model="languageRadio">
           <el-option v-for="item in languageList"
             :key="item.label"
@@ -33,7 +33,7 @@
         v-loading="uploadFileLoading"
       >
         <span class="el-icon-microphone"></span>
-        <div class="ca-b-o-m-t-text">点击开始录音</div>
+        <div class="ca-b-o-m-t-text">{{ lang.ssClickStartRec }}</div>
       </div>
       <div
         class="ca-b-o-m-tapeTwo"
@@ -79,10 +79,10 @@
           />
           <div>
             <div v-if="recordedForm.status == 1" style="color: #ee3e3e">
-              录音中...
+              {{ lang.ssRecording }}
             </div>
             <div v-if="recordedForm.status == 2" style="color: #6b798e">
-              已暂停...
+              {{ lang.ssPaused }}
             </div>
             <span>{{ recordedForm.time }}</span>
           </div>
@@ -131,7 +131,7 @@
         style="height: 100%;"
         cols
         v-model="videoText"
-        placeholder="等待录音中..."
+        :placeholder="lang.ssWaitRecording"
       ></textarea>
     </div>
     <iframe
@@ -210,13 +210,18 @@ export default {
   },
   mounted() {
     this.videoText = this.videoText2;
+    this.languageList = [
+      { label: 2, lang: this.lang.ssMandarin },
+      { label: 3, lang: this.lang.ssCantonese },
+      { label: 13, lang: this.lang.ssEnglish }
+    ];
   },
   methods: {
     delAudio(index){
       
-      this.$confirm("是否确定删掉此音频?", "提醒", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
+      this.$confirm(this.lang.ssConfirmDelAudio, this.lang.ssReminder, {
+          confirmButtonText: this.lang.ssConfirm,
+          cancelButtonText: this.lang.ssCancel,
           type: "warning"
         })
         .then(() => {
@@ -251,7 +256,7 @@ export default {
         .padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
     },
     onClickStartRecord() {
-      if (this.uploadFileLoading) return this.$message.info("请稍等...");
+      if (this.uploadFileLoading) return this.$message.info(this.lang.ssWaitPls);
       // 开始录音
       if (this.audioUrl) {
         // this.$confirm("是否删掉此音频并开始录音?", "提醒", {
@@ -271,7 +276,7 @@ export default {
       } else if (this.controlsStatus != 1 && this.recordedForm.status == 0) {
         this.controlsStatus = 1;
         this.recordedForm.status = 1;
-        this.$message.success("已开始录音");
+        this.$message.success(this.lang.ssStartRecording);
         this.recordedForm.timer = setInterval(() => {
           this.recordedForm.timeDuration += 1;
           this.recordedForm.time = this.updateRecordedTime({
@@ -297,7 +302,7 @@ export default {
         }
       } else if ([1, 2].includes(this.recordedForm.status)) {
         this.controlsStatus = 1;
-        this.$message.info("还在录音中");
+        this.$message.info(this.lang.ssStillRecording);
       }
     },
     // ============ start 微软录音转译
@@ -355,7 +360,7 @@ export default {
       // 录音借宿
       iiframe.contentWindow.onSessionStopped = (s, e) => {
         this.recordedForm.status = 2;
-        this.$message.success("已停止录音");
+        this.$message.success(this.lang.ssStopRecording);
         console.log("停止录音👇");
         console.log("停止录音", e);
         this.recordedForm.audioBlob.push(e.preaudio);
@@ -367,7 +372,7 @@ export default {
       return p;
     },
     onClickPauseOrContinueRecord() {
-      if (this.recordedForm.loading) return this.$message.info("请稍等");
+      if (this.recordedForm.loading) return this.$message.info(this.lang.ssWaitPls);
       if (this.recordedForm.status == 1) {
         //暂停
         this.recordedForm.loading = true;
@@ -394,7 +399,7 @@ export default {
         this.recordedForm.loading = true;
         this.controlsStatus = 1;
         this.recordedForm.status = 1;
-        this.$message.success("已开始录音");
+        this.$message.success(this.lang.ssStartRecording);
         this.recordedForm.loading = false;
         this.recordedForm.timer = setInterval(() => {
           this.recordedForm.timeDuration += 1;
@@ -440,7 +445,7 @@ export default {
           this.recordedForm.status = 3;
           this.controlsStatus = 2;
           this.showGetTextLoading = false;
-          this.$message.success("已结束录音");
+          this.$message.success(this.lang.ssEndRecording);
           console.log("结束录音👇");
           console.log("结束录音", e);
           this.recordedForm.audioBlob.push(e.preaudio);
@@ -507,7 +512,7 @@ export default {
           })
           .send(function(err, data) {
             if (err) {
-              _this.$message.error("上传失败");
+              _this.$message.error(_this.lang.ssUploadFail);
               _this.uploadFileLoading = false;
               _this.loading = false;
               _this.progressData.uploadLoading = false;

+ 1 - 1
src/components/pages/aiAddCourse/templateDialog.vue

@@ -297,7 +297,7 @@ export default {
 	margin-right: 3px;
 	cursor: pointer; */
     cursor: pointer;
-    width: 136px;
+    width: 160px;
     height: 32px;
     display: flex;
     align-items: center;

+ 23 - 23
src/components/pages/aiAddCourse/tipsDialog.vue

@@ -1,36 +1,36 @@
 <template>
-    <el-dialog title="保存提示词模板" :visible.sync="dialogVisibleTips" :append-to-body="true" width="650px"
+    <el-dialog :title="lang.ssSavePromptTemp" :visible.sync="dialogVisibleTips" :append-to-body="true" width="650px"
         :before-close="handleClose" class="dialog_diy">
         <div style="height: 100%;padding:15px">
             <div class="t_box">
-                <span>模板名称:</span>
+                <span>{{ lang.ssTemplateName }}</span>
                 <input type="text" class="binfo_input" v-model="title">
             </div>
             <div class="t_box">
-                <span>模板描述:</span>
-                <textarea rows="3" class="binfo_input binfo_textarea" cols placeholder="请输入内容"
+                <span>{{ lang.ssTemplateDesc }}</span>
+                <textarea rows="3" class="binfo_input binfo_textarea" cols :placeholder="lang.ssEnterContent"
                     v-model="detail"></textarea>
             </div>
             <div class="t_box">
-                <span>权限:</span>
+                <span>{{ lang.ssPermission }}</span>
                 <el-radio-group v-model="radio">
-                    <el-radio :label="0">个人</el-radio>
-                    <el-radio :label="1">组织内</el-radio>
-                    <el-radio :label="2">所有人</el-radio>
+                    <el-radio :label="0">{{ lang.ssPersonal }}</el-radio>
+                    <el-radio :label="1">{{ lang.ssOrgInternal }}</el-radio>
+                    <el-radio :label="2">{{ lang.ssEveryone }}</el-radio>
                 </el-radio-group>
             </div>
             <div class="t_box">
-                <span>是否公开提示词:</span>
+                <span>{{ lang.ssPublicPrompt }}</span>
                 <el-radio-group v-model="isT">
-                    <el-radio :label="1">不公开</el-radio>
-                    <el-radio :label="2">公开</el-radio>
+                    <el-radio :label="1">{{ lang.ssNotPublic }}</el-radio>
+                    <el-radio :label="2">{{ lang.ssPublic }}</el-radio>
                 </el-radio-group>
             </div>
         </div>
         <span slot="footer" class="dialog-footer">
-            <el-button @click="selectT(2)" type="primary">确定并保存课程</el-button>
-            <el-button @click="selectT" type="primary">确 定</el-button>
-            <el-button @click="close">关 闭</el-button>
+            <el-button @click="selectT(2)" type="primary">{{ lang.ssConfirmSaveCourse }}</el-button>
+            <el-button @click="selectT" type="primary">{{ lang.ssConfirm }}</el-button>
+            <el-button @click="close">{{ lang.ssClose }}</el-button>
         </span>
     </el-dialog>
 </template>
@@ -95,16 +95,16 @@ export default {
         },
         selectT(type) {
             if (!this.title) {
-                this.$message.error('请输入模板名称');
+                this.$message.error(this.lang.ssEnterTemplateName);
                 return
             }
             if (this.templateid) {
                 this.$confirm(
-                    "确定修改此模板嘛?",
-                    "提示",
+                    this.lang.ssConfirmModifyTemp,
+                    this.lang.ssTip,
                     {
-                        confirmButtonText: "确定",
-                        cancelButtonText: "取消",
+                        confirmButtonText: this.lang.ssConfirm,
+                        cancelButtonText: this.lang.ssCancel,
                         type: "warning",
                     }
                 )
@@ -161,7 +161,7 @@ export default {
             this.ajax
                 .post(this.$store.state.api + "addTipsTemplate2", params)
                 .then((res) => {
-                    this.$message.success("保存成功");
+                    this.$message.success(this.lang.ssSaveSuccess);
                     console.log(res.data);
                     this.$emit('update:templateid', res.data[0][0].id)
                     console.log(this.templateid)
@@ -173,7 +173,7 @@ export default {
                     this.close();
                 })
                 .catch((err) => {
-                    this.$message.error("网络不佳");
+                    this.$message.error(this.lang.ssNetPoor);
                     console.error(err);
                 });
         },
@@ -189,7 +189,7 @@ export default {
             this.ajax
                 .post(this.$store.state.api + "addTipsTemplate2", params)
                 .then((res) => {
-                    this.$message.success("修改成功");
+                    this.$message.success(this.lang.ssModifySuccess);
                     if(type == 2){
                         this.$emit('addWork', type)
                     }else{
@@ -198,7 +198,7 @@ export default {
                     this.close();
                 })
                 .catch((err) => {
-                    this.$message.error("网络不佳");
+                    this.$message.error(this.lang.ssNetPoor);
                     console.error(err);
                 });
         }

+ 8 - 8
src/components/pages/components/CodeEditor.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog
-      :title="type == 0 ? '添加HTML' : '修改HTML'"
+      :title="type == 0 ? lang.ssAddHTML : lang.ssModifyHTML"
       :visible.sync="CodeVisible"
       :append-to-body="true"
       width="70%"
@@ -10,12 +10,12 @@
     >
       <div v-loading="loading">
         <el-form>
-          <el-form-item label="标题">
+          <el-form-item :label="lang.ssTitle">
             <el-input
               ref="fuInput"
               v-model="titCon"
               auto-complete="off"
-              placeholder="请输入标题..."
+              :placeholder="lang.ssEnterTitle"
             ></el-input>
           </el-form-item>
           <!-- <div>代码编辑器</div> -->
@@ -26,8 +26,8 @@
           ></ace-editor>
         </el-form>
         <div style="width: 100%;display: flex;justify-content: flex-end;margin-top: 20px;">
-          <el-button @click="handleClose">取 消</el-button>
-          <el-button type="primary" @click="upLoad">确定</el-button>
+          <el-button @click="handleClose">{{ lang.ssCancel }}</el-button>
+          <el-button type="primary" @click="upLoad">{{ lang.ssConfirm }}</el-button>
         </div>
       </div>
     </el-dialog>
@@ -62,8 +62,8 @@ export default {
   methods: {
     upLoad() {
       if (!this.titCon.trim())
-        return this.$message.info("请将名称信息补充完整");
-      if (!this.code.trim()) return this.$message.info("请将代码信息补充完整");
+        return this.$message.info(this.lang.ssFillNameInfo);
+      if (!this.code.trim()) return this.$message.info(this.lang.ssFillCodeInfo);
 
       this.loading = true;
       // console.log(this.code)
@@ -136,7 +136,7 @@ export default {
               // a.splice(a.length - 1, a.length);
               this.loading = false;
 
-              _this.$message.error("上传失败");
+              _this.$message.error(_this.lang.ssUploadFail);
             } else {
               //上传成功处理
               // _this.unitJson[_this.unitIndex].chapterInfo[0].fileList1.push({

+ 316 - 305
src/components/pages/components/appDialog.vue

@@ -1,6 +1,6 @@
 <template>
   <el-dialog
-    title="应用中心"
+    :title="lang.ssAppCenter"
     :visible.sync="dialogVisible"
     width="calc(100% - 20px)"
     class="el-dialogClass dialog_diy"
@@ -13,7 +13,7 @@
             <div>
               <el-select
                 v-model="selectJuri"
-                placeholder="请选择显示范围"
+                :placeholder="lang.ssSelectScope"
                 @change="changeSelectType"
                 style="width: 120px;margin-right: 10px;"
               >
@@ -26,7 +26,7 @@
               </el-select>
               <el-select
                 v-model="selectLabel"
-                placeholder="请选择类型"
+                :placeholder="lang.ssSelectType"
                 @change="changeSelectType"
                 style="width: 110px;margin-right: 10px;"
               >
@@ -40,7 +40,7 @@
 
               <el-select
                 v-model="statusType"
-                placeholder="请选择状态"
+                :placeholder="lang.ssSelectStatus"
                 @change="changeSelectType"
                 style="width: 110px;margin-right: 10px;"
               >
@@ -70,7 +70,7 @@
               <el-input
                 v-model="searchText"
                 style="width: 250px;margin-right: 10px;"
-                placeholder="请输入应用名称"
+                :placeholder="lang.ssEnterAppName"
                 @keyup.enter.native="getData"
               >
                 <i
@@ -86,7 +86,7 @@
             <span
               :class="{ ac_h_b_typeList_active: showType === '' }"
               @click="changeType('')"
-              >全部</span
+              >{{ lang.ssAll }}</span
             >
             <span
               v-for="item in typeList"
@@ -100,323 +100,331 @@
       </div>
 
       <div class="ac_content">
-        <div
-          class="ac_c_item"
-          v-if="showType !== '' && !getDataLoading"
-          v-for="(item, index) in dataList"
-          :key="item.id"
-          :class="{checkActive: appJson.id == item.id || selectAppObj.id==item.id || selectAppList.map(i=>i.id).includes(item.id)}"
-          @click="checkApp(item)"
-        >
-          <div class="ac_c_i_top">
-            <div class="ac_c_i_t_left">
-              <img v-if="item.json.icon" :src="item.json.icon" />
-              <svg
-                v-else
-                t="1732605901531"
-                class="icon"
-                viewBox="0 0 1024 1024"
-                version="1.1"
-                xmlns="http://www.w3.org/2000/svg"
-                p-id="4275"
-                width="200"
-                height="200"
-              >
-                <path
-                  d="M179.2 153.6a51.2 51.2 0 0 0-51.2 51.2v128a51.2 51.2 0 0 0 51.2 51.2h128a51.2 51.2 0 0 0 51.2-51.2V204.8a51.2 51.2 0 0 0-51.2-51.2H179.2z m0-102.4h128a153.6 153.6 0 0 1 153.6 153.6v128a153.6 153.6 0 0 1-153.6 153.6H179.2a153.6 153.6 0 0 1-153.6-153.6V204.8a153.6 153.6 0 0 1 153.6-153.6z m0 614.4a51.2 51.2 0 0 0-51.2 51.2v128a51.2 51.2 0 0 0 51.2 51.2h128a51.2 51.2 0 0 0 51.2-51.2V716.8a51.2 51.2 0 0 0-51.2-51.2H179.2z m0-102.4h128a153.6 153.6 0 0 1 153.6 153.6v128a153.6 153.6 0 0 1-153.6 153.6H179.2a153.6 153.6 0 0 1-153.6-153.6V716.8a153.6 153.6 0 0 1 153.6-153.6z m611.84-403.4048a51.2 51.2 0 0 0-72.3968 0L646.144 232.2432a51.2 51.2 0 0 0 0 72.3968l72.448 72.3968a51.2 51.2 0 0 0 72.3968 0l72.3968-72.3968a51.2 51.2 0 0 0 0-72.3968L791.04 159.744z m72.3968-72.3968l72.3968 72.3968a153.6 153.6 0 0 1 0 217.2416l-72.3968 72.3968a153.6 153.6 0 0 1-217.2416 0l-72.3968-72.3968a153.6 153.6 0 0 1 0-217.2416l72.3968-72.3968a153.6 153.6 0 0 1 217.2416 0zM699.7504 896a51.2 51.2 0 0 1 0 102.4A162.1504 162.1504 0 0 1 537.6 836.2496v-110.8992A162.1504 162.1504 0 0 1 699.7504 563.2h110.8992a162.1504 162.1504 0 0 1 162.1504 162.1504v8.448a51.2 51.2 0 0 1-102.4 0v-8.448c0-33.024-26.7264-59.7504-59.7504-59.7504h-110.8992c-33.024 0-59.7504 26.7264-59.7504 59.7504v110.8992c0 33.024 26.7264 59.7504 59.7504 59.7504z"
-                  fill="#2C6DD2"
-                  p-id="4276"
-                ></path>
-                <path
-                  d="M791.4496 160a51.2 51.2 0 0 0-72.3968 0l-72.448 72.3968a51.2 51.2 0 0 0 0 72.3968l72.448 72.3968a51.2 51.2 0 0 0 72.3968 0l72.3968-72.3968a51.2 51.2 0 0 0 0-72.3968l-72.3968-72.3968z"
-                  fill="#20C997"
-                  p-id="4277"
-                ></path>
-              </svg>
+       
+
+        <template v-for="(item) in dataList">
+          <div
+            class="ac_c_item"
+            v-if="showType !== '' && !getDataLoading"
+            :key="item.id"
+            :class="{checkActive: appJson.id == item.id || selectAppObj.id==item.id || selectAppList.map(i=>i.id).includes(item.id)}"
+            @click="checkApp(item)"
+          >
+            <div class="ac_c_i_top">
+              <div class="ac_c_i_t_left">
+                <img v-if="item.json.icon" :src="item.json.icon" />
+                <svg
+                  v-else
+                  t="1732605901531"
+                  class="icon"
+                  viewBox="0 0 1024 1024"
+                  version="1.1"
+                  xmlns="http://www.w3.org/2000/svg"
+                  p-id="4275"
+                  width="200"
+                  height="200"
+                >
+                  <path
+                    d="M179.2 153.6a51.2 51.2 0 0 0-51.2 51.2v128a51.2 51.2 0 0 0 51.2 51.2h128a51.2 51.2 0 0 0 51.2-51.2V204.8a51.2 51.2 0 0 0-51.2-51.2H179.2z m0-102.4h128a153.6 153.6 0 0 1 153.6 153.6v128a153.6 153.6 0 0 1-153.6 153.6H179.2a153.6 153.6 0 0 1-153.6-153.6V204.8a153.6 153.6 0 0 1 153.6-153.6z m0 614.4a51.2 51.2 0 0 0-51.2 51.2v128a51.2 51.2 0 0 0 51.2 51.2h128a51.2 51.2 0 0 0 51.2-51.2V716.8a51.2 51.2 0 0 0-51.2-51.2H179.2z m0-102.4h128a153.6 153.6 0 0 1 153.6 153.6v128a153.6 153.6 0 0 1-153.6 153.6H179.2a153.6 153.6 0 0 1-153.6-153.6V716.8a153.6 153.6 0 0 1 153.6-153.6z m611.84-403.4048a51.2 51.2 0 0 0-72.3968 0L646.144 232.2432a51.2 51.2 0 0 0 0 72.3968l72.448 72.3968a51.2 51.2 0 0 0 72.3968 0l72.3968-72.3968a51.2 51.2 0 0 0 0-72.3968L791.04 159.744z m72.3968-72.3968l72.3968 72.3968a153.6 153.6 0 0 1 0 217.2416l-72.3968 72.3968a153.6 153.6 0 0 1-217.2416 0l-72.3968-72.3968a153.6 153.6 0 0 1 0-217.2416l72.3968-72.3968a153.6 153.6 0 0 1 217.2416 0zM699.7504 896a51.2 51.2 0 0 1 0 102.4A162.1504 162.1504 0 0 1 537.6 836.2496v-110.8992A162.1504 162.1504 0 0 1 699.7504 563.2h110.8992a162.1504 162.1504 0 0 1 162.1504 162.1504v8.448a51.2 51.2 0 0 1-102.4 0v-8.448c0-33.024-26.7264-59.7504-59.7504-59.7504h-110.8992c-33.024 0-59.7504 26.7264-59.7504 59.7504v110.8992c0 33.024 26.7264 59.7504 59.7504 59.7504z"
+                    fill="#2C6DD2"
+                    p-id="4276"
+                  ></path>
+                  <path
+                    d="M791.4496 160a51.2 51.2 0 0 0-72.3968 0l-72.448 72.3968a51.2 51.2 0 0 0 0 72.3968l72.448 72.3968a51.2 51.2 0 0 0 72.3968 0l72.3968-72.3968a51.2 51.2 0 0 0 0-72.3968l-72.3968-72.3968z"
+                    fill="#20C997"
+                    p-id="4277"
+                  ></path>
+                </svg>
+              </div>
+              <div class="ac_c_i_t_right">
+                <div class="ac_c_i_t_r_top">
+                  <el-tooltip
+                    class="item"
+                    effect="light"
+                    :content="item.name"
+                    placement="top"
+                  >
+                    <span>{{ item.name }}</span>
+                  </el-tooltip>
+                </div>
+                <div class="ac_c_i_t_r_center">
+                  <span>@{{ item.username }}</span>
+                  <div v-if="item.label === 'workflow'">
+                    <img
+                      src="../../../assets/icon/appStore/workflow.svg"
+                      alt=""
+                    />
+                    {{ lang.ssWorkflow }}
+                  </div>
+                  <div v-if="item.label === 'agent'">
+                    <img src="../../../assets/icon/appStore/agent.svg" alt="" />
+                    {{ lang.ssAgent }}
+                  </div>
+                </div>
+                <div class="ac_c_i_t_r_bottom">
+                  {{ item.detail }}
+                </div>
+              </div>
             </div>
-            <div class="ac_c_i_t_right">
-              <div class="ac_c_i_t_r_top">
+            <div class="ac_c_i_bottom">
+              <div class="ac_c_i_b_left">
+                <el-tooltip
+                  class="item"
+                  effect="light"
+                  :content="lang.ssCopyCount"
+                  placement="top"
+                >
+                  <div>
+                    <img src="../../../assets/icon/appStore/user_copy.svg" />
+                    <span>{{ item.copyCount }}</span>
+                  </div>
+                </el-tooltip>
+                <el-tooltip
+                  class="item"
+                  effect="light"
+                  :content="item.likeId ? lang.ssCancelLike : lang.ssLike"
+                  placement="top"
+                >
+                  <div>
+                    <img
+                      :src="
+                        require('../../../assets/icon/appStore/praise_default.svg')
+                      "
+                      v-if="!item.likeId"
+                      style="cursor: pointer;"
+                      @click.stop="praiseFn(item, 0)"
+                    />
+                    <img
+                      :src="
+                        require('../../../assets/icon/appStore/praise_active.svg')
+                      "
+                      v-else
+                      style="cursor: pointer;"
+                      @click.stop="praiseFn(item, 1)"
+                    />
+                    <span>{{ item.likeCount }}</span>
+                  </div>
+                </el-tooltip>
                 <el-tooltip
                   class="item"
                   effect="light"
-                  :content="item.name"
+                  :content="item.collectId ? lang.ssCancelCollect : lang.ssCollect"
                   placement="top"
                 >
-                  <span>{{ item.name }}</span>
+                  <div>
+                    <img
+                      src="../../../assets/icon/appStore/collect_default.svg"
+                      v-if="!item.collectId"
+                      style="cursor: pointer;"
+                      @click.stop="collectFn(item, 0)"
+                    />
+                    <img
+                      src="../../../assets/icon/appStore/collect_active.svg"
+                      v-else
+                      style="cursor: pointer;"
+                      @click.stop="collectFn(item, 1)"
+                    />
+                    <span>{{ item.collectCount }}</span>
+                  </div>
                 </el-tooltip>
               </div>
-              <div class="ac_c_i_t_r_center">
-                <span>@{{ item.username }}</span>
-                <div v-if="item.label === 'workflow'">
-                  <img
-                    src="../../../assets/icon/appStore/workflow.svg"
-                    alt=""
-                  />
-                  工作流
-                </div>
-                <div v-if="item.label === 'agent'">
-                  <img src="../../../assets/icon/appStore/agent.svg" alt="" />
-                  智能体
-                </div>
+              <div class="ac_c_i_b_right" v-if="item.json.status">
+                <span class="ac_c_i_b_r_type2" v-if="item.json.status === '1'"
+                  >{{ lang.ssTest }}</span
+                >
+                <span class="ac_c_i_b_r_type1" v-if="item.json.status === '2'"
+                  >{{ lang.ssStable }}</span
+                >
               </div>
-              <div class="ac_c_i_t_r_bottom">
-                {{ item.detail }}
+              <div class="ac_c_i_b_right" style="margin-left: 10px">
+                <span class="ac_c_i_b_r_type3" @click.stop="openApp(item)">{{ lang.ssView }}</span>
               </div>
             </div>
           </div>
-          <div class="ac_c_i_bottom">
-            <div class="ac_c_i_b_left">
-              <el-tooltip
-                class="item"
-                effect="light"
-                content="被复制数"
-                placement="top"
-              >
-                <div>
-                  <img src="../../../assets/icon/appStore/user_copy.svg" />
-                  <span>{{ item.copyCount }}</span>
-                </div>
-              </el-tooltip>
-              <el-tooltip
-                class="item"
-                effect="light"
-                :content="item.likeId ? '取消点赞' : '点赞'"
-                placement="top"
-              >
-                <div>
-                  <img
-                    :src="
-                      require('../../../assets/icon/appStore/praise_default.svg')
-                    "
-                    v-if="!item.likeId"
-                    style="cursor: pointer;"
-                    @click.stop="praiseFn(item, 0)"
-                  />
-                  <img
-                    :src="
-                      require('../../../assets/icon/appStore/praise_active.svg')
-                    "
-                    v-else
-                    style="cursor: pointer;"
-                    @click.stop="praiseFn(item, 1)"
-                  />
-                  <span>{{ item.likeCount }}</span>
-                </div>
-              </el-tooltip>
-              <el-tooltip
-                class="item"
-                effect="light"
-                :content="item.collectId ? '取消收藏' : '收藏'"
-                placement="top"
-              >
-                <div>
-                  <img
-                    src="../../../assets/icon/appStore/collect_default.svg"
-                    v-if="!item.collectId"
-                    style="cursor: pointer;"
-                    @click.stop="collectFn(item, 0)"
-                  />
-                  <img
-                    src="../../../assets/icon/appStore/collect_active.svg"
-                    v-else
-                    style="cursor: pointer;"
-                    @click.stop="collectFn(item, 1)"
-                  />
-                  <span>{{ item.collectCount }}</span>
-                </div>
-              </el-tooltip>
-            </div>
-            <div class="ac_c_i_b_right" v-if="item.json.status">
-              <span class="ac_c_i_b_r_type2" v-if="item.json.status === '1'"
-                >测试</span
-              >
-              <span class="ac_c_i_b_r_type1" v-if="item.json.status === '2'"
-                >稳定</span
-              >
-            </div>
-            <div class="ac_c_i_b_right" style="margin-left: 10px">
-              <span class="ac_c_i_b_r_type3" @click.stop="openApp(item)">查看</span>
-            </div>
-          </div>
-        </div>
+        </template>
+       
 
         <div class="ac_c_typeCard" v-if="showType == ''">
-          <div class="ac_c_tc_item" v-for="(item2, index2) in typeList">
+          <div class="ac_c_tc_item" v-for="(item2, index2) in typeList" :key="index2">
             <div class="ac_c_tc_i_top">
               <div>{{ item2.name }}</div>
 
               <span @click="changeType(item2.id)"
-                >查看更多
+                >{{ lang.ssViewMore }}
                 <img src="../../../assets/icon/appStore/arrow.svg" />
               </span>
             </div>
             <div class="ac_c_tc_i_bottom">
-              <div
-                class="ac_c_item"
-                v-if="index < 8"
-                v-for="(item, index) in dataList.filter(
+              <template  v-for="(item, index) in dataList.filter(
                   i => i.type == item2.id
-                )"
-                :key="item.id"
-                 @click="checkApp(item)" :class="{checkActive: appJson.id == item.id  || selectAppObj.id == item.id|| selectAppList.map(i=>i.id).includes(item.id)}"
-              >
-                <div class="ac_c_i_top">
-                  <div class="ac_c_i_t_left">
-                    <img v-if="item.json.icon" :src="item.json.icon" />
-                    <svg
-                      v-else
-                      t="1732605901531"
-                      class="icon"
-                      viewBox="0 0 1024 1024"
-                      version="1.1"
-                      xmlns="http://www.w3.org/2000/svg"
-                      p-id="4275"
-                      width="200"
-                      height="200"
-                    >
-                      <path
-                        d="M179.2 153.6a51.2 51.2 0 0 0-51.2 51.2v128a51.2 51.2 0 0 0 51.2 51.2h128a51.2 51.2 0 0 0 51.2-51.2V204.8a51.2 51.2 0 0 0-51.2-51.2H179.2z m0-102.4h128a153.6 153.6 0 0 1 153.6 153.6v128a153.6 153.6 0 0 1-153.6 153.6H179.2a153.6 153.6 0 0 1-153.6-153.6V204.8a153.6 153.6 0 0 1 153.6-153.6z m0 614.4a51.2 51.2 0 0 0-51.2 51.2v128a51.2 51.2 0 0 0 51.2 51.2h128a51.2 51.2 0 0 0 51.2-51.2V716.8a51.2 51.2 0 0 0-51.2-51.2H179.2z m0-102.4h128a153.6 153.6 0 0 1 153.6 153.6v128a153.6 153.6 0 0 1-153.6 153.6H179.2a153.6 153.6 0 0 1-153.6-153.6V716.8a153.6 153.6 0 0 1 153.6-153.6z m611.84-403.4048a51.2 51.2 0 0 0-72.3968 0L646.144 232.2432a51.2 51.2 0 0 0 0 72.3968l72.448 72.3968a51.2 51.2 0 0 0 72.3968 0l72.3968-72.3968a51.2 51.2 0 0 0 0-72.3968L791.04 159.744z m72.3968-72.3968l72.3968 72.3968a153.6 153.6 0 0 1 0 217.2416l-72.3968 72.3968a153.6 153.6 0 0 1-217.2416 0l-72.3968-72.3968a153.6 153.6 0 0 1 0-217.2416l72.3968-72.3968a153.6 153.6 0 0 1 217.2416 0zM699.7504 896a51.2 51.2 0 0 1 0 102.4A162.1504 162.1504 0 0 1 537.6 836.2496v-110.8992A162.1504 162.1504 0 0 1 699.7504 563.2h110.8992a162.1504 162.1504 0 0 1 162.1504 162.1504v8.448a51.2 51.2 0 0 1-102.4 0v-8.448c0-33.024-26.7264-59.7504-59.7504-59.7504h-110.8992c-33.024 0-59.7504 26.7264-59.7504 59.7504v110.8992c0 33.024 26.7264 59.7504 59.7504 59.7504z"
-                        fill="#2C6DD2"
-                        p-id="4276"
-                      ></path>
-                      <path
-                        d="M791.4496 160a51.2 51.2 0 0 0-72.3968 0l-72.448 72.3968a51.2 51.2 0 0 0 0 72.3968l72.448 72.3968a51.2 51.2 0 0 0 72.3968 0l72.3968-72.3968a51.2 51.2 0 0 0 0-72.3968l-72.3968-72.3968z"
-                        fill="#20C997"
-                        p-id="4277"
-                      ></path>
-                    </svg>
+                )">
+                <div
+                  class="ac_c_item"
+                  v-if="index < 8"
+                
+                  :key="item.id"
+                  @click="checkApp(item)" :class="{checkActive: appJson.id == item.id  || selectAppObj.id == item.id|| selectAppList.map(i=>i.id).includes(item.id)}"
+                >
+                  <div class="ac_c_i_top">
+                    <div class="ac_c_i_t_left">
+                      <img v-if="item.json.icon" :src="item.json.icon" />
+                      <svg
+                        v-else
+                        t="1732605901531"
+                        class="icon"
+                        viewBox="0 0 1024 1024"
+                        version="1.1"
+                        xmlns="http://www.w3.org/2000/svg"
+                        p-id="4275"
+                        width="200"
+                        height="200"
+                      >
+                        <path
+                          d="M179.2 153.6a51.2 51.2 0 0 0-51.2 51.2v128a51.2 51.2 0 0 0 51.2 51.2h128a51.2 51.2 0 0 0 51.2-51.2V204.8a51.2 51.2 0 0 0-51.2-51.2H179.2z m0-102.4h128a153.6 153.6 0 0 1 153.6 153.6v128a153.6 153.6 0 0 1-153.6 153.6H179.2a153.6 153.6 0 0 1-153.6-153.6V204.8a153.6 153.6 0 0 1 153.6-153.6z m0 614.4a51.2 51.2 0 0 0-51.2 51.2v128a51.2 51.2 0 0 0 51.2 51.2h128a51.2 51.2 0 0 0 51.2-51.2V716.8a51.2 51.2 0 0 0-51.2-51.2H179.2z m0-102.4h128a153.6 153.6 0 0 1 153.6 153.6v128a153.6 153.6 0 0 1-153.6 153.6H179.2a153.6 153.6 0 0 1-153.6-153.6V716.8a153.6 153.6 0 0 1 153.6-153.6z m611.84-403.4048a51.2 51.2 0 0 0-72.3968 0L646.144 232.2432a51.2 51.2 0 0 0 0 72.3968l72.448 72.3968a51.2 51.2 0 0 0 72.3968 0l72.3968-72.3968a51.2 51.2 0 0 0 0-72.3968L791.04 159.744z m72.3968-72.3968l72.3968 72.3968a153.6 153.6 0 0 1 0 217.2416l-72.3968 72.3968a153.6 153.6 0 0 1-217.2416 0l-72.3968-72.3968a153.6 153.6 0 0 1 0-217.2416l72.3968-72.3968a153.6 153.6 0 0 1 217.2416 0zM699.7504 896a51.2 51.2 0 0 1 0 102.4A162.1504 162.1504 0 0 1 537.6 836.2496v-110.8992A162.1504 162.1504 0 0 1 699.7504 563.2h110.8992a162.1504 162.1504 0 0 1 162.1504 162.1504v8.448a51.2 51.2 0 0 1-102.4 0v-8.448c0-33.024-26.7264-59.7504-59.7504-59.7504h-110.8992c-33.024 0-59.7504 26.7264-59.7504 59.7504v110.8992c0 33.024 26.7264 59.7504 59.7504 59.7504z"
+                          fill="#2C6DD2"
+                          p-id="4276"
+                        ></path>
+                        <path
+                          d="M791.4496 160a51.2 51.2 0 0 0-72.3968 0l-72.448 72.3968a51.2 51.2 0 0 0 0 72.3968l72.448 72.3968a51.2 51.2 0 0 0 72.3968 0l72.3968-72.3968a51.2 51.2 0 0 0 0-72.3968l-72.3968-72.3968z"
+                          fill="#20C997"
+                          p-id="4277"
+                        ></path>
+                      </svg>
+                    </div>
+                    <div class="ac_c_i_t_right">
+                      <div class="ac_c_i_t_r_top">
+                        <el-tooltip
+                          class="item"
+                          effect="light"
+                          :content="item.name"
+                          placement="top"
+                        >
+                          <span>{{ item.name }}</span>
+                        </el-tooltip>
+                      </div>
+                      <div class="ac_c_i_t_r_center">
+                        <span>@{{ item.username }}</span>
+                        <div v-if="item.label === 'workflow'">
+                          <img
+                            src="../../../assets/icon/appStore/workflow.svg"
+                            alt=""
+                          />
+                          {{ lang.ssWorkflow }}
+                        </div>
+                        <div v-if="item.label === 'agent'">
+                          <img
+                            src="../../../assets/icon/appStore/agent.svg"
+                            alt=""
+                          />
+                          {{ lang.ssAgent }}
+                        </div>
+                      </div>
+                      <div class="ac_c_i_t_r_bottom">
+                        {{ item.detail }}
+                      </div>
+                    </div>
                   </div>
-                  <div class="ac_c_i_t_right">
-                    <div class="ac_c_i_t_r_top">
+                  <div class="ac_c_i_bottom">
+                    <div class="ac_c_i_b_left">
+                      <el-tooltip
+                        class="item"
+                        effect="light"
+                        :content="lang.ssCopyCount"
+                        placement="top"
+                      >
+                        <div>
+                          <img
+                            src="../../../assets/icon/appStore/user_copy.svg"
+                          />
+                          <span>{{ item.copyCount }}</span>
+                        </div>
+                      </el-tooltip>
                       <el-tooltip
                         class="item"
                         effect="light"
-                        :content="item.name"
+                        :content="item.likeId ? lang.ssCancelLike : lang.ssLike"
                         placement="top"
                       >
-                        <span>{{ item.name }}</span>
+                        <div>
+                          <img
+                            :src="
+                              require('../../../assets/icon/appStore/praise_default.svg')
+                            "
+                            v-if="!item.likeId"
+                            style="cursor: pointer;"
+                            @click.stop="praiseFn(item, 0)"
+                          />
+                          <img
+                            :src="
+                              require('../../../assets/icon/appStore/praise_active.svg')
+                            "
+                            v-else
+                            style="cursor: pointer;"
+                            @click.stop="praiseFn(item, 1)"
+                          />
+                          <span>{{ item.likeCount }}</span>
+                        </div>
+                      </el-tooltip>
+                      <el-tooltip
+                        class="item"
+                        effect="light"
+                        :content="item.collectId ? lang.ssCancelCollect : lang.ssCollect"
+                        placement="top"
+                      >
+                        <div>
+                          <img
+                            src="../../../assets/icon/appStore/collect_default.svg"
+                            v-if="!item.collectId"
+                            style="cursor: pointer;"
+                            @click="collectFn(item, 0)"
+                          />
+                          <img
+                            src="../../../assets/icon/appStore/collect_active.svg"
+                            v-else
+                            style="cursor: pointer;"
+                            @click="collectFn(item, 1)"
+                          />
+                          <span>{{ item.collectCount }}</span>
+                        </div>
                       </el-tooltip>
                     </div>
-                    <div class="ac_c_i_t_r_center">
-                      <span>@{{ item.username }}</span>
-                      <div v-if="item.label === 'workflow'">
-                        <img
-                          src="../../../assets/icon/appStore/workflow.svg"
-                          alt=""
-                        />
-                        工作流
-                      </div>
-                      <div v-if="item.label === 'agent'">
-                        <img
-                          src="../../../assets/icon/appStore/agent.svg"
-                          alt=""
-                        />
-                        智能体
-                      </div>
+                    <div class="ac_c_i_b_right" v-if="item.json.status">
+                      <span
+                        class="ac_c_i_b_r_type2"
+                        v-if="item.json.status === '1'"
+                        >{{ lang.ssTest }}</span
+                      >
+                      <span
+                        class="ac_c_i_b_r_type1"
+                        v-if="item.json.status === '2'"
+                        >{{ lang.ssStable }}</span
+                      >
                     </div>
-                    <div class="ac_c_i_t_r_bottom">
-                      {{ item.detail }}
+                    <div class="ac_c_i_b_right" style="margin-left: 10px">
+                      <span class="ac_c_i_b_r_type3" @click.stop="openApp(item)">{{ lang.ssView }}</span>
                     </div>
                   </div>
                 </div>
-                <div class="ac_c_i_bottom">
-                  <div class="ac_c_i_b_left">
-                    <el-tooltip
-                      class="item"
-                      effect="light"
-                      content="被复制数"
-                      placement="top"
-                    >
-                      <div>
-                        <img
-                          src="../../../assets/icon/appStore/user_copy.svg"
-                        />
-                        <span>{{ item.copyCount }}</span>
-                      </div>
-                    </el-tooltip>
-                    <el-tooltip
-                      class="item"
-                      effect="light"
-                      :content="item.likeId ? '取消点赞' : '点赞'"
-                      placement="top"
-                    >
-                      <div>
-                        <img
-                          :src="
-                            require('../../../assets/icon/appStore/praise_default.svg')
-                          "
-                          v-if="!item.likeId"
-                          style="cursor: pointer;"
-                          @click.stop="praiseFn(item, 0)"
-                        />
-                        <img
-                          :src="
-                            require('../../../assets/icon/appStore/praise_active.svg')
-                          "
-                          v-else
-                          style="cursor: pointer;"
-                          @click.stop="praiseFn(item, 1)"
-                        />
-                        <span>{{ item.likeCount }}</span>
-                      </div>
-                    </el-tooltip>
-                    <el-tooltip
-                      class="item"
-                      effect="light"
-                      :content="item.collectId ? '取消收藏' : '收藏'"
-                      placement="top"
-                    >
-                      <div>
-                        <img
-                          src="../../../assets/icon/appStore/collect_default.svg"
-                          v-if="!item.collectId"
-                          style="cursor: pointer;"
-                          @click="collectFn(item, 0)"
-                        />
-                        <img
-                          src="../../../assets/icon/appStore/collect_active.svg"
-                          v-else
-                          style="cursor: pointer;"
-                          @click="collectFn(item, 1)"
-                        />
-                        <span>{{ item.collectCount }}</span>
-                      </div>
-                    </el-tooltip>
-                  </div>
-                  <div class="ac_c_i_b_right" v-if="item.json.status">
-                    <span
-                      class="ac_c_i_b_r_type2"
-                      v-if="item.json.status === '1'"
-                      >测试</span
-                    >
-                    <span
-                      class="ac_c_i_b_r_type1"
-                      v-if="item.json.status === '2'"
-                      >稳定</span
-                    >
-                  </div>
-                  <div class="ac_c_i_b_right" style="margin-left: 10px">
-                    <span class="ac_c_i_b_r_type3" @click.stop="openApp(item)">查看</span>
-                  </div>
-                </div>
-              </div>
+              </template>
+              
+
               <div
                 class="ac_c_empty"
                 v-if="dataList.filter(i => i.type == item2.id).length === 0"
               >
-                <span>暂无数据...</span>
+                <span>{{ lang.ssNoData }}</span>
               </div>
             </div>
           </div>
         </div>
         <div class="ac_c_empty" v-if="dataList.length === 0 && showType !== ''">
-          <span>暂无数据...</span>
+          <span>{{ lang.ssNoData }}</span>
         </div>
       </div>
     </div>
     <span slot="footer">
-      <el-button @click="dialogVisible = false">关 闭</el-button>
-      <el-button type="primary" @click="checkAppJson">确 定</el-button>
+      <el-button @click="dialogVisible = false">{{ lang.ssClose }}</el-button>
+      <el-button type="primary" @click="checkAppJson">{{ lang.ssConfirm }}</el-button>
     </span>
   </el-dialog>
 </template>
@@ -435,25 +443,10 @@ export default {
       selectJuri: 5,
       selectLabel: "",
       typeList: [],
-      selectList: [
-        { index:5, label:"所有应用"},
-        { index: 3, label: "官方&精选" },
-        { index: 2, label: "组织内" },
-        { index: 1, label: "我的" }
-        // { index: 98,label:"已发布"},
-        // { index: 99,label:"未发布"},
-      ],
-      statusList: [
-        { value: "", label: "所有状态" },
-        { value: 1, label: "测试" },
-        { value: 2, label: "稳定" }
-      ],
+      selectList: [],
+      statusList: [],
       statusType: "",
-      labelSelect: [
-        { value: "", label: "所有类型" },
-        { value: "agent", label: "智能体" },
-        { value: "workflow", label: "工作流" }
-      ],
+      labelSelect: [],
       AreaType:'',
       AreaSelect: [
         { value: "cn", label: "cn" },
@@ -533,7 +526,7 @@ export default {
     checkAppJson(){
       if(this.type==0){
         if(!Object.keys(this.appJson).length){
-        this.$message({ type: 'warning', message: '请先选择应用!' });
+        this.$message({ type: 'warning', message: this.lang.ssSelectAppFirst });
         return
       }
       this.$parent.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.itemTaskIndex].toolChoose[this.toolIndex].appJson = this.appJson
@@ -543,7 +536,7 @@ export default {
         this.$parent.addTools(72, this.itemTaskIndex, this.toolIndex);
       }
       this.dialogVisible = false
-      this.$message.success("添加成功")
+      this.$message.success(this.lang.ssAddSuccess)
       }else if(this.type==1){
         this.$emit("success",{data:JSON.parse(JSON.stringify(this.selectAppList)),type:this.type})
         this.dialogVisible = false
@@ -624,7 +617,7 @@ export default {
         })
         .catch(err => {
           console.log(err);
-          this.$message.error("获取应用类型失败");
+          this.$message.error(this.lang.ssGetAppTypeFail);
         });
     },
     getData() {
@@ -664,7 +657,7 @@ export default {
         .catch(err => {
           this.getDataLoading = false;
           console.log(err);
-          this.$message.error("获取应用失败");
+          this.$message.error(this.lang.ssGetAppFail);
         });
     },
     async getAppStoreControl() {
@@ -718,11 +711,11 @@ export default {
               let _likeId = res.data[0][0].id;
               this.dataList.find(i => i.id === item.id).likeCount += 1;
               this.dataList.find(i => i.id === item.id).likeId = _likeId;
-              this.$message.success("点赞成功");
+              this.$message.success(this.lang.ssLikeSuccess);
             }
           })
           .catch(e => {
-            this.$message.error("点赞失败");
+            this.$message.error(this.lang.ssLikeFail);
           });
       } else if (type === 1) {
         //取消点赞
@@ -738,12 +731,12 @@ export default {
             if (res.data) {
               this.dataList.find(i => i.id === item.id).likeCount -= 1;
               this.dataList.find(i => i.id === item.id).likeId = "";
-              this.$message.success("取消点赞成功");
+              this.$message.success(this.lang.ssCancelLikeOk);
             }
           })
           .catch(e => {
             console.log(e);
-            this.$message.error("取消点赞失败");
+            this.$message.error(this.lang.ssCancelLikeFail);
           });
       }
     },
@@ -767,14 +760,14 @@ export default {
               let _colletId = res.data[0][0].id;
               this.dataList.find(i => i.id === item.id).collectCount += 1;
               this.dataList.find(i => i.id === item.id).collectId = _colletId;
-              this.$message.success("收藏成功");
+              this.$message.success(this.lang.ssCollectSuccess);
             }
             this.getData();
           })
           .catch(e => {
             console.log(e);
             this.getData();
-            this.$message.error("收藏失败");
+            this.$message.error(this.lang.ssCollectFail);
           });
       } else if (type === 1) {
         //取消收藏
@@ -790,17 +783,35 @@ export default {
             if (res.data) {
               this.dataList.find(i => i.id === item.id).collectCount -= 1;
               this.dataList.find(i => i.id === item.id).collectId = "";
-              this.$message.success("取消收藏成功");
+              this.$message.success(this.lang.ssCancelCollectOk);
             }
             this.getData();
           })
           .catch(e => {
             console.log(e);
-            this.$message.error("取消收藏失败");
+            this.$message.error(this.lang.ssCancelCollectFail);
             this.getData();
           });
       }
     }
+  },
+  mounted() {
+    this.selectList = [
+      { index: 5, label: this.lang.ssAllApps },
+      { index: 3, label: this.lang.ssOfficial },
+      { index: 2, label: this.lang.ssOrgInternal },
+      { index: 1, label: this.lang.ssMine }
+    ];
+    this.statusList = [
+      { value: "", label: this.lang.ssAllStatus },
+      { value: 1, label: this.lang.ssTest },
+      { value: 2, label: this.lang.ssStable }
+    ];
+    this.labelSelect = [
+      { value: "", label: this.lang.ssAllTypes },
+      { value: "agent", label: this.lang.ssAgent },
+      { value: "workflow", label: this.lang.ssWorkflow }
+    ];
   }
 };
 </script>

+ 20 - 20
src/components/pages/components/englishRight.vue

@@ -1,25 +1,25 @@
 <template>
   <div class="englishBox">
     <div class="themeTitle">
-      <div>作文题目<span style="color: red">*</span></div>
+      <div>{{ lang.ssEssayTitle }}<span style="color: red">*</span></div>
       <div>
         <el-input
           v-model="engList.engTitle"
-          placeholder="请填写作文题目"
+          :placeholder="lang.ssFillEssayTitle"
         ></el-input>
       </div>
     </div>
     <div class="themeText">
-      <div>作文要求<span style="color: red">*</span></div>
+      <div>{{ lang.ssEssayRequire }}<span style="color: red">*</span></div>
       <div>
         <editor-bar
-          placeholder="请填写作文要求"
+          :placeholder="lang.ssFillEssayReq"
           v-model="engList.englishText"
         ></editor-bar>
       </div>
     </div>
     <div class="themeEva" style="align-items: flex-start">
-      <div>评价设置</div>
+      <div>{{ lang.ssEvalSetting }}</div>
       <div>
         <div
           style="
@@ -31,7 +31,7 @@
         >
           <el-select
             v-model="engEvaId"
-            placeholder="预设"
+            :placeholder="lang.ssPreset"
             @change="setTestJson"
           >
             <el-option
@@ -62,7 +62,7 @@
           </el-select>
           <el-tooltip
             effect="light"
-            content="点击将下列内容设置成评价模板"
+            :content="lang.ssSetEvalTemp"
             placement="top"
             v-if="engList.textJson.startJson.length > 0"
           >
@@ -96,7 +96,7 @@
             </div>
           </div>
           <div class="bottomCss">
-            <el-button type="primary" @click="setJson">保 存</el-button>
+            <el-button type="primary" @click="setJson">{{ lang.ssSave }}</el-button>
             <div class="addeEvaItem" @click="addStartItem">
               <img src="../../../assets/icon/addEva.png" alt="" />
             </div>
@@ -105,17 +105,17 @@
       </div>
     </div>
     <el-dialog
-      title="设置名称"
+      :title="lang.ssSetName"
       :visible.sync="engEvadialogVisible"
       :append-to-body="true"
       width="500px"
       :before-close="handleClose"
       class="dialog_diy"
     >
-      <el-input v-model="englishTitle" placeholder="请输入名称"></el-input>
+      <el-input v-model="englishTitle" :placeholder="lang.ssEnterNameOnly"></el-input>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="engEvadialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="insertEnglishEva">确 定</el-button>
+        <el-button @click="engEvadialogVisible = false">{{ lang.ssCancel }}</el-button>
+        <el-button type="primary" @click="insertEnglishEva">{{ lang.ssConfirm }}</el-button>
       </span>
     </el-dialog>
   </div>
@@ -182,10 +182,10 @@ export default {
     },
     insertEnglishEva() {
       if (this.englishTitle == "") {
-        this.$message.error("请设置名称!");
+        this.$message.error(this.lang.ssSetNamePls);
         return;
       } else if (this.engList.textJson.startJson.length == 0) {
-        this.$message.error("请添加至少一条评价!");
+        this.$message.error(this.lang.ssAddOneEval);
         return;
       }
       let params = [
@@ -198,13 +198,13 @@ export default {
       this.ajax
         .post(this.$store.state.api + "insertEnglishEva", params)
         .then((res) => {
-          this.$message.success("添加成功!");
+          this.$message.success(this.lang.ssAddOk);
           this.engEvadialogVisible = false;
           this.selectEnglishEva();
           this.$forceUpdate();
         })
         .catch((err) => {
-          this.$message.error("网络不佳");
+          this.$message.error(this.lang.ssNetPoor);
           console.error(err);
         });
     },
@@ -238,9 +238,9 @@ export default {
         });
     },
     deleteTemplate(id) {
-      this.$confirm("是否确定删除该模板?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
+      this.$confirm(this.lang.ssConfirmDelTemp, this.lang.ssTip, {
+        confirmButtonText: this.lang.ssConfirm,
+        cancelButtonText: this.lang.ssCancel,
         type: "warning",
       })
         .then(() => {
@@ -250,7 +250,7 @@ export default {
           this.ajax
             .get(this.$store.state.api + "deleteEnglishEvaById", params)
             .then((res) => {
-              this.$message.success("删除成功");
+              this.$message.success(this.lang.ssDeleteSuccess);
               this.selectEnglishEva();
             })
             .catch((err) => {

+ 80 - 103
src/components/pages/evaBox/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog
-      title="评价资源"
+      :title="lang.ssEvalResource"
       :visible.sync="dialogVisibleEva"
       :append-to-body="true"
       width="1000px"
@@ -9,72 +9,49 @@
       class="addNewPP2"
     >
       <div slot="title" class="header-title">
-        <div class="titleNav">评价资源</div>
+        <div class="titleNav">{{ lang.ssEvalResource }}</div>
       </div>
       <div class="evaBox">
         <div class="evaTop">
           <div :class="type == 0 ? 'isTypeNav' : 'typeNav'" @click="setType(0)">
-            公共资源
+            {{ lang.ssPublicResource }}
           </div>
           <div :class="type == 1 ? 'isTypeNav' : 'typeNav'" @click="setType(1)">
-            个人资源
+            {{ lang.ssPersonalResource }}
           </div>
           <div :class="type == 2 ? 'isTypeNav' : 'typeNav'" @click="setType(2)">
-            组织资源
+            {{ lang.ssOrgResource }}
           </div>
           <div class="search">
             <el-input
               v-model="evaName"
-              placeholder="搜索资源"
+              :placeholder="lang.ssSearchResource"
               @change="getSource"
             ></el-input>
           </div>
         </div>
         <div class="choose">
-          <div
-            class="all_choose"
-            v-for="(item, index) in CourseType[0]"
-            :key="index"
-            :style="{ margin: !CourseTypeJson[item.id].length && 0 }"
-            v-if="
-              item.name != '二级分类' ||
-              typea != '' ||
-              typeE.indexOf('3c73702a-aba9-11ee-b534-005056b86db5') != -1
-            "
-          >
-            <span>{{ item.name }}:</span>
-            <div class="typeCss">
-              <div
-                class="cName"
-                @click="getCourse2(item.name, '', item.id, 1)"
-                :class="typeE.indexOf(item.id) != -1 ? 'isCType' : ''"
-              >
-                全部
-              </div>
-              <div
-                v-for="(item1, index1) in ctype(item.id)"
-                :key="index + '-' + index1"
-                :label="item1.id"
-                @click="getCourse2(item.name, item.id, item1.id, 2)"
-                v-if="CourseTypeJson[item.id].length"
-              >
-                <div
-                  class="cName"
-                  :class="
-                    typea == item1.id || typeb == item1.id ? 'isCType' : ''
-                  "
-                >
-                  {{ item1.name }}
+          <template v-for="(item, index) in CourseType[0]">
+            <div class="all_choose" :key="index"
+                :style="{ margin: !CourseTypeJson[item.id].length && 0 }"  v-if="(item.name != '类型') || typea != '' || typeE.indexOf('e4cb3395-5602-4441-801c-f380e8935a74') != -1">
+                <span v-if="CourseTypeJson[item.id].length">{{ item.name }}:</span>
+                <div class="typeCss" v-if="CourseTypeJson[item.id].length">
+                    <div class="cName" @click="getCourse2(item.name, '', item.id, 1)"
+                        :class="typeE.indexOf(item.id) != -1 ? 'isCType' : ''">
+                        全部
+                    </div>
+                    <div v-for="(item1, index1) in ctype(item.id)" :key="index + '-' + index1"
+                        :label="item1.id" @click="getCourse2(item.name, item.id, item1.id, 2)">
+                        <div class="cName" :class="typea == item1.id || typeb == item1.id
+                                ? 'isCType'
+                                : ''
+                            ">
+                            {{ item1.name }}
+                        </div>
+                    </div>
                 </div>
-              </div>
-              <div class="addType" @click="openAddDia(item.id)" v-show="false">
-                <img
-                  src="../../../assets/icon/courseEvaTemplate/add.png"
-                  alt=""
-                />
-              </div>
             </div>
-          </div>
+          </template>
         </div>
 
         <div v-loading="loading" :class="isHalf ? 'halfCEvaAllBox' : ''">
@@ -128,7 +105,7 @@
                   <el-tooltip
                     class="item"
                     effect="light"
-                    content="重命名"
+                    :content="lang.ssRename"
                     placement="bottom"
                   >
                     <div
@@ -140,7 +117,7 @@
                   <el-tooltip
                     class="item"
                     effect="light"
-                    content="设置分类"
+                    :content="lang.ssSetCategory"
                     placement="bottom"
                   >
                     <div class="grouping" @click.stop="grouping(item.id)" v-if="item.userid == userid || type !== 0"></div>
@@ -148,7 +125,7 @@
                   <el-tooltip
                     class="item"
                     effect="light"
-                    content="删除"
+                    :content="lang.ssDelete"
                     placement="bottom"
                   >
                     <div class="delete" @click.stop="dCET(item.id)" v-if="item.userid == userid || type == 1"></div>
@@ -156,7 +133,7 @@
                   <el-tooltip
                     class="item"
                     effect="light"
-                    content="分享"
+                    :content="lang.ssShare"
                     placement="bottom"
                   >
                     <div class="share" @click.stop="share(item)"></div>
@@ -170,7 +147,7 @@
               class="cEvaItemBox"
               style="padding: 15px 30px; font-size: 18px"
             >
-              暂无内容
+              {{ lang.ssNoContent }}
             </div>
           </div>
 
@@ -181,17 +158,17 @@
               class="elist_input_box"
             >
               <div class="elist_inptu_text">
-                <span>评价维度:</span>
+                <span>{{ lang.ssEvalDimension }}</span>
                 <span>{{ eItem.value }}</span>
               </div>
               <div class="elist_inptu_text">
-                <span>维度描述:</span>
+                <span>{{ lang.ssDimensionDesc }}</span>
                 <span>{{ eItem.detail }}</span>
               </div>
             </div>
             <div style="width: 100%">
               <el-button type="primary" style="float: right" @click="confirm()"
-                >使用</el-button
+                >{{ lang.ssUse }}</el-button
               >
             </div>
           </div>
@@ -215,7 +192,7 @@
     </el-dialog>
 
     <el-dialog
-      title="重命名"
+      :title="lang.ssRename"
       :visible.sync="uNamedialogVisible"
       :append-to-body="true"
       width="800px"
@@ -223,20 +200,20 @@
       class="addNewPP2"
     >
       <div slot="title" class="header-title">
-        <div class="titleNav">重命名</div>
+        <div class="titleNav">{{ lang.ssRename }}</div>
       </div>
       <div class="addTypeChoose" style="justify-content: center">
-        <div style="min-width: 100px">模板名称:</div>
+        <div style="min-width: 100px">{{ lang.ssTemplateName }}</div>
         <el-input v-model="upNJson.name" style="width: 200px"></el-input>
       </div>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="upCETName()">确 认</el-button>
-        <el-button @click="close1()">关 闭</el-button>
+        <el-button type="primary" @click="upCETName()">{{ lang.ssConfirm }}</el-button>
+        <el-button @click="close1()">{{ lang.ssClose }}</el-button>
       </span>
     </el-dialog>
 
     <el-dialog
-      title="添加分类"
+      :title="lang.ssAddCategory"
       :visible.sync="addTypeDialogVisible"
       :append-to-body="true"
       width="800px"
@@ -244,15 +221,15 @@
       class="addNewPP2"
     >
       <div slot="title" class="header-title">
-        <div class="titleNav">添加分类</div>
+        <div class="titleNav">{{ lang.ssAddCategory }}</div>
       </div>
       <div class="addTypeBox">
         <div
           class="addTypeChoose"
           v-if="addTypefId == '3f8eed32-aba9-11ee-b534-005056b86db5'"
         >
-          <div style="min-width: 100px; margin-right: 15px">选择一级分类:</div>
-          <el-select v-model="ftId" placeholder="请选择">
+          <div style="min-width: 100px; margin-right: 15px">{{ lang.ssSelectFirst }}</div>
+          <el-select v-model="ftId" :placeholder="lang.ssSelect">
             <el-option
               v-for="(item, index) in ctype(
                 '3c73702a-aba9-11ee-b534-005056b86db5'
@@ -265,18 +242,18 @@
           </el-select>
         </div>
         <div class="addTypeChoose">
-          <div style="min-width: 100px">分类名称:</div>
+          <div style="min-width: 100px">{{ lang.ssCategoryName }}</div>
           <el-input v-model="typeName"></el-input>
         </div>
       </div>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="addType">确 认</el-button>
-        <el-button @click="close2()">关 闭</el-button>
+        <el-button type="primary" @click="addType">{{ lang.ssConfirm }}</el-button>
+        <el-button @click="close2()">{{ lang.ssClose }}</el-button>
       </span>
     </el-dialog>
 
     <el-dialog
-      title="设置分类"
+      :title="lang.ssSetCategory"
       :visible.sync="groupDialogVisible"
       :append-to-body="true"
       width="800px"
@@ -284,14 +261,14 @@
       class="addNewPP2"
     >
       <div slot="title" class="header-title">
-        <div class="titleNav">设置分类</div>
+        <div class="titleNav">{{ lang.ssSetCategory }}</div>
       </div>
       <div class="addTypeBox">
         <div class="addTypeChoose">
-          <div style="min-width: 100px">选择一级分类:</div>
+          <div style="min-width: 100px">{{ lang.ssSelectFirst }}</div>
           <el-select
             v-model="setTypeJson.one"
-            placeholder="请选择"
+            :placeholder="lang.ssSelect"
             @change="getTwoType(setTypeJson.one)"
           >
             <el-option
@@ -306,8 +283,8 @@
           </el-select>
         </div>
         <div class="addTypeChoose" v-if="setTypeJson.one != ''">
-          <div style="min-width: 100px">选择二级分类:</div>
-          <el-select v-model="setTypeJson.two" placeholder="请选择">
+          <div style="min-width: 100px">{{ lang.ssSelectSecond }}</div>
+          <el-select v-model="setTypeJson.two" :placeholder="lang.ssSelect">
             <el-option
               v-for="(item1, index1) in twoJson"
               :key="index1"
@@ -319,13 +296,13 @@
         </div>
       </div>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="addTypeByCET">确 认</el-button>
-        <el-button @click="close3()">关 闭</el-button>
+        <el-button type="primary" @click="addTypeByCET">{{ lang.ssConfirm }}</el-button>
+        <el-button @click="close3()">{{ lang.ssClose }}</el-button>
       </span>
     </el-dialog>
 
     <el-dialog
-      title="分享"
+      :title="lang.ssShare"
       :visible.sync="shareDialogVisible"
       :append-to-body="true"
       width="800px"
@@ -333,21 +310,21 @@
       class="addNewPP2"
     >
       <div slot="title" class="header-title">
-        <div class="titleNav">分享</div>
+        <div class="titleNav">{{ lang.ssShare }}</div>
       </div>
       <div class="addTypeBox">
         <div class="addTypeChoose">
-          <div style="min-width: 100px">选择资源:</div>
+          <div style="min-width: 100px">{{ lang.ssSelect }}{{ lang.ssResource }}:</div>
           <el-checkbox-group v-model="shareType" class="checkBoxCss">
-            <el-checkbox label="0" v-if="type != 0">公共资源</el-checkbox>
-            <el-checkbox label="1" v-if="type != 1">个人资源</el-checkbox>
-            <el-checkbox label="2" v-if="type != 2">组织资源</el-checkbox>
+            <el-checkbox label="0" v-if="type != 0">{{ lang.ssPublicResource }}</el-checkbox>
+            <el-checkbox label="1" v-if="type != 1">{{ lang.ssPersonalResource }}</el-checkbox>
+            <el-checkbox label="2" v-if="type != 2">{{ lang.ssOrgResource }}</el-checkbox>
           </el-checkbox-group>
         </div>
       </div>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="shareTemplate">确 认</el-button>
-        <el-button @click="close4()">关 闭</el-button>
+        <el-button type="primary" @click="shareTemplate">{{ lang.ssConfirm }}</el-button>
+        <el-button @click="close4()">{{ lang.ssClose }}</el-button>
       </span>
     </el-dialog>
   </div>
@@ -508,11 +485,11 @@ export default {
     },
     confirm() {
       if (this.json.length == 0) {
-        this.$message.error("请选择评价模板!");
+        this.$message.error(this.lang.ssChooseEvalTemp);
       }
-      this.$confirm("是否使用此评价模板?将会覆盖掉现有的评价!", "提示", {
-        confirmButtonText: "保存",
-        cancelButtonText: "不保存",
+      this.$confirm(this.lang.ssUseEvalTemp, this.lang.ssTip, {
+        confirmButtonText: this.lang.ssSave,
+        cancelButtonText: this.lang.ssNotSave,
         type: "warning",
       }).then(() => {
         this.$emit("updateEvaJson", this.json);
@@ -534,11 +511,11 @@ export default {
           this.CourseType = res.data;
           for (var i = 0; i < res.data[0].length; i++) {
             if (res.data[0][i].id == "3c73702a-aba9-11ee-b534-005056b86db5") {
-              res.data[0][i].name = "一级分类";
+              res.data[0][i].name = this.lang.ssFirstLevel;
             } else if (
               res.data[0][i].id == "3f8eed32-aba9-11ee-b534-005056b86db5"
             ) {
-              res.data[0][i].name = "二级分类";
+              res.data[0][i].name = this.lang.ssSecondLevel;
             }
             if (!this.cid) {
               this.courseTypeId[res.data[0][i].id] = [];
@@ -691,7 +668,7 @@ export default {
       this.ajax
         .get(this.$store.state.api + "updateCourseET", params)
         .then((res) => {
-          this.$message.success("修改成功!");
+          this.$message.success(this.lang.ssModifySuccess);
           this.getSource();
           this.close1();
         })
@@ -700,9 +677,9 @@ export default {
         });
     },
     dCET(id) {
-      this.$confirm("确定删除此模板吗?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
+      this.$confirm(this.lang.ssConfirmDelTemp2, this.lang.ssTip, {
+        confirmButtonText: this.lang.ssConfirm,
+        cancelButtonText: this.lang.ssCancel,
         type: "warning",
       })
         .then(() => {
@@ -712,7 +689,7 @@ export default {
           this.ajax
             .get(this.$store.state.api + "deleteCourseET", params)
             .then((res) => {
-              this.$message.success("删除成功!");
+              this.$message.success(this.lang.ssDeleteSuccess);
               this.getSource();
             })
             .catch((err) => {
@@ -739,7 +716,7 @@ export default {
       this.ajax
         .get(this.$store.state.api + "addCETType", params)
         .then((res) => {
-          this.$message.success("添加成功!");
+          this.$message.success(this.lang.ssAddOk);
           this.selectAllType();
           this.addTypeDialogVisible = false;
         })
@@ -749,7 +726,7 @@ export default {
     },
     addTypeByCET() {
       if (this.setTypeJson.two == "") {
-        this.$message.warning("请选择二级分类,如没有二级分类请前往添加!");
+        this.$message.warning(this.lang.ssSelectSecondPls);
         return;
       }
       let params = {
@@ -776,20 +753,20 @@ export default {
               .post(this.$store.state.api + "addCETLabel", params)
               .then((res) => {
                 this.$message({
-                  message: "设置成功",
+                  message: this.lang.ssSetSuccess,
                   type: "success",
                 });
                 this.groupDialogVisible = false;
                 this.getSource();
               })
               .catch((err) => {
-                this.$message.error("网络不佳");
+                this.$message.error(this.lang.ssNetPoor);
                 console.error(err);
               });
           }
         })
         .catch((err) => {
-          this.$message.error("网络不佳");
+          this.$message.error(this.lang.ssNetPoor);
           console.error(err);
         });
     },
@@ -799,7 +776,7 @@ export default {
     },
     shareTemplate() {
       if(this.shareType.length == 0){
-        this.$message.warning("请选择要分享到哪个资源!");
+        this.$message.warning(this.lang.ssSelectShare);
         return;
       }
       if (this.shareType.length == 2) {
@@ -824,14 +801,14 @@ export default {
         .post(this.$store.state.api + "addCETShare", params)
         .then((res) => {
           this.$message({
-            message: "分享成功",
+            message: this.lang.ssShareSuccess,
             type: "success",
           });
           this.close4();
           this.getSource();
         })
         .catch((err) => {
-          this.$message.error("网络不佳");
+          this.$message.error(this.lang.ssNetPoor);
           console.error(err);
         });
     },

+ 32 - 31
src/components/pages/interVideo/index.vue

@@ -1,47 +1,47 @@
 <template>
     <div style="position: relative;">
-        <el-dialog title="交互视频设置" :visible.sync="dialogVisibleVideo" :append-to-body="true" width="95%"
+        <el-dialog :title="lang.ssVideoSet" :visible.sync="dialogVisibleVideo" :append-to-body="true" width="95%"
             :before-close="handleClose" class="dialog_diy">
             <div v-if="dialogVisibleVideo">
                 <div class="btnBox">
                     <el-button type="primary" size="default" @click="addImg($event)" v-if="!this.json.video">
-                        添加视频
+                        {{ lang.ssAddVideo }}
                         <input type="file" accept="video/mp4, video/quicktime, video/x-msvideo" style="display: none"
                             @change="addVideo($event)" />
                     </el-button>
-                    <el-button type="primary" size="default" @click="reset" v-else>重置</el-button>
+                    <el-button type="primary" size="default" @click="reset" v-else>{{ lang.ssReset }}</el-button>
 
                 </div>
                 <div class="videoBox">
                     <video-player class="video-player vjs-custom-skin" ref="videoPlayer" :playsinline="true"
                         :options="playerO" v-if="this.json.video"></video-player>
-                    <div class="content" v-else>请上传视频</div>
+                    <div class="content" v-else>{{ lang.ssUploadVideo }}</div>
                 </div>
                 <div class="settingBox" v-if="this.json.video">
 										<div class="settingName">
-											<span class="title">视频名称</span>
+											<span class="title">{{ lang.ssVideoName }}</span>
 											<el-input class="settingInput" v-model="json.name" @input="changeVideoName"></el-input>
 										</div>
                     <div class="settingBtn">
-                        <span class="title">交互设置</span>
-                        <el-button type="primary" size="small" @click="addSetting">添加hiding</el-button>
+                        <span class="title">{{ lang.ssInterSet }}</span>
+                        <el-button type="primary" size="small" @click="addSetting">{{ lang.ssAddHiding }}</el-button>
                     </div>
                     <div class="settingContent">
-                        <div class="setting_b" v-for="(item, index) in json.setting">
+                        <div class="setting_b" v-for="(item, index) in json.setting" :key="index">
 														<!-- <div class="time_box">
                                 <span>序号:{{ index+1 }}</span>
                             </div> -->
                             <div class="time_box">
-                                <span>触发时间:</span>
-                                <el-input-number v-model="item.time" :controls="false" :min="1" placeholder="视频第几秒"
-                                    @change="changeTime(item.time, index)" style="width: 100px;"></el-input-number><span style="margin-left: 5px;"></span>
+                                <span>{{ lang.ssTriggerTime }}</span>
+                                <el-input-number v-model="item.time" :controls="false" :min="1" :placeholder="lang.ssVideoSec"
+                                    @change="changeTime(item.time, index)" style="width: 100px;"></el-input-number><span style="margin-left: 5px;">{{ lang.ssSecond }}</span>
                             </div>
                             <div class="setting_fool">
-                                <span>工具设置:</span>
-                                <el-button type="primary" size="mini" @click="setting(index)">{{ item.tool.tool ? "已设置" : "插入工具" }}</el-button>
+                                <span>{{ lang.ssToolSet }}</span>
+                                <el-button type="primary" size="mini" @click="setting(index)">{{ item.tool.tool ? lang.ssIsSet : lang.ssInsertTool }}</el-button>
 																<!-- <el-button type="primary" size="mini">上移</el-button>
 																<el-button type="primary" size="mini">下移</el-button> -->
-																<el-button type="text" size="mini" @click="deleteSetting(index)" style="color:#818181">删除</el-button>
+																<el-button type="text" size="mini" @click="deleteSetting(index)" style="color:#818181">{{ lang.ssDelete }}</el-button>
                             </div>
                             <!-- <div>
                                 <el-button type="primary" size="mini" @click="deleteSetting(index)">删除</el-button>
@@ -51,8 +51,8 @@
                 </div>
             </div>
             <span slot="footer" class="dialog-footer">
-                <el-button @click="close">取 消</el-button>
-                <el-button type="primary" @click="addV">确定</el-button>
+                <el-button @click="close">{{ lang.ssCancel }}</el-button>
+                <el-button type="primary" @click="addV">{{ lang.ssConfirm }}</el-button>
             </span>
         </el-dialog>
         <choiceDialog :dialogVisibleChoice.sync="dialogVisibleChoice" :json="settingJson" @add="addSettingJson"
@@ -60,7 +60,7 @@
         <div v-if="proVisible" class="mask">
             <div class="progressBox">
                 <div class="lbox">
-                    <img src="../../../assets/loading.gif" />上传中,请稍后
+                    <img src="../../../assets/loading.gif" />{{ lang.ssUploadWait }}
                 </div>
                 <div style="margin-bottom: 10px">
                     <span>{{ isFinishSize }}M</span> / <span>{{ isAllSize }}M</span>
@@ -106,7 +106,7 @@ export default {
                 ],
                 // poster: require("../../assets/tu31.png"), //你的封面地址
                 // poster: dataRes.imgUrl, //你的封面地址
-                notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
+                notSupportedMessage: "", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
                 controlBar: {
                     timeDivider: true, //当前时间和持续时间的分隔符
                     durationDisplay: true, //显示持续时间
@@ -149,15 +149,15 @@ export default {
         },
         addV() {
 						if(!this.json.name){
-							this.$message.error("请输入视频名称");
+							this.$message.error(this.lang.ssEnterVideoName);
 							return;
 						}
             if (!this.json.video) {
-                this.$message.error("请上传视频")
+                this.$message.error(this.lang.ssUploadVideo)
                 return;
             }
             if (!this.json.setting.length) {
-                this.$message.error("请添加至少一个交互")
+                this.$message.error(this.lang.ssAddOneInteract)
                 return;
             }
             let settingType = 1
@@ -175,11 +175,11 @@ export default {
                 }
             }
             if (settingType == 2) {
-                this.$message.error("不能设置一样的触发时间")
+                this.$message.error(this.lang.ssSameTriggerTime)
                 return;
             }
             if (settingToolType == 2) {
-                this.$message.error("请对交互设置工具")
+                this.$message.error(this.lang.ssSetToolInteract)
                 return;
             }
             this.$emit('add', this.json)
@@ -216,7 +216,7 @@ export default {
         },
         changeTime(time, index) {
             if (time > this.videoTime) {
-                this.$message.error("设置时间不能大于视频播放时长")
+                this.$message.error(this.lang.ssTimeExceedDur)
                 return this.$nextTick(() => {
                     this.json.setting[index].time = 1
                     this.$forceUpdate();
@@ -247,9 +247,9 @@ export default {
         },
         deleteSetting(index) {
             this
-                .$confirm("确定删除么?", "提示", {
-                    confirmButtonText: "确定",
-                    cancelButtonText: "取消",
+                .$confirm(this.lang.ssConfirmDelete, this.lang.ssTip, {
+                    confirmButtonText: this.lang.ssConfirm,
+                    cancelButtonText: this.lang.ssCancel,
                     type: "warning",
                 })
                 .then(() => {
@@ -261,9 +261,9 @@ export default {
         },
         reset() {
             this
-                .$confirm("确定重置么?", "提示", {
-                    confirmButtonText: "确定",
-                    cancelButtonText: "取消",
+                .$confirm(this.lang.ssConfirmReset, this.lang.ssTip, {
+                    confirmButtonText: this.lang.ssConfirm,
+                    cancelButtonText: this.lang.ssCancel,
                     type: "warning",
                 })
                 .then(() => {
@@ -332,7 +332,7 @@ export default {
                             _this.$forceUpdate();
                         }, 500);
                         if (err) {
-                            _this.$message.error("上传失败");
+                            _this.$message.error(_this.lang.ssUploadFail);
                         } else {
 													
                             _this.json.video = data.Location;
@@ -352,6 +352,7 @@ export default {
         }
     },
     mounted() {
+        this.playerOptions.notSupportedMessage = this.lang ? this.lang.ssVideoPlayFail : "此视频暂无法播放,请稍后再试";
         this.json = JSON.parse(JSON.stringify(this.videoJson));
         if (this.json.video) {
             this.playerO = JSON.parse(JSON.stringify(this.playerOptions));

+ 48 - 45
src/components/pages/teacherSource/dialog.vue

@@ -9,36 +9,39 @@
         ">
             <div class="reBox">
                 <div class="reTop">
-                    <div>分类筛选</div>
+                    <div>{{ lang.ssCategoryFilter }}</div>
                     <div>
                         <!-- @click="getCourse" -->
                         <div class="search" @click="getSource">
                             <img src="../../../assets/icon/search.png" alt="" />
                         </div>
-                        <input class="sInput" type="text" placeholder="请输入关键字" v-model="sourceName"
+                        <input class="sInput" type="text" :placeholder="lang.ssEnterKey" v-model="sourceName"
                             @keyup.enter="getSource" />
                     </div>
                 </div>
                 <div class="choose">
-                    <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index"
-                        :style="{ margin: !CourseTypeJson[item.id].length && 0 }"  v-if="(item.name != '类型') || typea != '' || typeE.indexOf('e4cb3395-5602-4441-801c-f380e8935a74') != -1">
-                        <span v-if="CourseTypeJson[item.id].length">{{ item.name }}:</span>
-                        <div class="typeCss" v-if="CourseTypeJson[item.id].length">
-                            <div class="cName" @click="getCourse2(item.name, '', item.id, 1)"
-                                :class="typeE.indexOf(item.id) != -1 ? 'isCType' : ''">
-                                全部
-                            </div>
-                            <div v-for="(item1, index1) in ctype(item.id)" :key="index + '-' + index1"
-                                :label="item1.id" @click="getCourse2(item.name, item.id, item1.id, 2)">
-                                <div class="cName" :class="typea == item1.id || typeb == item1.id
-                                        ? 'isCType'
-                                        : ''
-                                    ">
-                                    {{ item1.name }}
+                    <template  v-for="(item, index) in CourseType[0]">
+                        <div class="all_choose" :key="index"
+                            :style="{ margin: !CourseTypeJson[item.id].length && 0 }"  v-if="(item.name != lang.ssType) || typea != '' || typeE.indexOf('e4cb3395-5602-4441-801c-f380e8935a74') != -1">
+                            <span v-if="CourseTypeJson[item.id].length">{{ item.name }}:</span>
+                            <div class="typeCss" v-if="CourseTypeJson[item.id].length">
+                                <div class="cName" @click="getCourse2(item.name, '', item.id, 1)"
+                                    :class="typeE.indexOf(item.id) != -1 ? 'isCType' : ''">
+                                    {{ lang.ssAll }}
+                                </div>
+                                <div v-for="(item1, index1) in ctype(item.id)" :key="index + '-' + index1"
+                                    :label="item1.id" @click="getCourse2(item.name, item.id, item1.id, 2)">
+                                    <div class="cName" :class="typea == item1.id || typeb == item1.id
+                                            ? 'isCType'
+                                            : ''
+                                        ">
+                                        {{ item1.name }}
+                                    </div>
                                 </div>
                             </div>
                         </div>
-                    </div>
+                    </template>
+                   
                 </div>
             </div>
         </div>
@@ -54,11 +57,11 @@
                         <div class="ftitle"><span>{{ item.name }}</span></div>
                     </div>
                     <div class="detail">{{ item.detail }}</div>
-                    <div class="label"><span v-for="(k, ki) in item.label.split(',')" :key="index + '-' + ki">{{ k ? k : "无" }}</span>
+                    <div class="label"><span v-for="(k, ki) in item.label.split(',')" :key="index + '-' + ki">{{ k ? k : lang.ssNone }}</span>
                     </div>
-                    <div class="button"><span @click="check(item.url)">查看</span></div>
+                    <div class="button"><span @click="check(item.url)">{{ lang.ssView }}</span></div>
                 </div>
-                <div v-if="!res.length" style="text-align: center; width: 100%;">暂无数据</div>
+                <div v-if="!res.length" style="text-align: center; width: 100%;">{{ lang.ssNoData }}</div>
             </div>
             <div class="student_page">
                 <el-pagination background layout="prev, pager, next" :page-size="pageSize" :total="total" v-if="page && total"
@@ -66,12 +69,12 @@
                 </el-pagination>
             </div>
         </div>
-        <el-dialog title="添加资源" :visible.sync="dialogVisible" :append-to-body="true" width="800px"
+        <el-dialog :title="lang.ssAddRes" :visible.sync="dialogVisible" :append-to-body="true" width="800px"
             :before-close="handleClose" class="dialog_diy">
             <div class="add-box">
                 <div class="span-box">
-                    <span><span style="color: red">*</span>工具名称</span><el-input class="input" v-model="s_title"
-                        placeholder="请输入工具名称"></el-input>
+                    <span><span style="color: red">*</span>{{ lang.ssToolName }}</span><el-input class="input" v-model="s_title"
+                        :placeholder="lang.ssEnterToolName"></el-input>
                 </div>
                 <div class="type-box">
                     <div class="both">
@@ -89,29 +92,29 @@
                     </div>
                 </div>
                 <div class="span-box">
-                    <span><span style="color: red">*</span>网址来源</span><el-input class="input" v-model="s_url"
-                        placeholder="请输入网址来源"></el-input>
+                    <span><span style="color: red">*</span>{{ lang.ssUrlSource }}</span><el-input class="input" v-model="s_url"
+                        :placeholder="lang.ssEnterUrlSource"></el-input>
                 </div>
                 <div class="span-box">
-                    <span><span style="color: red">*</span>工具描述</span><el-input class="input" type="textarea" resize="none"
-                        rows="5" v-model="s_detail" placeholder="请输入工具描述"></el-input>
+                    <span><span style="color: red">*</span>{{ lang.ssToolDescName }}</span><el-input class="input" type="textarea" resize="none"
+                        rows="5" v-model="s_detail" :placeholder="lang.ssEnterToolDesc"></el-input>
                 </div>
                 <div class="span-box">
-                    <span>标签</span><el-select class="input" v-model="s_label" multiple placeholder="请选择标签">
-                        <el-option label="无需登录" value="无需登录"></el-option>
-                        <el-option label="扫码登录" value="扫码登录"></el-option>
-                        <el-option label="注册登录" value="注册登录"></el-option>
-                        <el-option label="免费" value="免费"></el-option>
-                        <el-option label="付费" value="付费"></el-option>
-                        <el-option label="中文" value="中文"></el-option>
-                        <el-option label="英文" value="英文"></el-option>
+                    <span>{{ lang.ssLabel }}</span><el-select class="input" v-model="s_label" multiple :placeholder="lang.ssSelectLabel">
+                        <el-option :label="lang.ssNoLogin" :value="lang.ssNoLogin"></el-option>
+                        <el-option :label="lang.ssScanLogin" :value="lang.ssScanLogin"></el-option>
+                        <el-option :label="lang.ssRegLogin" :value="lang.ssRegLogin"></el-option>
+                        <el-option :label="lang.ssFree" :value="lang.ssFree"></el-option>
+                        <el-option :label="lang.ssPaid" :value="lang.ssPaid"></el-option>
+                        <el-option :label="lang.ssChinese" :value="lang.ssChinese"></el-option>
+                        <el-option :label="lang.ssEnglish" :value="lang.ssEnglish"></el-option>
                     </el-select>
 
                 </div>
             </div>
             <span slot="footer" class="dialog-footer">
-                <el-button @click="dialogVisible = false">取 消</el-button>
-                <el-button type="primary" @click="add()">确定</el-button>
+                <el-button @click="dialogVisible = false">{{ lang.ssCancel }}</el-button>
+                <el-button type="primary" @click="add()">{{ lang.ssConfirm }}</el-button>
             </span>
         </el-dialog>
     </div>
@@ -236,9 +239,9 @@ export default {
                     this.CourseType = res.data;
                     for (var i = 0; i < res.data[0].length; i++) {
                         if(res.data[0][i].id == "37076c23-7053-46eb-b25b-756824806608"){
-                            res.data[0][i].name = "类型";
+                            res.data[0][i].name = this.lang.ssType;
                         }else if(res.data[0][i].id == "e4cb3395-5602-4441-801c-f380e8935a74"){
-                            res.data[0][i].name = "场景";
+                            res.data[0][i].name = this.lang.ssScene;
                         }
                         if (!this.cid) {
                             this.courseTypeId[res.data[0][i].id] = [];
@@ -358,15 +361,15 @@ export default {
         },
         add() {
             if (this.s_title == '') {
-                this.$message.error('请填写工具名称')
+                this.$message.error(this.lang.ssFillToolName)
                 return
             }
             if (this.s_url == '') {
-                this.$message.error('请填写网址来源')
+                this.$message.error(this.lang.ssFillUrlSource)
                 return
             }
             if (this.s_detail == '') {
-                this.$message.error('请填写工具描述')
+                this.$message.error(this.lang.ssFillToolDesc)
                 return
             }
             let params = [{
@@ -381,14 +384,14 @@ export default {
                 .post(this.$store.state.api + "addSource", params)
                 .then((res) => {
                     this.$message({
-                        message: "添加成功",
+                        message: this.lang.ssAddOk,
                         type: "success",
                     });
                     this.dialogVisible = false
                     this.getSource();
                 })
                 .catch((err) => {
-                    this.$message.error("网络不佳");
+                    this.$message.error(this.lang.ssNetPoor);
                     console.error(err);
                 });
         }

+ 2 - 2
src/components/pages/test/file/wOffice.vue

@@ -1,6 +1,6 @@
 <template>
   <el-dialog
-    title="文档查看"
+    :title="lang.ssDocView"
     :visible.sync="dialogVisibleOffice"
     :append-to-body="true"
     width="95%"
@@ -12,7 +12,7 @@
                 :src="'https://view.officeapps.live.com/op/view.aspx?src=' + encodeURIComponent(url)"></iframe>
     </div>
     <span slot="footer" class="dialog-footer">
-      <el-button @click="close()">关 闭</el-button>
+      <el-button @click="close()">{{ lang.ssClose }}</el-button>
     </span>
   </el-dialog>
 </template>

+ 2 - 2
src/components/pages/test/file/wPdf2.vue

@@ -1,12 +1,12 @@
 <template>
-    <el-dialog title="PDF查看" :visible.sync="dialogVisiblePdf" :append-to-body="true" width="95%" :before-close="handleClose"
+    <el-dialog :title="lang.ssPdfView" :visible.sync="dialogVisiblePdf" :append-to-body="true" width="95%" :before-close="handleClose"
         class="dialog_diy">
         <div style="height: 100%;">
             <iframe ref="viframe" style="width: 100%; height: 99%; border: none"
                 :src="'https://cloud.cocorobo.cn/pdf.js/web/viewer.html?file=' + encodeURIComponent(url)"></iframe>
         </div>
         <span slot="footer" class="dialog-footer">
-            <el-button @click="close">关 闭</el-button>
+            <el-button @click="close">{{ lang.ssClose }}</el-button>
         </span>
     </el-dialog>
 </template>

+ 13 - 2
src/components/tools/table.vue

@@ -36,7 +36,18 @@ export default {
     },
     placeholder: {
       type: String,
-      default: "请点击按钮插入表格"
+      default: function() {
+        // 根据域名获取对应的语言
+        let lang = {};
+        if (window.location.href.includes("cocorobo.cn")) {
+          lang = require("../../lang/cn.json");
+        } else if (window.location.href.includes("cocorobo.hk")) {
+          lang = require("../../lang/hk.json");
+        } else {
+          lang = require("../../lang/en.json");
+        }
+        return lang.ssClickInsert || "请点击按钮插入表格";
+      }
     }
   },
   watch: {
@@ -140,7 +151,7 @@ export default {
               .send(function (err, data) {
                 loading.close();
                 if (err) {
-                  that.$message.error("上传失败");
+                  that.$message.error(this.lang.ssUploadFail);
                 } else {
                   //上传成功处理
                   insert(data.Location);

+ 2 - 2
src/components/tools/time.vue

@@ -62,7 +62,7 @@
         id="pause"
         @click="pauseTimer"
       ></button> -->
-      <el-button type="primary" @click="reset" class="reset_btn">重置</el-button>
+      <el-button type="primary" @click="reset" class="reset_btn">{{this.lang.reset}}</el-button>
     </div>
   </div>
 </template>
@@ -146,7 +146,7 @@ export default {
           //   btn.style.opacity = 1;
           // });
           _this.displayTimeLeft(_this.wholeTime);
-          _this.$message.success("时间到!!!");
+          _this.$message.success(_this.lang.ssTimeUp);
           // pauseBtn.classList.remove("pause");
           // pauseBtn.classList.add("play");
           return;

+ 16 - 5
src/components/tools/wangEnduit.vue

@@ -7,7 +7,7 @@
     <div v-if="proVisible" class="mask">
       <div class="progressBox">
         <div class="lbox">
-          <img src="../../assets/loading.gif" />上传中,请稍后
+          <img src="../../assets/loading.gif" />{{ lang.ssUploadWait }}
         </div>
       </div>
     </div>
@@ -45,7 +45,18 @@ export default {
     },
     placeholder: {
       type: String,
-      default: "请输入正文"
+      default: function() {
+        // 根据域名获取对应的语言
+        let lang = {};
+        if (window.location.href.includes("cocorobo.cn")) {
+          lang = require("../../lang/cn.json");
+        } else if (window.location.href.includes("cocorobo.hk")) {
+          lang = require("../../lang/hk.json");
+        } else {
+          lang = require("../../lang/en.json");
+        }
+        return lang.ssEnterContentL || "请输入正文";
+      }
     }
   },
   watch: {
@@ -154,7 +165,7 @@ export default {
                 }
                 // loading.close();
                 if (err) {
-                  that.$message.error("上传失败");
+                  that.$message.error(this.lang.ssUploadFail);
                 } else {
                   //上传成功处理
                   insert(data.Location);
@@ -242,8 +253,8 @@ export default {
  /* code 样式 */
  .cont>>>code {
    display: inline-block;
-   *display: inline;
-   *zoom: 1;
+   /* *display: inline;
+   *zoom: 1; */
    background-color: #f1f1f1;
    border-radius: 3px;
    padding: 3px 5px;

+ 797 - 1
src/lang/cn.json

@@ -557,6 +557,7 @@
   "SearchforResources": "搜索资源",
   "NoItemsFound": "暂无内容",
   "SwitchMode": "切换模式",
+  "ssSwitchMode": "切换模式",
   "Unnamedstage": "未命名阶段",
   "Stagesequence": "阶段顺序",
   "enterstagetitle": "请输入阶段标题",
@@ -757,7 +758,802 @@
   "CommunityTemplate":"社区模板",
   "MyTemplate":"我的模板",
   "Creator":"创建人",
-  "deletethistemplate":"确定删除此模板吗?"
+  "deletethistemplate":"确定删除此模板吗?",
+  "ssUploadCont":"上传课程内容",
+  "ssUploadOk":"上传完成",
+  "ssEnterName":"请输入课程名称",
+  "ssPublish":"是否公开此课程",
+  "ssIntell":"是否开启智能检索",
+  "ssGenMode":"生成模式:",
+  "ssFromZero":"从零开始生成",
+  "ssFromExist":"从已有教案生成",
+  "ssDialogGen":"对话模式生成",
+  "ssBrainGen":"头脑风暴模式生成",
+  "ssGenStyle":"生成风格:",
+  "ssPrecise":"精确",
+  "ssCreative":"创意",
+  "ssAdd":"添加",
+  "ssExistPlan":"已有教案",
+  "ssUploadPlan":"上传已有教案",
+  "ssOneKeyGenLessonPlan":"一键智能总结生成",
+  "ssNoContentL":"暂时还没有内容,快去添加吧",
+  "ssPlanSummary":"已有教案摘要",
+  "ssRightClick":"右键单击可配置提示词",
+  "ssExtract":"提取摘要",
+  "ssEnterSum":"请输入教案摘要",
+  "ssOptTip":"*可以将需要优化的建议添加在任务描述后,点击\"智能优化\",自动进行修改",
+  "ssIntOpt":"智能优化",
+  "ssQuote":"引用",
+  "ssCourseObj":"课程目标",
+  "ssExtractObj":"提取目标",
+  "ssEnterObj":"请输入课程目标",
+  "ssSysRef":"系统推荐参考资料",
+  "ssIntSearch":"智能检索资料",
+  "ssRefStd":"参考标准",
+  "ssUploadStd":"上传参考标准",
+  "ssSearchMat":"检索资料",
+  "ssSearchItem":"检索项:",
+  "ssSelectGrade":"请选择年级",
+  "ssSelectSubj":"请选择学科",
+  "ssSearchKey":"检索关键词:",
+  "ssEnterKey":"请输入检索关键词",
+  "ssClickSearch":"点击检索资料",
+  "ssFilterItem":"筛选项:",
+  "ssSelectVol":"请选择册数",
+  "ssSelectUnit":"请选择单元",
+  "ssUnit":"第*单元",
+  "ssSelectType":"请选择类型",
+  "ssNextPage":"下一页",
+  "ssNoSearch":"暂时还没有内容,快去检索吧",
+  "ssSelected":"选中",
+  "ssFileName":"文件名",
+  "ssFileType":"文件类型",
+  "ssUploadKB":"上传知识库",
+  "ssNone":"无",
+  "ssKnowBase":"知识库",
+  "ssUploadSup":"上传补充资料",
+  "ssCourseOver":"课程概况",
+  "ssConfigWF":"配置工作流",
+  "ssWorkflowTip":"您可在创作者中心中创建工作流后,复制工作流链接并贴入",
+  "ssEnterAid":"请输入agentid",
+  "ssAgendaQ":"议程和问题引导",
+  "ssViewProg":"查看进度",
+  "ssSumCourse":"总结并生成课程概况",
+  "ssAIOpt":"AI优化",
+  "ssGenOver":"生成概况和目标",
+  "ssRegenOverAndTarget":"重新生成概况和目标",
+  "ssRestore":"复原",
+  "ssStageDeletedRestore":"您所修改的阶段已经被其他老师删除了,需要恢复嘛?",
+  "ssNeed":"需要",
+  "ssGenObj":"生成目标",
+  "ssGenObj2":"生成目标2",
+  "ssSupMat":"补充资料",
+  "ssSupDesc":"补充描述",
+  "ssEnterSupDesc":"请输入课程补充描述:例如您期望的课程时长、任务数量、任务难度、任务类型等。",
+  "ssCourseOut":"课程大纲",
+  "ssGenOut":"生成大纲",
+  "ssRegenOut":"重新生成大纲",
+  "ssTask":"任务",
+  "ssGenTask":"生成任务",
+  "ssRegenTask":"重新生成任务",
+  "ssAddTaskUp":"在上面加入一个任务",
+  "ssAddTaskDown":"在下面加入一个任务",
+  "ssCpoteGrp":"概念群",
+  "ssGenCpote":"生成概念群",
+  "ssRegenCpote":"重新生成概念群",
+  "ssEnterCpote":"请输入概念群",
+  "ssQChain":"问题链",
+  "ssGenQChain":"生成问题链",
+  "ssRegenQChain":"重新生成问题链",
+  "ssEnterQChain":"请输入问题链",
+  "ssTargetLay":"目标层",
+  "ssGenTargetLay":"生成目标层",
+  "ssRegenTargetLay":"重新生成目标层",
+  "ssEnterTargetLay":"请输入目标层",
+  "ssTaskClus":"任务簇",
+  "ssGenTaskClus":"生成任务簇",
+  "ssRegenTaskClus":"重新生成任务簇",
+  "ssEnterTaskClus":"请输入任务簇",
+  "ssLessonPlan":"教案",
+  "ssEduCase":"学历案",
+  "ssRubric":"量规",
+  "ssChatRecord":"聊天栏记录",
+  "ssFirstVol":"上册",
+  "ssSecondVol":"下册",
+  "ssHomeworkOnly":"作业",
+  "ssSystemPic":"系统图片.png",
+  "ssNetworkPic":"网络图片.png",
+  "ssUploadDocPptFiles":"请上传.doc,.docx,.ppt,.pptx,.md,.txt,.pdf文件!",
+  "ssGenLessonPlan":"生成教案",
+  "ssRegenLessonPlan":"重新生成教案",
+  "ssEnterLessonPlan":"请输入教案",
+  "ssRegenOver":"重新生成概况",
+  "ssGenOverOnly":"生成概况",
+  "ssExportPlan":"导出教案",
+  "ssCatalog":"目录",
+  "ssAttachArea":"附件区",
+  "ssOneKeyGen":"一键生成",
+  "ssRegenAllTask":"重新生成所有任务",
+  "ssGenAllTool":"一键生成所有工具",
+  "ssRegenAllTool":"重新生成所有工具",
+  "ssGenAllEva":"一键生成所有评价",
+  "ssRegenAllEva":"重新生成所有评价",
+  "ssGenTool":"生成工具",
+  "ssRegenTool":"重新生成工具",
+  "ssGenToolEva":"生成工具评价",
+  "ssRegenToolEva":"重新生成工具评价",
+  "ssAttachment":"附件",
+  "ssBatchDown":"批量下载",
+  "ssModifyTemp":"修改模板",
+  "ssSaveTemp":"保存模板",
+  "ssFoldRule":"收起细则",
+  "ssExpandRule":"展开细则",
+  "ssFillAbility":"填写能力",
+  "ssFillEvaStd":"填写评价标准",
+  "ssGenRule":"生成细则",
+  "ssRegenRule":"重新生成",
+  "ssAIGenPPT":"AI生成PPT",
+  "ssAIGenPlan":"AI生成学历案",
+  "ssStopGenPlanL":"停止生成学历案",
+  "ssIntSearchV":"智能检索视频",
+  "ssCodeUpload":"代码上传",
+  "ssAiApp":"Ai应用",
+  "ssTaskEvaSys":"任务评价体系",
+  "ssOneKeyEvaRule":"一键生成评价细则",
+  "ssGenEva":"生成评价",
+  "ssRegenEva":"重新生成评价",
+  "ssTargetColon":"目标:",
+  "ssAbilityColon":"能力:",
+  "ssEvaStdColon":"评价标准:",
+  "ssEvaRuleColon":"评价细则:",
+  "ssAIScore":"AI评分",
+  "ssEnterEvaRule":"请输入评价细则",
+  "ssMindMap":"思维导图",
+  "ssGroupName":"第*组名称:",
+  "ssTable":"表格",
+  "ssStuGroup":"学生分组",
+  "ssQuest":"问卷调查",
+  "ssChoice":"选择题",
+  "ssQA":"问答",
+  "ssHomework":"作业提交",
+  "ssBatchUp":"批量上传",
+  "ssSelMatch":"选择匹配",
+  "ssSort":"排序",
+  "ssTrainPlat":"训练平台",
+  "ssCodeEdit":"源码编辑",
+  "ssTurtle":"海龟编程",
+  "ssPersonalL":"个人评价",
+  "ssTranslate":"翻译",
+  "ssDigital":"数字画板",
+  "ssFormula":"公式编辑",
+  "ssEngWrite":"英语写作",
+  "ssEngSpeak":"英语口语",
+  "ssTreeView":"目标树",
+  "ssCompass":"目标罗盘",
+  "ssFoldGoal":"收起目标",
+  "ssExpandGoal":"展开目标",
+  "ssExpandTask":"展开任务",
+  "ssFoldTask":"收起任务",
+  "ssAddTask":"添加任务",
+  "ssFold":"折叠",
+  "ssExpand":"展开",
+  "ssTaskColon":"任务:",
+  "ssAll":"全部",
+  "ssTaskNum":"任务*",
+  "ssFileTypeC":"文件类型:",
+  "ssSelectAll":"全选",
+  "ssLink":"链接",
+  "ssBackCourse":"返回课程",
+  "ssLastStep":"上一步",
+  "ssConfirmUp":"确认上传",
+  "ssSuccess":"成功",
+  "ssBasicData":"基础资料",
+  "ssCourseOpt":"课程描述优化",
+  "ssTargetGet":"目标文件检索",
+  "ssGenOutBtn":"生成大纲按钮",
+  "ssOutTaskGen":"大纲任务生成",
+  "ssOutDescGen":"大纲描述生成(重新生成任务)",
+  "ssOutDescOpt":"大纲描述优化",
+  "ssPlanDescOpt":"教案描述优化",
+  "ssGenTaskBtn":"生成任务按钮",
+  "ssTaskDetail":"任务详情",
+  "ssTaskDesc":"任务描述",
+  "ssToolList":"工具列表",
+  "ssEvaExtract":"评价提取",
+  "ssToolOpt":"工具描述优化",
+  "ssTaskEvaOpt":"任务评价优化",
+  "ssTaskDescOpt":"任务描述优化",
+  "ssTip":"提示",
+  "ssCopyLink":"请复制该链接邀请协同编辑",
+  "ssCopyShare":"复制链接分享",
+  "ssCancel":"取消",
+  "ssViewDoc":"查看文档",
+  "ssAddDoc":"添加文档",
+  "ssDocTitle":"文档标题",
+  "ssEnterDocT":"请输入文档标题名...",
+  "ssDocIntro":"文档简介",
+  "ssEdit":"修改",
+  "ssDocContent":"文档内容",
+  "ssConfirm":"确定",
+  "ssAddText":"添加富文本",
+  "ssTextTitle":"文本标题",
+  "ssEnterTextT":"请输入文本标题...",
+  "ssAddLink":"添加链接",
+  "ssTitle":"标题",
+  "ssEnterLinkT":"请输入链接标题",
+  "ssEnterLink":"请输入链接",
+  "ssModifyRes":"修改资源",
+  "ssAddRes":"添加资源",
+  "ssAddCourseM":"添加课程成员",
+  "ssSelectMem":"选择成员",
+  "ssSearchMem":"搜索成员名称",
+  "ssNoStuAvail":"暂无学生可选",
+  "ssSelectTeac":"选择授课班级",
+  "ssSelectClass":"选择班级",
+  "ssNoData":"暂无数据",
+  "ssAddMember":"添加协同成员",
+  "ssOther":"其他",
+  "ssNoName":"暂无姓名",
+  "ssCreateQues":"创建问卷",
+  "ssEnterTitle":"请输入标题",
+  "ssSingleCh":"单选题",
+  "ssMultipleCh":"多选题",
+  "ssEnterQues":"请输入题目",
+  "ssDelete":"删除",
+  "ssEnterOpt":"请输入选项",
+  "ssCreateChoice":"创建选择题",
+  "ssUploadWait":"上传中,请稍后",
+  "ssIntGen":"智能生成",
+  "ssSmartPaste":"智能粘贴",
+  "ssAddTool":"添加工具",
+  "ssTool":"工具",
+  "ssInteract":"互动类",
+  "ssCognitive":"思维类",
+  "ssEval":"评价类",
+  "ssMaterial":"素材库",
+  "ssMindGrid":"思维网格",
+  "ssEWhite":"电子白板",
+  "ssNote":"便签",
+  "ssCollDoc":"协同文档",
+  "ssMathBoard":"数学画板",
+  "ssGaugeRate":"量规评分",
+  "ssToolDesc":"添加工具描述",
+  "ssAddQA":"添加问答",
+  "ssQuestion":"问题:",
+  "ssEnterQues2":"请输入您要问的问题",
+  "ssAddQues":"添加问题",
+  "ssEnterWant":"请输入您想要回答的问题",
+  "ssUploadPic":"上传图片",
+  "ssSelectLocal":"选择本地文件",
+  "ssSelectNet":"选择网络文件",
+  "ssSelectSys":"选择系统文件",
+  "ssPainting":"绘画",
+  "ssScience":"科技",
+  "ssHumanity":"人文",
+  "ssArt":"艺术",
+  "ssSearchImg":"搜索图片关键字",
+  "ssChangeGrp":"换一组",
+  "ssEnterKeyImg":"请输入关键词搜索图片",
+  "ssUploadQuesImg":"上传题目图片",
+  "ssTipUpload":"提示:请将所有题目上传为一张图片。",
+  "ssAddOpt":"添加选项",
+  "ssTipEnterOpt":"提示:请输入以上题目的选项内容,此选项为所有题目共享。",
+  "ssSetCorrect":"设置每道题目的正确选项",
+  "ssSelectAns":"根据题目选择对应答案",
+  "ssSelectCorrect":"请选择正确答案",
+  "ssAddEva":"添加评价",
+  "ssEnterEva":"请输入个人评价指标:",
+  "ssEvaCriteria":"个人评价指标:",
+  "ssFillEvaDim":"填写评价维度",
+  "ssRatingLevel":"评星等级:",
+  "ssDesc":"描述:",
+  "ssFillDimDesc":"填写维度描述",
+  "ssSortSet":"排序设置",
+  "ssAddQues2":"添加题目",
+  "ssQuesSet":"题目设置",
+  "ssEnterCard":"请输入卡片内容",
+  "ssCorrectOrder":"正确顺序",
+  "ssAddTable":"添加表格",
+  "ssTableContent":"表格内容",
+  "ssUploadTemp":"上传模板",
+  "ssAddClass":"添加班级",
+  "ssClassColon":"班级:",
+  "ssSelect":"请选择",
+  "ssSetRandom":"设置随机码",
+  "ssRandomColon":"随机码:",
+  "ssEnterRandom":"请输入随机码",
+  "ssAddPreTime":"添加预设时间",
+  "ssTipClick":"提示:点击\"+\"或\"-\"修改倒计时时长。",
+  "ssImportTarget":"导入目标",
+  "ssAddTarget":"添加目标",
+  "ssTargetName":"目标名称",
+  "ssOwner":"负责人",
+  "ssAction":"操作",
+  "ssImport":"导入",
+  "ssGroupSet":"分组设置",
+  "ssSetGroupNum":"请设置小组数量及名称",
+  "ssEnterName2":"请输入名称...",
+  "ssSetGroupPer":"请设置每组人数",
+  "ssEnterNum":"请输入2-10的数字",
+  "ssModifyName":"修改名称",
+  "ssFileNameColon":"文件名称:",
+  "ssEnterModify":"请输入要修改的名称",
+  "ssCreateEssay":"创建作文题目",
+  "ssSelectTemp":"选择课程模板",
+  "ssSimpleTemp":"简易模板",
+  "ssChangeStage":"切换阶段顺序",
+  "ssStageNum":"第*阶段",
+  "ssAddResTemp":"添加资源模板",
+  "ssTempName":"模板名称:",
+  "ssSelectOne":"选择一级分类:",
+  "ssSelectTwo":"选择二级分类:",
+  "ssConfirm2":"确 认",
+  "ssClose":"关 闭",
+  "ssStudyPlan":"学历案",
+  "ssEvalSuffix":"的评价",
+  "ssAddToolFull":"请把工具添加完整",
+  "ssNetPoor":"网络不佳",
+  "ssSaveEdit":"是否保存已编辑内容?",
+  "ssSave":"保存",
+  "ssNotSave":"不保存",
+  "ssFillComplete":"请将内容填写完整!",
+  "ssWaitTaskSave":"请等待任务*回答完毕后再保存",
+  "ssWaitTaskCont":"请等待任务*回答完毕后再继续",
+  "ssFillCourseName":"请补充填写课程名称",
+  "ssClickConfirmUpload":"点击确认上传按钮",
+  "ssGenOutTaskDesc":"生成大纲任务*描述还未生成完,请前往查看,回答完毕后再次操作。",
+  "ssCpoteNotGen":"概念群还未生成完,请前往查看,回答完毕后再次操作。",
+  "ssQChainNotGen":"问题链还未生成完,请前往查看,回答完毕后再次操作。",
+  "ssTargetNotGen":"目标层还未生成完,请前往查看,回答完毕后再次操作。",
+  "ssTaskClusNotGen":"任务簇还未生成完,请前往查看,回答完毕后再次操作。",
+  "ssGenDescFirst":"请生成简要描述后再生成大纲",
+  "ssPerfectOut":"请完善任务*的课程大纲",
+  "ssPerfectPlan":"请完善任务*的课程教案",
+  "ssPlanNotGen":"还有教案描述未生成完毕,是否直接下一步?",
+  "ssWaitTaskUp":"请等待任务*回答完毕后再上传",
+  "ssSwitchTask":"确定切换成任务模式吗?",
+  "ssDeleteStage":"确定删除此阶段吗?",
+  "ssDeleteTool":"确定删除此工具吗?",
+  "ssDeleteSucc":"删除成功",
+  "ssDeleteQues":"确定删除此题目吗?",
+  "ssDeleteTask":"确定删除此任务吗?",
+  "ssSwitchTaskDel":"切换任务顺序将删除所有工具的提交成果,是否继续此操作?",
+  "ssInDev":"功能正在开发中",
+  "ssPasteSucc":"粘贴成功",
+  "ssEmbedCode":"嵌入代码",
+  "ssNoPasteObj":"系统没有找到粘贴对象,请首先复制可用于粘贴的链接。",
+  "ssUploadFail":"上传失败",
+  "ssSaveAttach":"保存到附件成功",
+  "ssSelectResUp":"请选择要上传的资源",
+  "ssCoverOneUp":"课程封面仅支持上传一张,请删除后再进行上传",
+  "ssFileOver80MB":"上传文件大于80兆,请重新选择文件!",
+  "ssAddFileOver80":"添加成上传文件大于80兆,请重新选择文件!",
+  "ssFileIdError":"此文件存在特殊符号无法转化成fileid请重新上传",
+  "ssOutGenWait":"有大纲在生成请生成完之后才能使用此功能",
+  "ssGradeColon":"年级:",
+  "ssSubjColon":"学科:",
+  "ssThemeColon":"主题:",
+  "ssClickClass":"点击选择分类-",
+  "ssDeleteItem":"确定删除此项?",
+  "ssCantDown":"还不能下载图片喔",
+  "ssDelSelFile":"确定删除所选文件么?",
+  "ssSelAttach":"请先选需要下载的附件",
+  "ssAttachZip":"附件.zip",
+  "ssSwitchMove":"切换工具顺序将一起移动此工具的提交成果,是否继续此操作?",
+  "ssAddSucc":"新增成功",
+  "ssAddOk":"添加成功",
+  "ssPlsAddCM":"请添加课程成员",
+  "ssUseAI":"请使用AI共创生成",
+  "ssConfirmTemp":"确定选择课程模板吗?此操作将删除所有已编辑课程内容。",
+  "ssChooseEmpty":"确定选择空模板吗?修改课程时无法重置课程模板。",
+  "ssChooseSimple":"确定选择简易模板吗?修改课程时无法重置课程模板。",
+  "ssChooseFuture":"确定选择未来小学课程设计吗?",
+  "ssLinkTitle":"请填写链接标题",
+  "ssIrrevers":"此操作不可撤销,是否继续?",
+  "ssTitleEmpty":"标题不能为空!",
+  "ssFillTitle":"请将题目*填写完整。",
+  "ssOneQues":"至少填写一个问题",
+  "ssOptEmpty":"题目*选项不能为空!",
+  "ssOptDup":"第*题的选项&和选项$重复了,请修改!",
+  "ssEachQues":"每道题目至少需要设置2个选项。",
+  "ssCorrectOpt":"请将题目*的正确选项设置完整",
+  "ssUseAIQues":"请使用AI共创生成题目",
+  "ssSmartPasteTemp":"确定选择智能粘贴模板吗?修改课程时无法重置课程模板。",
+  "ssStageSeqDel":"切换阶段顺序将删除所有工具的提交成果,是否继续此操作?",
+  "ssEnterQuesL":"请输入您想要问的问题",
+  "ssFillEvaInfo":"请把评价信息填写完整",
+  "ssUploadQues":"请上传题目",
+  "ssSetAns":"请设置答案",
+  "ssOptDup2":"选项*和选项$重复了,请修改!",
+  "ssOptEmpty2":"添加的选项不能为空",
+  "ssNewCourse":"这是新增课程",
+  "ssZhijian":"智见课程",
+  "ssZhixing":"智行课程",
+  "ssIntelli":"智创课程",
+  "ssColumn":"栏目",
+  "ssImportOk":"导入成功",
+  "ssClearAgain":"内容已经清空了,请勿重复清空",
+  "ssDelTarget":"确定删除此目标吗?",
+  "ssSelSecAdd":"请选择二级分类,如没有二级分类请前往添加!",
+  "ssFillCard":"请填写卡片内容!",
+  "ssCardOver10":"卡片内容字数不能超过10位",
+  "ssNoDupCard":"不能添加重复的卡片内容!",
+  "ssSetComplete":"请将题目*设置完整。",
+  "ssUploadSucc":"上传成功",
+  "ssInputNum1":"请输入大于1的数字",
+  "ssFillInfo":"请将信息填写完整!",
+  "ssInputCode":"请输入至少四位数字或英文组合的随机码",
+  "ssCodeDup":"已有此随机码,不能重复",
+  "ssCourseColon":"课程名称:",
+  "ssNetImgPng":"网络图片.png",
+  "ssTaskMoveAll":"切换任务顺序将一起移动所有工具的提交成果,是否继续此操作?",
+  "ssStageMove":"切换阶段顺序将一起移动所有任务的提交成果,是否继续此操作?",
+  "ssMoveFail":"移动作品失败,网络异常",
+  "ssLevel1":"一级分类",
+  "ssLevel2":"二级分类",
+  "ssGenAllEvaSet":"是否一键生成所有工具的评价设置?会占用您一些时间。",
+  "ssExecSucc":"执行成功",
+  "ssPlsUpPlan":"请上传教案",
+  "ssCourseBasic":"课程基本信息",
+  "ssDesigner":"设计者:",
+  "ssCoursePlan":"课程教案",
+  "ssTaskToolEva":"任务*工具$的评价.docx",
+  "ssEvaTable":"| 素养 | 评价标准 | 评价细则 |",
+  "ssEvaDegreeZip":"评价和学历案.zip",
+  "ssRecordFail":"获取录音权限失败",
+  "ssPlsWorkflow":"请输入工作流链接",
+  "ssRegenAffect":"重新生成会影响已生成内容,确定重新生成吗?",
+  "ssPlsAnswer":"请回答完毕后再次发送",
+  "ssFileLimit30":"目前检索文件不能超过30个噢,请减少一些",
+  "ssNoPermTip":"您没有权限修改/查看提示词",
+  "ssEnterTask":"请输入任务名称",
+  "ssGenTaskPlan":"请先生成任务*的教案在执行此操作",
+  "ssPlanTaskNotGen":"教案任务*描述还未生成完,请前往查看,回答完毕后再次操作。",
+  "ssNotGenRegen":"还未生成完毕,是否直接重新生成?",
+  "ssConfirmRegen":"确定重新生成",
+  "ssGenDescTarget":"请生成简要描述后再生成目标",
+  "ssGenAllDim":"是否生成所有维度的细则?仅生成该任务/生成所有",
+  "ssGenAll":"生成所有",
+  "ssGenThisTask":"仅生成该任务",
+  "ssSendSucc":"发送成功",
+  "ssTooManyReq":"哎呀,请求太多了,服务器忙不过来了,请稍等再重试",
+  "ssZero":"零",
+  "ssOne":"一",
+  "ssTwo":"二",
+  "ssThree":"三",
+  "ssFour":"四",
+  "ssFive":"五",
+  "ssSix":"六",
+  "ssSeven":"七",
+  "ssEight":"八",
+  "ssNine":"九",
+  "ssTen":"十",
+  "ssHundred":"百",
+  "ssThousand":"千",
+  "ssTenThousand":"万",
+  "ssHundredMillion":"亿",
+  "ssJsonFormat":"返回json格式不正确",
+  "ssStopOutline":"已经成功停止生成课程大纲",
+  "ssStopFileGen":"已经成功停止智能生成检索资料",
+  "ssStopAIOpt":"已经成功停止AI优化",
+  "ssStopGenTarget":"已经成功停止生成目标",
+  "ssStopExtract":"已经成功停止提取摘要",
+  "ssStopGenPlan":"已经成功停止生成教案",
+  "ssStopGenOut":"已经成功停止生成大纲",
+  "ssStopTaskOver":"已经成功停止生成任务概述",
+  "ssStopTaskTool":"已经成功停止生成任务工具",
+  "ssStopSearch":"已经成功停止检索资料",
+  "ssColon":":",
+  "ssDocument":"文档",
+  "ssNetWave":"哎呀,网络波动了...小可正在为您重新生成中...",
+  "ssTopic":"题目",
+  "ssOption":"选项",
+  "ssEnterOption":"请输入选项",
+  "ssAddEvaOpt":"请添加评价后才能优化",
+  "ssPlanGenFail":"本任务的教案生成失败是否重新生成,取消则自动生成下一个任务!",
+  "ssEvaCompleteInfo":"任务*的第$个评价完善信息后再生成细则",
+  "ssNoStarLevel":"未有星级。",
+  "ssStar0":"0星",
+  "ssStar2":"2星",
+  "ssStar3":"3星",
+  "ssStar4":"4星",
+  "ssStar5":"5星",
+  "ssNoMatch":"未找到匹配的内容。",
+  "ssEvaRuleSucc":"任务*评价$细则生成成功",
+  "ssFormatErr":"返回的数据格式错误,小可正在为您重新获取...",
+  "ssRefMat":"参考资料",
+  "ssSelectMat":"请选择要使用的检索资料",
+  "ssGetAllData":"已获取全部数据",
+  "ssSearchWait":"检索中请稍后",
+  "ssNoSearchRes":"未检索出内容",
+  "ssQueryFail":"查询失败",
+  "ssOnlyZip":"只支持上传zip文件",
+  "ssZipFail":"解析zip文件失败",
+  "ssNoPageSel":"未选择主页面",
+  "ssEnterContentL":"请输入正文",
+  "ssClickInsert":"请点击按钮插入表格",
+  "ssTimeUp":"时间到!!!",
+  "ssCategoryFilter":"分类筛选",
+  "ssToolName":"工具名称",
+  "ssEnterToolName":"请输入工具名称",
+  "ssUrlSource":"网址来源",
+  "ssEnterUrlSource":"请输入网址来源",
+  "ssToolDescName":"工具描述",
+  "ssEnterToolDesc":"请输入工具描述",
+  "ssLabel":"标签",
+  "ssSelectLabel":"请选择标签",
+  "ssNoLogin":"无需登录",
+  "ssScanLogin":"扫码登录",
+  "ssRegLogin":"注册登录",
+  "ssFree":"免费",
+  "ssPaid":"付费",
+  "ssChinese":"中文",
+  "ssEnglish":"英文",
+  "ssScene":"场景",
+  "ssFillToolName":"请填写工具名称",
+  "ssFillUrlSource":"请填写网址来源",
+  "ssFillToolDesc":"请填写工具描述",
+  "ssView":"查看",
+  "ssType":"类型",
+  "ssVideoSet":"交互视频设置",
+  "ssAddVideo":"添加视频",
+  "ssReset":"重置",
+  "ssUploadVideo":"请上传视频",
+  "ssVideoName":"视频名称",
+  "ssInterSet":"交互设置",
+  "ssAddHiding":"添加hiding",
+  "ssTriggerTime":"触发时间:",
+  "ssVideoSec":"视频第几秒",
+  "ssSecond":"秒",
+  "ssToolSet":"工具设置:",
+  "ssIsSet":"已设置",
+  "ssInsertTool":"插入工具",
+  "ssVideoPlayFail":"此视频暂无法播放,请稍后再试",
+  "ssEnterVideoName":"请输入视频名称",
+  "ssAddOneInteract":"请添加至少一个交互",
+  "ssSameTriggerTime":"不能设置一样的触发时间",
+  "ssSetToolInteract":"请对交互设置工具",
+  "ssTimeExceedDur":"设置时间不能大于视频播放时长",
+  "ssConfirmDelete":"确定删除么?",
+  "ssConfirmReset":"确定重置么?",
+  "ssEssayTitle":"作文题目",
+  "ssFillEssayTitle":"请填写作文题目",
+  "ssEssayRequire":"作文要求",
+  "ssFillEssayReq":"请填写作文要求",
+  "ssPreset":"预设",
+  "ssSetEvalTemp":"点击将下列内容设置成评价模板",
+  "ssSetName":"设置名称",
+  "ssEnterNameOnly":"请输入名称",
+  "ssSetNamePls":"请设置名称!",
+  "ssAddOneEval":"请添加至少一条评价!",
+  "ssDeleteSuccess":"删除成功",
+  "ssConfirmDelTemp":"是否确定删除该模板?",
+  "ssEvalResource":"评价资源",
+  "ssPublicResource":"公共资源",
+  "ssPersonalResource":"个人资源",
+  "ssOrgResource":"组织资源",
+  "ssSearchResource":"搜索资源",
+  "ssSecondLevel":"二级分类",
+  "ssRename":"重命名",
+  "ssSetCategory":"设置分类",
+  "ssShare":"分享",
+  "ssNoContent":"暂无内容",
+  "ssEvalDimension":"评价维度:",
+  "ssDimensionDesc":"维度描述:",
+  "ssUse":"使用",
+  "ssAddCategory":"添加分类",
+  "ssSelectFirst":"选择一级分类:",
+  "ssCategoryName":"分类名称:",
+  "ssSelectSecond":"选择二级分类:",
+  "ssSelectSecondPls":"请选择二级分类,如没有二级分类请前往添加!",
+  "ssSetSuccess":"设置成功",
+  "ssShareSuccess":"分享成功",
+  "ssSelectShare":"请选择要分享到哪个资源!",
+  "ssModifySuccess":"修改成功!",
+  "ssConfirmDelTemp2":"确定删除此模板吗?",
+  "ssChooseEvalTemp":"请选择评价模板!",
+  "ssUseEvalTemp":"是否使用此评价模板?将会覆盖掉现有的评价!",
+  "ssFirstLevel":"一级分类",
+  "ssResource":"资源",
+  "ssEnglishOral":"英语口语",
+  "ssSetEnglishOralInfo":"设置英语口语信息",
+  "ssDescription":"说明",
+  "ssEnterDesc":"请输入对该问题的描述",
+  "ssSetEnglishOralQ":"设置英语口语题目",
+  "ssQuestionTypeSel":"题目类型选择",
+  "ssEvalQuestion":"评测题目",
+  "ssEvalOutline":"评测大纲",
+  "ssSaveEditContent":"是否保存已编辑内容?",
+  "ssAddOneOralQ":"请至少添加一道口语题目",
+  "ssEnterContentQ":"第*题请输入内容",
+  "ssEnterQuestionQ":"第*题请输入题目",
+  "ssEnterPointQ":"第*题请输入要点",
+  "ssEnterRoleNameQ":"第*题请输入角色名字",
+  "ssEnterRoleDefQ":"第*题请输入角色定义",
+  "ssEnterRoleGreetQ":"第*题请输入角色问候",
+  "ssSelectOptTask":"选择需要优化的任务:",
+  "ssSelectOptPart":"选择优化的部分:",
+  "ssSelectOptContent":"选择优化内容",
+  "ssEnterWantKnow":"在此输入您想了解的内容",
+  "ssSend":"发送",
+  "ssEnterWantKnowPls":"请输入您想要了解的内容",
+  "ssAnswerFinishSend":"请回答完毕后再次发送",
+  "ssAllContent":"全部内容",
+  "ssTaskDesign":"任务设计",
+  "ssEvalDesign":"评价设计",
+  "ssModifyContent":"修改内容",
+  "ssRequire":"要求",
+  "ssSendSuccess":"发送成功",
+  "ssWaitPls":"请稍等...",
+  "ssGetChatFail":"获取对话记录失败",
+  "ssClickSaveDocx":"点击可将该内容以docx文件保存至附录栏",
+  "ssMore":"更多",
+  "ssClearScreen":"清屏",
+  "ssContinuous":"连续对话",
+  "ssAuthor":"作者:",
+  "ssClickStartRec":"点击按钮开始录音",
+  "ssTerminate":"终止",
+  "ssHasPlanSum":"已有教案摘要",
+  "ssCourseTarget":"课程目标",
+  "ssCourseBrief":"课程简要描述",
+  "ssTaskOutline":"任务*课程大纲",
+  "ssConceptGroup":"概念群",
+  "ssProblemChain":"问题链",
+  "ssTargetLayer":"目标层",
+  "ssTaskCluster":"任务簇",
+  "ssTaskPlan":"任务*教案",
+  "ssTaskDescL":"任务*任务描述",
+  "ssTaskToolDesc":"任务*工具$的工具描述",
+  "ssGenWait":"生成中请稍后",
+  "ssEnterContent":"请输入内容",
+  "ssWaitAnswerSend":"请等待回答完毕在发送",
+  "ssClearChatConfirm":"确定清空聊天记录吗?",
+  "ssClearChatSuccess":"清除聊天记录成功",
+  "ssClearChatFail":"清除聊天记录失败",
+  "ssCopySuccess":"复制成功",
+  "ssStartRecPls":"请先开始录音",
+  "ssHelloAssistant":"您好,我是您的创课助手小可,在创课中遇到什么问题,都可以与我对话~,我会尽量帮助您的",
+  "ssSaveFail":"保存失败",
+  "ssFormatErrJson":"返回json格式不正确",
+  "ssAddTopic":"追加议题",
+  "ssAdopt":"采纳",
+  "ssSummaryDiscuss":"总结讨论",
+  "ssSummaryCourse":"总结并生成课程概况",
+  "ssRecordAudioSend":"请录制音频后发送",
+  "ssQuoteContent":"引用内容",
+  "ssCourseBriefHas":"课程简要描述已有内容,是否覆盖?",
+  "ssAdoptSuccess":"采纳成功",
+  "ssAudio":"音频:",
+  "ssAudioNum":"音频*",
+  "ssLanguage":"语言:",
+  "ssRecording":"录音中...",
+  "ssPaused":"已暂停...",
+  "ssWaitRecording":"等待录音中...",
+  "ssMandarin":"普通话",
+  "ssCantonese":"粤语",
+  "ssConfirmDelAudio":"是否确定删掉此音频?",
+  "ssReminder":"提醒",
+  "ssStartRecording":"已开始录音",
+  "ssStillRecording":"还在录音中",
+  "ssStopRecording":"已停止录音",
+  "ssEndRecording":"已结束录音",
+  "ssPromptSet":"提示词设置",
+  "ssBasicCreate":"基础创建",
+  "ssDefaultPrompt":"默认的提示词",
+  "ssDefaultPrompt1":"默认的提示词1",
+  "ssDefaultPrompt2":"默认的提示词2",
+  "ssDefaultPrompt3":"默认的提示词3",
+  "ssEnterPls":"请输入....",
+  "ssEnterPrompt":"请输入提示词",
+  "ssConfirmResetPrompt":"确定重置此提示词么?",
+  "ssAiDetail":"请根据<课程简要描述>设计一个名为<课程名字>的<课程学科>学科的,面向<面向年级>的项目式学习课程。",
+  "ssAiOutline":"请根据<课程简要描述>及#补充参考资料为这个名为<课程名字>的<课程学科>学科的,面向<面向年级>的项目式学习课程设计序列教学活动(需要每个任务都需要至少50个token的详细描述),每个教学活动的活动设计(可以直接使用文件内容)以及每个教学活动的评价量规(学生能做到...)。",
+  "ssAiTask":"请根据<教学任务教案>。",
+  "ssAiDetail1":"请根据<课程描述>,重新设计该教学任务。任务需要至少50个token的详细描述,包含任务设计,评价标准。",
+  "ssAiDetail2":"请你在考虑到整个课程的情况下,优化该任务描述和任务名:<任务名>:<任务描述>",
+  "ssAiDetail3":"请你在考虑到整个课程的情况下,**重点考虑该任务及工具名和工具内容的情况下**,优化工具指引。",
+  "ssAiDetail4":"请你在考虑到整个课程的情况下,**重点考虑该任务详情**以及工具的情况下,优化评价标准。",
+  "ssAiTeacher":"请根据<任务大纲>为每个教学任务设计详细的教案,其中包括但不仅限于该任务的教学目标,教学过程,师生研讨,拓展,学生任务单,相关知识点的练习或Qui以及答案等。",
+  "ssTeacherDetail":"请根据<教案描述>重新设计该教案。其中包括但不仅限于该任务的教学目标,教学过程,师生研讨,拓展,学生任务单,相关知识点的练习或Qui以及答案等。",
+  "ssSavePromptTemp":"保存提示词模板",
+  "ssTemplateName":"模板名称:",
+  "ssTemplateDesc":"模板描述:",
+  "ssPermission":"权限:",
+  "ssPersonal":"个人",
+  "ssEveryone":"所有人",
+  "ssPublicPrompt":"是否公开提示词:",
+  "ssNotPublic":"不公开",
+  "ssPublic":"公开",
+  "ssConfirmSaveCourse":"确定并保存课程",
+  "ssEnterTemplateName":"请输入模板名称",
+  "ssConfirmModifyTemp":"确定修改此模板嘛?",
+  "ssTaskAiGenPPT":"任务*的AI生成PPT",
+  "ssGenWaitPls":"小可正在努力生成中,请稍等...",
+  "ssStop":"停止",
+  "ssGenOutline":"请生成大纲",
+  "ssSelectTemplate":"选择模板",
+  "ssSelectTemplatePls":"请选择模板",
+  "ssRegenOutline":"重新生成大纲",
+  "ssRegenPPT":"重新生成PPT",
+  "ssGenPPT":"生成PPT",
+  "ssPrevStep":"上一步",
+  "ssNextStep":"下一步",
+  "ssCollapse":"收起",
+  "ssTaskGenPPT":"任务*的生成ppt",
+  "ssOpen":"打开",
+  "ssStopSuccess":"已经成功停止",
+  "ssClickGenPPT":"请点击生成PPT按钮",
+  "ssGenOutlinePls":"请先生成大纲内容",
+  "ssGenFailRetry":"生成失败,正在重新生成",
+  "ssThanksWatch":"谢谢观看,下课!",
+  "ssSmartSearch":"智能检索",
+  "ssSearchVideoKey":"搜索视频关键字(如需搜索多个可‘,’隔开)",
+  "ssComprehensive":"综合排序",
+  "ssMostPlayed":"最多播放",
+  "ssLatest":"最新发布",
+  "ssMostDanmu":"最多弹幕",
+  "ssMostFav":"最多收藏",
+  "ssAddSuccess":"加入成功",
+  "ssEnterKeyword":"请输入关键字",
+  "ssServerBusy":"哎呀,请求太多了,服务器忙不过来了,请自行搜索关键词",
+  "ssPdfView":"PDF查看",
+  "ssDocView":"文档查看",
+  "ssEvalSetting":"评价设置",
+  "ssRegenEval":"重新生成评价",
+  "ssGenEval":"生成评价",
+  "ssLiteracy":"素养:",
+  "ssFillTarget":"填写目标",
+  "ssAiScoring":"AI评分",
+  "ssEvalStandard":"评价标准:",
+  "ssFillEvalStd":"填写评价标准",
+  "ssEvalDetail":"评价细则:",
+  "ssCollapseDetail":"收起细则",
+  "ssExpandDetail":"展开细则",
+  "ssEnterEvalDetail":"请输入评价细则",
+  "ssRegenDetail":"重新生成",
+  "ssGenDetail":"生成细则",
+  "ssStopGenEvalSet":"已经成功停止生成评价设置",
+  "ssStopGenEvalDetail":"已经成功停止生成评价细则",
+  "ssGenWaitFinish":"生成中,请等待生成完毕后再继续",
+  "ssUploadRefGenEval":"请上传参考标准后,再生成评价",
+  "ssCompleteInfoGen":"评价信息完善信息后再生成细则",
+  "ssEvalDetailGenOk":"评价细则生成成功",
+  "ssAppCenter":"应用中心",
+  "ssSelectScope":"请选择显示范围",
+  "ssSelectStatus":"请选择状态",
+  "ssEnterAppName":"请输入应用名称",
+  "ssWorkflow":"工作流",
+  "ssAgent":"智能体",
+  "ssCopyCount":"被复制数",
+  "ssCancelLike":"取消点赞",
+  "ssLike":"点赞",
+  "ssCancelCollect":"取消收藏",
+  "ssCollect":"收藏",
+  "ssTest":"测试",
+  "ssStable":"稳定",
+  "ssViewMore":"查看更多",
+  "ssAllApps":"所有应用",
+  "ssOfficial":"官方&精选",
+  "ssOrgInternal":"组织内",
+  "ssMine":"我的",
+  "ssAllStatus":"所有状态",
+  "ssAllTypes":"所有类型",
+  "ssSelectAppFirst":"请先选择应用!",
+  "ssGetAppTypeFail":"获取应用类型失败",
+  "ssGetAppFail":"获取应用失败",
+  "ssLikeSuccess":"点赞成功",
+  "ssLikeFail":"点赞失败",
+  "ssCancelLikeOk":"取消点赞成功",
+  "ssCancelLikeFail":"取消点赞失败",
+  "ssCollectSuccess":"收藏成功",
+  "ssCollectFail":"收藏失败",
+  "ssCancelCollectOk":"取消收藏成功",
+  "ssCancelCollectFail":"取消收藏失败",
+  "ssAddHTML":"添加HTML",
+  "ssModifyHTML":"修改HTML",
+  "ssFillNameInfo":"请将名称信息补充完整",
+  "ssFillCodeInfo":"请将代码信息补充完整",
+  "ssLoadHtmlError":"加载 HTML 文件时出错:"
 
 
 

+ 804 - 7
src/lang/en.json

@@ -113,7 +113,7 @@
   "NoteName":"Note Name(Required)",
   "Cover":"Cover",
   "AddCoverimage":"Add Cover image",
-  "Collaborator":"Collaborator",
+  "Collaborator":"Collaborators",
   "Psac":"Please select collaborators",
   "Pleaseaddgroups":"Please add the course name before setting up the group",
   "Pleasesetupgroups":"No groups available at the moment.Click the'Create' button to set up groups",
@@ -262,7 +262,7 @@
   "Uploadcoursecontent": "Upload course content",
   "Uploadcompleted": "Upload completed",
   "wantintelligent": "Do you want to enable intelligent retrieval",
-  "OutputLanguage": "Output Language",
+  "OutputLanguage": "Language",
   "SimplifiedChinese": "Simplified Chinese",
   "traditionalChinese": "traditional Chinese",
   "English": "English",
@@ -312,13 +312,13 @@
   "Programming": "Programming",
   "SubjectSpecific": "Subject-Specific",
   "Timer": "Timer",
-  "Picksomeone": "Pick someone",
+  "Picksomeone": "Select People",
   "AddToolDescription": "Add Tool Description",
   "AddTool": "Add Tool",
   "CollapseTask": "Collapse Task",
   "AddDefaultTime": "Add Default Time",
   "changetime": "Tip: Click “+” or “-” to change the countdown time.",
-  "MindGrid": "Mind Grid",
+  "MindGrid": "Thinking Grid",
   "EWhiteboard": "E-Whiteboard",
   "Document": "Document",
   "MindMap": "Mind Map",
@@ -464,8 +464,8 @@
   "Successfullyadd": "Successfully add",
   "AdvancedSettings": "Advanced Settings",
   "CourseAccessSettings": "Course Access Settings",
-  "TeachingClass": "Teaching Class",
-  "SelectTeachingClass": "Select Teaching Class",
+  "TeachingClass": "Class",
+  "SelectTeachingClass": "Please select teaching class",
   "CourseDescription": "Course Description",
   "EnterCourseDescription": "Enter Course Description",
   "ObjectivesManagement": "Objectives Management",
@@ -557,6 +557,7 @@
   "SearchforResources": "Search for Resources",
   "NoItemsFound": "No Items Found",
   "SwitchMode": "Switch Mode",
+  "ssSwitchMode": "Switch Mode",
   "Unnamedstage": "Unnamed stage",
   "Stagesequence": "Stagesequence",
   "enterstagetitle": "Please enter the stage title",
@@ -756,7 +757,803 @@
   "CommunityTemplate":"Community Template",
   "MyTemplate":"My Template",
   "Creator":"Creator",
-  "deletethistemplate":"Are you sure to delete this template?"
+  "deletethistemplate":"Are you sure to delete this template?",
+  "ssUploadCont":"Upload course content",
+  "ssUploadOk":"Upload completed",
+  "ssEnterName":"Enter course name",
+  "ssPublish":"Publish",
+  "ssIntell":"Enable smart search",
+  "ssGenMode":"Generation Mode:",
+  "ssFromZero":"Generate from scratch",
+  "ssFromExist":"Generate from existing lesson plan",
+  "ssDialogGen":"Dialog mode generation",
+  "ssBrainGen":"Brainstorm mode generation",
+  "ssGenStyle":"Generation Style:",
+  "ssPrecise":"Precise",
+  "ssCreative":"Creative",
+  "ssAdd":"Add",
+  "ssExistPlan":"Existing Lesson Plan",
+  "ssUploadPlan":"Upload Existing Lesson Plan",
+  "ssOneKeyGenLessonPlan":"One-Click Smart Summary Generation",
+  "ssNoContentL":"This section is empty, add content to fill it",
+  "ssPlanSummary":"Lesson Plan Summary",
+  "ssRightClick":"Right-click to configure prompts",
+  "ssExtract":"Extract Summary",
+  "ssEnterSum":"Please enter lesson plan summary",
+  "ssOptTip":"*You can add optimization suggestions after the task description, click \"Smart Optimization\" to automatically modify",
+  "ssIntOpt":"Smart Optimization",
+  "ssQuote":"Quote",
+  "ssCourseObj":"Course Objectives",
+  "ssExtractObj":"Extract Objectives",
+  "ssEnterObj":"Please enter course objectives",
+  "ssSysRef":"System Recommended References",
+  "ssIntSearch":"Smart Search Materials",
+  "ssRefStd":"Reference Standards",
+  "ssUploadStd":"Upload Reference Standards",
+  "ssSearchMat":"Search Materials",
+  "ssSearchItem":"Search Item:",
+  "ssSelectGrade":"Please select grade",
+  "ssSelectSubj":"Please select subject",
+  "ssSearchKey":"Search Keywords:",
+  "ssEnterKey":"Please enter search keywords",
+  "ssClickSearch":"Click to Search Materials",
+  "ssFilterItem":"Filter Item:",
+  "ssSelectVol":"Please select volume",
+  "ssSelectUnit":"Please select unit",
+  "ssUnit":"Unit *",
+  "ssNextPage":"Next Page",
+  "ssNoSearch":"No content yet, please search",
+  "ssSelected":"Selected",
+  "ssFileName":"File Name",
+  "ssFileType":"File Type",
+  "ssUploadKB":"Upload Knowledge Base",
+  "ssNone":"None",
+  "ssKnowBase":"Knowledge Base",
+  "ssUploadSup":"Upload Supplementary Materials",
+  "ssCourseOver":"Course Overview",
+  "ssConfigWF":"Configure Workflow",
+  "ssWorkflowTip":"You can create a workflow in the Creator Center, then copy and paste the workflow link",
+  "ssEnterAid":"Please enter agentid",
+  "ssAgendaQ":"Agenda and Question Guidance",
+  "ssViewProg":"View Progress",
+  "ssSumCourse":"Summarize and Generate Course Overview",
+  "ssAIOpt":"AI Optimization",
+  "ssGenOver":"Generate Overview and Objectives",
+  "ssRegenOverAndTarget":"Regenerate Overview and Objectives",
+  "ssRestore":"Restore",
+  "ssStageDeletedRestore":"The stage you modified has been deleted by another teacher. Do you need to restore it?",
+  "ssNeed":"Need",
+  "ssGenObj":"Generate Objectives",
+  "ssGenObj2":"Generate Objectives 2",
+  "ssSupMat":"Supplementary Materials",
+  "ssSupDesc":"Supplementary Description",
+  "ssEnterSupDesc":"Please enter course supplementary description: e.g., expected course duration, number of tasks, task difficulty, task types, etc.",
+  "ssCourseOut":"Course Outline",
+  "ssGenOut":"Generate Outline",
+  "ssRegenOut":"Regenerate Outline",
+  "ssTask":"Task",
+  "ssGenTask":"Generate Task",
+  "ssRegenTask":"Regenerate Task",
+  "ssAddTaskUp":"Add Task Above",
+  "ssAddTaskDown":"Add Task Below",
+  "ssCpoteGrp":"Concept Group",
+  "ssGenCpote":"Generate Concept Group",
+  "ssRegenCpote":"Regenerate Concept Group",
+  "ssEnterCpote":"Please enter concept group",
+  "ssQChain":"Question Chain",
+  "ssGenQChain":"Generate Question Chain",
+  "ssRegenQChain":"Regenerate Question Chain",
+  "ssEnterQChain":"Please enter question chain",
+  "ssTargetLay":"Target Layer",
+  "ssGenTargetLay":"Generate Target Layer",
+  "ssRegenTargetLay":"Regenerate Target Layer",
+  "ssEnterTargetLay":"Please enter target layer",
+  "ssTaskClus":"Task Cluster",
+  "ssGenTaskClus":"Generate Task Cluster",
+  "ssRegenTaskClus":"Regenerate Task Cluster",
+  "ssEnterTaskClus":"Please enter task cluster",
+  "ssLessonPlan":"Lesson Plan",
+  "ssEduCase":"Educational Case",
+  "ssRubric":"Rubric",
+  "ssChatRecord":"Chat Record",
+  "ssFirstVol":"Volume 1",
+  "ssSecondVol":"Volume 2",
+  "ssHomeworkOnly":"Homework",
+  "ssSystemPic":"System Image.png",
+  "ssNetworkPic":"Network Image.png",
+  "ssUploadDocPptFiles":"Please upload .doc, .docx, .ppt, .pptx, .md, .txt, .pdf files!",
+  "ssGenLessonPlan":"Generate Lesson Plan",
+  "ssRegenLessonPlan":"Regenerate Lesson Plan",
+  "ssEnterLessonPlan":"Please enter lesson plan",
+  "ssRegenOver":"Regenerate Overview",
+  "ssGenOverOnly":"Generate Overview",
+  "ssExportPlan":"Export Lesson Plan",
+  "ssCatalog":"Catalog",
+  "ssAttachArea":"Attachment Area",
+  "ssOneKeyGen":"One-Click Generate",
+  "ssRegenAllTask":"Regenerate All Tasks",
+  "ssGenAllTool":"Generate All Tools",
+  "ssRegenAllTool":"Regenerate All Tools",
+  "ssGenAllEva":"Generate All Evaluations",
+  "ssRegenAllEva":"Regenerate All Evaluations",
+  "ssGenTool":"Generate Tool",
+  "ssRegenTool":"Regenerate Tool",
+  "ssGenToolEva":"Generate Tool Evaluation",
+  "ssRegenToolEva":"Regenerate Tool Evaluation",
+  "ssAttachment":"Attachment",
+  "ssBatchDown":"Batch Download",
+  "ssModifyTemp":"Modify Template",
+  "ssSaveTemp":"Save Template",
+  "ssFoldRule":"Collapse Rules",
+  "ssExpandRule":"Expand Rules",
+  "ssFillAbility":"Fill Ability",
+  "ssFillEvaStd":"Fill Evaluation Standard",
+  "ssGenRule":"Generate Rules",
+  "ssRegenRule":"Regenerate",
+  "ssAIGenPPT":"AI Generate PPT",
+  "ssAIGenPlan":"AI Generate Lesson Plan",
+  "ssStopGenPlanL":"Stop Generating Lesson Plan",
+  "ssIntSearchV":"Intelligent Video Search",
+  "ssCodeUpload":"Code Upload",
+  "ssAiApp":"AI Application",
+  "ssTaskEvaSys":"Task Evaluation System",
+  "ssOneKeyEvaRule":"One-Click Generate Evaluation Rules",
+  "ssGenEva":"Generate Evaluation",
+  "ssRegenEva":"Regenerate Evaluation",
+  "ssTargetColon":"Target:",
+  "ssAbilityColon":"Ability:",
+  "ssEvaStdColon":"Evaluation Standard:",
+  "ssEvaRuleColon":"Evaluation Rules:",
+  "ssAIScore":"AI Scoring",
+  "ssEnterEvaRule":"Please enter evaluation rules",
+  "ssMindMap":"Mind Map",
+  "ssGroupName":"Group * Name:",
+  "ssTable":"Table",
+  "ssStuGroup":"Student Grouping",
+  "ssQuest":"Questionnaire",
+  "ssChoice":"Multiple Choice",
+  "ssQA":"Q&A",
+  "ssHomework":"Assignment Submission",
+  "ssBatchUp":"Batch Upload",
+  "ssSelMatch":"Select Matching",
+  "ssSort":"Sorting",
+  "ssTrainPlat":"Training Platform",
+  "ssCodeEdit":"Code Editor",
+  "ssTurtle":"Turtle Programming",
+  "ssPersonalL":"Personal Evaluation",
+  "ssTranslate":"Translation",
+  "ssDigital":"Digital Drawing Board",
+  "ssFormula":"Formula Editor",
+  "ssEngWrite":"English Writing",
+  "ssEngSpeak":"English Speaking",
+  "ssTreeView":"Tree View",
+  "ssCompass":"Compass View",
+  "ssFoldGoal":"Fold Goals",
+  "ssExpandGoal":"Expand Goals",
+  "ssExpandTask":"Expand task",
+  "ssFoldTask":"Collapse Task",
+  "ssAddTask":"Add Task",
+  "ssFold":"fold",
+  "ssExpand":"expand",
+  "ssTaskColon":"Task:",
+  "ssAll":"All",
+  "ssTaskNum":"Task *",
+  "ssFileTypeC":"File Type:",
+  "ssLink":"Link",
+  "ssBackCourse":"Back to Course",
+  "ssLastStep":"Back",
+  "ssConfirmUp":"Confirm & Upload",
+  "ssSuccess":"Success",
+  "ssBasicData":"Basic Information",
+  "ssCourseOpt":"Course Description Optimization",
+  "ssTargetGet":"Target File Search",
+  "ssGenOutBtn":"Generate Outline Button",
+  "ssOutTaskGen":"Outline Task Generation",
+  "ssOutDescGen":"Outline Description Generation (Regenerate Task)",
+  "ssOutDescOpt":"Outline Description Optimization",
+  "ssPlanDescOpt":"Lesson Plan Description Optimization",
+  "ssGenTaskBtn":"Generate Task Button",
+  "ssTaskDetail":"Task Details",
+  "ssTaskDesc":"Task Description",
+  "ssToolList":"Tool List",
+  "ssEvaExtract":"Evaluation Extraction",
+  "ssToolOpt":"Tool Description Optimization",
+  "ssTaskEvaOpt":"Task Evaluation Optimization",
+  "ssTaskDescOpt":"Task Description Optimization",
+  "ssTip":"Notice",
+  "ssCopyLink":"Please copy the link to invite collaborative editing",
+  "ssCopyShare":"Copy link and share",
+  "ssCancel":"Cancel",
+  "ssViewDoc":"View document",
+  "ssAddDoc":"Add File",
+  "ssDocTitle":"document title",
+  "ssEnterDocT":"Please enter the title of the document ..",
+  "ssDocIntro":"Document Introduction",
+  "ssEdit":"Edit",
+  "ssDocContent":"document content",
+  "ssConfirm":"Confirm",
+  "ssAddText":"Add text",
+  "ssTextTitle":"Text Title",
+  "ssEnterTextT":"Enter Text Title...",
+  "ssAddLink":"Add a Link",
+  "ssTitle":"Title",
+  "ssEnterLinkT":"Enter link display text",
+  "ssEnterLink":"Enter URL",
+  "ssModifyRes":"Modify resources",
+  "ssAddRes":"Add resources",
+  "ssAddCourseM":"Add course members",
+  "ssSelectMem":"Select Members",
+  "ssSearchMem":"Search for member names",
+  "ssNoStuAvail":"No students available at the moment",
+  "ssSelectTeac":"Select Teaching Classes",
+  "ssSelectClass":"Select Classes",
+  "ssNoData":"No data",
+  "ssAddMember":"Add collaborative members",
+  "ssOther":"other",
+  "ssNoName":"No Name",
+  "ssCreateQues":"Create Questionnaire",
+  "ssEnterTitle":"Please enter title",
+  "ssSingleCh":"Single Choice",
+  "ssMultipleCh":"Multiple Choice",
+  "ssEnterQues":"Enter question",
+  "ssDelete":"Delete",
+  "ssEnterOpt":"Enter option",
+  "ssCreateChoice":"Create Multiple Choice Questions",
+  "ssUploadWait":"Uploading,please wait",
+  "ssIntGen":"Intelligent Generation",
+  "ssSmartPaste":"SMART Paste",
+  "ssAddTool":"Add Tool",
+  "ssAddTool":"Add Tool",
+  "ssTool":"Tool",
+  "ssInteract":"Interactive",
+  "ssCognitive":"Cognitive",
+  "ssEval":"Evaluation",
+  "ssMaterial":"Material Library",
+  "ssMindGrid":"Thinking Grid",
+  "ssEWhite":"E-Whiteboard",
+  "ssNote":"note",
+  "ssCollDoc":"Collaborative document",
+  "ssMathBoard":"Mathematical drawing board",
+  "ssGaugeRate":"Gauge rating",
+  "ssToolDesc":"Add Tool Description",
+  "ssAddQA":"Add Q&A",
+  "ssQuestion":"Question:",
+  "ssEnterQues2":"Please enter your question",
+  "ssAddQues":"Add questions",
+  "ssEnterWant":"Please enter the question you want to answer",
+  "ssUploadPic":"Upload Image",
+  "ssSelectLocal":"Select local file",
+  "ssSelectNet":"Select network files",
+  "ssSelectSys":"Select system files",
+  "ssPainting":"painting",
+  "ssScience":"science and technology",
+  "ssHumanity":"humanity",
+  "ssArt":"art",
+  "ssSearchImg":"Search for image keywords",
+  "ssChangeGrp":"Change to another group",
+  "ssEnterKeyImg":"Please enter keywords to search for images",
+  "ssUploadQuesImg":"Upload Question Image",
+  "ssTipUpload":"Tip: Upload all questions as a single image.",
+  "ssAddOpt":"Add Options",
+  "ssTipEnterOpt":"Tip: Please enter option content for the above questions; options will be shared for all questions.",
+  "ssSetCorrect":"Select Correct Option",
+  "ssSelectAns":"Match Answers to Questions",
+  "ssSelectCorrect":"Select Correct Option",
+  "ssAddEva":"Add Assessment",
+  "ssEnterEva":"Enter Self-Assessment Criteria:",
+  "ssEvaCriteria":"Self-Assessment criteria:",
+  "ssFillEvaDim":"Enter Dimension",
+  "ssRatingLevel":"Rating level:",
+  "ssDesc":"Description:",
+  "ssFillDimDesc":"Enter Description",
+  "ssSortSet":"Settings",
+  "ssAddQues2":"Add Question",
+  "ssQuesSet":"Question Setup",
+  "ssEnterCard":"Enter card content",
+  "ssCorrectOrder":"correct order",
+  "ssAddTable":"Add Table",
+  "ssTableContent":"Table Content",
+  "ssUploadTemp":"Upload Template",
+  "ssAddClass":"Add Class",
+  "ssClassColon":"Class:",
+  "ssSelect":"Please select",
+  "ssSetRandom":"Set random code",
+  "ssRandomColon":"Random code:",
+  "ssEnterRandom":"Please enter the random code",
+  "ssAddPreTime":"Add Default Time",
+  "ssTipClick":"Tip: Click \"+\" or \"-\" to change the countdown time.",
+  "ssImportTarget":"Import target",
+  "ssAddTarget":"Add Objective",
+  "ssTargetName":"Objective",
+  "ssOwner":"Owner",
+  "ssAction":"Operate",
+  "ssImport":"Import",
+  "ssGroupSet":"Group settings",
+  "ssSetGroupNum":"Group Names",
+  "ssEnterName2":"Please enter a name ..",
+  "ssSetGroupPer":"Group size",
+  "ssEnterNum":"Enter Integer(2-10)",
+  "ssModifyName":"Edit Name",
+  "ssFileNameColon":"File name:",
+  "ssEnterModify":"Please enter the name to be modified",
+  "ssCreateEssay":"Create Essay Topic",
+  "ssSelectTemp":"Select the Course Template",
+  "ssSimpleTemp":"Simple Template",
+  "ssChangeStage":"Switching Stage Sequence",
+  "ssStageNum":"Stage *",
+  "ssAddResTemp":"Add Resource Template",
+  "ssTempName":"Template name:",
+  "ssSelectOne":"Select first-level category:",
+  "ssSelectTwo":"Select second-level category:",
+  "ssConfirm2":"Confirm",
+  "ssClose":"Close",
+  "ssStudyPlan":"Learning Plan",
+  "ssEvalSuffix":"'Evaluation",
+  "ssAddToolFull":"Please add the tools in their entirety",
+  "ssNetPoor":"Poor internet connection",
+  "ssSaveEdit":"Do you want to save the edited content?",
+  "ssSave":"Save",
+  "ssNotSave":"Don't save",
+  "ssFillComplete":"Please fill in all the content!",
+  "ssWaitTaskSave":"Please wait for task * to finish answering before saving",
+  "ssWaitTaskCont":"Please wait for task * to finish answering before continuing",
+  "ssFillCourseName":"Please fill in the course name",
+  "ssClickConfirmUpload":"Click confirm upload button",
+  "ssGenOutTaskDesc":"Outline task * description is not yet complete, please check and try again after answering.",
+  "ssCpoteNotGen":"Conceptual group is not yet complete, please check and try again after answering.",
+  "ssQChainNotGen":"Question chain is not yet complete, please check and try again after answering.",
+  "ssTargetNotGen":"Target layer is not yet complete, please check and try again after answering.",
+  "ssTaskClusNotGen":"Task cluster is not yet complete, please check and try again after answering.",
+  "ssGenDescFirst":"Please generate a brief description before generating the outline",
+  "ssPerfectOut":"Please complete the course outline for task *",
+  "ssPerfectPlan":"Please complete the lesson plan for task *",
+  "ssPlanNotGen":"There are still lesson plan descriptions that have not been completed. Do you want to proceed to the next step?",
+  "ssWaitTaskUp":"Please wait for task * to finish answering before uploading",
+  "ssSwitchTask":"Are you sure to switch to task mode?",
+  "ssDeleteStage":"Are you sure to delete this stage?",
+  "ssDeleteTool":"Are you sure to delete this tool?",
+  "ssDeleteSucc":"Delete successful",
+  "ssDeleteQues":"Are you sure to delete this question?",
+  "ssDeleteTask":"Are you sure to delete this task?",
+  "ssSwitchTaskDel":"Switching task order will delete all tool submissions. Do you want to continue?",
+  "ssInDev":"The function is under development",
+  "ssPasteSucc":"Paste successful",
+  "ssEmbedCode":"Embed code",
+  "ssNoPasteObj":"The system did not find the pasted object. Please first copy the link that can be used for pasting.",
+  "ssUploadFail":"Upload failed",
+  "ssSaveAttach":"Successfully saved to attachments",
+  "ssSelectResUp":"Please select the resources to upload",
+  "ssCoverOneUp":"The course cover only supports uploading one page. Please delete it before uploading again",
+  "ssFileOver80MB":"The uploaded file is larger than 80 MB, please select a new file!",
+  "ssAddFileOver80":"The uploaded file exceeds 80MB, please reselect the file!",
+  "ssFileIdError":"This file contains special characters that cannot be converted to fileid, please upload again",
+  "ssOutGenWait":"The outline is being generated. Please wait until it is complete before using this function",
+  "ssGradeColon":"Grade: ",
+  "ssSubjColon":"Subject: ",
+  "ssThemeColon":"Theme: ",
+  "ssClickClass":"Click to select category-",
+  "ssDeleteItem":"Are you sure you want to delete this item?",
+  "ssCantDown":"Cannot download pictures yet",
+  "ssDelSelFile":"Are you sure to delete the selected files?",
+  "ssSelAttach":"Please select the attachments to download first",
+  "ssAttachZip":"Attachments.zip",
+  "ssSwitchMove":"Switching tool order will move the submission results of this tool together. Do you want to continue?",
+  "ssAddSucc":"Successfully added",
+  "ssAddOk":"Successfully added",
+  "ssPlsAddCM":"Please add course members",
+  "ssUseAI":"Please use AI to co create and generate",
+  "ssConfirmTemp":"Confirm template selection? All content will be deleted.",
+  "ssChooseEmpty":"Are you sure to choose an empty template? The course template cannot be reset when modifying the course.",
+  "ssChooseSimple":"Are you sure to choose a simple template? The course template cannot be reset when modifying the course.",
+  "ssChooseFuture":"Are you sure about choosing the future elementary school curriculum design?",
+  "ssLinkTitle":"Please enter link title",
+  "ssIrrevers":"This operation is irreversible. Do you want to continue?",
+  "ssTitleEmpty":"The title cannot be empty!",
+  "ssFillTitle":"Please fill in the title * completely.",
+  "ssOneQues":"At least one question is required",
+  "ssOptEmpty":"Question * option cannot be empty!",
+  "ssOptDup":"Option & and option $ in question * are duplicated, please modify!",
+  "ssEachQues":"Each question requires at least 2 options to be set.",
+  "ssCorrectOpt":"Please complete the correct options for question *",
+  "ssUseAIQues":"Please use AI to co create and generate questions",
+  "ssSmartPasteTemp":"Are you sure to choose the smart paste template? The course template cannot be reset when modifying the course.",
+  "ssStageSeqDel":"Switching the stage sequence will delete all submitted results of the tools. Do you want to continue with this operation?",
+  "ssEnterQuesL":"Please enter the question you want to ask",
+  "ssFillEvaInfo":"Please complete all assessment fields",
+  "ssUploadQues":"Please upload questions",
+  "ssSetAns":"Please set correct answers",
+  "ssOptDup2":"Option * and option $ are duplicated, please modify!",
+  "ssOptEmpty2":"Added options cannot be empty",
+  "ssNewCourse":"This is a newly added course",
+  "ssZhijian":"Zhijian Course",
+  "ssZhixing":"Zhixing Course",
+  "ssIntelli":"Intelligent Creation Course",
+  "ssColumn":"Column",
+  "ssImportOk":"Successfully Import",
+  "ssClearAgain":"The content has been cleared, please do not clear again",
+  "ssDelTarget":"Are you sure to delete this target?",
+  "ssSelSecAdd":"Please select a secondary category, or add one if none exists!",
+  "ssFillCard":"Please fill in the card content!",
+  "ssCardOver10":"Card content cannot exceed 10 characters",
+  "ssNoDupCard":"Cannot add duplicate card content!",
+  "ssSetComplete":"Please complete question * settings.",
+  "ssUploadSucc":"Upload successful",
+  "ssInputNum1":"Please enter a number greater than 1",
+  "ssFillInfo":"Please fill in all information!",
+  "ssInputCode":"Please enter at least 4 digits or English combination random code",
+  "ssCodeDup":"This random code already exists and cannot be duplicated",
+  "ssCourseColon":"Course Name: ",
+  "ssNetImgPng":"Network Image.png",
+  "ssTaskMoveAll":"Switching task order will move all tool submissions together. Do you want to continue?",
+  "ssStageMove":"Switching stage order will move all task submissions together. Do you want to continue?",
+  "ssMoveFail":"Failed to move work, network error",
+  "ssLevel1":"Primary Classification",
+  "ssLevel2":"Secondary Classification",
+  "ssGenAllEvaSet":"Do you want to generate evaluation settings for all tools at once? This will take some time.",
+  "ssExecSucc":"Execution successful",
+  "ssPlsUpPlan":"Please upload lesson plan",
+  "ssCourseBasic":"Course Basic Information",
+  "ssDesigner":"Designer: ",
+  "ssCoursePlan":"Course Lesson Plan",
+  "ssTaskToolEva":"Task * Tool $ Evaluation.docx",
+  "ssEvaTable":"| Literacy | Evaluation Standard | Evaluation Rules |",
+  "ssEvaDegreeZip":"Evaluation and Academic Record.zip",
+  "ssRecordFail":"Failed to get recording permission",
+  "ssPlsWorkflow":"Please enter workflow link",
+  "ssRegenAffect":"Regenerating will affect the generated content. Are you sure you want to regenerate?",
+  "ssPlsAnswer":"Please send again after answering",
+  "ssFileLimit30":"Currently, search files cannot exceed 30. Please reduce some.",
+  "ssNoPermTip":"You do not have permission to modify/view prompts",
+  "ssEnterTask":"Please enter task name",
+  "ssGenTaskPlan":"Please generate task * lesson plan first before performing this operation",
+  "ssPlanTaskNotGen":"Lesson plan task * description is not yet complete. Please check and try again after answering.",
+  "ssNotGenRegen":"Not yet complete. Do you want to regenerate directly?",
+  "ssConfirmRegen":"Confirm Regenerate",
+  "ssGenDescTarget":"Please generate a brief description before generating the target",
+  "ssGenAllDim":"Generate rules for all dimensions? Generate this task only / Generate all",
+  "ssGenAll":"Generate All",
+  "ssGenThisTask":"Generate This Task Only",
+  "ssSendSucc":"Send Successful",
+  "ssTooManyReq":"Oops, too many requests. The server is busy. Please wait and try again.",
+  "ssZero":"Zero",
+  "ssOne":"One",
+  "ssTwo":"Two",
+  "ssThree":"Three",
+  "ssFour":"Four",
+  "ssFive":"Five",
+  "ssSix":"Six",
+  "ssSeven":"Seven",
+  "ssEight":"Eight",
+  "ssNine":"Nine",
+  "ssTen":"Ten",
+  "ssHundred":"Hundred",
+  "ssThousand":"Thousand",
+  "ssTenThousand":"Ten Thousand",
+  "ssHundredMillion":"Hundred Million",
+  "ssJsonFormat":"Returned JSON format is incorrect",
+  "ssStopOutline":"Successfully stopped generating course outline",
+  "ssStopFileGen":"Successfully stopped intelligent search data generation",
+  "ssStopAIOpt":"Successfully stopped AI optimization",
+  "ssStopGenTarget":"Successfully stopped generating target",
+  "ssStopExtract":"Successfully stopped extracting summary",
+  "ssStopGenPlan":"Successfully stopped generating lesson plan",
+  "ssStopGenOut":"Successfully stopped generating outline",
+  "ssStopTaskOver":"Successfully stopped generating task overview",
+  "ssStopTaskTool":"Successfully stopped generating task tools",
+  "ssStopSearch":"Successfully stopped searching data",
+  "ssColon":": ",
+  "ssDocument":"Document",
+  "ssNetWave":"Oops, network fluctuation... Regenerating for you...",
+  "ssTopic":"Topic",
+  "ssOption":"Option",
+  "ssEnterOption":"Please enter option",
+  "ssAddEvaOpt":"Please add evaluation before optimization",
+  "ssPlanGenFail":"Lesson plan generation failed for this task. Do you want to regenerate? Cancel to automatically generate the next task!",
+  "ssEvaCompleteInfo":"Please complete the information for evaluation $ of task * before generating rules",
+  "ssNoStarLevel":"No star rating found.",
+  "ssStar0":"0 Star",
+  "ssStar2":"2 Star",
+  "ssStar3":"3 Star",
+  "ssStar4":"4 Star",
+  "ssStar5":"5 Star",
+  "ssNoMatch":"No matching content found.",
+  "ssEvaRuleSucc":"Rules for evaluation $ of task * generated successfully",
+  "ssFormatErr":"Data format error returned, Xiaoke is retrieving for you again...",
+  "ssRefMat":"Reference Material",
+  "ssSelectMat":"Please select the search materials to use",
+  "ssGetAllData":"All data has been retrieved",
+  "ssSearchWait":"Searching, please wait",
+  "ssNoSearchRes":"No content found",
+  "ssQueryFail":"Query failed",
+  "ssOnlyZip":"Only ZIP files are supported for upload",
+  "ssZipFail":"Failed to parse the ZIP file",
+  "ssNoPageSel":"No main page selected",
+  "ssEnterContentL":"Please enter content",
+  "ssClickInsert":"Please click the button to insert a table",
+  "ssTimeUp":"Time's up!!!",
+  "ssCategoryFilter":"Category Filter",
+  "ssToolName":"Tool Name",
+  "ssEnterToolName":"Please enter tool name",
+  "ssUrlSource":"URL Source",
+  "ssEnterUrlSource":"Please enter URL source",
+  "ssToolDescName":"Tool Description",
+  "ssEnterToolDesc":"Please enter tool description",
+  "ssLabel":"Label",
+  "ssSelectLabel":"Please select label",
+  "ssNoLogin":"No Login Required",
+  "ssScanLogin":"Scan to Login",
+  "ssRegLogin":"Register to Login",
+  "ssFree":"Free",
+  "ssPaid":"Paid",
+  "ssChinese":"Chinese",
+  "ssEnglish":"English",
+  "ssScene":"Scene",
+  "ssFillToolName":"Please fill in tool name",
+  "ssFillUrlSource":"Please fill in URL source",
+  "ssFillToolDesc":"Please fill in tool description",
+  "ssView":"View",
+  "ssType":"Type",
+  "ssVideoSet":"Interactive Video Settings",
+  "ssAddVideo":"Add Video",
+  "ssReset":"Reset",
+  "ssUploadVideo":"Please upload video",
+  "ssVideoName":"Video Name",
+  "ssInterSet":"Interaction Settings",
+  "ssAddHiding":"Add hiding",
+  "ssTriggerTime":"Trigger Time:",
+  "ssVideoSec":"Which second of video",
+  "ssSecond":"second",
+  "ssToolSet":"Tool Settings:",
+  "ssIsSet":"Set",
+  "ssInsertTool":"Insert Tool",
+  "ssVideoPlayFail":"This video cannot be played, please try again later",
+  "ssEnterVideoName":"Please enter video name",
+  "ssAddOneInteract":"Please add at least one interaction",
+  "ssSameTriggerTime":"Cannot set the same trigger time",
+  "ssSetToolInteract":"Please set tool for interaction",
+  "ssTimeExceedDur":"Set time cannot exceed video duration",
+  "ssConfirmDelete":"Are you sure to delete?",
+  "ssConfirmReset":"Are you sure to reset?",
+  "ssEssayTitle":"Essay Title",
+  "ssFillEssayTitle":"Please fill in essay title",
+  "ssEssayRequire":"Essay Requirements",
+  "ssFillEssayReq":"Please fill in essay requirements",
+  "ssPreset":"Preset",
+  "ssSetEvalTemp":"Click to set the following content as evaluation template",
+  "ssSetName":"Set Name",
+  "ssEnterNameOnly":"Please enter name",
+  "ssSetNamePls":"Please set name!",
+  "ssAddOneEval":"Please add at least one evaluation!",
+  "ssDeleteSuccess":"Delete successful",
+  "ssConfirmDelTemp":"Are you sure to delete this template?",
+  "ssEvalResource":"Evaluation Resource",
+  "ssPublicResource":"Public Resource",
+  "ssPersonalResource":"Personal Resource",
+  "ssOrgResource":"Organization Resource",
+  "ssSearchResource":"Search Resource",
+  "ssSecondLevel":"Second Level",
+  "ssRename":"Rename",
+  "ssSetCategory":"Set Category",
+  "ssShare":"Share",
+  "ssNoContent":"No Content",
+  "ssEvalDimension":"Evaluation Dimension:",
+  "ssDimensionDesc":"Dimension Description:",
+  "ssUse":"Use",
+  "ssTemplateName":"Template Name:",
+  "ssAddCategory":"Add Category",
+  "ssSelectFirst":"Select First Level:",
+  "ssCategoryName":"Category Name:",
+  "ssSelectSecond":"Select Second Level:",
+  "ssSelectSecondPls":"Please select second level, if there is no second level please go to add!",
+  "ssSetSuccess":"Set Success",
+  "ssShareSuccess":"Share Success",
+  "ssSelectShare":"Please select which resource to share to!",
+  "ssConfirmDelTemp2":"Are you sure to delete this template?",
+  "ssChooseEvalTemp":"Please select evaluation template!",
+  "ssUseEvalTemp":"Do you want to use this evaluation template? It will overwrite the existing evaluation!",
+  "ssFirstLevel":"First Level",
+  "ssResource":"Resource",
+  "ssEnglishOral":"English Oral",
+  "ssSetEnglishOralInfo":"Set English Oral Information",
+  "ssDescription":"Description",
+  "ssEnterDesc":"Please enter description of the question",
+  "ssSetEnglishOralQ":"Set English Oral Questions",
+  "ssQuestionTypeSel":"Question Type Selection",
+  "ssEvalQuestion":"Evaluation Questions",
+  "ssEvalOutline":"Evaluation Outline",
+  "ssSaveEditContent":"Do you want to save the edited content?",
+  "ssAddOneOralQ":"Please add at least one oral question",
+  "ssEnterContentQ":"Question *: Please enter content",
+  "ssEnterQuestionQ":"Question *: Please enter question",
+  "ssEnterPointQ":"Question *: Please enter key points",
+  "ssEnterRoleNameQ":"Question *: Please enter role name",
+  "ssEnterRoleDefQ":"Question *: Please enter role definition",
+  "ssEnterRoleGreetQ":"Question *: Please enter role greeting",
+  "ssSelectOptTask":"Select tasks to optimize:",
+  "ssSelectAll":"Select All",
+  "ssSelectOptPart":"Select parts to optimize:",
+  "ssSelectOptContent":"Select optimization content",
+  "ssEnterWantKnow":"Enter what you want to know here",
+  "ssSend":"Send",
+  "ssEnterWantKnowPls":"Please enter what you want to know",
+  "ssAnswerFinishSend":"Please send again after answering",
+  "ssAllContent":"All Content",
+  "ssTaskDesign":"Task Design",
+  "ssEvalDesign":"Evaluation Design",
+  "ssModifyContent":"Modify Content",
+  "ssRequire":"Requirement",
+  "ssSendSuccess":"Send Success",
+  "ssWaitPls":"Please wait...",
+  "ssGetChatFail":"Failed to get chat records",
+  "ssClickSaveDocx":"Click to save this content as a docx file to the appendix",
+  "ssMore":"More",
+  "ssClearScreen":"Clear Screen",
+  "ssContinuous":"Continuous Dialog",
+  "ssAuthor":"Author:",
+  "ssClickStartRec":"Click button to start recording",
+  "ssTerminate":"Terminate",
+  "ssHasPlanSum":"Existing Lesson Plan Summary",
+  "ssCourseTarget":"Course Objectives",
+  "ssCourseBrief":"Course Brief Description",
+  "ssTaskOutline":"Task * Course Outline",
+  "ssConceptGroup":"Concept Group",
+  "ssProblemChain":"Problem Chain",
+  "ssTargetLayer":"Target Layer",
+  "ssTaskCluster":"Task Cluster",
+  "ssTaskPlan":"Task * Lesson Plan",
+  "ssTaskDescL":"Task * Task Description",
+  "ssTaskToolDesc":"Task * Tool $ Description",
+  "ssEnterContent":"Please enter content",
+  "ssWaitAnswerSend":"Please wait for the answer to finish before sending",
+  "ssClearChatConfirm":"Are you sure to clear chat records?",
+  "ssClearChatSuccess":"Clear chat records successful",
+  "ssClearChatFail":"Clear chat records failed",
+  "ssCopySuccess":"Copy successful",
+  "ssStartRecPls":"Please start recording first",
+  "ssHelloAssistant":"Hello, I am your course creation assistant Xiaoke. If you encounter any problems during course creation, you can chat with me~, I will try my best to help you",
+  "ssSaveFail":"Save failed",
+  "ssFormatErrJson":"Returned JSON format is incorrect",
+  "ssAddTopic":"Add Topic",
+  "ssAdopt":"Adopt",
+  "ssSummaryDiscuss":"Summarize Discussion",
+  "ssSummaryCourse":"Summarize and Generate Course Overview",
+  "ssRecordAudioSend":"Please record audio before sending",
+  "ssQuoteContent":"Quote Content",
+  "ssCourseBriefHas":"Course brief description already has content, overwrite?",
+  "ssAdoptSuccess":"Adopt successful",
+  "ssAudio":"Audio:",
+  "ssAudioNum":"Audio *",
+  "ssLanguage":"Language:",
+  "ssRecording":"Recording...",
+  "ssPaused":"Paused...",
+  "ssWaitRecording":"Waiting for recording...",
+  "ssMandarin":"Mandarin",
+  "ssCantonese":"Cantonese",
+  "ssConfirmDelAudio":"Are you sure to delete this audio?",
+  "ssReminder":"Reminder",
+  "ssStartRecording":"Recording started",
+  "ssStillRecording":"Still recording",
+  "ssStopRecording":"Recording stopped",
+  "ssEndRecording":"Recording ended",
+  "ssPromptSet":"Prompt Settings",
+  "ssBasicCreate":"Basic Creation",
+  "ssDefaultPrompt":"Default Prompt",
+  "ssDefaultPrompt1":"Default Prompt 1",
+  "ssDefaultPrompt2":"Default Prompt 2",
+  "ssDefaultPrompt3":"Default Prompt 3",
+  "ssEnterPls":"Please enter....",
+  "ssEnterPrompt":"Please enter prompt",
+  "ssConfirmResetPrompt":"Are you sure to reset this prompt?",
+  "ssAiDetail":"Please design a project-based learning course named <Course Name> for <Course Subject> subject, targeting <Grade Level>, based on <Course Brief Description>.",
+  "ssAiOutline":"Please design sequential teaching activities for this project-based learning course named <Course Name> for <Course Subject> subject, targeting <Grade Level>, based on <Course Brief Description> and #Supplementary Reference Materials (each task needs at least 50 tokens of detailed description), activity design for each teaching activity (file content can be used directly), and evaluation rubrics for each teaching activity (students can...).",
+  "ssAiTask":"Please base on <Teaching Task Lesson Plan>.",
+  "ssAiDetail1":"Please redesign this teaching task based on <Course Description>. The task needs at least 50 tokens of detailed description, including task design and evaluation criteria.",
+  "ssAiDetail2":"Please optimize the task description and task name considering the entire course: <Task Name>: <Task Description>",
+  "ssAiDetail3":"Please optimize tool guidance considering the entire course, **especially considering the task, tool name and tool content**.",
+  "ssAiDetail4":"Please optimize evaluation criteria considering the entire course, **especially considering the task details** and tools.",
+  "ssAiTeacher":"Please design detailed lesson plans for each teaching task based on <Task Outline>, including but not limited to teaching objectives, teaching process, teacher-student discussion, extension, student task sheets, practice or Quiz and answers for related knowledge points, etc.",
+  "ssTeacherDetail":"Please redesign this lesson plan based on <Lesson Plan Description>. Including but not limited to teaching objectives, teaching process, teacher-student discussion, extension, student task sheets, practice or Quiz and answers for related knowledge points, etc.",
+  "ssSavePromptTemp":"Save Prompt Template",
+  "ssTemplateDesc":"Template Description:",
+  "ssPermission":"Permission:",
+  "ssPersonal":"Personal",
+  "ssEveryone":"Everyone",
+  "ssPublicPrompt":"Public Prompt:",
+  "ssNotPublic":"Not Public",
+  "ssPublic":"Public",
+  "ssConfirmSaveCourse":"Confirm and Save Course",
+  "ssEnterTemplateName":"Please enter template name",
+  "ssConfirmModifyTemp":"Are you sure to modify this template?",
+  "ssModifySuccess":"Modify successful",
+  "ssTaskAiGenPPT":"Task * AI Generated PPT",
+  "ssGenWaitPls":"AI is working hard to generate, please wait.",
+  "ssStop":"Stop",
+  "ssGenOutline":"Please generate outline",
+  "ssSelectTemplate":"Select Template",
+  "ssSelectTemplatePls":"Please select template",
+  "ssRegenOutline":"Regenerate Outline",
+  "ssRegenPPT":"Regenerate PPT",
+  "ssGenPPT":"Generate PPT",
+  "ssPrevStep":"Previous Step",
+  "ssNextStep":"Next Step",
+  "ssCollapse":"Collapse",
+  "ssTaskGenPPT":"Task * Generated PPT",
+  "ssOpen":"Open",
+  "ssStopSuccess":"Successfully stopped",
+  "ssClickGenPPT":"Please click 'Generate PPT' button",
+  "ssGenWait":"Generating, please wait",
+  "ssGenOutlinePls":"Please generate outline content first",
+  "ssGenFailRetry":"Generation failed, regenerating",
+  "ssThanksWatch":"Thanks for watching, class dismissed!",
+  "ssSmartSearch":"Smart Search",
+  "ssSearchVideoKey":"Search video keywords (use \",\" to separate multiple keywords)",
+  "ssComprehensive":"Comprehensive",
+  "ssMostPlayed":"Most Played",
+  "ssLatest":"Latest",
+  "ssMostDanmu":"Most Danmu",
+  "ssMostFav":"Most Favorites",
+  "ssAddSuccess":"Added successfully",
+  "ssEnterKeyword":"Please enter keyword",
+  "ssServerBusy":"Oops, too many requests, server is busy, please search keywords manually",
+  "ssPdfView":"PDF View",
+  "ssDocView":"Document View",
+  "ssEvalSetting":"Evaluation Settings",
+  "ssRegenEval":"Regenerate Evaluation",
+  "ssGenEval":"Generate Evaluation",
+  "ssLiteracy":"Literacy:",
+  "ssFillTarget":"Fill Target",
+  "ssAiScoring":"AI Scoring",
+  "ssEvalStandard":"Evaluation Standard:",
+  "ssFillEvalStd":"Fill Evaluation Standard",
+  "ssEvalDetail":"Evaluation Detail:",
+  "ssCollapseDetail":"Collapse Detail",
+  "ssExpandDetail":"Expand Detail",
+  "ssEnterEvalDetail":"Please enter evaluation detail",
+  "ssRegenDetail":"Regenerate",
+  "ssGenDetail":"Generate Detail",
+  "ssStopGenEvalSet":"Successfully stopped generating evaluation settings",
+  "ssStopGenEvalDetail":"Successfully stopped generating evaluation detail",
+  "ssGenWaitFinish":"Generating, please wait until finished",
+  "ssUploadRefGenEval":"Please upload reference standards before generating evaluation",
+  "ssCompleteInfoGen":"Please complete evaluation information before generating detail",
+  "ssEvalDetailGenOk":"Evaluation detail generated successfully",
+  "ssAppCenter":"App Center",
+  "ssSelectScope":"Please select display scope",
+  "ssSelectType":"Please select type",
+  "ssSelectStatus":"Please select status",
+  "ssEnterAppName":"Please enter app name",
+  "ssWorkflow":"Workflow",
+  "ssAgent":"Agent",
+  "ssCopyCount":"Copy Count",
+  "ssCancelLike":"Cancel Like",
+  "ssLike":"Like",
+  "ssCancelCollect":"Cancel Collect",
+  "ssCollect":"Collect",
+  "ssTest":"Test",
+  "ssStable":"Stable",
+  "ssViewMore":"View More",
+  "ssAllApps":"All Apps",
+  "ssOfficial":"Official & Featured",
+  "ssOrgInternal":"Organization",
+  "ssMine":"Mine",
+  "ssAllStatus":"All Status",
+  "ssAllTypes":"All Types",
+  "ssSelectAppFirst":"Please select an app first!",
+  "ssGetAppTypeFail":"Failed to get app type",
+  "ssGetAppFail":"Failed to get app",
+  "ssLikeSuccess":"Like successful",
+  "ssLikeFail":"Like failed",
+  "ssCancelLikeOk":"Cancel like successful",
+  "ssCancelLikeFail":"Cancel like failed",
+  "ssCollectSuccess":"Collect successful",
+  "ssCollectFail":"Collect failed",
+  "ssCancelCollectOk":"Cancel collect successful",
+  "ssCancelCollectFail":"Cancel collect failed",
+  "ssAddHTML":"Add HTML",
+  "ssModifyHTML":"Modify HTML",
+  "ssFillNameInfo":"Please complete the name information",
+  "ssFillCodeInfo":"Please complete the code information",
+  "ssLoadHtmlError":"Error loading HTML file:"
 
 
 

+ 798 - 2
src/lang/hk.json

@@ -219,7 +219,7 @@
   "initializepasswordteacher":"確定初始化此老師的密碼嗎?",
   "othertypesofteaching":"不能與其他教研室類型名稱相同!",
   "CourseManagement": "課程管理",
-  "EvaluationManagement": "評管理",
+  "EvaluationManagement": "評管理",
   "CreateCourse": "創建課程",
   "SimplifiedCourse": "極簡式課程",
   "Classroommode": "解析教案模式",
@@ -558,6 +558,7 @@
   "SearchforResources": "搜尋資源",
   "NoItemsFound": "暫無內容",
   "SwitchMode": "切換模式",
+  "ssSwitchMode": "切換模式",
   "Unnamedstage": "未命名階段",
   "Stagesequence": "階段順序",
   "enterstagetitle": "請輸入階段標題",
@@ -757,7 +758,802 @@
   "CommunityTemplate":"社區模板",
   "MyTemplate":"我的模板",
   "Creator":"創建人",
-  "deletethistemplate":"確定刪除此模板嗎?"
+  "deletethistemplate":"確定刪除此模板嗎?",
+  "ssUploadCont":"上傳課程內容",
+  "ssUploadOk":"上傳完成",
+  "ssEnterName":"請輸入課程名稱",
+  "ssPublish":"是否公開此課程",
+  "ssIntell":"是否開啟智能檢索",
+  "ssGenMode":"生成模式:",
+  "ssFromZero":"從零開始生成",
+  "ssFromExist":"從已有教案生成",
+  "ssDialogGen":"對話模式生成",
+  "ssBrainGen":"頭腦風暴模式生成",
+  "ssGenStyle":"生成風格:",
+  "ssPrecise":"精確",
+  "ssCreative":"創意",
+  "ssAdd":"添加",
+  "ssExistPlan":"已有教案",
+  "ssUploadPlan":"上傳已有教案",
+  "ssOneKeyGenLessonPlan":"一鍵智能總結生成",
+  "ssNoContentL":"暫時還沒有內容,快去添加吧",
+  "ssPlanSummary":"已有教案摘要",
+  "ssRightClick":"右鍵單擊可配置提示詞",
+  "ssExtract":"提取摘要",
+  "ssEnterSum":"請輸入教案摘要",
+  "ssOptTip":"*可以將需要優化的建議添加在任務描述後,點擊\"智能優化\",自動進行修改",
+  "ssIntOpt":"智能優化",
+  "ssQuote":"引用",
+  "ssCourseObj":"課程目標",
+  "ssExtractObj":"提取目標",
+  "ssEnterObj":"請輸入課程目標",
+  "ssSysRef":"系統推薦參考資料",
+  "ssIntSearch":"智能檢索資料",
+  "ssRefStd":"參考標準",
+  "ssUploadStd":"上傳參考標準",
+  "ssSearchMat":"檢索資料",
+  "ssSearchItem":"檢索項:",
+  "ssSelectGrade":"請選擇年級",
+  "ssSelectSubj":"請選擇學科",
+  "ssSearchKey":"檢索關鍵詞:",
+  "ssEnterKey":"請輸入檢索關鍵詞",
+  "ssClickSearch":"點擊檢索資料",
+  "ssFilterItem":"篩選項:",
+  "ssSelectVol":"請選擇冊數",
+  "ssSelectUnit":"請選擇單元",
+  "ssUnit":"第*單元",
+  "ssNextPage":"下一頁",
+  "ssNoSearch":"暫時還沒有內容,快去檢索吧",
+  "ssSelected":"選中",
+  "ssFileName":"文件名",
+  "ssFileType":"文件類型",
+  "ssUploadKB":"上傳知識庫",
+  "ssNone":"無",
+  "ssKnowBase":"知識庫",
+  "ssUploadSup":"上傳補充資料",
+  "ssCourseOver":"課程概況",
+  "ssConfigWF":"配置工作流",
+  "ssWorkflowTip":"您可在創作者中心中創建工作流後,複製工作流鏈接並貼入",
+  "ssEnterAid":"請輸入agentid",
+  "ssAgendaQ":"議程和問題引導",
+  "ssViewProg":"查看進度",
+  "ssSumCourse":"總結並生成課程概況",
+  "ssAIOpt":"AI優化",
+  "ssGenOver":"生成概況和目標",
+  "ssRegenOverAndTarget":"重新生成概況和目標",
+  "ssRestore":"復原",
+  "ssStageDeletedRestore":"您所修改的階段已經被其他老師刪除了,需要恢復嘛?",
+  "ssNeed":"需要",
+  "ssGenObj":"生成目標",
+  "ssGenObj2":"生成目標2",
+  "ssSupMat":"補充資料",
+  "ssSupDesc":"補充描述",
+  "ssEnterSupDesc":"請輸入課程補充描述:例如您期望的課程時長、任務數量、任務難度、任務類型等。",
+  "ssCourseOut":"課程大綱",
+  "ssGenOut":"生成大綱",
+  "ssRegenOut":"重新生成大綱",
+  "ssTask":"任務",
+  "ssGenTask":"生成任務",
+  "ssRegenTask":"重新生成任務",
+  "ssAddTaskUp":"在上面加入一個任務",
+  "ssAddTaskDown":"在下面加入一個任務",
+  "ssCpoteGrp":"概念群",
+  "ssGenCpote":"生成概念群",
+  "ssRegenCpote":"重新生成概念群",
+  "ssEnterCpote":"請輸入概念群",
+  "ssQChain":"問題鏈",
+  "ssGenQChain":"生成問題鏈",
+  "ssRegenQChain":"重新生成問題鏈",
+  "ssEnterQChain":"請輸入問題鏈",
+  "ssTargetLay":"目標層",
+  "ssGenTargetLay":"生成目標層",
+  "ssRegenTargetLay":"重新生成目標層",
+  "ssEnterTargetLay":"請輸入目標層",
+  "ssTaskClus":"任務簇",
+  "ssGenTaskClus":"生成任務簇",
+  "ssRegenTaskClus":"重新生成任務簇",
+  "ssEnterTaskClus":"請輸入任務簇",
+  "ssLessonPlan":"教案",
+  "ssEduCase":"學歷案",
+  "ssRubric":"量規",
+  "ssChatRecord":"聊天欄記錄",
+  "ssFirstVol":"上冊",
+  "ssSecondVol":"下冊",
+  "ssHomeworkOnly":"作業",
+  "ssSystemPic":"系統圖片.png",
+  "ssNetworkPic":"網絡圖片.png",
+  "ssUploadDocPptFiles":"請上傳.doc,.docx,.ppt,.pptx,.md,.txt,.pdf文件!",
+  "ssGenLessonPlan":"生成教案",
+  "ssRegenLessonPlan":"重新生成教案",
+  "ssEnterLessonPlan":"請輸入教案",
+  "ssRegenOver":"重新生成概況",
+  "ssGenOverOnly":"生成概況",
+  "ssExportPlan":"導出教案",
+  "ssCatalog":"目錄",
+  "ssAttachArea":"附件區",
+  "ssOneKeyGen":"一鍵生成",
+  "ssRegenAllTask":"重新生成所有任務",
+  "ssGenAllTool":"一鍵生成所有工具",
+  "ssRegenAllTool":"重新生成所有工具",
+  "ssGenAllEva":"一鍵生成所有評價",
+  "ssRegenAllEva":"重新生成所有評價",
+  "ssGenTool":"生成工具",
+  "ssRegenTool":"重新生成工具",
+  "ssGenToolEva":"生成工具評價",
+  "ssRegenToolEva":"重新生成工具評價",
+  "ssAttachment":"附件",
+  "ssBatchDown":"批量下載",
+  "ssModifyTemp":"修改模板",
+  "ssSaveTemp":"保存模板",
+  "ssFoldRule":"收起細則",
+  "ssExpandRule":"展開細則",
+  "ssFillAbility":"填寫能力",
+  "ssFillEvaStd":"填寫評價標準",
+  "ssGenRule":"生成細則",
+  "ssRegenRule":"重新生成",
+  "ssAIGenPPT":"AI生成PPT",
+  "ssAIGenPlan":"AI生成學歷案",
+  "ssStopGenPlanL":"停止生成學歷案",
+  "ssIntSearchV":"智能檢索視頻",
+  "ssCodeUpload":"代碼上傳",
+  "ssAiApp":"Ai應用",
+  "ssTaskEvaSys":"任務評價體系",
+  "ssOneKeyEvaRule":"一鍵生成評價細則",
+  "ssGenEva":"生成評價",
+  "ssRegenEva":"重新生成評價",
+  "ssTargetColon":"目標:",
+  "ssAbilityColon":"能力:",
+  "ssEvaStdColon":"評價標準:",
+  "ssEvaRuleColon":"評價細則:",
+  "ssAIScore":"AI評分",
+  "ssEnterEvaRule":"請輸入評價細則",
+  "ssMindMap":"思維導圖",
+  "ssGroupName":"第*組名稱:",
+  "ssTable":"表格",
+  "ssStuGroup":"學生分組",
+  "ssQuest":"問卷調查",
+  "ssChoice":"選擇題",
+  "ssQA":"問答",
+  "ssHomework":"作業提交",
+  "ssBatchUp":"批量上傳",
+  "ssSelMatch":"選擇匹配",
+  "ssSort":"排序",
+  "ssTrainPlat":"訓練平台",
+  "ssCodeEdit":"源碼編輯",
+  "ssTurtle":"海龜編程",
+  "ssPersonalL":"個人評價",
+  "ssTranslate":"翻譯",
+  "ssDigital":"數字畫板",
+  "ssFormula":"公式編輯",
+  "ssEngWrite":"英語寫作",
+  "ssEngSpeak":"英語口語",
+  "ssTreeView":"目標樹",
+  "ssCompass":"目標羅盤",
+  "ssFoldGoal":"收起目標",
+  "ssExpandGoal":"展開目標",
+  "ssExpandTask":"展開任務",
+  "ssFoldTask":"收起任務",
+  "ssAddTask":"添加任務",
+  "ssFold":"折疊",
+  "ssExpand":"展開",
+  "ssTaskColon":"任務:",
+  "ssAll":"全部",
+  "ssTaskNum":"任務*",
+  "ssFileTypeC":"文件類型:",
+  "ssLink":"鏈接",
+  "ssBackCourse":"返回課程",
+  "ssLastStep":"上一步",
+  "ssConfirmUp":"確認上傳",
+  "ssSuccess":"成功",
+  "ssBasicData":"基礎資料",
+  "ssCourseOpt":"課程描述優化",
+  "ssTargetGet":"目標文件檢索",
+  "ssGenOutBtn":"生成大綱按鈕",
+  "ssOutTaskGen":"大綱任務生成",
+  "ssOutDescGen":"大綱描述生成(重新生成任務)",
+  "ssOutDescOpt":"大綱描述優化",
+  "ssPlanDescOpt":"教案描述優化",
+  "ssGenTaskBtn":"生成任務按鈕",
+  "ssTaskDetail":"任務詳情",
+  "ssTaskDesc":"任務描述",
+  "ssToolList":"工具列表",
+  "ssEvaExtract":"評價提取",
+  "ssToolOpt":"工具描述優化",
+  "ssTaskEvaOpt":"任務評價優化",
+  "ssTaskDescOpt":"任務描述優化",
+  "ssTip":"提示",
+  "ssCopyLink":"請複製該鏈接邀請協同編輯",
+  "ssCopyShare":"複製鏈接分享",
+  "ssCancel":"取消",
+  "ssViewDoc":"查看文檔",
+  "ssAddDoc":"添加文檔",
+  "ssDocTitle":"文檔標題",
+  "ssEnterDocT":"請輸入文檔標題名...",
+  "ssDocIntro":"文檔簡介",
+  "ssEdit":"修改",
+  "ssDocContent":"文檔內容",
+  "ssConfirm":"確定",
+  "ssAddText":"添加富文本",
+  "ssTextTitle":"文本標題",
+  "ssEnterTextT":"請輸入文本標題...",
+  "ssAddLink":"添加鏈接",
+  "ssTitle":"標題",
+  "ssEnterLinkT":"請輸入鏈接標題",
+  "ssEnterLink":"請輸入鏈接",
+  "ssModifyRes":"修改資源",
+  "ssAddRes":"添加資源",
+  "ssAddCourseM":"添加課程成員",
+  "ssSelectMem":"選擇成員",
+  "ssSearchMem":"搜索成員名稱",
+  "ssNoStuAvail":"暫無學生可選",
+  "ssSelectTeac":"選擇授課班級",
+  "ssSelectClass":"選擇班級",
+  "ssNoData":"暫無數據",
+  "ssAddMember":"添加協同成員",
+  "ssOther":"其他",
+  "ssNoName":"暫無姓名",
+  "ssCreateQues":"創建問卷",
+  "ssEnterTitle":"請輸入標題",
+  "ssSingleCh":"單選題",
+  "ssMultipleCh":"多選題",
+  "ssEnterQues":"請輸入題目",
+  "ssDelete":"刪除",
+  "ssEnterOpt":"請輸入選項",
+  "ssCreateChoice":"創建選擇題",
+  "ssUploadWait":"上傳中,請稍後",
+  "ssIntGen":"智能生成",
+  "ssSmartPaste":"智能粘貼",
+  "ssAddTool":"添加工具",
+  "ssTool":"工具",
+  "ssInteract":"互動類",
+  "ssCognitive":"思維類",
+  "ssEval":"評價類",
+  "ssMaterial":"素材庫",
+  "ssMindGrid":"思維網格",
+  "ssEWhite":"電子白板",
+  "ssNote":"便簽",
+  "ssCollDoc":"協同文檔",
+  "ssMathBoard":"數學畫板",
+  "ssGaugeRate":"量規評分",
+  "ssToolDesc":"添加工具描述",
+  "ssAddQA":"添加問答",
+  "ssQuestion":"問題:",
+  "ssEnterQues2":"請輸入您要問的問題",
+  "ssAddQues":"添加問題",
+  "ssEnterWant":"請輸入您想要回答的問題",
+  "ssUploadPic":"上傳圖片",
+  "ssSelectLocal":"選擇本地文件",
+  "ssSelectNet":"選擇網絡文件",
+  "ssSelectSys":"選擇系統文件",
+  "ssPainting":"繪畫",
+  "ssScience":"科技",
+  "ssHumanity":"人文",
+  "ssArt":"藝術",
+  "ssSearchImg":"搜索圖片關鍵字",
+  "ssChangeGrp":"換一組",
+  "ssEnterKeyImg":"請輸入關鍵詞搜索圖片",
+  "ssUploadQuesImg":"上傳題目圖片",
+  "ssTipUpload":"提示:請將所有題目上傳為一張圖片。",
+  "ssAddOpt":"添加選項",
+  "ssTipEnterOpt":"提示:請輸入以上題目的選項內容,此選項為所有題目共享。",
+  "ssSetCorrect":"設置每道題目的正確選項",
+  "ssSelectAns":"根據題目選擇正確答案",
+  "ssSelectCorrect":"請選擇正確答案",
+  "ssAddEva":"添加評價",
+  "ssEnterEva":"請輸入個人評價指標:",
+  "ssEvaCriteria":"個人評價指標:",
+  "ssFillEvaDim":"填寫評價維度",
+  "ssRatingLevel":"評星等級:",
+  "ssDesc":"描述:",
+  "ssFillDimDesc":"填寫維度描述",
+  "ssSortSet":"排序設置",
+  "ssAddQues2":"添加題目",
+  "ssQuesSet":"題目設置",
+  "ssEnterCard":"請輸入卡片內容",
+  "ssCorrectOrder":"正確順序",
+  "ssAddTable":"添加表格",
+  "ssTableContent":"表格內容",
+  "ssUploadTemp":"上傳模板",
+  "ssAddClass":"添加班級",
+  "ssClassColon":"班級:",
+  "ssSelect":"請選擇",
+  "ssSetRandom":"設置隨機碼",
+  "ssRandomColon":"隨機碼:",
+  "ssEnterRandom":"請輸入隨機碼",
+  "ssAddPreTime":"添加預設時間",
+  "ssTipClick":"提示:點擊「+」或「-」修改倒計時時長。",
+  "ssImportTarget":"導入目標",
+  "ssAddTarget":"添加目標",
+  "ssTargetName":"目標名稱",
+  "ssOwner":"負責人",
+  "ssAction":"操作",
+  "ssImport":"導入",
+  "ssGroupSet":"分組設置",
+  "ssSetGroupNum":"請設置小組數量及名稱",
+  "ssEnterName2":"請輸入名稱...",
+  "ssSetGroupPer":"請設置每組人數",
+  "ssEnterNum":"請輸入2-10的數字",
+  "ssModifyName":"修改名稱",
+  "ssFileNameColon":"文件名稱:",
+  "ssEnterModify":"請輸入要修改的名稱",
+  "ssCreateEssay":"創建作文題目",
+  "ssSelectTemp":"選擇課程模板",
+  "ssSimpleTemp":"簡易模板",
+  "ssChangeStage":"切換階段順序",
+  "ssStageNum":"第*階段",
+  "ssAddResTemp":"添加資源模板",
+  "ssTempName":"模板名稱:",
+  "ssSelectOne":"選擇一級分類:",
+  "ssSelectTwo":"選擇二級分類:",
+  "ssConfirm2":"確 認",
+  "ssClose":"關 閉",
+  "ssStudyPlan":"學歷案",
+  "ssEvalSuffix":"的評價",
+  "ssAddToolFull":"請把工具添加完整",
+  "ssNetPoor":"網絡不佳",
+  "ssSaveEdit":"是否保存已編輯內容?",
+  "ssSave":"保存",
+  "ssNotSave":"不保存",
+  "ssFillComplete":"請將內容填寫完整!",
+  "ssWaitTaskSave":"請等待任務*回答完畢後再保存",
+  "ssWaitTaskCont":"請等待任務*回答完畢後再繼續",
+  "ssFillCourseName":"請補充填寫課程名稱",
+  "ssClickConfirmUpload":"點擊確認上傳按鈕",
+  "ssGenOutTaskDesc":"生成大綱任務*描述還未生成完,請前往查看,回答完畢後再次操作。",
+  "ssCpoteNotGen":"概念群還未生成完,請前往查看,回答完畢後再次操作。",
+  "ssQChainNotGen":"問題鏈還未生成完,請前往查看,回答完畢後再次操作。",
+  "ssTargetNotGen":"目標層還未生成完,請前往查看,回答完畢後再次操作。",
+  "ssTaskClusNotGen":"任務簇還未生成完,請前往查看,回答完畢後再次操作。",
+  "ssGenDescFirst":"請生成簡要描述後再生成大綱",
+  "ssPerfectOut":"請完善任務*的課程大綱",
+  "ssPerfectPlan":"請完善任務*的課程教案",
+  "ssPlanNotGen":"還有教案描述未生成完畢,是否直接下一步?",
+  "ssWaitTaskUp":"請等待任務*回答完畢後再上傳",
+  "ssSwitchTask":"確定切換成任務模式嗎?",
+  "ssDeleteStage":"確定刪除此階段嗎?",
+  "ssDeleteTool":"確定刪除此工具嗎?",
+  "ssDeleteSucc":"刪除成功",
+  "ssDeleteQues":"確定刪除此題目嗎?",
+  "ssDeleteTask":"確定刪除此任務嗎?",
+  "ssSwitchTaskDel":"切換任務順序將刪除所有工具的提交成果,是否繼續此操作?",
+  "ssInDev":"功能正在開發中",
+  "ssPasteSucc":"粘貼成功",
+  "ssEmbedCode":"嵌入代碼",
+  "ssNoPasteObj":"系統沒有找到粘貼對象,請首先複製可用於粘貼的鏈接。",
+  "ssUploadFail":"上傳失敗",
+  "ssSaveAttach":"保存到附件成功",
+  "ssSelectResUp":"請選擇要上傳的資源",
+  "ssCoverOneUp":"課程封面僅支持上傳一張,請刪除後再進行上傳",
+  "ssFileOver80MB":"上傳文件大於80兆,請重新選擇文件!",
+  "ssAddFileOver80":"添加成上傳文件大於80兆,請重新選擇文件!",
+  "ssFileIdError":"此文件存在特殊符號無法轉化成fileid請重新上傳",
+  "ssOutGenWait":"有大綱在生成請生成完之後才能使用此功能",
+  "ssGradeColon":"年級:",
+  "ssSubjColon":"學科:",
+  "ssThemeColon":"主題:",
+  "ssClickClass":"點擊選擇分類-",
+  "ssDeleteItem":"確定刪除此項?",
+  "ssCantDown":"還不能下載圖片喔",
+  "ssDelSelFile":"確定刪除所選文件麼?",
+  "ssSelAttach":"請先選需要下載的附件",
+  "ssAttachZip":"附件.zip",
+  "ssSwitchMove":"切換工具順序將一起移動此工具的提交成果,是否繼續此操作?",
+  "ssAddSucc":"新增成功",
+  "ssAddOk":"添加成功",
+  "ssPlsAddCM":"請添加課程成員",
+  "ssUseAI":"請使用AI共創生成",
+  "ssConfirmTemp":"確定選擇課程模板嗎?此操作將刪除所有已編輯課程內容。",
+  "ssChooseEmpty":"確定選擇空模板嗎?修改課程時無法重置課程模板。",
+  "ssChooseSimple":"確定選擇簡易模板嗎?修改課程時無法重置課程模板。",
+  "ssChooseFuture":"確定選擇未來小學課程設計嗎?",
+  "ssLinkTitle":"請填寫鏈接標題",
+  "ssIrrevers":"此操作不可撤銷,是否繼續?",
+  "ssTitleEmpty":"標題不能為空!",
+  "ssFillTitle":"請將題目*填寫完整。",
+  "ssOneQues":"至少填寫一個問題",
+  "ssOptEmpty":"題目*選項不能為空!",
+  "ssOptDup":"第*題的選項&和選項$重複了,請修改!",
+  "ssEachQues":"每道題目至少需要設置2個選項。",
+  "ssCorrectOpt":"請將題目*的正確選項設置完整",
+  "ssUseAIQues":"請使用AI共創生成題目",
+  "ssSmartPasteTemp":"確定選擇智能粘貼模板嗎?修改課程時無法重置課程模板。",
+  "ssStageSeqDel":"切換階段順序將刪除所有工具的提交成果,是否繼續此操作?",
+  "ssEnterQuesL":"請輸入您想要問的問題",
+  "ssFillEvaInfo":"請把評價信息填寫完整",
+  "ssUploadQues":"請上傳題目",
+  "ssSetAns":"請設置答案",
+  "ssOptDup2":"選項*和選項$重複了,請修改!",
+  "ssOptEmpty2":"添加的選項不能為空",
+  "ssNewCourse":"這是新增課程",
+  "ssZhijian":"智見課程",
+  "ssZhixing":"智行課程",
+  "ssIntelli":"智創課程",
+  "ssColumn":"欄目",
+  "ssImportOk":"導入成功",
+  "ssClearAgain":"內容已經清空了,請勿重復清空",
+  "ssDelTarget":"確定刪除此目標嗎?",
+  "ssSelSecAdd":"請選擇二級分類,如沒有二級分類請前往添加!",
+  "ssFillCard":"請填寫卡片內容!",
+  "ssCardOver10":"卡片內容字數不能超過10位",
+  "ssNoDupCard":"不能添加重復的卡片內容!",
+  "ssSetComplete":"請將題目*設置完整。",
+  "ssUploadSucc":"上傳成功",
+  "ssInputNum1":"請輸入大於1的數字",
+  "ssFillInfo":"請將信息填寫完整!",
+  "ssInputCode":"請輸入至少四位數字或英文組合的隨機碼",
+  "ssCodeDup":"已有此隨機碼,不能重復",
+  "ssCourseColon":"課程名稱:",
+  "ssNetImgPng":"網絡圖片.png",
+  "ssTaskMoveAll":"切換任務順序將一起移動所有工具的提交成果,是否繼續此操作?",
+  "ssStageMove":"切換階段順序將一起移動所有任務的提交成果,是否繼續此操作?",
+  "ssMoveFail":"移動作品失敗,網絡異常",
+  "ssLevel1":"一級分類",
+  "ssLevel2":"二級分類",
+  "ssGenAllEvaSet":"是否一鍵生成所有工具的評價設置?會佔用您一些時間。",
+  "ssExecSucc":"執行成功",
+  "ssPlsUpPlan":"請上傳教案",
+  "ssCourseBasic":"課程基本信息",
+  "ssDesigner":"設計者:",
+  "ssCoursePlan":"課程教案",
+  "ssTaskToolEva":"任務*工具$的評價.docx",
+  "ssEvaTable":"| 素養 | 評價標準 | 評價細則 |",
+  "ssEvaDegreeZip":"評價和學歷案.zip",
+  "ssRecordFail":"獲取錄音權限失敗",
+  "ssPlsWorkflow":"請輸入工作流鏈接",
+  "ssRegenAffect":"重新生成會影響已生成內容,確定重新生成嗎?",
+  "ssPlsAnswer":"請回答完畢後再次發送",
+  "ssFileLimit30":"目前檢索文件不能超過30個噢,請減少一些",
+  "ssNoPermTip":"您沒有權限修改/查看提示詞",
+  "ssEnterTask":"請輸入任務名稱",
+  "ssGenTaskPlan":"請先生成任務*的教案在執行此操作",
+  "ssPlanTaskNotGen":"教案任務*描述還未生成完,請前往查看,回答完畢後再次操作。",
+  "ssNotGenRegen":"還未生成完畢,是否直接重新生成?",
+  "ssConfirmRegen":"確定重新生成",
+  "ssGenDescTarget":"請生成簡要描述後再生成目標",
+  "ssGenAllDim":"是否生成所有維度的細則?僅生成該任務/生成所有",
+  "ssGenAll":"生成所有",
+  "ssGenThisTask":"僅生成該任務",
+  "ssSendSucc":"發送成功",
+  "ssTooManyReq":"哎呀,請求太多了,服務器忙不過來了,請稍等再重試",
+  "ssZero":"零",
+  "ssOne":"一",
+  "ssTwo":"二",
+  "ssThree":"三",
+  "ssFour":"四",
+  "ssFive":"五",
+  "ssSix":"六",
+  "ssSeven":"七",
+  "ssEight":"八",
+  "ssNine":"九",
+  "ssTen":"十",
+  "ssHundred":"百",
+  "ssThousand":"千",
+  "ssTenThousand":"萬",
+  "ssHundredMillion":"億",
+  "ssJsonFormat":"返回json格式不正確",
+  "ssStopOutline":"已經成功停止生成課程大綱",
+  "ssStopFileGen":"已經成功停止智能生成檢索資料",
+  "ssStopAIOpt":"已經成功停止AI優化",
+  "ssStopGenTarget":"已經成功停止生成目標",
+  "ssStopExtract":"已經成功停止提取摘要",
+  "ssStopGenPlan":"已經成功停止生成教案",
+  "ssStopGenOut":"已經成功停止生成大綱",
+  "ssStopTaskOver":"已經成功停止生成任務概述",
+  "ssStopTaskTool":"已經成功停止生成任務工具",
+  "ssStopSearch":"已經成功停止檢索資料",
+  "ssColon":":",
+  "ssDocument":"文檔",
+  "ssNetWave":"哎呀,網絡波動了...小可正在為您重新生成中...",
+  "ssTopic":"題目",
+  "ssOption":"選項",
+  "ssEnterOption":"請輸入選項",
+  "ssAddEvaOpt":"請添加評價後才能優化",
+  "ssPlanGenFail":"本任務的教案生成失敗是否重新生成,取消則自動生成下一個任務!",
+  "ssEvaCompleteInfo":"任務*的第$個評價完善資訊後再生成細則",
+  "ssNoStarLevel":"未有星級。",
+  "ssStar0":"0星",
+  "ssStar2":"2星",
+  "ssStar3":"3星",
+  "ssStar4":"4星",
+  "ssStar5":"5星",
+  "ssNoMatch":"未找到匹配的內容。",
+  "ssEvaRuleSucc":"任務*評價$細則生成成功",
+  "ssFormatErr":"返回的數據格式錯誤,小可正在為您重新獲取...",
+  "ssRefMat":"參考資料",
+  "ssSelectMat":"請選擇要使用的檢索資料",
+  "ssGetAllData":"已獲取全部數據",
+  "ssSearchWait":"檢索中請稍後",
+  "ssNoSearchRes":"未檢索出內容",
+  "ssQueryFail":"查詢失敗",
+  "ssOnlyZip":"只支持上傳zip文件",
+  "ssZipFail":"解析zip文件失敗",
+  "ssNoPageSel":"未選擇主頁面",
+  "ssEnterContentL":"請輸入正文",
+  "ssClickInsert":"請點擊按鈕插入表格",
+  "ssTimeUp":"時間到!!!",
+  "ssCategoryFilter":"分類篩選",
+  "ssToolName":"工具名稱",
+  "ssEnterToolName":"請輸入工具名稱",
+  "ssUrlSource":"網址來源",
+  "ssEnterUrlSource":"請輸入網址來源",
+  "ssToolDescName":"工具描述",
+  "ssEnterToolDesc":"請輸入工具描述",
+  "ssLabel":"標籤",
+  "ssSelectLabel":"請選擇標籤",
+  "ssNoLogin":"無需登錄",
+  "ssScanLogin":"掃碼登錄",
+  "ssRegLogin":"註冊登錄",
+  "ssFree":"免費",
+  "ssPaid":"付費",
+  "ssChinese":"中文",
+  "ssEnglish":"英文",
+  "ssScene":"場景",
+  "ssFillToolName":"請填寫工具名稱",
+  "ssFillUrlSource":"請填寫網址來源",
+  "ssFillToolDesc":"請填寫工具描述",
+  "ssView":"查看",
+  "ssType":"類型",
+  "ssVideoSet":"交互視頻設置",
+  "ssAddVideo":"添加視頻",
+  "ssReset":"重置",
+  "ssUploadVideo":"請上傳視頻",
+  "ssVideoName":"視頻名稱",
+  "ssInterSet":"交互設置",
+  "ssAddHiding":"添加hiding",
+  "ssTriggerTime":"觸發時間:",
+  "ssVideoSec":"視頻第幾秒",
+  "ssSecond":"秒",
+  "ssToolSet":"工具設置:",
+  "ssIsSet":"已設置",
+  "ssInsertTool":"插入工具",
+  "ssVideoPlayFail":"此視頻暫無法播放,請稍後再試",
+  "ssEnterVideoName":"請輸入視頻名稱",
+  "ssAddOneInteract":"請添加至少一個交互",
+  "ssSameTriggerTime":"不能設置一樣的觸發時間",
+  "ssSetToolInteract":"請對交互設置工具",
+  "ssTimeExceedDur":"設置時間不能大於視頻播放時長",
+  "ssConfirmDelete":"確定刪除麼?",
+  "ssConfirmReset":"確定重置麼?",
+  "ssEssayTitle":"作文題目",
+  "ssFillEssayTitle":"請填寫作文題目",
+  "ssEssayRequire":"作文要求",
+  "ssFillEssayReq":"請填寫作文要求",
+  "ssEvalSetting":"評價設置",
+  "ssPreset":"預設",
+  "ssSetEvalTemp":"點擊將下列內容設置成評價模板",
+  "ssSetName":"設置名稱",
+  "ssEnterNameOnly":"請輸入名稱",
+  "ssSetNamePls":"請設置名稱!",
+  "ssAddOneEval":"請添加至少一條評價!",
+  "ssDeleteSuccess":"刪除成功",
+  "ssConfirmDelTemp":"是否確定刪除該模板?",
+  "ssEvalResource":"評價資源",
+  "ssPublicResource":"公共資源",
+  "ssPersonalResource":"個人資源",
+  "ssOrgResource":"組織資源",
+  "ssSearchResource":"搜索資源",
+  "ssSecondLevel":"二級分類",
+  "ssRename":"重命名",
+  "ssSetCategory":"設置分類",
+  "ssShare":"分享",
+  "ssNoContent":"暫無內容",
+  "ssEvalDimension":"評價維度:",
+  "ssDimensionDesc":"維度描述:",
+  "ssUse":"使用",
+  "ssAddCategory":"添加分類",
+  "ssSelectFirst":"選擇一級分類:",
+  "ssCategoryName":"分類名稱:",
+  "ssSelectSecond":"選擇二級分類:",
+  "ssSelectSecondPls":"請選擇二級分類,如沒有二級分類請前往添加!",
+  "ssSetSuccess":"設置成功",
+  "ssShareSuccess":"分享成功",
+  "ssSelectShare":"請選擇要分享到哪個資源!",
+  "ssModifySuccess":"修改成功!",
+  "ssConfirmDelTemp2":"確定刪除此模板嗎?",
+  "ssChooseEvalTemp":"請選擇評價模板!",
+  "ssUseEvalTemp":"是否使用此評價模板?將會覆蓋掉現有的評價!",
+  "ssFirstLevel":"一級分類",
+  "ssResource":"資源",
+  "ssEnglishOral":"英語口語",
+  "ssSetEnglishOralInfo":"設置英語口語信息",
+  "ssDescription":"說明",
+  "ssEnterDesc":"請輸入對該問題的描述",
+  "ssSetEnglishOralQ":"設置英語口語題目",
+  "ssQuestionTypeSel":"題目類型選擇",
+  "ssEvalQuestion":"評測題目",
+  "ssEvalOutline":"評測大綱",
+  "ssSaveEditContent":"是否保存已編輯內容?",
+  "ssAddOneOralQ":"請至少添加一道口語題目",
+  "ssEnterContentQ":"第*題請輸入內容",
+  "ssEnterQuestionQ":"第*題請輸入題目",
+  "ssEnterPointQ":"第*題請輸入要點",
+  "ssEnterRoleNameQ":"第*題請輸入角色名字",
+  "ssEnterRoleDefQ":"第*題請輸入角色定義",
+  "ssEnterRoleGreetQ":"第*題請輸入角色問候",
+  "ssSelectOptTask":"選擇需要優化的任務:",
+  "ssSelectAll":"全選",
+  "ssSelectOptPart":"選擇優化的部分:",
+  "ssSelectOptContent":"選擇優化內容",
+  "ssEnterWantKnow":"在此輸入您想了解的內容",
+  "ssSend":"發送",
+  "ssEnterWantKnowPls":"請輸入您想要了解的內容",
+  "ssAnswerFinishSend":"請回答完畢後再次發送",
+  "ssAllContent":"全部內容",
+  "ssTaskDesign":"任務設計",
+  "ssEvalDesign":"評價設計",
+  "ssModifyContent":"修改內容",
+  "ssRequire":"要求",
+  "ssSendSuccess":"發送成功",
+  "ssWaitPls":"請稍等...",
+  "ssGetChatFail":"獲取對話記錄失敗",
+  "ssClickSaveDocx":"點擊可將該內容以docx文件保存至附錄欄",
+  "ssMore":"更多",
+  "ssClearScreen":"清屏",
+  "ssContinuous":"連續對話",
+  "ssAuthor":"作者:",
+  "ssClickStartRec":"點擊按鈕開始錄音",
+  "ssTerminate":"終止",
+  "ssHasPlanSum":"已有教案摘要",
+  "ssCourseTarget":"課程目標",
+  "ssCourseBrief":"課程簡要描述",
+  "ssTaskOutline":"任務*課程大綱",
+  "ssConceptGroup":"概念群",
+  "ssProblemChain":"問題鏈",
+  "ssTargetLayer":"目標層",
+  "ssTaskCluster":"任務簇",
+  "ssTaskPlan":"任務*教案",
+  "ssTaskDescL":"任務*任務描述",
+  "ssTaskToolDesc":"任務*工具$的工具描述",
+  "ssGenWait":"生成中請稍後",
+  "ssEnterContent":"請輸入內容",
+  "ssWaitAnswerSend":"請等待回答完畢在發送",
+  "ssClearChatConfirm":"確定清空聊天記錄嗎?",
+  "ssClearChatSuccess":"清除聊天記錄成功",
+  "ssClearChatFail":"清除聊天記錄失敗",
+  "ssCopySuccess":"複製成功",
+  "ssStartRecPls":"請先開始錄音",
+  "ssHelloAssistant":"您好,我是您的創課助手小可,在創課中遇到什麼問題,都可以與我對話~,我會盡量幫助您的",
+  "ssSaveFail":"保存失敗",
+  "ssFormatErrJson":"返回json格式不正確",
+  "ssAddTopic":"追加議題",
+  "ssAdopt":"採納",
+  "ssSummaryDiscuss":"總結討論",
+  "ssSummaryCourse":"總結並生成課程概況",
+  "ssRecordAudioSend":"請錄製音頻後發送",
+  "ssQuoteContent":"引用內容",
+  "ssCourseBriefHas":"課程簡要描述已有內容,是否覆蓋?",
+  "ssAdoptSuccess":"採納成功",
+  "ssAudio":"音頻:",
+  "ssAudioNum":"音頻*",
+  "ssLanguage":"語言:",
+  "ssRecording":"錄音中...",
+  "ssPaused":"已暫停...",
+  "ssWaitRecording":"等待錄音中...",
+  "ssMandarin":"普通話",
+  "ssCantonese":"粵語",
+  "ssConfirmDelAudio":"是否確定刪掉此音頻?",
+  "ssReminder":"提醒",
+  "ssStartRecording":"已開始錄音",
+  "ssStillRecording":"還在錄音中",
+  "ssStopRecording":"已停止錄音",
+  "ssEndRecording":"已結束錄音",
+  "ssPromptSet":"提示詞設置",
+  "ssBasicCreate":"基礎創建",
+  "ssDefaultPrompt":"默認的提示詞",
+  "ssDefaultPrompt1":"默認的提示詞1",
+  "ssDefaultPrompt2":"默認的提示詞2",
+  "ssDefaultPrompt3":"默認的提示詞3",
+  "ssEnterPls":"請輸入....",
+  "ssEnterPrompt":"請輸入提示詞",
+  "ssConfirmResetPrompt":"確定重置此提示詞麼?",
+  "ssAiDetail":"請根據<課程簡要描述>設計一個名為<課程名字>的<課程學科>學科的,面向<面向年級>的項目式學習課程。",
+  "ssAiOutline":"請根據<課程簡要描述>及#補充參考資料為這個名為<課程名字>的<課程學科>學科的,面向<面向年級>的項目式學習課程設計序列教學活動(需要每個任務都需要至少50個token的詳細描述),每個教學活動的活動設計(可以直接使用文件內容)以及每個教學活動的評價量規(學生能做到...)。",
+  "ssAiTask":"請根據<教學任務教案>。",
+  "ssAiDetail1":"請根據<課程描述>,重新設計該教學任務。任務需要至少50個token的詳細描述,包含任務設計,評價標準。",
+  "ssAiDetail2":"請你在考慮到整個課程的情況下,優化該任務描述和任務名:<任務名>:<任務描述>",
+  "ssAiDetail3":"請你在考慮到整個課程的情況下,**重點考慮該任務及工具名和工具內容的情況下**,優化工具指引。",
+  "ssAiDetail4":"請你在考慮到整個課程的情況下,**重點考慮該任務詳情**以及工具的情況下,優化評價標準。",
+  "ssAiTeacher":"請根據<任務大綱>為每個教學任務設計詳細的教案,其中包括但不僅限於該任務的教學目標,教學過程,師生研討,拓展,學生任務單,相關知識點的練習或Qui以及答案等。",
+  "ssTeacherDetail":"請根據<教案描述>重新設計該教案。其中包括但不僅限於該任務的教學目標,教學過程,師生研討,拓展,學生任務單,相關知識點的練習或Qui以及答案等。",
+  "ssSavePromptTemp":"保存提示詞模板",
+  "ssTemplateName":"模板名稱:",
+  "ssTemplateDesc":"模板描述:",
+  "ssPermission":"權限:",
+  "ssPersonal":"個人",
+  "ssOrgInternal":"組織內",
+  "ssEveryone":"所有人",
+  "ssPublicPrompt":"是否公開提示詞:",
+  "ssNotPublic":"不公開",
+  "ssPublic":"公開",
+  "ssConfirmSaveCourse":"確定並保存課程",
+  "ssEnterTemplateName":"請輸入模板名稱",
+  "ssConfirmModifyTemp":"確定修改此模板嘛?",
+  "ssTaskAiGenPPT":"任務*的AI生成PPT",
+  "ssGenWaitPls":"小可正在努力生成中,請稍等...",
+  "ssStop":"停止",
+  "ssGenOutline":"請生成大綱",
+  "ssSelectTemplate":"選擇模板",
+  "ssSelectTemplatePls":"請選擇模板",
+  "ssRegenOutline":"重新生成大綱",
+  "ssRegenPPT":"重新生成PPT",
+  "ssGenPPT":"生成PPT",
+  "ssPrevStep":"上一步",
+  "ssNextStep":"下一步",
+  "ssCollapse":"收起",
+  "ssTaskGenPPT":"任務*的生成ppt",
+  "ssOpen":"打開",
+  "ssStopSuccess":"已經成功停止",
+  "ssClickGenPPT":"請點擊生成PPT按鈕",
+  "ssGenOutlinePls":"請先生成大綱內容",
+  "ssGenFailRetry":"生成失敗,正在重新生成",
+  "ssThanksWatch":"謝謝觀看,下課!",
+  "ssSmartSearch":"智能檢索",
+  "ssSearchVideoKey":"搜索視頻關鍵字(如需搜索多個可‘,’隔開)",
+  "ssComprehensive":"綜合排序",
+  "ssMostPlayed":"最多播放",
+  "ssLatest":"最新發布",
+  "ssMostDanmu":"最多彈幕",
+  "ssMostFav":"最多收藏",
+  "ssAddSuccess":"加入成功",
+  "ssEnterKeyword":"請輸入關鍵字",
+  "ssServerBusy":"哎呀,請求太多了,服務器忙不過來了,請自行搜索關鍵詞",
+  "ssPdfView":"PDF查看",
+  "ssDocView":"文檔查看",
+  "ssRegenEval":"重新生成評價",
+  "ssGenEval":"生成評價",
+  "ssLiteracy":"素養:",
+  "ssFillTarget":"填寫目標",
+  "ssAiScoring":"AI評分",
+  "ssEvalStandard":"評價標準:",
+  "ssFillEvalStd":"填寫評價標準",
+  "ssEvalDetail":"評價細則:",
+  "ssCollapseDetail":"收起細則",
+  "ssExpandDetail":"展開細則",
+  "ssEnterEvalDetail":"請輸入評價細則",
+  "ssRegenDetail":"重新生成",
+  "ssGenDetail":"生成細則",
+  "ssStopGenEvalSet":"已經成功停止生成評價設置",
+  "ssStopGenEvalDetail":"已經成功停止生成評價細則",
+  "ssGenWaitFinish":"生成中,請等待生成完畢後再繼續",
+  "ssUploadRefGenEval":"請上傳參考標準後,再生成評價",
+  "ssCompleteInfoGen":"評價信息完善信息後再生成細則",
+  "ssEvalDetailGenOk":"評價細則生成成功",
+  "ssAppCenter":"應用中心",
+  "ssSelectScope":"請選擇顯示範圍",
+  "ssSelectType":"請選擇類型",
+  "ssSelectStatus":"請選擇狀態",
+  "ssEnterAppName":"請輸入應用名稱",
+  "ssWorkflow":"工作流",
+  "ssAgent":"智能體",
+  "ssCopyCount":"被複製數",
+  "ssCancelLike":"取消點讚",
+  "ssLike":"點讚",
+  "ssCancelCollect":"取消收藏",
+  "ssCollect":"收藏",
+  "ssTest":"測試",
+  "ssStable":"穩定",
+  "ssViewMore":"查看更多",
+  "ssAllApps":"所有應用",
+  "ssOfficial":"官方&精選",
+  "ssMine":"我的",
+  "ssAllStatus":"所有狀態",
+  "ssAllTypes":"所有類型",
+  "ssSelectAppFirst":"請先選擇應用!",
+  "ssGetAppTypeFail":"獲取應用類型失敗",
+  "ssGetAppFail":"獲取應用失敗",
+  "ssLikeSuccess":"點讚成功",
+  "ssLikeFail":"點讚失敗",
+  "ssCancelLikeOk":"取消點讚成功",
+  "ssCancelLikeFail":"取消點讚失敗",
+  "ssCollectSuccess":"收藏成功",
+  "ssCollectFail":"收藏失敗",
+  "ssCancelCollectOk":"取消收藏成功",
+  "ssCancelCollectFail":"取消收藏失敗",
+  "ssAddHTML":"添加HTML",
+  "ssModifyHTML":"修改HTML",
+  "ssFillNameInfo":"請將名稱信息補充完整",
+  "ssFillCodeInfo":"請將代碼信息補充完整",
+  "ssLoadHtmlError":"加載 HTML 文件時出錯:"
 
 
 

+ 2 - 28
src/main.js

@@ -4,7 +4,6 @@ import Vue from 'vue'
 import App from './App'
 import router from './router'
 import store from './config/config'
-import locale from 'element-ui/lib/locale/lang/en'
 
 import {  Loading } from 'element-ui';
 // Message,
@@ -29,9 +28,7 @@ import VueAudio from 'vue-audio-better'
 
 const echarts = require('echarts');
 
-import cn from "./lang/cn.json";
-import hk from "./lang/hk.json";
-import en from "./lang/en.json";
+
 //
 Vue.use(VideoPlayer).use(VueAudio).use(VueCookies).use(Viewer).use(hevueImgPreview, {
     clickMaskCLose: true
@@ -69,26 +66,7 @@ Viewer.setDefaults({
     'fullscreen': false, //播放时是否全屏
     'keyboard': true, //
 })
-//注册到vue原型上
-let lang = new Object();
-let domain_name=""
-
-
-if (window.location.href.includes("cocorobo.cn")) {
-  lang = cn;
-  domain_name="cn";
-} else if (window.location.href.includes("cocorobo.hk")) {
-  lang = hk;
-  domain_name="hk";
-} else if (window.location.href.includes("cocorobo.com")) {
-  lang=en;
-  domain_name="com";
-}else{
-  lang=cn;
-  domain_name="cn";
-}
 
-Vue.prototype.lang =lang;
 /* eslint-disable no-new */
 new Vue({
     el: '#app',
@@ -96,11 +74,7 @@ new Vue({
     components: { App },
     template: '<App/>'
 })
-if(domain_name==='com'){//英文版
-	Vue.use(ElementUI,{locale})
-}else{
-	Vue.use(ElementUI)
-}
+
 VueCookies.config('30d')
 
 router.beforeEach((to, from, next) => {

+ 29 - 0
src/router/index.js

@@ -166,7 +166,36 @@ import pptEasy from '@/components/pages/pptEasy/addCourse'
 import noticeCenter from '@/components/pages/noticeCenter/index'
 import PersonnelManagement from "@/components/pages/PersonnelManagement";
 import topTalent from "@/components/pages/liyuan/topTalent";
+import locale from 'element-ui/lib/locale/lang/en'
+import cn from "../lang/cn.json";
+import hk from "../lang/hk.json";
+import en from "../lang/en.json";
+//注册到vue原型上
+let lang = new Object();
+let domain_name=""
 
+
+if (window.location.href.includes("cocorobo.cn")) {
+  lang = cn;
+  domain_name="cn";
+} else if (window.location.href.includes("cocorobo.hk")) {
+  lang = hk;
+  domain_name="hk";
+} else if (window.location.href.includes("cocorobo.com")) {
+  lang=en;
+  domain_name="com";
+}else{
+  lang=cn;
+  domain_name="cn";
+}
+
+Vue.prototype.lang =lang;
+
+if(domain_name==='com'){//英文版
+	Vue.use(ElementUI,{locale})
+}else{
+	Vue.use(ElementUI)
+}
 // 全局修改默认配置,点击空白处不能关闭弹窗
 ElementUI.Dialog.props.closeOnClickModal.default = false
 Vue.use(Router).use(ElementUI)

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor