骑手端修复:登录改用统一auth接口、token存储修正
This commit is contained in:
parent
ba174ce81e
commit
fe29a3ab0b
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
.home-page[data-v-ac103de0]{min-height:100%;background:#f7f7f7;padding-bottom:20px}.header[data-v-ac103de0]{background:#fff;padding:16px 16px 14px;display:flex;justify-content:space-between;align-items:center;border-bottom:.5px solid rgba(0,0,0,.06)}.user-info[data-v-ac103de0]{display:flex;align-items:center;gap:10px}.user-info h3[data-v-ac103de0]{margin:0 0 2px;font-size:17px;font-weight:600;color:#1a1a1a}.user-info p[data-v-ac103de0]{margin:0;font-size:12px;color:#b2b2b2}.wallet[data-v-ac103de0]{background:#e8f8ee;padding:6px 14px;border-radius:16px;text-align:center}.wallet-label[data-v-ac103de0]{display:block;font-size:10px;color:#ff6b00}.wallet-value[data-v-ac103de0]{font-size:16px;font-weight:600;color:#ff6b00}.banner[data-v-ac103de0]{background:#fff;margin:12px;border-radius:16px;padding:20px;display:flex;justify-content:space-between;align-items:center}.banner h2[data-v-ac103de0]{font-size:20px;margin:0 0 6px;color:#1a1a1a;font-weight:600}.banner p[data-v-ac103de0]{font-size:13px;color:#b2b2b2;margin:0 0 12px}.banner-icon[data-v-ac103de0]{font-size:52px}.section[data-v-ac103de0]{margin:0 12px 12px;background:#fff;border-radius:16px;overflow:hidden}.section-header[data-v-ac103de0]{display:flex;justify-content:space-between;align-items:center;padding:16px 16px 12px}.section-header h3[data-v-ac103de0]{font-size:16px;font-weight:600;color:#1a1a1a;margin:0}.vehicle-list[data-v-ac103de0]{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:#f7f7f7}.vehicle-card[data-v-ac103de0]{background:#fff;padding:14px 12px 12px;cursor:pointer}.vehicle-img[data-v-ac103de0]{font-size:44px;text-align:center;padding:8px 0}.vehicle-info h4[data-v-ac103de0]{font-size:15px;margin:0 0 4px;color:#1a1a1a;font-weight:500}.vehicle-desc[data-v-ac103de0]{font-size:11px;color:#b2b2b2;margin:0 0 8px}.vehicle-price[data-v-ac103de0]{display:flex;justify-content:space-between;align-items:center}.price[data-v-ac103de0]{color:#ff6b00;font-weight:600;font-size:15px}.quick-actions[data-v-ac103de0]{display:flex;background:#fff;margin:0 12px 12px;border-radius:16px;padding:14px 8px}.action-item[data-v-ac103de0]{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;cursor:pointer}.action-item span[data-v-ac103de0]{font-size:10px;color:#b2b2b2}.order-card[data-v-ac103de0]{background:#fff;border-radius:16px;padding:16px;cursor:pointer;margin:0 12px 12px}.order-card.active[data-v-ac103de0]{border-left:3px solid #FF6B00}.order-header[data-v-ac103de0]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.order-id[data-v-ac103de0]{font-size:12px;color:#b2b2b2}.order-body[data-v-ac103de0]{display:flex;gap:12px;margin-bottom:12px}.vehicle-mini[data-v-ac103de0]{display:flex;flex-direction:column;align-items:center;gap:4px}.vehicle-mini .icon[data-v-ac103de0]{font-size:32px}.vehicle-mini .model[data-v-ac103de0]{font-size:11px;color:#b2b2b2}.order-detail[data-v-ac103de0]{flex:1}.order-detail p[data-v-ac103de0]{margin:0 0 4px;font-size:13px;color:#1a1a1a}.order-detail .amount[data-v-ac103de0]{color:#ff6b00;font-weight:600}.order-footer[data-v-ac103de0]{display:flex;gap:8px;justify-content:flex-end}
|
||||
|
|
@ -1 +0,0 @@
|
|||
.home-page[data-v-7557b155]{min-height:100%;background:#f5f5f5;padding-bottom:20px}.header[data-v-7557b155]{background:linear-gradient(135deg,#07c160,#06ad56);padding:20px;color:#fff;display:flex;justify-content:space-between;align-items:center}.user-info[data-v-7557b155]{display:flex;align-items:center;gap:12px}.user-info h3[data-v-7557b155]{margin:0 0 4px;font-size:18px}.user-info p[data-v-7557b155]{margin:0;font-size:14px;opacity:.9}.wallet[data-v-7557b155]{background:#fff3;padding:8px 16px;border-radius:20px;text-align:center}.wallet-label[data-v-7557b155]{display:block;font-size:12px;opacity:.9}.wallet-value[data-v-7557b155]{font-size:18px;font-weight:700}.banner[data-v-7557b155]{background:linear-gradient(135deg,#ff6b35,#ff8f6b);margin:12px;border-radius:16px;padding:20px;color:#fff;display:flex;justify-content:space-between;align-items:center}.banner h2[data-v-7557b155]{font-size:22px;margin:0 0 8px}.banner p[data-v-7557b155]{font-size:14px;opacity:.9;margin:0 0 12px}.banner-icon[data-v-7557b155]{font-size:60px}.section[data-v-7557b155]{margin:16px 12px}.section-header[data-v-7557b155]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.section-header h3[data-v-7557b155]{font-size:18px;color:#333;margin:0}.vehicle-list[data-v-7557b155]{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.vehicle-card[data-v-7557b155]{background:#fff;border-radius:12px;padding:12px;cursor:pointer;transition:transform .2s}.vehicle-card[data-v-7557b155]:active{transform:scale(.98)}.vehicle-img[data-v-7557b155]{font-size:48px;text-align:center;padding:10px 0}.vehicle-info h4[data-v-7557b155]{font-size:16px;margin:0 0 4px;color:#333}.vehicle-desc[data-v-7557b155]{font-size:12px;color:#999;margin:0 0 8px}.vehicle-price[data-v-7557b155]{display:flex;justify-content:space-between;align-items:center}.price[data-v-7557b155]{color:#ff6b35;font-weight:700;font-size:16px}.quick-actions[data-v-7557b155]{display:flex;background:#fff;margin:16px 12px;border-radius:12px;padding:16px}.action-item[data-v-7557b155]{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;cursor:pointer}.action-item span[data-v-7557b155]{font-size:12px;color:#666}.order-card[data-v-7557b155]{background:#fff;border-radius:12px;padding:16px;cursor:pointer}.order-card.active[data-v-7557b155]{border-left:4px solid #07c160}.order-header[data-v-7557b155]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.order-id[data-v-7557b155]{font-size:13px;color:#666}.order-body[data-v-7557b155]{display:flex;gap:12px;margin-bottom:12px}.vehicle-mini[data-v-7557b155]{display:flex;flex-direction:column;align-items:center;gap:4px}.vehicle-mini .icon[data-v-7557b155]{font-size:32px}.vehicle-mini .model[data-v-7557b155]{font-size:12px;color:#666}.order-detail[data-v-7557b155]{flex:1}.order-detail p[data-v-7557b155]{margin:0 0 4px;font-size:13px;color:#333}.order-detail .amount[data-v-7557b155]{color:#ff6b35;font-weight:700}.order-footer[data-v-7557b155]{display:flex;gap:8px;justify-content:flex-end}
|
||||
|
|
@ -1 +0,0 @@
|
|||
.login-page[data-v-b5e11a1f]{min-height:100vh;background:linear-gradient(135deg,#07c160,#06ad56);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px}.login-header[data-v-b5e11a1f]{text-align:center;color:#fff;margin-bottom:40px}.logo[data-v-b5e11a1f]{font-size:64px;margin-bottom:10px}.login-header h1[data-v-b5e11a1f]{font-size:28px;margin-bottom:8px}.login-header p[data-v-b5e11a1f]{font-size:14px;opacity:.9}.login-form[data-v-b5e11a1f]{width:100%;max-width:360px;background:#fff;border-radius:16px;padding:30px;box-shadow:0 10px 40px #0003}.login-tabs[data-v-b5e11a1f] .el-tabs__header{margin-bottom:20px}.login-tabs[data-v-b5e11a1f] .el-tabs__item{font-size:16px}.login-btn[data-v-b5e11a1f]{width:100%;background:#07c160;border-color:#07c160;font-size:18px;margin-top:20px}.demo-hint[data-v-b5e11a1f]{text-align:center;color:#999;font-size:12px;margin-top:20px}
|
||||
|
|
@ -0,0 +1 @@
|
|||
.login-page[data-v-73cdf8aa]{min-height:100vh;background:#f7f7f7;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px}.login-header[data-v-73cdf8aa]{text-align:center;color:#1a1a1a;margin-bottom:40px}.logo[data-v-73cdf8aa]{font-size:64px;margin-bottom:10px}.login-header h1[data-v-73cdf8aa]{font-size:28px;margin-bottom:8px;font-weight:600;color:#1a1a1a}.login-header p[data-v-73cdf8aa]{font-size:13px;color:#b2b2b2}.login-form[data-v-73cdf8aa]{width:100%;max-width:360px;background:#fff;border-radius:16px;padding:30px;box-shadow:0 2px 12px #0000000f}.login-form[data-v-73cdf8aa] .el-input__wrapper{border-radius:12px}.login-btn[data-v-73cdf8aa]{width:100%;background:#ff6b00;border-color:#ff6b00;font-size:18px;border-radius:12px;margin-top:20px;height:48px}.demo-hint[data-v-73cdf8aa]{text-align:center;color:#b2b2b2;font-size:12px;margin-top:20px}
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{_ as N,o as T,c as $,a as n,b as o,w as l,r as u,d as i,u as E,e as _,p as y,l as k,f as S,t as B,E as c,n as I}from"./index-BjjMa8ds.js";import{r as R}from"./request-DB47Z7vM.js";const D={class:"login-page"},L={class:"login-form"},J={__name:"Login",setup(O){const w=E(),g=u("password"),v=u(!1),d=u(0),h=u(),b=u(),p=u({phone:"13800138000",code:"123456"}),s=u({phone:"13800138000",password:"123456"}),C={phone:[{required:!0,message:"请输入手机号",trigger:"blur"}],code:[{required:!0,message:"请输入验证码",trigger:"blur"}]},F={phone:[{required:!0,message:"请输入手机号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},U=()=>{if(!p.value.phone){c.warning("请输入手机号");return}c.success("验证码已发送"),d.value=60;const m=setInterval(()=>{d.value--,d.value<=0&&clearInterval(m)},1e3)},q=async()=>{try{await(g.value==="phone"?h.value:b.value).validate(),v.value=!0;const e=await R.post("/customers/login",{phone:s.value.phone,password:s.value.password}).catch(async()=>{const a=await R.get("/customers");if(a.success&&a.data){const t=a.data.find(f=>f.phone===s.value.phone);if(t)return{success:!0,data:t}}throw new Error("登录失败")});if(e.success&&e.data){const a=e.data,t=btoa(`${a._id}:${Date.now()}`);localStorage.setItem("customer_token",t),localStorage.setItem("customer_info",JSON.stringify(a)),localStorage.setItem("customer_id",a._id),c.success("登录成功"),await I(),w.push("/")}else c.error(e.message||"登录失败")}catch{if(s.value.phone==="13800138000"&&s.value.password==="123456"){const e={_id:"69be3bd27d8c99477626018b",customerId:"CUST001",name:"张三",phone:"13800138000",balance:500,totalRentals:5,creditScore:100},a=btoa(`${e._id}:${Date.now()}`);localStorage.setItem("customer_token",a),localStorage.setItem("customer_info",JSON.stringify(e)),localStorage.setItem("customer_id",e._id),c.success("登录成功(演示模式)"),await I(),w.push("/")}else c.error("手机号或密码错误")}finally{v.value=!1}};return(m,e)=>{const a=i("el-input"),t=i("el-form-item"),f=i("el-button"),V=i("el-form"),x=i("el-tab-pane"),z=i("el-tabs");return T(),$("div",D,[e[7]||(e[7]=n("div",{class:"login-header"},[n("div",{class:"logo"},"🛵"),n("h1",null,"租车用户端"),n("p",null,"电动车租赁平台")],-1)),n("div",L,[o(z,{modelValue:g.value,"onUpdate:modelValue":e[4]||(e[4]=r=>g.value=r),class:"login-tabs"},{default:l(()=>[o(x,{label:"手机号登录",name:"phone"},{default:l(()=>[o(V,{ref_key:"phoneFormRef",ref:h,model:p.value,rules:C},{default:l(()=>[o(t,{prop:"phone"},{default:l(()=>[o(a,{modelValue:p.value.phone,"onUpdate:modelValue":e[0]||(e[0]=r=>p.value.phone=r),placeholder:"请输入手机号",size:"large","prefix-icon":_(y)},null,8,["modelValue","prefix-icon"])]),_:1}),o(t,{prop:"code"},{default:l(()=>[o(a,{modelValue:p.value.code,"onUpdate:modelValue":e[1]||(e[1]=r=>p.value.code=r),placeholder:"请输入验证码",size:"large","prefix-icon":_(k),style:{width:"60%"}},{append:l(()=>[o(f,{onClick:U,disabled:d.value>0},{default:l(()=>[S(B(d.value>0?`${d.value}s`:"获取验证码"),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue","prefix-icon"])]),_:1})]),_:1},8,["model"])]),_:1}),o(x,{label:"密码登录",name:"password"},{default:l(()=>[o(V,{ref_key:"pwdFormRef",ref:b,model:s.value,rules:F},{default:l(()=>[o(t,{prop:"phone"},{default:l(()=>[o(a,{modelValue:s.value.phone,"onUpdate:modelValue":e[2]||(e[2]=r=>s.value.phone=r),placeholder:"请输入手机号",size:"large","prefix-icon":_(y)},null,8,["modelValue","prefix-icon"])]),_:1}),o(t,{prop:"password"},{default:l(()=>[o(a,{modelValue:s.value.password,"onUpdate:modelValue":e[3]||(e[3]=r=>s.value.password=r),type:"password",placeholder:"请输入密码",size:"large","prefix-icon":_(k),"show-password":""},null,8,["modelValue","prefix-icon"])]),_:1})]),_:1},8,["model"])]),_:1})]),_:1},8,["modelValue"]),o(f,{type:"primary",size:"large",loading:v.value,class:"login-btn",onClick:q},{default:l(()=>[...e[5]||(e[5]=[S(" 登录 ",-1)])]),_:1},8,["loading"]),e[6]||(e[6]=n("div",{class:"demo-hint"},[n("p",null,"演示账号:13800138000 / 123456")],-1))])])}}},A=N(J,[["__scopeId","data-v-b5e11a1f"]]);export{A as default};
|
||||
|
|
@ -0,0 +1 @@
|
|||
import{_ as V,o as k,c as y,a as s,b as a,w as l,r as u,d as r,u as b,e as c,f as h,l as I,g as N,E as d}from"./index-CZe38Ow-.js";import{r as q}from"./request-DftRczcY.js";const B={class:"login-page"},C={class:"login-form"},E={__name:"Login",setup(L){const f=b(),t=u(!1),i=u(null),o=u({username:"",password:""}),g={username:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},_=async()=>{if(await i.value.validate().catch(()=>!1)){t.value=!0;try{const e=await q.post("/auth/login",{username:o.value.username,password:o.value.password});e.success&&e.data&&e.data.token?(localStorage.setItem("token",e.data.token),localStorage.setItem("riderInfo",JSON.stringify(e.data)),d.success("登录成功"),f.push("/")):d.error(e.message||"登录失败")}catch(e){d.error(e.response?.data?.message||"登录失败,请检查账号密码")}finally{t.value=!1}}};return(v,e)=>{const m=r("el-input"),p=r("el-form-item"),w=r("el-form"),x=r("el-button");return k(),y("div",B,[e[4]||(e[4]=s("div",{class:"login-header"},[s("div",{class:"logo"},"🛵"),s("h1",null,"电动车租赁"),s("p",null,"骑手端")],-1)),s("div",C,[a(w,{ref_key:"formRef",ref:i,model:o.value,rules:g,size:"large"},{default:l(()=>[a(p,{prop:"username"},{default:l(()=>[a(m,{modelValue:o.value.username,"onUpdate:modelValue":e[0]||(e[0]=n=>o.value.username=n),placeholder:"请输入账号","prefix-icon":c(h)},null,8,["modelValue","prefix-icon"])]),_:1}),a(p,{prop:"password"},{default:l(()=>[a(m,{modelValue:o.value.password,"onUpdate:modelValue":e[1]||(e[1]=n=>o.value.password=n),type:"password",placeholder:"请输入密码","prefix-icon":c(I),"show-password":""},null,8,["modelValue","prefix-icon"])]),_:1})]),_:1},8,["model"]),a(x,{type:"primary",size:"large",loading:t.value,class:"login-btn",onClick:_},{default:l(()=>[...e[2]||(e[2]=[N(" 登录 ",-1)])]),_:1},8,["loading"]),e[3]||(e[3]=s("div",{class:"demo-hint"},[s("p",null,"演示账号:rider_demo / demo123")],-1))])])}}},z=V(E,[["__scopeId","data-v-73cdf8aa"]]);export{z as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
.orders-page[data-v-5975620a]{min-height:100vh;background:#f5f5f5}.page-header[data-v-5975620a]{background:linear-gradient(135deg,#07c160,#06ad56);padding:20px;color:#fff}.page-header h2[data-v-5975620a]{margin:0;font-size:22px}.status-tabs[data-v-5975620a]{display:flex;background:#fff;padding:12px 0}.tab-item[data-v-5975620a]{flex:1;text-align:center;font-size:14px;color:#666;cursor:pointer;position:relative;padding-bottom:8px}.tab-item.active[data-v-5975620a]{color:#07c160;font-weight:700}.tab-item.active[data-v-5975620a]:after{content:"";position:absolute;bottom:0;left:50%;transform:translate(-50%);width:40px;height:3px;background:#07c160;border-radius:2px}.count[data-v-5975620a]{display:inline-block;background:#ff6b35;color:#fff;font-size:10px;padding:2px 6px;border-radius:10px;margin-left:4px}.order-list[data-v-5975620a]{padding:12px}.order-card[data-v-5975620a]{background:#fff;border-radius:12px;padding:16px;margin-bottom:12px}.order-header[data-v-5975620a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.order-number[data-v-5975620a]{font-size:13px;color:#666}.order-body[data-v-5975620a]{cursor:pointer}.vehicle-info[data-v-5975620a]{display:flex;align-items:center;gap:12px;padding:12px;background:#f5f5f5;border-radius:8px;margin-bottom:12px}.vehicle-info .icon[data-v-5975620a]{font-size:36px}.vehicle-info h4[data-v-5975620a]{margin:0;font-size:16px}.vehicle-info p[data-v-5975620a]{margin:4px 0 0;font-size:12px;color:#999}.order-dates p[data-v-5975620a]{margin:0 0 6px;font-size:13px;color:#333}.order-dates .label[data-v-5975620a]{color:#999;margin-right:8px}.order-footer[data-v-5975620a]{display:flex;justify-content:space-between;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid #f5f5f5}.amount .label[data-v-5975620a]{color:#999;font-size:12px}.amount .value[data-v-5975620a]{color:#ff6b35;font-size:18px;font-weight:700;margin-left:4px}.actions[data-v-5975620a]{display:flex;gap:8px}.order-detail[data-v-5975620a]{padding:10px 0}.detail-section[data-v-5975620a]{margin-bottom:16px}.detail-section h4[data-v-5975620a]{margin:0 0 10px;font-size:15px;color:#333;padding-bottom:8px;border-bottom:1px solid #eee}.detail-row[data-v-5975620a]{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.detail-row .label[data-v-5975620a]{color:#999}.detail-row .value[data-v-5975620a]{color:#333}.detail-row.total[data-v-5975620a]{margin-top:12px;padding-top:12px;border-top:1px solid #eee;font-weight:700}.detail-row.total .value[data-v-5975620a]{color:#ff6b35;font-size:16px}
|
||||
|
|
@ -0,0 +1 @@
|
|||
.orders-page[data-v-d086cb51]{min-height:100vh;background:#f7f7f7}.page-header[data-v-d086cb51]{background:#fff;padding:20px 16px 16px;border-bottom:.5px solid rgba(0,0,0,.06)}.page-header h2[data-v-d086cb51]{margin:0;font-size:20px;font-weight:600;color:#1a1a1a}.status-tabs[data-v-d086cb51]{display:flex;background:#fff;padding:12px 0}.tab-item[data-v-d086cb51]{flex:1;text-align:center;font-size:14px;color:#b2b2b2;cursor:pointer;position:relative;padding-bottom:8px}.tab-item.active[data-v-d086cb51]{color:#ff6b00;font-weight:600}.tab-item.active[data-v-d086cb51]:after{content:"";position:absolute;bottom:0;left:50%;transform:translate(-50%);width:40px;height:3px;background:#ff6b00;border-radius:2px}.count[data-v-d086cb51]{display:inline-block;background:#ff6b00;color:#fff;font-size:10px;padding:2px 6px;border-radius:10px;margin-left:4px}.order-list[data-v-d086cb51]{padding:12px}.order-card[data-v-d086cb51]{background:#fff;border-radius:16px;padding:16px;margin-bottom:10px}.order-header[data-v-d086cb51]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.order-number[data-v-d086cb51]{font-size:12px;color:#b2b2b2}.order-body[data-v-d086cb51]{cursor:pointer}.vehicle-info[data-v-d086cb51]{display:flex;align-items:center;gap:12px;padding:12px;background:#f7f7f7;border-radius:12px;margin-bottom:12px}.vehicle-info .icon[data-v-d086cb51]{font-size:36px}.vehicle-info h4[data-v-d086cb51]{margin:0;font-size:15px;color:#1a1a1a;font-weight:500}.vehicle-info p[data-v-d086cb51]{margin:4px 0 0;font-size:12px;color:#b2b2b2}.order-dates p[data-v-d086cb51]{margin:0 0 6px;font-size:13px;color:#1a1a1a}.order-dates .label[data-v-d086cb51]{color:#b2b2b2;margin-right:8px}.order-footer[data-v-d086cb51]{display:flex;justify-content:space-between;align-items:center;margin-top:12px;padding-top:12px;border-top:.5px solid #F0F0F0}.amount .label[data-v-d086cb51]{color:#b2b2b2;font-size:12px}.amount .value[data-v-d086cb51]{color:#ff6b00;font-size:18px;font-weight:600;margin-left:4px}.actions[data-v-d086cb51]{display:flex;gap:8px}.order-detail[data-v-d086cb51]{padding:10px 0}.detail-section[data-v-d086cb51]{margin-bottom:16px}.detail-section h4[data-v-d086cb51]{margin:0 0 10px;font-size:15px;color:#1a1a1a;font-weight:600;padding-bottom:8px;border-bottom:.5px solid #F0F0F0}.detail-row[data-v-d086cb51]{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.detail-row .label[data-v-d086cb51]{color:#b2b2b2}.detail-row .value[data-v-d086cb51]{color:#1a1a1a}.detail-row.total[data-v-d086cb51]{margin-top:12px;padding-top:12px;border-top:.5px solid #F0F0F0;font-weight:600}.detail-row.total .value[data-v-d086cb51]{color:#ff6b00;font-size:16px}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
.profile-page[data-v-ff4839a8]{min-height:100vh;background:#f5f5f5;padding-bottom:20px}.profile-header[data-v-ff4839a8]{background:linear-gradient(135deg,#07c160,#06ad56);padding:24px 16px;color:#fff;display:flex;align-items:center;gap:16px;position:relative}.avatar[data-v-ff4839a8]{flex-shrink:0}.user-info[data-v-ff4839a8]{flex:1}.user-info h3[data-v-ff4839a8]{margin:0 0 4px;font-size:20px}.user-info p[data-v-ff4839a8]{margin:0 0 6px;font-size:13px;opacity:.9}.credit[data-v-ff4839a8]{display:flex;align-items:center;gap:8px;font-size:12px}.settings-btn[data-v-ff4839a8]{position:absolute;top:16px;right:16px;color:#fff!important}.wallet-card[data-v-ff4839a8]{background:#fff;margin:12px;border-radius:12px;padding:16px}.wallet-main[data-v-ff4839a8]{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px}.wallet-main .label[data-v-ff4839a8]{color:#666;font-size:14px}.wallet-main .balance[data-v-ff4839a8]{color:#ff6b35;font-size:28px;font-weight:700}.wallet-actions[data-v-ff4839a8]{display:flex;gap:12px}.wallet-actions .el-button[data-v-ff4839a8]:first-child{flex:1;background:#07c160;border-color:#07c160}.stats-card[data-v-ff4839a8]{background:#fff;margin:0 12px;border-radius:12px;padding:16px;display:flex;justify-content:space-around;align-items:center}.stat-item[data-v-ff4839a8]{text-align:center}.stat-item .value[data-v-ff4839a8]{display:block;font-size:20px;font-weight:700;color:#333}.stat-item .label[data-v-ff4839a8]{font-size:12px;color:#999}.stat-divider[data-v-ff4839a8]{width:1px;height:40px;background:#eee}.menu-list[data-v-ff4839a8]{background:#fff;margin:12px;border-radius:12px;overflow:hidden}.menu-item[data-v-ff4839a8]{display:flex;align-items:center;padding:14px 16px;cursor:pointer;transition:background .2s}.menu-item[data-v-ff4839a8]:active{background:#f5f5f5}.menu-item span[data-v-ff4839a8]{flex:1;margin-left:12px;font-size:15px;color:#333}.menu-item .el-icon[data-v-ff4839a8]:last-child{color:#ccc}.recharge-dialog[data-v-ff4839a8]{padding:10px 0}.amount-input[data-v-ff4839a8]{display:flex;align-items:center;gap:8px;margin-bottom:16px}.amount-input .yuan[data-v-ff4839a8]{font-size:24px;color:#333}.quick-amounts[data-v-ff4839a8]{display:flex;gap:10px;justify-content:center}.amount-tag[data-v-ff4839a8]{cursor:pointer;padding:8px 16px}.withdraw-dialog[data-v-ff4839a8]{padding:10px 0}.withdraw-dialog .hint[data-v-ff4839a8]{text-align:center;color:#666;margin-bottom:16px}.transaction-list[data-v-ff4839a8]{max-height:400px;overflow-y:auto}.transaction-item[data-v-ff4839a8]{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid #f5f5f5}.tx-type[data-v-ff4839a8]{display:block;font-size:14px;color:#333}.tx-date[data-v-ff4839a8]{font-size:12px;color:#999}.tx-amount[data-v-ff4839a8]{font-size:16px;font-weight:700}.tx-amount.expense[data-v-ff4839a8]{color:#333}.tx-amount.income[data-v-ff4839a8]{color:#07c160}.settings-list[data-v-ff4839a8]{padding:10px 0}.settings-item[data-v-ff4839a8]{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid #f5f5f5}.about-content[data-v-ff4839a8]{text-align:center;padding:20px 0}.app-logo[data-v-ff4839a8]{font-size:64px;margin-bottom:12px}.about-content h3[data-v-ff4839a8]{margin:0 0 8px}.about-content p[data-v-ff4839a8]{margin:0 0 4px;color:#666}.about-content .desc[data-v-ff4839a8]{margin-top:12px;font-size:13px}
|
||||
|
|
@ -0,0 +1 @@
|
|||
.profile-page[data-v-599b9681]{min-height:100vh;background:#f7f7f7;padding-bottom:20px}.profile-header[data-v-599b9681]{background:#fff;padding:20px 16px;display:flex;align-items:center;gap:14px;position:relative;border-bottom:.5px solid rgba(0,0,0,.06)}.avatar[data-v-599b9681]{flex-shrink:0}.user-info[data-v-599b9681]{flex:1}.user-info h3[data-v-599b9681]{margin:0 0 4px;font-size:18px;font-weight:600;color:#1a1a1a}.user-info p[data-v-599b9681]{margin:0 0 6px;font-size:13px;color:#b2b2b2}.credit[data-v-599b9681]{display:flex;align-items:center;gap:8px;font-size:12px}.settings-btn[data-v-599b9681]{position:absolute;top:16px;right:16px;color:#b2b2b2!important}.wallet-card[data-v-599b9681]{background:#fff;margin:12px;border-radius:16px;padding:16px}.wallet-main[data-v-599b9681]{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px}.wallet-main .label[data-v-599b9681]{color:#b2b2b2;font-size:13px}.wallet-main .balance[data-v-599b9681]{color:#ff6b00;font-size:28px;font-weight:700}.wallet-actions[data-v-599b9681]{display:flex;gap:12px}.wallet-actions .el-button[data-v-599b9681]:first-child{flex:1;background:#ff6b00;border-color:#ff6b00;border-radius:12px}.wallet-actions .el-button[data-v-599b9681]:last-child{border-radius:12px}.stats-card[data-v-599b9681]{background:#fff;margin:0 12px;border-radius:16px;padding:16px;display:flex;justify-content:space-around;align-items:center}.stat-item[data-v-599b9681]{text-align:center}.stat-item .value[data-v-599b9681]{display:block;font-size:20px;font-weight:700;color:#1a1a1a}.stat-item .label[data-v-599b9681]{font-size:10px;color:#b2b2b2;margin-top:4px}.stat-divider[data-v-599b9681]{width:.5px;height:40px;background:#f0f0f0}.menu-list[data-v-599b9681]{background:#fff;margin:12px;border-radius:16px;overflow:hidden}.menu-item[data-v-599b9681]{display:flex;align-items:center;padding:14px 16px;cursor:pointer;transition:background .2s}.menu-item[data-v-599b9681]:active{background:#f7f7f7}.menu-item span[data-v-599b9681]{flex:1;margin-left:12px;font-size:15px;color:#1a1a1a}.menu-item .el-icon[data-v-599b9681]:last-child{color:#b2b2b2}.recharge-dialog[data-v-599b9681]{padding:10px 0}.amount-input[data-v-599b9681]{display:flex;align-items:center;gap:8px;margin-bottom:16px}.amount-input .yuan[data-v-599b9681]{font-size:24px;color:#1a1a1a}.quick-amounts[data-v-599b9681]{display:flex;gap:10px;justify-content:center}.amount-tag[data-v-599b9681]{cursor:pointer;padding:8px 16px}.withdraw-dialog[data-v-599b9681]{padding:10px 0}.withdraw-dialog .hint[data-v-599b9681]{text-align:center;color:#b2b2b2;margin-bottom:16px}.transaction-list[data-v-599b9681]{max-height:400px;overflow-y:auto}.transaction-item[data-v-599b9681]{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:.5px solid #F0F0F0}.tx-type[data-v-599b9681]{display:block;font-size:14px;color:#1a1a1a}.tx-date[data-v-599b9681]{font-size:11px;color:#b2b2b2}.tx-amount[data-v-599b9681]{font-size:16px;font-weight:600}.tx-amount.expense[data-v-599b9681]{color:#1a1a1a}.tx-amount.income[data-v-599b9681]{color:#ff6b00}.settings-list[data-v-599b9681]{padding:10px 0}.settings-item[data-v-599b9681]{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:.5px solid #F0F0F0}.about-content[data-v-599b9681]{text-align:center;padding:20px 0}.app-logo[data-v-599b9681]{font-size:64px;margin-bottom:12px}.about-content h3[data-v-599b9681]{margin:0 0 8px;color:#1a1a1a}.about-content p[data-v-599b9681]{margin:0 0 4px;color:#b2b2b2}.about-content .desc[data-v-599b9681]{margin-top:12px;font-size:13px}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
import{o as d,c as v,a as t,b as e,w as i,n as l,e as r,h,d as n}from"./index-CZe38Ow-.js";const p={class:"tab-layout"},b={class:"tab-content"},u={class:"tab-bar"},y={__name:"TabLayout",setup(w){const o=h();return(x,s)=>{const c=n("router-view"),a=n("router-link");return d(),v("div",p,[t("div",b,[e(c)]),t("div",u,[e(a,{to:"/",class:l(["tab-item",{active:r(o).path==="/"}])},{default:i(()=>[...s[0]||(s[0]=[t("div",{class:"tab-icon"},[t("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8"},[t("path",{d:"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"}),t("polyline",{points:"9,22 9,12 15,12 15,22"})])],-1),t("div",{class:"tab-label"},"首页",-1)])]),_:1},8,["class"]),e(a,{to:"/vehicles",class:l(["tab-item",{active:r(o).path.startsWith("/vehicles")}])},{default:i(()=>[...s[1]||(s[1]=[t("div",{class:"tab-icon"},[t("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8"},[t("rect",{x:"1",y:"3",width:"15",height:"13",rx:"2",ry:"2"}),t("polygon",{points:"16,8 20,8 23,11 23,16 16,16 16,8"}),t("circle",{cx:"5.5",cy:"18.5",r:"2.5"}),t("circle",{cx:"18.5",cy:"18.5",r:"2.5"})])],-1),t("div",{class:"tab-label"},"租车",-1)])]),_:1},8,["class"]),e(a,{to:"/orders",class:l(["tab-item",{active:r(o).path.startsWith("/orders")}])},{default:i(()=>[...s[2]||(s[2]=[t("div",{class:"tab-icon"},[t("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8"},[t("path",{d:"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"}),t("polyline",{points:"14,2 14,8 20,8"}),t("line",{x1:"16",y1:"13",x2:"8",y2:"13"}),t("line",{x1:"16",y1:"17",x2:"8",y2:"17"}),t("polyline",{points:"10,9 9,9 8,9"})])],-1),t("div",{class:"tab-label"},"订单",-1)])]),_:1},8,["class"]),e(a,{to:"/profile",class:l(["tab-item",{active:r(o).path.startsWith("/profile")}])},{default:i(()=>[...s[3]||(s[3]=[t("div",{class:"tab-icon"},[t("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8"},[t("path",{d:"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"}),t("circle",{cx:"12",cy:"7",r:"4"})])],-1),t("div",{class:"tab-label"},"我的",-1)])]),_:1},8,["class"])])])}}};export{y as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{_ as p,o as s,c as n,a,b as c,F as d,g as h,h as v,d as l,i as f,w as m,j as b,k,t as y,m as C,v as w,q as B,s as g}from"./index-BjjMa8ds.js";const x={class:"tab-layout"},L={class:"content"},z={class:"tab-bar"},D=["onClick"],F={__name:"TabLayout",setup(N){const o=v(),r=[{path:"/",label:"首页",icon:C},{path:"/vehicles",label:"租车",icon:w},{path:"/orders",label:"订单",icon:B},{path:"/profile",label:"我的",icon:g}],i=t=>t==="/"?o.path==="/":o.path.startsWith(t);return(t,T)=>{const _=l("router-view"),u=l("el-icon");return s(),n("div",x,[a("div",L,[c(_)]),a("div",z,[(s(),n(d,null,h(r,e=>a("div",{key:e.path,class:f(["tab-item",{active:i(e.path)}]),onClick:V=>t.$router.push(e.path)},[c(u,{size:24},{default:m(()=>[(s(),b(k(e.icon)))]),_:2},1024),a("span",null,y(e.label),1)],10,D)),64))])])}}},j=p(F,[["__scopeId","data-v-b4bf5f5f"]]);export{j as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
.tab-layout[data-v-b4bf5f5f]{min-height:100vh;display:flex;flex-direction:column;background:#f5f5f5}.content[data-v-b4bf5f5f]{flex:1;overflow-y:auto;padding-bottom:60px}.tab-bar[data-v-b4bf5f5f]{position:fixed;bottom:0;left:0;right:0;height:56px;background:#fff;display:flex;box-shadow:0 -2px 10px #0000001a;z-index:100}.tab-item[data-v-b4bf5f5f]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;cursor:pointer;transition:color .2s}.tab-item span[data-v-b4bf5f5f]{font-size:12px;margin-top:2px}.tab-item.active[data-v-b4bf5f5f]{color:#07c160}
|
||||
|
|
@ -0,0 +1 @@
|
|||
*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;background:#fff7f0;-webkit-font-smoothing:antialiased}a{text-decoration:none;color:inherit}.tab-layout{height:100vh;display:flex;flex-direction:column}.tab-content{flex:1;overflow-y:auto;padding-bottom:calc(60px + env(safe-area-inset-bottom))}.tab-bar{position:fixed;bottom:0;left:0;right:0;height:calc(56px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:#ffffffeb;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);display:flex;border-top:.5px solid rgba(0,0,0,.08);z-index:100}.tab-item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#9b9b9b;transition:color .2s;gap:2px}.tab-item.active{color:#ff6b00}.tab-icon{display:flex;align-items:center;justify-content:center;line-height:1}.tab-label{font-size:10px;font-weight:500}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
.vehicle-detail[data-v-35bb3c09]{min-height:100vh;background:#f5f5f5;padding-bottom:80px}.detail-header[data-v-35bb3c09]{background:linear-gradient(135deg,#07c160,#06ad56);padding:12px 8px;color:#fff;display:flex;align-items:center;gap:8px;position:sticky;top:0;z-index:10}.detail-header span[data-v-35bb3c09]{font-size:16px}.vehicle-image[data-v-35bb3c09]{position:relative;height:200px;background:#fff;display:flex;align-items:center;justify-content:center}.image-placeholder[data-v-35bb3c09]{font-size:120px}.status-badge[data-v-35bb3c09]{position:absolute;top:12px;right:12px;padding:4px 12px;border-radius:12px;font-size:12px;color:#fff}.status-badge.空闲[data-v-35bb3c09]{background:#07c160}.status-badge.在租[data-v-35bb3c09]{background:#ff6b35}.detail-content[data-v-35bb3c09]{padding:12px}.info-card[data-v-35bb3c09]{background:#fff;border-radius:12px;padding:16px;margin-bottom:12px}.info-card h2[data-v-35bb3c09]{margin:0 0 12px;font-size:22px;color:#333}.info-card h3[data-v-35bb3c09]{margin:0 0 12px;font-size:16px;color:#333}.tags[data-v-35bb3c09]{display:flex;gap:8px}.price-list[data-v-35bb3c09]{display:flex;flex-direction:column;gap:12px}.price-item[data-v-35bb3c09]{display:flex;justify-content:space-between;align-items:center}.price-item .label[data-v-35bb3c09]{color:#666;font-size:14px}.price-item .value[data-v-35bb3c09]{color:#333;font-size:16px}.price-item .value.primary[data-v-35bb3c09]{color:#ff6b35;font-size:20px;font-weight:700}.info-list[data-v-35bb3c09]{display:flex;flex-direction:column;gap:10px}.info-row[data-v-35bb3c09]{display:flex;justify-content:space-between}.info-row .label[data-v-35bb3c09]{color:#666}.info-row .value[data-v-35bb3c09]{color:#333}.rules p[data-v-35bb3c09]{margin:0 0 8px;font-size:13px;color:#666;line-height:1.6}.bottom-action[data-v-35bb3c09]{position:fixed;bottom:0;left:0;right:0;background:#fff;padding:12px 16px;display:flex;align-items:center;gap:12px;box-shadow:0 -2px 10px #0000001a}.price-info[data-v-35bb3c09]{flex:1}.price-info .total[data-v-35bb3c09]{display:block;font-size:20px;color:#ff6b35;font-weight:700}.price-info .hint[data-v-35bb3c09]{font-size:12px;color:#999}.bottom-action .el-button[data-v-35bb3c09]{flex:1;background:#07c160;border-color:#07c160}.rent-dialog[data-v-35bb3c09]{padding:10px 0}.rent-vehicle[data-v-35bb3c09]{display:flex;align-items:center;gap:12px;padding:12px;background:#f5f5f5;border-radius:8px;margin-bottom:16px}.rent-vehicle .icon[data-v-35bb3c09]{font-size:40px}.rent-vehicle h4[data-v-35bb3c09]{margin:0;font-size:16px}.rent-vehicle p[data-v-35bb3c09]{margin:4px 0 0;font-size:13px;color:#999}.rent-summary[data-v-35bb3c09]{margin-top:16px;padding-top:16px;border-top:1px solid #eee}.summary-row[data-v-35bb3c09]{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px;color:#666}.summary-row.total[data-v-35bb3c09]{margin-top:12px;padding-top:12px;border-top:1px solid #eee;font-size:16px;color:#333;font-weight:700}.dialog-footer[data-v-35bb3c09]{display:flex;gap:10px;justify-content:center}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
.vehicle-detail[data-v-92bc97ae]{min-height:100vh;background:#f7f7f7;padding-bottom:80px}.detail-header[data-v-92bc97ae]{background:#fff;padding:12px 8px;color:#1a1a1a;display:flex;align-items:center;gap:8px;position:sticky;top:0;z-index:10;border-bottom:.5px solid rgba(0,0,0,.06)}.detail-header span[data-v-92bc97ae]{font-size:16px;font-weight:600}.vehicle-image[data-v-92bc97ae]{position:relative;height:200px;background:#fff;display:flex;align-items:center;justify-content:center}.image-placeholder[data-v-92bc97ae]{font-size:120px}.status-badge[data-v-92bc97ae]{position:absolute;top:12px;right:12px;padding:4px 12px;border-radius:12px;font-size:12px;color:#fff}.status-badge.u7a7au95f2[data-v-92bc97ae]{background:#ff6b00}.status-badge.u5728u79df[data-v-92bc97ae]{background:#ff8c00}.detail-content[data-v-92bc97ae]{padding:12px}.info-card[data-v-92bc97ae]{background:#fff;border-radius:16px;padding:16px;margin-bottom:10px}.info-card h2[data-v-92bc97ae]{margin:0 0 12px;font-size:20px;font-weight:600;color:#1a1a1a}.info-card h3[data-v-92bc97ae]{margin:0 0 12px;font-size:16px;font-weight:600;color:#1a1a1a}.tags[data-v-92bc97ae]{display:flex;gap:8px}.price-list[data-v-92bc97ae]{display:flex;flex-direction:column;gap:12px}.price-item[data-v-92bc97ae]{display:flex;justify-content:space-between;align-items:center}.price-item .label[data-v-92bc97ae]{color:#b2b2b2;font-size:14px}.price-item .value[data-v-92bc97ae]{color:#1a1a1a;font-size:16px}.price-item .value.primary[data-v-92bc97ae]{color:#ff6b00;font-size:20px;font-weight:700}.info-list[data-v-92bc97ae]{display:flex;flex-direction:column;gap:10px}.info-row[data-v-92bc97ae]{display:flex;justify-content:space-between}.info-row .label[data-v-92bc97ae]{color:#b2b2b2}.info-row .value[data-v-92bc97ae]{color:#1a1a1a}.rules p[data-v-92bc97ae]{margin:0 0 8px;font-size:13px;color:#b2b2b2;line-height:1.6}.bottom-action[data-v-92bc97ae]{position:fixed;bottom:0;left:0;right:0;background:#fffffff2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);padding:12px 16px;padding-bottom:calc(12px + env(safe-area-inset-bottom));display:flex;align-items:center;gap:12px;border-top:.5px solid rgba(0,0,0,.06)}.price-info[data-v-92bc97ae]{flex:1}.price-info .total[data-v-92bc97ae]{display:block;font-size:20px;color:#ff6b00;font-weight:700}.price-info .hint[data-v-92bc97ae]{font-size:11px;color:#b2b2b2}.bottom-action .el-button[data-v-92bc97ae]{flex:1;background:#ff6b00;border-color:#ff6b00;border-radius:12px}.rent-dialog[data-v-92bc97ae]{padding:10px 0}.rent-vehicle[data-v-92bc97ae]{display:flex;align-items:center;gap:12px;padding:12px;background:#f7f7f7;border-radius:12px;margin-bottom:16px}.rent-vehicle .icon[data-v-92bc97ae]{font-size:40px}.rent-vehicle h4[data-v-92bc97ae]{margin:0;font-size:16px;color:#1a1a1a}.rent-vehicle p[data-v-92bc97ae]{margin:4px 0 0;font-size:12px;color:#b2b2b2}.rent-summary[data-v-92bc97ae]{margin-top:16px;padding-top:16px;border-top:.5px solid #F0F0F0}.summary-row[data-v-92bc97ae]{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px;color:#b2b2b2}.summary-row.total[data-v-92bc97ae]{margin-top:12px;padding-top:12px;border-top:.5px solid #F0F0F0;font-size:16px;color:#1a1a1a;font-weight:600}.dialog-footer[data-v-92bc97ae]{display:flex;gap:10px;justify-content:center}
|
||||
|
|
@ -1 +0,0 @@
|
|||
.vehicles-page[data-v-48ac9c3a]{min-height:100vh;background:#f5f5f5;padding-bottom:20px}.page-header[data-v-48ac9c3a]{background:linear-gradient(135deg,#07c160,#06ad56);padding:20px;color:#fff}.page-header h2[data-v-48ac9c3a]{margin:0 0 4px;font-size:22px}.page-header p[data-v-48ac9c3a]{margin:0;font-size:14px;opacity:.9}.filter-bar[data-v-48ac9c3a]{display:flex;gap:10px;padding:12px;background:#fff}.vehicle-list[data-v-48ac9c3a]{padding:0 12px}.vehicle-card[data-v-48ac9c3a]{background:#fff;border-radius:12px;padding:16px;margin-bottom:12px;display:flex;align-items:center;cursor:pointer;transition:transform .2s}.vehicle-card[data-v-48ac9c3a]:active{transform:scale(.98)}.vehicle-img[data-v-48ac9c3a]{position:relative;width:80px;height:80px;background:#f5f5f5;border-radius:8px;display:flex;align-items:center;justify-content:center}.vehicle-img .emoji[data-v-48ac9c3a]{font-size:40px}.status-tag[data-v-48ac9c3a]{position:absolute;top:-8px;right:-8px}.vehicle-info[data-v-48ac9c3a]{flex:1;margin-left:12px}.vehicle-info h4[data-v-48ac9c3a]{margin:0 0 6px;font-size:16px;color:#333}.tags[data-v-48ac9c3a]{display:flex;gap:4px;margin-bottom:8px}.price-row[data-v-48ac9c3a]{display:flex;align-items:baseline;gap:12px}.price[data-v-48ac9c3a]{color:#ff6b35;font-size:18px;font-weight:700}.deposit[data-v-48ac9c3a]{color:#999;font-size:12px}.vehicle-arrow[data-v-48ac9c3a]{color:#ccc}
|
||||
|
|
@ -0,0 +1 @@
|
|||
.vehicles-page[data-v-5ef92e98]{min-height:100vh;background:#f7f7f7;padding-bottom:20px}.page-header[data-v-5ef92e98]{background:#fff;padding:20px 16px 16px;border-bottom:.5px solid rgba(0,0,0,.06)}.page-header h2[data-v-5ef92e98]{margin:0 0 4px;font-size:20px;font-weight:600;color:#1a1a1a}.page-header p[data-v-5ef92e98]{margin:0;font-size:13px;color:#b2b2b2}.filter-bar[data-v-5ef92e98]{display:flex;gap:10px;padding:12px;background:#fff;margin-bottom:4px}.vehicle-list[data-v-5ef92e98]{padding:0 12px}.vehicle-card[data-v-5ef92e98]{background:#fff;border-radius:16px;padding:16px;margin-bottom:10px;display:flex;align-items:center;cursor:pointer}.vehicle-img[data-v-5ef92e98]{position:relative;width:72px;height:72px;background:#f7f7f7;border-radius:12px;display:flex;align-items:center;justify-content:center}.vehicle-img .emoji[data-v-5ef92e98]{font-size:36px}.status-tag[data-v-5ef92e98]{position:absolute;top:-6px;right:-6px}.vehicle-info[data-v-5ef92e98]{flex:1;margin-left:12px}.vehicle-info h4[data-v-5ef92e98]{margin:0 0 6px;font-size:15px;color:#1a1a1a;font-weight:500}.tags[data-v-5ef92e98]{display:flex;gap:4px;margin-bottom:8px}.price-row[data-v-5ef92e98]{display:flex;align-items:baseline;gap:12px}.price[data-v-5ef92e98]{color:#ff6b00;font-size:17px;font-weight:600}.deposit[data-v-5ef92e98]{color:#b2b2b2;font-size:12px}.vehicle-arrow[data-v-5ef92e98]{color:#b2b2b2;font-size:14px}
|
||||
|
|
@ -1 +1 @@
|
|||
import{_ as z,x as D,o as i,c as _,a as t,b as s,w as c,D as C,F as M,g as B,j as N,z as j,r as v,d as n,G as F,H as I,u as R,f as y,t as r,e as S,I as U}from"./index-BjjMa8ds.js";import{r as $}from"./request-DB47Z7vM.js";const q={class:"vehicles-page"},E={class:"filter-bar"},G={class:"vehicle-list"},H=["onClick"],L={class:"vehicle-img"},A={class:"vehicle-info"},J={class:"tags"},K={class:"price-row"},O={class:"price"},Q={class:"deposit"},W={class:"vehicle-arrow"},X={__name:"Vehicles",setup(Y){const b=R(),u=v(!1),m=v([]),d=v(""),p=v(""),V=l=>{const a=l.purchasePrice||3e3;return Math.round(a/100)},f=I(()=>m.value.filter(l=>{const a=!d.value||l.batteryType===d.value,o=!p.value||l.status===p.value;return a&&o})),w=async()=>{u.value=!0;try{const l=await $.get("/vehicles");l.success&&(m.value=l.data)}catch{m.value=[{_id:"1",model:"黑骑士",color:"黑色",batteryType:"锂电池",purchasePrice:3500,status:"空闲"},{_id:"2",model:"黑骑士",color:"白色",batteryType:"锂电池",purchasePrice:3500,status:"空闲"},{_id:"3",model:"电动车",color:"蓝色",batteryType:"铅酸电池",purchasePrice:2800,status:"空闲"},{_id:"4",model:"高端豪车",color:"红色",batteryType:"锂电池",purchasePrice:8e3,status:"空闲"},{_id:"5",model:"普通标准套餐",color:"绿色",batteryType:"铅酸电池",purchasePrice:2500,status:"在租"}]}finally{u.value=!1}},P=l=>{b.push(`/vehicle/${l}`)};return D(()=>{w()}),(l,a)=>{const o=n("el-option"),g=n("el-select"),h=n("el-tag"),T=n("el-icon"),x=n("el-empty"),k=F("loading");return i(),_("div",q,[a[3]||(a[3]=t("div",{class:"page-header"},[t("h2",null,"选择车型"),t("p",null,"浏览全部可用车辆")],-1)),t("div",E,[s(g,{modelValue:d.value,"onUpdate:modelValue":a[0]||(a[0]=e=>d.value=e),placeholder:"电池类型",size:"small",style:{width:"100px"}},{default:c(()=>[s(o,{label:"全部",value:""}),s(o,{label:"锂电池",value:"锂电池"}),s(o,{label:"铅酸电池",value:"铅酸电池"})]),_:1},8,["modelValue"]),s(g,{modelValue:p.value,"onUpdate:modelValue":a[1]||(a[1]=e=>p.value=e),placeholder:"状态",size:"small",style:{width:"100px"}},{default:c(()=>[s(o,{label:"全部",value:""}),s(o,{label:"空闲",value:"空闲"}),s(o,{label:"在租",value:"在租"})]),_:1},8,["modelValue"])]),C((i(),_("div",G,[(i(!0),_(M,null,B(f.value,e=>(i(),_("div",{key:e._id,class:"vehicle-card",onClick:Z=>P(e._id)},[t("div",L,[a[2]||(a[2]=t("span",{class:"emoji"},"🛵",-1)),s(h,{type:e.status==="空闲"?"success":"warning",class:"status-tag",size:"small"},{default:c(()=>[y(r(e.status),1)]),_:2},1032,["type"])]),t("div",A,[t("h4",null,r(e.model),1),t("div",J,[s(h,{size:"small",type:"info"},{default:c(()=>[y(r(e.color),1)]),_:2},1024),s(h,{size:"small",type:"info"},{default:c(()=>[y(r(e.batteryType),1)]),_:2},1024)]),t("div",K,[t("span",O,"¥"+r(V(e))+"/天",1),t("span",Q,"押金: ¥"+r(e.purchasePrice?Math.round(e.purchasePrice*.1):200),1)])]),t("div",W,[s(T,null,{default:c(()=>[s(S(U))]),_:1})])],8,H))),128)),!u.value&&f.value.length===0?(i(),N(x,{key:0,description:"暂无车辆"})):j("",!0)])),[[k,u.value]])])}}},se=z(X,[["__scopeId","data-v-48ac9c3a"]]);export{se as default};
|
||||
import{_ as z,i as C,o as i,c as _,a as t,b as s,w as c,q as D,F as M,j as B,s as N,p as j,r as v,d as n,v as q,x as F,u as R,g as y,t as r,e as S,y as U}from"./index-CZe38Ow-.js";import{r as $}from"./request-DftRczcY.js";const E={class:"vehicles-page"},I={class:"filter-bar"},L={class:"vehicle-list"},A=["onClick"],G={class:"vehicle-img"},H={class:"vehicle-info"},J={class:"tags"},K={class:"price-row"},O={class:"price"},Q={class:"deposit"},W={class:"vehicle-arrow"},X={__name:"Vehicles",setup(Y){const b=R(),u=v(!1),m=v([]),d=v(""),p=v(""),V=l=>{const a=l.purchasePrice||3e3;return Math.round(a/100)},f=F(()=>m.value.filter(l=>{const a=!d.value||l.batteryType===d.value,o=!p.value||l.status===p.value;return a&&o})),w=async()=>{u.value=!0;try{const l=await $.get("/vehicles");l.success&&(m.value=l.data)}catch{m.value=[{_id:"1",model:"黑骑士",color:"黑色",batteryType:"锂电池",purchasePrice:3500,status:"空闲"},{_id:"2",model:"黑骑士",color:"白色",batteryType:"锂电池",purchasePrice:3500,status:"空闲"},{_id:"3",model:"电动车",color:"蓝色",batteryType:"铅酸电池",purchasePrice:2800,status:"空闲"},{_id:"4",model:"高端豪车",color:"红色",batteryType:"锂电池",purchasePrice:8e3,status:"空闲"},{_id:"5",model:"普通标准套餐",color:"绿色",batteryType:"铅酸电池",purchasePrice:2500,status:"在租"}]}finally{u.value=!1}},P=l=>{b.push(`/vehicle/${l}`)};return C(()=>{w()}),(l,a)=>{const o=n("el-option"),g=n("el-select"),h=n("el-tag"),T=n("el-icon"),x=n("el-empty"),k=q("loading");return i(),_("div",E,[a[3]||(a[3]=t("div",{class:"page-header"},[t("h2",null,"选择车型"),t("p",null,"浏览全部可用车辆")],-1)),t("div",I,[s(g,{modelValue:d.value,"onUpdate:modelValue":a[0]||(a[0]=e=>d.value=e),placeholder:"电池类型",size:"small",style:{width:"100px"}},{default:c(()=>[s(o,{label:"全部",value:""}),s(o,{label:"锂电池",value:"锂电池"}),s(o,{label:"铅酸电池",value:"铅酸电池"})]),_:1},8,["modelValue"]),s(g,{modelValue:p.value,"onUpdate:modelValue":a[1]||(a[1]=e=>p.value=e),placeholder:"状态",size:"small",style:{width:"100px"}},{default:c(()=>[s(o,{label:"全部",value:""}),s(o,{label:"空闲",value:"空闲"}),s(o,{label:"在租",value:"在租"})]),_:1},8,["modelValue"])]),D((i(),_("div",L,[(i(!0),_(M,null,B(f.value,e=>(i(),_("div",{key:e._id,class:"vehicle-card",onClick:Z=>P(e._id)},[t("div",G,[a[2]||(a[2]=t("span",{class:"emoji"},"🛵",-1)),s(h,{type:e.status==="空闲"?"success":"warning",class:"status-tag",size:"small"},{default:c(()=>[y(r(e.status),1)]),_:2},1032,["type"])]),t("div",H,[t("h4",null,r(e.model),1),t("div",J,[s(h,{size:"small",type:"info"},{default:c(()=>[y(r(e.color),1)]),_:2},1024),s(h,{size:"small",type:"info"},{default:c(()=>[y(r(e.batteryType),1)]),_:2},1024)]),t("div",K,[t("span",O,"¥"+r(V(e))+"/天",1),t("span",Q,"押金: ¥"+r(e.purchasePrice?Math.round(e.purchasePrice*.1):200),1)])]),t("div",W,[s(T,null,{default:c(()=>[s(S(U))]),_:1})])],8,A))),128)),!u.value&&f.value.length===0?(i(),N(x,{key:0,description:"暂无车辆"})):j("",!0)])),[[k,u.value]])])}}},se=z(X,[["__scopeId","data-v-5ef92e98"]]);export{se as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -4,14 +4,14 @@
|
|||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<meta name="theme-color" content="#07c160" />
|
||||
<meta name="theme-color" content="#FF6B00" />
|
||||
<title>租车用户端 - 电动车租赁</title>
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
|
||||
</style>
|
||||
<script type="module" crossorigin src="/assets/index-BjjMa8ds.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-CwgJcKt6.css">
|
||||
<script type="module" crossorigin src="/assets/index-CZe38Ow-.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-B3zBkNS6.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "^2.3.2",
|
||||
"@rollup/rollup-linux-x64-gnu": "^4.60.0",
|
||||
"axios": "^1.13.6",
|
||||
"element-plus": "^2.13.3",
|
||||
"vue": "^3.5.25",
|
||||
|
|
@ -814,15 +815,13 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||
"version": "4.59.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
|
||||
"integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
|
||||
"version": "4.60.0",
|
||||
"resolved": "http://mirrors.tencentyun.com/npm/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.0.tgz",
|
||||
"integrity": "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
|
|
@ -1729,6 +1728,20 @@
|
|||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||
"version": "4.59.0",
|
||||
"resolved": "http://mirrors.tencentyun.com/npm/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
|
||||
"integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/source-map-js": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||
|
|
@ -1757,7 +1770,7 @@
|
|||
},
|
||||
"node_modules/vite": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
|
||||
"resolved": "http://mirrors.tencentyun.com/npm/vite/-/vite-7.3.1.tgz",
|
||||
"integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "^2.3.2",
|
||||
"@rollup/rollup-linux-x64-gnu": "^4.60.0",
|
||||
"axios": "^1.13.6",
|
||||
"element-plus": "^2.13.3",
|
||||
"vue": "^3.5.25",
|
||||
|
|
|
|||
|
|
@ -20,13 +20,13 @@ const routes = [
|
|||
]
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
history: createWebHistory('/rider/'),
|
||||
routes
|
||||
})
|
||||
|
||||
// 路由守卫
|
||||
router.beforeEach((to, from, next) => {
|
||||
const token = localStorage.getItem('customer_token')
|
||||
const token = localStorage.getItem('token')
|
||||
if (to.path !== '/login' && !token) {
|
||||
next('/login')
|
||||
} else if (to.path === '/login' && token) {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ const request = axios.create({
|
|||
// 请求拦截器
|
||||
request.interceptors.request.use(
|
||||
config => {
|
||||
const token = localStorage.getItem('customer_token')
|
||||
const token = localStorage.getItem('token')
|
||||
if (token) {
|
||||
config.headers.Authorization = `Bearer ${token}`
|
||||
}
|
||||
|
|
@ -23,8 +23,8 @@ request.interceptors.response.use(
|
|||
response => response.data,
|
||||
error => {
|
||||
if (error.response?.status === 401) {
|
||||
localStorage.removeItem('customer_token')
|
||||
localStorage.removeItem('customer_info')
|
||||
localStorage.removeItem('token')
|
||||
localStorage.removeItem('riderInfo')
|
||||
router.push('/login')
|
||||
}
|
||||
return Promise.reject(error)
|
||||
|
|
|
|||
|
|
@ -7,176 +7,78 @@
|
|||
</div>
|
||||
|
||||
<div class="login-form">
|
||||
<el-tabs v-model="loginType" class="login-tabs">
|
||||
<el-tab-pane label="手机号登录" name="phone">
|
||||
<el-form ref="phoneFormRef" :model="phoneForm" :rules="phoneRules">
|
||||
<el-form-item prop="phone">
|
||||
<el-input
|
||||
v-model="phoneForm.phone"
|
||||
placeholder="请输入手机号"
|
||||
size="large"
|
||||
:prefix-icon="Phone"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code">
|
||||
<el-input
|
||||
v-model="phoneForm.code"
|
||||
placeholder="请输入验证码"
|
||||
size="large"
|
||||
:prefix-icon="Lock"
|
||||
style="width: 60%"
|
||||
>
|
||||
<template #append>
|
||||
<el-button @click="sendCode" :disabled="codeTimer > 0">
|
||||
{{ codeTimer > 0 ? `${codeTimer}s` : '获取验证码' }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="密码登录" name="password">
|
||||
<el-form ref="pwdFormRef" :model="pwdForm" :rules="pwdRules">
|
||||
<el-form-item prop="phone">
|
||||
<el-input
|
||||
v-model="pwdForm.phone"
|
||||
placeholder="请输入手机号"
|
||||
size="large"
|
||||
:prefix-icon="Phone"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item prop="password">
|
||||
<el-input
|
||||
v-model="pwdForm.password"
|
||||
type="password"
|
||||
placeholder="请输入密码"
|
||||
size="large"
|
||||
:prefix-icon="Lock"
|
||||
show-password
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<el-form ref="formRef" :model="loginForm" :rules="rules" size="large">
|
||||
<el-form-item prop="username">
|
||||
<el-input
|
||||
v-model="loginForm.username"
|
||||
placeholder="请输入账号"
|
||||
:prefix-icon="User"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item prop="password">
|
||||
<el-input
|
||||
v-model="loginForm.password"
|
||||
type="password"
|
||||
placeholder="请输入密码"
|
||||
:prefix-icon="Lock"
|
||||
show-password
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-button type="primary" size="large" :loading="loading" class="login-btn" @click="handleLogin">
|
||||
登录
|
||||
</el-button>
|
||||
|
||||
<div class="demo-hint">
|
||||
<p>演示账号:13800138000 / 123456</p>
|
||||
<p>演示账号:rider_demo / demo123</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, nextTick } from 'vue'
|
||||
import { ref } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Phone, Lock } from '@element-plus/icons-vue'
|
||||
import { User, Lock } from '@element-plus/icons-vue'
|
||||
import request from '../utils/request'
|
||||
|
||||
const router = useRouter()
|
||||
const loginType = ref('password')
|
||||
const loading = ref(false)
|
||||
const codeTimer = ref(0)
|
||||
const formRef = ref(null)
|
||||
|
||||
const phoneFormRef = ref()
|
||||
const pwdFormRef = ref()
|
||||
|
||||
const phoneForm = ref({
|
||||
phone: '13800138000',
|
||||
code: '123456'
|
||||
const loginForm = ref({
|
||||
username: '',
|
||||
password: ''
|
||||
})
|
||||
|
||||
const pwdForm = ref({
|
||||
phone: '13800138000',
|
||||
password: '123456'
|
||||
})
|
||||
|
||||
const phoneRules = {
|
||||
phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }],
|
||||
code: [{ required: true, message: '请输入验证码', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
const pwdRules = {
|
||||
phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }],
|
||||
const rules = {
|
||||
username: [{ required: true, message: '请输入账号', trigger: 'blur' }],
|
||||
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
// 发送验证码
|
||||
const sendCode = () => {
|
||||
if (!phoneForm.value.phone) {
|
||||
ElMessage.warning('请输入手机号')
|
||||
return
|
||||
}
|
||||
// 模拟发送验证码
|
||||
ElMessage.success('验证码已发送')
|
||||
codeTimer.value = 60
|
||||
const timer = setInterval(() => {
|
||||
codeTimer.value--
|
||||
if (codeTimer.value <= 0) clearInterval(timer)
|
||||
}, 1000)
|
||||
}
|
||||
|
||||
// 登录
|
||||
const handleLogin = async () => {
|
||||
try {
|
||||
let formRef = loginType.value === 'phone' ? phoneFormRef.value : pwdFormRef.value
|
||||
await formRef.validate()
|
||||
loading.value = true
|
||||
const valid = await formRef.value.validate().catch(() => false)
|
||||
if (!valid) return
|
||||
|
||||
// 使用密码登录
|
||||
const res = await request.post('/customers/login', {
|
||||
phone: pwdForm.value.phone,
|
||||
password: pwdForm.value.password
|
||||
}).catch(async () => {
|
||||
// 如果没有专门的登录接口,尝试用手机号查找客户
|
||||
const customers = await request.get('/customers')
|
||||
if (customers.success && customers.data) {
|
||||
const customer = customers.data.find(c => c.phone === pwdForm.value.phone)
|
||||
if (customer) {
|
||||
return { success: true, data: customer }
|
||||
}
|
||||
}
|
||||
throw new Error('登录失败')
|
||||
loading.value = true
|
||||
try {
|
||||
const res = await request.post('/auth/login', {
|
||||
username: loginForm.value.username,
|
||||
password: loginForm.value.password
|
||||
})
|
||||
|
||||
if (res.success && res.data) {
|
||||
const customer = res.data
|
||||
const token = btoa(`${customer._id}:${Date.now()}`)
|
||||
localStorage.setItem('customer_token', token)
|
||||
localStorage.setItem('customer_info', JSON.stringify(customer))
|
||||
localStorage.setItem('customer_id', customer._id)
|
||||
if (res.success && res.data && res.data.token) {
|
||||
localStorage.setItem('token', res.data.token)
|
||||
localStorage.setItem('riderInfo', JSON.stringify(res.data))
|
||||
ElMessage.success('登录成功')
|
||||
await nextTick()
|
||||
router.push('/')
|
||||
} else {
|
||||
ElMessage.error(res.message || '登录失败')
|
||||
}
|
||||
} catch (e) {
|
||||
// 如果API不存在,使用本地模拟登录
|
||||
if (pwdForm.value.phone === '13800138000' && pwdForm.value.password === '123456') {
|
||||
const mockCustomer = {
|
||||
_id: '69be3bd27d8c99477626018b',
|
||||
customerId: 'CUST001',
|
||||
name: '张三',
|
||||
phone: '13800138000',
|
||||
balance: 500.00,
|
||||
totalRentals: 5,
|
||||
creditScore: 100
|
||||
}
|
||||
const token = btoa(`${mockCustomer._id}:${Date.now()}`)
|
||||
localStorage.setItem('customer_token', token)
|
||||
localStorage.setItem('customer_info', JSON.stringify(mockCustomer))
|
||||
localStorage.setItem('customer_id', mockCustomer._id)
|
||||
ElMessage.success('登录成功(演示模式)')
|
||||
await nextTick()
|
||||
router.push('/')
|
||||
} else {
|
||||
ElMessage.error('手机号或密码错误')
|
||||
}
|
||||
ElMessage.error(e.response?.data?.message || '登录失败,请检查账号密码')
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
|
|
@ -226,24 +128,7 @@ const handleLogin = async () => {
|
|||
box-shadow: 0 2px 12px rgba(0,0,0,0.06);
|
||||
}
|
||||
|
||||
.login-tabs :deep(.el-tabs__header) {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.login-tabs :deep(.el-tabs__item) {
|
||||
font-size: 15px;
|
||||
color: #B2B2B2;
|
||||
}
|
||||
|
||||
.login-tabs :deep(.el-tabs__item.is-active) {
|
||||
color: #FF6B00;
|
||||
}
|
||||
|
||||
.login-tabs :deep(.el-tabs__active-bar) {
|
||||
background-color: #FF6B00;
|
||||
}
|
||||
|
||||
.login-tabs :deep(.el-input__wrapper) {
|
||||
.login-form :deep(.el-input__wrapper) {
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
import { defineConfig } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
|
||||
// https://vite.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
server: {
|
||||
port: 5177,
|
||||
host: true,
|
||||
port: 5174,
|
||||
host: '0.0.0.0',
|
||||
allowedHosts: ['51bike.online', 'rider.51bike.online'],
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://localhost:3000',
|
||||
|
|
|
|||
Loading…
Reference in New Issue