Files
jxc4_app_and_mini/src/pages/mine/index.vue
2025-11-28 10:19:58 +08:00

540 lines
15 KiB
Vue

<template>
<view class="shop-mine">
<!-- #ifdef APP-PLUS || APP -->
<!-- <wrap-version-update id="wxf3657c94aa01a3f0" btnBgColor="#66be4d" :auto="false" ref="wrapVersion" @check="handleCheck"></wrap-version-update> -->
<!-- #endif -->
<view class="mine-header">
<view class="avatar">
<img v-if="isLogin && selfInfo.avatar" class="avatar_img" :src="selfInfo.avatar" alt=""/>
<img v-else class="avatar_img" src="https://image.jxc4.com/image/9dc7d11b8e64049273dd1bc6ad938166.png?imageView2/1/w/120/h/120" alt=""/>
</view>
<view class="user-info">
<view class="info" v-if="isLogin">
<view>
<view class="nick-name" v-if="selfInfo.name!== undefined "> {{ selfInfo.name}}</view>
<!-- | hideMobile -->
<view class="mobile" v-if="selfInfo.mobile">{{ selfInfo.mobile}}</view>
</view>
<view v-if="selfInfo.userMembers" class="vip">
VIP{{ selfInfo.userMembers[0].memberTypeID }}
<span v-if="endAt">({{ endAt }}到期)</span>
</view>
</view>
<!-- #ifdef MP-WEIXIN || APP-PLUS -->
<button v-else class="btn-login" @click="login"> 立即登录/注册</button>
<!-- #endif -->
<!-- #ifdef MP-TOUTIAO -->
<button v-else class="btn-login" @tap="login" data-eventsync="true" > 立即登录/注册</button>
<!-- #endif -->
<!-- #ifdef MP-ALIPAY -->
<button v-else class="btn-login" open-type="getAuthorize" @getAuthorize="login" scope='phoneNumber'> 立即登录/注册</button>
<!-- #endif -->
<!-- #ifdef MP-KUAISHOU -->
<view v-else class="btn-login" @click="login">立即登录/注册</view>
<!-- #endif -->
</view>
</view>
<!-- 订单块 -->
<view v-if="isLogin && isShowShop" class="order-wall">
<!-- #ifndef APP || APP-PLUS -->
<left-right-cell>
<template #left>
<view class="left">
<view class="icon icon-order"></view>
<text>我的订单</text>
</view>
</template>
<template #right>
<!-- @click.native="goMyOrder('all')" -->
<text slot="" class="right" @click="goMyOrder('all')">查看全部订单</text>
</template>
</left-right-cell>
<!-- #endif -->
<!-- #ifdef APP || APP-PLUS -->
<left-right-cell @click.native="goMyOrder('all')">
<template #left>
<view class="left">
<view class="icon icon-order"></view>
<text>我的订单</text>
</view>
</template>
<template #right>
<text class="right">查看全部订单</text>
</template>
</left-right-cell>
<!-- #endif -->
<view class="order-status">
<badge class="status-item" :count="orderCount.waitCount">
<view class="status-item-wrapper" @click="goMyOrder('waitPay')">
<view class="icon icon-pay"></view>
<text class="text">待支付</text>
</view>
</badge>
<badge class="status-item" :count="orderCount.deliverCount">
<view class="status-item-wrapper" @click="goMyOrder('waitReceive')">
<view class="icon icon-waitreceiving"></view>
<text class="text">待收货</text>
</view>
</badge>
<badge class="status-item" :count="0">
<view class="status-item-wrapper" @click="goMyOrder('waitComment')">
<view class="icon icon-waitcomment"></view>
<text class="text">待评价</text>
</view>
</badge>
<badge class="status-item" :count="0">
<view class="status-item-wrapper" @click="goAfterSales">
<view class="icon icon-aftersale"></view>
<text class="text">售后/退款</text>
</view>
</badge>
</view>
</view>
<!-- 订单块 -->
<!-- 我的地址 -->
<!-- && isShowShop -->
<view class="my-cell mt20" @click="goAddressManager" v-if="isLogin && isShowShop">
<left-right-cell>
<template #left>
<view class="left">
<view class="icon icon-address"></view>
<view>我的地址</view>
</view>
</template>
</left-right-cell>
</view>
<!-- 我的地址 -->
<!-- #ifdef MP-WEIXIN || MP-ALIPAY -->
<!-- 会员中心 -->
<!-- && isShowShop -->
<view class="my-cell mt20" @click="goVip" v-if="isLogin">
<left-right-cell>
<template #left>
<view class="left">
<view class="icon-wsx icon-vip"></view>
<view>会员中心</view>
</view>
</template>
</left-right-cell>
</view>
<!-- 会员中心 -->
<!-- #endif -->
<!-- 联系客服 -->
<view class="my-cell service" @click="contactService">
<left-right-cell>
<template #left>
<view class="left">
<view class="icon icon-service"></view>
<view>联系客服</view>
</view>
</template>
</left-right-cell>
</view>
<!-- 联系客服 -->
<!-- #ifndef MP-KUAISHOU || MP-ALIPAY -->
<!-- 我的推广码 -->
<view class="my-cell promopte" @click="goPromote" v-if="isBindMobile && iosOrAndroid.platform!=='ios'">
<left-right-cell>
<template #left>
<view class="left">
<view class="icon icon-mypromote"></view>
<view>我的推广码</view>
</view>
</template>
</left-right-cell>
</view>
<!-- 我的推广码 -->
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<!-- 下载app -->
<!-- <div class="my-cell promopte" @click="downloadAPP">
<left-right-cell :noClick="true">
<div slot="left" class="left">
<div class="icon icon-downloadApp"></div>
<div>点击下载APP</div>
</div>
</left-right-cell>
</div> -->
<!-- 下载app -->
<!-- #endif -->
<!-- #ifdef APP-PLUS || APP -->
<view style="border-top: 1rpx solid #E4E7ED;" @click="updateAPP">
<!-- <left-right-cell>
<template #left>
<div class="left">
<div class="icon icon-checkUpdate"></div>
<div>检查更新</div>
</div>
</template>
<template #right>
<div class="right" >
<div class="rightImgBox" v-if="versionText!=='当前版本号'">
<img src="https://image.jxc4.com/image/229a8908c77ce7b489713ba4fdd6b996.png" alt="" clss="right-img" >
</div>
<div >
<span :style="{color:versionText=='当前版本号'?'':'red'}">{{version}}</span>
</div>
</div>
</template>
</left-right-cell> -->
<view style="display:flex;" class="checkUpdate">
<view class="left">
<view class="icon icon-checkUpdate"></view>
<view>检查更新</view>
</view>
<view class="right" >
<view class="rightImgBox" v-if="versionText!=='当前版本号'">
<img src="https://image.jxc4.com/image/229a8908c77ce7b489713ba4fdd6b996.png" alt="" clss="right-img" >
</view>
<view>
<span :style="{color:versionText=='当前版本号'?'':'red'}">{{version}}</span>
</view>
</view>
</view>
</view>
<!-- #endif -->
<!-- 退出登录 -->
<view class="login-out mt20" @click="handleLogout" v-if="isLogin">退出登录</view>
<!-- 退出登录 -->
<!-- loading -->
<zy-loading></zy-loading>
</view>
</template>
<script>
import reComputedCarCount from "@/mixins/reComputedCarCount.js";
import LeftRightCell from "@/components/layout/left-right-cell.vue";
import { mapGetters } from "vuex";
import Badge from "@/components/badge/badge.vue";
import { modal, errToast,jumpPage,setTabBarBadge } from "@/utils/uniapi.js";
import ZyLoading from "@/components/Loading/loading";
import { timeFormat3 } from '@/utils'
import {store} from '@/store'
import orderPage from '@/apis/orderPage';
import loginAPI from '@/apis/login'
export default {
name: "ShopMine",
mixins: [reComputedCarCount],
components: {
LeftRightCell,
Badge,
ZyLoading
},
data() {
return {
orderCount: {
waitCount: 0,
deliverCount: 0,
},
endAt: '',
version: '1.0.0',
versionText: "当前版本号",
isChech: true,
};
},
computed: {
...mapGetters({
selfInfo: "login/selfInfo",
isLogin: "login/isLogin",
isBindMobile: "login/isBindMobile",
isMaterial: "indexPage/isMaterial",
isShowShop: 'isShowShop',
iosOrAndroid: "iosOrAndroid",
tmpData:'login/tmpData',
carCount:"cartPage/carCount"
})
},
watch: {
carCount: {
handler(val) {
if(val) setTabBarBadge('set',val)
},
immediate:true
}
},
created() {
if (this.selfInfo.userMembers) {
this.endAt = timeFormat3(this.selfInfo.userMembers[0].endAt)
}
uni.showTabBar() // 显示tabbar
// #ifdef APP-PLUS || APP
// this.getUpdate()
// #endif
},
async onShow() {
try {
// await this.globalLogin()
this.showLoad();
if (this.isLogin) {
await this.handleGetOrderCount();
}
// if (this.isMaterial) {
// await getMatterStoreOrderStatus();
// }
if(this.carCount) setTabBarBadge('set',this.carCount)
} catch (e) {
console.error(e);
errToast(e);
} finally {
uni.showTabBar() // 显示tabbar
this.hideLoad();
}
},
async onPullDownRefresh() {
console.log("下拉刷新");
// uni.stopPullDownRefresh()
try {
this.showLoad();
if (this.isLogin) {
// 1.个人信息
let selfInfo = await loginAPI.getSelfInfo() // 获取用户信息
store.commit('login/saveSelfInfo', selfInfo)
// 请求订单数量
await this.handleGetOrderCount();
}
} catch (e) {
console.error(e);
errToast(e);
} finally {
uni.stopPullDownRefresh();
this.hideLoad();
}
},
filters: {
hideMobile(mobile) {
return mobile
? mobile.split("").map((item, index) => {
if (index >= 3 && index <= 6) return "*";
else return item;
}).join("")
: "";
},
},
methods: {
// 登录
async login() {
let that = this
// #ifdef MP-WEIXIN
let obj = {
avatarUrl: 'https://image.jxc4.com/image/9dc7d11b8e64049273dd1bc6ad938166.png',
nickName:String(new Date().getTime()).substring(0, 11) // 模拟手机号
}
uni.setStorageSync('aldstat_user_info', obj)
await this.globalLogin()
if (JSON.stringify(this.tmpData) !== '{}') jumpPage('navigateTo', `/pagesAuth/auth-index/index?type=weixinmini`)
// let obj = {
// avatarUrl: 'https://image.jxc4.com/image/9dc7d11b8e64049273dd1bc6ad938166.png',
// nickName:String(new Date().getTime()).substring(0, 11) // 模拟手机号
// }
// uni.setStorageSync('aldstat_user_info', obj)
// jumpPage('navigateTo', `/pagesAuth/auth-index/index?type=weixinmini`)
// #endif
// #ifdef MP-TOUTIAO
// 有手机号权限时的操作
// uni.getUserProfile({
// success(res) {
// uni.setStorageSync('aldstat_user_info',res.userInfo)
// uni.login({
// force: true,
// success(r) {
// jumpPage("navigateTo",`/pagesAuth/auth-index/index?ttCode=${r.code}`)
// }
// });
// },
// fail(err) {
// console.log("getUserProfile 调用失败", err);
// uni.login({
// force: true,
// success(r) {
// jumpPage("navigateTo",`/pagesAuth/auth-index/index?ttCode=${r.code}`)
// },
// });
// },
// });
// 无手机号权限时
tt.getUserProfile({
async complete(res) {
if (res.errMsg === "getUserProfile:ok") uni.setStorageSync('aldstat_user_info', res.userInfo)
await that.globalLogin()
if(JSON.stringify(that.tmpData) !== '{}') await store.dispatch('login/analyzePhone')
jumpPage('switchTab','/pages/index/index') // 跳转
}
})
// #endif
// #ifdef MP-KUAISHOU
ks.getUserInfo({
complete(res) {
if(res.userInfo) uni.setStorageSync('aldstat_user_info',res.userInfo)
uni.login({
success(r) {
jumpPage('navigateTo',`/pagesAuth/auth-index/index?type=ksMini&ksCode=${r.code}`)
},
})
}
});
// #endif
// #ifdef APP-PLUS || APP
jumpPage('navigateTo',`/pagesAuth/auth-index/index?type=wxApp`)
// #endif
// #ifdef MP-ALIPAY
my.getPhoneNumber({
success: async (res) => {
let encryptedData = JSON.parse(res.response);
await that.globalLogin()
if (JSON.stringify(this.tmpData) !== '{}') await store.dispatch('login/analyzePhone', encryptedData.response)
},
fail: (res) => {
console.log("获取失败", res);
},
})
// #endif
},
// 获取订单数量
async handleGetOrderCount() {
try {
this.orderCount = await orderPage.getOrderCount();
} catch (e) {
throw e;
}
},
// 退出登录
async handleLogout() {
let res = await modal(
"确定退出?",
"退出登录后将无法查看订单,重新登录即可查看"
);
if (res) {
uni.clearStorageSync() // 清除缓存
store.commit("cartPage/saveCartList",[]) // 清除本地购物车
store.commit("login/changeLoginStatus",false) // 改变登录状态
store.commit("indexPage/saveMaterialInfo",{}) // 清除物料信息
store.commit('indexPage/savePromote','') // 推广码
store.commit('indexPage/saveQueryStoreID', '') // 清除扫码进入的参数
await store.dispatch('indexPage/getBrandInfo',{brandID:1}) // 将品牌更改为1
setTabBarBadge('',0)
}
},
// 下载app
// downloadAPP() {
// wx.showModal({
// title: "提示",
// content: "点击确认复制地址到浏览器直接下载",
// showCancel: false,
// success() {
// copyData("http://www.jxc4.com/jxc4app/app.apk");
// },
// });
// },
// #ifdef APP-PLUS || APP
updateAPP() {
console.log('this.$refs',this.$refs.wrapVersion)
return
this.$refs.wrapVersion.check()
if (!this.isChech) {
uni.showToast({
title: "当前版本为最新版",
icon: "none",
position: "bottom",
});
}
},
handleCheck(res) {
if (this.iosOrAndroid) {
let info = this.iosOrAndroid
let version = Number(res.version.split('.').join(''))
let appWgtVersion = Number(info.appWgtVersion.split('.').join(''))
if (version > appWgtVersion) {
this.version = res.version;
this.versionText = "发现新版本";
this.isChech = true;
} else {
this.version = info.appWgtVersion;
this.versionText = "当前版本号";
this.isChech = false;
}
} else {
let that = this
uni.getSystemInfo({
success: info => {
store.commit('setIosOrAndroid', info)
that.handleCheck(res)
}
})
}
},
// #endif
//联系客服
contactService() {
uni.makePhoneCall({
phoneNumber: "18048531223", //石老板电话
});
},
// 跳转到所有订单
goMyOrder(name) {
jumpPage('navigateTo',`/pagesOrders/my-order/index?name=${name}`)
},
// 跳转到售后/退款
goAfterSales() {
jumpPage('navigateTo',`/pagesOrders/my-afsorder/index`)
},
// 跳转到地址管理页面
goAddressManager() {
jumpPage('navigateTo',`/pagesAddress/mine-address/index?isManager=true`)
},
//会员中心
goVip() {
jumpPage('navigateTo','/pagesMine/vip/index')
},
// 跳转到我的推广码
goPromote() {
jumpPage('navigateTo',"/pagesMine/my-promote/index")
}
}
};
</script>
<style lang="scss">
@import "./mine.scss";
page {
background: #f4f4f4;
}
</style>