<template>
  <div class="registerContainer">
    <div class="login-title">{{ $t('login.userRegister') }}</div>
    <el-form :model="registerForm" :rules="rules" ref="registerForm" class="login-form">
      <el-form-item prop="inviteCode">
        <el-input
          @keyup.enter.native="handleRegister"
          v-model="registerForm.inviteCode"
          :auto-complete="off"
          placeholder="请输入邀请码：JL10000000"
        ></el-input>
      </el-form-item>
      <el-form-item prop="companyName">
        <el-input
          @keyup.enter.native="handleRegister"
          v-model="registerForm.companyName"
          :auto-complete="off"
          placeholder="请输入您的企业名"
        ></el-input>
      </el-form-item>
      <el-form-item prop="companyTid">
        <el-input
          @keyup.enter.native="handleRegister"
          v-model="registerForm.companyTid"
          :auto-complete="off"
          placeholder="统一社会信用代码"
        ></el-input>
      </el-form-item>
      <el-form-item prop="account">
        <el-input
          @keyup.enter.native="handleRegister"
          v-model.trim="registerForm.account"
          :auto-complete="off"
          placeholder="请输入您的手机号"
        ></el-input>
      </el-form-item>
      <el-form-item prop="code">
        <el-input
          @keyup.enter.native="handleRegister"
          v-model.trim="registerForm.code"
          auto-complete="off"
          placeholder="请输入验证码"
          class="code-input"
        ></el-input>
        <div class="login-code">
          <el-button :disabled="msgKey" type="text" @click="handleSend" class="msg-text">{{msgText}}</el-button>
        </div>
      </el-form-item>
      <el-form-item prop="password">
        <el-input
          type="password"
          @keyup.enter.native="handleRegister"
          v-model.trim="registerForm.password"
          :auto-complete="off"
          placeholder="请输入6-20位包含数字和字母的新密码"
        ></el-input>
      </el-form-item>
      <div>
        <el-button
          size="small"
          type="primary"
          @click="handleRegister"
          class="register-submit"
        >{{$t('login.registerSubmit')}}</el-button>
      </div>
    </el-form>
    <div class="reg-bottom">
      <div>
        <el-checkbox v-model="checked"></el-checkbox>
        <span @click="checked = !checked" class="reg-agreement">
          同意德阳市智慧就业服务平台用工
          <a
            @click.stop
            href="/blackboard/account/companyagreement.html"
            target="blank"
          >用户协议及隐私政策</a>
        </span>
      </div>
      <div>
        <a @click="$emit('change','login')">{{$t('login.directLogin')}}</a>
      </div>
    </div>
  </div>
</template>

  <script>
import { mapGetters } from "vuex";
import topLang from "@/page/index/top/top-lang";
import { isvalidatemobile } from "@/util/validate";
import { reg, sendValidate,regCheckIdentity } from "@/api/tenant/reg";
import md5 from "js-md5";

export default {
  name: "login",
  components: {
    topLang,
  },
  data () {
    const validatePhone = (rule, value, callback) => {
      if (isvalidatemobile(value)[0]) {
        callback(new Error(isvalidatemobile(value)[1]));
      } else {
        callback();
      }
    };
    const validatePwd = (rule, value, callback) => {
      var re = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/;
      var match = value.match(re);
      if (value.length < 6 || value.length > 20 || !match) {
        callback(new Error("密码格式不正确"));
      } else {
        callback();
      }
    };
    const validateTcode = (rule, value, callback) => {
      if(value){
        regCheckIdentity(value).then(()=>{
          callback();
        })
        .catch((err)=>{
          callback(err);
        })
      }
      else{
        callback(new Error('请输入社会统一信用代码'))
      }

    }
    const validateChecked = (rule, value, callback) => {
      if (!value) {
        callback(new Error('请阅读并同意《服务及隐私协议》'));
      }
      else {
        callback();
      }
    }
    return {
      msgText: "获取验证码",
      msgTime: 120,
      msgKey: false,
      checked: false,
      registerForm: {
        inviteCode: "",
        account: "",
        password: "",
        code: "",
        checked: false,
      },
      rules: {
        companyName: [
          { required: true, trigger: "blur", message: "请输入用工单位" },
        ],
        companyTid: [
          {
            required: true,
            whitespace: true,
            message: "请输入统一社会信用代码",
            trigger: "blur",
          },
          { validator: validateTcode, trigger: "blur" },
        ],
        account: [
          { required: true, trigger: "blur", validator: validatePhone },
        ],
        inviteCode: [
          { required: true, message: "请输入邀请码", trigger: "blur" },
          { min: 10, message: "长度不少于10个字符", trigger: "blur" },
        ],
        code: [
          { required: true, message: "请输入短信验证码", trigger: "blur" },
        ],
        password: [
          { required: true, message: "请输入密码" },
          { trigger: "blur", validator: validatePwd },
        ],
        checked: [
          {
            validator: validateChecked, trigger: 'blur'
          }
        ]
      },
      passwordType: "password",
    };
  },
  watch: {},
  mounted () { },
  computed: {
    ...mapGetters(["website", "tagWel"]),
  },
  props: [],
  methods: {
    showPassword () {
      this.passwordType === ""
        ? (this.passwordType = "password")
        : (this.passwordType = "");
    },
    /*发送短信验证码 */
    handleSend () {
      const inviteCode = new Promise((resolve) => {
        this.$refs.registerForm.validateField("inviteCode", resolve);
      });
      const account = new Promise((resolve) => {
        this.$refs.registerForm.validateField("account", resolve);
      });
      Promise.all([inviteCode, account]).then((err) => {
        if (err[0] || err[1]) {
          return;
        }
        this.msgKey = true;
        this.msgText = "发送中...";
        sendValidate(this.registerForm.account, 0)
          .then(() => {
            this.msgText = "剩余" + 120 + "s";
            this.msgKey = true;
            const time = setInterval(() => {
              this.msgTime--;
              this.msgText = "剩余" + this.msgTime + "s";
              if (this.msgTime === 0) {
                this.msgTime = 120;
                this.msgText = "重新获取";
                this.msgKey = false;
                clearInterval(time);
              }
            }, 1000);
          })
          .catch(() => {
            this.msgText = "重新获取";
            this.msgKey = false;
          });
      });
    },
    handleRegister () {
      this.$refs.registerForm.validate((valid) => {
        if (valid) {
          if (this.checked) {
            const loading = this.$loading({
              lock: true,
              text: "注册中,请稍后。。。",
              spinner: "el-icon-loading",
            });
            reg(
              this.registerForm.inviteCode,
              this.registerForm.companyName,
              this.registerForm.companyTid,
              this.registerForm.code,
              this.registerForm.account,
              md5(this.registerForm.password)
            ).then(
              () => {
                this.$message({
                  message: "注册成功",
                  type: "success",
                });
                loading.close();
                setTimeout(() => {
                  this.$emit("change", "login");
                }, 1000);
              },
              () => {
                loading.close();
              }
            );
          } else {
            this.$message.error("请阅读并同意德阳市智慧就业服务平台用工用户协议及隐私政策");
          }
        }
      });
    },
  },
};
</script>

<style lang="scss">
@import "@/styles/login.scss";
.reg-bottom {
  margin: 0 30px 0 30px;
  display: flex;
  font-family: PingFangSC-Regular;
  font-size: 14px;
  color: #999999;
  letter-spacing: 0;
  text-align: left;
  line-height: 14px;
  justify-content: space-between;
  flex-wrap: wrap;
  cursor: pointer;
}
.reg-bottom > div {
  padding-top: 9px;
}

.reg-bottom a {
  color: #5aa0fa;
}
</style>
