|  | @@ -1,29 +1,44 @@
 | 
	
		
			
				|  |  |  <!-- eslint-disable vue/no-v-html -->
 | 
	
		
			
				|  |  |  <template>
 | 
	
		
			
				|  |  | -  <div class="select-preview" :style="getAreaStyle()">
 | 
	
		
			
				|  |  | +  <div class="character-preview">
 | 
	
		
			
				|  |  |      <SerialNumberPosition v-if="isEnable(data.property.sn_display_mode)" :property="data.property" />
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    <div class="main" :style="getMainStyle()">预览开发中</div>
 | 
	
		
			
				|  |  | +    <div class="main">
 | 
	
		
			
				|  |  | +      <div class="content-box" v-for="(item, index) in data.content_list" :key="index">
 | 
	
		
			
				|  |  | +        <div class="main-top" :style="{ width: item.hz_strokes_list.length * 64 + 'px' }">
 | 
	
		
			
				|  |  | +          <AudioPlay v-if="isEnable(data.property.is_enable_voice)" :file-id="item.audio_file_id" theme-color="gray" />
 | 
	
		
			
				|  |  | +          <span class="pinyin" v-if="isEnable(data.property.is_enable_pinyin)">{{ item.pinyin }}</span>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <div class="strock-chinese-box">
 | 
	
		
			
				|  |  | +          <Strockplayredline
 | 
	
		
			
				|  |  | +            v-for="(items, indexs) in item.hz_strokes_list"
 | 
	
		
			
				|  |  | +            :key="indexs"
 | 
	
		
			
				|  |  | +            :play-storkes="isEnable(data.property.is_enable_stroke)"
 | 
	
		
			
				|  |  | +            :book-text="item.con"
 | 
	
		
			
				|  |  | +            :target-div="'pre' + item.con + indexs"
 | 
	
		
			
				|  |  | +            :book-strokes="items.strokes"
 | 
	
		
			
				|  |  | +            :class="['strock-chinese', indexs !== item.hz_strokes_list.length - 1 ? 'border-right-none' : '']"
 | 
	
		
			
				|  |  | +            :bg-type="data.property.frame_type"
 | 
	
		
			
				|  |  | +            :frame-color="data.property.frame_color"
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  |    </div>
 | 
	
		
			
				|  |  |  </template>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <script>
 | 
	
		
			
				|  |  | -import {
 | 
	
		
			
				|  |  | -  getCharacterData,
 | 
	
		
			
				|  |  | -  fillFontList,
 | 
	
		
			
				|  |  | -  arrangeTypeList,
 | 
	
		
			
				|  |  | -  audioPositionList,
 | 
	
		
			
				|  |  | -} from '@/views/book/courseware/data/character';
 | 
	
		
			
				|  |  | +import { getCharacterData } from '@/views/book/courseware/data/character';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import PreviewMixin from '../common/PreviewMixin';
 | 
	
		
			
				|  |  | -import AudioFill from '../fill/components/AudioFillPlay.vue';
 | 
	
		
			
				|  |  | -import SoundRecord from '../../common/SoundRecord.vue';
 | 
	
		
			
				|  |  | +import AudioPlay from '../character_base/components/AudioPlay.vue';
 | 
	
		
			
				|  |  | +import Strockplayredline from '../character_base/components/Strockplayredline.vue';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default {
 | 
	
		
			
				|  |  |    name: 'CharacterPreview',
 | 
	
		
			
				|  |  |    components: {
 | 
	
		
			
				|  |  | -    AudioFill,
 | 
	
		
			
				|  |  | -    SoundRecord,
 | 
	
		
			
				|  |  | +    AudioPlay,
 | 
	
		
			
				|  |  | +    Strockplayredline,
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    mixins: [PreviewMixin],
 | 
	
		
			
				|  |  |    data() {
 | 
	
	
		
			
				|  | @@ -31,111 +46,97 @@ export default {
 | 
	
		
			
				|  |  |        data: getCharacterData(),
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  | -  computed: {
 | 
	
		
			
				|  |  | -    fontFamily() {
 | 
	
		
			
				|  |  | -      return fillFontList.find(({ value }) => this.data.property.fill_font === value).font;
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  created() {
 | 
	
		
			
				|  |  | -    // this.answer.answer_list = this.data.model_essay
 | 
	
		
			
				|  |  | -    //   .map((item) => {
 | 
	
		
			
				|  |  | -    //     return item
 | 
	
		
			
				|  |  | -    //       .map(({ type, content, mark }) => {
 | 
	
		
			
				|  |  | -    //         if (type === 'input') {
 | 
	
		
			
				|  |  | -    //           return {
 | 
	
		
			
				|  |  | -    //             value: content,
 | 
	
		
			
				|  |  | -    //             mark,
 | 
	
		
			
				|  |  | -    //           };
 | 
	
		
			
				|  |  | -    //         }
 | 
	
		
			
				|  |  | -    //       })
 | 
	
		
			
				|  |  | -    //       .filter((item) => item);
 | 
	
		
			
				|  |  | -    //   })
 | 
	
		
			
				|  |  | -    //   .flat();
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  methods: {
 | 
	
		
			
				|  |  | -    getMainStyle() {
 | 
	
		
			
				|  |  | -      // const isRow = this.data.property.arrange_type === arrangeTypeList[0].value;
 | 
	
		
			
				|  |  | -      // const isFront = this.data.property.audio_position === audioPositionList[0].value;
 | 
	
		
			
				|  |  | -      // const isEnableVoice = this.data.property.is_enable_voice_answer === 'true';
 | 
	
		
			
				|  |  | -      // let _list = [
 | 
	
		
			
				|  |  | -      //   { name: 'audio', value: '24px' },
 | 
	
		
			
				|  |  | -      //   { name: 'fill', value: '1fr' },
 | 
	
		
			
				|  |  | -      // ];
 | 
	
		
			
				|  |  | -      // if (!isFront) {
 | 
	
		
			
				|  |  | -      //   _list = _list.reverse();
 | 
	
		
			
				|  |  | -      // }
 | 
	
		
			
				|  |  | -      // let grid = isRow
 | 
	
		
			
				|  |  | -      //   ? `"${_list[0].name} ${_list[1].name}${isEnableVoice ? ' record' : ''}" auto / ${_list[0].value} ${_list[1].value}${isEnableVoice ? ' 160px' : ''}`
 | 
	
		
			
				|  |  | -      //   : `"${_list[0].name}" ${_list[0].value} "${_list[1].name}" ${_list[1].value}${isEnableVoice ? `" record" 32px ` : ''} / 1fr`;
 | 
	
		
			
				|  |  | -      // let style = {
 | 
	
		
			
				|  |  | -      //   'grid-auto-flow': isRow ? 'column' : 'row',
 | 
	
		
			
				|  |  | -      //   'column-gap': isRow ? '16px' : undefined,
 | 
	
		
			
				|  |  | -      //   'row-gap': isRow ? undefined : '8px',
 | 
	
		
			
				|  |  | -      //   grid,
 | 
	
		
			
				|  |  | -      // };
 | 
	
		
			
				|  |  | -      // return style;
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | +  watch: {},
 | 
	
		
			
				|  |  | +  computed: {},
 | 
	
		
			
				|  |  | +  created() {},
 | 
	
		
			
				|  |  | +  methods: {},
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  </script>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <style lang="scss" scoped>
 | 
	
		
			
				|  |  |  @use '@/styles/mixin.scss' as *;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -.select-preview {
 | 
	
		
			
				|  |  | +.character-preview {
 | 
	
		
			
				|  |  |    @include preview-base;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  display: block;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    .main {
 | 
	
		
			
				|  |  | -    display: grid;
 | 
	
		
			
				|  |  | -    align-items: center;
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    flex-wrap: wrap;
 | 
	
		
			
				|  |  | +    column-gap: 16px;
 | 
	
		
			
				|  |  | +    justify-content: start;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  .fill-wrapper {
 | 
	
		
			
				|  |  | -    grid-area: fill;
 | 
	
		
			
				|  |  | -    font-size: 16pt;
 | 
	
		
			
				|  |  | +  .content-box {
 | 
	
		
			
				|  |  | +    width: max-content;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .audio-wrapper-nobg {
 | 
	
		
			
				|  |  | +    height: 16px;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    p {
 | 
	
		
			
				|  |  | -      margin: 0;
 | 
	
		
			
				|  |  | +    :deep .audio-play {
 | 
	
		
			
				|  |  | +      width: 16px;
 | 
	
		
			
				|  |  | +      height: 16px;
 | 
	
		
			
				|  |  | +      color: #000;
 | 
	
		
			
				|  |  | +      background-color: initial;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    .el-input {
 | 
	
		
			
				|  |  | -      display: inline-flex;
 | 
	
		
			
				|  |  | -      align-items: center;
 | 
	
		
			
				|  |  | -      width: 120px;
 | 
	
		
			
				|  |  | -      margin: 0 2px;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      &.pinyin :deep input.el-input__inner {
 | 
	
		
			
				|  |  | -        font-family: 'PINYIN-B', sans-serif;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      &.chinese :deep input.el-input__inner {
 | 
	
		
			
				|  |  | -        font-family: 'arial', sans-serif;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      &.english :deep input.el-input__inner {
 | 
	
		
			
				|  |  | -        font-family: 'arial', sans-serif;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      :deep input.el-input__inner {
 | 
	
		
			
				|  |  | -        padding: 0;
 | 
	
		
			
				|  |  | -        font-size: 16pt;
 | 
	
		
			
				|  |  | -        color: $font-color;
 | 
	
		
			
				|  |  | -        text-align: center;
 | 
	
		
			
				|  |  | -        background-color: #fff;
 | 
	
		
			
				|  |  | -        border-width: 0;
 | 
	
		
			
				|  |  | -        border-bottom: 1px solid $font-color;
 | 
	
		
			
				|  |  | -        border-radius: 0;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | +    :deep .audio-play.not-url {
 | 
	
		
			
				|  |  | +      color: #a1a1a1;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    :deep .voice-play {
 | 
	
		
			
				|  |  | +      width: 16px;
 | 
	
		
			
				|  |  | +      height: 16px;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  .record-box {
 | 
	
		
			
				|  |  | -    padding: 6px 12px;
 | 
	
		
			
				|  |  | -    background-color: $fill-color;
 | 
	
		
			
				|  |  | +  .main-top {
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    column-gap: 4px;
 | 
	
		
			
				|  |  | +    align-items: center;
 | 
	
		
			
				|  |  | +    justify-content: center;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .pinyin {
 | 
	
		
			
				|  |  | +    font-family: 'League';
 | 
	
		
			
				|  |  | +    font-size: 12px;
 | 
	
		
			
				|  |  | +    font-weight: 500;
 | 
	
		
			
				|  |  | +    color: #000;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .strock-chinese-box {
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    flex-wrap: wrap;
 | 
	
		
			
				|  |  | +    margin: 8px 0;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    :deep .record-time {
 | 
	
		
			
				|  |  | -      width: 100px;
 | 
	
		
			
				|  |  | +  .strockplay-newWord {
 | 
	
		
			
				|  |  | +    position: relative;
 | 
	
		
			
				|  |  | +    box-sizing: border-box;
 | 
	
		
			
				|  |  | +    flex-shrink: 0;
 | 
	
		
			
				|  |  | +    width: 64px;
 | 
	
		
			
				|  |  | +    height: 64px;
 | 
	
		
			
				|  |  | +    border: 1px solid #e81b1b;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    .character-target-bg,
 | 
	
		
			
				|  |  | +    .hanzi-writer-img {
 | 
	
		
			
				|  |  | +      position: absolute;
 | 
	
		
			
				|  |  | +      top: 0;
 | 
	
		
			
				|  |  | +      left: 0;
 | 
	
		
			
				|  |  | +      width: 100%;
 | 
	
		
			
				|  |  | +      height: 100%;
 | 
	
		
			
				|  |  | +      color: #dedede;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    .hanzi-writer-img {
 | 
	
		
			
				|  |  | +      z-index: 1;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .border-right-none {
 | 
	
		
			
				|  |  | +    border-right: none;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  </style>
 |