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(`

绑定手机号

首次通过公众号登录,请先完成手机号绑定

`); if (pageState.value === "loading") { _push(`
`); _push(ssrRenderComponent(_component_a_spin, { size: "large" }, null, _parent)); _push(`正在校验登录状态...
`); } else if (pageState.value === "error") { _push(`
`); _push(ssrRenderComponent(unref(CloseCircleOutlined), { class: "state-icon" }, null, _parent)); _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(`
`); } else { _push(`
`); _push(ssrRenderComponent(_component_a_alert, { type: "warning", "show-icon": "", message: pageMessage.value || "绑定成功后将自动完成当前扫码登录", class: "bind-alert" }, null, _parent)); _push(ssrRenderComponent(_component_a_form, { ref_key: "formRef", ref: formRef, model: form, rules, layout: "vertical" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(ssrRenderComponent(_component_a_form_item, { label: "手机号", name: "phone" }, { default: withCtx((_2, _push3, _parent3, _scopeId2) => { if (_push3) { _push3(ssrRenderComponent(_component_a_input, { value: form.phone, "onUpdate:value": ($event) => form.phone = $event, size: "large", placeholder: "请输入手机号" }, null, _parent3, _scopeId2)); } else { return [ createVNode(_component_a_input, { value: form.phone, "onUpdate:value": ($event) => form.phone = $event, size: "large", placeholder: "请输入手机号" }, null, 8, ["value", "onUpdate:value"]) ]; } }), _: 1 }, _parent2, _scopeId)); _push2(ssrRenderComponent(_component_a_form_item, { label: "短信验证码", name: "smsCode" }, { default: withCtx((_2, _push3, _parent3, _scopeId2) => { if (_push3) { _push3(`
`); _push3(ssrRenderComponent(_component_a_input, { value: form.smsCode, "onUpdate:value": ($event) => form.smsCode = $event, size: "large", placeholder: "请输入短信验证码" }, null, _parent3, _scopeId2)); _push3(ssrRenderComponent(_component_a_button, { disabled: countdown.value > 0, loading: sendingSms.value, size: "large", onClick: sendSmsCode }, { default: withCtx((_3, _push4, _parent4, _scopeId3) => { if (_push4) { _push4(`${ssrInterpolate(countdown.value > 0 ? `${countdown.value}s 后重试` : "发送验证码")}`); } else { return [ createTextVNode(toDisplayString(countdown.value > 0 ? `${countdown.value}s 后重试` : "发送验证码"), 1) ]; } }), _: 1 }, _parent3, _scopeId2)); _push3(`
`); } else { return [ createVNode("div", { class: "sms-row" }, [ createVNode(_component_a_input, { value: form.smsCode, "onUpdate:value": ($event) => form.smsCode = $event, size: "large", placeholder: "请输入短信验证码" }, null, 8, ["value", "onUpdate:value"]), createVNode(_component_a_button, { disabled: countdown.value > 0, loading: sendingSms.value, size: "large", onClick: sendSmsCode }, { default: withCtx(() => [ createTextVNode(toDisplayString(countdown.value > 0 ? `${countdown.value}s 后重试` : "发送验证码"), 1) ]), _: 1 }, 8, ["disabled", "loading"]) ]) ]; } }), _: 1 }, _parent2, _scopeId)); _push2(ssrRenderComponent(_component_a_button, { type: "primary", block: "", size: "large", loading: submitting.value, onClick: submit }, { default: withCtx((_2, _push3, _parent3, _scopeId2) => { if (_push3) { _push3(` 绑定手机号并登录 `); } else { return [ createTextVNode(" 绑定手机号并登录 ") ]; } }), _: 1 }, _parent2, _scopeId)); } else { return [ createVNode(_component_a_form_item, { label: "手机号", name: "phone" }, { default: withCtx(() => [ createVNode(_component_a_input, { value: form.phone, "onUpdate:value": ($event) => form.phone = $event, size: "large", placeholder: "请输入手机号" }, null, 8, ["value", "onUpdate:value"]) ]), _: 1 }), createVNode(_component_a_form_item, { label: "短信验证码", name: "smsCode" }, { default: withCtx(() => [ createVNode("div", { class: "sms-row" }, [ createVNode(_component_a_input, { value: form.smsCode, "onUpdate:value": ($event) => form.smsCode = $event, size: "large", placeholder: "请输入短信验证码" }, null, 8, ["value", "onUpdate:value"]), createVNode(_component_a_button, { disabled: countdown.value > 0, loading: sendingSms.value, size: "large", onClick: sendSmsCode }, { default: withCtx(() => [ createTextVNode(toDisplayString(countdown.value > 0 ? `${countdown.value}s 后重试` : "发送验证码"), 1) ]), _: 1 }, 8, ["disabled", "loading"]) ]) ]), _: 1 }), createVNode(_component_a_button, { type: "primary", block: "", size: "large", loading: submitting.value, onClick: submit }, { default: withCtx(() => [ createTextVNode(" 绑定手机号并登录 ") ]), _: 1 }, 8, ["loading"]) ]; } }), _: 1 }, _parent)); _push(`
`); } _push(`
`); }; } }); const _sfc_setup = _sfc_main.setup; _sfc_main.setup = (props, ctx) => { const ssrContext = useSSRContext(); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/bind-phone.vue"); return _sfc_setup ? _sfc_setup(props, ctx) : void 0; }; const bindPhone = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-aeff4e43"]]); export { bindPhone as default }; //# sourceMappingURL=bind-phone-CjPFbjTp.mjs.map