Browse Source

fix 问题
继续推进多语言

dusenyao 3 years ago
parent
commit
98c68f86c7
33 changed files with 933 additions and 625 deletions
  1. 26 0
      .vscode/vue.code-snippets
  2. 215 262
      package-lock.json
  3. 9 9
      package.json
  4. 16 0
      src/api/user.js
  5. 9 3
      src/common/show_file/index.vue
  6. 13 18
      src/components/StepBar.vue
  7. 7 1
      src/components/course/CompletionView.vue
  8. 9 4
      src/components/course/FinishCourseware.vue
  9. 13 8
      src/components/live/CurMaterial.vue
  10. 7 2
      src/components/live/SelectMaterial.vue
  11. 11 6
      src/components/payment/Audit.vue
  12. 7 4
      src/components/select/SelectCourse.vue
  13. 12 9
      src/components/select/SelectTeacher.vue
  14. 17 8
      src/components/select/SelectTemplate.vue
  15. 64 30
      src/views/course_details/index.vue
  16. 11 6
      src/views/live/SelectDevice.vue
  17. 1 0
      src/views/live/common.js
  18. 17 7
      src/views/live/student/audit.vue
  19. 29 12
      src/views/live/student/group.vue
  20. 14 10
      src/views/live/student/index.vue
  21. 12 9
      src/views/live/teacher/CompleteList.vue
  22. 42 19
      src/views/live/teacher/group.vue
  23. 66 30
      src/views/live/teacher/index.vue
  24. 22 15
      src/views/main/TaskList.vue
  25. 4 2
      src/views/main/TemplateList.vue
  26. 7 4
      src/views/main/curricula_list/teacher.vue
  27. 1 1
      src/views/task_details/teacher/index.vue
  28. 9 4
      src/views/teacher/create_course/index.vue
  29. 25 20
      src/views/teacher/create_course/step_table/AddItem.vue
  30. 67 29
      src/views/teacher/create_course/step_table/CourseInfo.vue
  31. 86 49
      src/views/teacher/create_course/step_table/CreateTask.vue
  32. 73 36
      src/views/teacher/create_course/step_table/NewTask.vue
  33. 12 8
      src/views/teacher/create_course/step_table/SelectBook.vue

+ 26 - 0
.vscode/vue.code-snippets

@@ -0,0 +1,26 @@
+{
+	// Place your gcls_sys_learn_web 工作区 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and
+	// description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
+	// is left empty or omitted, the snippet gets applied to all languages. The prefix is what is
+	// used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
+	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
+	// Placeholders with the same ids are connected.
+	// Example:
+	// "Print to console": {
+	// 	"scope": "javascript,typescript",
+	// 	"prefix": "log",
+	// 	"body": [
+	// 		"console.log('$1');",
+	// 		"$2"
+	// 	],
+	// 	"description": "Log output to console"
+	// }
+	"i18n-html": {
+		"prefix": "hi18n",
+		"body": "{{ \\$t('Key$0') }}"
+	},
+	"i18n js": {
+		"prefix": "ji18n",
+		"body": "this.\\$i18n.t('Key$0')"
+	}
+}

File diff suppressed because it is too large
+ 215 - 262
package-lock.json


+ 9 - 9
package.json

@@ -17,7 +17,7 @@
     "awe-dnd": "^0.3.4",
     "axios": "^0.24.0",
     "book-ui": "file:../book-ui-0.2.14.tgz",
-    "core-js": "^3.19.3",
+    "core-js": "^3.20.2",
     "dayjs": "^1.10.7",
     "element-ui": "^2.15.6",
     "gcls-book-question-ui": "file:../gcls-book-question-ui-0.1.0.tgz",
@@ -27,16 +27,16 @@
     "normalize.css": "^8.0.1",
     "nprogress": "^0.2.0",
     "vue": "^2.6.14",
-    "vue-i18n": "^8.26.7",
+    "vue-i18n": "^8.26.8",
     "vue-pdf": "^4.3.0",
     "vue-router": "^3.5.3",
     "vue-video-player": "^5.0.2",
     "vuex": "^3.6.2"
   },
   "devDependencies": {
-    "@babel/core": "^7.16.0",
-    "@babel/eslint-parser": "^7.16.3",
-    "@babel/preset-env": "^7.16.4",
+    "@babel/core": "^7.16.7",
+    "@babel/eslint-parser": "^7.16.5",
+    "@babel/preset-env": "^7.16.8",
     "@vue/cli-plugin-babel": "~4.5.15",
     "@vue/cli-plugin-eslint": "~4.5.15",
     "@vue/cli-plugin-router": "~4.5.15",
@@ -44,7 +44,7 @@
     "@vue/cli-plugin-vuex": "~4.5.15",
     "@vue/cli-service": "~4.5.15",
     "@vue/test-utils": "^1.3.0",
-    "babel-jest": "^27.4.2",
+    "babel-jest": "^27.4.6",
     "babel-loader": "^8.2.3",
     "babel-plugin-dynamic-import-node": "^2.3.3",
     "compression-webpack-plugin": "^6.1.1",
@@ -52,10 +52,10 @@
     "eslint-plugin-prettier": "^4.0.0",
     "eslint-plugin-vue": "^8.2.0",
     "html-webpack-plugin": "^5.3.1",
-    "postcss": "^8.4.4",
+    "postcss": "^8.4.5",
     "postcss-html": "^1.3.0",
     "prettier": "2.5.1",
-    "sass": "^1.44.0",
+    "sass": "^1.47.0",
     "sass-loader": "^10.2.0",
     "script-ext-html-webpack-plugin": "^2.1.5",
     "stylelint": "^14.0.1",
@@ -73,7 +73,7 @@
   },
   "browserslist": [
     "> 1%",
-    "last 2 versions"
+    "last 1 versions"
   ],
   "engines": {
     "node": ">=8.9",

+ 16 - 0
src/api/user.js

@@ -82,3 +82,19 @@ export function GetMyTaskDailyDistribution(data) {
     data
   });
 }
+
+/**
+ * 得到我的教材购买情况(当前任务课件对应的教材)
+ * @param {Object} data
+ * @returns
+ */
+export function GetMyBookBuyStatus_CurTaskCoursewareBook(data) {
+  let params = getRequestParams('teaching-task_manager-GetMyBookBuyStatus_CurTaskCoursewareBook');
+
+  return request({
+    method: 'post',
+    url: process.env.VUE_APP_LearnWebSI,
+    params,
+    data
+  });
+}

+ 9 - 3
src/common/show_file/index.vue

@@ -1,7 +1,7 @@
 <template>
   <el-dialog class="show-file" :visible="dialogVisibleShowFile" width="900px" @close="dialogShowFileClose">
     <div slot="title">
-      查看文件【{{ fileName }}】
+      {{ $t('Key322') }}【{{ fileName }}】
     </div>
 
     <template v-if="fileType === 'pdf'">
@@ -37,7 +37,7 @@
 
     <div slot="footer">
       <el-button @click="dialogShowFileClose">
-        关闭
+        {{ $t('Key246') }}
       </el-button>
     </div>
   </el-dialog>
@@ -49,6 +49,7 @@ import { GetFileStoreInfo } from '@/api/app';
 import { getFileType } from '@/utils/filter';
 
 export default {
+  name: 'ShowFile',
   components: { pdf },
   props: {
     fileName: {
@@ -89,6 +90,11 @@ export default {
       }
     }
   },
+  created() {
+    this.updateWordPack({
+      word_key_list: ['Key322', 'Key246', 'Key323']
+    });
+  },
   methods: {
     getFileStoreInfo() {
       GetFileStoreInfo({ file_id: this.fileId }).then(({ file_url_https, file_relative_path }) => {
@@ -116,7 +122,7 @@ export default {
         })
         .catch(err => {
           console.error('pdf加载失败', err);
-          this.$message.error('pdf加载失败');
+          this.$message.error(this.$i18n.t('Key323'));
         });
     },
 

+ 13 - 18
src/components/StepBar.vue

@@ -8,7 +8,7 @@
           <span v-if="i < 2" :class="['step-line', { completed: i < stepNumber }]" />
         </div>
         <div :class="['step-container-name', { active: i === stepNumber }]">
-          {{ item.name }}
+          {{ $t(item.name) }}
         </div>
       </div>
     </div>
@@ -29,34 +29,29 @@ export default {
     return {
       stepList: [
         {
-          name: '课程信息'
+          name: 'Key264'
         },
-        {
-          name: '选择教材'
-        },
-        {
-          name: '创建任务'
-        }
+        { name: 'Key275' },
+        { name: 'Key265' }
       ]
     };
   },
+  created() {
+    this.updateWordPack({
+      word_key_list: ['Key264', 'Key275', 'Key265', 'Key282', 'Key263']
+    });
+  },
   methods: {
     stepName(num) {
-      if (num === this.stepNumber) {
-        return '进行中';
-      }
-      if (num > this.stepNumber) {
-        return '等待中';
-      }
-      if (num < this.stepNumber) {
-        return '已完成';
-      }
+      if (num === this.stepNumber) return this.$i18n.t('Key282');
+      if (num > this.stepNumber) return this.$i18n.t('Key263');
+      if (num < this.stepNumber) return '已完成';
     }
   }
 };
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .step {
   position: fixed;
   top: $header-h;

+ 7 - 1
src/components/course/CompletionView.vue

@@ -5,7 +5,8 @@
       <div class="completion-info">
         <div>{{ material_name }}</div>
         <div>
-          {{ student_name }} {{ finish_time_view_txt }} 用时:{{ duration }}秒 | 正确 {{ count_right }} | 错误
+          {{ student_name }} {{ finish_time_view_txt }} {{ $t('Key320') }}:{{ duration }}{{ $t('Key321') }} |
+          {{ $t('Key194') }} {{ count_right }} | {{ $t('Key195') }}
           {{ count_error }}
         </div>
       </div>
@@ -120,6 +121,11 @@ export default {
       });
     }
   },
+  created() {
+    this.updateWordPack({
+      word_key_list: ['Key320', 'Key321', 'Key194', 'Key195']
+    });
+  },
   methods: {
     getTaskMaterialStudentExamAnswer() {
       return GetTaskMaterialStudentExamAnswer({

+ 9 - 4
src/components/course/FinishCourseware.vue

@@ -3,7 +3,7 @@
     class="finish-courseware"
     :visible="dialogVisible"
     :width="dialogWidth"
-    title="完成课件"
+    :title="$t('Key332')"
     :close-on-click-modal="false"
     @close="dialogClose"
   >
@@ -33,7 +33,7 @@
 
     <div slot="footer">
       <el-button type="primary" @click="finishTaskMaterial">
-        完成
+        {{ $t('Key82') }}
       </el-button>
     </div>
   </el-dialog>
@@ -114,10 +114,15 @@ export default {
       });
     }
   },
+  created() {
+    this.updateWordPack({
+      word_key_list: ['Key332', 'Key82', 'Key333', 'Key334']
+    });
+  },
   methods: {
     finishTaskMaterial() {
       if (this.exam_answer.length === 0 && this.sys_type === 'GCLS') {
-        this.$message.warning('请完成课件');
+        this.$message.warning(this.$i18n.t('Key333'));
         return;
       }
       const loading = this.$loading();
@@ -128,7 +133,7 @@ export default {
         exam_answer: this.exam_answer
       })
         .then(() => {
-          this.$message.success('完成课件成功');
+          this.$message.success(this.$i18n.t('Key334'));
           this.dialogClose();
           this.$router.go(0);
         })

+ 13 - 8
src/components/live/CurMaterial.vue

@@ -11,7 +11,7 @@
         {{
           isCurMaterial
             ? `当前推送资料 - ${material_name}`
-            : `学习资料 - ${material_type === 'COURSEWARE' ? '课件' : '文档'} - ${material_name}`
+            : `${$t('Key274')} - ${material_type === 'COURSEWARE' ? $t('Key309') : $t('Key244')} - ${material_name}`
         }}
       </span>
       <span @click="isAlignCenter = !isAlignCenter">
@@ -20,11 +20,11 @@
     </div>
 
     <div v-show="!isCurMaterial && material_type === 'COURSEWARE'" class="answer-data">
-      <span>用时</span>
-      <span class="answer-data-duration">{{ answerData.duration }}</span>
-      <span class="answer-data-label">正确</span>
+      <span>{{ $t('Key320') }}</span>
+      <span class="answer-data-duration">{{ answerData.duration }}{{ $t('Key321') }}</span>
+      <span class="answer-data-label">{{ $t('Key194') }}</span>
       <span class="answer-data-count-right">{{ answerData.count_right }}</span>
-      <span class="answer-data-label">错误</span>
+      <span class="answer-data-label">{{ $t('Key195') }}</span>
       <span class="answer-data-count-error">{{ answerData.count_error }}</span>
     </div>
 
@@ -92,7 +92,7 @@
         type="primary"
         @click="finishMyMaterial"
       >
-        完成
+        {{ $t('Key82') }}
       </el-button>
     </div>
   </el-dialog>
@@ -106,6 +106,7 @@ import { FinishMyMaterial, GetCurMaterialSent, GetStudentExamAnswer_FinishMateri
 import { getToken } from '@/utils/auth';
 
 export default {
+  name: 'CurMaterial',
   components: {
     pdf
   },
@@ -199,6 +200,10 @@ export default {
   created() {
     this.uploadBookWriteParent();
     this.getCurMaterialSent();
+
+    this.updateWordPack({
+      word_key_list: ['Key274', 'Key309', 'Key244', 'Key320', 'Key321', 'Key194', 'Key195', 'Key82', 'Key333', 'Key323']
+    });
   },
   beforeDestroy() {
     clearInterval(this.timer);
@@ -338,7 +343,7 @@ export default {
         })
         .catch(err => {
           console.error('pdf加载失败', err);
-          this.$message.error('pdf加载失败');
+          this.$message.error(this.$i18n.t('Key323'));
         });
     },
 
@@ -348,7 +353,7 @@ export default {
 
     finishMyMaterial() {
       if (this.material_type === 'COURSEWARE' && this.exam_answer.length === 0 && this.sys_type === 'GCLS') {
-        this.$message.warning('请完成课件');
+        this.$message.warning(this.$i18n.t('Key333'));
         return;
       }
       const loading = this.$loading();

+ 7 - 2
src/components/live/SelectMaterial.vue

@@ -5,7 +5,7 @@
       :visible="dialogVisible"
       top="10vh"
       width="900px"
-      title="学习资料推送"
+      :title="$t('Key439')"
       @close="dialogClose"
     >
       <div v-for="item in material_list" :key="item.material_id" class="material">
@@ -54,6 +54,11 @@ export default {
       }
     }
   },
+  created() {
+    this.updateWordPack({
+      word_key_list: ['Key439', 'Key440']
+    });
+  },
   methods: {
     getMaterialListForSendToStudent() {
       GetMaterialListForSendToStudent({ task_id: this.taskId }).then(({ material_list }) => {
@@ -62,7 +67,7 @@ export default {
     },
     sendMaterial(material_id, material_type) {
       SendMaterial({ task_id: this.taskId, material_id, material_type }).then(() => {
-        this.$message.success('学习资料推送成功');
+        this.$message.success(this.$i18n.t('Key440'));
         this.$emit('dialogPush');
       });
     },

+ 11 - 6
src/components/payment/Audit.vue

@@ -19,25 +19,25 @@
     </div>
     <div class="total">
       <p class="total-price">
-        <span> 一件商品,总金额: </span>
+        <span> {{ $t('Key53') }}: </span>
         <span class="co-value">¥ {{ data.price | priceFormat }}</span>
       </p>
       <p class="discount">
-        <span> 优惠折扣: </span>
+        <span> {{ $t('Key54') }}: </span>
         <span class="co-value">-¥ {{ discount_money | priceFormat }}</span>
       </p>
       <p class="payable">
-        <span> 应付: </span>
+        <span> {{ $t('Key55') }}: </span>
         <span class="co-value">¥ {{ receivables_money | priceFormat }}</span>
       </p>
     </div>
     <div class="submitBtn">
       <div class="text">
         <img src="../../assets/course_details/auditimg.png" alt="">
-        参加本课程学习需提交申请,审核通过后完成付款即可参加学习。
+        {{ $t('Key56') }}
       </div>
       <button @click="buy">
-        提交申请
+        {{ $t('Key57') }}
       </button>
     </div>
 
@@ -54,7 +54,7 @@
       </div>
       <div slot="footer">
         <el-button type="primary" @click="visible = false">
-          确定
+          {{ $t('Key94') }}
         </el-button>
       </div>
     </el-dialog>
@@ -99,6 +99,11 @@ export default {
       receivables_money: this.data.price // 应收款
     };
   },
+  created() {
+    this.updateWordPack({
+      word_key_list: ['Key53', 'Key54', 'Key55', 'Key56', 'Key57', 'Key94']
+    });
+  },
   // 方法集合
   methods: {
     // 提交申请

+ 7 - 4
src/components/select/SelectCourse.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-dialog class="select-course" :visible="dialogVisible" width="1100px" title="添加课件" @close="dialogClose">
+  <el-dialog class="select-course" :visible="dialogVisible" width="1100px" :title="$t('Key373')" @close="dialogClose">
     <div>
       <el-dropdown trigger="click" placement="top" @command="selectBook">
         <span class="el-dropdown-link">{{ curBook.book_name }} <i class="el-icon-arrow-down" /></span>
@@ -39,10 +39,10 @@
 
     <div slot="footer">
       <el-button size="mini" @click="dialogClose">
-        取 消
+        {{ $t('Key83') }}
       </el-button>
       <el-button type="primary" size="mini" @click="confirm">
-        确 定
+        {{ $t('Key94') }}
       </el-button>
     </div>
   </el-dialog>
@@ -84,13 +84,16 @@ export default {
     },
     dialogVisible(val) {
       if (val && this.book_list.length === 0) {
-        this.$message.warning('当前课程未选择教材');
+        this.$message.warning(this.$i18n.t('Key383'));
         this.dialogClose();
       }
     }
   },
   created() {
     this.getCourseBookListByCSItemID();
+    this.updateWordPack({
+      word_key_list: ['Key383', 'Key373', 'Key94', 'Key83']
+    });
   },
   methods: {
     dialogClose() {

+ 12 - 9
src/components/select/SelectTeacher.vue

@@ -1,17 +1,17 @@
 <template>
-  <el-dialog class="select-teacher" :visible="dialogVisible" width="900px" title="选择授课教师" @close="dialogClose">
+  <el-dialog class="select-teacher" :visible="dialogVisible" width="900px" :title="$t('Key344')" @close="dialogClose">
     <!--查询条件-->
     <el-form :inline="true" :model="searchForm" size="mini">
-      <el-form-item label="用户名">
+      <el-form-item :label="$t('Key25')">
         <el-input v-model="searchForm.user_name" @keyup.enter.native="getTeacherUserList" />
       </el-form-item>
-      <el-form-item label="真实姓名">
+      <el-form-item :label="$t('Key27')">
         <el-input v-model="searchForm.user_real_name" @keyup.enter.native="getTeacherUserList" />
       </el-form-item>
 
       <el-form-item class="search-button">
         <el-button type="primary" @click="getTeacherUserList">
-          <i class="el-icon-search" /> 搜索
+          <i class="el-icon-search" /> {{ $t('Key131') }}
         </el-button>
       </el-form-item>
     </el-form>
@@ -19,9 +19,9 @@
     <!--表格-->
     <el-table ref="teacherTable" :data="teacherList" height="35vh" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" />
-      <el-table-column prop="user_name" label="用户名" width="120" />
-      <el-table-column prop="user_real_name" label="真实姓名" width="120" />
-      <el-table-column prop="org_name" label="机构名" />
+      <el-table-column prop="user_name" :label="$t('Key191')" width="120" />
+      <el-table-column prop="user_real_name" :label="$t('Key27')" width="120" />
+      <el-table-column prop="org_name" :label="$t('Key204')" />
     </el-table>
 
     <el-pagination
@@ -39,10 +39,10 @@
 
     <div slot="footer">
       <el-button size="mini" @click="dialogClose">
-        取 消
+        {{ $t('Key83') }}
       </el-button>
       <el-button type="primary" size="mini" @click="confirmTeacher">
-        确 定
+        {{ $t('Key94') }}
       </el-button>
     </div>
   </el-dialog>
@@ -78,6 +78,9 @@ export default {
   },
   created() {
     this.getTeacherUserList();
+    this.updateWordPack({
+      word_key_list: ['Key344', 'Key25', 'Key27', 'Key131', 'Key191', 'Key204', 'Key94', 'Key83']
+    });
   },
   methods: {
     getTeacherUserList() {

+ 17 - 8
src/components/select/SelectTemplate.vue

@@ -1,15 +1,21 @@
 <template>
-  <el-dialog :visible="dialogVisible" width="900px" title="选择模板" :close-on-click-modal="false" @close="dialogClose">
+  <el-dialog
+    :visible="dialogVisible"
+    width="900px"
+    :title="$t('Key288')"
+    :close-on-click-modal="false"
+    @close="dialogClose"
+  >
     <!-- 查询条件 -->
     <div class="query-criteria">
       <el-form :inline="true" :model="searchForm" size="mini">
-        <el-form-item label="模板名称">
+        <el-form-item :label="$t('Key339')">
           <el-input v-model.trim="searchForm.name" @keyup.enter.native="queryCourseList" />
         </el-form-item>
 
         <el-form-item class="search-button">
           <el-button type="primary" @click="queryCourseList">
-            <i class="el-icon-search" /> 搜索
+            <i class="el-icon-search" /> {{ $t('Key131') }}
           </el-button>
         </el-form-item>
       </el-form>
@@ -22,8 +28,8 @@
       highlight-current-row
       @current-change="handleCurrentChange"
     >
-      <el-table-column prop="name" label="用户名" width="320" />
-      <el-table-column label="课程周期">
+      <el-table-column prop="name" :label="$t('Key191')" width="320" />
+      <el-table-column :label="$t('Key250')">
         <template slot-scope="{ row }">
           <i class="el-icon-date" /> {{ row.begin_date }} - {{ row.end_date }}
         </template>
@@ -45,10 +51,10 @@
 
     <div slot="footer">
       <el-button size="mini" @click="dialogClose">
-        取 消
+        {{ $t('Key83') }}
       </el-button>
       <el-button type="primary" size="mini" @click="confirmTemplate">
-        确 定
+        {{ $t('Key94') }}
       </el-button>
     </div>
   </el-dialog>
@@ -78,6 +84,9 @@ export default {
   },
   created() {
     this.queryCourseList();
+    this.updateWordPack({
+      word_key_list: ['Key288', 'Key339', 'Key131', 'Key191', 'Key250', 'Key83', 'Key94', 'Key340']
+    });
   },
   methods: {
     queryCourseList() {
@@ -110,7 +119,7 @@ export default {
     },
     confirmTemplate() {
       if (!this.currentRow) {
-        return this.$message.warning('请选择模板');
+        return this.$message.warning(this.$i18n.t('Key340'));
       }
       this.$emit('confirmTemplate', this.currentRow.id);
     }

+ 64 - 30
src/views/course_details/index.vue

@@ -30,7 +30,7 @@
             </p>
 
             <p v-if="backTime" class="tip">
-              距离关闭购买渠道还有
+              {{ $t('Key48') }}
             </p>
             <div class="operation">
               <div v-if="backTime" class="countdown">
@@ -40,7 +40,7 @@
                       {{ backTime.days }}
                     </div>
                     <div class="time-name">
-                      
+                      {{ $t('Key386') }}
                     </div>
                   </div>
                   <div>
@@ -48,7 +48,7 @@
                       {{ backTime.hours }}
                     </div>
                     <div class="time-name">
-                      小时
+                      {{ $t('Key387') }}
                     </div>
                   </div>
                   <div>
@@ -56,7 +56,7 @@
                       {{ backTime.minutes }}
                     </div>
                     <div class="time-name">
-                      
+                      {{ $t('Key388') }}
                     </div>
                   </div>
                   <div>
@@ -64,13 +64,13 @@
                       {{ backTime.seconds }}
                     </div>
                     <div class="time-name">
-                      
+                      {{ $t('Key321') }}
                     </div>
                   </div>
                 </div>
               </div>
               <div v-else>
-                购买渠道已关闭
+                {{ $t('Key389') }}
               </div>
 
               <div v-if="!readonly">
@@ -80,7 +80,7 @@
                   <span class="price_2" v-text="changePrice('2', CourseData.price)" />
                 </span>
                 <button class="get" @click="getPurchase">
-                  {{ is_buy ? '去学习' : '获取课程' }}
+                  {{ is_buy ? $t('Key390') : $t('Key391') }}
                 </button>
                 <span class="collection" @click="addOrDeleteMyCollection">
                   <svg-icon :icon-class="collection ? 'collection-solid' : 'collection'" />
@@ -91,7 +91,7 @@
         </div>
         <div v-if="CourseData.book_list.length > 0" class="more">
           <div class="moreTitle">
-            配套教材
+            {{ $t('Key49') }}
           </div>
           <div class="moreList">
             <div v-for="(item, i) in CourseData.book_list" :key="i" class="moreOne">
@@ -111,7 +111,7 @@
                     <span class="price_2" v-text="changePrice('2', item.book_price)" />
                   </span>
                   <button v-if="!readonly" :class="['get', is_buy ? 'acquired' : '']" @click="goBook(item.book_id)">
-                    {{ is_buy ? '已' : '' }}购买
+                    {{ is_buy ? $t('Key73') : $t('Key72') }}
                   </button>
                 </div>
               </div>
@@ -120,7 +120,7 @@
         </div>
         <div v-if="CourseData.teacher_list.length > 0" class="more">
           <div class="moreTitle">
-            授课教师
+            {{ $t('Key343') }}
           </div>
           <div class="moreList teacherList">
             <div v-for="(item, i) in CourseData.teacher_list" :key="i" class="moreOne">
@@ -139,7 +139,7 @@
         </div>
         <div class="course-arrangement">
           <div class="moreTitle">
-            课程安排
+            {{ $t('Key51') }}
           </div>
           <div v-for="(item, i) in CourseData.cs_item_list" :key="i" class="course-list">
             <div class="courseOne">
@@ -157,7 +157,7 @@
               <el-collapse @change="handleChange(item.id)">
                 <el-collapse-item :name="item.id">
                   <div slot="title" class="Coursetasks">
-                    课程任务
+                    {{ $t('Key392') }}
                     <img
                       class="arrow"
                       :src="
@@ -171,7 +171,7 @@
                     <template v-for="li in courseContentList">
                       <div v-if="item[li.id].length > 0" :key="li.id" class="tasks">
                         <div class="title">
-                          <span class="red-circle" /><span>{{ li.name }}任务</span>
+                          <span class="red-circle" /><span>{{ $t(li.name) }}</span>
                         </div>
                         <div class="content">
                           <el-collapse-item v-for="(it, it_i) in item[li.id]" :key="it_i" :name="it.id">
@@ -184,13 +184,13 @@
                             </div>
                             <div class="detail">
                               <div>
-                                <span>说明</span>
+                                <span>{{ $t('Key393') }}</span>
                                 <p>
                                   {{ it.content }}
                                 </p>
                               </div>
                               <div v-if="it.courseware_list.length > 0">
-                                <span>课件</span>
+                                <span>{{ $t('Key309') }}</span>
                                 <div>
                                   <div
                                     v-for="(courseware, courseware_i) in it.courseware_list"
@@ -203,7 +203,7 @@
                                 </div>
                               </div>
                               <div v-if="it.accessory_list.length > 0">
-                                <span>附件</span>
+                                <span>{{ $t('Key394') }}</span>
                                 <div>
                                   <div
                                     v-for="(accessory, accessory_i) in it.accessory_list"
@@ -227,14 +227,20 @@
           </div>
         </div>
 
-        <el-dialog class="orderDialog" title="商品详情" :visible="auditShow" width="720px" :before-close="closeaudit">
+        <el-dialog
+          class="orderDialog"
+          :title="$t('Key52')"
+          :visible="auditShow"
+          width="720px"
+          :before-close="closeaudit"
+        >
           <audit :goods-id="goods_id" :data="CourseData" :goods-type="goods_type" />
         </el-dialog>
       </div>
     </div>
 
     <div v-else-if="!loading" class="non-existent">
-      <h1>该课程已下架</h1>
+      <h1>{{ $t('Key395') }}</h1>
     </div>
   </div>
 </template>
@@ -272,9 +278,9 @@ export default {
       CourseData: null,
       isData: false,
       courseContentList: [
-        { id: 'pre_task_list', name: '课前' },
-        { id: 'mid_task_list', name: '课中' },
-        { id: 'after_task_list', name: '课后' }
+        { id: 'pre_task_list', name: 'Key353' },
+        { id: 'mid_task_list', name: 'Key354' },
+        { id: 'after_task_list', name: 'Key355' }
       ]
     };
   },
@@ -295,6 +301,34 @@ export default {
       .catch(() => {
         this.loading = false;
       });
+    this.updateWordPack({
+      word_key_list: [
+        'Key48',
+        'Key51',
+        'Key72',
+        'Key73',
+        'Key386',
+        'Key387',
+        'Key388',
+        'Key321',
+        'Key389',
+        'Key390',
+        'Key391',
+        'Key49',
+        'Key343',
+        'Key392',
+        'Key353',
+        'Key354',
+        'Key355',
+        'Key393',
+        'Key309',
+        'Key52',
+        'Key395',
+        'Key396',
+        'Key397',
+        'Key389'
+      ]
+    });
   },
   mounted() {
     this.$parent.$refs.header.changeLoginNavIndex(this.invok_module);
@@ -338,7 +372,7 @@ export default {
     addOrDeleteMyCollection() {
       if (this.collection) {
         CancelMyGoodsCollection({ goods_type: this.goods_type, goods_id_list: [this.CourseData.id] }).then(() => {
-          this.$message.success('取消收藏成功');
+          this.$message.success(this.$i18n.t('Key396'));
           this.collection = false;
         });
       } else {
@@ -355,7 +389,7 @@ export default {
           goods_picture_id: this.CourseData.picture_id,
           goods_price: this.CourseData.price
         }).then(() => {
-          this.$message.success('收藏课程成功');
+          this.$message.success(this.$i18n.t('Key397'));
           this.collection = true;
         });
       }
@@ -363,13 +397,13 @@ export default {
     // 购买   需要先加入课程 审核 审核通过之后才能购买课程
     getPurchase() {
       // 购买通道关闭
-      // if (this.is_buy) {
-      //   return this.$router.push('/');
-      // }
-      // if (!this.backTime) {
-      //   this.$message.warning('购买渠道已关闭');
-      //   return;
-      // }
+      if (this.is_buy) {
+        return this.$router.push('/');
+      }
+      if (!this.backTime) {
+        this.$message.warning(this.$i18n.t('Key389'));
+        return;
+      }
       this.auditShow = true;
     },
     closeaudit() {

+ 11 - 6
src/views/live/SelectDevice.vue

@@ -4,12 +4,12 @@
     :close-on-click-modal="false"
     :show-close="false"
     :close-on-press-escape="false"
-    title="设置设备"
+    :title="$t('Key398')"
   >
     <div class="device">
       <div>
         <div class="title">
-          视频
+          {{ $t('Key74') }}
         </div>
         <div class="device-video">
           <template v-if="device.video.length > 0">
@@ -20,13 +20,13 @@
             </div>
           </template>
           <template v-else>
-            <div>暂无视频设备</div>
+            <div>{{ $t('Key399') }}</div>
           </template>
         </div>
       </div>
       <div>
         <div class="title">
-          音频
+          {{ $t('Key400') }}
         </div>
         <div class="device-audio">
           <template v-if="device.audio.length > 0">
@@ -37,7 +37,7 @@
             </div>
           </template>
           <template v-else>
-            <div>暂无音频设备</div>
+            <div>{{ $t('Key401') }}</div>
           </template>
         </div>
       </div>
@@ -45,7 +45,7 @@
 
     <div slot="footer">
       <el-button type="primary" @click="dialogDeviceClose">
-        完成
+        {{ $t('Key82') }}
       </el-button>
     </div>
   </el-dialog>
@@ -83,6 +83,11 @@ export default {
       }
     }
   },
+  created() {
+    this.updateWordPack({
+      word_key_list: ['Key398', 'Key74', 'Key399', 'Key400', 'Key401', 'Key82']
+    });
+  },
   methods: {
     selectValue(arr, value) {
       return arr.some(item => item.deviceId === value) ? value : arr[0].deviceId;

+ 1 - 0
src/views/live/common.js

@@ -1,5 +1,6 @@
 import store from '@/store';
 import { Message } from 'element-ui';
+import i18n from '@/utils/i18n';
 
 /**
  * WebSDK 实例化对象

+ 17 - 7
src/views/live/student/audit.vue

@@ -8,7 +8,7 @@
         </div>
         <div>
           <el-button @click="exitRoom">
-            退出房间
+            {{ $t('Key459') }}
           </el-button>
         </div>
       </div>
@@ -62,7 +62,7 @@
         </div>
         <div class="group-container-left-chat">
           <div class="chat-top">
-            <span>聊天</span>
+            <span>{{ $t('Key409') }}</span>
           </div>
           <div class="chat-window">
             <ul ref="chat" class="chat-window-ul">
@@ -75,9 +75,15 @@
             </ul>
           </div>
           <div class="chat-speak">
-            <el-input v-model="msg" placeholder="输入发言" maxlength="400" disabled @keydown.enter.native="sendMsg">
+            <el-input
+              v-model="msg"
+              :placeholder="$t('Key410')"
+              maxlength="400"
+              disabled
+              @keydown.enter.native="sendMsg"
+            >
               <el-button slot="append" disabled @click="sendMsg">
-                发送
+                {{ $t('Key302') }}
               </el-button>
             </el-input>
           </div>
@@ -99,7 +105,7 @@
         </div>
         <div class="student-list">
           <div class="student-list-title">
-            小组成员
+            {{ $t('Key460') }}
           </div>
           <ul>
             <li v-for="item in student_list" :key="item.room_user_id">
@@ -223,6 +229,10 @@ export default {
   created() {
     this.getLiveRoomInfo();
     this.getMyGroupInfo_Student();
+
+    this.updateWordPack({
+      word_key_list: ['Key94', 'Key459', 'Key409', 'Key410', 'Key302', 'Key460', 'Key458']
+    });
   },
   mounted() {
     this.getGroupStatus();
@@ -319,8 +329,8 @@ export default {
             }
 
             if (is_has_group_message === 'true') {
-              this.$alert(group_message_text, '群消息', {
-                confirmButtonText: '确认'
+              this.$alert(group_message_text, this.$i18n.t('Key458'), {
+                confirmButtonText: this.$i18n.t('Key94')
               });
             }
           }

+ 29 - 12
src/views/live/student/group.vue

@@ -75,7 +75,7 @@
         </div>
         <div class="group-container-left-chat">
           <div class="chat-top">
-            <span>聊天</span>
+            <span>{{ $t('Key409') }}</span>
           </div>
           <div class="chat-window">
             <ul ref="chat" class="chat-window-ul">
@@ -88,9 +88,9 @@
             </ul>
           </div>
           <div class="chat-speak">
-            <el-input v-model="msg" placeholder="输入发言" maxlength="400" @keydown.enter.native="sendMsg">
+            <el-input v-model="msg" :placeholder="$t('Key410')" maxlength="400" @keydown.enter.native="sendMsg">
               <el-button slot="append" @click="sendMsg">
-                发送
+                {{ $t('Key302') }}
               </el-button>
             </el-input>
           </div>
@@ -112,7 +112,7 @@
         </div>
         <div class="student-list">
           <div class="student-list-title">
-            小组成员
+            {{ $t('Key460') }}
           </div>
           <ul>
             <li v-for="item in student_list" :key="item.room_user_id">
@@ -240,6 +240,23 @@ export default {
   created() {
     this.getLiveRoomInfo();
     this.getMyGroupInfo_Student();
+
+    this.updateWordPack({
+      word_key_list: [
+        'Key94',
+        'Key409',
+        'Key410',
+        'Key302',
+        'Key460',
+        'Key399',
+        'Key401',
+        'Key433',
+        'Key434',
+        'Key435',
+        'Key436',
+        'Key458'
+      ]
+    });
   },
   mounted() {
     this.getGroupStatus();
@@ -309,14 +326,14 @@ export default {
     // 本地流视频开启、关闭
     playOrPauseVideo() {
       if (this.$store.state.app.liveDevice.video.length === 0) {
-        return this.$message.warning('无视频设备');
+        return this.$message.warning(this.$i18n.t('Key399'));
       }
 
       if (this.hasVideo) {
         common.pauseVideo({
           streamName: 'picture',
           success: () => {
-            this.$message.success('关闭本地流视频画面成功');
+            this.$message.success(this.$i18n.t('Key433'));
             this.hasVideo = false;
           },
           fail: str => {
@@ -327,7 +344,7 @@ export default {
         common.playVideo({
           streamName: 'picture',
           success: () => {
-            this.$message.success('开启本地流视频画面成功');
+            this.$message.success(this.$i18n.t('Key434'));
             this.hasVideo = true;
           },
           fail: str => {
@@ -340,14 +357,14 @@ export default {
     // 本地流音频开启、关闭
     playOrPauseAudio() {
       if (this.$store.state.app.liveDevice.audio.length === 0) {
-        return this.$message.warning('无音频设备');
+        return this.$message.warning(this.$i18n.t('Key401'));
       }
 
       if (this.hasAudio) {
         common.pauseAudio({
           streamName: 'picture',
           success: () => {
-            this.$message.success('关闭本地流声音成功');
+            this.$message.success(this.$i18n.t('Key435'));
             this.hasAudio = false;
           },
           fail: str => {
@@ -358,7 +375,7 @@ export default {
         common.playAudio({
           streamName: 'picture',
           success: () => {
-            this.$message.success('开启本地流声音成功');
+            this.$message.success(this.$i18n.t('Key436'));
             this.hasAudio = true;
           },
           fail: str => {
@@ -411,8 +428,8 @@ export default {
             }
 
             if (is_has_group_message === 'true') {
-              this.$alert(group_message_text, '群消息', {
-                confirmButtonText: '确认'
+              this.$alert(group_message_text, this.$i18n.t('Key458'), {
+                confirmButtonText: this.$i18n.t('Key94')
               });
             }
           }

+ 14 - 10
src/views/live/student/index.vue

@@ -11,10 +11,10 @@
         </div>
         <div class="live-button-group">
           <el-button @click="exitRoom">
-            退出房间
+            {{ $t('Key459') }}
           </el-button>
           <el-button @click="setDevice">
-            设置设备
+            {{ $t('Key398') }}
           </el-button>
         </div>
       </div>
@@ -27,7 +27,7 @@
           <div class="loading-wrapper">
             <el-avatar icon="el-icon-user" :src="roomInfo.teacher_image_url" />
             <p class="loading-title">
-              {{ roomInfo.teacher_name }}邀请您连线中
+              {{ roomInfo.teacher_name }}{{ $t('Key461') }}
             </p>
             <div>
               <el-button type="danger" circle @click="handsDown">
@@ -43,7 +43,7 @@
           <template v-if="remoteStreamType !== 1">
             <template v-if="roomInfo.video_mode === 1">
               <el-button v-show="invite" type="danger" @click="handsDown">
-                <svg-icon icon-class="hang-up" /> 挂断
+                <svg-icon icon-class="hang-up" /> {{ $t('Key422') }}
               </el-button>
             </template>
             <template v-else>
@@ -87,7 +87,7 @@
         </div>
         <div class="live-container-right-chat">
           <div class="chat-top">
-            <span>聊天</span>
+            <span>{{ $t('Key409') }}</span>
           </div>
           <div class="chat-window">
             <ul ref="chat" class="chat-window-ul">
@@ -103,12 +103,12 @@
             <el-input
               v-model="msg"
               :disabled="!roomData.allow_chat"
-              :placeholder="roomData.allow_chat ? '输入发言' : '已全体禁言'"
+              :placeholder="roomData.allow_chat ? $t('Key410') : '已全体禁言'"
               maxlength="400"
               @keydown.enter.native="sendMsg"
             >
               <el-button slot="append" :disabled="!roomData.allow_chat" @click="sendMsg">
-                发送
+                {{ $t('Key302') }}
               </el-button>
             </el-input>
           </div>
@@ -136,7 +136,7 @@
     <!-- 学员列表 -->
     <div class="student-list">
       <div class="student-list-title">
-        <span>学员列表({{ student_list.length }} / {{ roomInfo.student_count }})</span>
+        <span>{{ $t('Key296') }}({{ student_list.length }} / {{ roomInfo.student_count }})</span>
       </div>
       <div class="student-list-container">
         <ul>
@@ -310,7 +310,7 @@ export default {
         });
       } else {
         this.$loading({
-          text: '加载直播所需SDK中...',
+          text: this.$i18n.t('Key425'),
           background: '#fff'
         });
         this.getLiveRoomData_DRTD();
@@ -329,6 +329,10 @@ export default {
           });
       }
     });
+
+    this.updateWordPack({
+      word_key_list: ['Key459', 'Key398', 'Key461', 'Key422', 'Key409', 'Key410', 'Key302', 'Key296', 'Key425', 'Key431']
+    });
   },
   mounted() {
     this.getLiveRoomData_DRTDPolling();
@@ -406,7 +410,7 @@ export default {
           this.dealStudentConnection(this.room_user_id, 0, this.roomInfo.video_mode);
           console.log('下麦成功', str);
           common.updateMcResult('', 0);
-          this.$message.success('下麦成功');
+          this.$message.success(this.$i18n.t('Key431'));
         },
         fail: data => {
           this.connect = false;

+ 12 - 9
src/views/live/teacher/CompleteList.vue

@@ -9,7 +9,7 @@
   >
     <div slot="title" class="dialog-header">
       <span class="dialog-header-title">
-        学习资料 - {{ material_type === 'COURSEWARE' ? '课件' : '文档' }} - {{ material_name }}
+        {{ $t('Key274') }} - {{ material_type === 'COURSEWARE' ? $t('Key309') : $t('Key244') }} - {{ material_name }}
       </span>
       <span @click="isAlignCenter = !isAlignCenter">
         <svg-icon :icon-class="isAlignCenter ? 'align-left' : 'align-center'" />
@@ -39,11 +39,11 @@
       <div v-show="isStudent" class="answer-info">
         <span class="current-student-name">{{ curStudentName }}:</span>
         <template v-if="material_type === 'COURSEWARE'">
-          <span>用时</span>
-          <span class="answer-info-duration">{{ duration }}</span>
-          <span class="answer-info-label">正确</span>
+          <span>{{ $t('Key320') }}</span>
+          <span class="answer-info-duration">{{ duration }}{{ $t('Key321') }}</span>
+          <span class="answer-info-label">{{ $t('Key194') }}</span>
           <span class="answer-info-count-right">{{ count_right }}</span>
-          <span class="answer-info-label">错误</span>
+          <span class="answer-info-label">{{ $t('Key195') }}</span>
           <span class="answer-info-count-error">{{ count_error }}</span>
         </template>
       </div>
@@ -210,6 +210,11 @@ export default {
       }
     }
   },
+  created() {
+    this.updateWordPack({
+      word_key_list: ['Key274', 'Key309', 'Key244', 'Key320', 'Key321', 'Key194', 'Key195']
+    });
+  },
   methods: {
     getCurMaterialSent() {
       GetCurMaterialSent({ task_id: this.taskId }).then(
@@ -327,11 +332,9 @@ export default {
 
     // 下载文件zip
     downloadBookWriteParent(idList) {
-      let MethodName = 'file_store_manager-StartCreateFileCompressPack';
-      let data = {
+      getContentFile('file_store_manager-StartCreateFileCompressPack', {
         file_id_list: JSON.parse(idList)
-      };
-      getContentFile(MethodName, data).then(res => {
+      }).then(res => {
         let id = res.file_compress_task_id;
         this.bookDownTimer = setInterval(() => {
           this.checkTaskProgress(id);

+ 42 - 19
src/views/live/teacher/group.vue

@@ -8,16 +8,16 @@
         </div>
         <div>
           <el-button @click="stopGroup">
-            结束群组讨论
+            {{ $t('Key404') }}
           </el-button>
           <el-button v-show="isGroup" @click="reconnection">
-            重连
+            {{ $t('Key405') }}
           </el-button>
           <el-button v-show="isGroup && !isAudit" @click="setCurGroupToExample_Teacher">
-            设为示范讨论组
+            {{ $t('Key406') }}
           </el-button>
           <el-button v-show="isGroup && !isAudit" @click="exitCurGroup_Teacher">
-            退出小组讨论
+            {{ $t('Key407') }}
           </el-button>
         </div>
       </div>
@@ -84,15 +84,15 @@
 
         <div class="button-group">
           <div class="button-group-left">
-            <span class="stop-group" @click="stopGroup">结束群组讨论</span>
+            <span class="stop-group" @click="stopGroup">{{ $t('Key404') }}</span>
           </div>
           <div class="button-group-right" />
         </div>
         <div class="live-container-left-chat">
           <div class="chat-top">
-            <span>聊天</span>
+            <span>{{ $t('Key409') }}</span>
             <el-button size="small" @click="sendAllMsg">
-              给所有小组发送群消息
+              {{ $t('Key408') }}
             </el-button>
           </div>
           <div class="chat-window">
@@ -108,13 +108,13 @@
           <div class="chat-speak">
             <el-input
               v-model="msg"
-              :placeholder="isGroup ? '输入发言' : '未在小组中'"
+              :placeholder="isGroup ? $t('Key410') : $t('Key411')"
               maxlength="400"
               :disabled="!isGroup"
               @keydown.enter.native="sendMsg"
             >
               <el-button slot="append" :disabled="!isGroup" @click="sendMsg">
-                发送
+                {{ $t('Key302') }}
               </el-button>
             </el-input>
           </div>
@@ -133,7 +133,7 @@
         </div>
         <div class="student-list">
           <div class="student-list-title">
-            小组成员列表
+            {{ $t('Key412') }}
           </div>
           <ul>
             <template v-if="isGroup">
@@ -292,6 +292,29 @@ export default {
       this.group_list = group_list;
       this.live_room_sys_user_id = live_room_sys_user_id;
     });
+
+    this.updateWordPack({
+      word_key_list: [
+        'Key404',
+        'Key405',
+        'Key406',
+        'Key407',
+        'Key409',
+        'Key408',
+        'Key410',
+        'Key411',
+        'Key302',
+        'Key412',
+        'Key94',
+        'Key83',
+        'Key46',
+        'Key413',
+        'Key414',
+        'Key415',
+        'Key416',
+        'Key417'
+      ]
+    });
   },
   beforeDestroy() {
     common.closeVideo('main');
@@ -328,16 +351,16 @@ export default {
 
     // 给所有小组发送消息
     sendAllMsg() {
-      this.$prompt(' ', '给所有小组发送群消息', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
+      this.$prompt(' ', this.$i18n.t('Key408'), {
+        confirmButtonText: this.$i18n.t('Key94'),
+        cancelButtonText: this.$i18n.t('Key83'),
         inputValidator(val) {
           if (val !== null && val.length > 0) return true;
-          return '请输入内容';
+          return this.$i18n.t('Key46');
         }
       }).then(({ value }) => {
         SendGroupMessage({ task_id: this.task_id, group_message_text: value }).then(() => {
-          this.$message.success('发送成功');
+          this.$message.success(this.$i18n.t('Key413'));
         });
       });
     },
@@ -361,7 +384,7 @@ export default {
     // 分组讨论
     stopGroup() {
       StopGroup({ task_id: this.task_id }).then(() => {
-        this.$message.success('结束分组讨论成功');
+        this.$message.success(this.$i18n.t('Key414'));
         CreateEnterLiveRoomSession({
           task_id: this.task_id
         }).then(({ live_room_sys_user_id, room_id, session_id, room_user_id }) => {
@@ -435,16 +458,16 @@ export default {
         });
         this.streamList = [];
         common.removeWebSDK();
-        this.$message.success('退出小组讨论成功');
+        this.$message.success(this.$i18n.t('Key415'));
       });
     },
 
     setCurGroupToExample_Teacher() {
-      const loading = this.$loading({ text: '正在把当前分组设为示范讨论组,请等待' });
+      const loading = this.$loading({ text: this.$i18n.t('Key416') });
       SetCurGroupToExample_Teacher({ task_id: this.task_id, group_id: this.group_id })
         .then(() => {
           this.isAudit = true;
-          this.$message.success('把当前分组设为示范讨论组成功');
+          this.$message.success(this.$i18n.t('Key417'));
           return GetMyGroupInfo_Teacher({ task_id: this.task_id });
         })
         .then(({ audience_list }) => {

+ 66 - 30
src/views/live/teacher/index.vue

@@ -11,16 +11,16 @@
         </div>
         <div class="live-button-group">
           <el-button v-if="!liveStat" @click="startLive">
-            开启直播
+            {{ $t('Key418') }}
           </el-button>
           <el-button v-if="liveStat" icon="el-icon-switch-button" @click="closeLiveRoom">
-            结束直播
+            {{ $t('Key419') }}
           </el-button>
           <el-button v-if="liveStat" @click="reconnection">
-            重连
+            {{ $t('Key405') }}
           </el-button>
           <el-button @click="setDevice(true)">
-            设置设备
+            {{ $t('Key398') }}
           </el-button>
         </div>
       </div>
@@ -33,7 +33,7 @@
           <div class="loading-wrapper">
             <el-avatar icon="el-icon-user" :src="connectStudent.student_image_url" />
             <p class="loading-title">
-              正在呼叫【{{ connectStudent.student_name }}】,等待对方接通...
+              {{ $t('Key420') }}【{{ connectStudent.student_name }}】,{{ $t('Key421') }}...
             </p>
             <div>
               <el-button type="danger" circle @click="handsDown">
@@ -47,7 +47,7 @@
           <template v-if="remoteStreamType !== 1">
             <template v-if="roomInfo.video_mode === 1">
               <el-button type="danger" @click="handsDown">
-                <svg-icon icon-class="hang-up" /> 挂断
+                <svg-icon icon-class="hang-up" /> {{ $t('Key422') }}
               </el-button>
             </template>
             <template v-else>
@@ -131,10 +131,10 @@
         </div>
         <div class="live-container-right-chat">
           <div class="chat-top">
-            <span>聊天</span>
+            <span>{{ $t('Key409') }}</span>
             <span class="chat-bans" @click="chatBans">
               <input type="checkbox" :checked="isAllowChat" class="allow-chat">
-              <span>禁言</span>
+              <span>{{ $t('Key423') }}</span>
             </span>
           </div>
           <div class="chat-window">
@@ -148,9 +148,9 @@
             </ul>
           </div>
           <div class="chat-speak">
-            <el-input v-model="msg" placeholder="输入发言" maxlength="400" @keydown.enter.native="sendMsg">
+            <el-input v-model="msg" :placeholder="$t('Key410')" maxlength="400" @keydown.enter.native="sendMsg">
               <el-button slot="append" @click="sendMsg">
-                发送
+                {{ $t('Key302') }}
               </el-button>
             </el-input>
           </div>
@@ -173,7 +173,7 @@
     <!-- 学员列表 -->
     <div class="student-list">
       <div class="student-list-title">
-        <span>学员列表({{ student_list.length }} / {{ roomInfo.student_count }})</span>
+        <span>{{ $t('Key296') }}({{ student_list.length }} / {{ roomInfo.student_count }})</span>
       </div>
       <div class="student-list-container">
         <ul>
@@ -241,7 +241,7 @@
     />
 
     <el-dialog
-      title="分组讨论组数"
+      :title="$t('Key424')"
       top="30vh"
       width="300px"
       class="dialog-group"
@@ -253,8 +253,8 @@
       </el-select>
 
       <span slot="footer">
-        <el-button size="small" @click="closeGroup">取 消</el-button>
-        <el-button size="small" type="primary" @click="dialogGroup">确 定</el-button>
+        <el-button size="small" @click="closeGroup">{{ $t('Key83') }}</el-button>
+        <el-button size="small" type="primary" @click="dialogGroup">{{ $t('Key94') }}</el-button>
       </span>
     </el-dialog>
   </div>
@@ -406,7 +406,7 @@ export default {
         });
       } else {
         this.$loading({
-          text: '加载直播所需SDK中...',
+          text: this.$i18n.t('Key425'),
           background: '#fff'
         });
         common.downloadWebSDK(this);
@@ -414,6 +414,42 @@ export default {
         this.getLiveRoomInfo();
       }
     });
+
+    this.updateWordPack({
+      word_key_list: [
+        'Key418',
+        'Key419',
+        'Key405',
+        'Key398',
+        'Key420',
+        'Key421',
+        'Key422',
+        'Key409',
+        'Key423',
+        'Key410',
+        'Key302',
+        'Key296',
+        'Key424',
+        'Key94',
+        'Key83',
+        'Key425',
+        'Key426',
+        'Key427',
+        'Key428',
+        'Key429',
+        'Key430',
+        'Key431',
+        'Key432',
+        'Key433',
+        'Key434',
+        'Key435',
+        'Key436',
+        'Key437',
+        'Key438',
+        'Key399',
+        'Key401'
+      ]
+    });
   },
   mounted() {
     document.addEventListener(
@@ -491,7 +527,7 @@ export default {
     closeLiveRoom() {
       CloseLiveRoom({ task_id: this.task_id }).then(() => {
         this.$router.push('/');
-        this.$message.success('关闭直播成功');
+        this.$message.success(this.$i18n.t('Key426'));
       });
     },
 
@@ -527,11 +563,11 @@ export default {
     // 老师邀请学生上麦
     invite(student, mode, is_mobile, is_exit_page) {
       if (is_mobile && is_exit_page) {
-        this.$message.warning('手机端学员已离开直播视频界面,不能进行通话');
+        this.$message.warning(this.$i18n.t('Key427'));
         return;
       }
       if (this.connect || this.callLoading) {
-        this.$message.warning('正在连麦中');
+        this.$message.warning(this.$i18n.t('Key428'));
         return;
       }
       this.callLoading = true;
@@ -551,7 +587,7 @@ export default {
               },
               roomUpdateFailed: () => {
                 this.callLoading = false;
-                this.$message.error('连麦音视频模式更新请求失败! 请稍后再试!');
+                this.$message.error(this.$i18n.t('Key429'));
               }
             });
           }
@@ -575,7 +611,7 @@ export default {
         fail: data => {
           console.log('邀请上麦失败:', data);
           this.callLoading = false;
-          this.$message.error(`邀请上麦失败:${data.errorMsg}`);
+          this.$message.error(`${this.$i18n.t('Key430')}:${data.errorMsg}`);
         }
       });
     },
@@ -619,14 +655,14 @@ export default {
           this.callLoading = false;
           this.connect = false;
           common.updateMcResult('', 0);
-          this.$message.success('下麦成功');
+          this.$message.success(this.$i18n.t('Key431'));
           this.connectStudent = {};
         },
         fail: data => {
           this.callLoading = false;
           this.connect = false;
           console.log('下麦失败', data);
-          this.$message.warning(`下麦失败:${data.errorMsg}`);
+          this.$message.warning(`${this.$i18n.t('Key432')}:${data.errorMsg}`);
         }
       });
     },
@@ -634,14 +670,14 @@ export default {
     // 本地流视频开启、关闭
     playOrPauseVideo() {
       if (this.device.video.length === 0) {
-        return this.$message.warning('无视频设备');
+        return this.$message.warning(this.$i18n.t('Key399'));
       }
 
       if (this.hasVideo) {
         common.pauseVideo({
           streamName: 'main',
           success: () => {
-            this.$message.success('关闭本地流视频画面成功');
+            this.$message.success(this.$i18n.t('Key433'));
             this.hasVideo = false;
           },
           fail: str => {
@@ -652,7 +688,7 @@ export default {
         common.playVideo({
           streamName: 'main',
           success: () => {
-            this.$message.success('开启本地流视频画面成功');
+            this.$message.success(this.$i18n.t('Key434'));
             this.hasVideo = true;
           },
           fail: str => {
@@ -665,14 +701,14 @@ export default {
     // 本地流音频开启、关闭
     playOrPauseAudio() {
       if (this.device.audio.length === 0) {
-        return this.$message.warning('无音频设备');
+        return this.$message.warning(this.$i18n.t('Key401'));
       }
 
       if (this.hasAudio) {
         common.pauseAudio({
           streamName: 'main',
           success: () => {
-            this.$message.success('关闭本地流声音成功');
+            this.$message.success(this.$i18n.t('Key435'));
             this.hasAudio = false;
           },
           fail: str => {
@@ -683,7 +719,7 @@ export default {
         common.playAudio({
           streamName: 'main',
           success: () => {
-            this.$message.success('开启本地流声音成功');
+            this.$message.success(this.$i18n.t('Key436'));
             this.hasAudio = true;
           },
           fail: str => {
@@ -793,12 +829,12 @@ export default {
     // 弹出框方法
     dialogGroup() {
       const loading = this.$loading({
-        text: '正在进行分组,请等待...'
+        text: this.$i18n.t('Key437')
       });
       // 开始分组讨论
       StartGroup({ task_id: this.task_id, group_count: this.group_count })
         .then(() => {
-          this.$message.success('开启分组讨论成功');
+          this.$message.success(this.$i18n.t('Key438'));
           this.$router.push({
             path: '/live/teacher/group',
             query: {

+ 22 - 15
src/views/main/TaskList.vue

@@ -115,7 +115,7 @@
 import MainMenu from './components/MainMenu.vue';
 import { PageQueryMyMessageList, GetMyTaskList } from '@/api/table';
 import { CreateEnterLiveRoomSession } from '@/api/live';
-import { ReadMyMessage } from '@/api/user';
+import { ReadMyMessage, GetMyBookBuyStatus_CurTaskCoursewareBook } from '@/api/user';
 import { colorMatching, buttonColorList } from './data';
 import { taskTimeList } from '@/common/data';
 import { GetMyCourseList_TaskBelong } from '@/api/list';
@@ -231,24 +231,31 @@ export default {
 
     taskLink(type, task_id) {
       let userType = this.$store.state.user.user_type;
-      if (type === 10) {
-        CreateEnterLiveRoomSession({
-          task_id
-        }).then(({ live_room_sys_user_id, room_id, session_id, room_user_id }) => {
-          this.$router.push({
-            path: `/live/${userType === 'TEACHER' ? 'teacher' : 'student'}`,
-            query: { live_room_sys_user_id, room_id, session_id, task_id, room_user_id }
+      GetMyBookBuyStatus_CurTaskCoursewareBook({ task_id }).then(({ is_buy_all }) => {
+        if (is_buy_all === 'false') return this.$message.warning('您还未购买任务关联课件的所有相关教材,请购买');
+
+        if (type === 10) {
+          CreateEnterLiveRoomSession({
+            task_id
+          }).then(({ live_room_sys_user_id, room_id, session_id, room_user_id }) => {
+            this.$router.push({
+              path: `/live/${userType === 'TEACHER' ? 'teacher' : 'student'}`,
+              query: { live_room_sys_user_id, room_id, session_id, task_id, room_user_id }
+            });
           });
-        });
-      } else {
-        this.$router.push(`/task_detail/${userType === 'STUDENT' ? 'student' : 'teacher'}/${task_id}`);
-      }
+        } else {
+          this.$router.push(`/task_detail/${userType === 'STUDENT' ? 'student' : 'teacher'}/${task_id}`);
+        }
+      });
     },
 
     taskLink_outside(task_id) {
-      this.$router.push(
-        `/task_detail/${this.$store.state.user.user_type === 'STUDENT' ? 'student' : 'teacher'}/${task_id}`
-      );
+      GetMyBookBuyStatus_CurTaskCoursewareBook({ task_id }).then(({ is_buy_all }) => {
+        if (is_buy_all === 'false') return this.$message.warning('您还未购买任务关联课件的所有相关教材,请购买');
+        this.$router.push(
+          `/task_detail/${this.$store.state.user.user_type === 'STUDENT' ? 'student' : 'teacher'}/${task_id}`
+        );
+      });
     },
 
     readMyMessage(id, source_entity_id, message_type) {

+ 4 - 2
src/views/main/TemplateList.vue

@@ -90,6 +90,7 @@ import { PageQueryCourseList } from '@/api/table';
 import { ReleaseCourse, DeleteCourse, IsHasEditDestCoursePopedom } from '@/api/course';
 
 export default {
+  name: 'TemplateList',
   components: {
     MainMenu
   },
@@ -136,7 +137,8 @@ export default {
         'Key110',
         'Key129',
         'Key217',
-        'Key286'
+        'Key286',
+        'Key253'
       ]
     });
     this.queryCourseList();
@@ -182,7 +184,7 @@ export default {
     deleteCourse(id) {
       DeleteCourse({ id }).then(() => {
         this.queryCourseList();
-        this.$message.success('删除课程成功');
+        this.$message.success(this.$i18n.t('Key253'));
       });
     },
 

+ 7 - 4
src/views/main/curricula_list/teacher.vue

@@ -138,7 +138,10 @@ export default {
         'Key173',
         'Key172',
         'Key296',
-        'key279'
+        'key279',
+        'Key94',
+        'Key83',
+        'Key361'
       ]
     });
     this.queryMyCourseList();
@@ -198,9 +201,9 @@ export default {
     },
 
     deleteCourse(id) {
-      this.$confirm('您确定要删除该课程吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
+      this.$confirm('您确定要删除该课程吗?', this.$i18n.t('Key361'), {
+        confirmButtonText: this.$i18n.t('Key94'),
+        cancelButtonText: this.$i18n.t('Key83'),
         type: 'warning'
       }).then(() => {
         DeleteCourse({ id }).then(() => {

+ 1 - 1
src/views/task_details/teacher/index.vue

@@ -127,7 +127,7 @@
 
 <script>
 import CompletionView from '@/components/course/CompletionView.vue';
-import ShowFile from '@/common/show_file';
+import ShowFile from '@/common/show_file/index.vue';
 import TaskTop from '../TaskTop.vue';
 import { GetTaskInfo, GetTaskStudentExecuteInfo, RemarkTaskStudentExecuteInfo_Teacher } from '@/api/course';
 

+ 9 - 4
src/views/teacher/create_course/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="create-course">
     <div class="create-course-title">
-      创建课程
+      {{ $t('Key285') }}
     </div>
     <div class="create-course-container">
       <div class="create template">
@@ -9,7 +9,7 @@
           <i class="el-icon-plus" />
         </div>
         <div class="name">
-          模板库
+          {{ $t('Key286') }}
         </div>
       </div>
       <div class="create build">
@@ -17,7 +17,7 @@
           <i class="el-icon-plus" />
         </div>
         <div class="name">
-          新建
+          {{ $t('Key287') }}
         </div>
       </div>
     </div>
@@ -37,6 +37,11 @@ export default {
       dialogVisible: false
     };
   },
+  created() {
+    this.updateWordPack({
+      word_key_list: ['Key285', 'Key286', 'Key287']
+    });
+  },
   methods: {
     selectTemplate() {
       this.dialogVisible = true;
@@ -52,7 +57,7 @@ export default {
 };
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 @import '~@/styles/mixin';
 
 .create-course {

+ 25 - 20
src/views/teacher/create_course/step_table/AddItem.vue

@@ -3,32 +3,32 @@
     v-loading="loading"
     class="add-item"
     :visible="dialogVisible"
-    title="课节信息"
+    :title="$t('Key352')"
     width="600px"
     top="25vh"
     :close-on-click-modal="false"
     :show-close="false"
     @close="dialogClose"
   >
-    <el-form ref="itemForm" :model="itemForm" :rules="itemRules" label-width="90px" label-position="left">
-      <el-form-item label="课节名称" prop="name">
+    <el-form ref="itemForm" :model="itemForm" :rules="itemRules" label-width="100px" label-position="left">
+      <el-form-item :label="$t('Key270')" prop="name">
         <el-input v-model="itemForm.name" class="item-name" />
       </el-form-item>
-      <el-form-item label="课节周期" prop="date">
+      <el-form-item :label="$t('Key358')" prop="date">
         <div class="cs-cycle">
-          <el-date-picker v-model="itemForm.begin_date" type="date" value-format="yyyy-MM-dd" />
+          <el-date-picker v-model="itemForm.begin_time" type="date" value-format="yyyy-MM-dd" />
           <span>&nbsp;~&nbsp;</span>
-          <el-date-picker v-model="itemForm.end_date" type="date" value-format="yyyy-MM-dd" />
+          <el-date-picker v-model="itemForm.end_time" type="date" value-format="yyyy-MM-dd" />
         </div>
       </el-form-item>
     </el-form>
 
     <div slot="footer">
       <el-button class="cancel" @click="dialogClose">
-        取消
+        {{ $t('Key83') }}
       </el-button>
       <el-button type="primary" @click="addCSItem">
-        确定
+        {{ $t('Key94') }}
       </el-button>
     </div>
   </el-dialog>
@@ -38,6 +38,7 @@
 import { AddCSItemToCourse, GetCSItem, UpdateCSItem } from '@/api/course';
 
 export default {
+  name: 'AddItem',
   props: {
     dialogVisible: {
       default: false,
@@ -57,25 +58,31 @@ export default {
     }
   },
   data() {
+    const validateName = (rule, value, callback) => {
+      if (value.length <= 0) {
+        callback(new Error(this.$i18n.t('Key359')));
+      } else {
+        callback();
+      }
+    };
     return {
       loading: false,
       itemForm: {
         name: '',
-        begin_date: '',
-        end_date: ''
+        begin_time: '',
+        end_time: ''
       },
       itemRules: {
-        name: { required: true, message: '课节名称不能为空', trigger: 'blur' }
+        name: { trigger: 'blur', validator: validateName }
       }
     };
   },
   watch: {
     type(newVal) {
       if (newVal === 'edit') {
-        this.getCSItem();
-      } else {
-        this.itemForm = { name: '', begin_time: '', end_time: '' };
+        return this.getCSItem();
       }
+      this.itemForm = { name: '', begin_time: '', end_time: '' };
     }
   },
   methods: {
@@ -85,8 +92,8 @@ export default {
 
         let data = {
           name: this.itemForm.name,
-          begin_time: `${this.itemForm.begin_date} 00:00:00`,
-          end_time: `${this.itemForm.end_date} 23:59:59`
+          begin_time: `${this.itemForm.begin_time} 00:00:00`,
+          end_time: `${this.itemForm.end_time} 23:59:59`
         };
         this.loading = true;
 
@@ -119,12 +126,10 @@ export default {
     getCSItem() {
       GetCSItem({ id: this.id }).then(({ begin_time, end_time, name }) => {
         if (begin_time.length > 0) {
-          let begin = begin_time.split(' ');
-          this.itemForm.begin_date = begin[0];
+          this.itemForm.begin_time = begin_time.split(' ')[0];
         }
         if (end_time.length > 0) {
-          let end = end_time.split(' ');
-          this.itemForm.end_date = end[0];
+          this.itemForm.end_time = end_time.split(' ')[0];
         }
         this.itemForm.name = name;
       });

+ 67 - 29
src/views/teacher/create_course/step_table/CourseInfo.vue

@@ -10,7 +10,7 @@
         label-width="120px"
         hide-required-asterisk
       >
-        <el-form-item label="课程封面" class="cover">
+        <el-form-item :label="$t('Key252')" class="cover">
           <el-upload
             action="no"
             class="avatar-uploader"
@@ -24,85 +24,85 @@
           </el-upload>
         </el-form-item>
 
-        <el-form-item label="课程名称" prop="name">
-          <el-input v-model="form.name" type="text" class="name-input" placeholder="请输入" />
+        <el-form-item :label="$t('Key134')" prop="name">
+          <el-input v-model="form.name" type="text" class="name-input" :placeholder="$t('Key341')" />
         </el-form-item>
 
-        <el-form-item label="课程介绍">
+        <el-form-item :label="$t('Key253')">
           <el-input
             v-model="form.intro"
             type="textarea"
-            placeholder="请输入"
+            :placeholder="$t('Key341')"
             resize="none"
             class="intro-input"
             rows="4"
           />
         </el-form-item>
 
-        <el-form-item label="所属机构" placeholder="点击选择">
+        <el-form-item :label="$t('Key136')" :placeholder="$t('Key342')">
           <el-select v-model="form.org_id" class="org-list">
             <el-option v-for="item in orgList" :key="item.id" :label="item.name" :value="item.id" />
           </el-select>
         </el-form-item>
 
-        <el-form-item v-if="!is_template" label="授课教师" class="teacher-tag">
+        <el-form-item v-if="!is_template" :label="$t('Key343')" class="teacher-tag">
           <el-button class="teacher" icon="el-icon-plus" circle @click="selectTeacher" />
           <el-tag v-for="(item, i) in user_list" :key="item.id" color="#fff" closable @close="tagClose(item.id, i)">
             {{ item.real_name }}
           </el-tag>
         </el-form-item>
 
-        <el-form-item label="课程周期">
+        <el-form-item :label="$t('Key250')">
           <el-date-picker v-model="form.begin_date" type="date" value-format="yyyy-MM-dd" />
           <span> ~ </span>
           <el-date-picker v-model="form.end_date" type="date" value-format="yyyy-MM-dd" />
         </el-form-item>
 
-        <el-form-item label="学生数量">
+        <el-form-item :label="$t('Key254')">
           <el-input v-model.number.lazy="form.student_count_max" class="student-count" />
           <el-checkbox v-model="form.is_auto_close">
-            报满后自动封班
+            {{ $t('Key266') }}
           </el-checkbox>
         </el-form-item>
 
-        <el-form-item label="加入方式">
+        <el-form-item :label="$t('Key255')">
           <el-radio v-model="form.student_enter_control_type" :label="0">
-            公开
+            {{ $t('Key256') }}
           </el-radio>
           <el-radio v-model="form.student_enter_control_type" :label="1">
-            需要申请
+            {{ $t('Key257') }}
           </el-radio>
         </el-form-item>
 
-        <el-form-item label="价格">
+        <el-form-item :label="$t('Key233')">
           <el-input v-model="form.price" class="price" @input="price">
             <span slot="prepend">¥</span>
           </el-input>
         </el-form-item>
 
-        <el-form-item label="课后评价">
+        <el-form-item :label="$t('Key258')">
           <el-radio v-model="form.is_enable_KHPJ" :label="true">
-            开启
+            {{ $t('Key245') }}
           </el-radio>
           <el-radio v-model="form.is_enable_KHPJ" :label="false">
-            关闭
+            {{ $t('Key246') }}
           </el-radio>
-          <span class="tip">每节课后学生可对课程及老师进行打分及评价</span>
+          <span class="tip">{{ $t('Key260') }}</span>
         </el-form-item>
 
-        <el-form-item label="学生自评">
+        <el-form-item :label="$t('Key259')">
           <el-radio v-model="form.is_enable_XYZP" :label="true">
-            开启
+            {{ $t('Key245') }}
           </el-radio>
           <el-radio v-model="form.is_enable_XYZP" :label="false">
-            关闭
+            {{ $t('Key246') }}
           </el-radio>
-          <span class="tip">每节课后学生需对自己的课上表现进行打分及评价</span>
+          <span class="tip">{{ $t('Key261') }}</span>
         </el-form-item>
 
         <el-form-item>
           <el-button type="primary" class="next-step" @click.prevent="nextStep">
-            下一步<i class="el-icon-right" />
+            {{ $t('Key262') }}<i class="el-icon-right" />
           </el-button>
         </el-form-item>
       </el-form>
@@ -119,7 +119,7 @@
 </template>
 
 <script>
-import StepBar from '@/components/StepBar';
+import StepBar from '@/components/StepBar.vue';
 import SelectTeacher from '@/components/select/SelectTeacher.vue';
 import { fileUpload } from '@/api/app';
 import { CreateCourse, GetCourseInfo_ContainCSItem, UpdateCourse } from '@/api/course';
@@ -131,6 +131,13 @@ export default {
   name: 'CourseInfo',
   components: { StepBar, SelectTeacher },
   data() {
+    const validateName = (rule, value, callback) => {
+      if (value.length <= 0) {
+        callback(new Error(this.$i18n.t('Key345')));
+      } else {
+        callback();
+      }
+    };
     let query = this.$route.query;
 
     return {
@@ -155,7 +162,7 @@ export default {
         is_enable_XYZP: false
       },
       formRules: {
-        name: { required: true, message: '课程名称不能为空', trigger: 'blur' }
+        name: { trigger: 'blur', validator: validateName }
       },
       orgList: [],
       user_list: [],
@@ -172,6 +179,37 @@ export default {
     if (this.is_use_template) {
       this.getCourseInfo_ContainCSItem(this.template_id);
     }
+
+    this.updateWordPack({
+      word_key_list: [
+        'Key252',
+        'Key134',
+        'Key341',
+        'Key253',
+        'Key136',
+        'Key342',
+        'Key343',
+        'Key250',
+        'Key254',
+        'Key266',
+        'Key255',
+        'Key256',
+        'Key257',
+        'Key233',
+        'Key258',
+        'Key245',
+        'Key246',
+        'Key261',
+        'Key260',
+        'Key262',
+        'Key345',
+        'Key259',
+        'Key346',
+        'Key347',
+        'Key348',
+        'Key349'
+      ]
+    });
   },
   methods: {
     nextStep() {
@@ -180,7 +218,7 @@ export default {
           if (this.id) {
             this.form.id = this.id;
             UpdateCourse(this.form).then(() => {
-              this.$message.success('修改课程成功!');
+              this.$message.success(this.$i18n.t('Key346'));
               this.$router.push({
                 path: `/create_course_step_table/select_book/${this.id}?is_template=${this.is_template}`
               });
@@ -191,7 +229,7 @@ export default {
             this.form.template_id = this.template_id;
 
             CreateCourse(this.form).then(res => {
-              this.$message.success('创建课程成功!');
+              this.$message.success(this.$i18n.t('Key347'));
               this.$router.push({
                 path: `/create_course_step_table/select_book/${res.id}?is_template=${this.is_template}`
               });
@@ -245,7 +283,7 @@ export default {
     beforeUpload(file) {
       let isImage = /^image/.test(file.type);
       if (!isImage) {
-        this.$message.error('上传的文件不是图片,请重新上传!');
+        this.$message.error(this.$i18n.t('Key348'));
       }
       return isImage;
     },
@@ -266,7 +304,7 @@ export default {
       if (this.form.org_id) {
         this.dialogVisible = true;
       } else {
-        this.$message.warning('请先选择所属机构!');
+        this.$message.warning(this.$i18n.t('Key349'));
       }
     },
     dialogClose() {

+ 86 - 49
src/views/teacher/create_course/step_table/CreateTask.vue

@@ -18,10 +18,10 @@
     <!-- 按钮 -->
     <div class="task-button">
       <el-button class="prev-step" @click="preStep">
-        <i class="el-icon-back" />选择教材
+        <i class="el-icon-back" />{{ $t('Key275') }}
       </el-button>
       <el-button @click="$router.push(closeLink)">
-        关闭
+        {{ $t('Key246') }}
       </el-button>
     </div>
     <!-- 任务课节 -->
@@ -41,47 +41,47 @@
               <i class="el-icon-more" />
               <el-dropdown-menu slot="dropdown">
                 <el-dropdown-item class="dropdown-menu" :command="{ id: item.id, type: 'edit' }">
-                  <span>编辑</span><svg-icon icon-class="edit" />
+                  <span>{{ $t('Key123') }}</span><svg-icon icon-class="edit" />
                 </el-dropdown-item>
                 <el-dropdown-item class="dropdown-menu" :command="{ id: item.id, type: 'delete' }">
-                  <span>删除</span><svg-icon icon-class="delete" />
+                  <span>{{ $t('Key172') }}</span><svg-icon icon-class="delete" />
                 </el-dropdown-item>
               </el-dropdown-menu>
             </el-dropdown>
           </div>
         </template>
         <div v-else class="task-item-list-title">
-          新课节
+          {{ $t('Key268') }}
         </div>
         <el-button class="create-item selected" type="primary" @click="dialogVisible = true">
-          <svg-icon icon-class="create-white" /> 创建新课节
+          <svg-icon icon-class="create-white" /> {{ $t('Key269') }}
         </el-button>
       </div>
       <!-- 课节信息 -->
       <div class="task-item-container">
         <div class="item-info">
           <div class="title">
-            课节信息
+            {{ $t('Key352') }}
           </div>
           <div class="item-info-name">
-            <div>课节名称</div>
+            <div>{{ $t('Key270') }}</div>
             <el-input v-model="itemInfoBox.name" readonly />
           </div>
           <div class="item-info-date">
-            <div>日期</div>
+            <div>{{ $t('Key311') }}</div>
             <el-date-picker v-model="itemInfoBox.date" readonly type="daterange" range-separator="~" />
           </div>
         </div>
         <div class="item-task">
           <div class="title">
             <span class="number-tag">{{ taskLength }}</span>
-            <span>课节任务</span>
+            <span>{{ $t('Key272') }}</span>
           </div>
           <div class="item-task-pre task-container">
             <!-- 课前任务 -->
             <div class="item-task-pre-title">
               <span class="number-tag pre">{{ itemInfoBox.pre_task_list.length }}</span>
-              <span>课前任务</span>
+              <span>{{ $t('Key353') }}</span>
             </div>
             <div class="item-task-pre-list item-task-list">
               <el-card v-for="(item, i) in itemInfoBox.pre_task_list" :key="item.id">
@@ -102,13 +102,13 @@
                                 class="dropdown-menu"
                                 :command="{ id: item.id, type: 'edit', time_type: 0 }"
                               >
-                                <span>编辑</span><svg-icon icon-class="edit" />
+                                <span>{{ $t('Key123') }}</span><svg-icon icon-class="edit" />
                               </el-dropdown-item>
                               <el-dropdown-item
                                 class="dropdown-menu"
                                 :command="{ id: item.id, type: 'delete', time_type: 0 }"
                               >
-                                <span>删除</span><svg-icon icon-class="delete" />
+                                <span>{{ $t('Key172') }}</span><svg-icon icon-class="delete" />
                               </el-dropdown-item>
                             </el-dropdown-menu>
                           </el-dropdown>
@@ -118,11 +118,11 @@
 
                     <div class="task-info">
                       <div>
-                        <span class="label">要求</span>
+                        <span class="label">{{ $t('Key356') }}</span>
                         <div>{{ item.content }}</div>
                       </div>
                       <div>
-                        <span class="label">课件</span>
+                        <span class="label">{{ $t('Key309') }}</span>
                         <div>
                           <el-tag v-for="li in item.courseware_list" :key="li.courseware_id" color="#fff">
                             {{ li.courseware_name }}
@@ -130,7 +130,7 @@
                         </div>
                       </div>
                       <div>
-                        <span class="label">其他文件</span>
+                        <span class="label">{{ $t('Key357') }}</span>
                         <div>
                           <el-tag v-for="li in item.accessory_list" :key="li.file_id" color="#fff">
                             <a target="_blank" :href="li.file_url">
@@ -144,7 +144,7 @@
                 </el-collapse>
               </el-card>
               <el-button @click="newTask(0)">
-                <i class="el-icon-plus" /> 新建任务
+                <i class="el-icon-plus" /> {{ $t('Key273') }}
               </el-button>
             </div>
           </div>
@@ -152,7 +152,7 @@
           <div class="item-task-mid task-container">
             <div class="item-task-mid-title">
               <span class="number-tag mid">{{ itemInfoBox.mid_task_list.length }}</span>
-              <span>课中任务</span>
+              <span>{{ $t('Key354') }}</span>
             </div>
             <div class="item-task-mid-list item-task-list">
               <el-card v-for="(item, i) in itemInfoBox.mid_task_list" :key="item.id">
@@ -172,13 +172,13 @@
                                 class="dropdown-menu"
                                 :command="{ id: item.id, type: 'edit', time_type: 1 }"
                               >
-                                <span>编辑</span><svg-icon icon-class="edit" />
+                                <span>{{ $t('Key123') }}</span><svg-icon icon-class="edit" />
                               </el-dropdown-item>
                               <el-dropdown-item
                                 class="dropdown-menu"
                                 :command="{ id: item.id, type: 'delete', time_type: 1 }"
                               >
-                                <span>删除</span><svg-icon icon-class="delete" />
+                                <span>{{ $t('Key172') }}</span><svg-icon icon-class="delete" />
                               </el-dropdown-item>
                             </el-dropdown-menu>
                           </el-dropdown>
@@ -188,11 +188,11 @@
 
                     <div class="task-info">
                       <div>
-                        <span class="label">要求</span>
+                        <span class="label">{{ $t('Key356') }}</span>
                         <div>{{ item.content }}</div>
                       </div>
                       <div>
-                        <span class="label">课件</span>
+                        <span class="label">{{ $t('Key309') }}</span>
                         <div>
                           <el-tag v-for="li in item.courseware_list" :key="li.courseware_id" color="#fff">
                             {{ li.courseware_name }}
@@ -200,7 +200,7 @@
                         </div>
                       </div>
                       <div>
-                        <span class="label">其他文件</span>
+                        <span class="label">{{ $t('Key357') }}</span>
                         <div>
                           <el-tag v-for="li in item.accessory_list" :key="li.file_id" color="#fff">
                             <a target="_blank" :href="li.file_url">
@@ -214,7 +214,7 @@
                 </el-collapse>
               </el-card>
               <el-button @click="newTask(1)">
-                <i class="el-icon-plus" /> 新建任务
+                <i class="el-icon-plus" /> {{ $t('Key273') }}
               </el-button>
             </div>
           </div>
@@ -222,7 +222,7 @@
           <div class="item-task-after task-container">
             <div class="item-task-after-title">
               <span class="number-tag after">{{ itemInfoBox.after_task_list.length }}</span>
-              <span>课后任务</span>
+              <span>{{ $t('Key355') }}</span>
             </div>
             <div class="item-task-after-list item-task-list">
               <el-card v-for="(item, i) in itemInfoBox.after_task_list" :key="item.id">
@@ -243,13 +243,13 @@
                                 class="dropdown-menu"
                                 :command="{ id: item.id, type: 'edit', time_type: 2 }"
                               >
-                                <span>编辑</span><svg-icon icon-class="edit" />
+                                <span>{{ $t('Key123') }}</span><svg-icon icon-class="edit" />
                               </el-dropdown-item>
                               <el-dropdown-item
                                 class="dropdown-menu"
                                 :command="{ id: item.id, type: 'delete', time_type: 2 }"
                               >
-                                <span>删除</span><svg-icon icon-class="delete" />
+                                <span>{{ $t('Key172') }}</span><svg-icon icon-class="delete" />
                               </el-dropdown-item>
                             </el-dropdown-menu>
                           </el-dropdown>
@@ -259,11 +259,11 @@
 
                     <div class="task-info">
                       <div>
-                        <span class="label">要求</span>
+                        <span class="label">{{ $t('Key356') }}</span>
                         <div>{{ item.content }}</div>
                       </div>
                       <div>
-                        <span class="label">课件</span>
+                        <span class="label">{{ $t('Key309') }}</span>
                         <div>
                           <el-tag v-for="li in item.courseware_list" :key="li.courseware_id" color="#fff">
                             {{ li.courseware_name }}
@@ -271,7 +271,7 @@
                         </div>
                       </div>
                       <div>
-                        <span class="label">其他文件</span>
+                        <span class="label">{{ $t('Key357') }}</span>
                         <div>
                           <el-tag v-for="li in item.accessory_list" :key="li.file_id" color="#fff">
                             <a target="_blank" :href="li.file_url">
@@ -285,18 +285,18 @@
                 </el-collapse>
               </el-card>
               <el-button @click="newTask(2)">
-                <i class="el-icon-plus" /> 新建任务
+                <i class="el-icon-plus" /> {{ $t('Key273') }}
               </el-button>
             </div>
           </div>
         </div>
         <div class="learning-materials">
           <div class="title">
-            学习资料
+            {{ $t('Key274') }}
           </div>
           <div>
             <el-upload action="no" :http-request="upload" multiple :show-file-list="false" accept="*">
-              <el-button><svg-icon icon-class="upload" /> 上传文件</el-button>
+              <el-button><svg-icon icon-class="upload" /> {{ $t('Key152') }}</el-button>
             </el-upload>
           </div>
           <div class="tag-list">
@@ -389,9 +389,44 @@ export default {
   },
   created() {
     this.getCourseInfo();
+    this.updateWordPack({
+      word_key_list: [
+        'Key275',
+        'Key246',
+        'Key123',
+        'Key172',
+        'Key268',
+        'Key269',
+        'Key352',
+        'Key270',
+        'Key311',
+        'Key272',
+        'Key353',
+        'Key354',
+        'Key355',
+        'Key356',
+        'Key309',
+        'Key357',
+        'Key273',
+        'Key359',
+        'Key274',
+        'Key152',
+        'Key352',
+        'Key358',
+        'Key83',
+        'Key94',
+        'Key360',
+        'Key361',
+        'Key362',
+        'Key363',
+        'Key364',
+        'Key365',
+        'Key366'
+      ]
+    });
   },
   methods: {
-    getCourseInfo() {
+    getCourseInfo(isRefresh = false) {
       GetCourseInfo_ContainCSItem({ id: this.id }).then(({ name, picture_url, begin_date, end_date, cs_item_list }) => {
         this.name = name;
         this.picture_url = picture_url;
@@ -399,6 +434,7 @@ export default {
         this.end_date = end_date;
         this.cs_item_list = cs_item_list;
         if (cs_item_list.length <= 0) return;
+        if (isRefresh) return this.getCSItemInfoBox();
         let curItemID = 'curItemID' in this.$route.query ? this.$route.query.curItemID : '';
         this.curItemID = curItemID || cs_item_list[cs_item_list.length - 1].id;
       });
@@ -413,13 +449,13 @@ export default {
     // 课节处理
     handleCSItem({ id, type }) {
       if (type === 'delete') {
-        this.$confirm('您确定要删除该课节吗?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
+        this.$confirm(this.$i18n.t('Key360'), this.$i18n.t('Key361'), {
+          confirmButtonText: this.$i18n.t('Key94'),
+          cancelButtonText: this.$i18n.t('Key83'),
           type: 'warning'
         }).then(() => {
           DeleteCSItem({ id }).then(() => {
-            this.$message.success('删除课节成功!');
+            this.$message.success(this.$i18n.t('Key362'));
             this.getCourseInfo();
           });
         });
@@ -437,8 +473,9 @@ export default {
       this.type = 'add';
       if (type === 'add') {
         this.getCourseInfo();
-      } else {
-        this.getCSItemInfoBox();
+      }
+      if (type === 'edit') {
+        this.getCourseInfo(true);
       }
     },
 
@@ -474,13 +511,13 @@ export default {
     },
 
     deleteMaterialFile(i, file_id) {
-      this.$confirm('您确定要删除这个文件吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
+      this.$confirm(this.$i18n.t('Key363'), this.$i18n.t('Key361'), {
+        confirmButtonText: this.$i18n.t('Key94'),
+        cancelButtonText: this.$i18n.t('Key83'),
         type: 'warning'
       }).then(() => {
         DeleteLearningMaterialFromCSItem({ cs_item_id: this.curItemID, file_id }).then(() => {
-          this.$message.success('删除文件成功');
+          this.$message.success(this.$i18n.t('Key364'));
           this.itemInfoBox.learning_material_list.splice(i, 1);
         });
       });
@@ -489,7 +526,7 @@ export default {
     // 任务处理
     newTask(time_type) {
       if (!this.curItemID) {
-        this.$message.warning('请先创建新课节');
+        this.$message.warning(this.$i18n.t('Key365'));
         return;
       }
       this.$router.push({
@@ -507,13 +544,13 @@ export default {
         });
       }
       if (type === 'delete') {
-        this.$confirm('您确定要删除该任务吗?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
+        this.$confirm('您确定要删除该任务吗?', this.$i18n.t('Key361'), {
+          confirmButtonText: this.$i18n.t('Key94'),
+          cancelButtonText: this.$i18n.t('Key83'),
           type: 'warning'
         }).then(() => {
           DeleteTask({ id }).then(() => {
-            this.$message.success('删除任务成功');
+            this.$message.success(this.$i18n.t('Key366'));
             this.getCSItemInfoBox();
           });
         });

+ 73 - 36
src/views/teacher/create_course/step_table/NewTask.vue

@@ -3,20 +3,20 @@
     <div class="go-back">
       <el-button @click="goBack">
         <div class="go-back-button">
-          <svg-icon icon-class="go-back" /><span>返回</span>
+          <svg-icon icon-class="go-back" /><span>{{ $t('Key367') }}</span>
         </div>
       </el-button>
     </div>
     <div class="new-task-container">
       <div class="title">
-        新任务
+        {{ $t('Key368') }}
       </div>
       <el-form ref="newTaskForm" :model="form" :rules="rules" label-width="150px" label-position="left">
-        <el-form-item label="任务名称" prop="name">
+        <el-form-item :label="$t('Key369')" prop="name">
           <el-input v-model="form.name" />
         </el-form-item>
 
-        <el-form-item v-if="!is_template" label="授课教师" prop="teacher_id">
+        <el-form-item v-if="!is_template" :label="$t('Key343')" prop="teacher_id">
           <el-select v-model="form.teacher_id">
             <el-option
               v-for="item in teacher_list"
@@ -26,7 +26,7 @@
             />
           </el-select>
         </el-form-item>
-        <el-form-item v-if="!is_template" label="选择学生">
+        <el-form-item v-if="!is_template" :label="$t('Key370')">
           <div class="tag-list">
             <el-popover trigger="click" placement="bottom-start">
               <div class="student-list create-task">
@@ -61,7 +61,7 @@
           </div>
         </el-form-item>
 
-        <el-form-item label="时间">
+        <el-form-item :label="$t('Key271')">
           <el-date-picker v-model="form.begin_date" type="date" value-format="yyyy-MM-dd" />&nbsp;
           <el-select v-model="form.begin_date_hour" class="date-hour">
             <el-option v-for="item in hourArr" :key="item" :label="item" :value="item" />
@@ -81,11 +81,11 @@
           </el-select>
         </el-form-item>
 
-        <el-form-item label="任务说明">
+        <el-form-item :label="$t('Key371')">
           <el-input v-model="form.content" type="textarea" rows="5" resize="none" />
         </el-form-item>
 
-        <el-form-item label="任务模板">
+        <el-form-item :label="$t('Key372')">
           <el-select v-model="form.teaching_type">
             <el-option v-for="item in type_list" :key="item.type" :label="item.name" :value="item.type" />
           </el-select>
@@ -95,9 +95,9 @@
           <!-- 任务模式 直播 -->
           <div v-if="form.teaching_type === 10" class="task-template">
             <el-form :model="liveForm" label-width="100px" label-position="left">
-              <el-form-item label="课件任务">
+              <el-form-item :label="$t('Key312')">
                 <el-button @click="dialogVisible = true">
-                  <i class="el-icon-plus" /> 添加课件
+                  <i class="el-icon-plus" /> {{ $t('Key373') }}
                 </el-button>
                 <div>
                   <el-tag
@@ -113,9 +113,9 @@
                 </div>
               </el-form-item>
 
-              <el-form-item label="上传文档">
+              <el-form-item :label="$t('Key374')">
                 <el-upload action="no" :http-request="upload" multiple :show-file-list="false" accept="*">
-                  <el-button><svg-icon icon-class="upload" /> 上传文档</el-button>
+                  <el-button><svg-icon icon-class="upload" /> {{ $t('Key374') }}</el-button>
                 </el-upload>
                 <el-tag
                   v-for="(item, i) in liveForm.file_info_list"
@@ -129,21 +129,21 @@
                 </el-tag>
               </el-form-item>
 
-              <el-form-item label="可见性">
+              <el-form-item :label="$t('Key375')">
                 <el-radio v-model="liveForm.courseware_visible_mode" :label="21">
-                  手动推送
+                  {{ $t('Key377') }}
                 </el-radio>
                 <el-radio v-model="liveForm.courseware_visible_mode" :label="22">
-                  一直可见
+                  {{ $t('Key376') }}
                 </el-radio>
               </el-form-item>
 
-              <el-form-item label="直播录制">
+              <el-form-item :label="$t('Key378')">
                 <el-radio v-model="liveForm.zhibo_record_mode" :label="31">
-                  自动开启
+                  {{ $t('Key380') }}
                 </el-radio>
                 <el-radio v-model="liveForm.zhibo_record_mode" :label="32">
-                  手动开启
+                  {{ $t('Key379') }}
                 </el-radio>
               </el-form-item>
             </el-form>
@@ -151,9 +151,9 @@
           <!-- 任务模式 课件 -->
           <div v-else-if="form.teaching_type === 11" class="task-template">
             <el-form :model="courseForm" label-width="100px" label-position="left">
-              <el-form-item label="课件任务">
+              <el-form-item :label="$t('Key312')">
                 <el-button @click="dialogVisible = true">
-                  <i class="el-icon-plus" /> 添加课件
+                  <i class="el-icon-plus" /> {{ $t('Key373') }}
                 </el-button>
                 <div>
                   <el-tag
@@ -175,12 +175,12 @@
                 </el-radio>
               </el-form-item>
 
-              <el-form-item label="留言功能">
+              <el-form-item :label="$t('Key381')">
                 <el-radio v-model="courseForm.is_enable_message" :label="true">
-                  开启
+                  {{ $t("Key245") }}
                 </el-radio>
                 <el-radio v-model="courseForm.is_enable_message" :label="false">
-                  关闭
+                  {{ $t("Key246") }}
                 </el-radio>
               </el-form-item>
             </el-form>
@@ -188,9 +188,9 @@
           <!-- 任务模式 基础 -->
           <div v-else-if="form.teaching_type === 12" class="task-template">
             <el-form :model="basicForm" label-width="100px" label-position="left">
-              <el-form-item label="上传文档">
+              <el-form-item :label="$t('Key374')">
                 <el-upload action="no" :http-request="upload" multiple :show-file-list="false" accept="*">
-                  <el-button><svg-icon icon-class="upload" /> 上传文档</el-button>
+                  <el-button><svg-icon icon-class="upload" /> {{ $t('Key374') }}</el-button>
                 </el-upload>
                 <el-tag
                   v-for="(item, i) in basicForm.file_info_list"
@@ -204,21 +204,21 @@
                 </el-tag>
               </el-form-item>
 
-              <el-form-item label="提交作业">
+              <el-form-item :label="$t('Key330')">
                 <el-radio v-model="basicForm.is_enable_homework" :label="true">
-                  开启
+                  {{ $t("Key245") }}
                 </el-radio>
                 <el-radio v-model="basicForm.is_enable_homework" :label="false">
-                  关闭
+                  {{ $t("Key246") }}
                 </el-radio>
               </el-form-item>
 
-              <el-form-item label="留言功能">
+              <el-form-item :label="$t('Key381')">
                 <el-radio v-model="basicForm.is_enable_message" :label="true">
-                  开启
+                  {{ $t("Key245") }}
                 </el-radio>
                 <el-radio v-model="basicForm.is_enable_message" :label="false">
-                  关闭
+                  {{ $t("Key246") }}
                 </el-radio>
               </el-form-item>
             </el-form>
@@ -227,7 +227,7 @@
 
         <el-form-item>
           <el-button class="done" type="primary" @click="addTaskToCSItem">
-            确定
+            {{ $t('Key94') }}
           </el-button>
         </el-form-item>
       </el-form>
@@ -254,8 +254,15 @@ export default {
   components: { SelectCourse },
   data() {
     const validateTeacher = (rule, value, callback) => {
-      if (this.form.teaching_type === 10 && !this.form.teacher_id && !this.is_template) {
-        callback(new Error('授课教师不能为空'));
+      if (this.form.teaching_type === 10 && !value && !this.is_template) {
+        callback(new Error(this.$i18n.t('Key382')));
+      } else {
+        callback();
+      }
+    };
+    const validateNmae = (rule, value, callback) => {
+      if (value.length <= 0) {
+        callback(new Error(this.$i18n.t('Key384')));
       } else {
         callback();
       }
@@ -293,7 +300,7 @@ export default {
       hourArr: [],
       minuteArr: [],
       rules: {
-        name: { required: true, message: '任务名称不能为空', trigger: 'blur' },
+        name: { trigger: 'blur', validator: validateNmae },
         teacher_id: { trigger: 'blur', validator: validateTeacher }
       },
       liveForm: {
@@ -326,6 +333,36 @@ export default {
     if (this.task_id) {
       this.getTaskInfo();
     }
+
+    this.updateWordPack({
+      word_key_list: [
+        'Key367',
+        'Key368',
+        'Key369',
+        'Key343',
+        'Key370',
+        'Key271',
+        'Key371',
+        'Key372',
+        'Key312',
+        'Key373',
+        'Key374',
+        'Key375',
+        'Key376',
+        'Key377',
+        'Key378',
+        'Key379',
+        'Key245',
+        'Key246',
+        'Key380',
+        'Key381',
+        'Key330',
+        'Key94',
+        'Key382',
+        'Key384',
+        'Key385'
+      ]
+    });
   },
   methods: {
     init() {
@@ -452,7 +489,7 @@ export default {
 
     selectCourse(course_id) {
       if (course_id.length === 0) {
-        this.$message.warning('请选择课件');
+        this.$message.warning(this.$t('Key385'));
         return;
       }
       let type = this.form.teaching_type;

+ 12 - 8
src/views/teacher/create_course/step_table/SelectBook.vue

@@ -3,7 +3,7 @@
     <step-bar :step-number="1" />
     <div class="select-book-container">
       <div class="select-book-container-title">
-        配套教材
+        {{ $t('Key49') }}
       </div>
       <div class="select-book-container-table">
         <div class="search">
@@ -11,12 +11,12 @@
             <el-input
               v-model="search"
               prefix-icon="el-icon-search"
-              placeholder="输入关键字搜索"
+              :placeholder="$t('Key267')"
               class="keyword"
               @keyup.enter.native="queryBookList"
             >
               <el-button slot="append" @click="queryBookList">
-                搜索
+                {{ $t('Key131') }}
               </el-button>
             </el-input>
             <!-- <el-button class="buy">去购买</el-button><span class="tip">只能添加已购买的资源</span> -->
@@ -51,10 +51,10 @@
             />
             <div>
               <el-button class="prev-step" @click="prevCourseInfo">
-                <i class="el-icon-back" />课程信息
+                <i class="el-icon-back" />{{ $t('Key264') }}
               </el-button>
               <el-button type="primary" class="next-step" @click="nextStep">
-                下一步<i class="el-icon-right" />
+                {{ $t('Key262') }}<i class="el-icon-right" />
               </el-button>
             </div>
           </div>
@@ -65,7 +65,7 @@
 </template>
 
 <script>
-import StepBar from '@/components/StepBar';
+import StepBar from '@/components/StepBar.vue';
 import { PageQueryBookList_SelectBookForCourse } from '@/api/list';
 import { AddBookToCourse, RemoveBookFromCourse } from '@/api/course';
 
@@ -87,6 +87,10 @@ export default {
   },
   created() {
     this.queryBookList();
+
+    this.updateWordPack({
+      word_key_list: ['Key49', 'Key267', 'Key131', 'Key264', 'Key262', 'Key350', 'Key351']
+    });
   },
   methods: {
     queryBookList() {
@@ -117,12 +121,12 @@ export default {
 
       if (isSelected) {
         RemoveBookFromCourse(data).then(() => {
-          this.$message.success('移除教材成功');
+          this.$message.success(this.$i18n.t('Key350'));
           classList.remove('selected');
         });
       } else {
         AddBookToCourse(data).then(() => {
-          this.$message.success('为课程添加教材成功');
+          this.$message.success(this.$i18n.t('Key351'));
           classList.add('selected');
         });
       }

Some files were not shown because too many files changed in this diff