- 新增api目录下多个接口路径代理处理文件,支持动态拼接目标URL - 根据环境变量选择不同的后端服务地址(如dev和生产环境) - 统一添加TenantId和Authorization请求头传递租户及身份信息 - 实现请求参数及搜索参数的完整转发 - 引入better-sqlite3及node内建模块支持服务端功能 - 新增专家详情页面,实现文章、成果及预约咨询功能展示 - 页面实现加载骨架屏、标签页切换及空状态提示优化体验
2 lines
4.1 KiB
JavaScript
2 lines
4.1 KiB
JavaScript
import{c as $,b as j,s as D,d as O}from"./Cuwzyh4a.js";import{s as A}from"./Dl1HJz7f.js";import{d as F,q as G,u as H,v as J,i,s as z,j as K,k as W,c as v,a as l,b as s,m as X,t as U,w as u,r as c,p as d,o as g,a3 as Y,e as C,g as Z}from"./DPwbf7XO.js";import"./Cv7upGT6.js";const ee={class:"bind-phone-page"},ae={class:"bind-card"},se={key:0,class:"bind-state"},ne={key:1,class:"bind-state error"},te={key:2,class:"bind-form-wrap"},oe={class:"sms-row"},re=F({__name:"bind-phone",setup(le){const q=G(),I=H(),p=J(()=>String(q.query.token||"")),_=i(),y=i(!1),b=i(!1),t=i(0),o=i("loading"),r=i("");let m=null;const n=z({phone:"",smsCode:""}),S=/^1[3-9]\d{9}$/,E=z({phone:[{required:!0,message:"请输入手机号",type:"string"},{pattern:S,message:"手机号格式不正确",trigger:"blur"}],smsCode:[{required:!0,message:"请输入短信验证码",type:"string"}]});function h(){m&&(clearInterval(m),m=null),t.value=0}function B(e){const a=e.accessToken||e.access_token;a&&A(String(a),!0);{e.tenantId&&localStorage.setItem("TenantId",String(e.tenantId));const f=e.userInfo?.userId;f&&localStorage.setItem("UserId",String(f))}}async function T(e,a="登录成功"){B(e),d.success(a),await I.replace("/")}async function L(){if(!p.value){o.value="error",r.value="缺少二维码参数,请重新扫码";return}try{const e=await $(p.value);if(e.status==="confirmed"){await T(e);return}if(e.status==="bind_phone"){o.value="ready",r.value=e.message||"请输入手机号和短信验证码,完成首次登录";return}if(e.status==="expired"){o.value="error",r.value="二维码已过期,请返回登录页重新扫码";return}o.value="error",r.value="当前二维码尚未进入绑定流程,请先完成扫码关注"}catch(e){o.value="error",r.value=e instanceof Error?e.message:"校验扫码状态失败"}}async function N(){if(!S.test(n.phone))return d.warning("请先输入正确的手机号");b.value=!0;try{await j({phone:n.phone}),d.success("验证码已发送"),h(),t.value=60,m=D(()=>{t.value-=1,t.value<=0&&h()},1e3)}catch(e){d.error(e instanceof Error?e.message:"发送验证码失败")}finally{b.value=!1}}async function V(){if(!(!_.value||!p.value)){y.value=!0;try{await _.value.validate();const e=await O({token:p.value,phone:n.phone,code:n.smsCode});await T(e,"手机号绑定成功,已完成登录")}catch(e){d.error(e instanceof Error?e.message:"绑定手机号失败")}finally{y.value=!1}}}function M(){I.replace("/login")}return K(async()=>{await L()}),W(()=>{h()}),(e,a)=>{const f=c("a-spin"),k=c("a-button"),P=c("a-alert"),x=c("a-input"),R=c("a-form-item"),Q=c("a-form");return g(),v("div",ee,[l("div",ae,[a[5]||(a[5]=l("div",{class:"bind-header"},[l("h1",null,"绑定手机号"),l("p",null,"首次通过公众号登录,请先完成手机号绑定")],-1)),o.value==="loading"?(g(),v("div",se,[s(f,{size:"large"}),a[2]||(a[2]=l("span",null,"正在校验登录状态...",-1))])):o.value==="error"?(g(),v("div",ne,[s(X(Y),{class:"state-icon"}),l("p",null,U(r.value),1),s(k,{type:"primary",onClick:M},{default:u(()=>[...a[3]||(a[3]=[C("返回登录",-1)])]),_:1})])):(g(),v("div",te,[s(P,{type:"warning","show-icon":"",message:r.value||"绑定成功后将自动完成当前扫码登录",class:"bind-alert"},null,8,["message"]),s(Q,{ref_key:"formRef",ref:_,model:n,rules:E,layout:"vertical"},{default:u(()=>[s(R,{label:"手机号",name:"phone"},{default:u(()=>[s(x,{value:n.phone,"onUpdate:value":a[0]||(a[0]=w=>n.phone=w),size:"large",placeholder:"请输入手机号"},null,8,["value"])]),_:1}),s(R,{label:"短信验证码",name:"smsCode"},{default:u(()=>[l("div",oe,[s(x,{value:n.smsCode,"onUpdate:value":a[1]||(a[1]=w=>n.smsCode=w),size:"large",placeholder:"请输入短信验证码"},null,8,["value"]),s(k,{disabled:t.value>0,loading:b.value,size:"large",onClick:N},{default:u(()=>[C(U(t.value>0?`${t.value}s 后重试`:"发送验证码"),1)]),_:1},8,["disabled","loading"])])]),_:1}),s(k,{type:"primary",block:"",size:"large",loading:y.value,onClick:V},{default:u(()=>[...a[4]||(a[4]=[C(" 绑定手机号并登录 ",-1)])]),_:1},8,["loading"])]),_:1},8,["model","rules"])]))])])}}}),pe=Z(re,[["__scopeId","data-v-aeff4e43"]]);export{pe as default};
|