浏览代码

输入选项组件

natasha 3 年之前
父节点
当前提交
235ea377be

+ 5 - 0
src/components/Adult/Preview.vue

@@ -64,6 +64,9 @@
                 <template v-if="itemss.data.type == 'recordHZ_inputPY_chs'">
                     <TextInputRecord :curQue="itemss.data" />
                 </template>
+                <template v-if="itemss.data.type == 'inputItem_chs'">
+                    <SentenceInput :curQue="itemss.data" />
+                </template>
               </template>
             </div>
           </div>
@@ -83,6 +86,7 @@ import Notes from "./preview/Notes.vue"; // 注释
 import Ligature from "./preview/Ligature.vue";
 import InputHasRecord from "./preview/InputHasRecord.vue" // 输入加录音
 import TextInputRecord from "./preview/TextInputRecord.vue" // 文本+输入+录音
+import SentenceInput from "./preview/SentenceInput.vue" // 输入选项
 export default {
   name: "preview",
   components: {
@@ -95,6 +99,7 @@ export default {
     Ligature,
     InputHasRecord,
     TextInputRecord,
+    SentenceInput,
   },
   props: ["context", "fatherName"],
   data() {

+ 218 - 0
src/components/Adult/preview/SentenceInput.vue

@@ -0,0 +1,218 @@
+<!--  -->
+<template>
+  <div class="Big-Book-prev-Textdes" v-if="curQue">
+    <h2 v-if="curQue.title">{{curQue.title}}</h2>
+    <ul>
+      <li v-for="(items, indexs) in curQue.option" :key="indexs">
+          <p :class="[oldsrc==items.mp3_list[0].url?palyClass:'']" @click="handlePlayVoice(items.mp3_list[0].url)" v-if="items.mp3_list&&items.mp3_list.length>0">
+          </p>
+          <b v-if="items.number">{{ items.number }}.</b>
+          <span class="item-con">{{items.con}}</span>
+          <!-- <template v-if="curQue.ChildType=='sentence_answer'"> -->
+            <input
+                    @input="handleInput"
+                    :class="['item-input']"
+                    v-model="curQue.Bookanswer[indexs]"
+                    placeholder="输入"
+                >
+          <!-- </template> -->
+          <template v-if="curQue.ChildType=='sentence_judge'">
+            <div class="judge-box">
+                <a :class="['right-btn',curQue.Bookanswer[indexs]=='right'?'active':'']" @click="handleSelectJudge('right',indexs)"></a>
+                <a :class="['error-btn',curQue.Bookanswer[indexs]=='error'?'active':'']" @click="handleSelectJudge('error',indexs)"></a>
+            </div>
+          </template>
+          <template v-if="curQue.ChildType=='sentence_Record'">
+              <Soundrecord @handleWav="handleWav" type="mini" class="luyin-box"/>
+          </template>
+      </li>
+    </ul>
+  </div>
+</template>
+
+<script>
+import Soundrecord from "../preview/Soundrecord.vue"; // 录音模板
+export default {
+  components: {Soundrecord},
+  props: ["curQue"],
+  data() {
+    return {
+        audio: new Audio(),
+        oldsrc: '', // 存储播放音频的src 用来比对是否点击的是同一个音频
+        palyClass: '',
+        judge: '',
+    };
+  },
+  computed: {},
+  watch: {},
+  //方法集合
+  methods: {
+        // input 输入时
+        handleInput (e) {
+            e.target.value = e.target.value ? e.target.value.trim() : '';
+        },
+        handlePlayVoice(url) {
+            let _this = this;
+            if (!url) {
+                return;
+            }
+            if (!this.audio.paused && this.oldsrc == url) {
+                this.audio.pause();
+            }else if(this.audio.paused && this.oldsrc == url){
+                this.audio.play();
+            } else {
+                _this.audio.pause();
+                _this.audio.load();
+                _this.audio.src = url;
+                _this.oldsrc = url
+                _this.audio.loop = false;
+                _this.audio.play();
+            }
+        },
+        // 处理数据
+        handleData(){
+            if(!this.curQue.Bookanswer){
+                let curCorrect = [];
+                this.curQue.option.forEach(item => {
+                    curCorrect.push('')
+                });
+                this.$set(this.curQue, "Bookanswer", curCorrect);
+            }
+        },
+        // 判断题选择
+        handleSelectJudge(obj,index){
+            this.$set(this.curQue.Bookanswer, index, obj);
+        },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+      this.handleData()
+  },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    let _this = this;
+    _this.audio.addEventListener("play", function () {
+        _this.palyClass = 'active'
+    });
+    _this.audio.addEventListener("pause", function () {
+        _this.palyClass = ''
+    });
+    _this.audio.addEventListener("ended", function () {
+        _this.palyClass = ''
+    });
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='scss' scoped>
+//@import url(); 引入公共css类
+.Big-Book-prev-Textdes{
+    width: 100%;
+    h2{
+        font-weight: normal;
+        font-size: 16px;
+        line-height: 150%;
+        color: #000000;
+        margin: 0 2px 8px 2px;
+    }
+    ul{
+        display: flex;
+        flex-flow: wrap;
+        justify-content: start;
+        list-style: none;
+        li{
+            width: 100%;
+            background: #FFFFFF;
+            border: 1px solid rgba(0, 0, 0, 0.1);
+            box-sizing: border-box;
+            border-radius: 8px;
+            display: flex;
+            align-items: flex-start;
+            padding: 8px 12px;
+            margin-bottom: 8px;
+            >b{
+               width: 24px;
+               line-height: 24px; 
+               font-size: 16px;
+               text-align: right;
+               margin-right: 8px;
+               font-weight: 400;
+               color: #000000;
+            //    margin-top: 4px;
+               font-family: 'FZJCGFKTK';
+            }
+            >p{
+                width: 24px;
+                height: 24px;
+                cursor: pointer;
+                background: url('../../../assets/newImage/common/icon-voice.png') left center no-repeat;
+                background-size: 24px;
+                margin: 0px 8px 0 0;
+                &.active{
+                    background: url('../../../assets/newImage/common/icon-voice-play-zise.png') left center no-repeat;
+                    background-size: 24px;
+                }
+            }
+            .item-con{
+                flex: 1;
+                font-size: 16px;
+                line-height: 150%;
+                color: #000000;
+                margin-right: 8px;
+                word-break: break-word;
+                // margin-top: 4px;
+                font-family: 'FZJCGFKTK';
+            }
+            input{
+                width: 68px;
+                border: 1px solid rgba(0, 0, 0, 0.15);
+                box-sizing: border-box;
+                border-radius: 4px;
+                outline: none;
+                height: 32px;
+                padding: 4px 8px;
+                color: #000000;
+                text-align: center;
+                font-size: 16px;
+                line-height: 150%;
+            }
+            .judge-box{
+                display: flex;
+                justify-content: center;
+                a{
+                    width: 32px;
+                    height: 32px;
+                    background: #fff url('../../../assets/newImage/common/right-btn.png') center no-repeat;
+                    background-size: 24px;
+                    border-radius: 8px;
+                    border: 1px solid rgba(0, 0, 0, 0.1);
+                    &:hover,&.active{
+                        background-color: #E5FFF0;
+                        border-color: #00C850;
+                    }
+                }
+                a.error-btn{
+                    background: #fff url('../../../assets/newImage/common/error-btn.png') center no-repeat;
+                    background-size: 24px;
+                    margin-left: 4px;
+                    &:hover,&.active{
+                        background-color: #FFE5E5;
+                        border-color: #DE4444;
+                    }
+                }
+            }
+            .luyin-box{
+                border: 1px solid rgba(0, 0, 0, 0.1);
+                border-radius: 8px;
+                width: 68px;
+            }
+        }
+    }
+}
+</style>

+ 9 - 6
src/components/Adult/preview/TextInputRecord.vue

@@ -12,8 +12,8 @@
                 v-model="curQue.Bookanswer[indexs]"
                 placeholder="输入"
             >
-          <template v-if="items.isRecord">
-              <Soundrecord @handleWav="handleWav" type="mini" class="luyin-box"/>
+          <template v-if="items.IsRecord">
+              <Soundrecord @handleWav="handleWav" type="promax" class="luyin-box"/>
           </template>
       </li>
     </ul>
@@ -95,13 +95,14 @@ export default {
             padding: 8px 8px 8px 12px;
             margin-bottom: 8px;
             >b{
-               width: 34px;
+               width: 24px;
                line-height: 24px; 
                font-size: 16px;
                text-align: right;
-               margin-right: 16px;
+               margin-right: 8px;
                font-weight: 400;
                color: #000000;
+               font-family: 'FZJCGFKTK';
             }
             .item-con{
                 min-width: 80px;
@@ -110,6 +111,7 @@ export default {
                 color: #000000;
                 margin-right: 8px;
                 word-break: break-word;
+                font-family: 'FZJCGFKTK';
             }
             input{
                 flex: 1;
@@ -126,8 +128,9 @@ export default {
             .luyin-box{
                 border: 1px solid rgba(0, 0, 0, 0.1);
                 border-radius: 8px;
-                width: 68px;
-                margin-left: 16px;
+                width: 292px;
+                height: 40px;
+                margin-left: 8px;
             }
         }
     }

+ 43 - 24
src/styles/index.scss

@@ -145,31 +145,50 @@ div:focus {
 .zhuanTtf {
     font-family: zhuan;
 }
-.Book_orange_color{
-  color: #FFD46E;
+
+.Book_orange_color {
+    color: #FFD46E;
 }
 
 .Big-Book-Maxwidth {
-  .el-textarea {
-    width: 100%;
-    margin-right: 15px;
-  }
-}
-.Big-Book{
-  &-content{
-    width:100%;
-  }
-  &-main{
-    width:100%;
-  }
-  &-left-text{
-    display: block;
-    font-size: 14px;
-  }
-  &-con-top{
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 8px;;
-  }
+    .el-textarea {
+        width: 100%;
+        margin-right: 15px;
+    }
+}
+
+.Big-Book {
+    &-content {
+        width: 100%;
+    }
+    &-main {
+        width: 100%;
+    }
+    &-left-text {
+        display: block;
+        font-size: 14px;
+    }
+    &-con-top {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin-bottom: 8px;
+        ;
+    }
+}
+
+input::-webkit-input-placeholder {
+    color: rgba($color: #000000, $alpha: 0.3);
 }
+
+input::-moz-placeholder {
+    color: rgba($color: #000000, $alpha: 0.3);
+}
+
+input:-moz-placeholder {
+    color: rgba($color: #000000, $alpha: 0.3);
+}
+
+input:-ms-input-placeholder {
+    color: rgba($color: #000000, $alpha: 0.3);
+}