<template>
    <div>
        <el-form class="el-row demo-ruleForm" ref="formRef" v-if="domainOptions.length>0">
            <GuipFormItem column="column" class="combo-formItem w540" :label="label" :class="label ? '' : 'combo-formItem-nolabel'">
                <div slot="formDom" class="self-drop-wrap flex w540">
                    <GuipInput v-model="prefix" style="width: 60%;" placeholder="仅支持数字、字母" @blur="inputEnd"></GuipInput>
                    <!-- 只用作选中内容展示 -->
                    <div @click="toggleDrop" class="point flex appendDrop" style="width: 40%;">{{domain}}</div>
                </div>
                <!--触发 真实下拉操作 -->
                <!-- valueKey="id" displayKey="name" 不添加时，默认取值 value、label-->
                <CustomDropdown slot="formDom" ref="dropDomain" width="100%" v-model="domain"
                                :options="domainOptions" @change="changeSelect" placeholder="请选择">
                    <template #normal>
                        <div class="flex flex-between noraml-jump">
                            <div class="left">
                                <b>添加新域名</b>
                                <p class="one ft12">域名需要在阿里云完成ICP备案并解析到平台服务器</p>
                                <p class="ft12">如果暂时未准备好，可先选用平台免费域名，随时支持域名修改。 </p>
                            </div>
                            <div class="right">
                                <GuipButton size="form" @click="bindNewDomain">前往绑定</GuipButton>
                            </div>
                        </div>
                    </template>
                </CustomDropdown>
            </GuipFormItem>
        </el-form>

        <GuipDialog :dialogVisible="dialogVisible" :show-close-button="false" :showFooterButton="false"
                    type="center" title="温馨提示">
            <div class="domain-wrap">
                <el-form class="el-row demo-ruleForm" ref="formRef" :rules="rules" :model="formData">
                    <p class="p-info">设置自己的域名，需要做 2 步站外操作。如果暂时未准备好，或打算稍后设置，可以先选用平台免费域名，平台随时支持域名修改。 </p>
                    <p class="p-title"><span>1.</span>域名必须在阿里云完成 ICP 备案</p>
                    <p class="p-desc mb18">备案网址：https://beian.aliyun.com</p>
                    <p class="p-title"><span>2.</span>域名要解析到平台服务器上</p>
                    <p class="p-desc mb18">记录类型：CNAME；记录值：lunwen.kuailedns.com</p>
                    <p class="p-title"><span>3.</span>域名填写</p>
                    <GuipInput width="458px" placeholder="填写完整域名" class="mb18" prop="domain" v-model="formData.domain"></GuipInput>
                    <p class="p-title"><span>4.</span>域名备案号</p>
                    <GuipInput width="458px" placeholder="填写备案号" class="mb32" prop="beian" v-model="formData.beian"></GuipInput>
                    <div class="flex flex-between">
                        <GuipButton type="ignore" :btnstyle="{'width': '247px', 'border-radius': '4px'}" @click="handleCancel">先用平台免费域名</GuipButton>
                        <GuipButton type="primary" :btnstyle="{'width': '247px', 'border-radius': '4px'}" :loading="show_step" @click="handleConfirm" >准备完毕，验证自有域名</GuipButton>
                    </div>
                    <div class="domain-step" v-if="show_step">
                        <div class="flex mr12">
                            <GuipButton v-if="step1 === 1" type="text" :loading="true" :btnstyle="{'color': '#1675FF', 'font-size': '12px'}">
                                验证域名解析
                            </GuipButton>
                            <GuipButton v-if="step1 === 2" type="text" :btnstyle="{'color': '#1675FF', 'font-size': '12px'}">
                                <img src="@/assets/site/step_success.png" alt="" class="mr5"><span>域名已解析</span>
                            </GuipButton>
                            <GuipButton v-if="step1 === 3" type="text" :btnstyle="{'color': '#FF4D4F', 'font-size': '12px'}">
                                <img src="@/assets/site/step_error.png" alt="" class="mr5"><span>域名未解析</span>
                            </GuipButton>
                        </div>
                        <div class="flex">
                            <img src="@/assets/site/next-line.png" alt="">
                        </div>
                        <div class="flex ml12">
                            <GuipButton v-if="step2 === 0" type="text" :btnstyle="{'color': '#8A9099', 'font-size': '12px'}">
                                <img src="@/assets/site/step_wait.png" alt="" class="mr5"><span>验证ICP备案</span>
                            </GuipButton>
                            <GuipButton v-if="step2 === 1" type="text" :loading="true" :btnstyle="{'color': '#1675FF', 'font-size': '12px'}">
                                验证ICP备案
                            </GuipButton>
                            <GuipButton v-if="step2 === 3" type="text" :btnstyle="{'color': '#FF4D4F', 'font-size': '12px'}">
                                <img src="@/assets/site/step_error.png" alt="" class="mr5"><span>ICP未备案</span>
                            </GuipButton>
                        </div>
                    </div>
                </el-form>
            </div>
        </GuipDialog>
    </div>
</template>
<script>
import GuipInput from "@/components/GuipInput.vue";
import GuipDialog from "@/components/GuipDialog.vue";
import GuipButton from "@/components/GuipButton.vue";
import GuipFormItem from "@/components/GuipFormItem.vue";
import CustomDropdown from "@/components/CustomDropdown.vue";

export default {
  name: 'domainBind',
  props:['label'],
  components: {
      CustomDropdown, GuipFormItem,
      GuipButton,
      GuipDialog,
      GuipInput
  },
  data(){
    return {
        domainOptions:[],
        prefix: '',
        domain: '',
        dialogVisible: false,
        formData: {
            domain: '',
            beian: '',
        },
        rules: {
            domain: [
                { required: true, message: '请输入域名', trigger: 'blur' },
                {
                    pattern: /^[a-zA-Z0-9-]+\.[a-zA-Z]{2,}$/,
                    message: '格式错误，请输入正确域名',
                    trigger: 'blur'
                }
            ],
            beian: [
                { required: true, message: '请输入域名备案号', trigger: 'blur' }
            ],
        },
        show_step: false,
        step1: 1, //1正在验证 2验证成功 3验证失败
        step2: 0 //0等待验证 1正在验证 3验证失败
    }
  },
  watch: {
    formData: {
      deep: true,
      handler() {
        this.show_step = false;
        this.step1 = 1
        this.step2 = 0
      }
    }
  },
  mounted(){
      this.getDomainList()
  },
  methods:{
      getDomainList() {
          const that = this
          that.$http('POST', '/agentnew/ajax_get_private_domains', {}, {
              headers: {
                  'Auth': this.token
              }
          }).then(response => {
              if(response.status){
                  this.domain = response.data[0]
                  that.domainOptions = response.data.map(item => ({
                      label: item,
                      value: item
                  }));
                  return true
              }
              that.$message.error(response.info);
          }).catch(error => {
              console.error(error, 'error')
          })
      },
      toggleDrop(e) {
          this.$refs.dropDomain.toggleDropdown(e)
      },
      inputEnd(){
          this.$emit('handleEvent', {
              prefix: this.prefix,
              domain: this.domain,
          })
      },
      changeSelect() {
          this.$emit('handleEvent', {
              prefix: this.prefix,
              domain: this.domain,
          })
      },
      bindNewDomain(){
          this.dialogVisible = true
      },
      handleCancel(){
          this.dialogVisible = false
      },
      handleConfirm(){
          this.$refs.formRef.validate((valid) => {
              if (valid) this.verfiyDNS();
          });
      },
      verfiyDNS() {
          this.show_step = true

          const that = this
          that.$http('POST', '/agentnew/ajax_check_dns', {
              domain: that.formData.domain
          }, {
              headers: {
                  'Auth': this.token
              }
          }).then(response => {
              if(response.status){
                  that.step1 = 2
                  that.step2 = 1
                  that.verfiyBeian()
              } else {
                  that.step1 = 3
              }
          }).catch(error => {
              console.error(error, 'error')
          })
      },
      verfiyBeian(){
          const that = this
          that.$http('POST', '/agentnew/ajax_check_beian', {
              domain: that.formData.domain
          },{
              headers:{
                  'Auth': this.token
              }
          }).then(response => {
              if(response.status){
                  that.addDomain()
              } else {
                  that.step2 = 3
              }

          }).catch(error => {
              console.error(error, 'error')
          })
      },
      addDomain(){
          const that = this
          that.$http('POST', '/agentnew/ajax_add_domain', {
              domain: that.formData.domain,
              beian: that.formData.beian
          },{
              headers:{
                  'Auth': this.token
              }
          }).then(response => {
              if(response.status){
                  that.domain = that.formData.domain
                  that.domainOptions.unshift({
                      label: that.formData.domain,
                      value: that.formData.domain
                  })
                  that.show_step = false
                  that.dialogVisible = false
                  that.$message.success('添加成功');
                  return true
              }
              that.$message.error(response.info);
          }).catch(error => {
              console.error(error, 'error')
          })
      },
  }
}
</script>
<style scoped lang="scss">
.w540 {
  width: 540px!important;
}
.mb18{
  margin-bottom: 18px;
}
.mb32{
  margin-bottom: 32px;
}
.mr12{
  margin-right: 12px;
}
.ml12{
  margin-left: 12px;
}
.mr5{
  margin-right: 5px;
}

.combo-formItem-nolabel{
  ::v-deep {
    .form-item-top{
      display: none;
      height: 0;
      margin: 0;
    }
  }
}

.combo-formItem {
  ::v-deep {
    .form-item-bottom {
      position: relative;
    }

    .select-trigger {
      background: #F6F7FA;
      border-color: transparent;
    }

    .is-open .select-trigger {
      border-color: #006AFF;
    }

    .el-input__inner {
      border-radius: 2px 0 0 2px;
    }
  }

  .self-drop-wrap {
    position: absolute;
    z-index: 1;
    width: 100%;
  }

  .appendDrop {
    height: 38px;
    align-items: center;
    border-radius: 0 2px 2px 0;
    border: 1px solid #DFE2E6;
    border-left-color: transparent;
    justify-content: center;
    box-sizing: border-box;
    padding: 0 30px 0 12px;
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;

    &:hover {
      border: 1px solid #006AFF;
    }
  }
}
.domain-wrap{
  letter-spacing: 0.08em;
  font-size: 14px;
  .p-info{
    color: #626573;
    margin-bottom: 24px;
  }
  .p-title{
    color: #23242B;
    margin-bottom: 8px;
    span{
      width: 23px;
      display: inline-block;
    }
  }
  .p-desc{
    color: #8A9099;
    padding-left: 23px;
  }

  .domain-step{
    margin-top: 16px;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 12px;
  }
}
</style>