优化
This commit is contained in:
parent
2163f717a2
commit
eddf5b2aba
76
pages.json
76
pages.json
@ -20,6 +20,19 @@
|
||||
"group": "商城"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/subscribe/subscribe",
|
||||
"style": {
|
||||
"navigationBarTitleText": "预约",
|
||||
"enablePullDownRefresh": true
|
||||
},
|
||||
"meta": {
|
||||
"auth": false,
|
||||
"sync": true,
|
||||
"title": "预约",
|
||||
"group": "商城"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/index/user",
|
||||
"style": {
|
||||
@ -120,11 +133,10 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/mulu/mulu",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "详情",
|
||||
"enablePullDownRefresh" : true,
|
||||
"path": "pages/mulu/mulu",
|
||||
"style": {
|
||||
"navigationBarTitleText": "详情",
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationStyle": "default"
|
||||
}
|
||||
}
|
||||
@ -238,16 +250,16 @@
|
||||
"title": "申请售后"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "aftersale/return-delivery",
|
||||
"style": {
|
||||
"navigationBarTitleText": "退货物流"
|
||||
},
|
||||
"meta": {
|
||||
"auth": true,
|
||||
"title": "退货物流"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "aftersale/return-delivery",
|
||||
"style": {
|
||||
"navigationBarTitleText": "退货物流"
|
||||
},
|
||||
"meta": {
|
||||
"auth": true,
|
||||
"title": "退货物流"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "aftersale/list",
|
||||
"style": {
|
||||
@ -306,6 +318,18 @@
|
||||
"group": "用户中心"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "user_vip/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "会员中心"
|
||||
},
|
||||
"meta": {
|
||||
"auth": true,
|
||||
"sync": true,
|
||||
"title": "会员中心",
|
||||
"group": "用户中心"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "goods-collect",
|
||||
"style": {
|
||||
@ -472,17 +496,17 @@
|
||||
"group": "分销商城"
|
||||
}
|
||||
}, {
|
||||
"path": "withdraw",
|
||||
"style": {
|
||||
"navigationBarTitleText": "申请提现"
|
||||
},
|
||||
"meta": {
|
||||
"auth": true,
|
||||
"sync": true,
|
||||
"title": "申请提现",
|
||||
"group": "分销商城"
|
||||
}
|
||||
}
|
||||
"path": "withdraw",
|
||||
"style": {
|
||||
"navigationBarTitleText": "申请提现"
|
||||
},
|
||||
"meta": {
|
||||
"auth": true,
|
||||
"sync": true,
|
||||
"title": "申请提现",
|
||||
"group": "分销商城"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
673
pages/subscribe/subscribe.vue
Normal file
673
pages/subscribe/subscribe.vue
Normal file
@ -0,0 +1,673 @@
|
||||
<template>
|
||||
<s-layout title="预约" :bgStyle="{ color: '#fff' }">
|
||||
<view class="container">
|
||||
|
||||
|
||||
<view class="doctor-list">
|
||||
<view class="doctor-cards" >
|
||||
<image class="doctor-avatars" :src="'https://sfyjk.com/api'+brandList[selectedClinicIndex].picUrl" mode="aspectFill"></image><br/><br/>
|
||||
<view class="brandr-info">
|
||||
<text class="doctor-names">
|
||||
<text class="ygcontent">医馆地址:</text>
|
||||
{{ brandList[selectedClinicIndex].address }}</text><br/><br/>
|
||||
<!-- <div v-html='brandList[selectedClinicIndex].depict'></div> -->
|
||||
<rich-text class="doctor-specialtys" :nodes="brandList[selectedClinicIndex].depict"></rich-text>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="clinic-select">
|
||||
<text class="clinic-select-label">医馆选择</text>
|
||||
<picker mode="selector" :range="brandNameList" @change="onClinicChange">
|
||||
<view class="clinic-select-value">
|
||||
<text>{{ brandList[selectedClinicIndex].name}}</text>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="clinic-select">
|
||||
<text class="clinic-select-label">预约类型</text>
|
||||
<picker mode="selector" :range="typenameList" @change="ontype">
|
||||
<view class="clinic-select-value">
|
||||
<text>{{ typeList[selecttypeIndex].dictLabel}}</text>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<!-- <text class="clinic-select-label">套餐选择</text><br>
|
||||
<image class="doctor-avatar" src="/static/avatar-doctor.png" mode="aspectFill"></image> -->
|
||||
<!-- <view class="date-card">
|
||||
<view class="weekdays">
|
||||
<text v-for="(day, index) in weekdays" :key="index" :class="['weekday', index === selectedDayIndex ? 'active' : '']"
|
||||
@click="selectDay(index)">{{ day }}</text>
|
||||
</view>
|
||||
<swiper class="date-swiper" :current="selectedDayIndex" @change="handleSwiperChange">
|
||||
<swiper-item v-for="(date, index) in dateList" :key="index">
|
||||
<view class="date-item" :class="index === selectedDayIndex ? 'active' : ''">
|
||||
<text class="date">{{ formatDate(date.date) }}</text>
|
||||
</view>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
</view> -->
|
||||
<radio-group>
|
||||
<view class="date-list">
|
||||
<view v-for="(item, index) in dateList" :key="index" @click="selectDate(index)">
|
||||
<view class="date-item" v-if="addDate==item.addDate" style="background-color: #ff5541;">
|
||||
|
||||
<text class="date" style="color: #FFFFFF;">{{ item.formattedDate }}</text>
|
||||
<text class="weekday" style="color: #FFFFFF;">{{ item.weekday }}</text>
|
||||
</view>
|
||||
<view class="date-item" v-if="addDate!=item.addDate">
|
||||
|
||||
<text class="date">{{ item.formattedDate }}</text>
|
||||
<text class="weekday">{{ item.weekday }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</radio-group>
|
||||
|
||||
|
||||
<!-- <view @click="showTime = true"><text v-if="goTime" style="color: #000;">{{goTime }}</text><text v-else>请选择返程时间</text></view> -->
|
||||
<!-- //通过控制showTime来判断组件是否显示 -->
|
||||
<!-- <pickerTime :startH="8" :lateH="19" :step="32" v-if="showTime" @close="showTime=false" @chooseTime="bindTime"></pickerTime> -->
|
||||
|
||||
|
||||
<radio-group>
|
||||
<view class="doctor-list">
|
||||
<!-- {{techList}} -->
|
||||
<view class="doctor-card" v-for="(item, index) in techList" :key="index">
|
||||
<view class="doctor-info">
|
||||
<image class="doctor-avatar" :src="'https://sfyjk.com/api'+item.photo" mode="aspectFill"></image>
|
||||
<text class="doctor-name">{{ item.technicianName }}</text>
|
||||
<text class="doctor-name" style="float: right;margin-right: 20px;">{{item.typeName}}</text>
|
||||
|
||||
<!-- <text class="doctor-specialty" v-if="item.content">介绍: {{item.content.substr(0, 20)}}...</text> -->
|
||||
</view>
|
||||
<radio style="float: right;" :value="item.id" @click="onradio(item)" :checked="index==0"></radio>
|
||||
<div v-if="techid == item.id">
|
||||
<view class="info-title">服务范围</view>
|
||||
<rich-text style="white-space: pre-wrap;" :nodes="item.serviceScope"></rich-text>
|
||||
<view class="info-title">介绍</view>
|
||||
<rich-text style="white-space: pre-wrap;" :nodes="item.content"></rich-text>
|
||||
</div>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</radio-group>
|
||||
<radio-group>
|
||||
<view class="date-list">
|
||||
<view v-for="(item, index) in serviceTime" :key="index" @click="selecthsstr(index)">
|
||||
<view class="date-itemstr" v-if="hsstr==item.str" style="background-color: #ff5541;">
|
||||
<text class="weekday">{{ item.str }}</text>
|
||||
</view>
|
||||
|
||||
<view v-if="item.ym==='true'">
|
||||
<view class="date-itemym" v-if="hsstr!=item.str" >
|
||||
<text class="weekdayym">约满</text><br/>
|
||||
<text class="weekday">{{ item.str }}</text>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="item.ym==='false'">
|
||||
<view class="date-itemstr" v-if="hsstr!=item.str" >
|
||||
<text class="weekday">{{ item.str }}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</radio-group>
|
||||
|
||||
|
||||
|
||||
<view class="footer">
|
||||
<button class="appointment-btn" @click="handleSubmit">立即预约</button>
|
||||
</view>
|
||||
</view>
|
||||
</s-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { baseUrl, apiPath } from '@/sheep/config';
|
||||
import { computed } from 'vue';
|
||||
import sheep from '@/sheep';
|
||||
import { showShareModal, showAuthModal } from '@/sheep/hooks/useModal';
|
||||
// import pickerTime from "@/pages/commission/pickerTime.vue"
|
||||
// 用户信息
|
||||
export default {
|
||||
// components: {
|
||||
// pickerTime
|
||||
// },
|
||||
data() {
|
||||
return {
|
||||
isLogin:null,
|
||||
memberId:null,
|
||||
// showTime: false,
|
||||
serviceTime:[],
|
||||
sjd:{},
|
||||
ym:[],
|
||||
// starhour: 8,
|
||||
// starminute: 0,
|
||||
// endhour: 18,
|
||||
// endminute: 0,
|
||||
// timejg: 70,
|
||||
|
||||
hsstr: "",
|
||||
|
||||
dateList: [],
|
||||
typeList:[
|
||||
{dictValue:0,dictLabel:"调理预约"},
|
||||
{dictValue:1,dictLabel:"教培预约"}
|
||||
],
|
||||
typenameList:[],
|
||||
addDate: "",
|
||||
techList: [], // 技师列表
|
||||
//医馆信息
|
||||
selectedClinicIndex: 0, // 当前选中的医馆索引
|
||||
brandList: [{
|
||||
name:""
|
||||
}],
|
||||
brandNameList: [],
|
||||
brandId: "",
|
||||
brandName: "",
|
||||
selectedDayIndex: 0,
|
||||
selecttypeIndex:0,
|
||||
techid: 0,
|
||||
type: 0,
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.isLogin = computed(() => sheep.$store('user').isLogin);
|
||||
this.memberId=computed(() => sheep.$store('user').userInfo).value.id
|
||||
this.brandlist();
|
||||
|
||||
this.generateDateList();
|
||||
this.addDate=this.dateList[0].addDate;
|
||||
this.gettypeList();
|
||||
console.log(apiPath,baseUrl,"import.meta.env.SHOPRO_API_PATH")
|
||||
|
||||
},
|
||||
methods: {
|
||||
onClinicChange(event) {
|
||||
const selectedClinicIndex = event.detail.value;
|
||||
this.selectedClinicIndex = selectedClinicIndex;
|
||||
this.brandName = this.brandList[selectedClinicIndex].name
|
||||
this.brandId = this.brandList[selectedClinicIndex].id
|
||||
this.technicianList();
|
||||
},
|
||||
ontype(event){
|
||||
const selecttypeIndex = event.detail.value;
|
||||
this.selecttypeIndex = selecttypeIndex;
|
||||
this.typename = this.typeList[selecttypeIndex].dictValue
|
||||
this.type = this.typeList[selecttypeIndex].dictValue
|
||||
console.log(this.selecttypeIndex)
|
||||
this.technicianList();
|
||||
},
|
||||
// 查询医馆列表
|
||||
brandlist() {
|
||||
uni.request({
|
||||
url: `${baseUrl}/api/h5/brand/list`,
|
||||
success: (res) => {
|
||||
this.brandList = res.data
|
||||
for (var i = 0; i < this.brandList.length; i++) {
|
||||
// this.brandList[i].depict=(this.brandList[i].depict).replace(/\<img/gi, '<img style="max-width:100%;height:auto" ')
|
||||
this.brandNameList.push(this.brandList[i].name)
|
||||
}
|
||||
|
||||
this.brandId = this.brandList[0].id
|
||||
this.technicianList();
|
||||
},
|
||||
fail: (error) => {
|
||||
console.log(error)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
gettypeList() {
|
||||
uni.request({
|
||||
url: `${baseUrl}/api/h5/reservation/type`,
|
||||
success: (res) => {
|
||||
this.typeList = res.data.data
|
||||
// this.typeList.depict=this.typeList.depict.replace(/\<img/gi, '<img style="max-width:100%;float:left; height:auto" ')
|
||||
for (var i = 0; i < this.typeList.length; i++) {
|
||||
this.typenameList.push(this.typeList[i].dictLabel);
|
||||
}
|
||||
console.log(this.typenameList)
|
||||
},
|
||||
fail: (error) => {
|
||||
console.log(error)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
},
|
||||
// 查询医生列表
|
||||
technicianList() {
|
||||
this.techid = null,
|
||||
this.serviceTime=[]
|
||||
this.hsstr=""
|
||||
uni.request({
|
||||
// url: 'https://sfyjk.com/api/h5/technician/list',
|
||||
url: 'https://sfyjk.com/api/h5/technician/list',
|
||||
data: {
|
||||
type: this.type,
|
||||
// addDate:this.addDate,
|
||||
brandId:this.brandId
|
||||
},
|
||||
success: (res) => {
|
||||
console.log(res)
|
||||
this.techList = res.data.rows
|
||||
console.log(this.techList)
|
||||
if (this.techList.length > 0) {
|
||||
this.techid=this.techList[0].id
|
||||
var item={id:this.techid}
|
||||
this.onradio(item);
|
||||
}
|
||||
|
||||
console.log(this.techList)
|
||||
|
||||
},
|
||||
fail: (error) => {
|
||||
console.log(error)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
onradio(item) {
|
||||
this.techid = item.id
|
||||
this.serviceTime=[]
|
||||
this.hsstr=""
|
||||
uni.request({
|
||||
// url: 'https://sfyjk.com/api/h5/technician/' + this.techid, // 接口地址
|
||||
url: 'https://sfyjk.com/api/h5/technician/h5xq', // 接口地址
|
||||
data: {
|
||||
addDate:this.addDate,
|
||||
id:this.techid
|
||||
},
|
||||
success: (res) => {
|
||||
console.log(res);
|
||||
var serviceTime=JSON.parse(res.data.data.serviceTime)
|
||||
console.log(serviceTime)
|
||||
if (serviceTime){
|
||||
for (let i = 0; i <serviceTime.length; i++) {
|
||||
console.log(serviceTime[i].endTime)
|
||||
console.log(serviceTime[i].startTime)
|
||||
console.log(serviceTime[i].ym)
|
||||
if (serviceTime[i].endTime&&serviceTime[i].startTime){
|
||||
this.sjd={},
|
||||
this.sjd.str=serviceTime[i].startTime.toString()+"-"+serviceTime[i].endTime.toString()
|
||||
this.sjd.ym=serviceTime[i].ym
|
||||
this.serviceTime.push(this.sjd)
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(this.serviceTime)
|
||||
|
||||
},
|
||||
fail: (error) => {
|
||||
console.log(error)
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
selectDay(index) {
|
||||
this.selectedDayIndex = index;
|
||||
},
|
||||
handleSwiperChange(event) {
|
||||
this.selectedDayIndex = event.mp.detail.current;
|
||||
},
|
||||
formatDate(date) {
|
||||
const options = {
|
||||
month: "2-digit",
|
||||
day: "2-digit"
|
||||
};
|
||||
return date.toLocaleDateString("en-US", options);
|
||||
},
|
||||
handleSubmit() {
|
||||
this.memberId=computed(() => sheep.$store('user').userInfo).value.id
|
||||
if (!this.memberId){
|
||||
if (sheep.$platform.name === 'WechatMiniProgram') {
|
||||
showAuthModal('wechatMiniLogin')
|
||||
return;
|
||||
}
|
||||
showAuthModal('accountLogin')
|
||||
}else{
|
||||
this.memberId=computed(() => sheep.$store('user').userInfo).value.id
|
||||
if(!this.brandId){
|
||||
sheep.$helper.toast('请选择医馆')
|
||||
}else if(!this.techid){
|
||||
sheep.$helper.toast('请选择技师')
|
||||
}else if(!this.addDate){
|
||||
sheep.$helper.toast('请选择预约时间')
|
||||
}else if(!this.hsstr){
|
||||
sheep.$helper.toast('请选择预约时间段')
|
||||
}else if(this.memberId){
|
||||
uni.request({
|
||||
method: "post",
|
||||
url: 'https://sfyjk.com/api/h5/reservation',
|
||||
data: {
|
||||
type: this.type,
|
||||
brandId: this.brandId,
|
||||
technicianId: this.techid,
|
||||
reAddTime: this.addDate,
|
||||
hsstr: this.hsstr,
|
||||
userId:this.memberId,
|
||||
},
|
||||
success: (res) => {
|
||||
uni.showModal({
|
||||
title: '预约提示',
|
||||
content: '预约成功!',
|
||||
success: function(res) {
|
||||
if (res.confirm) {
|
||||
uni.switchTab({
|
||||
url: '/pages/index/user'
|
||||
});
|
||||
} else {
|
||||
uni.switchTab({
|
||||
url: '/pages/index/user'
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
fail: (error) => {
|
||||
console.log(error)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
console.log("立即预约");
|
||||
},
|
||||
|
||||
|
||||
generateDateList() {
|
||||
const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
|
||||
const today = new Date();
|
||||
for (let i = 0; i < 7; i++) {
|
||||
const date = new Date(today);
|
||||
date.setDate(date.getDate() + i);
|
||||
const formattedDate =
|
||||
// `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
|
||||
`${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
|
||||
const weekday = weekDays[date.getDay()];
|
||||
const addDate =
|
||||
`${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
|
||||
this.dateList.push({
|
||||
date,
|
||||
formattedDate,
|
||||
addDate,
|
||||
weekday
|
||||
});
|
||||
}
|
||||
},
|
||||
selectDate(index) {
|
||||
this.addDate = this.dateList[index].addDate
|
||||
if(this.techid){
|
||||
var item={id:this.techid}
|
||||
this.onradio(item);
|
||||
}
|
||||
|
||||
// 处理选中日期的逻辑,例如触发事件、更新状态等
|
||||
console.log('Selected date:', this.addDate);
|
||||
},
|
||||
selecthsstr(index) {
|
||||
console.log(this.serviceTime[index].str)
|
||||
console.log(this.serviceTime[index].ym)
|
||||
if(this.serviceTime[index].ym==="true"){
|
||||
|
||||
}else if(this.serviceTime[index].ym==="false"){
|
||||
this.hsstr = this.serviceTime[index].str
|
||||
}
|
||||
|
||||
// 处理选中日期的逻辑,例如触发事件、更新状态等
|
||||
console.log('Selected hs:', this.hsstr);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.container {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.clinic-select {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.clinic-select-label {
|
||||
margin-right: 10px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.clinic-select-value {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #ff5541;
|
||||
border-radius: 5px;
|
||||
background-color: #ffd3c1;
|
||||
color: #ff5541;
|
||||
}
|
||||
|
||||
.info-title {
|
||||
margin-top: 20px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.dropdown-icon {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.date-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.weekdays {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.weekday {
|
||||
/* margin-left: 0%; */
|
||||
font-size: 5px;
|
||||
color: #666;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.weekdayym {
|
||||
margin-left: 30%;
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.weekday.active {
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.date-swiper {
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.date-itemstr {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 80px;
|
||||
height: 50px;
|
||||
border-radius: 10px;
|
||||
background-color: #f0f0f0;
|
||||
margin-right: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.date-itemym {
|
||||
/* display: flex; */
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 80px;
|
||||
height: 50px;
|
||||
border-radius: 10px;
|
||||
background-color: #f0898b;
|
||||
margin-right: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.date-item.active {
|
||||
background-color: #ff5541;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.date {
|
||||
font-size: 16px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.doctor-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.doctor-card {
|
||||
/* display: flex; */
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
width: 400px;
|
||||
background-color: #ffd3c1;
|
||||
border: 1px solid #ff5541;
|
||||
border-radius: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.doctor-cards {
|
||||
/* display: flex; */
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
width: 400px;
|
||||
background-color: #f0f0f0;
|
||||
/* border: 1px solid #fff; */
|
||||
border-radius: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.doctor-avatar {
|
||||
width: 100px;
|
||||
height: 70px;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.doctor-avatars{
|
||||
display: flex;
|
||||
/* height: 70px; */
|
||||
/* border-radius: 50%; */
|
||||
/* margin-right: 10px; */
|
||||
}
|
||||
.doctor-info {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
|
||||
}
|
||||
.brandr-info {
|
||||
/* display: flex; */
|
||||
flex-grow: 1;
|
||||
|
||||
}
|
||||
|
||||
.doctor-name {
|
||||
font-size: 20px;
|
||||
color: #ff5541;
|
||||
margin-top: 15px;
|
||||
margin-left: 20px;
|
||||
/* margin-bottom: 5px; */
|
||||
}
|
||||
|
||||
.doctor-specialty {
|
||||
font-size: 14px;
|
||||
color: #ff5541;
|
||||
|
||||
}
|
||||
.doctor-names {
|
||||
font-size: 14px;
|
||||
/* color: #ff5541; */
|
||||
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.ygcontent{
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.doctor-specialtys {
|
||||
/* text-indent: 20px; */
|
||||
white-space: pre-wrap;
|
||||
font-size: 14px;
|
||||
/* color: #ff5541; */
|
||||
|
||||
}
|
||||
.doctor-checkbox {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.footer {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.appointment-btn {
|
||||
width: 200px;
|
||||
height: 40px;
|
||||
border-radius: 20px;
|
||||
background-color: #ff5541;
|
||||
color: #fff;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.date-list {
|
||||
/* width: 100px; */
|
||||
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.date-item {
|
||||
float: left;
|
||||
margin: 5px;
|
||||
padding: 5px;
|
||||
width: 26px;
|
||||
height: 30px;
|
||||
border: 1px solid #fff;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
background-color: #efefef;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.date-item:hover {
|
||||
/* background-color: #ff5541; */
|
||||
}
|
||||
|
||||
.date {
|
||||
font-size: 8px;
|
||||
}
|
||||
|
||||
.weekday {
|
||||
margin-top: 5px;
|
||||
font-size: 10px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.radiodate {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
309
pages/user/user_vip/dayjs/dayjs.min.js
vendored
Normal file
309
pages/user/user_vip/dayjs/dayjs.min.js
vendored
Normal file
@ -0,0 +1,309 @@
|
||||
! function(t, e) {
|
||||
"object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define &&
|
||||
define.amd ? define(e) : t.dayjs = e()
|
||||
}(this, function() {
|
||||
"use strict";
|
||||
var t = "millisecond",
|
||||
e = "second",
|
||||
n = "minute",
|
||||
r = "hour",
|
||||
i = "day",
|
||||
s = "week",
|
||||
u = "month",
|
||||
o = "quarter",
|
||||
a = "year",
|
||||
h = /^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,
|
||||
f = /\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,
|
||||
c = function(t, e, n) {
|
||||
var r = String(t);
|
||||
return !r || r.length >= e ? t : "" + Array(e + 1 - r.length).join(n) + t
|
||||
},
|
||||
d = {
|
||||
s: c,
|
||||
z: function(t) {
|
||||
var e = -t.utcOffset(),
|
||||
n = Math.abs(e),
|
||||
r = Math.floor(n / 60),
|
||||
i = n % 60;
|
||||
return (e <= 0 ? "+" : "-") + c(r, 2, "0") + ":" + c(i, 2, "0")
|
||||
},
|
||||
m: function(t, e) {
|
||||
var n = 12 * (e.year() - t.year()) + (e.month() - t.month()),
|
||||
r = t.clone().add(n, u),
|
||||
i = e - r < 0,
|
||||
s = t.clone().add(n + (i ? -1 : 1), u);
|
||||
return Number(-(n + (e - r) / (i ? r - s : s - r)) || 0)
|
||||
},
|
||||
a: function(t) {
|
||||
return t < 0 ? Math.ceil(t) || 0 : Math.floor(t)
|
||||
},
|
||||
p: function(h) {
|
||||
return {
|
||||
M: u,
|
||||
y: a,
|
||||
w: s,
|
||||
d: i,
|
||||
D: "date",
|
||||
h: r,
|
||||
m: n,
|
||||
s: e,
|
||||
ms: t,
|
||||
Q: o
|
||||
} [h] || String(h || "").toLowerCase().replace(/s$/, "")
|
||||
},
|
||||
u: function(t) {
|
||||
return void 0 === t
|
||||
}
|
||||
},
|
||||
$ = {
|
||||
name: "en",
|
||||
weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
|
||||
months: "January_February_March_April_May_June_July_August_September_October_November_December".split(
|
||||
"_")
|
||||
},
|
||||
l = "en",
|
||||
m = {};
|
||||
m[l] = $;
|
||||
var y = function(t) {
|
||||
return t instanceof v
|
||||
},
|
||||
M = function(t, e, n) {
|
||||
var r;
|
||||
if (!t) return l;
|
||||
if ("string" == typeof t) m[t] && (r = t), e && (m[t] = e, r = t);
|
||||
else {
|
||||
var i = t.name;
|
||||
m[i] = t, r = i
|
||||
}
|
||||
return !n && r && (l = r), r || !n && l
|
||||
},
|
||||
g = function(t, e) {
|
||||
if (y(t)) return t.clone();
|
||||
var n = "object" == typeof e ? e : {};
|
||||
return n.date = t, n.args = arguments, new v(n)
|
||||
},
|
||||
D = d;
|
||||
D.l = M, D.i = y, D.w = function(t, e) {
|
||||
return g(t, {
|
||||
locale: e.$L,
|
||||
utc: e.$u,
|
||||
$offset: e.$offset
|
||||
})
|
||||
};
|
||||
var v = function() {
|
||||
function c(t) {
|
||||
this.$L = this.$L || M(t.locale, null, !0), this.parse(t)
|
||||
}
|
||||
var d = c.prototype;
|
||||
return d.parse = function(t) {
|
||||
this.$d = function(t) {
|
||||
var e = t.date,
|
||||
n = t.utc;
|
||||
if (null === e) return new Date(NaN);
|
||||
if (D.u(e)) return new Date;
|
||||
if (e instanceof Date) return new Date(e);
|
||||
if ("string" == typeof e && !/Z$/i.test(e)) {
|
||||
var r = e.match(h);
|
||||
if (r) return n ? new Date(Date.UTC(r[1], r[2] - 1, r[3] || 1, r[4] || 0, r[5] || 0,
|
||||
r[6] || 0, r[7] || 0)) : new Date(r[1], r[2] - 1, r[3] || 1, r[4] || 0,
|
||||
r[5] || 0, r[6] || 0, r[7] || 0)
|
||||
}
|
||||
return new Date(e)
|
||||
}(t), this.init()
|
||||
}, d.init = function() {
|
||||
var t = this.$d;
|
||||
this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(),
|
||||
this.$H = t.getHours(), this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t
|
||||
.getMilliseconds()
|
||||
}, d.$utils = function() {
|
||||
return D
|
||||
}, d.isValid = function() {
|
||||
return !("Invalid Date" === this.$d.toString())
|
||||
}, d.isSame = function(t, e) {
|
||||
var n = g(t);
|
||||
return this.startOf(e) <= n && n <= this.endOf(e)
|
||||
}, d.isAfter = function(t, e) {
|
||||
return g(t) < this.startOf(e)
|
||||
}, d.isBefore = function(t, e) {
|
||||
return this.endOf(e) < g(t)
|
||||
}, d.$g = function(t, e, n) {
|
||||
return D.u(t) ? this[e] : this.set(n, t)
|
||||
}, d.year = function(t) {
|
||||
return this.$g(t, "$y", a)
|
||||
}, d.month = function(t) {
|
||||
return this.$g(t, "$M", u)
|
||||
}, d.day = function(t) {
|
||||
return this.$g(t, "$W", i)
|
||||
}, d.date = function(t) {
|
||||
return this.$g(t, "$D", "date")
|
||||
}, d.hour = function(t) {
|
||||
return this.$g(t, "$H", r)
|
||||
}, d.minute = function(t) {
|
||||
return this.$g(t, "$m", n)
|
||||
}, d.second = function(t) {
|
||||
return this.$g(t, "$s", e)
|
||||
}, d.millisecond = function(e) {
|
||||
return this.$g(e, "$ms", t)
|
||||
}, d.unix = function() {
|
||||
return Math.floor(this.valueOf() / 1e3)
|
||||
}, d.valueOf = function() {
|
||||
return this.$d.getTime()
|
||||
}, d.startOf = function(t, o) {
|
||||
var h = this,
|
||||
f = !!D.u(o) || o,
|
||||
c = D.p(t),
|
||||
d = function(t, e) {
|
||||
var n = D.w(h.$u ? Date.UTC(h.$y, e, t) : new Date(h.$y, e, t), h);
|
||||
return f ? n : n.endOf(i)
|
||||
},
|
||||
$ = function(t, e) {
|
||||
return D.w(h.toDate()[t].apply(h.toDate("s"), (f ? [0, 0, 0, 0] : [23, 59, 59, 999])
|
||||
.slice(e)), h)
|
||||
},
|
||||
l = this.$W,
|
||||
m = this.$M,
|
||||
y = this.$D,
|
||||
M = "set" + (this.$u ? "UTC" : "");
|
||||
switch (c) {
|
||||
case a:
|
||||
return f ? d(1, 0) : d(31, 11);
|
||||
case u:
|
||||
return f ? d(1, m) : d(0, m + 1);
|
||||
case s:
|
||||
var g = this.$locale().weekStart || 0,
|
||||
v = (l < g ? l + 7 : l) - g;
|
||||
return d(f ? y - v : y + (6 - v), m);
|
||||
case i:
|
||||
case "date":
|
||||
return $(M + "Hours", 0);
|
||||
case r:
|
||||
return $(M + "Minutes", 1);
|
||||
case n:
|
||||
return $(M + "Seconds", 2);
|
||||
case e:
|
||||
return $(M + "Milliseconds", 3);
|
||||
default:
|
||||
return this.clone()
|
||||
}
|
||||
}, d.endOf = function(t) {
|
||||
return this.startOf(t, !1)
|
||||
}, d.$set = function(s, o) {
|
||||
var h, f = D.p(s),
|
||||
c = "set" + (this.$u ? "UTC" : ""),
|
||||
d = (h = {}, h[i] = c + "Date", h.date = c + "Date", h[u] = c + "Month", h[a] = c +
|
||||
"FullYear", h[r] = c + "Hours", h[n] = c + "Minutes", h[e] = c + "Seconds", h[t] = c +
|
||||
"Milliseconds", h)[f],
|
||||
$ = f === i ? this.$D + (o - this.$W) : o;
|
||||
if (f === u || f === a) {
|
||||
var l = this.clone().set("date", 1);
|
||||
l.$d[d]($), l.init(), this.$d = l.set("date", Math.min(this.$D, l.daysInMonth())).toDate()
|
||||
} else d && this.$d[d]($);
|
||||
return this.init(), this
|
||||
}, d.set = function(t, e) {
|
||||
return this.clone().$set(t, e)
|
||||
}, d.get = function(t) {
|
||||
return this[D.p(t)]()
|
||||
}, d.add = function(t, o) {
|
||||
var h, f = this;
|
||||
t = Number(t);
|
||||
var c = D.p(o),
|
||||
d = function(e) {
|
||||
var n = g(f);
|
||||
return D.w(n.date(n.date() + Math.round(e * t)), f)
|
||||
};
|
||||
if (c === u) return this.set(u, this.$M + t);
|
||||
if (c === a) return this.set(a, this.$y + t);
|
||||
if (c === i) return d(1);
|
||||
if (c === s) return d(7);
|
||||
var $ = (h = {}, h[n] = 6e4, h[r] = 36e5, h[e] = 1e3, h)[c] || 1,
|
||||
l = this.$d.getTime() + t * $;
|
||||
return D.w(l, this)
|
||||
}, d.subtract = function(t, e) {
|
||||
return this.add(-1 * t, e)
|
||||
}, d.format = function(t) {
|
||||
var e = this;
|
||||
if (!this.isValid()) return "Invalid Date";
|
||||
var n = t || "YYYY-MM-DDTHH:mm:ssZ",
|
||||
r = D.z(this),
|
||||
i = this.$locale(),
|
||||
s = this.$H,
|
||||
u = this.$m,
|
||||
o = this.$M,
|
||||
a = i.weekdays,
|
||||
h = i.months,
|
||||
c = function(t, r, i, s) {
|
||||
return t && (t[r] || t(e, n)) || i[r].substr(0, s)
|
||||
},
|
||||
d = function(t) {
|
||||
return D.s(s % 12 || 12, t, "0")
|
||||
},
|
||||
$ = i.meridiem || function(t, e, n) {
|
||||
var r = t < 12 ? "AM" : "PM";
|
||||
return n ? r.toLowerCase() : r
|
||||
},
|
||||
l = {
|
||||
YY: String(this.$y).slice(-2),
|
||||
YYYY: this.$y,
|
||||
M: o + 1,
|
||||
MM: D.s(o + 1, 2, "0"),
|
||||
MMM: c(i.monthsShort, o, h, 3),
|
||||
MMMM: h[o] || h(this, n),
|
||||
D: this.$D,
|
||||
DD: D.s(this.$D, 2, "0"),
|
||||
d: String(this.$W),
|
||||
dd: c(i.weekdaysMin, this.$W, a, 2),
|
||||
ddd: c(i.weekdaysShort, this.$W, a, 3),
|
||||
dddd: a[this.$W],
|
||||
H: String(s),
|
||||
HH: D.s(s, 2, "0"),
|
||||
h: d(1),
|
||||
hh: d(2),
|
||||
a: $(s, u, !0),
|
||||
A: $(s, u, !1),
|
||||
m: String(u),
|
||||
mm: D.s(u, 2, "0"),
|
||||
s: String(this.$s),
|
||||
ss: D.s(this.$s, 2, "0"),
|
||||
SSS: D.s(this.$ms, 3, "0"),
|
||||
Z: r
|
||||
};
|
||||
return n.replace(f, function(t, e) {
|
||||
return e || l[t] || r.replace(":", "")
|
||||
})
|
||||
}, d.utcOffset = function() {
|
||||
return 15 * -Math.round(this.$d.getTimezoneOffset() / 15)
|
||||
}, d.diff = function(t, h, f) {
|
||||
var c, d = D.p(h),
|
||||
$ = g(t),
|
||||
l = 6e4 * ($.utcOffset() - this.utcOffset()),
|
||||
m = this - $,
|
||||
y = D.m(this, $);
|
||||
return y = (c = {}, c[a] = y / 12, c[u] = y, c[o] = y / 3, c[s] = (m - l) / 6048e5, c[i] = (m -
|
||||
l) / 864e5, c[r] = m / 36e5, c[n] = m / 6e4, c[e] = m / 1e3, c)[d] || m, f ? y : D.a(y)
|
||||
}, d.daysInMonth = function() {
|
||||
return this.endOf(u).$D
|
||||
}, d.$locale = function() {
|
||||
return m[this.$L]
|
||||
}, d.locale = function(t, e) {
|
||||
if (!t) return this.$L;
|
||||
var n = this.clone(),
|
||||
r = M(t, e, !0);
|
||||
return r && (n.$L = r), n
|
||||
}, d.clone = function() {
|
||||
return D.w(this.$d, this)
|
||||
}, d.toDate = function() {
|
||||
return new Date(this.valueOf())
|
||||
}, d.toJSON = function() {
|
||||
return this.isValid() ? this.toISOString() : null
|
||||
}, d.toISOString = function() {
|
||||
return this.$d.toISOString()
|
||||
}, d.toString = function() {
|
||||
return this.$d.toUTCString()
|
||||
}, c
|
||||
}();
|
||||
return g.prototype = v.prototype, g.extend = function(t, e) {
|
||||
return t(e, v, g), g
|
||||
}, g.locale = M, g.isDayjs = y, g.unix = function(t) {
|
||||
return g(1e3 * t)
|
||||
}, g.en = m[l], g.Ls = m, g
|
||||
});
|
107
pages/user/user_vip/home/index.vue
Normal file
107
pages/user/user_vip/home/index.vue
Normal file
@ -0,0 +1,107 @@
|
||||
<template>
|
||||
<view style="touch-action: none;">
|
||||
<view class="home" style="position:fixed;" :style="{ top: top + 'px'}" id="right-nav" @touchmove.stop.prevent="setTouchMove">
|
||||
<view class="homeCon bg-color-red" :class="homeActive === true ? 'on' : ''" v-if="homeActive">
|
||||
<navigator hover-class='none' url='/pages/index/index' open-type='switchTab'
|
||||
class='iconfont icon-shouye-xianxing' />
|
||||
<navigator hover-class='none' url='/pages/order_addcart/order_addcart' open-type='switchTab'
|
||||
class='iconfont icon-caigou-xianxing' />
|
||||
<navigator hover-class='none' url='/pages/user/index' open-type='switchTab'
|
||||
class='iconfont icon-yonghu1' />
|
||||
</view>
|
||||
<view @click="open" class="pictrueBox">
|
||||
<view class="pictrue">
|
||||
<image :src="homeActive === true ? '/static/images/close.gif' : '/static/images/open.gif'" class="image" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
mapGetters
|
||||
} from "vuex";
|
||||
export default {
|
||||
name: "Home",
|
||||
props: {},
|
||||
data: function() {
|
||||
return {
|
||||
top: "500"
|
||||
};
|
||||
},
|
||||
computed: mapGetters(["homeActive"]),
|
||||
methods: {
|
||||
setTouchMove(e) {
|
||||
if (e.touches[0].clientY < 545 && e.touches[0].clientY > 66) {
|
||||
this.top = e.touches[0].clientY
|
||||
}
|
||||
},
|
||||
open: function() {
|
||||
this.homeActive ?
|
||||
this.$store.commit("CLOSE_HOME") :
|
||||
this.$store.commit("OPEN_HOME");
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.pictrueBox {
|
||||
width: 130rpx;
|
||||
height: 120rpx;
|
||||
}
|
||||
|
||||
/*返回主页按钮*/
|
||||
.home {
|
||||
position: fixed;
|
||||
color: white;
|
||||
text-align: center;
|
||||
z-index: 9999;
|
||||
right: 15rpx;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.home .homeCon {
|
||||
border-radius: 50rpx;
|
||||
opacity: 0;
|
||||
height: 0;
|
||||
color: $theme-color;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.home .homeCon.on {
|
||||
opacity: 1;
|
||||
animation: bounceInRight 0.5s cubic-bezier(0.215, 0.610, 0.355, 1.000);
|
||||
width: 300rpx;
|
||||
height: 86rpx;
|
||||
margin-bottom: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: #f44939 !important;
|
||||
}
|
||||
|
||||
.home .homeCon .iconfont {
|
||||
font-size: 48rpx;
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.home .pictrue {
|
||||
width: 86rpx;
|
||||
height: 86rpx;
|
||||
border-radius: 50%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.home .pictrue .image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
transform: rotate(90deg);
|
||||
ms-transform: rotate(90deg);
|
||||
moz-transform: rotate(90deg);
|
||||
webkit-transform: rotate(90deg);
|
||||
o-transform: rotate(90deg);
|
||||
}
|
||||
</style>
|
608
pages/user/user_vip/index.vue
Normal file
608
pages/user/user_vip/index.vue
Normal file
File diff suppressed because one or more lines are too long
20
sheep/api/member/level.js
Normal file
20
sheep/api/member/level.js
Normal file
@ -0,0 +1,20 @@
|
||||
import request from '@/sheep/request';
|
||||
|
||||
const getExper = {
|
||||
// 获得会员等级列表
|
||||
getLevelList: () => {
|
||||
return request({
|
||||
url: '/app-api/member/level/list',
|
||||
method: 'GET',
|
||||
});
|
||||
},
|
||||
// 获得会员经验记录分页
|
||||
getExperienceRecordPage: () => {
|
||||
return request({
|
||||
url: '/app-api/member/experience-record/page',
|
||||
method: 'GET',
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
export default getExper;
|
@ -8,6 +8,14 @@ const DeliveryApi = {
|
||||
method: 'get',
|
||||
});
|
||||
},
|
||||
// 获得自提门店列表
|
||||
getDeliveryPickUpStoreList: () => {
|
||||
return request({
|
||||
url: `/trade/delivery/pick-up-store/list`,
|
||||
method: 'get',
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
export default DeliveryApi;
|
||||
|
@ -164,10 +164,10 @@ const checkUpdate = async (silence = true) => {
|
||||
|
||||
// 获取订阅消息模板
|
||||
async function getSubscribeTemplate() {
|
||||
const { error, data } = await third.wechat.subscribeTemplate();
|
||||
if (error === 0) {
|
||||
subscribeEventList = data;
|
||||
}
|
||||
// const { error, data } = await third.wechat.subscribeTemplate();
|
||||
// if (error === 0) {
|
||||
// subscribeEventList = data;
|
||||
// }
|
||||
}
|
||||
|
||||
// 订阅消息
|
||||
|
Loading…
Reference in New Issue
Block a user