Files
tcwm-uniapp-shop/pages/index/index.vue
2024-06-06 11:49:50 +08:00

771 lines
20 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view style="padding-bottom: 80upx;">
<view class=" u-flex padding-lr bg padding-top">
<view class="u-m-r-10">
<image :src="avatar" style="width: 100rpx;height: 100rpx;border-radius: 100rpx;"
@click="goNav('/my/store/index')"></image>
</view>
<view class="u-flex-1 u-m-l-10" v-if="!isLogin">
<view class="u-font-18 text-bold">
<view class="margin-left-sm margin-top-xs">
<view class="flex align-end">{{userName}}
<view class="margin-left-sm" v-if="shop" @click="changePutaWayFlag">
<image
:src="shop.putawayFlag==0?'../../static/images/index/shangban.png':'../../static/images/index/dayang.png'"
style="width: 30rpx;height: 30rpx;"></image>
</view>
<!-- <view>
<image src="../../static/images/index/dayang.png" style="width: 30rpx;height: 30rpx;"></image>
</view> -->
</view>
<!-- <text @click="changePutaWayFlag"
:style="shop.putawayFlag==0?'margin-left: 16upx;font-size: 28upx;color: #E10A07;':'margin-left: 16upx;font-size: 28upx;color: #999999;'"
v-if="shop">{{shop.putawayFlag==0?'上班中':'打烊啦'}}
</text> -->
</view>
</view>
</view>
<view v-else class="text-xl u-p-l-20 text-bold" @click="goLogin('/pages/my/loginphone')">
登录
</view>
</view>
<view class="flex align-center padding-left">
<image src="../../static/images/img/data.png" style="width: 26upx;height: 26upx;"></image>
<view class="margin-left-xs flex align-center" style="color: #999999;">
<view @click="bindData(1)">{{startTime?startTime:'开始时间'}}</view>
<view @click="bindData(2)">{{endTime?endTime:'结束时间'}}</view>
</view>
</view>
<view class="flex align-center box justify-between text-center">
<view @click="goNav('/my/other/cashList')">
<text class="text-bold text-xl">{{allMoney?allMoney:'0'}}</text>
<view>总收益</view>
</view>
<view class="">
<text class="text-bold text-xl">{{allCount?allCount:'0'}}</text>
<view>总销量</view>
</view>
<view @click="goNav('/my/store/pingjia')">
<text class="text-bold text-xl">{{countTakingByUserId?countTakingByUserId:'0'}}</text>
<view>用户评价</view>
</view>
<!-- <view class="">
<text class="text-bold text-xl">{{putaway+soldOut}}</text>
<view>用户发布</view>
</view> -->
</view>
<view class="padding">
<view class="text-bold text-lg margin-bottom-sm">订单数据</view>
<view class="orderbox ">
<view class="">
<text class="text-bold text-xl">{{orderMoney?orderMoney:'0'}}</text>
<view class="margin-top-xs">订单收入</view>
</view>
<view class="">
<text class="text-bold text-xl">{{sumCountOrder?sumCountOrder:'0'}}</text>
<view class="margin-top-xs">总订单数</view>
</view>
<view class="">
<text class="text-bold text-xl">{{refundMoney?refundMoney:'0'}}</text>
<view class="margin-top-xs">退款金额</view>
</view>
<view class="">
<text class="text-bold text-xl">{{countByUserId?countByUserId:'0'}}</text>
<view class="margin-top-xs">访客人数</view>
</view>
</view>
</view>
<view style="padding: 0upx 30upx;">
<view class="text-bold text-lg margin-bottom-sm flex justify-between">
<view>订单管理</view>
<view @click="goDetail(1)">
<text style="color: #666666;font-size: 26upx;margin-right: 10upx;">查看全部</text>
<image src="../../static/images/my/right.png" style="width: 12upx;height: 20upx;"></image>
</view>
</view>
<view class="orderbox ">
<!-- <view class="">
<text class="text-bold text-xl">{{i1}}</text>
<view class="margin-top-xs">待付款</view>
</view> -->
<view class="">
<text class="text-bold text-xl">{{i5}}</text>
<view class="margin-top-xs">待接单</view>
</view>
<view class="">
<text class="text-bold text-xl">{{i2}}</text>
<view class="margin-top-xs">制作中</view>
</view>
<view class="">
<text class="text-bold text-xl">{{i3}}</text>
<view class="margin-top-xs">待取餐</view>
</view>
<view class="">
<text class="text-bold text-xl">{{i4}}</text>
<view class="margin-top-xs">已完成</view>
</view>
</view>
</view>
<view class="padding">
<view class="text-bold text-lg margin-bottom-sm flex justify-between">
<view>我的商品</view>
<view @click="goDetail(2)">
<text style="color: #666666;font-size: 26upx;margin-right: 10upx;">查看全部</text>
<image src="../../static/images/my/right.png" style="width: 12upx;height: 20upx;"></image>
</view>
</view>
<view class="orderbox ">
<view class="">
<text class="text-bold text-xl">{{putawayCount}}</text>
<view class="margin-top-sm">上架中</view>
</view>
<view class="">
<text class="text-bold text-xl">{{soldoutCount}}</text>
<view class="margin-top-sm">已下架</view>
</view>
<view @click="bindFb()">
<image src="../../static/images/index/add.png" style="width: 46upx;height: 46upx;"></image>
<view class="margin-top-xs">添加商品</view>
</view>
</view>
</view>
<u-popup v-model="Authorization" mode="center" close-icon="close-circle" close-icon-pos="top-right"
close-icon-color="#8f9298" close-icon-size="50">
<view class="contentview">
<view class="title">隐私保护指引</view>
<view class="des" @click="openPrivacyContract">
在使用当前小程序服务之前请仔细阅读<text
style="color: #FF7F00;">{{privacyContractName}}</text>如你同意{{privacyContractName}}请点击同意开始使用
</view>
<view class="btns">
<button class="item reject" @click="exitMiniProgram">拒绝</button>
<button id="agree-btn" class="item agree" open-type="agreePrivacyAuthorization"
@agreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button>
</view>
</view>
</u-popup>
<!-- 开始时间 -->
<u-picker v-model="startshow" mode="time" :params="paramsStart" @confirm="startData"></u-picker>
<!-- 结束时间 -->
<u-picker v-model="endshow" mode="time" :params="paramsEnd" @confirm="endData"></u-picker>
</view>
</template>
<script>
export default {
data() {
return {
Authorization: false,
privacyContractName: '',
avatar: '../../static/logo.png',
isLogin: true,
userName: '匿名',
startshow: false,
endshow: false,
paramsStart: {
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false
},
paramsEnd: {
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false
},
startTime: '',
endTime: '',
allMoney: 0, //总收益
allCount: 0, //总销量
countTakingByUserId: 0, //用户评价数
orderMoney: 0, //订单收入
sumCountOrder: 0, //总订单数
refundMoney: 0, //退款金额
countByUserId: 0, //访客人数
i1: 0, //待付款
i2: 0, //制作中
i3: 0, //待取餐
i4: 0, //已完成
i5: 0, //商家待接单
putawayCount: 0, //上架中
soldoutCount: 0, //下架中
page: 1,
limit: 10,
longitude: '',
latitude: '',
userId: '',
shop: '',
arr:[],
errCount: 0
}
},
onLoad() {
this.userId = uni.getStorageSync('userId')
if (this.userId) {
this.getFb()
}
this.$Request.getT('/app/common/type/354').then(res => { //订单取消通知
if (res.code == 0) {
if (res.data && res.data.value) {
this.arr.push(res.data.value)
}
}
})
this.$Request.getT('/app/common/type/353').then(res => { //订单取消通知
if (res.code == 0) {
if (res.data && res.data.value) {
this.arr.push(res.data.value)
}
}
})
this.$Request.getT('/app/common/type/352').then(res => { //新订单通知
if (res.code == 0) {
if (res.data && res.data.value) {
this.arr.push(res.data.value)
}
}
})
// #ifdef MP-WEIXIN
try {
let that = this;
wx.getPrivacySetting({
success: res => {
console.log("是否需要授权:", res.needAuthorization, "隐私协议的名称为:", res.privacyContractName)
if (res.needAuthorization) {
that.privacyContractName = res.privacyContractName;
// this.$refs.popusAuthorization.open();
that.Authorization = true;
}
},
fail: () => {},
complete: () => {},
})
} catch (e) {
//TODO handle the exception
}
// #endif
},
onShow() {
this.userId = uni.getStorageSync('userId')
if (this.userId) {
this.isLogin = false
this.getUserInfo()
this.getFb()
// this.getTodayOrder()
this.getcity()
this.getShopInfo();
// #ifdef MP-WEIXIN
//订阅
if (!uni.getStorageSync('sendindexMsg')) {
this.openMsg();
}
// #endif
} else {
this.isLogin = true
// this.userName = '匿名'
this.avatar = '../../static/logo.png'
this.allMoney = 0 //总收益
this.putawayCount = 0 //上架中
this.soldoutCount = 0 //下架中
this.allCount = 0 //总销量
this.countTakingByUserId = 0 //用户评价
this.orderMoney = 0 //订单收入
this.sumCountOrder = 0 //总订单数
this.refundMoney = 0 //退款金额
this.countByUserId = 0 //访客人数
this.i1 = 0 //待付款
this.i3 = 0 //待取餐
this.i2 = 0 //制作中
this.i4 = 0 //已完成
this.i5 = 0 //商家待接单
}
let that = this
if (that.userId) {
setInterval(function() {
// 订单消息提醒
// newsSelect() {
let data = {
shopIds: that.$queue.getData("shopId")
}
that.$Request.post('/admin/ordermessage/selectReadFlagCount', data).then(res => {
if (res.code === 0) {
// that.errCount = res.data
if (res.data > 0) {
if (that.errCount != res.data) {
that.errCount = res.data
that.aplayAudio()
uni.showModal({
title: '消息',
content: '有' + res.data + '条订单,请前往订单中心处理。',
success: (ret) => {
if (ret.confirm) {
uni.switchTab({
url: '/pages/order/index'
})
} else {
console.log('else', ret)
that.defineCallBack()
}
}
});
// this.chatNum = data.data
}
} else {
that.errCount = 0
}
}
});
}, 10000)
}
},
methods: {
// 打开隐私协议页面
openPrivacyContract() {
let that = this;
wx.openPrivacyContract({
fail: () => {
that.$queue.showToast('遇到错误无法打开!');
}
})
},
// 拒绝隐私协议
exitMiniProgram() {
// 直接退出小程序
wx.exitMiniProgram()
},
// 同意隐私协议
handleAgreePrivacyAuthorization() {
this.Authorization = false;
},
openMsg() {
var that = this
wx.getSetting({
withSubscriptions: true, //是否获取用户订阅消息的订阅状态默认false不返回
success(ret) {
if (ret.subscriptionsSetting.itemSettings) {
uni.setStorageSync('sendindexMsg', true)
uni.openSetting({ // 打开设置页
success(rea) {
console.log(rea.authSetting)
}
});
} else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
uni.setStorageSync('sendindexMsg', false)
uni.showModal({
title: '提示',
content: '为了更好的体验,请绑定消息推送',
confirmText: '确定',
cancelText: '取消',
success: function(res) {
if (res.confirm) {
uni.requestSubscribeMessage({
tmplIds: that.arr,
success(re) {
// console.log(re,'**********')
var datas = JSON.stringify(re);
if (datas.indexOf("accept") != -1) {
console.log(re)
}
},
fail: (res) => {
console.log(res)
}
})
that.showModal = false
} else if (res.cancel) {
that.showModal = true
}
}
})
}
}
})
},
//切换店铺状态
changePutaWayFlag() {
if (this.shop.putawayFlag == 0) {
uni.showModal({
title: '提示',
content: '确定要打烊了吗?',
showCancel: true,
cancelText: '取消',
confirmText: '确定',
success: res => {
if (res.confirm) {
this.shop.putawayFlag = 1
this.updateShopInfo();
}
},
fail: () => {},
complete: () => {}
});
} else {
this.shop.putawayFlag = 0
this.updateShopInfo();
}
},
updateShopInfo() {
this.$Request.postJsonA("/app/shop/updateShopMessage", this.shop).then(res => {
if (res.code == 0) {
this.getShopInfo()
} else {
this.shop.putawayFlag = 1
uni.showToast({
title: res.msg,
icon: 'none'
})
}
});
},
getShopInfo() {
if (this.$queue.getData('shopId')) {
let data = {
shopId: this.$queue.getData('shopId')
}
this.$Request.getA("/app/shop/selectShopMessage", data).then(res => {
if (res.code == 0) {
uni.hideLoading()
this.shop = res.data
}
});
}
},
aplayAudio() {
// const audio = document.getElementById('audio')
// audio.play()
// console.log('语音提示')
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
// innerAudioContext.src ='../../static/mpc/order.mp3';
innerAudioContext.src =
'https://pw.xianmxkj.com/file/uploadPath/2022/01/19/0753211f78d718d44ee6372e33eae9ee.mp3';
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
innerAudioContext.onError((res) => {
console.log(res.errMsg);
console.log(res.errCode);
});
},
defineCallBack() {
let that = this
let data = {
shopIds: that.$queue.getData("shopId")
}
that.$Request.post('/admin/ordermessage/allcheckOrderMessage', data).then(res => {
if (res.code === 0) {
that.errCount = 0
}
});
},
getcity() {
let that = this
uni.getLocation({
type: 'wgs84',
success: function(res) {
// console.log('当前位置的经度:' + res.longitude);
// console.log('当前位置的纬度:' + res.latitude);
that.latitude = res.latitude
that.longitude = res.longitude
}
});
},
//获取用户发布
getFb() {
let data = {
startTime: this.startTime,
endTime: this.endTime,
shopId: this.$queue.getData("shopId")
}
this.$Request.getA("/app/shop/shopHomePage", data).then(res => {
if (res.code == 0) {
this.allMoney = res.data.allMoney //总收益
this.putawayCount = res.data.putawayCount //上架中
this.soldoutCount = res.data.soldoutCount //下架中
this.allCount = res.data.allCount //总销量
this.countTakingByUserId = res.data.countTakingByUserId //用户评价
this.orderMoney = res.data.orderMoney //订单收入
this.sumCountOrder = res.data.sumCountOrder //总订单数
this.refundMoney = res.data.refundMoney //退款金额
this.countByUserId = res.data.countByUserId //访客人数
this.i1 = res.data.i1 //待付款
this.i3 = res.data.i3 //待取餐
this.i2 = res.data.i2 //制作中
this.i4 = res.data.i4 //已完成
this.i5 = res.data.i5 //商家待接单
}
})
},
goDetail(index) {
// #ifdef MP-WEIXIN
if (uni.getStorageSync('sendindexMsg')) {
uni.requestSubscribeMessage({
tmplIds: this.arr,
success(re) {
// console.log(re,'**********')
var datas = JSON.stringify(re);
if (datas.indexOf("accept") != -1) {
console.log(re)
}
},
fail: (res) => {
console.log(res)
}
})
}
// #endif
if (index == 1) {
uni.switchTab({
url: '/pages/order/index'
})
} else if (index == 2) {
uni.navigateTo({
url: '/my/store/addgood'
})
}
},
bindFb() {
let userId = uni.getStorageSync('userId')
if (userId) {
uni.navigateTo({
url: '/my/publish/goods'
})
} else {
uni.showModal({
title: '提示',
content: '您还未登录,请先登录',
success: function(res) {
if (res.confirm) {
// console.log('用户点击确定');
uni.navigateTo({
url: '/pages/my/loginphone'
})
} else if (res.cancel) {
// console.log('用户点击取消');
}
}
})
}
},
//时间弹框开关
bindData(index) {
if (index == 1) {
this.startshow = true
} else if (index == 2) {
this.endshow = true
}
},
//开始时间
startData(e) {
this.startTime = e.year + '-' + e.month + '-' + e.day
},
// 结束时间
endData(e) {
this.endTime = e.year + '-' + e.month + '-' + e.day
this.getFb()
},
goNav(e, name) {
if (this.userId) {
// #ifdef MP-WEIXIN
if (uni.getStorageSync('sendindexMsg')) {
uni.requestSubscribeMessage({
tmplIds: this.arr,
success(re) {
// console.log(re,'**********')
var datas = JSON.stringify(re);
if (datas.indexOf("accept") != -1) {
console.log(re)
}
},
fail: (res) => {
console.log(res)
}
})
}
// #endif
uni.navigateTo({
url: e
})
} else {
uni.showModal({
title: '提示',
content: '您还未登录,请先登录',
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
uni.navigateTo({
url: '/pages/my/loginphone'
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
})
}
},
getUserInfo() {
this.$Request.getA("/sys/user/info").then(res => {
if (res.code == 0) {
// this.userName = res.user.userEntity.userName
this.userName = res.user.shopList[0].shopName
// this.avatar = res.user.userEntity.avatar ? res.user.userEntity.avatar : '../../static/logo.png'
this.avatar = res.user.shopList[0].shopCover ? res.user.shopList[0].shopCover :
'../../static/logo.png'
this.$queue.setData("userId", res.user.userId);
this.$queue.setData("shopId", res.user.shopList[0].shopId);
this.$queue.setData("mobile", res.user.mobile);
if (res.user.userEntity) {
this.$queue.setData("shopUserName", res.user.userEntity.userName);
}
}
});
},
goLogin(e) {
uni.navigateTo({
url: e
})
},
}
}
</script>
<style lang="scss">
page {
background-color: #FFFFFF;
}
.bg {
background-color: #FFFFFF;
}
.box {
width: 690upx;
margin: 0 auto;
height: 120rpx;
background: #FCD202;
border-radius: 16upx 16upx 0px 0px;
color: #333333;
padding: 0upx 30upx;
margin-top: 20upx;
}
.orderbox {
width: 690upx;
margin: 0 auto;
height: 153upx;
background: #FAFAFA;
border-radius: 16upx;
display: flex;
align-items: center;
justify-content: space-between;
text-align: center;
padding: 0upx 30upx;
}
.privacy {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: rgba(0, 0, 0, .5);
z-index: 9999999;
display: flex;
align-items: center;
justify-content: center;
}
.contentview {
width: 632rpx;
padding: 48rpx;
box-sizing: border-box;
background: #fff;
border-radius: 16rpx;
}
.contentview .title {
text-align: center;
color: #333;
font-weight: bold;
font-size: 32rpx;
}
.contentview .des {
font-size: 26rpx;
color: #666;
margin-top: 40rpx;
text-align: justify;
line-height: 1.6;
}
.contentview .des .link {
color: #07c160;
text-decoration: underline;
}
button::after {
border: none;
}
.btns {
margin-top: 48rpx;
display: flex;
}
.btns .item {
justify-content: space-between;
width: 244rpx;
height: 80rpx;
display: flex;
align-items: center;
justify-content: center;
border-radius: 16rpx;
box-sizing: border-box;
border: none;
}
.btns .reject {
background: #f4f4f5;
color: #909399;
}
.btns .agree {
background: #07c160;
color: #fff;
}
</style>