<template>
  <el-form
    :rules="rules"
    :model="data"
    ref="form"
    class="sub-form"
    :validate-on-rule-change="false"
  >
    <!--<el-input v-model="form.orderNo" :value="index" type="hidden"></el-input>-->
    <!-- <el-form-item label="是否属于诊断依据：" prop="isReason" label-width="160px">
            <el-select v-model="data.isReason" placeholder="请选择">
                <el-option label="否" :value="0"></el-option>
                <el-option label="是" :value="1"></el-option>
            </el-select>
    </el-form-item>-->
    <el-form-item label="段落标题：" prop="title" label-width="160px">
      <el-input v-model="data.title"></el-input>
    </el-form-item>
    <el-form-item label="内容类型：" prop="position" label-width="160px">
      <el-checkbox-group v-model="data.position">
        <el-checkbox v-for="it in positions" :key="it.val" :label="it.val">{{
          it.name
        }}</el-checkbox>
      </el-checkbox-group>
    </el-form-item>
    <el-form-item label="内容" prop="content" label-width="160px" ref="editor">
      <quillEditor
        v-model="data.content"
        :options="editorOption"
        class="ql-editor"
        ref="quillEditor"
      ></quillEditor>
    </el-form-item>
    <div class="order-btn">
      <a
        v-if="index !== 0"
        :class="index === total - 1 ? 'order-spc' : 'order-up'"
        @click="reOrder(1)"
        >上升</a
      >
      <a
        v-if="index !== total - 1"
        :class="index === 0 ? 'order-spc' : 'order-down'"
        @click="reOrder(0)"
        >下降</a
      >
    </div>
    <el-form-item label-width="160px" class="btns">
      <el-button @click="addEmit">添加段落</el-button>
      <el-button @click="delEmit" type="info">删除本段落</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import { quillEditor, Quill } from "vue-quill-editor";
import config from "@api/config";
import api from "@api/knowledgeLib.js";
import { container, ImageExtend, QuillWatch } from "quill-image-extend-module";
Quill.register("modules/ImageExtend", ImageExtend);
export default {
  props: [
    "data",
    "index",
    "isEdit",
    "total",
    "showType",
    "positionMap",
    "positionList",
  ],
  name: "MedicineInfoParagraph",
  components: {
    quillEditor,
  },
  data() {
    return {
      toolbars: [
        [
          ["bold", "underline", "strike"],
          [{ list: "ordered" }, { list: "bullet" }],
          [{ script: "sub" }, { script: "super" }],
          [{ color: [] }, { background: [] }],
          [{ align: [] }],
          ["image"],
        ],
      ],
      toolbarMode: 0,
      editorOption: {
        modules: {
          ImageExtend: {
            loading: true,
            name: "upfile",
            size: 1,
            sizeError: () => {
              this.$message({
                showClose: true,
                message: "请上传 1M 以内的图片！",
                type: "warning",
              });
            },
            action: config.urls.promptServer,
            response: (res) => {
              if (res.code == "0") {
                return config.imgHost + res.data.url;
              } else {
                this.$message({
                  showClose: true,
                  message: res.msg,
                  type: "warning",
                });
              }
            },
          },
          toolbar: {
            container: container,
            handlers: {
              image: function () {
                QuillWatch.emit(this.quill.id);
              },
            },
          },
        },
      },
      form: {
        position: [],
        orderNo: 0,
      },
      rules: {},
    };
  },
  computed: {
    positions: function () {
      if (this.showType !== -1) {
        return this.positionMap[this.showType];
      }
      return this.positionList || [];
    },
  },
  watch: {
    "data.content": function () {
      if (this.data.content !== "") {
        this.$refs.editor && this.$refs.editor.clearValidate(); // 清除校验
      }
      if (this.data.content === "") {
        // console.log('内容为空');
        this.$refs["form"].validateField("content"); // 手动校验
      }
      this.data.text = this.$refs.quillEditor.quill.root.innerText;
    },
  },
  created() {
    // console.log(this.showType, 'showType','需要显示的类型');
    this.editorOption.modules.toolbar.container =
      this.toolbars[this.toolbarMode];
    // this.zskgetDict();
    if (this.isEdit) {
      setTimeout(() => {
        this.rules = {
          position: [
            { required: true, message: "请选择内容类型", trigger: "change" },
          ],
          title: [
            { required: true, message: "请输入段落标题", trigger: "change" },
            { max: 30, message: "标题名称不能超过30字", trigger: "change" },
          ],
          content: [
            { required: true, message: "请输入段落内容", trigger: "change" },
          ],
        };
      }, 100);
    } else {
      this.rules = {
        position: [
          { required: true, message: "请选择内容类型", trigger: "change" },
        ],
        title: [
          { required: true, message: "请输入段落标题", trigger: "change" },
          { max: 30, message: "标题名称不能超过30字", trigger: "change" },
        ],
        content: [
          { required: true, message: "请输入段落内容", trigger: "change" },
        ],
      };
    }
    setTimeout(() => {
      this.filterHiddenPosition();
    }, 200);
  },
  mounted() {},
  methods: {
    zskgetDict() {
      api
        .zskgetDict()
        .then((res) => {
          if (res.data.code == "0") {
            const data = res.data.data;
            this.positions = data["50"];
            this.renderPositions(data["50"], data["51"]);
          }
        })
        .catch((error) => {
          console.log(error);
        });
    },
    reOrder(i) {
      this.$emit("reOrder", i, this.index);
    },

    // 添加段落
    addEmit() {
      this.$emit("add");
    },

    // 删除段落
    delEmit() {
      this.$emit("del", this.index);
    },
    filterHiddenPosition() {
      const pos = this.data.position;
      const pArr = this.positions.map((it) => {
        return it.val;
      });
      const pStr = pArr.join(",");
      const arr = pos.filter((it) => {
        return pStr.indexOf(it) > -1;
      });
      this.data.position = arr;
    },
    // 渲染内容类型
    renderPositions(data1, data2) {
      //显示位置枚举列表
      if (this.showType > 0) {
        data2 = data2.filter((item) => item.name == this.showType);
        let val = data2[0].val.split(",");
        this.positions = data1.filter((it) => {
          let arr = val.map((v) => v);
          return arr.includes(it.val);
        });
      }
    },
  },
};
</script>

<style lang="less">
.quill-editor.ql-editor {
  padding-left: 0 !important;
}
.is-error .el-form-item__error {
  top: auto;
}
.sub-form {
  position: relative;
}
.order-btn {
  position: absolute;
  top: 12px;
  right: 0;
  a {
    margin-bottom: 20px;
    border: 1px solid #22ccc8;
    color: #22ccc8;
    padding: 5px 10px;
    border-radius: 4px;
    cursor: pointer;
    font-size: 12px;
  }
  .order-spc {
    margin-top: 28px;
  }
  .order-down {
    margin-left: 20px;
  }
}
/**富文本编辑器样式修改***/
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before,
.ql-snow .ql-picker.ql-header .ql-picker-label::before,
it .ql-editor,
.quill-editor {
  padding-top: 0px !important;
  margin-top: -8px;
  min-height: 48px;
  p {
    padding-top: 8px;
  }
}
.ql-editor.ql-blank::before {
  padding-top: 0px;
}
.btns {
  margin-top: 20px;
}
</style>