Browse Source

语言列表通过接口获取

dsy 3 days ago
parent
commit
82805b34fa

+ 8 - 0
src/api/book.js

@@ -215,3 +215,11 @@ export function MangerSaveBookMindMap(data) {
 export function PageQueryBookResourceList(data) {
   return http.post(`${process.env.VUE_APP_EepServer}?MethodName=page_query-PageQueryBookResourceList`, data);
 }
+
+/**
+ * @description 获取教材语言类型列表
+ * @param {Object} data
+ */
+export function GetLanguageTypeList(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=book_manager-GetLanguageTypeList`, data);
+}

+ 33 - 28
src/views/book/components/MultilingualFill.vue

@@ -11,12 +11,12 @@
         <span class="title">多语言</span>
         <ul class="lang-list">
           <li
-            v-for="{ code } in selectedLangList"
-            :key="code"
-            :class="['lang-item', { active: curLang === code }]"
-            @click="curLang = code"
+            v-for="{ type } in selectedLangList"
+            :key="type"
+            :class="['lang-item', { active: curLang === type }]"
+            @click="curLang = type"
           >
-            {{ langList.find((item) => item.code === code).name }}
+            {{ langList.find((item) => item.type === type).name }}
           </li>
           <li class="lang-item" @click="showAddLang">
             <i class="el-icon-plus"></i>
@@ -44,8 +44,8 @@
           <div v-show="isShowOriginal" class="original-text" v-html="sanitizeHTML(text)"></div>
           <el-input
             v-for="lang in selectedLangList"
-            v-show="curLang === lang.code"
-            :key="lang.code"
+            v-show="curLang === lang.type"
+            :key="lang.type"
             v-model="lang.translation"
             type="textarea"
             :rows="27"
@@ -63,7 +63,6 @@
 <script>
 import UpdateLang from './UpdateLang.vue';
 
-import { langList } from '@/views/book/courseware/data/common';
 import { sanitizeHTML } from '@/utils/common';
 
 export default {
@@ -71,6 +70,7 @@ export default {
   components: {
     UpdateLang,
   },
+  inject: ['getLangList'],
   props: {
     visible: {
       type: Boolean,
@@ -87,20 +87,11 @@ export default {
   },
   data() {
     return {
-      langList,
+      langList: [],
       sanitizeHTML,
-      selectedLangList: [
-        { code: 'en', translation: '' },
-        { code: 'fr', translation: '' },
-        { code: 'de', translation: '' },
-        { code: 'es', translation: '' },
-        { code: 'it', translation: '' },
-        { code: 'pt', translation: '' },
-        { code: 'ko', translation: '' },
-        { code: 'ja', translation: '' },
-      ],
-      noSelectedLangList: ['ru', 'ar', 'tr', 'nl', 'pl', 'sv', 'el'],
-      curLang: 'en',
+      selectedLangList: [],
+      noSelectedLangList: [],
+      curLang: 'EN',
       isShowOriginal: true, // 是否显示原文
       langVisible: false,
     };
@@ -109,8 +100,8 @@ export default {
     translations: {
       handler(newVal) {
         if (!newVal || !Array.isArray(newVal) || newVal.length === 0) return;
-        this.selectedLangList = newVal.map(({ code, translation }) => ({
-          code,
+        this.selectedLangList = newVal.map(({ type, translation }) => ({
+          type,
           translation,
         }));
       },
@@ -120,13 +111,16 @@ export default {
       handler(newVal) {
         if (!newVal && this.selectedLangList.length > 0) {
           this.selectedLangList = this.selectedLangList.map((item) => ({
-            code: item.code,
+            type: item.type,
             translation: '',
           }));
         }
       },
     },
   },
+  created() {
+    this.init();
+  },
   methods: {
     closeDialog() {
       this.$emit('update:visible', false);
@@ -134,17 +128,28 @@ export default {
     showAddLang() {
       this.langVisible = true;
     },
+    init() {
+      this.langList = this.getLangList();
+      if (this.translations.length === 0) {
+        this.selectedLangList = this.langList
+          .filter((item) => item.type !== 'ZH')
+          .map((item) => ({ type: item.type, translation: '' }));
+      }
+      if (this.selectedLangList.length > 0) {
+        this.curLang = this.selectedLangList[0]?.type || 'EN';
+      }
+    },
     /**
      * 处理语言更新
      * @param {Array} langs
      */
     handleUpdateLangs(langs) {
-      const newLangs = langs.filter((item) => !this.selectedLangList.map((i) => i.code).includes(item));
-      const removedLangs = this.selectedLangList.map((i) => i.code).filter((item) => !langs.includes(item));
+      const newLangs = langs.filter((item) => !this.selectedLangList.map((i) => i.type).includes(item));
+      const removedLangs = this.selectedLangList.map((i) => i.type).filter((item) => !langs.includes(item));
 
       this.selectedLangList = [
-        ...this.selectedLangList.filter((item) => !removedLangs.includes(item.code)),
-        ...newLangs.map((item) => ({ code: item, translation: '' })),
+        ...this.selectedLangList.filter((item) => !removedLangs.includes(item.type)),
+        ...newLangs.map((item) => ({ type: item, translation: '' })),
       ];
     },
     submitTranslation() {

+ 12 - 5
src/views/book/components/UpdateLang.vue

@@ -10,7 +10,7 @@
     <el-transfer
       v-model="langs"
       :titles="['可选', '已选择']"
-      :props="{ key: 'code', label: 'name' }"
+      :props="{ key: 'type', label: 'name' }"
       :data="langList"
     />
 
@@ -22,10 +22,9 @@
 </template>
 
 <script>
-import { langList } from '@/views/book/courseware/data/common';
-
 export default {
   name: 'UpdateLang',
+  inject: ['getLangList'],
   props: {
     visible: {
       type: Boolean,
@@ -38,7 +37,7 @@ export default {
   },
   data() {
     return {
-      langList: langList.map((item) => ({ ...item, disabled: false })),
+      langList: [],
       langs: [],
     };
   },
@@ -47,12 +46,20 @@ export default {
       handler(val) {
         if (!val || !Array.isArray(val)) return;
 
-        this.langs = val.map((item) => item.code);
+        this.langs = val.map((item) => item.type);
       },
       immediate: true,
     },
   },
+  created() {
+    this.init();
+  },
   methods: {
+    init() {
+      this.langList = this.getLangList()
+        .filter((item) => item.type !== 'ZH')
+        .map((item) => ({ ...item, disabled: false }));
+    },
     dialogLangClose() {
       this.$emit('update:visible', false);
     },

+ 0 - 18
src/views/book/courseware/data/common.js

@@ -184,21 +184,3 @@ export const reversedComputeOptionMethods = {
   [serialNumberTypeList[2].value]: (i) => i.charCodeAt(0) - 97 + 1, // 小写
   [serialNumberTypeList[3].value]: (i) => i.charCodeAt(0) - 65 + 1,
 };
-
-export const langList = [
-  { name: '英语', code: 'en' },
-  { name: '法语', code: 'fr' },
-  { name: '德语', code: 'de' },
-  { name: '意大利语', code: 'it' },
-  { name: '西班牙语', code: 'es' },
-  { name: '葡萄牙语', code: 'pt' },
-  { name: '韩语', code: 'ko' },
-  { name: '日语', code: 'ja' },
-  { name: '俄语', code: 'ru' },
-  { name: '阿拉伯语', code: 'ar' },
-  { name: '土耳其语', code: 'tr' },
-  { name: '荷兰语', code: 'nl' },
-  { name: '波兰语', code: 'pl' },
-  { name: '瑞典语', code: 'sv' },
-  { name: '希腊语', code: 'el' },
-];

+ 11 - 2
src/views/personal_workbench/edit_task/edit/index.vue

@@ -44,9 +44,9 @@
 import CreatePage from '@/views/book/courseware/create/index.vue';
 import MenuPage from '@/views/personal_workbench/common/menu.vue';
 import * as OpenCC from 'opencc-js';
-import { langList } from '@/views/book/courseware/data/common';
 
 import { GetBookCoursewareInfo, GetMyBookCoursewareTaskList } from '@/api/project';
+import { GetLanguageTypeList } from '@/api/book';
 
 export default {
   name: 'EditTaskPage',
@@ -58,6 +58,7 @@ export default {
     return {
       getLang: () => this.lang,
       getChinese: () => this.chinese,
+      getLangList: () => this.langList,
       convertText: this.convertText,
     };
   },
@@ -69,7 +70,7 @@ export default {
       courseware_list: [],
       isEdit: true, // 是否编辑状态
       opencc: OpenCC.Converter({ from: 'cn', to: 'tw' }),
-      langList: [{ code: 'zh', name: '中文' }, ...langList],
+      langList: [],
       lang: 'zh',
       chinese: 'zh-Hans',
     };
@@ -96,6 +97,7 @@ export default {
     getBookCoursewareInfo() {
       GetBookCoursewareInfo({ id: this.id }).then(({ courseware_info }) => {
         this.courseware_info = courseware_info;
+        this.getLangList();
       });
     },
     goBackBookList() {
@@ -118,6 +120,13 @@ export default {
         query: { project_id: this.project_id },
       });
     },
+    getLangList() {
+      GetLanguageTypeList({ book_id: this.courseware_info.book_id, is_contain_zh: 'true' }).then(
+        ({ language_type_list }) => {
+          this.langList = language_type_list;
+        },
+      );
+    },
     /**
      * 得到我的教材课件任务列表
      */