{"version":3,"file":"index.81dd0ed0.mjs","sources":["../../../../pages/register/index.vue"],"sourcesContent":["<template>\n  <NuxtLayout name=\"activity\">\n    <div class=\"page-register w\">\n      <div class=\"form_container\" v-if=\"!isSuccess\">\n        <div class=\"head_top\">\n          <span class=\"title\">注册账号</span>\n          <span\n          >已有账号，<NuxtLink to=\"/login\"\n          ><span class=\"blue_text\">立即登录 ></span></NuxtLink\n          ></span>\n        </div>\n        <el-form\n          ref=\"formRef\"\n          :model=\"form\"\n          :rules=\"rules\"\n          size=\"large\"\n          class=\"form\"\n        >\n          <el-form-item prop=\"telCode\">\n            <div class=\"prefix_select_input\">\n              <el-input\n                v-model=\"form.phone\"\n                placeholder=\"请输入手机号\"\n              >\n                <template #prefix>\n                  <client-only>\n                    <el-popover\n                      ref=\"choosePop\"\n                      placement=\"bottom-start\"\n                      :width=\"336\"\n                      trigger=\"click\"\n                      :teleported=\"false\"\n                    >\n                      <template #reference>\n                          <span class=\"c_333 pointer pop_holder\" @click=\"openPopver\">\n                            <span class=\"ellipsis\">+{{ form.telCode }}</span>\n                            <i class=\"arrows-bottom\" />\n                          </span>\n                      </template>\n                      <el-scrollbar>\n                        <div class=\"te_code_enum\">\n                          <div v-for=\"item in opts.TelCodeEnum\" :key=\"item.standardDesc\" class=\"te_code_enum_item\" @click=\"handleSelectTelCode(item)\">\n                              <span>\n                                <span class=\"mgr10\"> {{ item.codeDesc }}</span>\n                                <span>{{ item.standardDesc }}</span>\n                              </span>\n                            <i v-if=\"item.code + item.standardDesc === form.telCode + opts.country\" class=\"iconfont icon-correct blue font12\" />\n                          </div>\n                        </div>\n                      </el-scrollbar>\n                    </el-popover>\n                  </client-only>\n                </template>\n              </el-input>\n            </div>\n          </el-form-item>\n          <el-form-item prop=\"verificationCode\">\n            <el-input v-model=\"form.verificationCode\" placeholder=\"短信验证码\">\n              <template #prefix>\n                <span class=\"iconfont icon-icon_Code\"></span>\n              </template>\n              <template #suffix>\n                <el-button type=\"text\" @click=\"getCode\">{{ txt }}</el-button>\n              </template>\n            </el-input>\n          </el-form-item>\n          <el-form-item prop=\"loginPwd\">\n            <el-input\n              type=\"password\"\n              show-password\n              v-model=\"form.loginPwd\"\n              placeholder=\"密码由6-20位大写和小写字母和数字组成\"\n            >\n              <template #prefix>\n                <el-icon class=\"el-input__icon\"><lock /></el-icon>\n              </template>\n            </el-input>\n          </el-form-item>\n          <el-form-item prop=\"repeatPwd\">\n            <el-input\n              type=\"password\"\n              show-password\n              v-model=\"opts.repeatPwd\"\n              placeholder=\"确认密码\"\n            >\n              <template #prefix>\n                <el-icon class=\"el-input__icon\"><lock /></el-icon>\n              </template>\n            </el-input>\n          </el-form-item>\n          <el-form-item>\n            <el-checkbox v-model=\"form.isAgreement\"\n            >我已阅读并同意<span class=\"blue_text\" @click=\"openAgreementModel\">《用户协议》</span></el-checkbox\n            >\n          </el-form-item>\n        </el-form>\n        <el-button class=\"submit\" type=\"primary\" @click=\"submitForm(formRef)\"\n        >注册</el-button\n        >\n      </div>\n      <div class=\"success_tips\" v-else>\n        <img src=\"~/assets/images/success.png\" alt=\"\" />\n        <div class=\"desc\">注册成功</div>\n        <p>{{ downtime }} 秒后自动跳转至登录页面</p>\n        <el-button class=\"btn\" type=\"primary\" @click=\"toLogin\"\n        >立即登录</el-button\n        >\n      </div>\n      <client-only>\n        <agreement v-model=\"agreementModel.visible\"/>\n      </client-only>\n    </div>\n  </NuxtLayout>\n</template>\n<script setup>\nimport { ElMessage } from \"element-plus\";\nimport { Iphone, Lock } from \"@element-plus/icons-vue\";\nimport { useUserStore } from \"~/stores/user\";\nimport { getMsg, userRegister } from \"@/api/user\";\nimport cookie from \"@/utils/cookies\";\nlet cookieData = cookie.getShop()\nuseHead({\n  title: '注册中心-' + cookieData.shopName\n})\nconst agreementModel = reactive({\n  visible:false\n})\nconst openAgreementModel = ()=>{\n  agreementModel.visible = true\n}\nconst store = useUserStore();\nconst { getEnumList, setToken, getUserView, getRsaCode } = store;\nconst router = useRouter();\n\nlet opts = reactive({\n  TelCodeEnum: \"\",\n  country: '中国',\n  repeatPwd: ''\n});\nconst formRef = ref(\"\");\nlet form = reactive({\n  telCode: \"86\",\n  phone: \"\",\n  verificationCode: \"\",\n  loginPwd: \"\",\n  isAgreement: false,\n});\n\nconst checkPwd = (rule, value, callback) => {\n  var passwordreg =\n    /^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/;\n  if (!value) {\n    return callback(new Error(\"请输入密码\"));\n  }\n  if (!passwordreg.test(value) || value.length > 20 || value.length < 6) {\n    callback(new Error(\"密码必须由6-20位大写和小写字母和数字组成\"));\n  } else {\n    callback();\n  }\n};\n\nconst checkRepeatPwd = (rule, value, callback) => {\n  if (!opts.repeatPwd) {\n    return callback(new Error(\"请确认密码\"));\n  }\n  if (opts.repeatPwd !== form.loginPwd) {\n    callback(new Error(\"两次密码不一致\"));\n  } else {\n    callback();\n  }\n};\nconst rules = reactive({\n  telCode: [\n    {\n      required: true,\n      message: \"请选择国家/地区\",\n      trigger: \"change\",\n    },\n  ],\n  phone: [\n    {\n      required: true,\n      message: \"请输入手机号\",\n      trigger: \"blur\",\n    },\n  ],\n  verificationCode: [\n    {\n      required: true,\n      message: \"请输入验证码\",\n      trigger: \"blur\",\n    },\n  ],\n  loginPwd: [\n    {\n      validator: checkPwd,\n      trigger: \"blur\",\n    },\n  ],\n  repeatPwd: [\n    {\n      validator: checkRepeatPwd,\n      trigger: \"blur\",\n    },\n  ]\n});\n\nonMounted(() => {\n  getEnumList(\"TelCodeEnum\", \"arr\").then((res) => {\n    opts.TelCodeEnum = res;\n  });\n});\nconst choosePop = ref(null)\nconst openPopver = () => {\n  const activeIndex = opts.TelCodeEnum.findIndex((item) => {\n    return item.code + item.standardDesc === form.telCode + opts.country\n  });\n  const activeItem = opts.TelCodeEnum.splice(activeIndex, 1);\n  opts.TelCodeEnum.unshift(activeItem[0]);\n}\nconst handleSelectTelCode = (row) => {\n  form.telCode = row.code;\n  opts.country = row.standardDesc;\n  choosePop.value.hide()\n}\n\n// 获取系统信息\nconst getOsInfo = () => {\n  const userAgent = navigator.userAgent.toLowerCase();\n  let name = \"Unknown\";\n  let version = \"Unknown\";\n  if (userAgent.indexOf(\"win\") > -1) {\n    name = \"Windows\";\n    if (userAgent.indexOf(\"windows nt 5.0\") > -1) {\n      version = \"Windows 2000\";\n    } else if (\n      userAgent.indexOf(\"windows nt 5.1\") > -1 ||\n      userAgent.indexOf(\"windows nt 5.2\") > -1\n    ) {\n      version = \"Windows XP\";\n    } else if (userAgent.indexOf(\"windows nt 6.0\") > -1) {\n      version = \"Windows Vista\";\n    } else if (\n      userAgent.indexOf(\"windows nt 6.1\") > -1 ||\n      userAgent.indexOf(\"windows 7\") > -1\n    ) {\n      version = \"Windows 7\";\n    } else if (\n      userAgent.indexOf(\"windows nt 6.2\") > -1 ||\n      userAgent.indexOf(\"windows 8\") > -1\n    ) {\n      version = \"Windows 8\";\n    } else if (userAgent.indexOf(\"windows nt 6.3\") > -1) {\n      version = \"Windows 8.1\";\n    } else if (userAgent.indexOf(\"windows nt 6.2\") > -1 || userAgent.indexOf(\"windows nt 10.0\") > -1) {\n      version = \"Windows 10\";\n    } else {\n      version = \"Unknown\";\n    }\n  } else if (userAgent.indexOf(\"iphone\") > -1) {\n    name = \"Iphone\";\n  } else if (userAgent.indexOf(\"mac\") > -1) {\n    name = \"Mac\";\n  } else if (\n    userAgent.indexOf(\"x11\") > -1 ||\n    userAgent.indexOf(\"unix\") > -1 ||\n    userAgent.indexOf(\"sunname\") > -1 ||\n    userAgent.indexOf(\"bsd\") > -1\n  ) {\n    name = \"Unix\";\n  } else if (userAgent.indexOf(\"linux\") > -1) {\n    if (userAgent.indexOf(\"android\") > -1) {\n      name = \"Android\";\n    } else {\n      name = \"Linux\";\n    }\n  } else {\n    name = \"Unknown\";\n  }\n  return {\n    name,\n    version,\n  };\n};\n\nconst txt = ref(\"获取验证码\");\nconst disabled = ref(false);\nconst timeOut = () => {\n  let num = 60;\n  disabled.value = true;\n  txt.value = num;\n  let nt = setInterval(() => {\n    if (num <= 0) {\n      clearInterval(nt);\n      disabled.value = false;\n      txt.value = \"重新获取\";\n    } else {\n      num--;\n      txt.value = num + \"s\";\n    }\n  }, 1000);\n};\n\nconst getCode = () => {\n  if (disabled.value) return;\n  if (!/^1\\d{10,10}$/.test(parseInt(form.phone))) {\n    ElMessage.error(\"请输入正确的手机号\");\n    return false;\n  }\n  getMsg({\n    phone: form.phone,\n    telCode: form.telCode,\n    verificationCodeType: 1,\n  }).then((res) => {\n    timeOut();\n  });\n};\n\nconst isSuccess = ref(false);\nconst downtime = ref(5);\nconst submitForm = (formEl) => {\n  const data = {};\n\n  const { name: osName, version: osVersion } = getOsInfo();\n  data.os = osName;\n  data.osVersion = osVersion;\n  if (!formEl) return;\n  formEl.validate((valid) => {\n    if (valid) {\n      if (!form.isAgreement) {\n        ElMessage.error(\"请阅读并同意用户协议\");\n        return;\n      }\n      // userRegister({\n      //   clientType: 1,\n      //   ...form,\n      //   ...data,\n      // }).then((res) => {\n      //   if (res) {\n      //     isSuccess.value = true;\n      //     const timer = setInterval(() => {\n      //       downtime.value -= 1;\n      //       if (downtime.value < 1) {\n      //         clearInterval(timer);\n      //         toLogin();\n      //       }\n      //     }, 1000);\n      //   }\n      // });\n      getRsaCode(form.loginPwd).then(code => {\n        form.loginEncryption = code\n        form.loginPwd = undefined\n        userRegister({\n          clientType: 1,\n          ...form,\n          ...data\n        }).then((res) => {\n          if (res) {\n            isSuccess.value = true\n            const timer = setInterval(() => {\n              downtime.value -= 1\n              if (downtime.value < 1) {\n                clearInterval(timer)\n                toLogin()\n              }\n            }, 1000)\n          }\n        })\n      })\n    } else {\n      // console.log(\"error submit!\");\n      return false;\n    }\n  });\n};\nconst toLogin = () => {\n  router.push({ path: \"/login\" });\n};\n</script>\n<style lang=\"scss\">\n.page-register {\n  .el-select {\n    width: 100%;\n    .el-input__inner {\n      text-align: right;\n    }\n  }\n  .el-input__icon {\n    color: #333;\n  }\n}\n</style>\n<style lang=\"scss\" scoped>\n.page-register {\n  height: calc(100vh - 66px - 70px);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  .form_container {\n    width: 440px;\n    height: 490px;\n    border-radius: 10px;\n    background: #fff;\n    padding: 30px;\n    position: relative;\n    .head_top {\n      display: flex;\n      justify-content: space-between;\n      .title {\n        font-size: 16px;\n        font-weight: 700;\n      }\n    }\n    .form {\n      margin-top: 30px;\n    }\n    span {\n      color: #333;\n    }\n    .submit {\n      width: 100%;\n      height: 50px;\n    }\n  }\n  .success_tips {\n    width: 680px;\n    height: 460px;\n    border-radius: 10px;\n    background: #fff;\n    padding: 70px 0;\n    text-align: center;\n    img {\n      margin: auto;\n    }\n    .desc {\n      font-size: 16px;\n      margin-top: 20px;\n    }\n    p {\n      color: #999;\n      margin-top: 10px;\n    }\n    .btn {\n      width: 380px;\n      height: 50px;\n      margin-top: 50px;\n      font-size: 14px;\n    }\n  }\n}\n.blue_text {\n  color: #2256F6 !important;\n}\n\n//修改选中后文本的颜色\n:deep(.el-checkbox__input.is-checked+.el-checkbox__label){\n  color:#333!important;\n}\n</style>\n"],"names":["cookieData","cookie","getShop","useHead","title","shopName","agreementModel","reactive","visible","openAgreementModel","store","useUserStore","getEnumList","setToken","getUserView","getRsaCode","router","useRouter","opts","TelCodeEnum","country","repeatPwd","formRef","ref","form","telCode","phone","verificationCode","loginPwd","isAgreement","rules","required","message","trigger","validator","rule","value","callback","Error","test","length","onMounted","then","res","choosePop","openPopver","activeIndex","findIndex","item","code","standardDesc","activeItem","splice","unshift","txt","disabled","getCode","parseInt","getMsg","verificationCodeType","num","nt","setInterval","clearInterval","ElMessage","error","isSuccess","downtime","submitForm","formEl","data","name","osName","version","osVersion","userAgent","navigator","toLowerCase","indexOf","getOsInfo","os","validate","valid","loginEncryption","userRegister","clientType","timer","toLogin","push","path","row","hide"],"mappings":"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"}