|
|
- <template>
- <view class="personal-index">
- <view class="personal-base-info">
- <view style="width: 100%;height: 140px; margin-top: 10px;">
- <view style="width: 100%;text-align: center;" @click="openOtherPage('userInfo')">
- <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/avatar_1.png"
- style="width: 66px; height: 66px;" mode="widthFix"></img>
- </view>
- <!-- <view style="width: 100%;text-align: center;">
- <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/cmdf_text.png"style="width:55px;height: 16px;" mode="widthFix"></img>
- </view>
- -->
- <view class="personal-user">
- <view class="personal-user-level">
- {{userLevel}}
- </view>
- <view class="personal-user-name" @click="openOtherPage('userInfo')">
- {{userName}}
- </view>
- <view style="width: 62px;margin-left: 15px;"> </view>
- </view>
- </view>
- <view style="padding: 0 15px; width: 100%;">
- <view class="personal-progress" @click="openOtherPage('member')">
- <view class="progress-text">
- {{consumption}}
- <!-- 累计消费{{spent}}元({{startDate}}起至今) -->
- </view>
- <view class="progress">
- <view class="progress-box">
- <progress :percent="process" activeColor="#FFAA48" backgroundColor="#ffffff" border-radius="28px" stroke-width="5" />
- </view>
- </view>
- <view class="progress-text" v-if="userLevel!='金卡会员'">
- 到{{promotionDate}}前
- <text style="font-weight: bold;font-size: 14px;">
- 再消费{{amountNeeded}}元
- </text>即可升级至
- <text style="font-weight: bold;font-size: 14px;">{{nextLevel}}</text>
- </view>
- </view>
- </view>
- <view class="personal-stat">
- <view class="personal-stat-box">
- <view class="personal-stat-box-left" @click="openOtherPage('point')">
- <view class="personal-stat-box-label">
- 积分
- </view>
- <view class="personal-stat-box-value">
- {{point}}
- </view>
- </view>
- <view class="personal-stat-box-right">
- <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/point.png" alt="point" class="personal-stat-box-img" mode="widthFix"/>
- </view>
- <view class="personal-stat-box-bottom">
- 查看历史明细
- </view>
- </view>
- <view class="personal-stat-box" @click="openOtherPage('collect')">
- <view class="personal-stat-box-left">
- <view class="personal-stat-box-label">
- 集点
- </view>
- <view class="personal-stat-box-value">
- {{collect}}
- </view>
- </view>
- <view class="personal-stat-box-right">
- <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/collect.png" alt="collect" class="personal-stat-box-img" mode="widthFix"/>
- </view>
- <view class="personal-stat-box-bottom">
- 下单获得好礼
- </view>
-
- </view>
- <view class="personal-stat-box" @click="openOtherPage('coupon')">
- <view class="personal-stat-box-left">
- <view class="personal-stat-box-label">
- 卡券
- </view>
- <view class="personal-stat-box-value">
- {{coupon}}
- </view>
- </view>
- <view class="personal-stat-box-right">
- <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/coupon.png" alt="coupon" class="personal-stat-box-img" mode="widthFix"/>
- </view>
- <view class="personal-stat-box-bottom">
- 我的卡券数量
- </view>
- </view>
- </view>
- <view class="personal-order">
- <uni-card margin="0 15px 10px" :is-shadow="false">
- <view class="personal-order-title" slot="title">
- <view class="personal-order-title-text">
- 订单状态
- </view>
- <view class="personal-order-title-link" @click="openOtherPage('order')">
- 全部订单 <uni-icons type="right" size="14px" color="#AAA"></uni-icons>
- </view>
- </view>
- <view v-if="isMember">
- <view style="padding-bottom: 10px;">
- <view style="color: #AAA;
- font-size: 14px;
- text-align: center;
- margin-bottom: 10px;">
- 当前订单
- </view>
- <uni-steps :options="orderStatus" active-icon="checkbox" :active="active" active-color='#ffaa48'
- />
- <view class="uni-steps-btns">
- <u-button
- type="primary"
- shape="circle"
- color="#FFAA48"
- text="查看图片"
- @click="handleStepClick"></u-button>
- </view>
- </view>
- <view class="personal-order-footer" slot="actions">
- <view class="personal-order-footer-text">
- {{service}}
- <view style="color: #AAA;font-size: 12px;"> (本次服务共{{days}}天) </view>
- </view>
- <view class="personal-order-footer-text">
- ¥{{amount}}
- </view>
- </view>
- </view>
- <view v-else class="personal-order-login-btn" >
- <u-button type="primary"
- open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber"
- shape="circle" :plain="true"
- :hairline="true" color="#FFAA48"
- text="登录后方可预约"
- @click="toRegister"></u-button>
- </view>
-
- </uni-card>
- </view>
- <view class="personal-functions">
- <uni-card margin="0 15px 10px" :is-shadow="false">
- <view class="personal-function-title" slot="title">
- <view class="personal-function-title-text">
- 常用功能
- </view>
- </view>
- <view class="personal-functions-content">
- <view v-for="(item,index) in functions" :key="index" class="personal-function" @click="openOtherPage(item.path)">
- <img :src="item.icon" alt="item.label" style="width: 30px; height: 30px;" mode="widthFix" />
- <view class="personal-function-name">{{item.label}}</view>
- </view>
- </view>
- </uni-card>
- </view>
- </view>
-
- </view>
- </template>
-
- <script>
- import {getOpenId,getPhoneNumber} from "@/api/system/user.js"
- import { setToken,getToken,getOpenIdKey,setOpenIdKey } from '@/utils/auth'
- import {getPersonalInfo} from "@/api/system/personal.js"
- export default{
- data(){
- return{
- userName:'',
- userLevel:'',
- process:0,
- spent:0,
- cost:0,
- consumption:'',
- promotion:'',
- point:0,
- collect:'0/10',
- coupon:0,
- active: 0,
- isMember:false,
- orderStatus: [{
- activeImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/sentedOrder.png',
- deactiveImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/sentOrder.png',
- title: '待派单'
- }, {
- activeImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/ordered.png',
- deactiveImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/order.png',
- title: '已派单'
- }, {
- activeImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/serviced.png',
- deactiveImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/service.png',
- title: '服务中'
- }, {
- activeImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/overed.png',
- deactiveImg:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/over.png',
- title: '已完成'
- }],
- service:'专业喂养',
- days:0,
- amount:0,
- promotionDate:'2025年01月01日',
- nextLevel:'普卡会员',
- amountNeeded:'0',
- functions:[
- {
- icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/pet.png',
- label: '宠物档案',
- path:'pet'
- },
- {
- icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/serviceFile.png',
- label: '服务档案',
- path:'service'
- },
- {
- icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/address.png',
- label: '地址电话',
- path:'address'
- },
- {
- icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/lock.png',
- label: '门锁信息',
- path:'lock'
- },
- {
- icon:'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/index/lock.png',
- label: '任务中心',
- path:'taskList'
- },
- ]
- }
-
- },
- onShow() {
- if (!getToken() || !getOpenIdKey()) {
- this.login()
- } else{
- this.getPersonalInfo()
- // this.initVisitor()
- }
- },
- methods: {
- onGetPhoneNumber(e){
- if(e.detail.errMsg=="getPhoneNumber:fail user deny"){ //用户拒绝授权
-
- //拒绝授权后弹出一些提示
-
- }else{ //允许授权
- if(getOpenIdKey()){
- this.getPhoneNumber({"openId":getOpenIdKey(),"code":e.detail.code})
- }
-
- // debugger
- // console.log(e.detail.encryptedData)
- // e.detail.encryptedData //加密的用户信息
- // e.detail.iv //加密算法的初始向量 时要用到
- }
- },
- getPhoneNumber(data){
- getPhoneNumber(data).then(res=>{
- if(res&&res.code==200){
- let token = res.data.token
- setToken(token)
- this.isMember=true
- } else{
- uni.showToast({
- icon:'error',
- title:'获取手机号失败'
- })
- }
- })
- },
- login() {
- uni.login({
- provider: 'weixin',
- success: (loginRes) => {
- this.getOpenId(loginRes.code)
- },
- fail: function(error) {
- // 授权失败处理
- uni.showToast('授权失败,请授权后再试')
- }
- });
- },
- getOpenId(code) {
- getOpenId(code).then(res => {
- if (res.code == 200 && res.data) {
- let resData = JSON.parse(res.data)
- let token = resData.token;
- let openId = resData.openId;
- setOpenIdKey(openId)
- if(token){
- setToken(token)
- this.getPersonalInfo()
- }else{
- this.initVisitor()
- }
-
- }
- })
- },
- getPersonalInfo(){
- this.isMember=true
- getPersonalInfo().then(res=>{
- if(res&&(res.id || res.id === 0)){
- this.userLevel=res.level
- this.userName=res.nickname
- this.consumption=res.consumption
- this.promotion=res.promotion
- this.process=res.process*100
- this.point=res.integral
- this.collect=`${res.centralPoint}/10`
- this.coupon=res.coupon
- this.promotionDate=res.promotionDate
- this.nextLevel=res.nextLevel
- this.amountNeeded=res.amountNeeded
- if(res.h5OrderVO){
- let orderInfo= res.h5OrderVO
- if(orderInfo.status) {
- if(orderInfo.status==1){
- this.active = 0
- }else if(orderInfo.status==2){
- let date = new Date();
- let currentDate = `${date.getFullYear()}-${("0" + (date.getMonth() + 1)).slice(-2)}-${("0" + date.getDate()).slice(-2)}`;
- let serviceDate= orderInfo.orderServiceList[0]?.serviceDate
- if(serviceDate.indexOf(currentDate)>-1){
- this.active=2
- }else{
- this.active=1
- }
- }else if(orderInfo.status==3){
- this.active = 3
- }
- this.setOrderInfo(orderInfo)
- }else{
- this.active = 0
- this.amount=0
- this.service='专业喂养'
- this.days=0
- }
- }
- }
- console.log(res)
- })
- },
- initVisitor(){
- let currentYear = new Date().getFullYear()
- this.userLevel='游客'
- this.userName='游客'
- this.consumption=`累计消费 0 元( ${currentYear}-01-01起至今)`
- this.promotion='注册后即可享受会员权益'
- this.process=0
- this.point=0
- this.collect=`0/10`
- this.coupon=0
- this.active = 0
- this.amount=0
- this.service='专业喂养'
- this.days=0
- },
- setOrderInfo(orderInfo){
- this.amount=orderInfo.totalAmount
- this.service=orderInfo.orderItemList[0]?.productName
- let serviceDate= orderInfo.orderServiceList[0]?.serviceDate
- this.days = JSON.parse(serviceDate).length
- },
- toRegister(){
- this.$modal.showToast('敬请期待');
- },
- handleStepClick(orderInfo = {}) {
- // if(!this.isMember){
- // this.$modal.showToast('暂未匹配到您的会员信息,请先注册成为会员!');
- // return;
- // }
-
- // 如果点击的是服务中状态(索引为2)且当前订单状态也是服务中
- // if (e.index === 2 && this.active === 2) {
- // 跳转到订单详情页面
- uni.navigateTo({
- url: `/pages/personalCenter/orderDetailImage?orderId=${orderInfo.id}`
- });
- // }
- },
- openOtherPage(type){
- if(!this.isMember){
- this.$modal.showToast('暂未匹配到您的会员信息,请先注册成为会员!');
- return;
- }
- switch(type){
- case 'member':{
- // this.$modal.showToast('页面开发中');
- uni.navigateTo({
- url: `/pages/personalCenter/member`
- });
- break;
- }
- case 'point':{
- uni.navigateTo({
- url: `/pages/personalCenter/point`
- });
- break;
- }
- case 'collect':{
- uni.navigateTo({
- url: `/pages/personalCenter/collect`
- });
- break;
- }
- case 'coupon':{
- // uni.showToast({
- // title: '敬请期待',
- // duration: 3000,
- // icon:"none"
- // })
- // this.$modal.showToast('敬请期待');
- uni.navigateTo({
- url: `/pages/personalCenter/coupon`
- });
- break;
- }
- case 'order':{
- uni.navigateTo({
- // url: `/pages/details/order`
- url: `/pages_order/order/orderList`
- });
- break;
- }
- case 'pet':{
- uni.navigateTo({
- url: `/pages/personalCenter/pet`
- });
- break;
- }
- case 'lock':{
- uni.navigateTo({
- url: `/pages/personalCenter/lock`
- });
- break;
- }
- case 'service':{
- uni.navigateTo({
- url: `/pages/personalCenter/service`
- });
- break;
- }
- case 'address':{
- uni.navigateTo({
- url: `/pages/personalCenter/address`
- });
- break;
- }
- case 'taskList':{
- uni.navigateTo({
- url: `/pages_order/task/taskList`
- });
- break;
- }
- case 'userInfo':{
- uni.navigateTo({
- url: `/pages/personalCenter/userInfo`
- });
- break;
- }
- default:this.$modal.showToast('页面开发中');
- }
-
- }
- }
- }
- </script>
-
- <style lang="scss">
- .personal-index{
- .personal-base-info{
- display: flex;
- justify-content: center;
- flex-wrap: wrap;
- align-content:flex-start;
- width: 100%;
- height: 200px;
- flex-shrink: 0;
- background: linear-gradient(0deg, #F5F5F7 0%, #FFBF60 99.41%);
- .personal-user{
- display: flex;
- justify-content: center;
- align-items: center;
- margin-top: 10px;
- .personal-user-name{
- text-align: center;
- color: #111;
-
- font-size: 20px;
- font-style: normal;
- font-weight: blod;
- height: 28px;
- }
- .personal-user-level{
- width: 62px;
- height: 22px;
- line-height: 22px;
- background-color: #ffaa48;
- color: #FFF;
- text-align: center;
-
- font-size: 12px;
- font-style: normal;
- font-weight: 500;
- border-radius: 20px;
- border: #FFF solid 1.5px;
- margin-right: 15px;
- }
- }
- .personal-progress{
- width: 100%;
- height: 80px;
- flex-shrink: 0;
- border-radius: 8px;
- border: 1.5px solid #FFF;
- padding: 10px;
- background: linear-gradient(107deg, #FFE0BF 8.09%, #FFECD7 21.18%, #FFF4E8 32.78%, #FFEFDE 44.88%, #FEEEDB 57.48%);
- .progress-text{
- color: #B78B43;
- text-align: center;
-
- font-size: 12px;
- font-style: normal;
- font-weight: 400;
- line-height: 20px;
- }
- .progress{
- margin: 5px 0;
- }
- }
- }
- .personal-stat{
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px 15px;
- .personal-stat-box{
- width: 30%;
- height: 90px;
- flex-shrink: 0;
- border-radius: 8px;
- background: #FFF;
- display: flex;
- flex-wrap: wrap;
- padding: 10px;
- .personal-stat-box-right{
- width: 50%;
- height: 45px;
- text-align: right;
- .personal-stat-box-img{
- width: 34px;
- height: 34px;
- }
- }
-
- .personal-stat-box-left{
- width: 50%;
- height: 45px;
- display:flex;
- flex-flow: column; //垂直排列
- justify-content: space-between;//两端对齐
- .personal-stat-box-label{
- color: #111;
-
- font-size: 14px;
- font-style: normal;
- font-weight: 400;
- line-height: 16px;
- }
- .personal-stat-box-value{
- color: #333;
-
- font-size: 16px;
- font-style: normal;
- font-weight: 500;
- line-height: 14px;
- }
-
- }
- .personal-stat-box-bottom{
- width: 100%;
- color: #AAA;
-
- font-size: 12px;
- font-style: normal;
- font-weight: 400;
- line-height: normal;
- display: flex;
- align-items: flex-end;
- }
- }
- }
-
- .uni-steps-btns{
- display: flex;
- justify-content: center;
- .u-button{
- width: 160rpx;
- height: 55rpx;
- margin-right: 155rpx;
- .u-button__text{
- font-size: 22rpx !important;
- }
- }
- }
- .personal-order{
- width: 100%;
- .personal-order-title{
- width: 100%;
- display: flex;
- justify-content: space-between;
- align-items: center;
- border-bottom: 1px solid #efefef;
- height: 36px;
- .personal-order-title-text{
- color: #333;
- font-size: 15px;
- font-style: normal;
- font-weight: 500;
- line-height: 16px;
- }
- .personal-order-title-link{
- color: #AAA;
- font-size: 13px;
- font-style: normal;
- font-weight: 400;
- line-height: 16px;
- }
-
- }
- .personal-order-footer{
- width: 100%;
- display: flex;
- justify-content: space-between;
- align-items: center;
- border-top: 1px solid #efefef;
- padding-top: 10px;
- .personal-order-footer-text{
- display: flex;
- color: #333;
- font-size: 13px;
- font-style: normal;
- font-weight: 400;
- line-height: normal;
- }
- }
- .personal-order-login-btn{
- height: 100px;
- display: flex;
- justify-content: center;
- align-items: center;
-
- }
- }
-
- }
- .personal-functions{
- width: 100%;
- .personal-function-title{
- width: 100%;
- display: flex;
- justify-content: space-between;
- align-items: center;
- border-bottom: 1px solid #efefef;
- height: 36px;
- .personal-function-title-text{
- color: #333;
- font-size: 15px;
- font-style: normal;
- font-weight: 500;
- line-height: 16px;
- }
-
- }
- .personal-functions-content{
- width: 100%;
- display: flex;
- justify-content: space-between;
- align-items: center;
- flex-wrap: wrap;
- gap: 30rpx 0;
- .personal-function{
- width: 24%;
- display: flex;
- justify-content: center;
- flex-wrap: wrap;
- .personal-function-name{
- color: #333;
- font-size: 14px;
- font-style: normal;
- font-weight: 400;
- line-height: normal;
- margin-top: 5px;
- }
- }
- }
- }
- </style>
|