<template>
  <div style="display: flex;">
    <!-- :editor-toolbar="customToolbar"  overflow-y: scroll;-->
    <div>
      <div :style="`width:${window.pageWidth - 520}px;`">
        <vue-editor v-model="form.informedConsentTemplateFileContent" :style="`height: ${divHeight}px;`" />
      </div>
      <div style="margin: 60px 10px 10px 0; display: flex;justify-content: space-between;">
        <div style="color: red;">注：${signMan} ${signDate} 为预设参数，由具体值代替。</div>
        <div style="display: flex;">
          <el-button type="primary" @click="btnInit" class="commonbutton" size="small">预置模版</el-button>
          <el-button type="primary" @click="btnPreview" class="commonbutton" size="small">预览</el-button>
          <el-button type="primary" @click="btnDesign" class="commonbutton" size="small">{{ designAble ?
            '设计' : '应用' }}</el-button>
          <el-button type="primary" @click="btnOk" class="commonbutton" size="small">确定</el-button>
        </div>
      </div>
    </div>
    <div style="width:500px;border: 1px #DCDFE6; ">
      <div style="display: flex;">
        <span style="width: 70px;margin-top: 6px;">模板名称</span>
        <el-input v-model="form.displayName" placeholder="模板名称" size="small"></el-input>
      </div>
      <el-input v-model="contentDesign" type="textarea" :autosize="autosize" :disabled="designAble" placeholder="源码"
        size="small"></el-input>
    </div>

    <!-- 模板预览 -->
    <el-dialog title="模板预览" :visible.sync="acceptTemplateShow" :append-to-body="true" :close-on-click-modal="false"
      width="900px">
      <div style="height: 500px;overflow:auto;" v-html="contentShow"></div>
    </el-dialog>
  </div>
</template>

<script>

import { VueEditor, Quill } from "vue2-editor";
import { mapState } from "vuex";
import moment from "moment";
import { postapi } from "@/api/api";

const Size = Quill.import("attributors/style/size");
Size.whitelist = ["12px", "14px", "16px", "18px", "24px", "32px", "48px"];
Quill.register(Size, true);

// 定义你需要的字体列表
const fontList = [
  'Microsoft-YaHei',  // 微软雅黑
  'SimSun',           // 宋体
  'SimHei',           // 黑体
  'KaiTi',            // 楷体
  'Arial',
  'Times-New-Roman'
]

// 获取 Quill 的字体模块，并将自定义列表设置为白名单
const Font = Quill.import('formats/font')
Font.whitelist = fontList

// 重要：将修改后的字体模块重新注册回去
Quill.register(Font, true)


export default {
  components: { VueEditor },
  props: ['refParams', 'refFun'],
  data() {
    return {
      form: {
        id: '',
        displayName: "",
        informedConsentTemplateFileContent: ""
      },
      contentInit: '<h2 style="text-align:center;"><strong>CT检查知情同意书</strong></h2><p>尊敬的客户：</p><p>　　欢迎您来到长城体检中心进行CT检查，在检查之前，您需要知晓以下事宜：辐射有害健康，请远离电离辐射</p><p>　　1、人体受到放射线照射后，可能产生潜在的危害，产生有害的躯体效应和遗传效应，其中最敏感的器官或组织为：甲状腺、性腺、及胚胎组织。</p><p>　　2、孕妇原则上禁止CT检查，如果您是孕妇，在CT检查前，请告知工作人员。</p><p>　　3、如果您正处在备孕阶段，原则上我们不建议进行CT检查，请您提前告知工作人员。</p><p>　　4、CT检查时只允许一名受检者进入机房，无关人员不得在机房内停留。</p><p>　　5、建议受检者佩戴门诊部提供的防护用品，遮盖敏感部位。 家屋到扫描室外等候。</p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p style="font-size:24px;text-align:right;"><strong>受检人签名：</strong>${signMan}</p><p><br></p><p style="font-size:20px;text-align:right;padding-right:40px;">${signDate}</p>',
      // 自定义工具栏配置
      customToolbar: [
        // 字体大小控制（关键配置）
        //[{ size: ["small", false, "large", "huge"] }],  // false 代表默认大小
        [{ size: ["12px", "14px", "16px", "18px", "24px", "32px", "48px"] }],
        // 字体控制（可选）
        //[{ font: [] }],
        [{ font: fontList }],

        // 标题控制
        //[{ header: [false, 1, 2, 3, 4, 5, 6] }],

        // 基础格式
        ["bold", "italic", "underline", "strike"],

        // 文本颜色和背景色
        [{ color: [] }, { background: [] }],

        // 文本对齐
        [{ align: ["", "center", "right", "justify"] }],

        // 列表
        [{ list: "ordered" }, { list: "bullet" }, { list: "check" }],

        // 缩进
        [{ indent: "-1" }, { indent: "+1" }],

        // 引用和代码块
        ["blockquote", "code-block"],

        // 链接、图片、视频
        ["link", "image", "video"],

        // 清除格式
        ["clean"]
      ],
      designAble: true,
      contentDesign: '',
      acceptTemplateShow: false, // 预览
      contentShow: '', // 预览
    };
  },

  //创建组件后
  created() {
    this.form.informedConsentTemplateFileContent = this.contentInit
  },

  //挂载组件完成
  mounted() {
    this.getAcceptTempPalte(this.refParams.id)
  },

  computed: {
    ...mapState(["window", "dict", "dialogWin"]),
    divHeight() {
      return this.window.pageHeight - 120
    },
    autosize() {
      let rows = Math.floor((this.window.pageHeight - 105 - 6) / 20)
      return { minRows: rows, maxRows: rows }
    }
  },
  // 方法
  methods: {

    getAcceptTempPalte(informedConsentTemplateId) {
      if (informedConsentTemplateId) {
        postapi('/api/app/InformedConsentTemplate/Get', { informedConsentTemplateId })
          .then(res => {
            if (res.code > -1) {
              this.form = res.data
            }
          })
          .finally(() => {
            this.contentDesign = this.form.informedConsentTemplateFileContent
            this.designAble = true
          })
      } else {
        this.form.id = ''
        this.form.displayName = ''
        this.btnInit()
      }
    },

    btnOk() {      
      if (!this.form.displayName){
        this.$message.warning({ showClose: true, message: '模板名称不能为空' })
        return
      }else if(!this.form.informedConsentTemplateFileContent) {
        this.$message.warning({ showClose: true, message: '模板内容不能为空' })
        return
      }

      let url = '/api/app/InformedConsentTemplate/Create'
      if (this.form.id) {
        url = '/api/app/InformedConsentTemplate/Update'
      }

      // 保存时，刷新列表
      postapi(url, this.form)
        .then(res => {
          if (res.code > -1) {
            this.$message.success({showClose:true,message:'操作成功！'})
            if (!this.form.id && res.data?.id) this.form.id = res.data.id
          }
        })
        .finally(() => {
          // 刷新父主件
          try {
            this.refFun(this.form.id)
          } catch (error) {
            console.error('知情同意书模板 refFun', error)
          }
        })

    },

    btnInit() {
      this.form.informedConsentTemplateFileContent = this.contentInit
      this.contentDesign = this.contentInit
      this.designAble = true
    },

    // 查看效果
    btnPreview() {
      this.acceptTemplateShow = true
      let signMan = '<img width="100" height="50" src="/pic/egSignMan.png">'
      let signDate = moment(new Date()).format('yyyy 年 MM 月 DD 日')
      this.contentShow = this.form.informedConsentTemplateFileContent.replace('${signMan}', signMan).replace('${signDate}', signDate)
    },

    btnDesign() {
      if (this.designAble) {
        this.contentDesign = this.form.informedConsentTemplateFileContent
      } else {
        this.form.informedConsentTemplateFileContent = this.contentDesign
      }
      this.designAble = !this.designAble
    }
  },

  // 监听
  watch: {
    "refParams.brushTimes": {
      // immediate:true,
      handler(newVal, oldVal) {
        console.log(`watch 模板 newVal: ${newVal}, oldVal: ${oldVal} `, this.refParams);
        if (newVal != oldVal) this.getAcceptTempPalte(this.refParams.id)
      }
    },
  },
};
</script>