{"version":3,"file":"index.913dfe16.mjs","sources":["../../../../assets/images/login/left_img.png","../../../../components/login/bindingWx.vue","../../../../pages/login/index.vue","../../../../assets/images/login/app_1.png","../../../../assets/images/login/pc_1.png"],"sourcesContent":["export default \"__VITE_ASSET__926198bc__\"","<template>\n  <div v-if=\"modelValue\">\n    <!-- <el-dialog :model-value=\"modelValue\" :before-close=\"handleClose\" :title=\"title\" append-to-body custom-class=\"footer_border_dialog\" width=\"560px\"> -->\n    <div class=\"model_title\">{{ title }}</div>\n    <div class=\"change_phone_box\">\n      <el-form ref=\"form\" :model=\"map\" :rules=\"opts.rules\" size=\"large\">\n        <el-form-item prop=\"phone\">\n          <div class=\"prefix_select_input\">\n            <el-input v-model=\"map.phone\" placeholder=\"请输入手机号\">\n              <template #prefix>\n                <div v-if=\"popover.visible\" class=\"popover_mask\" @click=\"closePopover\" />\n                <client-only>\n                  <el-popover v-model:visible=\"popover.visible\" :teleported=\"false\" :width=\"380\" placement=\"bottom-start\" trigger=\"click\">\n                    <template #reference>\n                      <span class=\"c_333 pointer pop_holder pop_border\" @click=\"openPopver('telCode')\">\n                        <span class=\"ellipsis\">+{{ map.telCode }}</span>\n                        <i class=\"arrows-bottom\" />\n                      </span>\n                    </template>\n                    <el-scrollbar>\n                      <div class=\"te_code_enum\">\n                        <div\n                          v-for=\"item in opts.TelCodeEnum\"\n                          :key=\"item.standardDesc\"\n                          class=\"te_code_enum_item\"\n                          @click=\"handleSelectTelCode(item, 'telCode')\"\n                        >\n                          <span>\n                            <span class=\"mgr10\"> {{ item.codeDesc }}</span>\n                            <span>{{ item.standardDesc }}</span>\n                          </span>\n                          <i v-if=\"item.code + item.standardDesc === map.telCode + opts.newCountry\" 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=\"map.verificationCode\" placeholder=\"短信验证码\">\n            <template #prefix>\n              <span class=\"iconfont icon-comment\"></span>\n            </template>\n            <template #suffix>\n              <el-button class=\"c_999\" type=\"text\" @click=\"getCode\">{{ txt }} </el-button>\n            </template>\n          </el-input>\n        </el-form-item>\n        <el-form-item prop=\"loginPwd\" v-if=\"!isExist\">\n          <el-input type=\"password\" show-password v-model=\"map.loginPwd\" placeholder=\"请输入登录密码\"></el-input>\n        </el-form-item>\n      </el-form>\n    </div>\n    <!-- <template #footer>\n      <div class=\"footer_dialog\">\n        <el-button plain @click=\"handleClose\">取消</el-button> -->\n    <el-button class=\"submit\" :loading=\"ctrl.loading\" type=\"primary\" @click=\"handleSubmit\">完成</el-button>\n  </div>\n  <!-- </template>\n  </el-dialog> -->\n</template>\n\n<script setup>\nimport { reactive, ref, watch } from 'vue'\nimport { useUserStore } from '../../stores/user'\nimport { getMsg } from '../../api/user'\nimport { ElMessage } from 'element-plus'\nimport { wxBinding, checkPhoneExist } from '@/api/system'\n\nconst props = defineProps({\n  modelValue: {\n    type: Boolean,\n    default: false,\n  },\n  title: {\n    type: String,\n    default: '',\n  },\n  userInfo: {\n    type: Object,\n    default: function () {\n      return {}\n    },\n  },\n})\n\nconst emit = defineEmits(['update:modelValue', 'callback'])\nconst form = ref(null)\nconst validatePhone = async (rule, value, callback) => {\n  // 验证当前绑定手机号\n  if (!map.telCode) {\n    callback(new Error('请输入选择区号'))\n  } else if (!value) {\n    callback(new Error('请输入手机号'))\n  } else {\n    callback()\n  }\n}\n\nconst validateCode = (rule, value, callback) => {\n  // 验证验证码\n  if (!value) {\n    callback(new Error('请输入验证码'))\n  } else {\n    callback()\n  }\n}\nconst opts = reactive({\n  title: '',\n  temp: 2,\n  TelCodeEnum: [],\n  country: '中国',\n  newCountry: '中国',\n  rules: {\n    phone: [{ required: true, validator: validatePhone, trigger: 'blur' }],\n    verificationCode: [{ required: true, validator: validateCode, trigger: 'blur' }],\n    loginPwd: [\n      {\n        required: true,\n        message: '请输入密码',\n        trigger: 'blur',\n      },\n    ],\n  },\n  timer: null,\n})\nconst { getEnumList, setToken, shopData } = useUserStore()\nconst map = reactive({\n  phone: '',\n  telCode: 86,\n  verificationCode: '',\n  loginPwd: '',\n})\nconst ctrl = reactive({\n  loading: false,\n})\nconst popover = reactive({\n  visible: false,\n})\nconst isExist = ref(true) // 用户是否存在\nconst isDisabled = ref(false) // 用户是否禁用\nonMounted(() => {\n  getEnumList('TelCodeEnum', 'arr').then((res) => {\n    opts.TelCodeEnum = res\n  })\n})\nwatch(\n  () => props.modelValue,\n  (val) => {\n    if (val) {\n      // 初始值设置\n    } else {\n      // 清除表单验证和定时器\n      if (opts.timer) {\n        clearInterval(opts.timer)\n        opts.timer = null\n      }\n      if (form.value) {\n        form.value.resetFields()\n        map.telCode = 86\n      }\n    }\n  }\n)\nconst txt = ref('获取验证码')\nconst disabled = ref(false)\nconst timeOut = () => {\n  // 验证码倒计时\n  let num = 60\n  disabled.value = true\n  txt.value = num\n  opts.timer = setInterval(() => {\n    if (num <= 0) {\n      clearInterval(opts.timer)\n      opts.timer = null\n      disabled.value = false\n      txt.value = '重新获取'\n    } else {\n      num--\n      txt.value = num + 's'\n    }\n  }, 1000)\n}\nconst getCode = async () => {\n  // 获取验证码\n  if (disabled.value) return\n  if (!/^1\\d{10,10}$/.test(parseInt(map.phone))) {\n    ElMessage.error('请输入正确的手机号')\n    return false\n  }\n  const checkRes = await checkPhoneExist({ phone: map.phone, telCode: map.telCode })\n  if (checkRes) {\n    isExist.value = checkRes.userExist\n    isDisabled.value = checkRes.disabled\n    // 用户存在且状态正常， 用户不存在且平台允许注册，可获取验证码\n    if (isExist.value && isDisabled.value) {\n      ElMessage.success('用户已被禁用，不可绑定')\n    } else if (!isExist.value && shopData && !shopData.config.allowUserRegister) {\n      ElMessage.success('平台用户人数已达上限，暂不可注册')\n    } else {\n      getMsg({\n        phone: map.phone,\n        telCode: map.telCode,\n        verificationCodeType: 4,\n      }).then((res) => {\n        if (res) {\n          ElMessage.success('短信已发送，请注意查收！')\n          timeOut()\n        }\n      })\n    }\n  }\n}\nconst closePopover = () => {\n  popover.visible = false\n}\nconst openPopver = (key) => {\n  // 打开选择区号\n  const activeIndex = opts.TelCodeEnum.findIndex((item) => {\n    return item.code + item.standardDesc === map[key || 'telCode'] + opts[key ? 'newCountry' : 'country']\n  })\n  const activeItem = opts.TelCodeEnum.splice(activeIndex, 1)\n  opts.TelCodeEnum.unshift(activeItem[0])\n  popover.visible = true\n}\nconst handleSelectTelCode = (row, key) => {\n  // 选择区号\n  map[key || 'telCode'] = row.code\n  opts[key ? 'newCountry' : 'country'] = row.standardDesc\n  closePopover()\n}\nconst handleSubmit = () => {\n  // 绑定新手机\n  form.value.validate((valid) => {\n    if (valid) {\n      // 用户存在且状态正常或用户不存在且平台允许注册，可绑定微信或注册并绑定微信\n      if (isExist.value && isDisabled.value) {\n        ElMessage.success('用户已被禁用，不可绑定')\n        return false\n      } else if (!isExist.value && shopData && !shopData.config.allowUserRegister ) {\n        ElMessage.success('平台用户人数已达上限，暂不可注册')\n        return false\n      } else{\n        // ctrl.loading = true\n        wxBinding({ ...map, ...props.userInfo, clientType: 1 })\n          .then((res) => {\n            // ctrl.loading = false\n            if (res) {\n              setToken(res.token)\n              ElMessage.success('绑定手机成功')\n              emit('callback')\n              handleClose()\n            }\n          })\n          .catch(() => {\n            ctrl.loading = false\n          })\n      }\n    }\n  })\n}\nconst handleClose = () => {\n  // 关闭\n  emit('update:modelValue', false)\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.model_title {\n  padding: 30px 0;\n  font-size: 16px;\n  line-height: 20px;\n}\n.change_tip {\n  margin-bottom: 20px;\n  margin-left: 45px;\n}\n\n.footer_dialog {\n  text-align: center;\n\n  .el-button {\n    width: 80px;\n    height: 32px;\n    border-radius: 4px;\n  }\n}\n.submit {\n  width: 100%;\n  height: 50px;\n  margin-top: 14px;\n  font-size: 16px;\n}\n</style>\n","<template>\n  <NuxtLayout name=\"activity\">\n    <div class=\"page-login w\">\n      <div class=\"left\">\n        <img src=\"~/assets/images/login/left_img.png\" alt=\"\" />\n      </div>\n      <div class=\"form_container\" v-if=\"loginPlat === 1\">\n        <!-- <img class=\"login_plat\" src=\"~/assets/images/login/app.png\" alt=\"\" /> -->\n        <div class=\"tab_wrapper\" v-if=\"shopConfig.enableWxPcLogin\">\n          <img class=\"tab_img pointer\" src=\"~/assets/images/login/app_1.png\" alt=\"\" @click=\"handleChangePlat(2)\" />\n          <div class=\"login_tips\">微信登录</div>\n        </div>\n        <el-tabs v-model=\"tabName\" @change=\"tabChange\">\n          <el-tab-pane label=\"账号登录\" name=\"1\">\n            <div class=\"pwdForm\">\n              <div class=\"form_box\">\n                <el-form ref=\"pwdFormRef\" :model=\"pwdForm\" :rules=\"pwdRules\" class=\"demo-pwdForm\" size=\"large\">\n                  <client-only>\n                    <el-form-item prop=\"phone\">\n                      <div class=\"prefix_select_input\">\n                        <el-input v-model=\"pwdForm.phone\" placeholder=\"请输入手机号\" @keyup.enter=\"submitForm(pwdFormRef)\">\n                          <template #prefix>\n                            <el-popover ref=\"choosePop1\" placement=\"bottom-start\" :width=\"380\" trigger=\"click\" :teleported=\"false\">\n                              <template #reference>\n                                <span class=\"c_333 pointer pop_holder\" @click=\"openPopver\">\n                                  <span class=\"ellipsis\">+{{ pwdForm.telCode }}</span>\n                                  <i class=\"arrows-bottom\" />\n                                </span>\n                              </template>\n                              <el-scrollbar>\n                                <div class=\"te_code_enum\">\n                                  <div\n                                    v-for=\"item in opts.TelCodeEnum\"\n                                    :key=\"item.standardDesc\"\n                                    class=\"te_code_enum_item\"\n                                    @click=\"handleSelectTelCode(item)\"\n                                  >\n                                    <span>\n                                      <span class=\"mgr10\"> {{ item.codeDesc }}</span>\n                                      <span>{{ item.standardDesc }}</span>\n                                    </span>\n                                    <i\n                                      v-if=\"item.code + item.standardDesc === pwdForm.telCode + opts.country\"\n                                      class=\"iconfont icon-correct blue font12\"\n                                    />\n                                  </div>\n                                </div>\n                              </el-scrollbar>\n                            </el-popover>\n                          </template>\n                        </el-input>\n                      </div>\n                    </el-form-item>\n                    <el-form-item prop=\"loginPwd\">\n                      <el-input type=\"password\" show-password v-model=\"pwdForm.loginPwd\" placeholder=\"请输入密码\" @keyup.enter=\"submitForm(pwdFormRef)\">\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=\"imageVerification\" v-if=\"imgVerification.img\">\n                      <div class=\"img_verification\">\n                        <el-input v-model=\"pwdForm.imageVerification\" placeholder=\"请输入验证码\" @keyup.enter=\"submitForm(pwdFormRef)\"> </el-input>\n                        <img @click=\"getImgVerification\" :src=\"imgVerification.img\" alt=\"\" />\n                      </div>\n                    </el-form-item>\n                  </client-only>\n                </el-form>\n                <div class=\"row\" prop=\"rememberLogin\">\n                  <el-checkbox v-model=\"pwdForm.isAgreement\" size=\"default\">\n                    我已阅读并同意<span class=\"blue_text\" @click=\"agreementModel.visible = true\">《用户协议》</span>\n                  </el-checkbox>\n                  <div class=\"btn\">\n                    <NuxtLink to=\"/resetpwd\">\n                      <span class=\"blue\">忘记密码？</span>\n                    </NuxtLink>\n                  </div>\n                </div>\n              </div>\n              <el-button class=\"submit\" type=\"primary\" @keyup.enter=\"submitForm(pwdFormRef)\" @click=\"submitForm(pwdFormRef)\">登录</el-button>\n              <div class=\"btn register_btn\" v-if=\"store.shopData && store.shopData.config.allowUserRegister\">\n                <NuxtLink to=\"/register\">\n                  <span class=\"blue\">没有账号，我要注册 ></span>\n                </NuxtLink>\n              </div>\n            </div>\n          </el-tab-pane>\n          <el-tab-pane label=\"短信登录\" name=\"2\">\n            <div class=\"pwdForm\">\n              <div class=\"form_box\">\n                <el-form ref=\"codeFormRef\" :model=\"pwdForm\" :rules=\"codeRules\" class=\"demo-pwdForm\" size=\"large\">\n                  <el-form-item prop=\"telCode\">\n                    <div class=\"prefix_select_input\">\n                      <el-input v-model=\"pwdForm.phone\" placeholder=\"请输入手机号\" @keyup.enter=\"submitForm(codeFormRef)\">\n                        <template #prefix>\n                          <client-only>\n                            <el-popover ref=\"choosePop2\" placement=\"bottom-start\" :width=\"380\" trigger=\"click\" :teleported=\"false\">\n                              <template #reference>\n                                <span class=\"c_333 pointer pop_holder\" @click=\"openPopver\">\n                                  <span class=\"ellipsis\">+{{ pwdForm.telCode }}</span>\n                                  <i class=\"arrows-bottom\" />\n                                </span>\n                              </template>\n                              <el-scrollbar>\n                                <div class=\"te_code_enum\">\n                                  <div\n                                    v-for=\"item in opts.TelCodeEnum\"\n                                    :key=\"item.standardDesc\"\n                                    class=\"te_code_enum_item\"\n                                    @click=\"handleSelectTelCode(item)\"\n                                  >\n                                    <span>\n                                      <span class=\"mgr10\"> {{ item.codeDesc }}</span>\n                                      <span>{{ item.standardDesc }}</span>\n                                    </span>\n                                    <i\n                                      v-if=\"item.code + item.standardDesc === pwdForm.telCode + opts.country\"\n                                      class=\"iconfont icon-correct blue font12\"\n                                    />\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=\"pwdForm.verificationCode\" placeholder=\"短信验证码\" @keyup.enter=\"submitForm(codeFormRef)\">\n                      <template #prefix>\n                        <span class=\"iconfont icon-comment\"></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=\"imageVerification\" v-if=\"imgVerification.img\">\n                    <div class=\"img_verification\">\n                      <el-input v-model=\"pwdForm.imageVerification\" placeholder=\"请输入验证码\" @keyup.enter=\"submitForm(codeFormRef)\"> </el-input>\n                      <img @click=\"getImgVerification\" :src=\"imgVerification.img\" alt=\"\" />\n                    </div>\n                  </el-form-item>\n                </el-form>\n                <div class=\"row\">\n                  <el-checkbox v-model=\"pwdForm.isAgreement\" size=\"default\">\n                    我已阅读并同意<span class=\"blue_text\" @click=\"agreementModel.visible = true\">《用户协议》</span>\n                  </el-checkbox>\n                  <div class=\"btn\">\n                    <Nuxt-Link to=\"/resetpwd\">\n                      <span class=\"blue\">忘记密码？</span>\n                    </Nuxt-Link>\n                  </div>\n                </div>\n              </div>\n              <el-button class=\"submit\" type=\"primary\" @click=\"submitForm(codeFormRef)\">登录</el-button>\n              <div class=\"btn register_btn\" v-if=\"store.shopData && store.shopData.config.allowUserRegister\">\n                <NuxtLink to=\"/register\">\n                  <span class=\"blue\">没有账号，我要注册 ></span>\n                </NuxtLink>\n              </div>\n            </div>\n          </el-tab-pane>\n        </el-tabs>\n        <!-- <div class=\"other_login\">\n          <p>其他登录方式</p>\n          <div class=\"icon_list\">\n            <img\n              v-for=\"(item, index) in loginIconList\"\n              :src=\"item.icon\"\n              alt=\"\"\n              :key=\"index\"\n            />\n          </div>\n        </div> -->\n      </div>\n      <div class=\"form_container\" v-if=\"loginPlat === 2\">\n        <!-- <img class=\"login_plat\" src=\"~/assets/images/login/pc.png\" alt=\"\" /> -->\n        <div class=\"tab_wrapper\">\n          <img class=\"tab_img pointer\" src=\"~/assets/images/login/pc_1.png\" alt=\"\" @click=\"handleChangePlat(1)\" />\n          <div class=\"login_tips\">账号登录</div>\n        </div>\n        <div class=\"drcode\" v-if=\"!bindingWxModel.visible\">\n          <iframe class=\"qr_code_iframe\" v-if=\"wxLoginUrl\" :src=\"wxLoginUrl\" frameborder=\"0\"></iframe>\n          <!-- <qrcode class=\"qr_code\" v-if=\"wxLoginUrl\" :value=\"wxLoginUrl\" :size=\"200\" alt=\"微信扫码登录\" /> -->\n          <div class=\"desc\">\n            <p>微信登录成功即代表同意《用户协议》</p>\n          </div>\n        </div>\n        <binding-wx\n          v-model=\"bindingWxModel.visible\"\n          :user-info=\"bindingWxModel.userInfo\"\n          @callback=\"hanldeClosebindingWxModel\"\n          :title=\"bindingWxModel.title\"\n        ></binding-wx>\n        <!-- <div class=\"other_login\">\n          <p>其他登录方式</p>\n          <div class=\"icon_list\">\n            <img\n              v-for=\"(item, index) in loginIconList\"\n              :src=\"item.icon\"\n              alt=\"\"\n              :key=\"index\"\n            />\n          </div>\n        </div> -->\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, userLoginPwd, userLoginCode, getImageVerification } from '@/api/user'\nimport { setSession, getStore, setStore } from '~/utils/storage'\nimport { getWxAuthLoginUrl, wxLogin } from '@/api/system'\nimport bindingWx from '@/components/login/bindingWx.vue'\nimport config from '@/config'\nimport cookie from \"@/utils/cookies\";\nlet cookieData = cookie.getShop()\n\nuseHead({\n  title: '登录中心-' + cookieData.shopName\n});\nconst store = useUserStore()\nconst { getEnumList, setToken, getUserView, getShopInfo, getRsaCode } = store\nconst router = useRouter()\nconst route = useRoute()\nconst agreementModel = reactive({\n  visible: false,\n})\nlet loginPlat = ref(1)\nlet tabName = ref('1')\nconst tabChange = (type) => {\n  if (type === '1') {\n  } else {\n  }\n}\nlet errorNum = ref(0) // 记录登录错误次数，超过两次须填写图形验证码校验\nlet opts = reactive({\n  TelCodeEnum: '',\n  country: '中国',\n})\nlet ipInfo = reactive({})\nconst wxLoginUrl = ref('')\nconst handleChangePlat = (type) => {\n  let redirectUrl = config.url ? window.location.protocol + '//' + config.url : window.location.href\n  loginPlat.value = type\n  if (type === 2) {\n    getWxAuthLoginUrl({ redirectUrl, wapAuth: false }).then((res) => {\n      if (res) {\n        wxLoginUrl.value = res\n      }\n    })\n  }\n}\nconst loginIconList = [\n  {\n    icon: '../../assets/images/login/icon_wx.png',\n    name: 'WeiXin',\n  },\n  {\n    icon: '../../assets/images/login/icon_wb.png',\n    name: 'WeiBo',\n  },\n  {\n    icon: '../../assets/images/login/icon_qq.png',\n    name: 'QQ',\n  },\n  {\n    icon: '../../assets/images/login/icon_zfb.png',\n    name: 'Alipay',\n  },\n]\n\nlet imgVerification = reactive({\n  img: '',\n  token: '',\n})\n\nconst pwdFormRef = ref('pwdFormRef')\nlet pwdForm = reactive({\n  telCode: '86',\n  phone: '',\n  loginPwd: '',\n  verificationCode: '',\n  imageVerification: '',\n  isAgreement: false,\n})\n\nconst pwdRules = 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  loginPwd: [\n    {\n      required: true,\n      message: '请输入密码',\n      trigger: 'blur',\n    },\n  ],\n  imageVerification: [\n    {\n      required: true,\n      message: '请输入图形验证码',\n      trigger: 'blur',\n    },\n  ],\n})\n\nconst codeFormRef = ref('codeFormRef')\n\nconst codeRules = 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  imageVerification: [\n    {\n      required: true,\n      message: '请输入图形验证码',\n      trigger: 'blur',\n    },\n  ],\n})\nconst shopConfig = ref({})\nconst wxCode = ref('')\nonMounted(() => {\n  wxCode.value = route.query.code\n  if (wxCode.value) {\n    loginPlat.value = 2\n    wxCodeLogin()\n  }\n  errorNum.value = parseInt(getStore('errorNum')) || 0\n  if (errorNum.value >= 2) {\n    // 获取图形验证码\n    getImgVerification()\n  }\n  jsonp('//ipinfo.io/json', (res) => {\n    ipInfo = res\n    setSession('ipInfo', ipInfo)\n  })\n  getEnumList('TelCodeEnum', 'arr').then((res) => {\n    opts.TelCodeEnum = res\n  })\n  getShopInfo().then((res) => {\n    shopConfig.value = res.config\n  })\n})\nconst bindingWxModel = reactive({\n  visible: false,\n  title: '绑定手机号',\n  userInfo: {},\n})\nconst hanldeClosebindingWxModel = async () => {\n  bindingWxModel.visible = false\n  const userInfo = await getUserView()\n  if (userInfo) {\n    if (route.query.redirect) {\n      let redirectUrl = decodeURIComponent(route.query.redirect)\n      if (redirectUrl.indexOf('?') !== -1) {\n        const redirectUrlArr = redirectUrl.split('?')\n        redirectUrl = redirectUrlArr[0]\n        const query = {}\n        // console.log(redirectUrlArr[1].split(\"&\").length);\n        const queryArr = redirectUrlArr[1].split('&')\n        for (let i = 0; i < queryArr.length; i++) {\n          const keyValue = queryArr[i].split('=')\n          query[keyValue[0]] = keyValue[1]\n        }\n        router.replace({ path: redirectUrl, query })\n      } else {\n        router.replace({ path: redirectUrl })\n      }\n    } else {\n      router.replace({ path: '/' })\n    }\n  }\n}\nconst wxCodeLogin = () => {\n  const data = {}\n  data.loginIp = ipInfo.ip\n  data.city = ipInfo.city\n  const { name: osName, version: osVersion } = getOsInfo()\n  const { name: browserName, version: browserVersion } = getBrowserInfo()\n  data.os = osName\n  data.osVersion = osVersion\n  data.browser = browserName\n  data.browserVersion = browserVersion\n  wxLogin({ ...data, wapAuth: false, code: wxCode.value, clientType: 1 }).then(async (res) => {\n    if (res) {\n      if (res.bindUser) {\n        setToken(res.token)\n        const userInfo = await getUserView()\n        if (userInfo) {\n          if (route.query.redirect) {\n            let redirectUrl = decodeURIComponent(route.query.redirect)\n            if (redirectUrl.indexOf('?') !== -1) {\n              const redirectUrlArr = redirectUrl.split('?')\n              redirectUrl = redirectUrlArr[0]\n              const query = {}\n              // console.log(redirectUrlArr[1].split(\"&\").length);\n              const queryArr = redirectUrlArr[1].split('&')\n              for (let i = 0; i < queryArr.length; i++) {\n                const keyValue = queryArr[i].split('=')\n                query[keyValue[0]] = keyValue[1]\n              }\n              router.replace({ path: redirectUrl, query })\n            } else {\n              router.replace({ path: redirectUrl })\n            }\n          } else {\n            router.replace({ path: '/' })\n          }\n        }\n      } else {\n        //         bindingWxModel.userInfo = {\n        //           gender: 1,\n        // headImg: \"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKr2HLyKK8n9xTnHGnqg7OZHV393Ynty7EniagIcYichEictnE65X3WFmN26UTmWswhCql0Q0vbn38zw/132\",\n        // nickname: \"_@\",\n        // unionId: \"o-s341LL6PQtbxNc2sPH1rAaH7QQ\"\n        //         }\n        bindingWxModel.userInfo = res.authInfo\n        bindingWxModel.visible = true\n        bindingWxModel.title = '绑定手机号'\n      }\n    }\n  })\n}\nconst choosePop1 = ref(null)\nconst choosePop2 = ref(null)\nconst openPopver = () => {\n  const activeIndex = opts.TelCodeEnum.findIndex((item) => {\n    return item.code + item.standardDesc === pwdForm.telCode + opts.country\n  })\n  const activeItem = opts.TelCodeEnum.splice(activeIndex, 1)\n  opts.TelCodeEnum.unshift(activeItem[0])\n}\nconst handleSelectTelCode = (row) => {\n  pwdForm.telCode = row.code\n  opts.country = row.standardDesc\n  choosePop1.value.hide()\n  choosePop2.value.hide()\n}\n\nfunction generateJsonpCallback() {\n  return `jsonpcallback_${Date.now()}_${Math.floor(Math.random() * 100000)}`\n}\n\nfunction jsonp(url, callback) {\n  const funcName = generateJsonpCallback()\n  window[funcName] = callback\n\n  const script = document.createElement('script')\n\n  // 判断 URL 是否已有参数\n  const separator = url.includes('?') ? '&' : '?'\n\n  // 拼接 callback 参数\n  script.src = `${url}${separator}callback=${funcName}`\n  script.type = 'text/javascript'\n\n  document.body.appendChild(script)\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 (userAgent.indexOf('windows nt 5.1') > -1 || userAgent.indexOf('windows nt 5.2') > -1) {\n      version = 'Windows XP'\n    } else if (userAgent.indexOf('windows nt 6.0') > -1) {\n      version = 'Windows Vista'\n    } else if (userAgent.indexOf('windows nt 6.1') > -1 || userAgent.indexOf('windows 7') > -1) {\n      version = 'Windows 7'\n    } else if (userAgent.indexOf('windows nt 6.2') > -1 || userAgent.indexOf('windows 8') > -1) {\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 (userAgent.indexOf('x11') > -1 || userAgent.indexOf('unix') > -1 || userAgent.indexOf('sunname') > -1 || userAgent.indexOf('bsd') > -1) {\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}\nconst getBrowserInfo = () => {\n  /* eslint-disable */\n  const Sys = {}\n  const ua = navigator.userAgent.toLowerCase()\n  let s\n  ;(s = ua.match(/rv:([\\d.]+)\\) like gecko/))\n    ? (Sys.ie = s[1])\n    : (s = ua.match(/msie ([\\d]+)/))\n    ? (Sys.ie = s[1])\n    : (s = ua.match(/edge\\/([\\d]+)/))\n    ? (Sys.edge = s[1])\n    : (s = ua.match(/firefox\\/([\\d]+)/))\n    ? (Sys.firefox = s[1])\n    : (s = ua.match(/(?:opera|opr).([\\d]+)/))\n    ? (Sys.opera = s[1])\n    : (s = ua.match(/chrome\\/([\\d]+)/))\n    ? (Sys.chrome = s[1])\n    : (s = ua.match(/version\\/([\\d]+).*safari/))\n    ? (Sys.safari = s[1])\n    : 0\n  // 根据关系进行判断\n  if (Sys.ie)\n    return {\n      name: 'IE',\n      version: Sys.ie,\n    }\n  if (Sys.edge)\n    return {\n      name: 'EDGE',\n      version: Sys.edge,\n    }\n  if (Sys.firefox)\n    return {\n      name: 'Firefox',\n      version: Sys.firefox,\n    }\n  if (Sys.chrome)\n    return {\n      name: 'Chrome',\n      version: Sys.chrome,\n    }\n  if (Sys.opera)\n    return {\n      name: 'Opera',\n      version: Sys.opera,\n    }\n  if (Sys.safari)\n    return {\n      name: 'Safari',\n      version: Sys.safari,\n    }\n  return {\n    name: 'Unkonwn',\n    version: '0.0.0',\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(pwdForm.phone))) {\n    ElMessage.error('请输入正确的手机号')\n    return false\n  }\n  getMsg({\n    phone: pwdForm.phone,\n    telCode: pwdForm.telCode,\n    verificationCodeType: 2,\n  }).then((res) => {\n    timeOut()\n  })\n}\n\nconst submitForm = (formEl) => {\n  const data = {}\n  if (!pwdForm.isAgreement) {\n    ElMessage.warning('请阅读并同意用户协议')\n    return\n  }\n  data.loginIp = ipInfo.ip\n  data.city = ipInfo.city\n  const { name: osName, version: osVersion } = getOsInfo()\n  const { name: browserName, version: browserVersion } = getBrowserInfo()\n  data.os = osName\n  data.osVersion = osVersion\n  data.browser = browserName\n  data.browserVersion = browserVersion\n  if (!formEl) return\n  formEl.validate((valid) => {\n    if (valid) {\n      if (tabName.value === '1') {\n        if (imgVerification.token) {\n          data.imageVerificationToken = imgVerification.token\n          data.imageVerification = pwdForm.imageVerification\n        }\n\n        getRsaCode(pwdForm.loginPwd).then(code => {\n          data.loginEncryption = code\n          pwdForm.loginPwd = undefined\n          userLoginPwd({\n            clientType: 1,\n            ...pwdForm,\n            ...data,\n          })\n            .then(async (res) => {\n              if (res && res.token) {\n                errorNum.value = 0\n                // console.log(res.token);\n                setStore('errorNum', errorNum.value)\n                setToken(res.token)\n                const userInfo = await getUserView()\n                if (userInfo) {\n                  if (route.query.redirect) {\n                    let redirectUrl = decodeURIComponent(route.query.redirect)\n                    if (redirectUrl.indexOf('?') !== -1) {\n                      const redirectUrlArr = redirectUrl.split('?')\n                      redirectUrl = redirectUrlArr[0]\n                      const query = {}\n                      // console.log(redirectUrlArr[1].split(\"&\").length);\n                      const queryArr = redirectUrlArr[1].split('&')\n                      for (let i = 0; i < queryArr.length; i++) {\n                        const keyValue = queryArr[i].split('=')\n                        query[keyValue[0]] = keyValue[1]\n                      }\n                      router.replace({ path: redirectUrl, query })\n                    } else {\n                      router.replace({ path: redirectUrl })\n                    }\n                  } else {\n                    router.replace({ path: '/' })\n                  }\n                }\n              }\n            })\n            .catch((err) => {\n              // console.log(err)\n              if (err.code === 999) {\n                errorNum.value += 1\n                setStore('errorNum', errorNum.value)\n                if (errorNum.value >= 2 || imgVerification.token) {\n                  // 获取图形验证码\n                  getImgVerification()\n                }\n              } else if (err.code === 321) {\n                getImgVerification()\n              }\n            })\n        })\n      } else {\n        if (imgVerification.token) {\n          data.imageVerificationToken = imgVerification.token\n          data.imageVerification = pwdForm.imageVerification\n        }\n        userLoginCode({\n          clientType: 1,\n          ...pwdForm,\n          ...data,\n        })\n          .then(async (res) => {\n            if (res && res.token) {\n              errorNum.value = 0\n              setStore('errorNum', errorNum.value)\n              setToken(res.token)\n              const userInfo = await getUserView()\n              if (userInfo) {\n                if (route.query.redirect) {\n                  router.push({\n                    path: decodeURIComponent(route.query.redirect),\n                  })\n                } else {\n                  router.push({ path: '/' })\n                }\n              }\n            }\n          })\n          .catch((err) => {\n            if (err.code === 999) {\n              errorNum.value += 1\n              setStore('errorNum', errorNum.value)\n              if (errorNum.value >= 2 || imgVerification.token) {\n                // 获取图形验证码\n                getImgVerification()\n              }\n            } else if (err.code === 321) {\n              getImgVerification()\n            }\n          })\n      }\n    } else {\n      // console.log(\"error submit!\");\n      return false\n    }\n  })\n}\nconst getImgVerification = () => {\n  getImageVerification().then((res) => {\n    if (res && res.token) {\n      imgVerification.img = res.img\n      imgVerification.token = res.token\n      // console.log(imgVerification);\n    }\n  })\n}\n</script>\n<style lang=\"scss\">\n.icon-comment {\n  position: relative;\n  left: -1px;\n  top: 1px;\n}\n.page-login {\n  .el-tabs__item {\n    font-size: 16px;\n    font-weight: 700;\n  }\n  .el-tabs__nav-wrap::after {\n    background-color: #fff;\n  }\n  .el-tabs__active-bar {\n    width: 10px !important;\n    height: 3px;\n    border-radius: 2px;\n    left: 27px;\n  }\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-login {\n  height: calc(100vh - 66px - 70px);\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding-left: 60px;\n\n  .form_box {\n    height: 230px;\n  }\n  .demo-pwdForm {\n    min-height: 120px;\n  }\n  .form_container {\n    width: 440px;\n    height: 470px;\n    border-radius: 10px;\n    background: #fff;\n    padding: 30px;\n    padding-top: 20px;\n    position: relative;\n    .title {\n      font-size: 16px;\n      font-weight: 700;\n    }\n    .drcode {\n      text-align: center;\n      img {\n        margin: auto;\n      }\n      .desc {\n        margin-top: 20px;\n        b {\n          color: #2256f6;\n        }\n      }\n    }\n    span {\n      color: #333;\n    }\n    .login_plat {\n      position: absolute;\n      top: 0;\n      right: 0;\n      cursor: pointer;\n    }\n    .row {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      font-size: 12px;\n      a {\n        margin-left: 5px;\n      }\n    }\n    .btn {\n      font-size: 14px !important;\n    }\n    .blue {\n      color: #2256f6 !important;\n    }\n    .register_btn {\n      text-align: center;\n      margin-top: 20px;\n    }\n    .remember_checkbox {\n      :deep(.el-checkbox__label) {\n        font-size: 14px;\n      }\n    }\n    .img_verification {\n      display: flex;\n      justify-content: space-between;\n      img {\n        width: 185px;\n        height: 40px;\n        margin-left: 20px;\n      }\n    }\n    .submit {\n      width: 100%;\n      height: 50px;\n      margin-top: 14px;\n      font-size: 16px;\n    }\n    .other_login {\n      position: absolute;\n      left: 0;\n      bottom: 30px;\n      width: 100%;\n      text-align: center;\n      .icon_list {\n        margin-top: 20px;\n        display: flex;\n        justify-content: center;\n        img {\n          margin: 0 10px;\n          cursor: pointer;\n        }\n      }\n    }\n  }\n}\n.pwdForm {\n  min-height: 316px;\n  margin-top: 20px;\n}\n.blue_text {\n  color: #2256f6 !important;\n}\n.qr_code {\n  margin: 0 auto;\n}\n.tab_wrapper {\n  position: absolute;\n  top: 0;\n  right: 0;\n  display: flex;\n  flex-direction: row-reverse;\n  align-items: center;\n\n  .login_tips {\n    position: relative;\n    left: 4px;\n    padding: 4px 8px;\n    color: var(--el-color-primary);\n    font-size: 13px;\n    line-height: 17px;\n    background: #fff;\n    border: 1px solid rgba(34, 86, 246, 0.3);\n    border-radius: 6px;\n\n    &::after {\n      content: \"\";\n      position: absolute;\n      right: -11px;\n      top: 50%;\n      transform: translate(-50%, -50%) rotate(45deg);\n      width: 10px;\n      height: 10px;\n      border: 1px solid rgba(34, 86, 246, 0.3);\n      border-left: none;\n      border-bottom: none;\n      background: #fff;\n    }\n  }\n}\n.qr_code_iframe {\n  width: 100%;\n  height: 400px;\n}\n\n//修改选中后文本的颜色\n:deep(.el-checkbox__input.is-checked+.el-checkbox__label){\n  color:#333!important;\n}\n\n</style>\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADYAAAA2CAYAAACMRWrdAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPNSURBVHgB3Zo/aBNRGMC/L3dJc9VCChWkhZZuEQqdKlQQnFpwUqiTRewmDqZ10UEwnbqJOoibxeqkoF2EdqiCg0OpdChYF0mFuihYWohpcrnn+y55bf7cvyR3yb3+IOTfvUt+9977vu/dHTLGHiLiPNjwl7FE9N/hTUVRRxmDSwxYAgES0G4QNoFBxmBsuQDFT72alnHcnIsx/pyulSOheF5PGQxmOyLiAkNczBuFeTtBIUYcyWVz+RQDTIdRqBrkPWjMn9Zii3XfVIgR6VxeB/5JGiQCEdJaV7RqxNWKga4bUCgaIBu1cnVihKxyAMW57nj8Mb2yFCOklEPYO4ypw72IexG7bVQ1AlElAlLBIBHL5WfppW2PCaTruXKvuYoR8g3L4pzqZTMaloQXuV9/GOz+tv++vw9h4Ez1ZwdZgO0d++Pb0w2QHELwCqI66qnHBG499+ydwR9FcOP21Qh/KA21mZ6IwP1pBbyBmYbECDs5Ourjtwpmj1y5aH90X60YsM+3/fI8avbEyI0Cfy61ofdObVYfqeb+XeHzzNNQrMRuWO5nS8eHhpnoDSvWtxmsf2P8QDBTiEgOAdy77t6Ghnh/H7jDo2NT8VyGVND0vwu7XEv/LMxyDc+xuh2oQsw9srWTlsXMnXC5mNJQcA0cX8SIwbMKpK5F4c1H3YxgVlDktErelJzt2hBOCd8O38SIO1Ol3c0sFBy3o1wk8tHYOTSlZhZ01za0rVcaTtBeePFBh60f1n+Uctf0ZAQGymK7vASjBHyQdSqpqtt4IRAxotOFc2CxutOpwNc5VrdzLkfl0JO3x3OuR6PySa2r8O1Y2zBgadWApynVtpa0IvBDOj6iwIUR1QwQ9Fj7WgoUVDR7gbandk7LGivaMlYoWn5/3QVbL6OQHERzzSaCBQlOPdBhacXfBN+2SSDmXM+p6s8pt23/LPWkgMRbpa2zm+QmzztP67UNBhN3dVj+3FpEDTR4WDFzWS3PL/vqhNhtsdfaLkbQnAs6z3VEzPzhgFcFHRMzfzzAVUHHV4liVeA3He0xAc25sSQVuIxXJKVCVxS8YhXQ77FSEQRWBDeDCCiVZ7CI2vdeCJUY4Ve0DN2ZGL9WBaE8xeSHXGhPDLYqF+rTua3Ihf6SZbNyUlyLbUJuU5qLzI3IMcPYkerquVc5hvg+dAnaC25JHJk+HIpasVGcrokj4qIW1zKS3chxjPWwxAwYBfO2I2nFiFo5uhNOK9/mJ7UYIeR4pKi6vU/KOVYLyfFHVRCUvscqSNNtwOLNSRIjjuROxFCsgeTgP8fLuSG1twtTAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADYAAAA2CAYAAACMRWrdAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANcSURBVHgB3ZpPSBRRHMe/v53ZbdcyVigQA8UuGQQexFsHKbBjRHYr6Nyh1c5B67FLVNcOCdLJDnoJ7JJgdPHiQchDxBoYgYKSZLo7O6/3m90xd9zR+bc78/zAsqM7s7Of+f3eb96b90gI8YyIJuHClhD59N/9h5qmDwqBEQGRJyCPdkNYhkDJFGKugupCVy5XOnZ3KSbke9Epx0LZslEwBcZjETkBQTRVNiuTboK2GHMgt7tXLghQMYlCjZCMoDl5LpeZOvLJITGmuFc2IP9ThEIQoZg7k27IOKcYDMNEpWpCNZxyR8QYVeWA6kRHNvuSt5qKMUrKEbb3M3p/F9F2ym0fXU8hraWgFAL5zF55nDddI2ajXOTqUTtRjFEvLasTnnJNtbQk0gc9RcxGnchRSfezO0eOcZNb3wCevjGwtOr5Wnmi5wLhdUHDQB95O4Bkf9ZPxGzcIjf6xMDPTYGBXkLnWUTG0leBzg7g44u09e4FXxE7OKhJ5HZ2YUndGOKrG+hrXXn+rorpeRPr9YvmhcAVwVlQfu/WAn/e4xX1gx2lnT/ejwlV6pJcLUPnjJ2W8t6BJBFJY2C5jBZtJQxLZHnU262hcC+NpBBp+Xo8pmPlO1et+KMXecu/dllLREFpyS9IQrWM9k56+Iul3OoPgbcfKgjL+iZ80zIxhtOyr1vg1Uw4Oe4r+qWlYgwXlNvXUzCqwe9z3J2anvdXkFouxvR1SzEDgYc8nQG6aW0Rs05U76F8WfEfudnFWrR6Lno/pm1i1smk3PI3M1Cbuz+awiUfbS3QeCws7xcMrP2qRY4Hp3OfTQwPEIavNv/hV+RQ5eaQv9tHWyNmMzaiyzaXstocj7YtMSn16I6GqIhFzDpxi0cFsYlZJ5dyG1u1SsnlfHbRsLYf3CL5Che9WMWYuzItuWcx88lAlMRSPJoR9aO9xIzro+44J+qBRZRyiXsSE5VcIh8xRSGX2JmGsHKJnkIJI5f4uaGgckpMegWQW1ZmNs+PnDDNNaVmz73KCaLZxHSp/HBS94uE0R97JzgIx82sEtFULpsrKbaQ4z/N05JKMCvWsiNlxRinHK+Ey9WX+SktxthyslI0LO9Tso05YTn5aiiCykfsEEVeBmz/cZrEmAO5U5GKDlgO/wAmWlJvGTP8zAAAAABJRU5ErkJggg==\""],"names":["_imports_0","URL","import","meta","url","href","form","ref","opts","reactive","title","temp","TelCodeEnum","country","newCountry","rules","phone","required","validator","async","rule","value","callback","map","telCode","Error","trigger","verificationCode","loginPwd","message","timer","getEnumList","setToken","shopData","useUserStore","ctrl","loading","popover","visible","isExist","isDisabled","onMounted","then","res","watch","props","modelValue","val","clearInterval","resetFields","txt","disabled","getCode","test","parseInt","ElMessage","error","checkRes","checkPhoneExist","userExist","success","config","allowUserRegister","getMsg","verificationCodeType","num","setInterval","timeOut","closePopover","handleSubmit","validate","valid","wxBinding","userInfo","clientType","token","emit","handleClose","catch","key","activeIndex","findIndex","item","code","standardDesc","activeItem","splice","unshift","row","cookieData","cookie","getShop","useHead","shopName","store","getUserView","getShopInfo","getRsaCode","router","useRouter","route","useRoute","agreementModel","loginPlat","tabName","tabChange","type","errorNum","ipInfo","wxLoginUrl","handleChangePlat","redirectUrl","window","location","protocol","getWxAuthLoginUrl","wapAuth","imgVerification","img","pwdFormRef","pwdForm","imageVerification","isAgreement","pwdRules","codeFormRef","codeRules","shopConfig","wxCode","query","wxCodeLogin","getStore","getImgVerification","funcName","Date","now","Math","floor","random","script","document","createElement","separator","includes","src","body","appendChild","jsonp","setSession","bindingWxModel","hanldeClosebindingWxModel","redirect","decodeURIComponent","indexOf","redirectUrlArr","split","queryArr","i","length","keyValue","replace","path","data","loginIp","ip","city","name","osName","version","osVersion","getOsInfo","browserName","browserVersion","getBrowserInfo","os","browser","wxLogin","bindUser","authInfo","choosePop1","choosePop2","openPopver","handleSelectTelCode","hide","userAgent","navigator","toLowerCase","Sys","ua","s","match","ie","edge","firefox","opera","chrome","safari","nt","submitForm","formEl","warning","imageVerificationToken","loginEncryption","userLoginPwd","setStore","err","userLoginCode","push","getImageVerification"],"mappings":"+YAAA,MAAeA,EAAA,GAAA,IAAAC,IAAA,wBAAAC,OAAAC,KAAAC,KAAAC,wmBC0FfC,EAAAC,EAAA,MAoBAC,EAAAC,EAAA,CACAC,MAAA,GACAC,KAAA,EACAC,YAAA,GACAC,QAAA,KACAC,WAAA,KACAC,MAAA,CACAC,MAAA,CAAA,CAAAC,UAAA,EAAAC,UA1BAC,MAAAC,EAAAC,EAAAC,KAEAC,EAAAC,QAEAH,EAGAC,IAFAA,EAAA,IAAAG,MAAA,WAFAH,EAAA,IAAAG,MAAA,WAKA,EAkBAC,QAAA,SACAC,iBAAA,CAAA,CAAAV,UAAA,EAAAC,UAhBA,CAAAE,EAAAC,EAAAC,KAEAD,EAGAC,IAFAA,EAAA,IAAAG,MAAA,UAGA,EAUAC,QAAA,SACAE,SAAA,CACA,CACAX,UAAA,EACAY,QAAA,QACAH,QAAA,UAIAI,MAAA,QAEAC,YAAAA,EAAAC,SAAAA,EAAAC,SAAAA,GAAAC,IACAX,EAAAd,EAAA,CACAO,MAAA,GACAQ,QAAA,GACAG,iBAAA,GACAC,SAAA,KAEAO,EAAA1B,EAAA,CACA2B,SAAA,IAEAC,EAAA5B,EAAA,CACA6B,SAAA,IAEAC,EAAAhC,GAAA,GACAiC,EAAAjC,GAAA,GACAkC,GAAA,KACAV,EAAA,cAAA,OAAAW,MAAAC,IACAnC,EAAAI,YAAA+B,CAAA,GACA,IAEAC,GACA,IAAAC,EAAAC,aACAC,IACAA,IAIAvC,EAAAsB,QACAkB,cAAAxC,EAAAsB,OACAtB,EAAAsB,MAAA,MAEAxB,EAAAe,QACAf,EAAAe,MAAA4B,cACA1B,EAAAC,QAAA,IAEA,IAGA,MAAA0B,EAAA3C,EAAA,SACA4C,EAAA5C,GAAA,GAkBA6C,EAAAjC,UAEA,GAAAgC,EAAA9B,MAAA,OACA,IAAA,eAAAgC,KAAAC,SAAA/B,EAAAP,QAEA,OADAuC,EAAAC,MAAA,cACA,EAEA,MAAAC,QAAAC,EAAA,CAAA1C,MAAAO,EAAAP,MAAAQ,QAAAD,EAAAC,UACAiC,IACAlB,EAAAlB,MAAAoC,EAAAE,UACAnB,EAAAnB,MAAAoC,EAAAN,SAEAZ,EAAAlB,OAAAmB,EAAAnB,MACAkC,EAAAK,QAAA,eACArB,EAAAlB,QAAAY,GAAAA,EAAA4B,OAAAC,kBAGAC,EAAA,CACA/C,MAAAO,EAAAP,MACAQ,QAAAD,EAAAC,QACAwC,qBAAA,IACAtB,MAAAC,IACAA,IACAY,EAAAK,QAAA,gBAxCA,MAEA,IAAAK,EAAA,GACAd,EAAA9B,OAAA,EACA6B,EAAA7B,MAAA4C,EACAzD,EAAAsB,MAAAoC,aAAA,KACAD,GAAA,GACAjB,cAAAxC,EAAAsB,OACAtB,EAAAsB,MAAA,KACAqB,EAAA9B,OAAA,EACA6B,EAAA7B,MAAA,SAEA4C,IACAf,EAAA7B,MAAA4C,EAAA,IACA,GACA,IAAA,EA0BAE,GACA,IAVAZ,EAAAK,QAAA,oBAaA,EAEAQ,EAAA,KACA/B,EAAAC,SAAA,CAAA,EAiBA+B,EAAA,KAEA/D,EAAAe,MAAAiD,UAAAC,IACA,GAAAA,EAAA,CAEA,GAAAhC,EAAAlB,OAAAmB,EAAAnB,MAEA,OADAkC,EAAAK,QAAA,gBACA,EACA,IAAArB,EAAAlB,OAAAY,IAAAA,EAAA4B,OAAAC,kBAEA,OADAP,EAAAK,QAAA,qBACA,EAGAY,EAAA,IAAAjD,KAAAsB,EAAA4B,SAAAC,WAAA,IACAhC,MAAAC,IAEAA,IACAX,EAAAW,EAAAgC,OACApB,EAAAK,QAAA,UACAgB,EAAA,YACAC,IACA,IAEAC,OAAA,KACA3C,EAAAC,SAAA,CAAA,GAGA,IACA,EAEAyC,EAAA,KAEAD,EAAA,qBAAA,EAAA,kwBA/CA,CAAAG,IAEA,MAAAC,EAAAxE,EAAAI,YAAAqE,WAAAC,GACAA,EAAAC,KAAAD,EAAAE,eAAA7D,EAAAwD,GAAA,WAAAvE,EAAAuE,EAAA,aAAA,aAEAM,EAAA7E,EAAAI,YAAA0E,OAAAN,EAAA,GACAxE,EAAAI,YAAA2E,QAAAF,EAAA,IACAhD,EAAAC,SAAA,CAAA,8NAEAkD,IAEAjE,GAFAwD,cAEA,WAAAS,EAAAL,KACA3E,EAAAuE,EAAA,aAAA,WAAAS,EAAAJ,kBACAhB,IAJA,IAAAoB,EAAAT,oiFCJA,IAAAU,EAAAC,EAAAC,UAEAC,EAAA,CACAlF,MAAA,QAAA+E,EAAAI,WAEA,MAAAC,EAAA5D,KACAH,YAAAA,EAAAC,SAAAA,EAAA+D,YAAAA,EAAAC,YAAAA,EAAAC,WAAAA,GAAAH,EACAI,EAAAC,IACAC,EAAAC,IACAC,EAAA7F,EAAA,CACA6B,SAAA,IAEA,IAAAiE,EAAAhG,EAAA,GACAiG,EAAAjG,EAAA,KACA,MAAAkG,EAAAC,IAAA,EAKA,IAAAC,EAAApG,EAAA,GACAC,GAAAC,EAAA,CACAG,YAAA,GACAC,QAAA,OAEA+F,GAAAnG,EAAA,IACA,MAAAoG,GAAAtG,EAAA,IACAuG,GAAAJ,IACA,IAAAK,EAAAlD,EAAAzD,IAAA4G,OAAAC,SAAAC,SAAA,KAAArD,EAAAzD,IAAA4G,OAAAC,SAAA5G,KACAkG,EAAAlF,MAAAqF,EACA,IAAAA,GACAS,EAAA,CAAAJ,cAAAK,SAAA,IAAA1E,MAAAC,IACAA,IACAkE,GAAAxF,MAAAsB,EACA,GAEA,EAqBA,IAAA0E,GAAA5G,EAAA,CACA6G,IAAA,GACA3C,MAAA,KAGA,MAAA4C,GAAAhH,EAAA,cACA,IAAAiH,GAAA/G,EAAA,CACAe,QAAA,KACAR,MAAA,GACAY,SAAA,GACAD,iBAAA,GACA8F,kBAAA,GACAC,aAAA,IAGA,MAAAC,GAAAlH,EAAA,CACAe,QAAA,CACA,CACAP,UAAA,EACAY,QAAA,WACAH,QAAA,WAGAV,MAAA,CACA,CACAC,UAAA,EACAY,QAAA,SACAH,QAAA,SAGAE,SAAA,CACA,CACAX,UAAA,EACAY,QAAA,QACAH,QAAA,SAGA+F,kBAAA,CACA,CACAxG,UAAA,EACAY,QAAA,WACAH,QAAA,WAKAkG,GAAArH,EAAA,eAEAsH,GAAApH,EAAA,CACAe,QAAA,CACA,CACAP,UAAA,EACAY,QAAA,WACAH,QAAA,WAGAV,MAAA,CACA,CACAC,UAAA,EACAY,QAAA,SACAH,QAAA,SAGAC,iBAAA,CACA,CACAV,UAAA,EACAY,QAAA,WACAH,QAAA,SAGA+F,kBAAA,CACA,CACAxG,UAAA,EACAY,QAAA,WACAH,QAAA,WAIAoG,GAAAvH,EAAA,IACAwH,GAAAxH,EAAA,IACAkC,GAAA,KACAsF,GAAA1G,MAAA+E,EAAA4B,MAAA7C,KACA4C,GAAA1G,QACAkF,EAAAlF,MAAA,EACA4G,MAEAtB,EAAAtF,MAAAiC,SAAA4E,EAAA,cAAA,EACAvB,EAAAtF,OAAA,GAEA8G,KAiHA,SAAA/H,EAAAkB,GACA,MAAA8G,EAJA,iBAAAC,KAAAC,SAAAC,KAAAC,MAAA,IAAAD,KAAAE,YAKAzB,OAAAoB,GAAA9G,EAEA,MAAAoH,EAAAC,SAAAC,cAAA,UAGAC,EAAAzI,EAAA0I,SAAA,KAAA,IAAA,IAGAJ,EAAAK,IAAA,GAAA3I,IAAAyI,aAAAT,IACAM,EAAAhC,KAAA,kBAEAiC,SAAAK,KAAAC,YAAAP,EACA,CA7HAQ,CAAA,oBAAAvG,IACAiE,GAAAjE,EACAwG,EAAA,SAAAvC,GAAA,IAEA7E,EAAA,cAAA,OAAAW,MAAAC,IACAnC,GAAAI,YAAA+B,CAAA,IAEAqD,IAAAtD,MAAAC,IACAmF,GAAAzG,MAAAsB,EAAAkB,MAAA,GACA,IAEA,MAAAuF,GAAA3I,EAAA,CACA6B,SAAA,EACA5B,MAAA,QACA+D,SAAA,CAAA,IAEA4E,GAAAlI,UACAiI,GAAA9G,SAAA,EAEA,SADAyD,IAEA,GAAAK,EAAA4B,MAAAsB,SAAA,CACA,IAAAvC,EAAAwC,mBAAAnD,EAAA4B,MAAAsB,UACA,IAAA,IAAAvC,EAAAyC,QAAA,KAAA,CACA,MAAAC,EAAA1C,EAAA2C,MAAA,KACA3C,EAAA0C,EAAA,GACA,MAAAzB,EAAA,CAAA,EAEA2B,EAAAF,EAAA,GAAAC,MAAA,KACA,IAAA,IAAAE,EAAA,EAAAA,EAAAD,EAAAE,OAAAD,IAAA,CACA,MAAAE,EAAAH,EAAAC,GAAAF,MAAA,KACA1B,EAAA8B,EAAA,IAAAA,EAAA,EACA,CACA5D,EAAA6D,QAAA,CAAAC,KAAAjD,EAAAiB,SACA,MACA9B,EAAA6D,QAAA,CAAAC,KAAAjD,GAEA,MACAb,EAAA6D,QAAA,CAAAC,KAAA,KAEA,EAEA/B,GAAA,KACA,MAAAgC,EAAA,CAAA,EACAA,EAAAC,QAAAtD,GAAAuD,GACAF,EAAAG,KAAAxD,GAAAwD,KACA,MAAAC,KAAAC,EAAAC,QAAAC,GAAAC,MACAJ,KAAAK,EAAAH,QAAAI,GAAAC,KACAX,EAAAY,GAAAP,EACAL,EAAAO,UAAAA,EACAP,EAAAa,QAAAJ,EACAT,EAAAU,eAAAA,EACAI,EAAA,IAAAd,EAAA7C,SAAA,EAAAjC,KAAA4C,GAAA1G,MAAAqD,WAAA,IAAAhC,MAAAvB,MAAAwB,IACA,GAAAA,EACA,GAAAA,EAAAqI,SAAA,CACAhJ,EAAAW,EAAAgC,OAEA,SADAoB,IAEA,GAAAK,EAAA4B,MAAAsB,SAAA,CACA,IAAAvC,EAAAwC,mBAAAnD,EAAA4B,MAAAsB,UACA,IAAA,IAAAvC,EAAAyC,QAAA,KAAA,CACA,MAAAC,EAAA1C,EAAA2C,MAAA,KACA3C,EAAA0C,EAAA,GACA,MAAAzB,EAAA,CAAA,EAEA2B,EAAAF,EAAA,GAAAC,MAAA,KACA,IAAA,IAAAE,EAAA,EAAAA,EAAAD,EAAAE,OAAAD,IAAA,CACA,MAAAE,EAAAH,EAAAC,GAAAF,MAAA,KACA1B,EAAA8B,EAAA,IAAAA,EAAA,EACA,CACA5D,EAAA6D,QAAA,CAAAC,KAAAjD,EAAAiB,SACA,MACA9B,EAAA6D,QAAA,CAAAC,KAAAjD,GAEA,MACAb,EAAA6D,QAAA,CAAAC,KAAA,KAGA,MAOAZ,GAAA3E,SAAA9B,EAAAsI,SACA7B,GAAA9G,SAAA,EACA8G,GAAA1I,MAAA,OAEA,GACA,EAEAwK,GAAA3K,EAAA,MACA4K,GAAA5K,EAAA,MACA6K,GAAA,KACA,MAAApG,EAAAxE,GAAAI,YAAAqE,WAAAC,GACAA,EAAAC,KAAAD,EAAAE,eAAAoC,GAAAhG,QAAAhB,GAAAK,UAEAwE,EAAA7E,GAAAI,YAAA0E,OAAAN,EAAA,GACAxE,GAAAI,YAAA2E,QAAAF,EAAA,GAAA,EAEAgG,GAAA7F,IACAgC,GAAAhG,QAAAgE,EAAAL,KACA3E,GAAAK,QAAA2E,EAAAJ,aACA8F,GAAA7J,MAAAiK,OACAH,GAAA9J,MAAAiK,MAAA,EAwBA,MAAAb,GAAA,KACA,MAAAc,EAAAC,UAAAD,UAAAE,cACA,IAAApB,EAAA,UACAE,EAAA,UAmCA,OAlCAgB,EAAA/B,QAAA,QAAA,GACAa,EAAA,UAEAE,EADAgB,EAAA/B,QAAA,mBAAA,EACA,eACA+B,EAAA/B,QAAA,sBAAA+B,EAAA/B,QAAA,mBAAA,EACA,aACA+B,EAAA/B,QAAA,mBAAA,EACA,gBACA+B,EAAA/B,QAAA,sBAAA+B,EAAA/B,QAAA,cAAA,EACA,YACA+B,EAAA/B,QAAA,sBAAA+B,EAAA/B,QAAA,cAAA,EACA,YACA+B,EAAA/B,QAAA,mBAAA,EACA,cACA+B,EAAA/B,QAAA,sBAAA+B,EAAA/B,QAAA,oBAAA,EACA,aAEA,WAGAa,EADAkB,EAAA/B,QAAA,WAAA,EACA,SACA+B,EAAA/B,QAAA,QAAA,EACA,MACA+B,EAAA/B,QAAA,QAAA,GAAA+B,EAAA/B,QAAA,YAAA+B,EAAA/B,QAAA,YAAA,GAAA+B,EAAA/B,QAAA,QAAA,EACA,OACA+B,EAAA/B,QAAA,UAAA,EACA+B,EAAA/B,QAAA,YAAA,EACA,UAEA,QAGA,UAEA,CACAa,OACAE,UACA,EAEAK,GAAA,KAEA,MAAAc,EAAA,CAAA,EACAC,EAAAH,UAAAD,UAAAE,cACA,IAAAG,EAiBA,OAhBAA,EAAAD,EAAAE,MAAA,+BAEAD,EAAAD,EAAAE,MAAA,iBADAH,EAAAI,GAAAF,EAAA,IAGAA,EAAAD,EAAAE,MAAA,kBACAH,EAAAK,KAAAH,EAAA,IACAA,EAAAD,EAAAE,MAAA,qBACAH,EAAAM,QAAAJ,EAAA,IACAA,EAAAD,EAAAE,MAAA,0BACAH,EAAAO,MAAAL,EAAA,IACAA,EAAAD,EAAAE,MAAA,oBACAH,EAAAQ,OAAAN,EAAA,IACAA,EAAAD,EAAAE,MAAA,+BACAH,EAAAS,OAAAP,EAAA,IAGAF,EAAAI,GACA,CACAzB,KAAA,KACAE,QAAAmB,EAAAI,IAEAJ,EAAAK,KACA,CACA1B,KAAA,OACAE,QAAAmB,EAAAK,MAEAL,EAAAM,QACA,CACA3B,KAAA,UACAE,QAAAmB,EAAAM,SAEAN,EAAAQ,OACA,CACA7B,KAAA,SACAE,QAAAmB,EAAAQ,QAEAR,EAAAO,MACA,CACA5B,KAAA,QACAE,QAAAmB,EAAAO,OAEAP,EAAAS,OACA,CACA9B,KAAA,SACAE,QAAAmB,EAAAS,QAEA,CACA9B,KAAA,UACAE,QAAA,QACA,EAGArH,GAAA3C,EAAA,SACA4C,GAAA5C,GAAA,GAiBA6C,GAAA,KACA,IAAAD,GAAA9B,MACA,MAAA,eAAAgC,KAAAC,SAAAkE,GAAAxG,aAIA+C,EAAA,CACA/C,MAAAwG,GAAAxG,MACAQ,QAAAgG,GAAAhG,QACAwC,qBAAA,IACAtB,MAAAC,IA1BA,MACA,IAAAsB,EAAA,GACAd,GAAA9B,OAAA,EACA6B,GAAA7B,MAAA4C,EACA,IAAAmI,EAAAlI,aAAA,KACAD,GAAA,GACAjB,cAAAoJ,GACAjJ,GAAA9B,OAAA,EACA6B,GAAA7B,MAAA,SAEA4C,IACAf,GAAA7B,MAAA4C,EAAA,IACA,GACA,IAAA,EAcAE,EAAA,KARAZ,EAAAC,MAAA,cACA,EAQA,EAGA6I,GAAAC,IACA,MAAArC,EAAA,CAAA,EACA,IAAAzC,GAAAE,YAEA,YADAnE,EAAAgJ,QAAA,cAGAtC,EAAAC,QAAAtD,GAAAuD,GACAF,EAAAG,KAAAxD,GAAAwD,KACA,MAAAC,KAAAC,EAAAC,QAAAC,GAAAC,MACAJ,KAAAK,EAAAH,QAAAI,GAAAC,KACAX,EAAAY,GAAAP,EACAL,EAAAO,UAAAA,EACAP,EAAAa,QAAAJ,EACAT,EAAAU,eAAAA,EACA2B,GACAA,EAAAhI,UAAAC,IACA,IAAAA,EAqGA,OAAA,EApGA,MAAAiC,EAAAnF,OACAgG,GAAA1C,QACAsF,EAAAuC,uBAAAnF,GAAA1C,MACAsF,EAAAxC,kBAAAD,GAAAC,mBAGAxB,EAAAuB,GAAA5F,UAAAc,MAAAyC,IACA8E,EAAAwC,gBAAAtH,EACAqC,GAAA5F,cAAA,EACA8K,EAAA,CACAhI,WAAA,KACA8C,MACAyC,IAEAvH,MAAAvB,MAAAwB,IACA,GAAAA,GAAAA,EAAAgC,MAAA,CACAgC,EAAAtF,MAAA,EAEAsL,EAAA,WAAAhG,EAAAtF,OACAW,EAAAW,EAAAgC,OAEA,SADAoB,IAEA,GAAAK,EAAA4B,MAAAsB,SAAA,CACA,IAAAvC,EAAAwC,mBAAAnD,EAAA4B,MAAAsB,UACA,IAAA,IAAAvC,EAAAyC,QAAA,KAAA,CACA,MAAAC,EAAA1C,EAAA2C,MAAA,KACA3C,EAAA0C,EAAA,GACA,MAAAzB,EAAA,CAAA,EAEA2B,EAAAF,EAAA,GAAAC,MAAA,KACA,IAAA,IAAAE,EAAA,EAAAA,EAAAD,EAAAE,OAAAD,IAAA,CACA,MAAAE,EAAAH,EAAAC,GAAAF,MAAA,KACA1B,EAAA8B,EAAA,IAAAA,EAAA,EACA,CACA5D,EAAA6D,QAAA,CAAAC,KAAAjD,EAAAiB,SACA,MACA9B,EAAA6D,QAAA,CAAAC,KAAAjD,GAEA,MACAb,EAAA6D,QAAA,CAAAC,KAAA,KAGA,KAEAlF,OAAA8H,IAEA,MAAAA,EAAAzH,MACAwB,EAAAtF,OAAA,EACAsL,EAAA,WAAAhG,EAAAtF,QACAsF,EAAAtF,OAAA,GAAAgG,GAAA1C,QAEAwD,MAEA,MAAAyE,EAAAzH,MACAgD,IACA,GACA,MAGAd,GAAA1C,QACAsF,EAAAuC,uBAAAnF,GAAA1C,MACAsF,EAAAxC,kBAAAD,GAAAC,mBAEAoF,EAAA,CACAnI,WAAA,KACA8C,MACAyC,IAEAvH,MAAAvB,MAAAwB,IACA,GAAAA,GAAAA,EAAAgC,MAAA,CACAgC,EAAAtF,MAAA,EACAsL,EAAA,WAAAhG,EAAAtF,OACAW,EAAAW,EAAAgC,aACAoB,MAEAK,EAAA4B,MAAAsB,SACApD,EAAA4G,KAAA,CACA9C,KAAAT,mBAAAnD,EAAA4B,MAAAsB,YAGApD,EAAA4G,KAAA,CAAA9C,KAAA,MAGA,KAEAlF,OAAA8H,IACA,MAAAA,EAAAzH,MACAwB,EAAAtF,OAAA,EACAsL,EAAA,WAAAhG,EAAAtF,QACAsF,EAAAtF,OAAA,GAAAgG,GAAA1C,QAEAwD,MAEA,MAAAyE,EAAAzH,MACAgD,IACA,IAMA,GACA,EAEAA,GAAA,KACA4E,IAAArK,MAAAC,IACAA,GAAAA,EAAAgC,QACA0C,GAAAC,IAAA3E,EAAA2E,IACAD,GAAA1C,MAAAhC,EAAAgC,MAEA,GACA,kYCxvBe,q3MCAA"}