预约记录对接完成

This commit is contained in:
77 2024-10-24 10:55:27 +08:00
parent ee3d541592
commit b38f44530e
8 changed files with 560 additions and 639 deletions

View File

@ -68,9 +68,9 @@
</view> </view>
</view> </view>
</view>
<view style="clear: both;"></view> <view style="clear: both;"></view>
</view> </view>
</view>
<!-- 签到说明 --> <!-- 签到说明 -->
<view class="new-qdsm"> <view class="new-qdsm">
@ -572,15 +572,16 @@
position: relative; position: relative;
.sign-list { .sign-list {
width: 86%;
margin: 0 auto; margin: 0 auto;
padding: 20px; padding: 20px;
background: white; background: white;
margin: 0 7px;
border-radius: 18px; border-radius: 18px;
.new-top { .new-top {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin: 0 10px;
margin-bottom: 10px; margin-bottom: 10px;
.left { .left {
@ -612,12 +613,20 @@
} }
.new-bottom { .new-bottom {
width: 100%; display: grid;
margin-top: 5px;
// grid-template-columns: repeat(auto-fill, 22%);
grid-template-columns: repeat(4, 1fr);
grid-template-rows: 100px;
grid-auto-rows: 100px;
justify-content: center;
grid-gap: 5px;
padding: 5px;
.new-l { .new-l {
padding: 5px; // padding: 5px;
float: left; float: left;
width: 21.9%; width: 100%;
.new-list { .new-list {
padding: 5px 5px; padding: 5px 5px;
@ -680,10 +689,10 @@
.new-7 { .new-7 {
position: relative; position: relative;
width: 134px; width: 178%;
padding: 5px 10px; padding: 5px 10px;
padding-bottom: 0; padding-bottom: 0;
height: 80px; height: 80%;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;

View File

@ -17,36 +17,21 @@
<view class="pay-title ss-p-l-30 ss-m-y-30">选择支付方式</view> <view class="pay-title ss-p-l-30 ss-m-y-30">选择支付方式</view>
<radio-group @change="onTapPay"> <radio-group @change="onTapPay">
<label class="pay-type-item" v-for="item in state.payMethods" :key="item.title"> <label class="pay-type-item" v-for="item in state.payMethods" :key="item.title">
<view <view class="pay-item ss-flex ss-col-center ss-row-between ss-p-x-30 border-bottom"
class="pay-item ss-flex ss-col-center ss-row-between ss-p-x-30 border-bottom" :class="{ 'disabled-pay-item': item.disabled }">
:class="{ 'disabled-pay-item': item.disabled }"
>
<view class="ss-flex ss-col-center"> <view class="ss-flex ss-col-center">
<image <image class="pay-icon" v-if="item.disabled"
class="pay-icon"
v-if="item.disabled"
:src="sheep.$url.static('/static/img/shop/pay/cod_disabled.png')" :src="sheep.$url.static('/static/img/shop/pay/cod_disabled.png')"
mode="aspectFit" mode="aspectFit" />
/> <image class="pay-icon" v-else :src="sheep.$url.static(item.icon)" mode="aspectFit" />
<image
class="pay-icon"
v-else
:src="sheep.$url.static(item.icon)"
mode="aspectFit"
/>
<text class="pay-title">{{ item.title }}</text> <text class="pay-title">{{ item.title }}</text>
</view> </view>
<view class="check-box ss-flex ss-col-center ss-p-l-10"> <view class="check-box ss-flex ss-col-center ss-p-l-10">
<view class="userInfo-money ss-m-r-10" v-if="item.value === 'wallet'"> <view class="userInfo-money ss-m-r-10" v-if="item.value === 'wallet'">
余额: {{ fen2yuan(userWallet.balance) }} 余额: {{ fen2yuan(userWallet.balance) }}
</view> </view>
<radio <radio :value="item.value" color="var(--ui-BG-Main)" style="transform: scale(0.8)"
:value="item.value" :disabled="item.disabled" :checked="state.payment === item.value" />
color="var(--ui-BG-Main)"
style="transform: scale(0.8)"
:disabled="item.disabled"
:checked="state.payment === item.value"
/>
</view> </view>
</view> </view>
</label> </label>
@ -61,13 +46,8 @@
<button v-else-if="state.payStatus === -1" class="ss-reset-button past-due-btn" disabled> <button v-else-if="state.payStatus === -1" class="ss-reset-button past-due-btn" disabled>
支付已过期 支付已过期
</button> </button>
<button <button v-else class="ss-reset-button save-btn" @tap="onPay" :disabled="state.payStatus !== 1"
v-else :class="{ 'disabled-btn': state.payStatus !== 1 }">
class="ss-reset-button save-btn"
@tap="onPay"
:disabled="state.payStatus !== 1"
:class="{ 'disabled-btn': state.payStatus !== 1 }"
>
立即支付 立即支付
</button> </button>
</view> </view>
@ -75,14 +55,28 @@
</s-layout> </s-layout>
</template> </template>
<script setup> <script setup>
import { computed, reactive } from 'vue'; import {
import { onLoad } from '@dcloudio/uni-app'; computed,
reactive
} from 'vue';
import {
onLoad
} from '@dcloudio/uni-app';
import sheep from '@/sheep'; import sheep from '@/sheep';
import { fen2yuan, useDurationTime } from '@/sheep/hooks/useGoods'; import {
fen2yuan,
useDurationTime
} from '@/sheep/hooks/useGoods';
import PayOrderApi from '@/sheep/api/pay/order'; import PayOrderApi from '@/sheep/api/pay/order';
import PayChannelApi from '@/sheep/api/pay/channel'; import PayChannelApi from '@/sheep/api/pay/channel';
import { getPayMethods } from '@/sheep/platform/pay'; import {
getPayMethods
} from '@/sheep/platform/pay';
import request from '@/sheep/request';
import {
baseUrl,
apiPath
} from '@/sheep/config';
const userWallet = computed(() => sheep.$store('user').userWallet); const userWallet = computed(() => sheep.$store('user').userWallet);
// //
@ -92,23 +86,54 @@
payStatus: 0, // 0=, -2= -1= 1=2= payStatus: 0, // 0=, -2= -1= 1=2=
payMethods: [], // payMethods: [], //
payment: '', // payment: '', //
vip: '' ,//vip
vipid:'',//vipid
cardName:''//vip
}); });
const onPay = () => { const onPay = () => {
if (state.payment === '') { if (state.payment === '') {
console.log(state.vipid, "sssssssssssss")
sheep.$helper.toast('请选择支付方式'); sheep.$helper.toast('请选择支付方式');
return; return;
} }
if (state.payment === 'wallet') { if (state.payment === 'wallet') {
if (state.vip == "vip") {
console.log("-------sssss----")
let data = {
id: state.vipid,
cardName: state.cardName,
payChannel: "wallet"
}
//
request({
url: `${baseUrl}${apiPath}/pay/member/update`,
method: 'post',
data,
custom: {
showLoading: false,
},
}).then((res) => {
console.log(res, "sss")
if(res.data){
sheep.$helper.toast('开通成功');
setTimeout(()=>{
sheep.$router.go('/pages/index/user')
},1500)
}
});
} else {
uni.showModal({ uni.showModal({
title: '提示', title: '提示',
content: '确定要支付吗?', content: '确定要支付吗?',
success: function (res) { success: function(res) {
if (res.confirm) { if (res.confirm) {
sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id); sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id);
} }
}, },
}); });
}
} else { } else {
sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id); sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id);
} }
@ -156,7 +181,10 @@
// //
async function setOrder(id) { async function setOrder(id) {
// //
const { data, code } = await PayOrderApi.getOrder(id); const {
data,
code
} = await PayOrderApi.getOrder(id);
if (code !== 0 || !data) { if (code !== 0 || !data) {
state.payStatus = -2; state.payStatus = -2;
return; return;
@ -170,7 +198,10 @@
// //
async function setPayMethods() { async function setPayMethods() {
const { data, code } = await PayChannelApi.getEnableChannelCodeList(state.orderInfo.appId); const {
data,
code
} = await PayChannelApi.getEnableChannelCodeList(state.orderInfo.appId);
if (code !== 0) { if (code !== 0) {
return; return;
} }
@ -188,6 +219,9 @@
} }
// //
let id = options.id; let id = options.id;
state.vip = options.type
state.vipid = options.vipid
state.cardName = options.cardName
if (options.orderType) { if (options.orderType) {
state.orderType = options.orderType; state.orderType = options.orderType;
} }
@ -254,6 +288,7 @@
.pay-item { .pay-item {
height: 86rpx; height: 86rpx;
} }
.disabled-pay-item { .disabled-pay-item {
.pay-title { .pay-title {
color: #999999; color: #999999;
@ -274,6 +309,7 @@
background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient)); background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
color: $white; color: $white;
} }
.disabled-btn { .disabled-btn {
background: #e5e5e5; background: #e5e5e5;
color: #999999; color: #999999;

View File

@ -5,17 +5,18 @@
<view class="card" v-for="(item, index) in reservationList" :key="index"> <view class="card" v-for="(item, index) in reservationList" :key="index">
<view class="card-content"> <view class="card-content">
<text class="type">预约信息</text> <text class="type">预约信息</text>
<text class="time">订单日期{{ sheep.$helper.timeFormat(item.createTime, 'yyyy-mm-dd') }}</text> <text class="time">订单日期{{ sheep.$helper.timeFormat(item.creatTime, 'yyyy-mm-dd') }}</text>
</view> </view>
<view> <view>
<text class="address">预约姓名<text class="title">{{ item.technicianName }}</text></text> <text class="address">预约姓名<text class="title">{{ item.name }}</text></text>
<text class="address">预约电话<text class="title">{{ item.memberphone }}</text></text> <text class="address">预约电话<text class="title">{{ item.phone }}</text></text>
<text class="address">预约时间<text <text class="address">预约时间<text
class="title">{{ sheep.$helper.timeFormat(item.reAddTime, 'yyyy-mm-dd') }}</text></text> class="title">{{ item.days }}</text></text>
<text class="address">门店名称<text class="title">{{ item.brandName }}</text> </text> <text class="address">项目名称<text class="title">{{ item.projectName }}</text> </text>
<div class="address-container"> <text class="address">项目套餐<text class="title">{{ item.technicianName }}</text> </text>
<!-- <div class="address-container">
<text class="address">门店地址<text class="title">{{ item.brandaddress }}</text></text> <text class="address">门店地址<text class="title">{{ item.brandaddress }}</text></text>
</div> </div> -->
<text class="address">备注留言<text class="title">{{ item.remark }}</text></text> <text class="address">备注留言<text class="title">{{ item.remark }}</text></text>
</view> </view>
<view> <view>
@ -68,16 +69,17 @@
// //
function getList() { function getList() {
request({ request({
url: `${baseUrl}${apiPath}/h5/reservation/list`, url: `${baseUrl}${apiPath}/h5/reservation/reservationInfo`,
method: 'GET', method: 'GET',
params: { // params: {
userId: memberId.value, // userId: memberId.value,
}, // },
custom: { custom: {
showLoading: false, showLoading: false,
}, },
}).then((res) => { }).then((res) => {
reservationList.value = res.data.list; console.log(res,"-------------")
reservationList.value = res.data;
}); });
} }

View File

@ -32,46 +32,6 @@
<image src="@/static/images/dayu.png" class="img"></image> <image src="@/static/images/dayu.png" class="img"></image>
</view> </view>
</picker> </picker>
<!-- 项目选择列表 -->
<view class="new-project">
<view class="list" @click="onradio(item)" :class="this.techid == item.id ? 'on': ''"
v-for="(item, index) in techList" :key="index">
<view class="l">
<image
src="https://zysc.fjptzykj.com:3000/shangcheng/e940fb45cc53df01980b7069432d5101e104014fbb3cd24862d08c1ffba9df68.png"
class='img'></image>
</view>
<view class="r">
<view class="tt">
<image class='img img1'
src="https://zysc.fjptzykj.com:3000/shangcheng/d0a91de26065e4753357ed32f301d2ed9c8a9b10e789c9cddf5f5a93903af9da.png">
</image>
<image class='img img2'
src="https://zysc.fjptzykj.com:3000/shangcheng/f9e69fd9b1e60481f3ba926d1942d65e34c90916329823a16ce703f6fe36b2e9.png">
</image>
关于UI视觉设计方案需求评审
</view>
<view class="tt ttr">
<image class='img img1'
src="https://zysc.fjptzykj.com:3000/shangcheng/10b4a5f0abb36bb1a4ef71f36ffc867330d34844abd897a59889dc9a61b9c2af.png">
</image>
<image class='img img2'
src="https://zysc.fjptzykj.com:3000/shangcheng/a4a5541795df5e89912762bfb29900d8ab420abbda2753b2d22741e29e0ea150.png">
</image>
关于UI视觉设计方案需求评审
</view>
<view class="tt ttr">
<image class='img img1'
src="https://zysc.fjptzykj.com:3000/shangcheng/f197edf433c7c80703de38cf49f9bbef64192de14ec284950a023d68bcad792a.png">
</image>
<image class='img img2'
src="https://zysc.fjptzykj.com:3000/shangcheng/ca834c977ae99a35db90b5cef48c729c9ce953840a86847cb926d9752f58c0d7.png">
</image>
关于UI视觉设计方案需求评审
</view>
</view>
</view>
</view>
<view class="title"> <view class="title">
<image <image
@ -79,7 +39,7 @@
class="img"></image> class="img"></image>
<text class='text'>套餐选择</text> <text class='text'>套餐选择</text>
</view> </view>
<picker mode="selector" :range="brandNameList" @change="onClinicChange"> <picker mode="selector" :range="brandNameList3" @change="onClinicChange3">
<view class="clinic-select-value"> <view class="clinic-select-value">
<text>{{ll3}}</text> <text>{{ll3}}</text>
<image src="@/static/images/dayu.png" class="img"></image> <image src="@/static/images/dayu.png" class="img"></image>
@ -96,15 +56,9 @@
<scroll-view class="scroll-view_H" scroll-x="true" @scroll="scroll" scroll-left="120"> <scroll-view class="scroll-view_H" scroll-x="true" @scroll="scroll" scroll-left="120">
<view class="scroll-view-item_H" v-for="(item, index) in dateList" :key="index" <view class="scroll-view-item_H" v-for="(item, index) in dateList" :key="index"
@click="selectDate(index)"> @click="selectDate(index)">
<view class="date-item" v-if="addDate==item.addDate" <view class="date-item" :class="brandId4 == item.id ? 'on':''">
style="background-color: rgba(228,241,255);border: 1px solid rgba(3,150,248);"> <text class="date" style="color: black;">{{ item.days.slice(5) }}</text>
<text class="date" style="color: black;">{{ item.formattedDate }}</text> <text class="weekday" style="color: rgba(82,82,2,83);">{{ item.week }}</text>
<text class="weekday" style="color: rgba(82,82,2,83);">{{ 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> </view>
</scroll-view> </scroll-view>
@ -119,23 +73,13 @@
</view> </view>
<view class="date-list"> <view class="date-list">
<view class="new-nei" v-for="(item, index) in serviceTime" :key="index"> <view class="new-nei" v-for="(item, index) in brandList4" :key="index">
<view class="date-list-new" @click="selecthsstr(index)" :class="hsstr==item.str ? 'on':''"> <view class="date-list-new" @click="selecthsstr(index,item.status)"
<view class="date-itemstr" v-if="hsstr==item.str"> :class="{'on' : brandId5 == item.id,'hui' : item.status == 0}" v-if="brandList3.length>0">
<text class="weekday">{{ item.str }}</text> <view class="date-itemstr">
</view> <view class="weekday">{{ item.timeQuantum }}</view>
<view v-if="item.ym==='true'" class="new-jk"> <view class="weekday">剩余{{item.residueNumber}}</view>
<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'" class="new-jk">
<view class="date-itemstr" v-if="hsstr!=item.str">
<text class="weekday">{{ item.str }}</text>
</view>
</view> </view>
</view> </view>
@ -151,43 +95,20 @@
<view class="yyxx-input"> <view class="yyxx-input">
<view class="name"> <view class="name">
姓名:<input class="int" placeholder="请输入您的名字" placeholder-style="color:rgba(204,204,204)" /> 姓名:<input class="int" v-model="name" placeholder="请输入您的名字"
placeholder-style="color:rgba(204,204,204)" />
</view> </view>
<view class="phone"> <view class="phone">
电话:<input class="int" placeholder="请输入您的电话" placeholder-style="color:rgba(204,204,204)" /> 电话:<input class="int" v-model="phone" placeholder="请输入您的电话"
placeholder-style="color:rgba(204,204,204)" />
</view> </view>
</view> </view>
</view> </view>
<view class="footer" @click="handleSubmit"> <view class="footer" @click="brandlists9">
立即预约 立即预约
</view> </view>
</view> </view>
<view class="container">
<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>
</view>
</s-layout> </s-layout>
</template> </template>
@ -234,10 +155,15 @@
brandList: [], // brandList: [], //
brandList2: [], // brandList2: [], //
brandList3: [], // brandList3: [], //
brandNameList: [],// brandList4: [], //
brandNameList2: [],// brandNameList: [], //
brandNameList3: [],// brandNameList2: [], //
brandId: "",//id brandNameList3: [], //
brandId: "", //id
brandId2: "", //id
brandId3: "", //id
brandId4: "", //id
brandId5: "", //id
brandName: "", brandName: "",
selectedDayIndex: 0, selectedDayIndex: 0,
selecttypeIndex: 0, selecttypeIndex: 0,
@ -246,46 +172,63 @@
ll: '请选择', ll: '请选择',
ll2: '请选择', ll2: '请选择',
ll3: '请选择', ll3: '请选择',
gg: '请选择' gg: '请选择',
dateIndex: '', //
name: '',
phone: ''
}; };
}, },
created() { created() {
this.isLogin = computed(() => sheep.$store('user').isLogin); this.isLogin = computed(() => sheep.$store('user').isLogin);
this.memberId = computed(() => sheep.$store('user').userInfo).value.id this.memberId = computed(() => sheep.$store('user').userInfo).value.id
this.brandlists();// this.brandlists(); //
// this.brandlists2();//
// this.brandlists3();//
this.generateDateList();
this.addDate = this.dateList[0].addDate;
this.gettypeList();
console.log(apiPath, baseUrl, "import.meta.env.SHOPRO_API_PATH")
}, },
methods: { methods: {
onClinicChange(event) { onClinicChange(event) {
this.brandId = ''
this.brandId2 = ''
this.brandId3 = ''
this.brandId4 = ''
this.brandId5 = ''
this.name = ''
this.phone = ''
this.ll2 = '请选择'
this.ll3 = '请选择'
this.brandNameList2 = []
this.brandNameList3 = []
this.dateList = []
this.brandList3 = []
const selectedClinicIndex = event.detail.value; const selectedClinicIndex = event.detail.value;
this.selectedClinicIndex = selectedClinicIndex; this.selectedClinicIndex = selectedClinicIndex;
this.ll = this.brandList[selectedClinicIndex].name this.ll = this.brandList[selectedClinicIndex].name
// console.log("dddddddddddd")
// this.ll = this.brandList.list[selectedClinicIndex].name
this.brandId = this.brandList[selectedClinicIndex].id this.brandId = this.brandList[selectedClinicIndex].id
this.brandlists2(); this.brandlists2();
}, },
onClinicChange2(event) { onClinicChange2(event) {
const selectedClinicIndex = event.detail.value; const selectedClinicIndex = event.detail.value;
this.selectedClinicIndex2 = selectedClinicIndex; this.selectedClinicIndex2 = selectedClinicIndex;
this.ll2 = this.brandList2[selectedClinicIndex].name this.ll2 = this.brandList2[selectedClinicIndex].name
// this.brandId = this.brandList.list[selectedClinicIndex].id this.brandId2 = this.brandList2[selectedClinicIndex].id
console.log("------onClinicChange2------") this.setDate();
// this.ll = this.brandList.list[selectedClinicIndex].name this.brandlists3();
// this.technicianList(); },
onClinicChange3(event) {
const selectedClinicIndex = event.detail.value;
this.selectedClinicIndex3 = selectedClinicIndex;
this.ll3 = this.brandList3[selectedClinicIndex].name
this.brandId3 = this.brandList3[selectedClinicIndex].id
}, },
ontype(event) { ontype(event) {
const selecttypeIndex = event.detail.value; const selecttypeIndex = event.detail.value;
this.selecttypeIndex = selecttypeIndex; this.selecttypeIndex = selecttypeIndex;
this.typename = this.typeList[selecttypeIndex].dictValue this.typename = this.typeList[selecttypeIndex].dictValue
this.type = this.typeList[selecttypeIndex].value this.type = this.typeList[selecttypeIndex].value
console.log(this.type, "this.type")
this.gg = this.typeList[selecttypeIndex].label this.gg = this.typeList[selecttypeIndex].label
this.technicianList(); this.technicianList();
}, },
@ -306,6 +249,8 @@
}, },
// //
brandlists2() { brandlists2() {
this.brandNameList2 = [];
this.brandList2 = [];
request({ request({
url: `${baseUrl}${apiPath}/h5/project/getProject`, url: `${baseUrl}${apiPath}/h5/project/getProject`,
method: 'GET', method: 'GET',
@ -316,231 +261,134 @@
showLoading: false, showLoading: false,
}, },
}).then((res) => { }).then((res) => {
// this.brandList2 = res.data this.brandList2 = res.data
console.log(res,"------brandList2------") for (var i = 0; i < this.brandList2.length; i++) {
// for (var i = 0; i < this.brandList2.length; i++) { this.brandNameList2.push(this.brandList2[i].name)
// this.brandNameList2.push(this.brandList2[i].name) }
// }
}); });
}, },
// //
brandlists3() { setDate() {
request({ request({
url: `${baseUrl}${apiPath}/h5/technician/getTecchnician`, url: `${baseUrl}${apiPath}/h5/projectday/getProjectday`,
method: 'GET', method: 'GET',
params: {
id: this.brandId2
},
custom: { custom: {
showLoading: false, showLoading: false,
}, },
}).then((res) => { }).then((res) => {
this.dateList = res.data;
});
},
//
brandlists3() {
this.brandList3 = []
this.brandNameList3 = []
request({
url: `${baseUrl}${apiPath}/h5/technician/getTechnician`,
method: 'GET',
params: {
id: this.brandId2
},
custom: {
showLoading: false,
},
}).then((res) => {
if(res){
}
console.log(this.brandList3,"------brandList3---------");
console.log(res,"------brandList3---------");
this.brandList3 = res.data this.brandList3 = res.data
for (var i = 0; i < this.brandList3.length; i++) { for (var i = 0; i < this.brandList3.length; i++) {
this.brandNameList3.push(this.brandList3[i].name) this.brandNameList3.push(this.brandList3[i].name)
} }
}); });
}, },
gettypeList() { //
brandlists4() {
request({ request({
url: `${baseUrl}${apiPath}/h5/reservation/type`, url: `${baseUrl}${apiPath}/h5/configuration/getConfiguration`,
method: 'GET',
custom: {
showLoading: false,
},
}).then((res) => {
console.log(res, "typeListtypeList")
this.typeList = res.data
for (var i = 0; i < this.typeList.length; i++) {
this.typenameList.push(this.typeList[i].label);
}
console.log(this.typenameList)
});
},
//
technicianList() {
console.log("有没有进来technicianList");
this.techid = null,
this.serviceTime = []
this.hsstr = ""
request({
url: `${baseUrl}${apiPath}/h5/technician/list`,
method: 'GET', method: 'GET',
params: { params: {
type: this.type, projectdayId: this.brandId4,
brandId: this.brandId technicianId: this.brandId3
}, },
custom: { custom: {
showLoading: false, showLoading: false,
}, },
}).then((res) => { }).then((res) => {
console.log(res) this.brandList4 = res.data
this.techList = res.data.list
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)
}); });
}, },
//
onradio(item) { brandlists9() {
this.techid = item.id if (!this.brandId) {
this.serviceTime = [] sheep.$helper.toast('请选择门店')
this.hsstr = "" } else if (!this.brandId2) {
sheep.$helper.toast('请选择项目')
} else if (!this.brandId3) {
sheep.$helper.toast('请选择套餐')
} else if (!this.brandId4) {
sheep.$helper.toast('请选择预约日期')
} else if (!this.brandId5) {
sheep.$helper.toast('请选择预约时段')
} else if (!this.name) {
sheep.$helper.toast('请填写姓名')
} else if (!this.phone) {
sheep.$helper.toast('请填写电话')
} else {
request({ request({
url: `${baseUrl}${apiPath}/h5/technician/h5xq`, url: `${baseUrl}${apiPath}/h5/reservation/addReservation`,
method: 'GET', method: 'GET',
params: { params: {
addDate: this.addDate, brandId: this.brandId,
id: this.techid projectId: this.brandId2,
technicianId: this.brandId3,
projectdayId: this.brandId4,
timeId: this.brandId5,
name: this.name,
phone: this.phone
}, },
custom: { custom: {
showLoading: false, showLoading: false,
}, },
}).then((res) => { }).then((res) => {
console.log(res); if (res.code == 0) {
var serviceTime = JSON.parse(res.data.serviceTime) sheep.$helper.toast('提交成功');
console.log(serviceTime, "serviceTimeserviceTimeserviceTime") sheep.$router.go('/pages/index/user')
if (serviceTime) {
for (let i = 0; i < serviceTime.length; i++) {
console.log(serviceTime[i].end)
console.log(serviceTime[i].start)
console.log(serviceTime[i].ym)
if (serviceTime[i].end && serviceTime[i].start) {
this.sjd = {},
this.sjd.str = serviceTime[i].start.toString() + "-" + serviceTime[
i].end.toString()
this.sjd.ym = serviceTime[i].ym
this.serviceTime.push(this.sjd)
} }
}
}
console.log(this.serviceTime, "this.serviceTime")
}); });
}
}, },
selectDay(index) { //
this.selectedDayIndex = index; delete(val) {},
}, //
handleSwiperChange(event) { selectDate(index) {
this.selectedDayIndex = event.mp.detail.current; console.log(this.brandList3, "brandList3")
}, if(this.brandId3 == ''){
formatDate(date) { sheep.$helper.toast('请先选择套餐')
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; return;
} }
showAuthModal('accountLogin') this.dateIndex = index;
} else { this.brandId4 = this.dateList[index].id;
this.memberId = computed(() => sheep.$store('user').userInfo).value.id this.brandlists4();
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) {
request({
url: `${baseUrl}/app-api/h5/reservation/add`,
method: 'post',
params: {
type: this.type,
brandId: this.brandId,
technicianId: this.techid,
reAddTime: this.addDate,
hsstr: this.hsstr,
userId: this.memberId,
}, },
custom: { selecthsstr(index, status) {
showLoading: false, if (status == 0) {
}, this.brandId5 = '';
}).then((res) => { console.log('this.brandId5', this.brandId5);
uni.showModal({ sheep.$helper.toast('该时间段已约满')
title: '预约提示', return;
content: '预约成功!',
success: function(res) {
if (res.confirm) {
uni.switchTab({
url: '/pages/index/user'
});
} else {
uni.switchTab({
url: '/pages/index/user'
});
} }
this.brandId5 = this.brandList4[index].id;
console.log('this.brandId5', this.brandId5);
} }
});
});
}
}
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('this.serviceTimesss:', this.serviceTime[index].ym);
},
}, },
}; };
</script> </script>
@ -728,22 +576,28 @@
border-radius: 6px; border-radius: 6px;
&.on { &.on {
background: rgb(0, 149, 248); background: #e4f1ff;
.date-itemstr {
// background-color: #ff5541;
.weekday {
color: white;
}
}
}
.date-itemstr { .date-itemstr {
// background-color: #ff5541; // background-color: #ff5541;
.weekday {} .weekday {}
} }
}
&.hui {
user-select: none;
background: #f6f6f6;
}
.date-itemstr {
// background-color: #ff5541;
.weekday {
color: black;
font-size: 8px;
}
}
.new-jk { .new-jk {
.date-itemym { .date-itemym {
@ -776,17 +630,23 @@
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
&:hover { &:hover {
// background-color: #ff5541; // background-color: #ff5541;
} }
&.on {
background-color: rgba(228, 241, 255);
border: 1px solid rgba(3, 150, 248);
}
.date { .date {
font-size: 8px; font-size: 8px;
} }
.weekday { .weekday {
margin-top: 5px; margin-top: 5px;
font-size: 10px; font-size: 8px;
color: #666; color: #666;
} }
} }

View File

@ -15,14 +15,14 @@
<image src="" class="img"></image> <image src="" class="img"></image>
</view> </view>
<view class="c">您与众悦e家商场的第101天</view> <view class="c">您与众悦e家商场的第101天</view>
<view class="b">开通即享会员权益</view> <view class="b" v-if="!userInfo.activate">开通即享会员权益</view>
</view> </view>
</view> </view>
<view class="r"> <view class="r" v-if="!userInfo.activate">
开通会员 <text>立即开通</text>
</view> </view>
</view> </view>
<view class="vipLv" v-if="userInfo.activate">当前卡片{{userInfo.cardName}}</view>
</view> </view>
<view class="vip-zxq"> <view class="vip-zxq">
<image <image
@ -54,10 +54,10 @@
<view class="vip-kt"> <view class="vip-kt">
<view class="top"> <view class="top">
<text class="t1" v-if="userInfo.activate == 1">试用会员</text> <!-- <text class="t1" v-if="userInfo.activate == 1">试用会员</text> -->
<text class="t1" v-if="userInfo.activate == 2">开通会员</text> <text class="t1" v-if="!userInfo.activate">开通会员</text>
<text class="t2">有效期至</text> <text class="t2" v-if="userInfo.activate">有效期至</text>
<text class="t3">2024-10-24</text> <text class="t3" v-if="userInfo.activate">{{userInfo.cardExpirationTime}}</text>
</view> </view>
<scroll-view class="scroll-view_H" scroll-x="true" @scroll="scroll" scroll-left="120"> <scroll-view class="scroll-view_H" scroll-x="true" @scroll="scroll" scroll-left="120">
<view id="demo1" @click="vipFun(index,item.name)" class="scroll-view-item_H uni-bg-red" :class="valVip == index ? 'on' : ''" v-for="(item,index) in vipList" :key="index"> <view id="demo1" @click="vipFun(index,item.name)" class="scroll-view-item_H uni-bg-red" :class="valVip == index ? 'on' : ''" v-for="(item,index) in vipList" :key="index">
@ -72,12 +72,12 @@
<view class="vip-text"> <view class="vip-text">
购买即视为同意<text class="ts">会员用户协议</text> 购买即视为同意<text class="ts">会员用户协议</text>
</view> </view>
<view class="vip-btn" @click="beclick()" v-if="userInfo.activate != 1"> <view class="vip-btn" @click="beclick()" v-if="!userInfo.activate">
立即试用 立即试用
</view> </view>
<view class="vip-btn" @click="beclick()" v-else> <!-- <view class="vip-btn" @click="beclick()" v-else>
立即开通 立即开通
</view> </view> -->
</view> </view>
</s-layout> </s-layout>
</template> </template>
@ -99,7 +99,7 @@
const userInfo = computed(() => sheep.$store('user').userInfo); const userInfo = computed(() => sheep.$store('user').userInfo);
const vipList = ref([]); const vipList = ref([]);
const vipList2 = ref([]); const vipList2 = ref([]);
const valVip = ref([]); const valVip = ref(88888);
const nameVip = ref([]); const nameVip = ref([]);
// //
function getList() { function getList() {
@ -124,6 +124,7 @@
function vipFun(index,name) { function vipFun(index,name) {
valVip.value = index valVip.value = index
data.cardName = name data.cardName = name
console.log(index,name,"name")
} }
// beclick // beclick
@ -138,9 +139,14 @@
}, },
}).then((res) => { }).then((res) => {
console.log(res,"-----------试用---------------") console.log(res,"-----------试用---------------")
if(res.code == 200){ if(res.code == 0){
if(data.cardName == "试用"){
sheep.$helper.toast('试用开通成功'); sheep.$helper.toast('试用开通成功');
sheep.$router.go('/pages/index/user') sheep.$router.go('/pages/index/user')
}else{
sheep.$router.go('/pages/pay/index', { id: res.data.payOrderId,type:'vip',vipid: res.data.id,cardName: data.cardName })
}
}else{ }else{
sheep.$helper.toast(res.msg); sheep.$helper.toast(res.msg);
} }
@ -178,7 +184,12 @@
height: 200px; height: 200px;
// background: rgba(57, 55, 54); // background: rgba(57, 55, 54);
position: relative; position: relative;
.vipLv{
position:absolute;
bottom: 93px;
right: 10%;
color: #8a745c;
}
.img { .img {
width: 100%; width: 100%;
height: 100%; height: 100%;

View File

@ -1,12 +1,26 @@
<!-- 我的积分 --> <!-- 我的积分 -->
<template> <template>
<s-layout class="wallet-wrap" title="我的积分" navbar="inner"> <s-layout class="wallet-wrap" title="我的积分" navbar="inner" :bgStyle="{ backgroundColor: '#fff'}">
<view class="header-box ss-flex ss-flex-col ss-row-center ss-col-center" :style="[ <view class="header-box ss-flex ss-flex-col ss-row-center ss-col-center" :style="[
{ {
marginTop: '-' + Number(statusBarHeight + 88) + 'rpx', marginTop: '-' + Number(statusBarHeight + 88) + 'rpx',
paddingTop: Number(statusBarHeight + 88) + 'rpx', paddingTop: Number(statusBarHeight + 88) + 'rpx',
}, },
]"> ]">
<view class="filter-box ss-p-x-30 ss-flex ss-col-center ss-row-between" :style="[{top: Number(statusBarHeight + 88) + 'rpx'}]" v-if="state.isShow == 1">
<uni-datetime-picker v-model="state.date" type="daterange" @change="onChangeTime" :end="state.today">
<button class="ss-reset-button date-btn">
<text>{{ dateFilterText }}</text>
<text class="cicon-drop-down ss-seldate-icon"></text>
</button>
</uni-datetime-picker>
<!-- TODO 芋艿优化 -->
<!-- <view class="total-box">-->
<!-- <view class="ss-m-b-10">总收入{{ state.pagination.income }}</view>-->
<!-- <view>总支出{{ -state.pagination.expense }}</view>-->
<!-- </view>-->
</view>
<view class="header-bg"> <view class="header-bg">
<view class="bg" /> <view class="bg" />
</view> </view>
@ -56,20 +70,7 @@
<!-- tab --> <!-- tab -->
<!-- <su-sticky :customNavHeight="sys_navBar"> --> <!-- <su-sticky :customNavHeight="sys_navBar"> -->
<!-- 统计 --> <!-- 统计 -->
<view class="filter-box ss-p-x-30 ss-flex ss-col-center ss-row-between" v-if="state.isShow == 1">
<uni-datetime-picker v-model="state.date" type="daterange" @change="onChangeTime" :end="state.today">
<button class="ss-reset-button date-btn">
<text>{{ dateFilterText }}</text>
<text class="cicon-drop-down ss-seldate-icon"></text>
</button>
</uni-datetime-picker>
<!-- TODO 芋艿优化 -->
<!-- <view class="total-box">-->
<!-- <view class="ss-m-b-10">总收入{{ state.pagination.income }}</view>-->
<!-- <view>总支出{{ -state.pagination.expense }}</view>-->
<!-- </view>-->
</view>
<!-- <su-tabs :list="tabMaps" @change="onChange" :scrollable="false" :current="state.currentTab"></su-tabs> --> <!-- <su-tabs :list="tabMaps" @change="onChange" :scrollable="false" :current="state.currentTab"></su-tabs> -->
<!-- </su-sticky> --> <!-- </su-sticky> -->
<!-- icon --> <!-- icon -->
@ -247,9 +248,9 @@
} }
.c { .c {
font-size: 18px; font-size: 15px;
color: rgba(198, 179, 114); color: rgba(198, 179, 114);
width: 50%; width: 40%;
font-weight: 700; font-weight: 700;
line-height: 26px; line-height: 26px;
} }
@ -270,7 +271,7 @@
background-size: 750rpx 100%; background-size: 750rpx 100%;
padding: 0 0 0 0; padding: 0 0 0 0;
box-sizing: border-box; box-sizing: border-box;
position:relative;
.new-tab { .new-tab {
width: 100%; width: 100%;
display: flex; display: flex;
@ -282,7 +283,7 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
width: 45%; width: 45%;
padding: 13px 0; padding: 9px 0;
background: rgba(247, 247, 247); background: rgba(247, 247, 247);
border-radius: 10px 0 0 0; border-radius: 10px 0 0 0;
@ -292,8 +293,8 @@
.img, .img,
.img2 { .img2 {
width: 25px; width: 20px;
height: 25px; height: 20px;
margin-right: 5px; margin-right: 5px;
} }
@ -314,8 +315,9 @@
} }
.tx { .tx {
font-size: 18px; font-size: 16px;
font-weight: 700; font-weight: 700;
color:rgba(187,187,187);
} }
} }
@ -377,7 +379,8 @@
height: 114rpx; height: 114rpx;
background-color: $bg-page; background-color: $bg-page;
background: rgb(193, 145, 81); background: rgb(193, 145, 81);
position:absolute;
left:-20px;
.total-box { .total-box {
font-size: 24rpx; font-size: 24rpx;
font-weight: 500; font-weight: 500;
@ -385,13 +388,13 @@
} }
.date-btn { .date-btn {
background-color: $white; background-color: rgb(254, 242, 219);
line-height: 54rpx; line-height: 54rpx;
border-radius: 27rpx; border-radius:0 27rpx 27rpx 0;
padding: 0 20rpx; padding: 0 20rpx;
font-size: 24rpx; font-size: 24rpx;
font-weight: 500; font-weight: 500;
color: $dark-6; color: rgba(137,118,76);
.ss-seldate-icon { .ss-seldate-icon {
font-size: 50rpx; font-size: 50rpx;

View File

@ -69,7 +69,7 @@
sheep.$router.go('/pages/user/user_vip/list') sheep.$router.go('/pages/user/user_vip/list')
"> ">
<view class="new-button" v-if="userInfo.activate == 1">正在试用</view> <view class="new-button" v-if="userInfo.activate == 1">正在试用</view>
<view class="new-button" v-if="userInfo.activate == 2">开通</view> <view class="new-button" v-if="userInfo.activate == 2">立即查看</view>
<view class="new-button" v-if="userInfo.activate == 3">永久</view> <view class="new-button" v-if="userInfo.activate == 3">永久</view>
<view class="new-button" v-if="userInfo.activate == 0">立即开通</view> <view class="new-button" v-if="userInfo.activate == 0">立即开通</view>
<image class="seckill1" mode="aspectFit" <image class="seckill1" mode="aspectFit"