<template>
   <el-dialog :title="calcTitle" :visible.sync="dialogVisible" width="800px" append-to-body :close-on-click-modal="false">
    <!-- <div style="color:#fff">
      <p>类型:{{type}} 增删改类型:{{mode}}</p>
      <p>模板id:{{ tpl }}</p>
    </div> -->
        <div class="dialogStyleBox">
          <div class="dialogLine"></div>
          <div class="dialogCloseButton"></div>
        </div>
        <el-card>
          <BoardTplPreview style="height: 200px; width: 100%;" :boardWH="screenSize" :tpl="dataForm"></BoardTplPreview>
        </el-card>
        <el-card>
          <el-form :model="dataForm" :rules="dataRule" label-width="110px" ref="dataForm" size="mini">
            <el-row :gutter="24">
              <el-col :span="8">
                <el-form-item label="所属类别" v-if="type == 'template' && mode!='toDevice'">
                  <el-select v-model="dataForm.category" placeholder="请选择所属类别" size="mini">
                    <el-option v-for="item in templateCategoryList" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col class="infoBoardButton" :span="16">
                <el-form-item label="对齐方式">
                  <el-radio-group v-model="dataForm.formatStyle">
                    <el-radio-button label="0">左对齐</el-radio-button>
                    <el-radio-button label="2">中间对齐</el-radio-button>
                    <el-radio-button label="1">右对齐</el-radio-button>
                  </el-radio-group>
                </el-form-item>
              </el-col>
            </el-row>

            <el-row :gutter="24" style="display: flex; flex-wrap: wrap;width:100%">
              <el-col :span="24">
                <el-form-item label="详细内容" prop="content">
                  <el-input type="textarea" :rows="6" placeholder="详细内容" v-model="dataForm.content"></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="字体颜色">
                  <el-select v-model="dataForm.fontColor" filterable placeholder="请选择">
                    <el-option v-for="item in colorList" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="字体大小">
                  <el-select v-model="dataForm.fontSize" style="width: 100%">
                    <el-option v-for="item in fontSizeList" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="字体类型">
                  <el-select v-model="dataForm.fontType" placeholder="请选择">
                    <el-option v-for="item in fontTypeList" :key="item.dictLabel" :label="item.dictLabel" :value="item.dictValue">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>

              <el-col :span="8">
                <el-form-item label="停留时间(秒)">
                  <el-input-number :min="0" v-model="dataForm.stopTime"/>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="入屏方式">
                  <el-select v-model="dataForm.inScreenMode" placeholder="请选择">
                    <el-option v-for="item in inScreenModeList" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="屏幕尺寸">
                  <el-select v-model="screenSize" placeholder="请选择" disabled>
                    <el-option v-for="item in screenSizeOptions" :key="item.device_pixel" :label="item.device_pixel" :value="item.device_pixel">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
          </el-form>
        </el-card>

        <div slot="footer" class="dialog-footer">
          <el-button @click="onSubmit" v-loading="loading" style="background-color: #10aac2;color:#fff;">确认</el-button>
          <el-button style="background-color:#b5b5b6;color:#fff" @click="onClose">取消</el-button>
        </div>
      </el-dialog>
</template>
<script>
import { getTemplateList, addTemplate, addTemplateContent, editTemplateContent, editTemplate, deleteTemplate, getTemplateContent, getGalleryList, getFontSizeByDevicePixel, uploadBoardEditInfo } from '@/api/board/template'
import { devicessize } from '@/api/information/api.js'
import { checkIotBoardContent } from '@/api/board/vocabulary'
import BoardPreview from "@screen/components/infoBoard/BoardPreview.vue"
import BoardTplPreview from "@screen/components/infoBoard/BoardTplPreview.vue"
import infoBoardUtils from "@screen/utils/infoBoard.js"
import { checkBoardContent } from '@/api/board/board'
import { debounce } from 'lodash'
export default {
  data() {
    return {
      alignmentNum: 2,
      content: '',
      boardWidth: '',
      boardHeight: '',
      checkList: [], //复选框一组
      obj: '',
      imgUrl: [],
      imgUrlOther: [],
      dialogVisible: false,
      fileList: [
        {
          name: 'food.jpeg',
          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
        },
        {
          name: 'food2.jpeg',
          url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
        }
      ],
      listquery: [], //拖拽图片
      curDragImgItem: '',
      startTxt_x: '000',
      startTxt_y: '000',
      width: '400',
      height: '40',
      // content: "",
      fontSize: '24',
      fontType: 'KaiTi',
      fontSpacing: 0,
      coordinate: '000000',
      url: '',
      previewContent: '', //预览内容
      ispreviewContent: -1,
      dataForm: {
        category:"",
        formatStyle:"",
        content:"",
        fontColor:"",
        fontSize:"",
        fontType:"",
        stopTime:"",
        inScreenMode:"",
        screenSize:""
      },
      templateContent: [],
      templateDelContent: [],
      dataRule: {
        content: [
          {
            required: true,
            message: '请输入详细内容',
            trigger: 'blur'
          }
        ]
      },
      screenSizeOptions: [],
      colorList: [],
      isCurrencyOptions: [
        {
          code: '0',
          content: '通用'
        },
        {
          code: '1',
          content: '仅为智能推荐模板'
        }
      ],
      inScreenModeList: [],
      imgSize: [
        {
          type: '1024*128',
          name: '全屏'
        },
        {
          type: '',
          name: '正常'
        }
      ],
      fontSizeList: [],
      title: '选择图片',
      loading: false,
      isAdd: false,
      templateCategoryList: [],
      infoType: '',
      devicePixelBoolean: false,
      categoryRules: false,
      deviceCttDefault: {
        "residenceTime": "50",
        "intonation": "0",
        "fontSpacing": "1",
        "screenEntryMethod": "1",
        "screenOutputMethod": "1",
        "lineSpacing": "0",
        "yCoordinate": "0",
        "whetherToSynchronizePlayback": "0",
        "whetherToPlayText": "0",
        "playbackCount": "1",
        "flashingFrequency": "5",
        "backgroundColor": "8",
        "foregroundColor": "FFFF00",
        "textContent": "",
        "fontStyle": "0",
        "displayAreaWidth": "768",
        "playbackDuration": "50",
        "displayAreaHeight": "64",
        "volume": "0",
        "xCoordinate": "0",
        "screenEntrySpeed": "1",
        "horizontalAlignment": "2",
        "playSpecialEffects": "0",
        "setUpTheSpeaker": "0",
        "flickerSpeed": "0",
        "specialEffectsSpeed": "1",
        "fontSize": "20",
        "verticalAlignment": "2",
        "speechSpeed": "0",
        "font": "3"
      },
      isLocked :false,
    }
  },
  props:{
    mode:{    //add edit
      type:String,
      default:""
    },
    type: {   //template board
      type: String,
      default: ""
    },
    visible:{
      type:Boolean,
      default:false
    },
    screenSize:{
      type:String,
      default:""
    },
    tpl:{
      type:Object,
      default:()=>{}
    }
  },
  components:{
    BoardPreview, BoardTplPreview
  },
  computed: {
    calcTitle(){
      let str = '';
      if(this.mode=="toDevice"){
        str = `从模板添加设备信息`;
      }else{
        str = `${this.mode == 'add' ? '新增' : '编辑'}${this.type == 'template' ? '信息模板' : '设备信息'}`
      }
      return str;
    }
  },
  watch: {
    visible:{
      handler(newV){
        this.dialogVisible = newV;
        if(this.$refs.dataForm){
          this.$refs.dataForm.clearValidate();
        }
      },
      immediate:true
    },
    dialogVisible(newV){
      this.$emit("update:visible", newV);
    },
    tpl:{
      handler(newV){
        // { "id": 3, "category": "0", "content": "保持车距，控制车速", "screenSize": "768*64", "fontColor": "FFFF00", "fontSize": "64", "fontType": "2", "fontSpacing": "0", "rollingSpeed": null, "stopTime": "50", "inScreenMode": "1", "formatStyle": "2", "remark": null, "createTime": "2024-01-06 10:40:19", "updateTime": "2024-01-06 11:04:53" }
        if(newV && Object.keys(newV).length>0){
          this.initData();
        }
      },
      deep:true
    },
    "mode": {
      handler(newV) {
        this.initData();
      }
    }
  },
  mounted() {
  },
  created() {
    this.getDicts('iot_devices_font_color').then(res => {
      this.colorList = res.data;
      // console.log(this.colorList, "字体颜色");
    })
    this.getDicts('iot_device_font_inScreen_mode').then(res => {
      this.inScreenModeList = res.data
      // console.log(this.inScreenModeList, "入屏方式");
    })
    this.getDicts('iot_template_category').then(res => {
      this.templateCategoryList = res.data;
    })
    this.getDicts('iot_device_font_size').then(res => {
      this.fontSizeList = res.data;
      // this.dataForm.FONT_SIZE = res.data[1].dictValue
    })
  },
  methods: {
    initData() {
      if(this.isLocked){
        return
      }
      this.isLocked = true;
      setTimeout(()=>{this.isLocked = false}, 300);
      // getTemplateList({id:this.tpl.id}).then(res=>{
      //    console.log(res.data , "++++++++===========");
      // })
      if (this.mode == "add") {
        let tempTpl = null;
        if (this.type == "template") {
          tempTpl = {
            category: this.templateCategoryList[0].dictValue,
            formatStyle: 0,
            content: "",
            fontColor: this.colorList[0].dictValue,
            fontSize: this.fontSizeList[0].dictValue,
            fontType: this.fontTypeList[0].dictValue,
            stopTime: 50,
            inScreenMode: this.inScreenModeList[0].dictValue,
            screenSize: this.screenSize
          }
        }
        else {
          tempTpl = _.merge(this.deviceCttDefault, this.tpl.origin);    //首页弹窗，新增设备项时，需要传设备尺寸过来
        }
        this.dataForm = infoBoardUtils.dialogSourceFormat(tempTpl, this.type, this.mode);
      } else {
        this.dataForm = infoBoardUtils.dialogSourceFormat(this.tpl, this.type, this.mode, this.deviceCttDefault);
      }
      if (this.visible == false && this.mode == "toDevice") {
        this.onSubmit();
      }
    },
    onClose(){
        this.dialogVisible = false;
    },
    // 表单提交
    async onSubmit() {
      if (!this.dataForm.content.trim()) {
        return this.$modal.msgError('当前输入内容为空')
      }
      if (this.dataForm.content.indexOf('\\')>=0) {
        return this.$modal.msgError("内容不能含有特殊字符'\\\\'")
      }

      let ctt = this.dataForm.content;
      checkBoardContent(ctt).then(res => {
        if (res.code == 200) {
          doNext();
        } else {
          this.$message({
            type: 'danger',
            message: res.msg
          });
          return;
        }
      })
      let doNext = () => {

        let data = infoBoardUtils.dialogSaveFormat(this.dataForm, this.type, this.mode);
  
        this.loading = true
        // let templateId = "";

        if(this.type == "template"){
          if(this.mode=='edit'){
            editTemplate(data).then(res=>{
              afterSave("修改");
            });
          }else if (this.mode == "toDevice") {
            this.loading = false
            this.$emit("afterSubmit", { type: this.type, mode: this.mode, data: data });
          } else {
            addTemplate(data).then(res => {
              afterSave("新增");
            });
          }
          
        }else{
          this.loading = false
          // this.dialogVisible = false
          this.$emit("afterSubmit", { type: this.type, mode: this.mode, data:data });
        }
        
        const afterSave = (para)=>{
          this.$message.success(para + '成功!')
          this.loading = false
          // this.dialogVisible = false
          this.$emit("afterSubmit" , {type:this.type, mode:this.mode});
        }

      }
    },
  }
}
</script>
<style lang="scss" scoped>
.infoBoardButton {
  ::v-deep .el-radio-button--medium .el-radio-button__inner {
    // height: 3vh;
    // line-height: 3vh;
    // padding: 0 0.6vw;
    // font-size: 0.7vw;
  }
}
.previewContentCSS {
  border: yellow 1px dashed;
}
/* 页脚 */
.dialog-footer {
  padding-left: 450px;
}
.photoOther img,
.photo img {
  max-width: 300px;
  width: 100%;
  // height: 80px;
}
.infoBoardButton {
  display: flex;
  justify-content: left;
}
.boardTextStyle {
  line-height: 1;
  caret-color: rgba(0, 0, 0, 0);
  user-select: none;
  position: absolute;
  // max-height: 128px;
  overflow: hidden;
}
.blackBoard2 {
  background: #000000;
  display: flex;
  margin: 0 auto;
  overflow: hidden;
  position: relative;
  // justify-content: center;
  align-items: center;
}
::v-deep .el-card__body {
  padding: 10px 0;
}

//
::v-deep .el-dialog__header {
  background-color: #145977;
}
::v-deep .el-dialog__body {
  padding: 5px 20px;
  background-color: #145977;
}
::v-deep .el-dialog__footer {
  background-color: #145977;
}
::v-deep .el-card {
  margin-top: 1vh;
  background-color: #145977;
  border: 2px solid #1d7890;
}
::v-deep .el-form-item__label {
  color: #3de8ff;
}
::v-deep .el-input--mini .el-input__inner {
  color: #fff;
  background-color: #096d8c;
}
::v-deep .el-input-number.is-controls-right .el-input-number__decrease {
  color: #fff;
  background-color: #096d8c;
}
::v-deep .el-dialog__title {
  color: #fff;
}
::v-deep .el-textarea__inner {
  color: #fff;
  background-color: #096d8c;
  border-color: #096d8c;
}
::v-deep .el-input-number.is-controls-right .el-input-number__decrease {
  border-color: transparent;
}
::v-deep .el-input-number.is-controls-right .el-input-number__increase {
  border-color: transparent;
  color: #fff;
  background-color: #096d8c;
}
::v-deep .el-button--medium {
  padding: 5px 25px;
  font-size: 14px;
  border-radius: 20px;
  border: transparent;
}
::v-deep .el-radio-button__inner {
  color: #ffffff;
  background-color: pink;
  border-color: #1d58a9;
  -webkit-box-shadow: -1px 0 0 0 #1d58a9;
  box-shadow: -1px 0 0 0 #1d58a9;
  background: linear-gradient(180deg, #005c79 0%, #009bcc 100%);
  border-radius: 3px 3px 3px 3px;
  opacity: 1;
  border: none !important;
}
::v-deep .infoBoardButton .el-radio-button--medium .el-radio-button__inner {
  margin: 0 3px;
}
</style>
