first commit
This commit is contained in:
1
unpackage/dist/build/mp-weixin/pages/appointments/appointments.js
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/appointments/appointments.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/api.js");if(!Array){(e.resolveComponent("t-tab-panel")+e.resolveComponent("t-tabs")+e.resolveComponent("t-loading")+e.resolveComponent("t-empty")+e.resolveComponent("t-tag")+e.resolveComponent("t-button"))()}Math||((()=>"../../uni_modules/tdesign-uniapp/components/tab-panel/tab-panel.js")+(()=>"../../uni_modules/tdesign-uniapp/components/tabs/tabs.js")+(()=>"../../uni_modules/tdesign-uniapp/components/loading/loading.js")+(()=>"../../uni_modules/tdesign-uniapp/components/empty/empty.js")+(()=>"../../uni_modules/tdesign-uniapp/components/tag/tag.js")+(()=>"../../uni_modules/tdesign-uniapp/components/button/button.js"))();const n=e.defineComponent({__name:"appointments",setup(n){const a=e.ref("all"),l=e.ref([]),o=e.ref(!1);e.onMounted((()=>{s()}));const s=async()=>{o.value=!0;try{const e={};"all"!==a.value&&(e.status=a.value),l.value=await t.api.appointments.getList(e)}catch(e){console.error("加载预约失败",e)}finally{o.value=!1}},i=e=>{const t="string"==typeof e?e:(null==e?void 0:e.value)||"all";a.value=t,s()},p=e=>({pending:"warning",confirmed:"success",completed:"primary",cancelled:"default"}[e]||"default"),u=e=>{if(!e)return"";try{return e.replace("T"," ").split("+")[0]}catch(t){return console.error("Date format error:",t,e),e}},r=e=>{const t=(e.split("T")[1]||e).split("+")[0].split("Z")[0],[n,a]=t.split(":");return`${n}:${a}`};return(n,c)=>e.e({a:e.p({value:"all",label:"全部"}),b:e.p({value:"pending",label:"待确认"}),c:e.p({value:"confirmed",label:"已确认"}),d:e.p({value:"completed",label:"已完成"}),e:e.p({value:"cancelled",label:"已取消"}),f:e.o(i),g:e.p({value:a.value}),h:o.value},o.value?{i:e.p({loading:!0})}:0===l.value.length?{k:e.p({description:"暂无预约记录"})}:{l:e.f(l.value,((n,a,l)=>{return e.e({a:e.t((o=n.status,{pending:"待确认",confirmed:"已确认",completed:"已完成",cancelled:"已取消"}[o]||o)),b:"a1715542-8-"+l,c:e.p({theme:p(n.status),size:"small"}),d:e.t(u(n.created_at)),e:e.t(n.time_slot?n.time_slot.date.split("T")[0]:""),f:e.t(n.time_slot?r(n.time_slot.start_time):""),g:e.t(n.time_slot?r(n.time_slot.end_time):""),h:e.t(n.people_count),i:"pending"===n.status},"pending"===n.status?{j:e.o((a=>(n=>{e.index.showModal({title:"确认取消",content:"确定要取消这个预约吗?",success:async a=>{if(a.confirm)try{await t.api.appointments.cancel(n.id),e.index.showToast({title:"取消成功",icon:"success"}),s()}catch(l){console.error("取消预约失败",l)}}})})(n)),n.id),k:"a1715542-9-"+l,l:e.p({size:"small",theme:"danger",variant:"outline"})}:{},{m:n.id});var o}))},{j:0===l.value.length})}}),a=e._export_sfc(n,[["__scopeId","data-v-a1715542"]]);wx.createPage(a);
|
||||
11
unpackage/dist/build/mp-weixin/pages/appointments/appointments.json
vendored
Normal file
11
unpackage/dist/build/mp-weixin/pages/appointments/appointments.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"navigationBarTitleText": "我的预约",
|
||||
"usingComponents": {
|
||||
"t-tab-panel": "../../uni_modules/tdesign-uniapp/components/tab-panel/tab-panel",
|
||||
"t-tabs": "../../uni_modules/tdesign-uniapp/components/tabs/tabs",
|
||||
"t-loading": "../../uni_modules/tdesign-uniapp/components/loading/loading",
|
||||
"t-empty": "../../uni_modules/tdesign-uniapp/components/empty/empty",
|
||||
"t-tag": "../../uni_modules/tdesign-uniapp/components/tag/tag",
|
||||
"t-button": "../../uni_modules/tdesign-uniapp/components/button/button"
|
||||
}
|
||||
}
|
||||
1
unpackage/dist/build/mp-weixin/pages/appointments/appointments.wxml
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/appointments/appointments.wxml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<view class="container data-v-a1715542"><view class="tabs data-v-a1715542"><t-tabs wx:if="{{g}}" class="data-v-a1715542" u-s="{{['d']}}" bindchange="{{f}}" u-i="a1715542-0" bind:__l="__l" u-p="{{g}}"><t-tab-panel wx:if="{{a}}" class="data-v-a1715542" u-i="a1715542-1,a1715542-0" bind:__l="__l" u-p="{{a}}"/><t-tab-panel wx:if="{{b}}" class="data-v-a1715542" u-i="a1715542-2,a1715542-0" bind:__l="__l" u-p="{{b}}"/><t-tab-panel wx:if="{{c}}" class="data-v-a1715542" u-i="a1715542-3,a1715542-0" bind:__l="__l" u-p="{{c}}"/><t-tab-panel wx:if="{{d}}" class="data-v-a1715542" u-i="a1715542-4,a1715542-0" bind:__l="__l" u-p="{{d}}"/><t-tab-panel wx:if="{{e}}" class="data-v-a1715542" u-i="a1715542-5,a1715542-0" bind:__l="__l" u-p="{{e}}"/></t-tabs></view><view class="appointments-list data-v-a1715542"><t-loading wx:if="{{h}}" class="data-v-a1715542" u-i="a1715542-6" bind:__l="__l" u-p="{{i}}"/><view wx:elif="{{j}}" class="empty-state data-v-a1715542"><t-empty wx:if="{{k}}" class="data-v-a1715542" u-i="a1715542-7" bind:__l="__l" u-p="{{k}}"/></view><view wx:else class="data-v-a1715542"><view wx:for="{{l}}" wx:for-item="appointment" wx:key="m" class="appointment-card data-v-a1715542"><view class="appointment-header data-v-a1715542"><view class="appointment-status data-v-a1715542"><t-tag wx:if="{{appointment.c}}" class="data-v-a1715542" u-s="{{['d']}}" u-i="{{appointment.b}}" bind:__l="__l" u-p="{{appointment.c}}">{{appointment.a}}</t-tag></view><view class="appointment-date data-v-a1715542">{{appointment.d}}</view></view><view class="appointment-body data-v-a1715542"><view class="appointment-row data-v-a1715542"><text class="row-label data-v-a1715542">时间段:</text><text class="row-value data-v-a1715542">{{appointment.e}} {{appointment.f}} - {{appointment.g}}</text></view><view class="appointment-row data-v-a1715542"><text class="row-label data-v-a1715542">人数:</text><text class="row-value data-v-a1715542">{{appointment.h}}人</text></view></view><view wx:if="{{appointment.i}}" class="appointment-footer data-v-a1715542"><t-button wx:if="{{appointment.l}}" u-s="{{['d']}}" class="btn-outline data-v-a1715542" bindclick="{{appointment.j}}" u-i="{{appointment.k}}" bind:__l="__l" u-p="{{appointment.l}}"> 取消预约 </t-button></view></view></view></view></view>
|
||||
1
unpackage/dist/build/mp-weixin/pages/appointments/appointments.wxss
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/appointments/appointments.wxss
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.container.data-v-a1715542{height:calc(100vh - var(--window-top));display:flex;flex-direction:column;background:#f8f9fa;overflow:hidden}.tabs.data-v-a1715542{flex-shrink:0;background:#fff}.appointments-list.data-v-a1715542{flex:1;overflow-y:auto;padding:20rpx 32rpx}.empty-state.data-v-a1715542{padding:120rpx 0}.appointment-card.data-v-a1715542{background:#fff;border-radius:16rpx;padding:32rpx;margin-bottom:20rpx;box-shadow:0 2rpx 12rpx rgba(0,0,0,.06)}.appointment-header.data-v-a1715542{display:flex;justify-content:space-between;align-items:center;margin-bottom:24rpx}.appointment-date.data-v-a1715542{font-size:24rpx;color:#999}.appointment-body.data-v-a1715542{padding:24rpx 0;border-top:1rpx solid #f0f0f0;border-bottom:1rpx solid #f0f0f0}.appointment-row.data-v-a1715542{display:flex;margin-bottom:16rpx}.row-label.data-v-a1715542{font-size:28rpx;color:#666;min-width:120rpx}.row-value.data-v-a1715542{font-size:28rpx;color:#333;flex:1}.appointment-footer.data-v-a1715542{padding-top:24rpx;display:flex;justify-content:flex-end}
|
||||
1
unpackage/dist/build/mp-weixin/pages/booking/booking.js
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/booking/booking.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/api.js");if(!Array){(e.resolveComponent("t-loading")+e.resolveComponent("t-empty")+e.resolveComponent("t-tag")+e.resolveComponent("t-button")+e.resolveComponent("t-stepper")+e.resolveComponent("t-dialog"))()}Math||((()=>"../../uni_modules/tdesign-uniapp/components/loading/loading.js")+(()=>"../../uni_modules/tdesign-uniapp/components/empty/empty.js")+(()=>"../../uni_modules/tdesign-uniapp/components/tag/tag.js")+(()=>"../../uni_modules/tdesign-uniapp/components/button/button.js")+(()=>"../../uni_modules/tdesign-uniapp/components/stepper/stepper.js")+(()=>"../../uni_modules/tdesign-uniapp/components/dialog/dialog.js"))();const a=e.defineComponent({__name:"booking",setup(a){const o=e.ref((()=>{const e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`})()),l=e.ref([]),n=e.ref(!1),i=e.ref(!1),s=e.ref(null),r=e.ref(1),u=e.ref(""),p=e.ref(!1),c=e.ref(new Date),d=["日","一","二","三","四","五","六"],v=e.ref({}),g=e.ref({}),m=e.computed((()=>`${c.value.getFullYear()}年${c.value.getMonth()+1}月`)),h=e.computed((()=>l.value.reduce(((e,t)=>e+t.current_people),0))),_=e.computed((()=>{const e=c.value.getFullYear(),t=c.value.getMonth(),a=new Date(e,t,1),o=new Date(e,t+1,0),l=new Date,n=[];for(let i=a.getDay()-1;i>=0;i--)n.push({day:"",dateStr:"",isPlaceholder:!0,isOtherMonth:!1,isToday:!1,bookingCount:0,hasBookings:!1});for(let i=1;i<=o.getDate();i++){const a=new Date(e,t,i),o=a.getFullYear(),s=a.getMonth()+1,r=a.getDate(),u=`${o}-${String(s).padStart(2,"0")}-${String(r).padStart(2,"0")}`,p=l.getFullYear(),c=l.getMonth(),d=l.getDate(),m=o===p&&s-1===c&&r===d;n.push({day:i,dateStr:u,isPlaceholder:!1,isOtherMonth:!1,isToday:m,bookingCount:v.value[u]||0,hasBookings:g.value[u]||!1})}return n}));e.onMounted((()=>{e.index.getStorageSync("token")?(y(),f()):e.index.redirectTo({url:"/pages/login/login"})}));const f=async()=>{try{const e=await t.api.timeslots.getList({is_active:!0}),a={},o={};e.forEach((e=>{const t=e.date.split("T")[0];a[t]=(a[t]||0)+e.current_people,o[t]=!0})),v.value=a,g.value=o}catch(e){console.error("加载日期预约统计失败",e)}},y=async()=>{n.value=!0;try{const e=await t.api.timeslots.getList({date:o.value,is_active:!0});l.value=e}catch(e){console.error("加载时间槽失败",e)}finally{n.value=!1}},b=e=>{const t=(e.split("T")[1]||e).split("+")[0].split("Z")[0],[a,o]=t.split(":");return`${a}:${o}`},S=async()=>{if(s.value){p.value=!0;try{await t.api.appointments.create(s.value.id,r.value,u.value),e.index.showToast({title:"预约成功",icon:"success"}),i.value=!1,y(),f()}catch(a){i.value=!1}finally{p.value=!1}}};return(t,a)=>{var c,v,g,f;return e.e({a:e.t(m.value),b:e.f(d,((t,a,o)=>({a:e.t(t),b:t}))),c:e.f(_.value,((t,a,l)=>e.e({a:!t.isPlaceholder},t.isPlaceholder?{}:{b:e.t(t.day)},{c:!t.isPlaceholder&&t.bookingCount>0},!t.isPlaceholder&&t.bookingCount>0?{d:e.t(t.bookingCount)}:{},{e:t.dateStr||`placeholder-${a}`,f:t.isPlaceholder?1:"",g:t.dateStr===o.value?1:"",h:t.isToday?1:"",i:t.hasBookings||t.isPlaceholder?"":1,j:t.hasBookings?1:"",k:e.o((e=>!t.isPlaceholder&&(e=>{o.value=e.dateStr,y()})(t)),t.dateStr||`placeholder-${a}`)}))),d:e.t(o.value),e:h.value>0},h.value>0?{f:e.t(h.value)}:{},{g:n.value},n.value?{h:e.p({loading:!0})}:0===l.value.length?{j:e.p({description:"暂无可预约时间段"})}:{k:e.f(l.value,((t,a,o)=>({a:e.t(b(t.start_time)),b:e.t(b(t.end_time)),c:e.t(t.current_people),d:e.t(t.max_people),e:"6ce25a93-2-"+o,f:e.p({theme:t.current_people>=t.max_people?"danger":"success",size:"small"}),g:e.t(t.current_people>=t.max_people?"已满":"预约"),h:e.o((a=>(t=>{if(p.value)e.index.showToast({title:"正在处理,请稍候",icon:"none"});else{if(!t.is_active||t.current_people>=t.max_people)return console.log("时间槽不可用",t),void e.index.showToast({title:"该时间段已不可用",icon:"none"});s.value=t,r.value=1,u.value="",i.value=!0,console.log("打开弹窗",i.value)}})(t)),t.id),i:"6ce25a93-3-"+o,j:e.p({"t-class":"btn-primary",size:"small",theme:"primary",disabled:!t.is_active||t.current_people>=t.max_people}),k:t.id,l:!t.is_active||t.current_people>=t.max_people?1:""})))},{i:0===l.value.length,l:e.t(o.value),m:e.t((null==(c=s.value)?void 0:c.start_time)?b(s.value.start_time):""),n:e.t((null==(v=s.value)?void 0:v.end_time)?b(s.value.end_time):""),o:e.o((e=>r.value=e)),p:e.p({min:1,max:(null==(g=s.value)?void 0:g.max_people)-(null==(f=s.value)?void 0:f.current_people)||1,disabled:!0,size:"small",modelValue:r.value}),q:e.o(S),r:e.o((e=>i.value=!1)),s:e.o((e=>i.value=e)),t:e.p({title:"预约确认",cancelBtn:"取消",confirmBtn:"确认预约","t-class-confirm":"btn-primary",visible:i.value})})}}}),o=e._export_sfc(a,[["__scopeId","data-v-6ce25a93"]]);wx.createPage(o);
|
||||
11
unpackage/dist/build/mp-weixin/pages/booking/booking.json
vendored
Normal file
11
unpackage/dist/build/mp-weixin/pages/booking/booking.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"navigationBarTitleText": "我要预约",
|
||||
"usingComponents": {
|
||||
"t-loading": "../../uni_modules/tdesign-uniapp/components/loading/loading",
|
||||
"t-empty": "../../uni_modules/tdesign-uniapp/components/empty/empty",
|
||||
"t-tag": "../../uni_modules/tdesign-uniapp/components/tag/tag",
|
||||
"t-button": "../../uni_modules/tdesign-uniapp/components/button/button",
|
||||
"t-stepper": "../../uni_modules/tdesign-uniapp/components/stepper/stepper",
|
||||
"t-dialog": "../../uni_modules/tdesign-uniapp/components/dialog/dialog"
|
||||
}
|
||||
}
|
||||
1
unpackage/dist/build/mp-weixin/pages/booking/booking.wxml
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/booking/booking.wxml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<view class="container data-v-6ce25a93"><view class="date-selector data-v-6ce25a93"><view class="calendar-header data-v-6ce25a93"><text class="month-title data-v-6ce25a93">{{a}}</text></view><view class="calendar-weekdays data-v-6ce25a93"><text wx:for="{{b}}" wx:for-item="day" wx:key="b" class="weekday data-v-6ce25a93">{{day.a}}</text></view><view class="calendar-days data-v-6ce25a93"><view wx:for="{{c}}" wx:for-item="day" wx:key="e" class="{{['calendar-day', 'data-v-6ce25a93', day.f && 'placeholder', day.g && 'selected', day.h && 'today', day.i && 'disabled', day.j && 'has-bookings']}}" bindtap="{{day.k}}"><text wx:if="{{day.a}}" class="day-number data-v-6ce25a93">{{day.b}}</text><text wx:if="{{day.c}}" class="booking-count data-v-6ce25a93">{{day.d}}人 </text></view></view></view><scroll-view class="timeslots-scroll data-v-6ce25a93" scroll-y="true"><view class="timeslots-section data-v-6ce25a93"><view class="section-title data-v-6ce25a93">{{d}} 可选时间段 <text wx:if="{{e}}" class="total-booking data-v-6ce25a93"> (总预约: {{f}}人) </text></view><t-loading wx:if="{{g}}" class="data-v-6ce25a93" u-i="6ce25a93-0" bind:__l="__l" u-p="{{h}}"/><view wx:elif="{{i}}" class="empty-state data-v-6ce25a93"><t-empty wx:if="{{j}}" class="data-v-6ce25a93" u-i="6ce25a93-1" bind:__l="__l" u-p="{{j}}"/></view><view wx:else class="timeslots-list data-v-6ce25a93"><view wx:for="{{k}}" wx:for-item="slot" wx:key="k" class="{{['timeslot-card', 'data-v-6ce25a93', slot.l && 'disabled']}}"><view class="timeslot-info data-v-6ce25a93"><view class="time-range data-v-6ce25a93">{{slot.a}} - {{slot.b}}</view><view class="slot-status data-v-6ce25a93"><t-tag wx:if="{{slot.f}}" class="data-v-6ce25a93" u-s="{{['d']}}" u-i="{{slot.e}}" bind:__l="__l" u-p="{{slot.f}}">{{slot.c}}/{{slot.d}}</t-tag></view></view><t-button wx:if="{{slot.j}}" class="data-v-6ce25a93" u-s="{{['d']}}" catchclick="{{slot.h}}" u-i="{{slot.i}}" bind:__l="__l" u-p="{{slot.j}}">{{slot.g}}</t-button></view></view></view></scroll-view><t-dialog wx:if="{{t}}" class="data-v-6ce25a93" u-s="{{['content']}}" bindconfirm="{{q}}" bindcancel="{{r}}" u-i="6ce25a93-4" bind:__l="__l" bindupdateVisible="{{s}}" u-p="{{t}}"><scroll-view type="list" scroll-y class="long-content data-v-6ce25a93" slot="content"><view class="booking-dialog data-v-6ce25a93"><view class="dialog-item data-v-6ce25a93"><text class="dialog-label data-v-6ce25a93">日期:</text><text class="dialog-value data-v-6ce25a93">{{l}}</text></view><view class="dialog-item data-v-6ce25a93"><text class="dialog-label data-v-6ce25a93">时间段:</text><text class="dialog-value data-v-6ce25a93">{{m}} - {{n}}</text></view><view class="dialog-item data-v-6ce25a93"><text class="dialog-label data-v-6ce25a93">人数:</text><t-stepper wx:if="{{p}}" class="data-v-6ce25a93" u-i="6ce25a93-5,6ce25a93-4" bind:__l="__l" bindupdateModelValue="{{o}}" u-p="{{p}}"/></view></view></scroll-view></t-dialog></view>
|
||||
1
unpackage/dist/build/mp-weixin/pages/booking/booking.wxss
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/booking/booking.wxss
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.container.data-v-6ce25a93{height:calc(100vh - var(--window-top));display:flex;flex-direction:column;background:#f5f5f5;overflow:hidden}.date-selector.data-v-6ce25a93{flex-shrink:0;background:#fff;margin:24rpx 32rpx;border-radius:16rpx;padding:32rpx;box-shadow:0 4rpx 12rpx rgba(0,0,0,.06)}.calendar-header.data-v-6ce25a93{text-align:center;margin-bottom:24rpx}.month-title.data-v-6ce25a93{font-size:32rpx;font-weight:700;color:#333}.calendar-weekdays.data-v-6ce25a93{display:grid;grid-template-columns:repeat(7,1fr);gap:8rpx;margin-bottom:16rpx;padding:0 10rpx}.weekday.data-v-6ce25a93{font-size:24rpx;color:#999;text-align:center}.calendar-days.data-v-6ce25a93{display:grid;grid-template-columns:repeat(7,1fr);gap:8rpx;padding:0 10rpx}.calendar-day.data-v-6ce25a93{height:100rpx;display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:8rpx;cursor:pointer;transition:all .3s ease}.calendar-day.placeholder.data-v-6ce25a93{visibility:hidden}.calendar-day.disabled.data-v-6ce25a93{opacity:.4;pointer-events:none}.calendar-day.has-bookings.data-v-6ce25a93{background:rgba(255,122,0,.08);border:2rpx solid #FF7A00}.calendar-day.today.data-v-6ce25a93{background:rgba(255,122,0,.12)}.calendar-day.selected.data-v-6ce25a93{background:linear-gradient(135deg,#ff7a00,#ff9500)}.calendar-day.selected .day-number.data-v-6ce25a93,.calendar-day.selected .booking-count.data-v-6ce25a93{color:#fff}.day-number.data-v-6ce25a93{font-size:28rpx;color:#333;margin-bottom:4rpx}.booking-count.data-v-6ce25a93{font-size:20rpx;color:#ff7a00}.timeslots-scroll.data-v-6ce25a93{flex:1;overflow:hidden}.timeslots-section.data-v-6ce25a93{padding:32rpx}.section-title.data-v-6ce25a93{font-size:32rpx;font-weight:700;color:#333;margin-bottom:24rpx;display:flex;align-items:center}.total-booking.data-v-6ce25a93{font-size:24rpx;color:#ff7a00;margin-left:16rpx;font-weight:400}.empty-state.data-v-6ce25a93{padding:80rpx 0}.timeslots-list.data-v-6ce25a93{display:flex;flex-direction:column;gap:20rpx}.timeslot-card.data-v-6ce25a93{background:#fff;border-radius:16rpx;padding:32rpx;display:flex;justify-content:space-between;align-items:center;box-shadow:0 2rpx 12rpx rgba(0,0,0,.06)}.timeslot-card.disabled.data-v-6ce25a93{opacity:.6}.timeslot-info.data-v-6ce25a93{flex:1}.time-range.data-v-6ce25a93{font-size:32rpx;font-weight:700;color:#333;margin-bottom:16rpx}.slot-status.data-v-6ce25a93{margin-top:8rpx}.booking-dialog.data-v-6ce25a93{padding:32rpx 0}.dialog-item.data-v-6ce25a93{display:flex;align-items:center;padding:20rpx 0;border-bottom:1rpx solid #f0f0f0}.dialog-item.data-v-6ce25a93:last-child{border-bottom:none}.dialog-label.data-v-6ce25a93{width:120rpx;font-size:28rpx;color:#666}.dialog-value.data-v-6ce25a93{flex:1;font-size:28rpx;color:#333;font-weight:500}.btn-primary{background:linear-gradient(135deg,#ff7a00,#ff9500)!important;border:none!important;border-radius:8rpx!important;color:#fff!important;box-shadow:0 4rpx 12rpx rgba(255,122,0,.3)!important;outline:none!important}.btn-primary:after{border:none!important;box-shadow:none!important}.btn-primary:active{background:linear-gradient(135deg,#ff6900,#ff8500)!important}
|
||||
1
unpackage/dist/build/mp-weixin/pages/index/index.js
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/index/index.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";const e=require("../../common/vendor.js");if(!Array){e.resolveComponent("t-fab")()}Math;const t=e.defineComponent({__name:"index",setup(t){const o=e.ref(null),n=e.ref([{image:"https://picsum.photos/800/400?random=1",title:"专业美容服务"},{image:"https://picsum.photos/800/400?random=2",title:"预约更便捷"},{image:"https://picsum.photos/800/400?random=3",title:"优惠活动"}]),a=e.ref([{icon:"📅",text:"我要预约",path:"/pages/booking/booking"},{icon:"📋",text:"我的预约",path:"/pages/appointments/appointments"}]);e.onMounted((()=>{e.index.getStorageSync("token")?o.value=e.index.getStorageSync("user"):e.index.redirectTo({url:"/pages/login/login"})}));const i=()=>{e.index.showModal({title:"提示",content:"确定要退出登录吗?",success:t=>{t.confirm&&(e.index.removeStorageSync("token"),e.index.removeStorageSync("user"),e.index.redirectTo({url:"/pages/login/login"}))}})};return(t,o)=>({a:e.f(n.value,((e,t,o)=>({a:e.image,b:t}))),b:e.f(a.value,((t,o,n)=>({a:e.t(t.icon),b:e.t(t.text),c:t.path,d:e.o((o=>{return n=t.path,void e.index.navigateTo({url:n});var n}),t.path)}))),c:e.o(i),d:e.p({icon:"caret-right","aria-label":"退出"})})}}),o=e._export_sfc(t,[["__scopeId","data-v-4a80eaa6"]]);wx.createPage(o);
|
||||
6
unpackage/dist/build/mp-weixin/pages/index/index.json
vendored
Normal file
6
unpackage/dist/build/mp-weixin/pages/index/index.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"navigationBarTitleText": "预约系统",
|
||||
"usingComponents": {
|
||||
"t-fab": "../../uni_modules/tdesign-uniapp/components/fab/fab"
|
||||
}
|
||||
}
|
||||
1
unpackage/dist/build/mp-weixin/pages/index/index.wxml
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/index/index.wxml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<view class="container data-v-4a80eaa6"><view class="swiper-container data-v-4a80eaa6"><swiper class="swiper data-v-4a80eaa6" indicator-dots="{{true}}" autoplay="{{true}}" interval="{{3000}}" duration="{{500}}" indicator-color="rgba(255, 255, 255, 0.5)" indicator-active-color="#FF7A00"><swiper-item wx:for="{{a}}" wx:for-item="item" wx:key="b" class="swiper-item data-v-4a80eaa6"><image src="{{item.a}}" class="banner-image data-v-4a80eaa6" mode="aspectFill" lazy-load/></swiper-item></swiper></view><view class="grid-scroll data-v-4a80eaa6"><view class="grid-container data-v-4a80eaa6"><view wx:for="{{b}}" wx:for-item="item" wx:key="c" class="grid-item data-v-4a80eaa6" bindtap="{{item.d}}"><view class="grid-icon data-v-4a80eaa6">{{item.a}}</view><text class="grid-text data-v-4a80eaa6">{{item.b}}</text></view></view></view><t-fab wx:if="{{d}}" class="data-v-4a80eaa6" bindclick="{{c}}" u-i="4a80eaa6-0" bind:__l="__l" u-p="{{d}}"/></view>
|
||||
1
unpackage/dist/build/mp-weixin/pages/index/index.wxss
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/index/index.wxss
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.container.data-v-4a80eaa6{height:calc(100vh - var(--window-top));display:flex;flex-direction:column;background:#f5f5f5;overflow:hidden}.welcome-section.data-v-4a80eaa6{flex-shrink:0;background:linear-gradient(135deg,#ff7a00,#ff9500);padding:32rpx}.welcome-text.data-v-4a80eaa6{font-size:36rpx;font-weight:700;color:#fff}.swiper-container.data-v-4a80eaa6{flex-shrink:0;margin:24rpx 32rpx;border-radius:16rpx;overflow:hidden;box-shadow:0 4rpx 12rpx rgba(0,0,0,.1)}.swiper.data-v-4a80eaa6{width:100%;height:360rpx}.swiper-item.data-v-4a80eaa6{width:100%;height:100%}.banner-image.data-v-4a80eaa6{width:100%;height:100%;background:linear-gradient(135deg,#ff7a00,#ff9500)}.grid-scroll.data-v-4a80eaa6{flex:1;overflow:hidden}.grid-container.data-v-4a80eaa6{display:grid;grid-template-columns:repeat(3,1fr);gap:24rpx;padding:0 32rpx;width:100%;align-content:center}.grid-item.data-v-4a80eaa6{display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fff;border-radius:16rpx;padding:40rpx 20rpx;box-shadow:0 2rpx 12rpx rgba(0,0,0,.06);transition:all .3s ease}.grid-item.data-v-4a80eaa6:active{transform:scale(.95);box-shadow:0 2rpx 8rpx rgba(0,0,0,.1)}.grid-icon.data-v-4a80eaa6{font-size:64rpx;margin-bottom:16rpx}.grid-text.data-v-4a80eaa6{font-size:28rpx;color:#333;font-weight:500}
|
||||
1
unpackage/dist/build/mp-weixin/pages/login/login.js
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/login/login.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";const e=require("../../common/vendor.js"),a=require("../../utils/api.js");if(!Array){(e.resolveComponent("t-input")+e.resolveComponent("t-button"))()}Math||((()=>"../../uni_modules/tdesign-uniapp/components/input/input.js")+(()=>"../../uni_modules/tdesign-uniapp/components/button/button.js"))();const n=e.defineComponent({__name:"login",setup(n){const t=e.ref("13777777777"),l=e.ref(""),o=e.ref("one-click"),i=e.ref(!1),s=e.ref(!1),u=e.ref(0),r=e.ref("发送验证码"),c=()=>{o.value="code"===o.value?"one-click":"code"},v=async()=>{if(console.log(t.value),t.value&&11===t.value.length)try{await a.api.auth.sendCode("+86"+t.value),e.index.showToast({title:"验证码已发送",icon:"success"}),s.value=!0,u.value=60;const n=setInterval((()=>{u.value--,r.value=`${u.value}秒后重发`,u.value<=0&&(clearInterval(n),s.value=!1,r.value="发送验证码")}),1e3)}catch(n){console.error("发送验证码失败",n)}else e.index.showToast({title:"请输入正确的手机号",icon:"none"})},d=async()=>{if(t.value&&11===t.value.length)if(l.value&&6===l.value.length){i.value=!0;try{const n=await a.api.auth.verificationLogin("+86"+t.value,l.value);e.index.setStorageSync("token",n.token),e.index.setStorageSync("user",n.user),e.index.showToast({title:"登录成功",icon:"success"}),e.index.reLaunch({url:"/pages/index/index"})}catch(n){console.error("登录失败",n)}finally{i.value=!1}}else e.index.showToast({title:"请输入验证码",icon:"none"});else e.index.showToast({title:"请输入正确的手机号",icon:"none"})},p=async()=>{if(t.value&&11===t.value.length){i.value=!0;try{const n=await a.api.auth.oneClickLogin("+86"+t.value);e.index.setStorageSync("token",n.token),e.index.setStorageSync("user",n.user),e.index.showToast({title:"登录成功",icon:"success"}),e.index.reLaunch({url:"/pages/index/index"})}catch(n){console.error("登录失败",n)}finally{i.value=!1}}else e.index.showToast({title:"请输入正确的手机号",icon:"none"})},g=()=>{e.index.navigateTo({url:"/pages/register/register"})};return(a,n)=>e.e({a:e.o((e=>t.value=e)),b:e.p({placeholder:"请输入手机号",type:"number",maxlength:11,clearable:!0,value:t.value}),c:"code"===o.value},"code"===o.value?{d:e.t(r.value),e:e.o(v),f:e.p({size:"small",variant:"text",disabled:s.value}),g:e.o((e=>l.value=e)),h:e.p({placeholder:"请输入验证码",type:"number",maxlength:6,clearable:!0,value:l.value})}:{},{i:"code"===o.value},"code"===o.value?{j:e.o(d),k:e.p({"t-class":"btn-primary",theme:"primary",size:"large",block:!0,loading:i.value})}:{l:e.o(p),m:e.p({"t-class":"btn-primary",theme:"primary",size:"large",block:!0,loading:i.value})},{n:e.t("code"===o.value?"使用一键登录":"使用验证码登录"),o:e.o(c),p:e.o(g)})}}),t=e._export_sfc(n,[["__scopeId","data-v-7d771541"]]);wx.createPage(t);
|
||||
7
unpackage/dist/build/mp-weixin/pages/login/login.json
vendored
Normal file
7
unpackage/dist/build/mp-weixin/pages/login/login.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"navigationBarTitleText": "登录",
|
||||
"usingComponents": {
|
||||
"t-input": "../../uni_modules/tdesign-uniapp/components/input/input",
|
||||
"t-button": "../../uni_modules/tdesign-uniapp/components/button/button"
|
||||
}
|
||||
}
|
||||
1
unpackage/dist/build/mp-weixin/pages/login/login.wxml
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/login/login.wxml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<view class="login-container data-v-7d771541"><view class="login-header data-v-7d771541"><text class="title data-v-7d771541">欢迎使用预约系统</text><text class="subtitle data-v-7d771541">请登录或注册</text></view><view class="login-form data-v-7d771541"><view class="form-item data-v-7d771541"><t-input wx:if="{{b}}" class="data-v-7d771541" u-s="{{['prefixIcon']}}" u-i="7d771541-0" bind:__l="__l" bindupdateValue="{{a}}" u-p="{{b}}"><text class="prefix-icon data-v-7d771541" slot="prefixIcon">📱</text></t-input></view><view wx:if="{{c}}" class="form-item data-v-7d771541"><t-input wx:if="{{h}}" class="data-v-7d771541" u-s="{{['prefixIcon','suffix']}}" u-i="7d771541-1" bind:__l="__l" bindupdateValue="{{g}}" u-p="{{h}}"><text class="prefix-icon data-v-7d771541" slot="prefixIcon">🔐</text><t-button class="data-v-7d771541" u-s="{{['d']}}" bindclick="{{e}}" u-i="7d771541-2,7d771541-1" bind:__l="__l" u-p="{{f}}" slot="suffix">{{d}}</t-button></t-input></view><view class="form-actions data-v-7d771541"><t-button wx:if="{{i}}" class="data-v-7d771541" u-s="{{['d']}}" bindclick="{{j}}" u-i="7d771541-3" bind:__l="__l" u-p="{{k}}"> 验证码登录 </t-button><t-button wx:else class="data-v-7d771541" u-s="{{['d']}}" bindclick="{{l}}" u-i="7d771541-4" bind:__l="__l" u-p="{{m||''}}"> 一键登录 </t-button></view><view class="form-switch data-v-7d771541"><text class="data-v-7d771541" bindtap="{{o}}">{{n}}</text><text class="register-link data-v-7d771541" bindtap="{{p}}">注册新账号</text></view></view></view>
|
||||
1
unpackage/dist/build/mp-weixin/pages/login/login.wxss
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/login/login.wxss
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.login-container.data-v-7d771541{min-height:100vh;background:linear-gradient(135deg,#ff7a00,#ff9500);padding:80rpx 40rpx}.login-header.data-v-7d771541{text-align:center;margin-bottom:100rpx}.title.data-v-7d771541{display:block;font-size:48rpx;font-weight:700;color:#fff;margin-bottom:20rpx}.subtitle.data-v-7d771541{display:block;font-size:28rpx;color:rgba(255,255,255,.8)}.login-form.data-v-7d771541{background:#fff;border-radius:32rpx;padding:60rpx 40rpx;box-shadow:0 8rpx 24rpx rgba(0,0,0,.1)}.form-item.data-v-7d771541{margin-bottom:32rpx}.prefix-icon.data-v-7d771541{font-size:32rpx;color:#ff7a00}.form-actions.data-v-7d771541{margin-top:60rpx}.form-switch.data-v-7d771541{display:flex;justify-content:space-between;margin-top:32rpx;font-size:28rpx;color:#666}.form-switch text.data-v-7d771541{padding:16rpx 0}.register-link.data-v-7d771541{color:#ff7a00!important;font-weight:700}.btn-primary{background:linear-gradient(135deg,#ff7a00,#ff9500)!important;border:none!important;border-radius:8rpx!important;color:#fff!important;box-shadow:0 4rpx 12rpx rgba(255,122,0,.3)!important;outline:none!important}.btn-primary:after{border:none!important;box-shadow:none!important}.btn-primary:active{background:linear-gradient(135deg,#ff6900,#ff8500)!important}
|
||||
1
unpackage/dist/build/mp-weixin/pages/register/register.js
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/register/register.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";const e=require("../../common/vendor.js"),n=require("../../utils/api.js");if(!Array){(e.resolveComponent("t-input")+e.resolveComponent("t-button"))()}Math||((()=>"../../uni_modules/tdesign-uniapp/components/input/input.js")+(()=>"../../uni_modules/tdesign-uniapp/components/button/button.js"))();const t=e.defineComponent({__name:"register",setup(t){const a=e.ref(""),o=e.ref(""),i=e.ref(!1),l=async()=>{if(a.value&&11===String(a.value).length)if(o.value&&0!==o.value.trim().length){i.value=!0;try{const t=await n.api.auth.register("+86"+a.value,o.value.trim());e.index.setStorageSync("token",t.token),e.index.setStorageSync("user",t.user),e.index.showToast({title:"注册成功",icon:"success"}),e.index.reLaunch({url:"/pages/index/index"})}catch(t){console.error("注册失败",t)}finally{i.value=!1}}else e.index.showToast({title:"请输入昵称",icon:"none"});else e.index.showToast({title:"请输入正确的手机号",icon:"none"})},s=()=>{e.index.navigateBack()};return(n,t)=>({a:e.o((e=>a.value=e)),b:e.p({placeholder:"请输入手机号",type:"number",maxlength:11,clearable:!0,value:a.value}),c:e.o((e=>o.value=e)),d:e.p({placeholder:"请输入昵称",maxlength:20,clearable:!0,value:o.value}),e:e.o(l),f:e.p({theme:"primary",size:"large",block:!0,loading:i.value}),g:e.o(s)})}}),a=e._export_sfc(t,[["__scopeId","data-v-c8de2d17"]]);wx.createPage(a);
|
||||
7
unpackage/dist/build/mp-weixin/pages/register/register.json
vendored
Normal file
7
unpackage/dist/build/mp-weixin/pages/register/register.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"navigationBarTitleText": "注册",
|
||||
"usingComponents": {
|
||||
"t-input": "../../uni_modules/tdesign-uniapp/components/input/input",
|
||||
"t-button": "../../uni_modules/tdesign-uniapp/components/button/button"
|
||||
}
|
||||
}
|
||||
1
unpackage/dist/build/mp-weixin/pages/register/register.wxml
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/register/register.wxml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<view class="register-container data-v-c8de2d17"><view class="register-header data-v-c8de2d17"><text class="title data-v-c8de2d17">注册账号</text><text class="subtitle data-v-c8de2d17">创建您的预约系统账号</text></view><view class="register-form data-v-c8de2d17"><view class="form-item data-v-c8de2d17"><t-input wx:if="{{b}}" class="data-v-c8de2d17" u-s="{{['prefixIcon']}}" u-i="c8de2d17-0" bind:__l="__l" bindupdateValue="{{a}}" u-p="{{b}}"><text class="prefix-icon data-v-c8de2d17" slot="prefixIcon">📱</text></t-input></view><view class="form-item data-v-c8de2d17"><t-input wx:if="{{d}}" class="data-v-c8de2d17" u-s="{{['prefixIcon']}}" u-i="c8de2d17-1" bind:__l="__l" bindupdateValue="{{c}}" u-p="{{d}}"><text class="prefix-icon data-v-c8de2d17" slot="prefixIcon">👤</text></t-input></view><view class="form-actions data-v-c8de2d17"><t-button wx:if="{{f}}" u-s="{{['d']}}" class="btn-primary data-v-c8de2d17" bindclick="{{e}}" u-i="c8de2d17-2" bind:__l="__l" u-p="{{f}}"> 注册 </t-button></view><view class="form-switch data-v-c8de2d17"><text class="data-v-c8de2d17" bindtap="{{g}}">已有账号?去登录</text></view></view></view>
|
||||
1
unpackage/dist/build/mp-weixin/pages/register/register.wxss
vendored
Normal file
1
unpackage/dist/build/mp-weixin/pages/register/register.wxss
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.register-container.data-v-c8de2d17{min-height:100vh;background:linear-gradient(135deg,#ff7a00,#ff9500);padding:80rpx 40rpx}.register-header.data-v-c8de2d17{text-align:center;margin-bottom:100rpx}.title.data-v-c8de2d17{display:block;font-size:48rpx;font-weight:700;color:#fff;margin-bottom:20rpx}.subtitle.data-v-c8de2d17{display:block;font-size:28rpx;color:rgba(255,255,255,.8)}.register-form.data-v-c8de2d17{background:#fff;border-radius:32rpx;padding:60rpx 40rpx;box-shadow:0 8rpx 24rpx rgba(0,0,0,.1)}.form-item.data-v-c8de2d17{margin-bottom:32rpx}.prefix-icon.data-v-c8de2d17{font-size:32rpx;color:#ff7a00}.form-actions.data-v-c8de2d17{margin-top:60rpx}.form-switch.data-v-c8de2d17{display:flex;justify-content:center;margin-top:32rpx;font-size:28rpx;color:#ff7a00}.form-switch text.data-v-c8de2d17{padding:16rpx 0}.btn-primary.data-v-c8de2d17 .t-button{background:linear-gradient(135deg,#ff7a00,#ff9500)!important;border:none!important;box-shadow:0 4rpx 12rpx rgba(255,122,0,.3)}
|
||||
Reference in New Issue
Block a user