natasha 1 рік тому
батько
коміт
0f6e6b77cf

BIN
src/assets/voice-play-gray.png


BIN
src/assets/voice-play.png


Різницю між файлами не показано, бо вона завелика
+ 0 - 1
src/icons/svg/voice.svg


+ 2 - 0
src/views/content_manage/newspaper_manage/CheckArticle.vue

@@ -621,6 +621,8 @@ export default {
     list-style: none;
     padding: 0;
     margin: 16px 0;
+    height: 100%;
+    overflow: auto;
     li{
         display: flex;
         align-items: center;

+ 2 - 1
src/views/content_manage/newspaper_manage/CreateArticle.vue

@@ -597,7 +597,8 @@ export default {
                             type: items.word_explain.vl_level?items.word_explain.vl_level:'',
                             typeCn: items.word_explain.vl_level_name?items.word_explain.vl_level_name:'',
                             rate: items.word_explain.star?items.word_explain.star:null,
-                            originalObj: items
+                            originalObj: items,
+                            hasVoice: items.word_explain.ph_mp3_id||items.word_explain.ph_file_url?true:false
                         }
                         this.wordLit.push(obj)
                     })

+ 3 - 2
src/views/content_manage/newspaper_manage/NewWords.vue

@@ -246,7 +246,7 @@ export default {
     changeLevel(val){
         this.vlInfo.forEach(item=>{
             if(item.id===val){
-                this.vl_level_name = item.cn
+                this.data.vl_level_name = item.cn
             }
         })
     },
@@ -435,7 +435,8 @@ export default {
         let arr = JSON.parse(JSON.stringify(list))
         arr.forEach(item=>{
             item.show = false
-            item.sel_token_idxes = []            
+            item.sel_token_idxes = []
+            item.sent_id = item.id         
         })
         this.data.bind_sents = this.data.bind_sents.concat(arr)
         this.selectSentFlag = false

+ 50 - 4
src/views/content_manage/newspaper_manage/components/NewWordList.vue

@@ -2,7 +2,8 @@
     <div v-if="wordList.length>0">
         <ul>
             <li v-for="(itemW,indexW) in wordList" :key="indexW" :class="['li-'+colorObj.type]">
-                <svg-icon icon-class="voice" className="icon-voice"></svg-icon>
+                <svg-icon v-if="itemW.hasVoice&&!voiceSrc||itemW.hasVoice&&activeIndex!==indexW" icon-class="voice" className="icon-voice" @click="handlePlayVoice(itemW,indexW)"></svg-icon>
+                <img v-if="itemW.hasVoice&&voiceSrc&&activeIndex===indexW" :src="voiceSrc" class="icon-voice" />
                 <div class="word-info">
                     <div class="word-info-top">
                         <b class="word" @click="showWord(itemW)" :style="{color:colorObj.newWordColor}">{{itemW.word}}</b>
@@ -51,14 +52,19 @@ export default {
   data() {
     //这里存放数据
     return {
-        wordList: []
+        wordList: [],
+        audio: new Audio(),
+        voiceSrc: "",
+        voicePauseSrc: '',
+        voicePlaySrc: require("../../../../assets/voice-play-gray.png"),
+        activeIndex: null
     }
   },
   //计算属性 类似于data概念
   computed: {},
   //监控data中数据变化
   watch: {
-     list:{
+    list:{
       handler(val, oldVal) {
         const _this = this;
         if (val) {
@@ -71,6 +77,34 @@ export default {
   },
   //方法集合
   methods: {
+    async handlePlayVoice(item,index) {
+      let _this = this;
+      let url = ''
+      if(item.originalObj.word_explain.ph_mp3_id){
+        await getLogin('/FileServer/GetFileInfo', {file_id:item.originalObj.word_explain.ph_mp3_id})
+        .then((res) => {
+            if(res.status===1){
+                url = res.file_url
+            }
+        })
+      }else if(item.originalObj.word_explain.ph_file_url){
+        url = item.originalObj.word_explain.ph_file_url
+      }
+      if (!url) {
+        return;
+      }
+    //   if (!this.audio.paused) {
+    //     this.audio.pause();
+    //   } else 
+      {
+        _this.audio.pause();
+        _this.audio.load();
+        _this.audio.src = url;
+        _this.audio.loop = false;
+        _this.audio.play();
+        _this.activeIndex = index
+      }
+    },
     // 删除
     handleDelete(item,index){
         this.$confirm('确定删除吗?', '提示', {
@@ -103,7 +137,19 @@ export default {
   },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
-
+    let _this = this;
+    _this.voiceSrc = _this.voicePauseSrc;
+    _this.audio.addEventListener("play", function () {
+    //   console.log("播放");
+      _this.voiceSrc = _this.voicePlaySrc;
+    });
+    _this.audio.addEventListener("pause", function () {
+      _this.voiceSrc = _this.voicePauseSrc;
+    });
+    _this.audio.addEventListener("ended", function () {
+    //   console.log("停止");
+      _this.voiceSrc = _this.voicePauseSrc;
+    });
   },
   //生命周期-创建之前
   beforeCreated() { },

Деякі файли не було показано, через те що забагато файлів було змінено