import { defineComponent, computed, ref, reactive, resolveComponent, mergeProps, unref, withCtx, createTextVNode, createVNode, toDisplayString, useSSRContext } from 'vue'; import { ssrRenderAttrs, ssrRenderComponent, ssrInterpolate } from 'vue/server-renderer'; import { message } from 'ant-design-vue'; import { CloseCircleOutlined } from '@ant-design/icons-vue'; import { r as requestClient } from './request-BIxQh2im.mjs'; import { a as _export_sfc, e as useRoute, d as useRouter, S as SERVER_API_URL } from './server.mjs'; import { s as sendSmsCaptcha, a as setInterval } from './index-CEJdy8RB.mjs'; import '../nitro/nitro.mjs'; import 'node:http'; import 'node:https'; import 'node:events'; import 'node:buffer'; import 'node:fs'; import 'node:path'; import 'node:crypto'; import 'node:url'; import 'better-sqlite3'; import 'vue-router'; import '@babel/runtime/helpers/esm/extends'; import 'stylis'; import 'dayjs'; import '../routes/renderer.mjs'; import 'vue-bundle-renderer/runtime'; import 'unhead/server'; import 'devalue'; import 'unhead/plugins'; import 'unhead/utils'; import './token-util-C_wOpB5F.mjs'; function isSuccess(code) { return code === 0 || code === 200; } async function bindQrLoginPhone(requestData) { const res = await requestClient.post( SERVER_API_URL + "/qr-login/bind-phone", requestData ); if (isSuccess(res.data.code) && res.data.data) { return res.data.data; } return Promise.reject(new Error(res.data.message || "绑定手机号失败")); } const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "bind-phone", __ssrInlineRender: true, setup(__props) { const route = useRoute(); const router = useRouter(); const token = computed(() => String(route.query.token || "")); const formRef = ref(); const submitting = ref(false); const sendingSms = ref(false); const countdown = ref(0); const pageState = ref("loading"); const pageMessage = ref(""); let countdownTimer = null; const form = reactive({ phone: "", smsCode: "" }); const phoneReg = /^1[3-9]\d{9}$/; const rules = reactive({ phone: [ { required: true, message: "请输入手机号", type: "string" }, { pattern: phoneReg, message: "手机号格式不正确", trigger: "blur" } ], smsCode: [{ required: true, message: "请输入短信验证码", type: "string" }] }); function stopCountdown() { if (countdownTimer) { clearInterval(countdownTimer); countdownTimer = null; } countdown.value = 0; } function persistUserInfo(result) { result.accessToken || result.access_token; } async function applyLoginResult(result, successText = "登录成功") { persistUserInfo(result); message.success(successText); await router.replace("/"); } async function sendSmsCode() { if (!phoneReg.test(form.phone)) { return message.warning("请先输入正确的手机号"); } sendingSms.value = true; try { await sendSmsCaptcha({ phone: form.phone }); message.success("验证码已发送"); stopCountdown(); countdown.value = 60; countdownTimer = setInterval(() => { countdown.value -= 1; if (countdown.value <= 0) { stopCountdown(); } }, 1e3); } catch (error) { message.error(error instanceof Error ? error.message : "发送验证码失败"); } finally { sendingSms.value = false; } } async function submit() { if (!formRef.value || !token.value) return; submitting.value = true; try { await formRef.value.validate(); const result = await bindQrLoginPhone({ token: token.value, phone: form.phone, code: form.smsCode }); await applyLoginResult(result, "手机号绑定成功,已完成登录"); } catch (error) { message.error(error instanceof Error ? error.message : "绑定手机号失败"); } finally { submitting.value = false; } } function goToLogin() { router.replace("/login"); } return (_ctx, _push, _parent, _attrs) => { const _component_a_spin = resolveComponent("a-spin"); const _component_a_button = resolveComponent("a-button"); const _component_a_alert = resolveComponent("a-alert"); const _component_a_form = resolveComponent("a-form"); const _component_a_form_item = resolveComponent("a-form-item"); const _component_a_input = resolveComponent("a-input"); _push(`
首次通过公众号登录,请先完成手机号绑定
${ssrInterpolate(pageMessage.value)}
`); _push(ssrRenderComponent(_component_a_button, { type: "primary", onClick: goToLogin }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`返回登录`); } else { return [ createTextVNode("返回登录") ]; } }), _: 1 }, _parent)); _push(`