<template>
  <QuestionBase>
    <template #content>
      <div class="stem">
        <RichText v-model="data.stem" :font-size="18" placeholder="输入题干" />

        <RichText
          v-if="isEnable(data.property.is_enable_description)"
          v-model="data.description"
          placeholder="输入提示"
        />
      </div>

      <div class="content">
        <div v-for="(item, index) in data.option_list" :key="index" class="content-item">
          <div v-if="pic_list[item.picture_file_id]" class="content-pic">
            <div class="item-left">
              <el-image
                style="width: 72px; height: 72px"
                :src="pic_list[item.picture_file_id]"
                :preview-src-list="[pic_list[item.picture_file_id]]"
                fit="contain"
              />
              <button class="delete-btn" @click="delectOptions(index, item.picture_file_id)">
                <i class="el-icon-delete"></i>删除
              </button>
            </div>
            <div class="item-right">
              <div class="item-rich">
                <label class="">图片信息</label>
                <RichText v-model="item.picture_info" :font-size="12" placeholder="输入图片信息" />
              </div>
            </div>
          </div>
        </div>
        <UploadDrag ref="uploadDrag" :limit="999" @fileUploadSuccess="fileUploadSuccess" />

        <template v-if="isEnable(data.property.is_enable_sample_text)">
          <el-divider class="write-divider" />
          <label class="title-little">范文：</label>
          <RichText v-model="data.sample_text" placeholder="输入范文" :wordlimit-num="5000" />
          <p class="tips">多篇范文之间使用分割线（---）</p>
        </template>
      </div>

      <div v-if="isEnable(data.property.is_enable_analysis)" class="analysis">
        <div class="analysis-title">解析：</div>
        <RichText v-model="data.analysis" :is-border="true" :font-size="14" placeholder="输入解析" />
      </div>
    </template>

    <template #property>
      <el-form :model="data.property" label-width="72px" label-position="left">
        <el-form-item label="题号">
          <el-input v-model="data.property.question_number" />
        </el-form-item>
        <el-form-item>
          <el-radio
            v-for="{ value, label } in questionNumberTypeList"
            :key="value"
            v-model="data.other.question_number_type"
            :label="value"
          >
            {{ label }}
          </el-radio>
        </el-form-item>
        <el-form-item label="题干题号">
          <el-select v-model="data.property.stem_question_number_font_size">
            <el-option v-for="item in fontSizeList" :key="item" :label="item" :value="item" />
          </el-select>
        </el-form-item>
        <el-form-item label="提示">
          <el-radio
            v-for="{ value, label } in switchOption"
            :key="value"
            v-model="data.property.is_enable_description"
            :label="value"
          >
            {{ label }}
          </el-radio>
        </el-form-item>
        <el-form-item label="解析">
          <el-radio
            v-for="{ value, label } in switchOption"
            :key="value"
            v-model="data.property.is_enable_analysis"
            :label="value"
          >
            {{ label }}
          </el-radio>
        </el-form-item>
        <el-form-item label="分值">
          <el-radio
            v-for="{ value, label } in scoreTypeList"
            :key="value"
            v-model="data.property.score_type"
            :label="value"
          >
            {{ label }}
          </el-radio>
        </el-form-item>
        <el-form-item>
          <el-input-number
            v-model="data.property.score"
            :min="0"
            :step="data.property.score_type === scoreTypeList[0].value ? 1 : 0.1"
          />
        </el-form-item>
        <el-form-item label="字数">
          <el-input-number v-model="data.property.word_num" :min="1" :step="10" class="word-num-input" :precision="0" />
        </el-form-item>
        <el-form-item label="范文">
          <el-radio
            v-for="{ value, label } in switchOption"
            :key="value"
            v-model="data.property.is_enable_sample_text"
            :label="value"
          >
            {{ label }}
          </el-radio>
        </el-form-item>
        <el-form-item label="上传附件">
          <el-radio
            v-for="{ value, label } in switchOption"
            :key="value"
            v-model="data.property.is_enable_upload_accessory"
            :label="value"
          >
            {{ label }}
          </el-radio>
        </el-form-item>
      </el-form>
    </template>
  </QuestionBase>
</template>

<script>
import QuestionMixin from '../common/QuestionMixin.js';

import { writePictrueData, getOption } from '@/views/exercise_questions/data/writePicture';
import { GetFileStoreInfo } from '@/api/app';
import UploadDrag from '../common/UploadDrag.vue';

export default {
  name: 'WritePictureQuestion',
  components: { UploadDrag },
  mixins: [QuestionMixin],
  data() {
    return {
      data: JSON.parse(JSON.stringify(writePictrueData)),
      pic_list: {},
      is_first: true,
    };
  },
  watch: {
    'data.file_id_list': {
      handler() {
        if (this.is_first) {
          this.handleData();
        }
      },
      deep: true,
    },
  },
  methods: {
    // 初始化数据
    handleData() {
      this.data.file_id_list.forEach((item) => {
        GetFileStoreInfo({ file_id: item }).then(({ file_id, file_url }) => {
          this.$set(this.pic_list, file_id, file_url);
        });
      });
      this.is_first = false;
    },
    // 删除
    delectOptions(i, id) {
      this.$confirm('是否删除该条全部信息？', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(() => {
          delete this.pic_list[id];
          this.data.file_id_list.splice(this.data.file_id_list.indexOf(id), 1);
          this.data.option_list.splice(i, 1);
          this.$refs.uploadDrag.clearFiles();
        })
        .catch(() => {});
    },
    fileUploadSuccess(file_id, file_url) {
      this.data.file_id_list.push(file_id);
      this.data.option_list.push(getOption());
      this.data.option_list[this.data.option_list.length - 1].picture_file_id = file_id;
      this.$set(this.pic_list, file_id, file_url);
    },
    /**
     * 智能识别
     * @param {String} text 识别数据
     */
    recognition(text) {
      this.recognitionCommon(text);
    },
  },
};
</script>

<style lang="scss" scoped>
.content {
  :deep .el-upload {
    width: 100%;

    &-dragger {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      width: 100%;
      height: 90px;
      font-size: 14px;

      :first-child {
        color: #000;
      }

      :last-child {
        color: $text-color;
      }
    }
  }

  .content-item {
    .content-pic {
      display: flex;
      column-gap: 8px;
      margin-bottom: 24px;
    }
  }

  .delete-btn {
    width: 100%;
    padding: 5px 8px;
    font-size: 14px;
    line-height: 22px;
    color: #f53f3f;
    background: #fff4f4;
    border: none;
    border-radius: 4px;

    .el-icon-delete {
      margin-right: 8px;
    }

    &:hover {
      color: #f53f3f;
    }

    &:focus {
      outline: none;
    }
  }

  .item-left {
    width: 72px;
  }

  .item-right {
    flex: 1;

    .item-rich {
      display: flex;

      > label {
        flex-shrink: 0;
        width: 64px;
        font-size: 14px;
        line-height: 32px;
        color: $font-light-color;
      }

      :deep .rich-wrapper {
        flex: 1;
      }
    }
  }
}
</style>
