Compare commits
53 Commits
a4580bdd1c
...
test
| Author | SHA1 | Date | |
|---|---|---|---|
| 93d3f9196c | |||
| ee34d94ca0 | |||
| cb139acf13 | |||
| 4eb9eb27e3 | |||
| 8810c218b3 | |||
| dc3174ef13 | |||
| 94be2739af | |||
| 9037e205a0 | |||
| 2afc2f9fab | |||
| 46105da573 | |||
| 20a54c3bd9 | |||
| a0cc43e118 | |||
| 8f1b21bf00 | |||
| 654ed39854 | |||
| 67ae138033 | |||
| c60a2115ea | |||
| 1ed28e2913 | |||
| a125995808 | |||
| 0444b68cb2 | |||
| 32c60b4f83 | |||
| 373be0527f | |||
| 402f85d61f | |||
| 575e6d22b0 | |||
| dfc67e12c5 | |||
| 42fc09815b | |||
| 3064007137 | |||
| d8c2aef83e | |||
| 7c143efe30 | |||
| 362f3cee96 | |||
| ca53618004 | |||
| cbe27a43de | |||
| 5fcbba0cb4 | |||
| 0944635c69 | |||
| 067025f532 | |||
| 8d917d49ed | |||
| bcc44a0886 | |||
| 811abf935c | |||
| bde30fa70c | |||
| ac7af51a92 | |||
| 9b78ee0f48 | |||
| 75ed724fbb | |||
| 113193b142 | |||
| b5ecab0a03 | |||
| f75f90d34f | |||
| edd10edf9f | |||
| cf562b28b0 | |||
| e645aa5516 | |||
| 33453ab961 | |||
| 158a025ba1 | |||
| 65554b043c | |||
| 4d7c388f74 | |||
| b3c1ab3b8b | |||
| e1000c6b40 |
@@ -3,12 +3,15 @@ import request from '@/common/api/request.js'
|
|||||||
const url = '/account'
|
const url = '/account'
|
||||||
//根据经纬度获取信息
|
//根据经纬度获取信息
|
||||||
export const APIgeocodelocation = (data) => {
|
export const APIgeocodelocation = (data) => {
|
||||||
return request({
|
return new Promise((resove, reject) => {
|
||||||
url: url + '/user/geo/geocode',
|
resove(null)
|
||||||
method: 'get',
|
|
||||||
data: data,
|
|
||||||
toast: false
|
|
||||||
})
|
})
|
||||||
|
// return request({
|
||||||
|
// url: url + '/user/geo/geocode',
|
||||||
|
// method: 'get',
|
||||||
|
// data: data,
|
||||||
|
// toast: false
|
||||||
|
// })
|
||||||
}
|
}
|
||||||
|
|
||||||
//登录
|
//登录
|
||||||
|
|||||||
3
common/api/apiPrve.js
Normal file
3
common/api/apiPrve.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export const urlAccount = '/account'
|
||||||
|
export const urlProduct = '/product'
|
||||||
|
export const urlOrder = '/order'
|
||||||
@@ -14,11 +14,11 @@ export const pay = (data) => {
|
|||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
platformType = "WX";
|
platformType = "WX";
|
||||||
platformType = "wechat";
|
platformType = "wechat";
|
||||||
payType = "wechatPay";
|
payType = "WECHAT";
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-ALIPAY
|
// #ifdef MP-ALIPAY
|
||||||
platformType = "alipay";
|
platformType = "alipay";
|
||||||
payType = "aliPay";
|
payType = "ALIPAY";
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
|
|
||||||
@@ -136,6 +136,15 @@ export const getInviteCode = (data) => {
|
|||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
export const autoGetInviteCode = (data) => {
|
||||||
|
return request({
|
||||||
|
url: prveUrl + "/user/distribution/autoGetInviteCode",
|
||||||
|
method: "get",
|
||||||
|
data: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 获取配置
|
// 获取配置
|
||||||
export const getConfig = (data) => {
|
export const getConfig = (data) => {
|
||||||
@@ -147,3 +156,11 @@ export const getConfig = (data) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 分销员中心-无感-绑定邀请人
|
||||||
|
export const autoBindInviteUser = (data) => {
|
||||||
|
return request({
|
||||||
|
url: prveUrl + "/user/distribution/autoBindInviteUser",
|
||||||
|
method: "post",
|
||||||
|
data: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
// 引入 request 文件
|
// 引入 request 文件
|
||||||
import request from '@/common/api/request.js'
|
import request from '@/common/api/request.js'
|
||||||
import {prveUrl} from './config.js'
|
import {
|
||||||
|
prveUrl
|
||||||
|
} from './config.js'
|
||||||
|
|
||||||
export const consumeDiscount = (data) => {
|
export const consumeDiscount = (data) => {
|
||||||
return request({
|
return request({
|
||||||
@@ -16,3 +18,11 @@ export const homeData = (data) => {
|
|||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 清除所有分销绑定关系
|
||||||
|
export const distributionClear = (data) => {
|
||||||
|
return request({
|
||||||
|
url: prveUrl + '/user/distribution/clean',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -10,11 +10,11 @@ let platformType = '';
|
|||||||
let payType = '';
|
let payType = '';
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
platformType = 'wechat'
|
platformType = 'wechat'
|
||||||
payType = 'wechatPay'
|
payType = 'WECHAT'
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-ALIPAY
|
// #ifdef MP-ALIPAY
|
||||||
platformType = 'alipay'
|
platformType = 'alipay'
|
||||||
payType = 'aliPay'
|
payType = 'ALIPAY'
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
export const getPackage = (data) => {
|
export const getPackage = (data) => {
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ let platformType = '';
|
|||||||
let payType='';
|
let payType='';
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
platformType = 'wechat'
|
platformType = 'wechat'
|
||||||
payType='wechatPay'
|
payType='WECHAT'
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-ALIPAY
|
// #ifdef MP-ALIPAY
|
||||||
platformType = 'alipay'
|
platformType = 'alipay'
|
||||||
payType='aliPay'
|
payType='ALIPAY'
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
export const warePage = (data) => {
|
export const warePage = (data) => {
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ let platformType = '';
|
|||||||
let payType='';
|
let payType='';
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
platformType = 'wechat'
|
platformType = 'wechat'
|
||||||
payType='wechatPay'
|
payType='WECHAT'
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-ALIPAY
|
// #ifdef MP-ALIPAY
|
||||||
platformType = 'alipay'
|
platformType = 'alipay'
|
||||||
payType='aliPay'
|
payType='ALIPAY'
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
//订单列表
|
//订单列表
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ let platformType = '';
|
|||||||
let payType='';
|
let payType='';
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
platformType = 'wechat'
|
platformType = 'wechat'
|
||||||
payType='wechatPay'
|
payType='WECHAT'
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-ALIPAY
|
// #ifdef MP-ALIPAY
|
||||||
platformType = 'alipay'
|
platformType = 'alipay'
|
||||||
payType='aliPay'
|
payType='ALIPAY'
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
export const pointGoodsPage = (data) => {
|
export const pointGoodsPage = (data) => {
|
||||||
@@ -20,6 +20,12 @@ export const pointGoodsPage = (data) => {
|
|||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export const pointsGoods = (data) => {
|
||||||
|
return request({
|
||||||
|
url: url + '/user/pointGoods/'+data.id,
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export const exchange = (data) => {
|
export const exchange = (data) => {
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
// 引入 request 文件
|
// 引入 request 文件
|
||||||
import request from '@/common/api/request.js'
|
import request from '@/common/api/request.js'
|
||||||
const urlAccount = '/account'
|
|
||||||
const urlProduct = '/product'
|
import {urlAccount,urlProduct,urlOrder} from '@/common/api/apiPrve.js'
|
||||||
const urlOrder = '/order'
|
|
||||||
|
|
||||||
//获取商品列表数据
|
//获取商品列表数据
|
||||||
export const APIproductqueryProduct = (data) => {
|
export const APIproductqueryProduct = (data) => {
|
||||||
@@ -46,4 +45,13 @@ export const APIminiAppskuinfo = (data) => {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取相关推荐商品
|
||||||
|
export const productRelated = (data) => {
|
||||||
|
return request({
|
||||||
|
url: urlProduct + '/user/product/related/'+data.id,
|
||||||
|
method: 'get',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
}
|
}
|
||||||
@@ -7,33 +7,7 @@ export default async (params) => {
|
|||||||
let token = uni.cache.get("token") || "";
|
let token = uni.cache.get("token") || "";
|
||||||
const shopId = uni.cache.get("shopId") * 1;
|
const shopId = uni.cache.get("shopId") * 1;
|
||||||
const userInfo = uni.cache.get("userInfo") || {};
|
const userInfo = uni.cache.get("userInfo") || {};
|
||||||
// #ifdef H5
|
|
||||||
token = "1b5e8baf0cc1492a858a208f113d0971";
|
|
||||||
uni.cache.set('userInfo', {
|
|
||||||
"acQrcodeValidTime": "2026-01-13 13:35:59",
|
|
||||||
"alipayOpenId": "",
|
|
||||||
"birthDay": "",
|
|
||||||
"createTime": "2024-03-13 10:56:40",
|
|
||||||
"distributionAmount": 0,
|
|
||||||
"headImg": "https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132",
|
|
||||||
"id": "36689",
|
|
||||||
"idCard": "",
|
|
||||||
"isAc": 0,
|
|
||||||
"lastLoginTime": "2025-12-24 11:24:12",
|
|
||||||
"nickName": "微信用户",
|
|
||||||
"password": "",
|
|
||||||
"payPwd": "e10adc3949ba59abbe56e057f20f883e",
|
|
||||||
"phone": "",
|
|
||||||
"realName": "",
|
|
||||||
"sex": null,
|
|
||||||
"status": 1,
|
|
||||||
"updateTime": "2025-12-24 11:22:47",
|
|
||||||
"usePayPwd": 0,
|
|
||||||
"wechatAcOpenId": "",
|
|
||||||
"wechatAcQrcode": "http://weixin.qq.com/q/029s5JtP1xfmJ1g_HDxFco",
|
|
||||||
"wechatOpenId": "or1l86yipGvwyfPhrKIAcQuSfAV8"
|
|
||||||
})
|
|
||||||
// #endif
|
|
||||||
let header = {
|
let header = {
|
||||||
version: uni.conf.version,
|
version: uni.conf.version,
|
||||||
type: uni.getSystemInfoSync().platform,
|
type: uni.getSystemInfoSync().platform,
|
||||||
@@ -60,7 +34,10 @@ export default async (params) => {
|
|||||||
mask: true,
|
mask: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// #ifdef H5
|
||||||
|
uni.cache.set('token', '1b5e8baf0cc1492a858a208f113d0971')
|
||||||
|
uni.cache.set('userInfo',{"acQrcodeValidTime":"2026-01-13 13:35:59","alipayOpenId":"","birthDay":"2025-12-25","createTime":"2024-03-13 10:56:40","distributionAmount":0,"headImg":"https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132","id":"36689","idCard":"","isAc":0,"lastLoginTime":"2025-12-26 10:01:12","nickName":"微信用户","password":"","payPwd":"e10adc3949ba59abbe56e057f20f883e","phone":"18049104914","realName":"","sex":1,"status":1,"updateTime":"2025-12-26 09:59:31","usePayPwd":0,"wechatAcOpenId":"","wechatAcQrcode":"http://weixin.qq.com/q/029s5JtP1xfmJ1g_HDxFco","wechatOpenId":"or1l86yipGvwyfPhrKIAcQuSfAV8"})
|
||||||
|
// #endif
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const timeoutDuration = params.timeout || 10000; // 可以通过 params 传入超时时间,默认 10 秒
|
const timeoutDuration = params.timeout || 10000; // 可以通过 params 传入超时时间,默认 10 秒
|
||||||
uni.request({
|
uni.request({
|
||||||
@@ -75,7 +52,7 @@ export default async (params) => {
|
|||||||
//获取成功
|
//获取成功
|
||||||
if (res.code == 200) {
|
if (res.code == 200) {
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
uni.hideToast();
|
// uni.hideToast();
|
||||||
resolve(res.data ? res.data : true);
|
resolve(res.data ? res.data : true);
|
||||||
} else {
|
} else {
|
||||||
switch (res.code) {
|
switch (res.code) {
|
||||||
@@ -158,7 +135,7 @@ export default async (params) => {
|
|||||||
// 不管成功还是失败都会执行
|
// 不管成功还是失败都会执行
|
||||||
setTimeout((res) => {
|
setTimeout((res) => {
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
uni.hideToast();
|
// uni.hideToast();
|
||||||
}, 10000);
|
}, 10000);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,17 +1,16 @@
|
|||||||
// const debug = process.env.NODE_ENV == 'development' ? true : false;
|
// const debug = process.env.NODE_ENV == 'development' ? true : false;
|
||||||
const debug = false; // false线上 true本地
|
// const debug = false; // false线上 true本地
|
||||||
|
const debug = true; // false线上 true本地
|
||||||
let baseUrl = ''
|
let baseUrl = ''
|
||||||
let baseUrlwws = ''
|
let baseUrlwws = ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const version = "100";
|
const version = "100";
|
||||||
const autoRemoveCache = {
|
const autoRemoveCache = {
|
||||||
count: 100000,
|
count: 100000,
|
||||||
size: 100000,
|
size: 100000,
|
||||||
};
|
};
|
||||||
|
|
||||||
function init(){
|
function init() {
|
||||||
if (debug) {
|
if (debug) {
|
||||||
baseUrl = 'http://192.168.1.42'
|
baseUrl = 'http://192.168.1.42'
|
||||||
baseUrlwws = "ws://192.168.1.42:2348";
|
baseUrlwws = "ws://192.168.1.42:2348";
|
||||||
@@ -20,12 +19,12 @@ function init(){
|
|||||||
baseUrlwws = "wss://czgeatws.sxczgkj.com/wss";
|
baseUrlwws = "wss://czgeatws.sxczgkj.com/wss";
|
||||||
}
|
}
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
|
|
||||||
if (debug) {
|
if (debug) {
|
||||||
baseUrl = "/api";
|
baseUrl = "/testApi";
|
||||||
baseUrlwws = "http://192.168.1.42:2348";
|
baseUrlwws = "http://192.168.1.42:2348";
|
||||||
} else {
|
} else {
|
||||||
baseUrl = "/prodApi";
|
baseUrl = "/prodApi";
|
||||||
baseUrlwws = "https://czgeatws.sxczgkj.com/wss";
|
baseUrlwws = "https://czgeatws.sxczgkj.com/wss";
|
||||||
}
|
}
|
||||||
// #endif
|
// #endif
|
||||||
@@ -47,7 +46,7 @@ export const changeEnv = (env) => {
|
|||||||
let baseUrl = "http://192.168.1.42"
|
let baseUrl = "http://192.168.1.42"
|
||||||
let baseUrlwws = "ws://192.168.1.42:2348"
|
let baseUrlwws = "ws://192.168.1.42:2348"
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
baseUrl = "/api"
|
baseUrl = "/testApi"
|
||||||
baseUrlwws = "http://192.168.1.42:2348"
|
baseUrlwws = "http://192.168.1.42:2348"
|
||||||
// #endif
|
// #endif
|
||||||
uni.conf = {
|
uni.conf = {
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ page,
|
|||||||
image {
|
image {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
.relative{
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
.absolute{
|
.absolute{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</view>
|
</view>
|
||||||
<!-- 优惠券名称与领取按钮 -->
|
<!-- 优惠券名称与领取按钮 -->
|
||||||
<view class="u-flex u-row-between u-m-t-16">
|
<view class="u-flex u-row-between u-m-t-16 u-col-center">
|
||||||
<view>
|
<view>
|
||||||
<text class="title">{{ item.couponInfo.title }}</text>
|
<text class="title">{{ item.couponInfo.title }}</text>
|
||||||
<text class="num">x{{ item.num }}</text>
|
<text class="num">x{{ item.num }}</text>
|
||||||
@@ -507,6 +507,7 @@ function close() {
|
|||||||
outline: none;
|
outline: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
white-space: nowrap;
|
||||||
&:active {
|
&:active {
|
||||||
background: #f07080; // 点击深色反馈
|
background: #f07080; // 点击深色反馈
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<block v-if="limitDiscount && limitDiscount.id" class="limit-price">
|
<block v-if="limitDiscount && limitDiscount.id" >
|
||||||
<text>
|
<text class="limit-price">
|
||||||
{{ returnPrice() }}
|
{{ returnPrice() }}
|
||||||
</text>
|
</text>
|
||||||
</block>
|
</block>
|
||||||
@@ -15,7 +15,6 @@
|
|||||||
{{ cart.memberPrice }}
|
{{ cart.memberPrice }}
|
||||||
</text>
|
</text>
|
||||||
</block>
|
</block>
|
||||||
|
|
||||||
<text v-else class="salePrice">{{ cart.salePrice }}</text>
|
<text v-else class="salePrice">{{ cart.salePrice }}</text>
|
||||||
</text>
|
</text>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,260 +0,0 @@
|
|||||||
<template>
|
|
||||||
<!-- 支付方式 -->
|
|
||||||
<view class="paymentMethod">
|
|
||||||
<view class="paymentMethod_content">
|
|
||||||
<view class="paymentMethod_title">支付方式</view>
|
|
||||||
<up-radio-group v-model="radiovalue" iconPlacement="right" @change="groupChanges" :size="28"
|
|
||||||
placement="column">
|
|
||||||
<block v-for="(item,index) in paymentMethodList" :key="index">
|
|
||||||
<view class="method_list" @click="groupChanges(item.type)" :class="{disabled:returnDisabled(item)}"
|
|
||||||
v-if="(index+1) == radiovalue?!changeFreeenable:true">
|
|
||||||
<view class="method_list_top">
|
|
||||||
<view class="method_list_top_left">
|
|
||||||
<image class="icon" :src="item.url" mode="aspectFill" />
|
|
||||||
<view class="method_list_top_cen">
|
|
||||||
<view class="name"> {{ item.name }} </view>
|
|
||||||
<view class="method_list_bom" v-if="item.type == 1">
|
|
||||||
<text class="balance">
|
|
||||||
当前余额¥{{orderVIP?(orderVIP.amount||0):0}}</text>
|
|
||||||
<text class="topUpNow" @click="goRecharge">去充值</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<up-radio :disabled="returnDisabled(item)" activeColor="#E8AD7B" icon-size="18" size="18" :name="item.type">
|
|
||||||
</up-radio>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
</up-radio-group>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import {
|
|
||||||
ref,
|
|
||||||
reactive,
|
|
||||||
defineProps,
|
|
||||||
computed,
|
|
||||||
defineEmits,
|
|
||||||
watch,
|
|
||||||
watchEffect,
|
|
||||||
defineExpose
|
|
||||||
} from 'vue'
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
rechargeFreeChecked: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
payAmount: {
|
|
||||||
type: Number,
|
|
||||||
default: 0
|
|
||||||
},
|
|
||||||
freeCheck: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
changeFreeenable: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
disablePayType: {
|
|
||||||
type: Array,
|
|
||||||
default: () => {
|
|
||||||
return []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
function returnDisabled(item) {
|
|
||||||
if (props.disablePayType.includes(item.name)) {
|
|
||||||
return true
|
|
||||||
}else{
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const orderVIP = ref(null)
|
|
||||||
const emits = defineEmits(['customevent', 'groupChange']);
|
|
||||||
watchEffect(() => {
|
|
||||||
orderVIP.value = uni.cache.get('orderVIP')
|
|
||||||
})
|
|
||||||
|
|
||||||
const orderVIPfun = (data) => {
|
|
||||||
orderVIP.value = data
|
|
||||||
}
|
|
||||||
|
|
||||||
const paymentMethodList = ref([
|
|
||||||
// #ifdef MP-WEIXIN
|
|
||||||
{
|
|
||||||
name: "微信支付",
|
|
||||||
type: 2,
|
|
||||||
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/weChat.png",
|
|
||||||
payType: 'wechatPay'
|
|
||||||
},
|
|
||||||
// #endif
|
|
||||||
// #ifdef MP-ALIPAY
|
|
||||||
{
|
|
||||||
name: "支付宝支付",
|
|
||||||
type: 3,
|
|
||||||
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/alipay.png",
|
|
||||||
payType: 'aliPay'
|
|
||||||
},
|
|
||||||
// #endif
|
|
||||||
{
|
|
||||||
name: "余额支付",
|
|
||||||
type: 1,
|
|
||||||
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/drder/wechat.png",
|
|
||||||
payType: 'accountPay'
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
const paymentMethodName = ref([{
|
|
||||||
name: "余额支付",
|
|
||||||
type: 1,
|
|
||||||
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/drder/wechat.png",
|
|
||||||
payType: 'accountPay'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "微信支付",
|
|
||||||
type: 2,
|
|
||||||
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/weChat.png",
|
|
||||||
payType: 'wechatPay'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "支付宝支付",
|
|
||||||
type: 3,
|
|
||||||
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/alipay.png",
|
|
||||||
payType: 'aliPay'
|
|
||||||
},
|
|
||||||
])
|
|
||||||
|
|
||||||
const radiovalue = ref(2) // 支付方式
|
|
||||||
|
|
||||||
const ispws = ref(false) // 输入支付密码
|
|
||||||
|
|
||||||
const storeInfo = ref({})
|
|
||||||
|
|
||||||
// * 监听支付方式切换
|
|
||||||
const groupChanges = (type) => {
|
|
||||||
if (props.freeCheck && type == 1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const item=paymentMethodList.value.find(v=>v.type==type)
|
|
||||||
if(item&&returnDisabled(item)){
|
|
||||||
uni.showToast({
|
|
||||||
title:"当前支付方式不可用",
|
|
||||||
icon:'none'
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// if (props.payAmount <= 0 && type != 1) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
radiovalue.value = type;
|
|
||||||
let name = paymentMethodName.value[type - 1].name;
|
|
||||||
|
|
||||||
emits("groupChange", paymentMethodName.value[type - 1])
|
|
||||||
}
|
|
||||||
|
|
||||||
// 去充值
|
|
||||||
const goRecharge = () => {
|
|
||||||
if (orderVIP.value.isVip) {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/pages/user/member/czzx?shopId=' + orderVIP.value.shopId
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/user/vip/buy-vip?shopId=' + orderVIP.value.shopId
|
|
||||||
})
|
|
||||||
|
|
||||||
// uni.pro.navigateTo('user/member/index', {
|
|
||||||
// shopId: orderVIP.value.shopId
|
|
||||||
// })
|
|
||||||
}
|
|
||||||
// 将方法暴露给父组件
|
|
||||||
defineExpose({
|
|
||||||
groupChanges,
|
|
||||||
orderVIPfun
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
.paymentMethod {
|
|
||||||
box-sizing: border-box;
|
|
||||||
margin-top: 30rpx;
|
|
||||||
border-radius: 18rpx;
|
|
||||||
|
|
||||||
.paymentMethod_content {
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 22rpx;
|
|
||||||
padding: 30rpx 30rpx 0 30rpx;
|
|
||||||
box-sizing: border-box;
|
|
||||||
|
|
||||||
.paymentMethod_title {
|
|
||||||
font-weight: 500;
|
|
||||||
font-size: 32rpx;
|
|
||||||
color: #333333;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
.method_list {
|
|
||||||
padding: 40rpx 0;
|
|
||||||
box-sizing: border-box;
|
|
||||||
&.disabled{
|
|
||||||
opacity: .6;
|
|
||||||
}
|
|
||||||
.method_list_top {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
|
|
||||||
.method_list_top_left {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
width: 54.67rpx !important;
|
|
||||||
height: 48rpx !important;
|
|
||||||
margin-right: 22rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.name {
|
|
||||||
font-size: 32rpx;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
.method_list_top_cen {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.method_list_bom {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.balance {
|
|
||||||
margin-right: 20rpx;
|
|
||||||
font-size: 24rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.topUpNow {
|
|
||||||
color: #FF803D;
|
|
||||||
font-size: 28rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.method_list:nth-child(odd) {
|
|
||||||
border-bottom: 2rpx solid #e5e5e5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<view class="name"> {{ item.name }} </view>
|
<view class="name"> {{ item.name }} </view>
|
||||||
<view class="method_list_bom" v-if="item.name == '余额支付'">
|
<view class="method_list_bom" v-if="item.name == '余额支付'">
|
||||||
<text class="balance">
|
<text class="balance">
|
||||||
当前余额¥{{ orderVIP ? orderVIP.amount || 0 : 0 }}</text>
|
当前余额¥{{ shopUserInfo ? shopUserInfo.amount || 0 : 0 }}</text>
|
||||||
<text class="topUpNow" @click="goRecharge">去充值</text>
|
<text class="topUpNow" @click="goRecharge">去充值</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -66,6 +66,14 @@ const props = defineProps({
|
|||||||
type: Array,
|
type: Array,
|
||||||
default: () => [],
|
default: () => [],
|
||||||
},
|
},
|
||||||
|
shopUserInfo:{
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return{
|
||||||
|
amount:0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 工具函数 - 深拷贝对象(切断引用)
|
// 工具函数 - 深拷贝对象(切断引用)
|
||||||
@@ -77,15 +85,10 @@ function returnDisabled(item) {
|
|||||||
return props.disablePayType.includes(item.name);
|
return props.disablePayType.includes(item.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderVIP = ref(null);
|
|
||||||
const emits = defineEmits(["customevent", "groupChange"]);
|
const emits = defineEmits(["customevent", "groupChange"]);
|
||||||
watchEffect(() => {
|
|
||||||
orderVIP.value = uni.cache.get("orderVIP");
|
|
||||||
});
|
|
||||||
|
|
||||||
const orderVIPfun = (data) => {
|
|
||||||
orderVIP.value = data;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 支付方式列表(保持不变)
|
// 支付方式列表(保持不变)
|
||||||
const paymentMethodList = ref([
|
const paymentMethodList = ref([
|
||||||
@@ -94,7 +97,7 @@ const paymentMethodList = ref([
|
|||||||
name: "微信支付",
|
name: "微信支付",
|
||||||
type: 2,
|
type: 2,
|
||||||
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/weChat.png",
|
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/weChat.png",
|
||||||
payType: "wechatPay",
|
payType: "WECHAT",
|
||||||
},
|
},
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-ALIPAY
|
// #ifdef MP-ALIPAY
|
||||||
@@ -207,13 +210,12 @@ const goRecharge = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: `/pages/user/member/czzx?shopId=${orderVIP.value?.shopId || ''}`,
|
url: `/pages/user/member/czzx?shopId=${props.shopUserInfo?.shopId || ''}`,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
groupChanges,
|
groupChanges,
|
||||||
orderVIPfun,
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
38
components/ymf-components/ymf-share.vue
Normal file
38
components/ymf-components/ymf-share.vue
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<template>
|
||||||
|
<view class="relative">
|
||||||
|
<slot v-if="$slots.default" name="default"></slot>
|
||||||
|
<up-icon v-else name="share-square" bold :color="color" :size="size"></up-icon>
|
||||||
|
<view class="absolute share-box">
|
||||||
|
<button open-type="share" @click="shareClick">分享</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
const emits = defineEmits(['shareClick'])
|
||||||
|
const props = defineProps({
|
||||||
|
size: {
|
||||||
|
type: String,
|
||||||
|
default: '36rpx'
|
||||||
|
},
|
||||||
|
color:{
|
||||||
|
type: String,
|
||||||
|
default: '#333'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
function shareClick() {
|
||||||
|
emits('shareClick')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.share-box {
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
top: 0;
|
||||||
|
opacity: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -45,17 +45,17 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view>
|
||||||
<view
|
<!-- <view
|
||||||
class="u-p-t-16 u-p-b-20 u-flex u-p-l-28 u-p-r-28"
|
class="u-p-t-16 u-p-b-20 u-flex u-p-l-28 u-p-r-28"
|
||||||
style="align-items: baseline; justify-content: flex-end"
|
style="align-items: baseline; justify-content: flex-end"
|
||||||
>
|
>
|
||||||
<text class="color-666 font-12"> 总计:</text>
|
<text class="color-666 font-12"> 总计:</text>
|
||||||
<text class="font-16 color-333 font-700" v-if="centerUserInfo">
|
<text class="font-16 color-333 font-700" >
|
||||||
{{ centerUserInfo.totalIncome }}</text
|
{{ totalIncome }}</text
|
||||||
>
|
>
|
||||||
</view>
|
</view> -->
|
||||||
|
|
||||||
<view class="list">
|
<view class="list u-m-t-32">
|
||||||
<view v-for="(item, index) in state.records" :key="index" class="item">
|
<view v-for="(item, index) in state.records" :key="index" class="item">
|
||||||
<view class="u-flex justify-between">
|
<view class="u-flex justify-between">
|
||||||
<view>
|
<view>
|
||||||
@@ -113,6 +113,7 @@
|
|||||||
<scroll-view
|
<scroll-view
|
||||||
class="popup-list"
|
class="popup-list"
|
||||||
direction="vertical"
|
direction="vertical"
|
||||||
|
:scroll-y="true"
|
||||||
@scrollend="scrollBottom"
|
@scrollend="scrollBottom"
|
||||||
>
|
>
|
||||||
<view
|
<view
|
||||||
@@ -301,6 +302,7 @@ async function centerUser() {
|
|||||||
}
|
}
|
||||||
onShow(() => {});
|
onShow(() => {});
|
||||||
|
|
||||||
|
|
||||||
onLoad(async (opt) => {
|
onLoad(async (opt) => {
|
||||||
await getCouponShopsAjax();
|
await getCouponShopsAjax();
|
||||||
|
|
||||||
@@ -314,13 +316,24 @@ onLoad(async (opt) => {
|
|||||||
}
|
}
|
||||||
if (opt.shopId) {
|
if (opt.shopId) {
|
||||||
querForm.value.shopId = opt.shopId;
|
querForm.value.shopId = opt.shopId;
|
||||||
const findItem = couponShops.value.find((item) => item.id == opt.shopId);
|
const findItem = shopList.value.find((item) => item.shopId == opt.shopId);
|
||||||
querForm.value.shopName = findItem.shopName || "";
|
querForm.value.shopName = findItem.shopName || "";
|
||||||
}
|
}
|
||||||
centerUser();
|
centerUser();
|
||||||
getIncomeDetailsAjax();
|
getIncomeDetailsAjax();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const totalIncome=computed(()=>{
|
||||||
|
if(!querForm.value.shopId){
|
||||||
|
return centerUserInfo.value?(centerUserInfo.value.totalIncome||0):0;
|
||||||
|
}
|
||||||
|
const findItem = shopList.value.find((item) => item.shopId == querForm.value.shopId );
|
||||||
|
if(findItem){
|
||||||
|
return findItem.income||0
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => querForm.value.status,
|
() => querForm.value.status,
|
||||||
(newVal, oldVal) => {
|
(newVal, oldVal) => {
|
||||||
|
|||||||
@@ -1,228 +1,260 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="">
|
<view class="">
|
||||||
<view class="w-qrcode">
|
<view class="w-qrcode">
|
||||||
<w-qrcode
|
<w-qrcode :options="codeOptions" :opacity="0" ref="wQrcode" @generate="(e) => qrcodeResult(e)"></w-qrcode>
|
||||||
:options="codeOptions"
|
</view>
|
||||||
:opacity="0"
|
<up-popup :show="show" bgColor="transparent" :safeAreaInsetBottom="false" :closeOnClickOverlay="true" @close="close" mode="center">
|
||||||
ref="wQrcode"
|
<view class="box">
|
||||||
@generate="(e) => qrcodeResult(e)"
|
<view class="info">
|
||||||
></w-qrcode>
|
<view class="u-flex justify-center">
|
||||||
</view>
|
<up-avatar size="214rpx" :src="shopUserInfo.headImg"></up-avatar>
|
||||||
|
</view>
|
||||||
<up-popup
|
<view class="u-m-t-48 font-14 font-700 color-333 text-center line-height-54">
|
||||||
:show="show"
|
<view>{{ shopUserInfo.nickName }}</view>
|
||||||
bgColor="transparent"
|
<view>{{ desensitizePhone(shopUserInfo.phone) }}</view>
|
||||||
:safeAreaInsetBottom="false"
|
</view>
|
||||||
:closeOnClickOverlay="true"
|
<view class="u-m-t-16 font-14 line-height-54 text-center">
|
||||||
@close="close"
|
<text class="color-666">邀请码</text>
|
||||||
mode="center"
|
<text class="u-m-l-16 u-m-r-16 color-333 font-16 font-700">{{ inviteCode }}</text>
|
||||||
>
|
<text class="" style="color: #fe6d11" @click="copyCode">复制</text>
|
||||||
<view class="box">
|
</view>
|
||||||
<view class="info">
|
<view class="u-flex justify-center" style="margin-top: 90rpx">
|
||||||
<view class="u-flex justify-center">
|
<!-- <w-qrcode
|
||||||
<up-avatar size="214rpx" :src="shopUserInfo.headImg"></up-avatar>
|
|
||||||
</view>
|
|
||||||
<view
|
|
||||||
class="u-m-t-48 font-14 font-700 color-333 text-center line-height-54"
|
|
||||||
>
|
|
||||||
<view>{{ shopUserInfo.nickName }} </view>
|
|
||||||
<view>{{ desensitizePhone(shopUserInfo.phone) }}</view>
|
|
||||||
</view>
|
|
||||||
<view class="u-m-t-16 font-14 line-height-54 text-center">
|
|
||||||
<text class="color-666">邀请码</text>
|
|
||||||
<text class="u-m-l-16 u-m-r-16 color-333 font-16 font-700">{{
|
|
||||||
inviteCode
|
|
||||||
}}</text>
|
|
||||||
<text class="" style="color: #fe6d11" @click="copyCode">复制</text>
|
|
||||||
</view>
|
|
||||||
<view class="u-flex justify-center" style="margin-top: 90rpx">
|
|
||||||
<!-- <w-qrcode
|
|
||||||
:options="codeOptions"
|
:options="codeOptions"
|
||||||
:opacity="1"
|
:opacity="1"
|
||||||
ref="wQrcode"
|
ref="wQrcode"
|
||||||
@generate="(e) => qrcodeResult(e)"
|
@generate="(e) => qrcodeResult(e)"
|
||||||
></w-qrcode> -->
|
></w-qrcode> -->
|
||||||
<up-image width="322rpx" height="322rpx" :src="code"></up-image>
|
<up-image width="322rpx" height="322rpx" :src="code"></up-image>
|
||||||
</view>
|
</view>
|
||||||
|
</view>
|
||||||
<view class="u-m-t-60 u-flex u-col-center justify-center">
|
<view class="footer-wrap">
|
||||||
<view class="confirm" @click="save">保存图片</view>
|
<view class="confirm line" @click="save">保存图片</view>
|
||||||
</view>
|
<ymf-share><view class="confirm">微信分享</view></ymf-share>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</up-popup>
|
</up-popup>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import wQrcode from "@/uni_modules/wmf-code/components/w-qrcode/w-qrcode.vue";
|
import { shareMixin, handleMixinOnLoad, returnQuery } from '@/utils/share.js';
|
||||||
import {desensitizePhone} from "@/utils/util.js";
|
import ymfShare from '@/components/ymf-components/ymf-share.vue';
|
||||||
import { ref } from "vue";
|
import wQrcode from '@/uni_modules/wmf-code/components/w-qrcode/w-qrcode.vue';
|
||||||
const props = defineProps({
|
import { desensitizePhone } from '@/utils/util.js';
|
||||||
inviteCode: {
|
import { ref, onMounted, nextTick } from 'vue';
|
||||||
type: String,
|
|
||||||
default: "",
|
onMounted(async () => {
|
||||||
},
|
setTimeout(async () => {
|
||||||
shopUserInfo: {
|
await nextTick();
|
||||||
type: Object,
|
const query = await returnQuery();
|
||||||
default: () => {},
|
codeOptions.value.code = `https://cashier.sxczgkj.com/invite?${removeQAndAfter(query)}`;
|
||||||
},
|
console.log('codeOptions.value', codeOptions.value);
|
||||||
|
}, 500);
|
||||||
});
|
});
|
||||||
const codeOptions = ref({
|
|
||||||
size: 200,
|
/**
|
||||||
code: props.inviteCode,
|
* 截取字符串,移除 &q 及后面的所有内容
|
||||||
});
|
* @param {string} str - 原始字符串
|
||||||
function copyCode() {
|
* @returns {string} 处理后的字符串
|
||||||
uni.setClipboardData({
|
*/
|
||||||
data: props.inviteCode,
|
function removeQAndAfter(str) {
|
||||||
success: function () {
|
// 检查是否为空字符串
|
||||||
console.log("success");
|
if (!str || typeof str !== 'string') {
|
||||||
},
|
return str || '';
|
||||||
});
|
}
|
||||||
|
|
||||||
|
// 找到 &q 的起始位置
|
||||||
|
const qIndex = str.indexOf('&q');
|
||||||
|
|
||||||
|
// 如果找到 &q,截取前面的部分;否则返回原字符串
|
||||||
|
return qIndex !== -1 ? str.slice(0, qIndex) : str;
|
||||||
}
|
}
|
||||||
const code = ref("");
|
|
||||||
|
const props = defineProps({
|
||||||
|
inviteCode: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
shopUserInfo: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const codeOptions = ref({
|
||||||
|
padding: 10,
|
||||||
|
size: 200,
|
||||||
|
code: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
function copyCode() {
|
||||||
|
uni.setClipboardData({
|
||||||
|
data: props.inviteCode,
|
||||||
|
success: function () {
|
||||||
|
console.log('success');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const code = ref('');
|
||||||
|
|
||||||
function qrcodeResult(e) {
|
function qrcodeResult(e) {
|
||||||
console.log("qrcodeResult", e);
|
console.log('qrcodeResult', e);
|
||||||
code.value = e.img.tempFilePath;
|
code.value = e.img.tempFilePath;
|
||||||
console.log("code", code.value);
|
console.log('code', code.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
const show = defineModel({
|
const show = defineModel({
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false
|
||||||
});
|
});
|
||||||
const emits = defineEmits(["cancel", "confirm"]);
|
const emits = defineEmits(['cancel', 'confirm']);
|
||||||
function close() {
|
function close() {
|
||||||
show.value = false;
|
show.value = false;
|
||||||
emits("cancel");
|
emits('cancel');
|
||||||
}
|
}
|
||||||
function save() {
|
function save() {
|
||||||
show.value = false;
|
show.value = false;
|
||||||
|
|
||||||
// 保存图片到相册
|
// 保存图片到相册
|
||||||
uni.saveImageToPhotosAlbum({
|
uni.saveImageToPhotosAlbum({
|
||||||
filePath: code.value,
|
filePath: code.value,
|
||||||
success: function () {
|
success: function () {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "保存成功",
|
title: '保存成功',
|
||||||
icon: 'none'
|
icon: 'none'
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
fail: function (err) {
|
fail: function (err) {
|
||||||
console.log('保存失败原因:', err);
|
console.log('保存失败原因:', err);
|
||||||
// 判断是否为授权拒绝(微信小程序授权拒绝的特征)
|
// 判断是否为授权拒绝(微信小程序授权拒绝的特征)
|
||||||
if (err.errMsg.includes('auth deny') || err.errMsg.includes('authorize fail')) {
|
if (err.errMsg.includes('auth deny') || err.errMsg.includes('authorize fail')) {
|
||||||
// 弹出提示引导用户去设置页开启授权
|
// 弹出提示引导用户去设置页开启授权
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '授权提示',
|
title: '授权提示',
|
||||||
content: '保存图片需要授权访问相册,请前往设置开启授权',
|
content: '保存图片需要授权访问相册,请前往设置开启授权',
|
||||||
showCancel: true,
|
showCancel: true,
|
||||||
cancelText: '取消',
|
cancelText: '取消',
|
||||||
confirmText: '去设置',
|
confirmText: '去设置',
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
if (res.confirm) {
|
if (res.confirm) {
|
||||||
// 跳转到微信小程序的授权设置页
|
// 跳转到微信小程序的授权设置页
|
||||||
uni.openSetting({
|
uni.openSetting({
|
||||||
success: function (settingRes) {
|
success: function (settingRes) {
|
||||||
// 检查用户是否开启了相册授权
|
// 检查用户是否开启了相册授权
|
||||||
if (settingRes.authSetting['scope.writePhotosAlbum']) {
|
if (settingRes.authSetting['scope.writePhotosAlbum']) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '授权成功,可重新保存',
|
title: '授权成功,可重新保存',
|
||||||
icon: 'none'
|
icon: 'none'
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '未开启授权,保存失败',
|
title: '未开启授权,保存失败',
|
||||||
icon: 'none'
|
icon: 'none'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
fail: function () {
|
fail: function () {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '打开设置失败',
|
title: '打开设置失败',
|
||||||
icon: 'none'
|
icon: 'none'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// 非授权问题的保存失败(如文件路径错误、系统问题等)
|
// 非授权问题的保存失败(如文件路径错误、系统问题等)
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "保存失败",
|
title: '保存失败',
|
||||||
icon: 'none'
|
icon: 'none'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
emits("confirm", code.value);
|
emits('confirm', code.value);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
:deep(.info .canvas) {
|
:deep(.info .canvas) {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
.border {
|
.border {
|
||||||
border: 2rpx solid #d9d9d9;
|
border: 2rpx solid #d9d9d9;
|
||||||
padding: 18rpx;
|
padding: 18rpx;
|
||||||
border-radius: 4rpx;
|
border-radius: 4rpx;
|
||||||
}
|
}
|
||||||
.box {
|
.box {
|
||||||
width: 638rpx;
|
width: 638rpx;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-radius: 16rpx;
|
border-radius: 16rpx;
|
||||||
overflow: hidden;
|
// overflow: hidden;
|
||||||
.title {
|
position: relative;
|
||||||
color: #000000;
|
.title {
|
||||||
font-size: 32rpx;
|
color: #000000;
|
||||||
font-weight: 700;
|
font-size: 32rpx;
|
||||||
}
|
font-weight: 700;
|
||||||
.top {
|
}
|
||||||
border-bottom: 2rpx solid #ededed;
|
.top {
|
||||||
}
|
border-bottom: 2rpx solid #ededed;
|
||||||
.info {
|
}
|
||||||
padding: 96rpx 40rpx 96rpx 40rpx;
|
.info {
|
||||||
font-size: 28rpx;
|
padding: 96rpx 40rpx 96rpx 40rpx;
|
||||||
}
|
font-size: 28rpx;
|
||||||
.small-title {
|
}
|
||||||
min-width: 84rpx;
|
.small-title {
|
||||||
text-align: right;
|
min-width: 84rpx;
|
||||||
}
|
text-align: right;
|
||||||
|
}
|
||||||
|
.footer-wrap {
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
bottom: -100upx;
|
||||||
|
display: flex;
|
||||||
|
gap: 28upx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.cancel {
|
.cancel {
|
||||||
padding: 14rpx 76rpx;
|
padding: 14rpx 76rpx;
|
||||||
border-radius: 36rpx;
|
border-radius: 36rpx;
|
||||||
border: 2rpx solid #e8ad7b;
|
border: 2rpx solid #e8ad7b;
|
||||||
color: #e8ad7b;
|
color: #e8ad7b;
|
||||||
font-size: 32rpx;
|
font-size: 32rpx;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
line-height: 48rpx;
|
line-height: 48rpx;
|
||||||
}
|
}
|
||||||
.confirm {
|
.confirm {
|
||||||
padding: 14rpx 76rpx;
|
$color: #e8ad7b;
|
||||||
border-radius: 16rpx;
|
flex: 1;
|
||||||
background-color: #e8ad7b;
|
padding: 14rpx 76rpx;
|
||||||
border: 2rpx solid #e8ad7b;
|
border-radius: 16rpx;
|
||||||
color: #fff;
|
background-color: $color;
|
||||||
font-size: 32rpx;
|
border: 2rpx solid $color;
|
||||||
font-weight: 400;
|
color: #fff;
|
||||||
line-height: 48rpx;
|
font-size: 32rpx;
|
||||||
white-space: nowrap;
|
font-weight: 400;
|
||||||
|
white-space: nowrap;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
&.line {
|
||||||
|
background-color: #fff;
|
||||||
|
color: $color;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.line-height-54 {
|
.line-height-54 {
|
||||||
line-height: 54rpx;
|
line-height: 54rpx;
|
||||||
}
|
}
|
||||||
.w-qrcode {
|
.w-qrcode {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: -9999px;
|
left: -9999px;
|
||||||
top: -9999px;
|
top: -9999px;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -566,7 +566,7 @@ export function calcSingleGoodsRealPrice(
|
|||||||
>
|
>
|
||||||
) : number {
|
) : number {
|
||||||
const { isMember, memberDiscountRate, limitTimeDiscount: activity } = config;
|
const { isMember, memberDiscountRate, limitTimeDiscount: activity } = config;
|
||||||
|
console.log('isMember',isMember);
|
||||||
//如果是增菜价格为0
|
//如果是增菜价格为0
|
||||||
if (goods.is_gift || goods.isGift) {
|
if (goods.is_gift || goods.isGift) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"pinia": "^2.3.1",
|
"pinia": "^2.3.1",
|
||||||
"pinia-plugin-unistorage": "^0.1.2",
|
"pinia-plugin-unistorage": "^0.1.2",
|
||||||
"ysk-utils": "^1.0.81"
|
"ysk-utils": "^1.0.83"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"unplugin-auto-import": "^0.16.7"
|
"unplugin-auto-import": "^0.16.7"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"easycom": {
|
"easycom": {
|
||||||
"autoscan": true,
|
"autoscan": true,
|
||||||
"custom": {
|
"custom": {
|
||||||
|
"^my-(.*)": "@/components/ymf-components/ymf-$1.vue",
|
||||||
"^u--(.*)": "@/uni_modules/uview-plus/components/u-$1/u-$1.vue",
|
"^u--(.*)": "@/uni_modules/uview-plus/components/u-$1/u-$1.vue",
|
||||||
"^up-(.*)": "@/uni_modules/uview-plus/components/u-$1/u-$1.vue",
|
"^up-(.*)": "@/uni_modules/uview-plus/components/u-$1/u-$1.vue",
|
||||||
"^u-([^-].*)": "@/uni_modules/uview-plus/components/u-$1/u-$1.vue"
|
"^u-([^-].*)": "@/uni_modules/uview-plus/components/u-$1/u-$1.vue"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,6 @@
|
|||||||
<image :src="imgs.code" class="code"></image>
|
<image :src="imgs.code" class="code"></image>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="new-menus-box">
|
<view class="new-menus-box">
|
||||||
<view class="new-menus layout2" v-if="allConfig.takeout">
|
<view class="new-menus layout2" v-if="allConfig.takeout">
|
||||||
<view class="diner" @click="scanCodehandle(0)">
|
<view class="diner" @click="scanCodehandle(0)">
|
||||||
@@ -60,7 +59,6 @@
|
|||||||
|
|
||||||
<view class="u-font-28 color-999">一键分享,快速拼单</view>
|
<view class="u-font-28 color-999">一键分享,快速拼单</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="points" @click="toIntegralMall">
|
<view class="points" @click="toIntegralMall">
|
||||||
@@ -167,7 +165,7 @@
|
|||||||
function toGroupBuying() {
|
function toGroupBuying() {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/groupBuying/index/index'
|
url: '/groupBuying/index/index'
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function toFenxiao() {
|
function toFenxiao() {
|
||||||
@@ -215,7 +213,7 @@
|
|||||||
function toTaocan() {
|
function toTaocan() {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/userPackage/index/index'
|
url: '/userPackage/index/index'
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const memberindex = (url) => {
|
const memberindex = (url) => {
|
||||||
@@ -301,7 +299,7 @@
|
|||||||
function getHomeData() {
|
function getHomeData() {
|
||||||
homeData().then((res) => {
|
homeData().then((res) => {
|
||||||
Object.assign(allConfig, res);
|
Object.assign(allConfig, res);
|
||||||
imgs.defaultAvatar = res.userAvatar ? res.userAvatar : imgs.defaultAvatar
|
imgs.defaultAvatar = res.userAvatar ? res.userAvatar : imgs.defaultAvatar;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
@@ -316,6 +314,9 @@
|
|||||||
defineExpose({
|
defineExpose({
|
||||||
updateData
|
updateData
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
@@ -7,14 +7,21 @@
|
|||||||
<view class="limitDiscount" v-if="showLimitDiscount(item)"
|
<view class="limitDiscount" v-if="showLimitDiscount(item)"
|
||||||
>限时折扣</view
|
>限时折扣</view
|
||||||
>
|
>
|
||||||
|
|
||||||
<up-image
|
<up-image
|
||||||
width="76"
|
width="76"
|
||||||
height="76"
|
height="76"
|
||||||
radius="6"
|
radius="6"
|
||||||
:src="item.productImg"
|
:src="item.productImg"
|
||||||
v-if="item.productId != -999"
|
v-if="item.isTemporary != 1&&item.is_temporary!=1"
|
||||||
></up-image>
|
></up-image>
|
||||||
|
<up-image
|
||||||
|
v-else-if="(item.isTemporary||item.is_temporary) &&(item.product_name=='签子'||item.productName=='签子')"
|
||||||
|
width="76"
|
||||||
|
height="76"
|
||||||
|
radius="6"
|
||||||
|
src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png"
|
||||||
|
mode="heightFix"
|
||||||
|
></up-image>
|
||||||
<up-image
|
<up-image
|
||||||
width="76"
|
width="76"
|
||||||
height="76"
|
height="76"
|
||||||
@@ -25,7 +32,7 @@
|
|||||||
></up-image>
|
></up-image>
|
||||||
</view>
|
</view>
|
||||||
<view class="info">
|
<view class="info">
|
||||||
<text class="productName">{{ item.productName }}</text>
|
<text class="productName">{{ item.productName||item.product_name }}</text>
|
||||||
<text class="productSkuName" v-if="item.skuName">{{
|
<text class="productSkuName" v-if="item.skuName">{{
|
||||||
item.skuName
|
item.skuName
|
||||||
}}</text>
|
}}</text>
|
||||||
@@ -55,18 +62,22 @@
|
|||||||
<view class="price">
|
<view class="price">
|
||||||
<view class="priceAmount">
|
<view class="priceAmount">
|
||||||
¥
|
¥
|
||||||
|
|
||||||
<goodsPrice
|
<goodsPrice
|
||||||
|
v-if="!item.is_temporary&&!item.isTemporary"
|
||||||
:cart="item"
|
:cart="item"
|
||||||
:limitDiscount="limitDiscount"
|
:limitDiscount="limitDiscount"
|
||||||
:shopUserInfo="shopUserInfo"
|
:shopUserInfo="shopUserInfo"
|
||||||
:shopInfo="shopInfo"
|
:shopInfo="shopInfo"
|
||||||
idKey="product_id"
|
idKey="product_id"
|
||||||
></goodsPrice>
|
></goodsPrice>
|
||||||
|
<text v-else>{{item.discount_sale_amount}}</text>
|
||||||
<view class="old-price" v-if="showLimitDiscount(item)"
|
<view class="old-price" v-if="showLimitDiscount(item)"
|
||||||
>¥{{ item.salePrice }}</view
|
>¥{{ item.salePrice }}</view
|
||||||
>
|
>
|
||||||
</view>
|
</view>
|
||||||
<view class="num">x{{ item.num }}</view>
|
<view class="num" v-if="!item.is_temporary&&!item.isTemporary">x{{ item.num }}</view>
|
||||||
|
<view class="num" v-else>x{{ item.number }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -40,9 +40,19 @@
|
|||||||
:nowCarts="nowCarts"
|
:nowCarts="nowCarts"
|
||||||
:limitDiscount="cartStore.limitTimeDiscount"
|
:limitDiscount="cartStore.limitTimeDiscount"
|
||||||
></orderItemVue> -->
|
></orderItemVue> -->
|
||||||
<orderItemVue :useVipPrice="useVipPrice" v-if="cartStore.allGoods.length" :nowCarts="cartStore.allGoods"
|
<orderItemVue :useVipPrice="useVipPrice" v-if="nowCarts" :nowCarts="nowCarts"
|
||||||
:shopInfo="cartStore.shopInfo" :shopUserInfo="cartStore.shopUserInfo"
|
:shopInfo="cartStore.shopInfo" :shopUserInfo="cartStore.shopUserInfo"
|
||||||
:limitDiscount="cartStore.limitTimeDiscount"></orderItemVue>
|
:limitDiscount="cartStore.limitTimeDiscount"></orderItemVue>
|
||||||
|
|
||||||
|
<view class="u-flex u-row-center u-m-t-16 u-font-28" v-if="cartStore.allGoods.length>4">
|
||||||
|
<view class="u-flex u-col-baseline" @click="showAllGoods=!showAllGoods">
|
||||||
|
<text>{{showAllGoods?'收起':'展开'}}</text>
|
||||||
|
<view class="guodu u-m-l-10 u-m-t-2" :class="{rotate:!showAllGoods}">
|
||||||
|
<up-icon name="arrow-down" size="14"></up-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
<template v-if="listinfo.id&&listinfo.status=='done'">
|
<template v-if="listinfo.id&&listinfo.status=='done'">
|
||||||
<view class="cell-item" v-if="is_type != 0">
|
<view class="cell-item" v-if="is_type != 0">
|
||||||
@@ -328,7 +338,9 @@
|
|||||||
import {
|
import {
|
||||||
BigNumber
|
BigNumber
|
||||||
} from "bignumber.js";
|
} from "bignumber.js";
|
||||||
|
|
||||||
|
|
||||||
|
const showAllGoods=ref(false)
|
||||||
let hasCouponCanUse = ref(false);
|
let hasCouponCanUse = ref(false);
|
||||||
|
|
||||||
const usePoints = ref(false);
|
const usePoints = ref(false);
|
||||||
@@ -852,6 +864,16 @@
|
|||||||
await getConsumeDiscount();
|
await getConsumeDiscount();
|
||||||
getDiscountActivity();
|
getDiscountActivity();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const nowCarts=computed(()=>{
|
||||||
|
if(cartStore.allGoods.length<=0){
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
if(showAllGoods.value){
|
||||||
|
return cartStore.allGoods
|
||||||
|
}
|
||||||
|
return cartStore.allGoods.slice(0,4)
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@@ -1587,4 +1609,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.guodu{
|
||||||
|
transition:all .3s linear;
|
||||||
|
padding-top: 2rpx;
|
||||||
|
}
|
||||||
|
.rotate{
|
||||||
|
transform: rotate(-90deg);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -70,7 +70,10 @@
|
|||||||
<view class="item" v-for="item in value" :key="item.id">
|
<view class="item" v-for="item in value" :key="item.id">
|
||||||
<view class="cover">
|
<view class="cover">
|
||||||
<up-image width="76" height="76" radius="16" :src="item.productImg"
|
<up-image width="76" height="76" radius="16" :src="item.productImg"
|
||||||
v-if="item.productId!=-999"></up-image>
|
v-if="!item.isTemporary"></up-image>
|
||||||
|
<u-image width="56" height="56" radius="10"
|
||||||
|
v-else-if="item.isTemporary &&item.productName=='签子'"
|
||||||
|
src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png"></u-image>
|
||||||
<up-image width="76" height="76" radius="16"
|
<up-image width="76" height="76" radius="16"
|
||||||
:src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/table.png'"
|
:src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/table.png'"
|
||||||
mode="heightFix" v-else></up-image>
|
mode="heightFix" v-else></up-image>
|
||||||
@@ -174,8 +177,8 @@
|
|||||||
<view>{{listinfo.packFeess}}</view>
|
<view>{{listinfo.packFeess}}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
<!-- isTableFee == 0是不免除 -->
|
<!-- isTableFee == 0是不免除 -->
|
||||||
<view class="cell-item"
|
<view class="cell-item"
|
||||||
v-if="ordershopUserInfo.isTableFee == 0 && is_type == 0 && listinfo.Seatcharge != 0">
|
v-if="ordershopUserInfo.isTableFee == 0 && is_type == 0 && listinfo.Seatcharge != 0">
|
||||||
@@ -198,7 +201,7 @@
|
|||||||
<text class="price"> {{listinfo.payAmount}} </text>
|
<text class="price"> {{listinfo.payAmount}} </text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -67,7 +67,7 @@
|
|||||||
</rechargeFree>
|
</rechargeFree>
|
||||||
|
|
||||||
<!-- 支付方式 -->
|
<!-- 支付方式 -->
|
||||||
<paymentMethodes ref="paymentMethodref" :orderVIP="orderVIP" @groupChange="groupChange"
|
<paymentMethodes ref="paymentMethodref" :shopUserInfo="orderVIP" @groupChange="groupChange"
|
||||||
:disablePayType="disablePayType" :changeFreeenable="isBwc" v-model="paymentmethod"
|
:disablePayType="disablePayType" :changeFreeenable="isBwc" v-model="paymentmethod"
|
||||||
v-if="listinfo.status == 'unpaid' || !listinfo.id">
|
v-if="listinfo.status == 'unpaid' || !listinfo.id">
|
||||||
<template #bottom>
|
<template #bottom>
|
||||||
@@ -203,6 +203,7 @@
|
|||||||
useWebSocket
|
useWebSocket
|
||||||
} from "@/stores/carts-websocket.js";
|
} from "@/stores/carts-websocket.js";
|
||||||
import * as chatApi from "@/http/php/chat";
|
import * as chatApi from "@/http/php/chat";
|
||||||
|
import * as rechargeApi from '@/common/api/market/recharge.js'
|
||||||
|
|
||||||
import MsgListItem from '@/components/msg-list-item/msg-list-item.vue'
|
import MsgListItem from '@/components/msg-list-item/msg-list-item.vue'
|
||||||
|
|
||||||
@@ -576,7 +577,7 @@
|
|||||||
name: "微信支付",
|
name: "微信支付",
|
||||||
type: 2,
|
type: 2,
|
||||||
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/weChat.png",
|
url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/weChat.png",
|
||||||
payType: "wechatPay",
|
payType: "WECHAT",
|
||||||
};
|
};
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-ALIPAY
|
// #ifdef MP-ALIPAY
|
||||||
@@ -858,8 +859,6 @@
|
|||||||
icon: "none",
|
icon: "none",
|
||||||
});
|
});
|
||||||
const shopUserInfo = uni.cache.get("shopUserInfo");
|
const shopUserInfo = uni.cache.get("shopUserInfo");
|
||||||
console.log("shopUserInfo", shopUserInfo);
|
|
||||||
console.log("listinfo", listinfo);
|
|
||||||
if (shopUserInfo) {
|
if (shopUserInfo) {
|
||||||
if (shopUserInfo.userId == listinfo.userId) {
|
if (shopUserInfo.userId == listinfo.userId) {
|
||||||
pay_unlock();
|
pay_unlock();
|
||||||
@@ -1011,7 +1010,6 @@
|
|||||||
// 更新数据
|
// 更新数据
|
||||||
if (orderVIP.value) {
|
if (orderVIP.value) {
|
||||||
orderVIP.value = uni.cache.get("orderVIP");
|
orderVIP.value = uni.cache.get("orderVIP");
|
||||||
paymentMethodref.value.orderVIPfun(uni.cache.get("orderVIP"));
|
|
||||||
if (listinfo.id && ordershopUserInfo.value.registerType != "before") {
|
if (listinfo.id && ordershopUserInfo.value.registerType != "before") {
|
||||||
orderorderInfo();
|
orderorderInfo();
|
||||||
}
|
}
|
||||||
@@ -1034,7 +1032,7 @@
|
|||||||
console.log("跳转到加菜页面");
|
console.log("跳转到加菜页面");
|
||||||
const arr= getCurrentPages()
|
const arr= getCurrentPages()
|
||||||
console.log(arr);
|
console.log(arr);
|
||||||
if(arr[arr.length-1]&&arr[arr.length-1].route=='pages/product/index'){
|
if(arr.length>=2&&arr[arr.length-2]&&arr[arr.length-2].route=='pages/product/index'){
|
||||||
back();
|
back();
|
||||||
}else{
|
}else{
|
||||||
uni.cache.set('tableCode',listinfo.tableCode)
|
uni.cache.set('tableCode',listinfo.tableCode)
|
||||||
@@ -1113,10 +1111,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const limitTimeDiscountRes = ref(null)
|
const limitTimeDiscountRes = ref(null)
|
||||||
|
const rechargeConfig=ref(null)
|
||||||
async function init(opt) {
|
async function init(opt) {
|
||||||
await storeuser.actionsproductqueryProduct();
|
const res1= await storeuser.actionsproductqueryProduct();
|
||||||
|
orderVIP.value=res1
|
||||||
console.log("init");
|
console.log('orderVIP',orderVIP.value)
|
||||||
cartStore.clearOrderConfig();
|
cartStore.clearOrderConfig();
|
||||||
Object.assign(options, opt);
|
Object.assign(options, opt);
|
||||||
listinfo.id = options.orderId;
|
listinfo.id = options.orderId;
|
||||||
@@ -1146,10 +1145,23 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取台桌信息
|
||||||
|
let tableRes = await getTableInfo({
|
||||||
|
tableCode: options.tableCode || "",
|
||||||
|
});
|
||||||
|
console.log("tableRes", tableRes);
|
||||||
|
listinfo.tableName = tableRes?tableRes.name:'';
|
||||||
|
|
||||||
//获取店铺信息
|
//获取店铺信息
|
||||||
const shopInfoRes = await APIusershopInfodetail({
|
const shopInfoRes = await APIusershopInfodetail({
|
||||||
shopId: options.shopId,
|
shopId: options.shopId,
|
||||||
});
|
});
|
||||||
|
//智慧充值
|
||||||
|
const rechargeConfigRes=await rechargeApi.config({shopId: options.shopId})
|
||||||
|
if(rechargeConfigRes&&typeof rechargeConfigRes ==='object'){
|
||||||
|
rechargeConfig.value=rechargeConfigRes
|
||||||
|
}
|
||||||
//获取积分配置
|
//获取积分配置
|
||||||
pointsApi.pointsConfig().then(res => {
|
pointsApi.pointsConfig().then(res => {
|
||||||
cartStore.setPointDeductionRule(res);
|
cartStore.setPointDeductionRule(res);
|
||||||
@@ -1274,6 +1286,9 @@
|
|||||||
if (!isCanUseCharge.value) {
|
if (!isCanUseCharge.value) {
|
||||||
arr.add("余额支付");
|
arr.add("余额支付");
|
||||||
}
|
}
|
||||||
|
if(rechargeConfig.value&&!rechargeConfig.value.isEnable){
|
||||||
|
arr.add("余额支付");
|
||||||
|
}
|
||||||
|
|
||||||
return Array.from(arr);
|
return Array.from(arr);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -316,7 +316,7 @@
|
|||||||
const paymentmethod = reactive({
|
const paymentmethod = reactive({
|
||||||
radiovalue: 2,
|
radiovalue: 2,
|
||||||
paymentBtnText: "微信支付",
|
paymentBtnText: "微信支付",
|
||||||
payType: 'wechatPay'
|
payType: 'WECHAT'
|
||||||
})
|
})
|
||||||
|
|
||||||
const groupChange = async (e) => {
|
const groupChange = async (e) => {
|
||||||
@@ -583,7 +583,6 @@
|
|||||||
console.log(uni.cache.get('orderVIP'))
|
console.log(uni.cache.get('orderVIP'))
|
||||||
orderVIP.value = uni.cache.get('orderVIP')
|
orderVIP.value = uni.cache.get('orderVIP')
|
||||||
ordershopUserInfo.value = orderVIP.value.shopInfo
|
ordershopUserInfo.value = orderVIP.value.shopInfo
|
||||||
paymentMethodref.value.orderVIPfun(uni.cache.get('orderVIP'))
|
|
||||||
if (orderId.value) {
|
if (orderId.value) {
|
||||||
orderorderInfo()
|
orderorderInfo()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,9 +62,15 @@
|
|||||||
<view class="shop-info">
|
<view class="shop-info">
|
||||||
<view class="shop-item">
|
<view class="shop-item">
|
||||||
<view class="cover" v-for="(item1,index1) in item.goods" :key="index1">
|
<view class="cover" v-for="(item1,index1) in item.goods" :key="index1">
|
||||||
<u-image width="56" height="56" radius="10" :src='item1.productImg'
|
|
||||||
v-if="item1.productId!=-999"></u-image>
|
<u-image width="56" height="56" radius="10" :src="item1.productImg"
|
||||||
<u-image width="112" height="112" radius="20"
|
v-if="!item1.isTemporary"></u-image>
|
||||||
|
|
||||||
|
<u-image width="56" height="56" radius="10"
|
||||||
|
v-else-if="item1.isTemporary &&item1.productName=='签子'"
|
||||||
|
src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png"
|
||||||
|
></u-image>
|
||||||
|
<u-image width="56" height="56" radius="10"
|
||||||
:src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/table.png'"
|
:src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/table.png'"
|
||||||
mode="heightFix" v-else></u-image>
|
mode="heightFix" v-else></u-image>
|
||||||
<text class="productName"> {{ item1.productName }} </text>
|
<text class="productName"> {{ item1.productName }} </text>
|
||||||
@@ -130,32 +136,37 @@
|
|||||||
import {
|
import {
|
||||||
useNavbarStore
|
useNavbarStore
|
||||||
} from '@/stores/navbarStore';
|
} from '@/stores/navbarStore';
|
||||||
import {APIshopUserInfo} from '@/common/api/member.js'
|
import {
|
||||||
|
APIshopUserInfo
|
||||||
|
} from '@/common/api/member.js'
|
||||||
const store = useNavbarStore();
|
const store = useNavbarStore();
|
||||||
|
|
||||||
async function agignOrder(item){
|
async function agignOrder(item) {
|
||||||
await APIshopUserInfo({
|
await APIshopUserInfo({
|
||||||
shopId:item.shopId
|
shopId: item.shopId
|
||||||
}).then(shopUserInfo=>{
|
}).then(shopUserInfo => {
|
||||||
if(shopUserInfo){
|
if (shopUserInfo) {
|
||||||
uni.cache.set("dinersNum", 1);
|
uni.cache.set("dinersNum", 1);
|
||||||
uni.cache.set("tableCode", shopUserInfo.id);
|
uni.cache.set("tableCode", shopUserInfo.id);
|
||||||
uni.cache.set("shopId", item.shopId);
|
uni.cache.set("shopId", item.shopId);
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: "/pages/product/index?type=beforehand&order_id="+item.id+'&one_more_order=1',
|
url: "/pages/product/index?type=beforehand&order_id=" + item.id +
|
||||||
|
'&one_more_order=1&shopId='+item.shopId,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
function totalGoodsNum(arr){
|
|
||||||
if(!arr){
|
function totalGoodsNum(arr) {
|
||||||
|
if (!arr) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
return arr.reduce((prve,cur)=>{
|
return arr.reduce((prve, cur) => {
|
||||||
return prve+cur.num
|
return prve + cur.num
|
||||||
},0)
|
}, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
function isRemoveOrder(item) {
|
function isRemoveOrder(item) {
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
@@ -578,7 +589,8 @@
|
|||||||
.ml-20 {
|
.ml-20 {
|
||||||
margin-left: 20rpx;
|
margin-left: 20rpx;
|
||||||
}
|
}
|
||||||
.take_food_number{
|
|
||||||
|
.take_food_number {
|
||||||
padding: 20rpx;
|
padding: 20rpx;
|
||||||
background-color: #F8F8F8;
|
background-color: #F8F8F8;
|
||||||
margin-left: 36rpx;
|
margin-left: 36rpx;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -26,17 +26,18 @@
|
|||||||
<view class="limit-discount" v-if="showLimitDiscount(item)">
|
<view class="limit-discount" v-if="showLimitDiscount(item)">
|
||||||
限时折扣
|
限时折扣
|
||||||
</view>
|
</view>
|
||||||
<up-image :src="item.coverImg" width="124rpx" height="124rpx" mode="aspectFill"
|
<up-image v-if="!item.cartListinfo.is_temporary" :src="item.coverImg" width="124rpx" height="124rpx" mode="aspectFill"
|
||||||
radius="10"></up-image>
|
radius="10"></up-image>
|
||||||
|
<up-image v-else-if="item.cartListinfo.is_temporary&&item.cartListinfo.product_name=='签子'" src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png" width="124rpx" height="124rpx" mode="aspectFill"
|
||||||
|
radius="10"></up-image>
|
||||||
|
<up-image v-else width="124rpx" height="124rpx" mode="aspectFill"
|
||||||
|
radius="10"></up-image>
|
||||||
</view>
|
</view>
|
||||||
<view class="info">
|
<view class="info">
|
||||||
<view class="name">
|
<view class="name" v-if=" item.cartListinfo.is_temporary == 1">
|
||||||
{{
|
{{item.cartListinfo.product_name||item.cartListinfo.name|| item.name}}
|
||||||
item.cartListinfo.is_temporary == 1
|
|
||||||
? "临时菜"
|
|
||||||
: item.name
|
|
||||||
}}
|
|
||||||
</view>
|
</view>
|
||||||
|
<view class="name" v-else>{{item.name}}</view>
|
||||||
<view class="select-sku-wrap" v-if="item.type == 'sku'">
|
<view class="select-sku-wrap" v-if="item.type == 'sku'">
|
||||||
<text v-for="i in item.skuList" :key="i.id">
|
<text v-for="i in item.skuList" :key="i.id">
|
||||||
{{ item.cartListinfo.sku_id == i.id ? i.name : "" }}
|
{{ item.cartListinfo.sku_id == i.id ? i.name : "" }}
|
||||||
@@ -206,9 +207,6 @@
|
|||||||
limitDiscount: props.limitDiscount.id ? props.limitDiscount : null,
|
limitDiscount: props.limitDiscount.id ? props.limitDiscount : null,
|
||||||
shopUserInfo: shopUserInfo,
|
shopUserInfo: shopUserInfo,
|
||||||
});
|
});
|
||||||
if (goods.name == "纯生纯生纯生") {
|
|
||||||
console.log("returnRealPrice", price);
|
|
||||||
}
|
|
||||||
return price;
|
return price;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,8 +52,8 @@
|
|||||||
|
|
||||||
|
|
||||||
<view class="relative">
|
<view class="relative">
|
||||||
<image @click.stop="getProductImgs(item)" class="panelfiveitemimage" :src="item.coverImg"
|
<image @click.stop="getProductImgs(item)" class="panelfiveitemimage"
|
||||||
mode="aspectFill"></image>
|
:src="item.coverImg" mode="aspectFill"></image>
|
||||||
<view class="limitDiscount" v-if="showLimitDiscount(item)">
|
<view class="limitDiscount" v-if="showLimitDiscount(item)">
|
||||||
限时折扣{{ limitDiscountCountdown }}</view>
|
限时折扣{{ limitDiscountCountdown }}</view>
|
||||||
<!-- <view class="limitDiscount" v-if="item.is_time_discount">
|
<!-- <view class="limitDiscount" v-if="item.is_time_discount">
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
:class="shopInfo.isVip == 0 || shopInfo.isMemberPrice == 0 ? 'lineThrough' : ''">¥</text>
|
:class="shopInfo.isVip == 0 || shopInfo.isMemberPrice == 0 ? 'lineThrough' : ''">¥</text>
|
||||||
<!-- 会员价与价格 -->
|
<!-- 会员价与价格 -->
|
||||||
<text class="price">
|
<text class="price">
|
||||||
{{ shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1 ? item.memberPrice || item.salePrice : item.salePrice }}
|
{{ shopUserInfo.isVip == 1 && shopUserInfo.isMemberPrice == 1 ? item.memberPrice || item.salePrice : item.salePrice }}
|
||||||
</text>
|
</text>
|
||||||
<!-- 单位 -->
|
<!-- 单位 -->
|
||||||
<text class="unit" v-if="item.unitName">/{{ item.unitName }}</text>
|
<text class="unit" v-if="item.unitName">/{{ item.unitName }}</text>
|
||||||
@@ -148,8 +148,10 @@
|
|||||||
@click.stop="clickspecifications(item, index, index1)">
|
@click.stop="clickspecifications(item, index, index1)">
|
||||||
<text class="t no-wrap" v-if="item.groupType == '1'">选择套餐</text>
|
<text class="t no-wrap" v-if="item.groupType == '1'">选择套餐</text>
|
||||||
<text class="t" v-else>选规格</text>
|
<text class="t" v-else>选规格</text>
|
||||||
|
<!-- <text class="dot num"
|
||||||
|
v-if="item.cartNumber > 0">{{ ifcartNumber(item) < 99 ? ifcartNumber(item) : '99+' }}</text> -->
|
||||||
<text class="dot num"
|
<text class="dot num"
|
||||||
v-if="item.cartNumber > 0">{{ ifcartNumber(item) < 99 ? ifcartNumber(item) : '99+' }}</text>
|
v-if="returnGoodsImCartNum(item)">{{ returnGoodsImCartNum(item) < 99 ? returnGoodsImCartNum(item) : '99+' }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="Controls" v-else>
|
<view class="Controls" v-else>
|
||||||
<view class="btn" v-if="item.cartNumber != '0'">
|
<view class="btn" v-if="item.cartNumber != '0'">
|
||||||
@@ -158,7 +160,9 @@
|
|||||||
<!-- <view class="btnClick"
|
<!-- <view class="btnClick"
|
||||||
@tap.stop="$u.throttle(() => singleclick(item, '-'), 500)"></view> -->
|
@tap.stop="$u.throttle(() => singleclick(item, '-'), 500)"></view> -->
|
||||||
</view>
|
</view>
|
||||||
<text class="num">{{ ifcartNumber(item) }}</text>
|
<!-- <text class="num">{{ ifcartNumber(item) }}</text> -->
|
||||||
|
<text class="dot num"
|
||||||
|
v-if="returnGoodsImCartNum(item)">{{ returnGoodsImCartNum(item) < 99 ? returnGoodsImCartNum(item) : '99+' }}</text>
|
||||||
<view class="btn">
|
<view class="btn">
|
||||||
<up-icon name="plus-circle-fill" color="#E9AB7A" size="25"></up-icon>
|
<up-icon name="plus-circle-fill" color="#E9AB7A" size="25"></up-icon>
|
||||||
<!-- <view class="btnClick"
|
<!-- <view class="btnClick"
|
||||||
@@ -197,8 +201,8 @@
|
|||||||
<view class="goods" @click="clickspecifications(item1, index, index1)"
|
<view class="goods" @click="clickspecifications(item1, index, index1)"
|
||||||
v-for="(item1, index1) in item.productList" :key="item1.id">
|
v-for="(item1, index1) in item.productList" :key="item1.id">
|
||||||
<view class="relative">
|
<view class="relative">
|
||||||
<image class="goodsImg" @click.stop="getProductImgs(item1)" v-if="item1.coverImg != null"
|
<image class="goodsImg" @click.stop="getProductImgs(item1)"
|
||||||
:lazy-load="true"
|
v-if="item1.coverImg != null" :lazy-load="true"
|
||||||
:src="`${item1.coverImg}${!item1.imgLoad ? '?x-oss-process=image/resize,m_lfit,w_150,h_150' : ''}`"
|
:src="`${item1.coverImg}${!item1.imgLoad ? '?x-oss-process=image/resize,m_lfit,w_150,h_150' : ''}`"
|
||||||
mode="aspectFill"></image>
|
mode="aspectFill"></image>
|
||||||
<image class="goodsImg"
|
<image class="goodsImg"
|
||||||
@@ -252,7 +256,7 @@
|
|||||||
<view class="money">
|
<view class="money">
|
||||||
<view>¥</view>
|
<view>¥</view>
|
||||||
<text class="money_num" style="margin-right: 10rpx">
|
<text class="money_num" style="margin-right: 10rpx">
|
||||||
{{ shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1 ? item1.memberPrice || item1.salePrice : item1.salePrice }}
|
{{ shopUserInfo.isVip == 1 && shopUserInfo.isMemberPrice == 1 ? item1.memberPrice || item1.salePrice : item1.salePrice }}
|
||||||
</text>
|
</text>
|
||||||
<text v-if="item1.unitName">/{{ item1.unitName }}</text>
|
<text v-if="item1.unitName">/{{ item1.unitName }}</text>
|
||||||
</view>
|
</view>
|
||||||
@@ -288,8 +292,11 @@
|
|||||||
@click.stop="clickspecifications(item1, index, index1)">
|
@click.stop="clickspecifications(item1, index, index1)">
|
||||||
<text class="t no-wrap" v-if="item1.groupType == '1'">选择套餐</text>
|
<text class="t no-wrap" v-if="item1.groupType == '1'">选择套餐</text>
|
||||||
<text class="t" v-else>选规格</text>
|
<text class="t" v-else>选规格</text>
|
||||||
|
<!-- <text class="dot num"
|
||||||
|
v-if="item1.cartNumber > 0">{{ ifcartNumber(item1) < 99 ? ifcartNumber(item1) : '99+' }}</text> -->
|
||||||
|
|
||||||
<text class="dot num"
|
<text class="dot num"
|
||||||
v-if="item1.cartNumber > 0">{{ ifcartNumber(item1) < 99 ? ifcartNumber(item1) : '99+' }}</text>
|
v-if="returnGoodsImCartNum(item1)">{{ returnGoodsImCartNum(item1) < 99 ? returnGoodsImCartNum(item1) : '99+' }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="Controls" v-else>
|
<view class="Controls" v-else>
|
||||||
@@ -437,9 +444,39 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 推荐搭配 -->
|
||||||
|
<view class="u-m-t-48 u-p-30">
|
||||||
|
<view class="font-bold u-font-32 ">推荐搭配</view>
|
||||||
|
<view class="u-flex recommand-goods">
|
||||||
|
<view class=" item" v-for="(item,index) in 6" :key="index">
|
||||||
|
<up-image width="210rpx" height="210rpx" radius="12rpx"></up-image>
|
||||||
|
<view class="info">
|
||||||
|
<view class="u-line-2 name u-m-t-10 u-font-32 font-500">
|
||||||
|
商品名
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="u-flex u-row-between">
|
||||||
|
<view class="font-bold">
|
||||||
|
<text class="u-font-24">¥</text>
|
||||||
|
<text class="u-font-32">40</text>
|
||||||
|
</view>
|
||||||
|
<view class="btn">
|
||||||
|
<up-icon name="plus-circle-fill" color="#E9AB7A" size="25"></up-icon>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
<!-- 占位 -->
|
<!-- 占位 -->
|
||||||
<view style="height: 42rpx;"></view>
|
|
||||||
<view class="shop_bottom">
|
<view class="shop_bottom">
|
||||||
<view class="flex-between">
|
<view class="flex-between">
|
||||||
<view class="price price-sku"
|
<view class="price price-sku"
|
||||||
@@ -453,7 +490,7 @@
|
|||||||
|
|
||||||
<text class="num" v-if="false">
|
<text class="num" v-if="false">
|
||||||
{{
|
{{
|
||||||
shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1
|
shopUserInfo.isVip == 1 && shopUserInfo.isMemberPrice == 1
|
||||||
? specifications.item.result.memberPrice || specifications.item.result.salePrice
|
? specifications.item.result.memberPrice || specifications.item.result.salePrice
|
||||||
: specifications.item.result.salePrice
|
: specifications.item.result.salePrice
|
||||||
}}
|
}}
|
||||||
@@ -471,7 +508,7 @@
|
|||||||
</view>
|
</view>
|
||||||
<text class="num" v-if="false">
|
<text class="num" v-if="false">
|
||||||
{{
|
{{
|
||||||
shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1
|
shopUserInfo.isVip == 1 && shopUserInfo.isMemberPrice == 1
|
||||||
? specifications.item.memberPrice || specifications.item.salePrice
|
? specifications.item.memberPrice || specifications.item.salePrice
|
||||||
: specifications.item.salePrice
|
: specifications.item.salePrice
|
||||||
}}
|
}}
|
||||||
@@ -536,7 +573,13 @@
|
|||||||
<Loading :isLoading="!useSocket.isConnected" />
|
<Loading :isLoading="!useSocket.isConnected" />
|
||||||
<ModalList></ModalList>
|
<ModalList></ModalList>
|
||||||
<recommendGoodsModal v-if="isDataLoaded" @onBuyClick="onBuyClick"></recommendGoodsModal>
|
<recommendGoodsModal v-if="isDataLoaded" @onBuyClick="onBuyClick"></recommendGoodsModal>
|
||||||
<goodsModal></goodsModal>
|
|
||||||
|
<view v-for="(item,index) in goodsModalList" :key="index">
|
||||||
|
<goodsModal :key="index" v-model="item.show" :goods="item.goods" @prveImgs="prveImgs"
|
||||||
|
@shareClick="shareClick" @close="goodsModalClose(index)" @websocketsendMessage="websocketsendMessage"
|
||||||
|
@modalAdd="modalAdd" :GoodsIDInCartNumMap="GoodsIDInCartNumMap"></goodsModal>
|
||||||
|
</view>
|
||||||
|
|
||||||
<xbSwiperPreview :visable="showPrveImg" :imgs="prveImgsList" @update:visable="updateShowPrveImg">
|
<xbSwiperPreview :visable="showPrveImg" :imgs="prveImgsList" @update:visable="updateShowPrveImg">
|
||||||
</xbSwiperPreview>
|
</xbSwiperPreview>
|
||||||
<!-- 显示选择人数popup -->
|
<!-- 显示选择人数popup -->
|
||||||
@@ -594,7 +637,8 @@
|
|||||||
productminiApphotsquery,
|
productminiApphotsquery,
|
||||||
APIgroupquery,
|
APIgroupquery,
|
||||||
APIminiAppinfo,
|
APIminiAppinfo,
|
||||||
APIminiAppskuinfo
|
APIminiAppskuinfo,
|
||||||
|
productRelated
|
||||||
} from '@/common/api/product/product.js';
|
} from '@/common/api/product/product.js';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -671,8 +715,8 @@
|
|||||||
import {
|
import {
|
||||||
useNavbarStore
|
useNavbarStore
|
||||||
} from '@/stores/navbarStore';
|
} from '@/stores/navbarStore';
|
||||||
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
useWebSocket
|
useWebSocket
|
||||||
} from '@/stores/carts-websocket.js';
|
} from '@/stores/carts-websocket.js';
|
||||||
@@ -700,6 +744,11 @@
|
|||||||
import {
|
import {
|
||||||
useCartStore
|
useCartStore
|
||||||
} from '@/stores/order.js';
|
} from '@/stores/order.js';
|
||||||
|
import {
|
||||||
|
computed,
|
||||||
|
provide,
|
||||||
|
reactive
|
||||||
|
} from 'vue';
|
||||||
const cartStore = useCartStore();
|
const cartStore = useCartStore();
|
||||||
/**
|
/**
|
||||||
* store本地存储 end
|
* store本地存储 end
|
||||||
@@ -710,7 +759,6 @@
|
|||||||
proxy
|
proxy
|
||||||
} = getCurrentInstance();
|
} = getCurrentInstance();
|
||||||
|
|
||||||
|
|
||||||
//点单智能推荐
|
//点单智能推荐
|
||||||
function onBuyClick(item) {
|
function onBuyClick(item) {
|
||||||
let index = -1;
|
let index = -1;
|
||||||
@@ -750,6 +798,7 @@
|
|||||||
/**
|
/**
|
||||||
* 通用数据合集 start
|
* 通用数据合集 start
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// 门店信息
|
// 门店信息
|
||||||
const shopInfo = reactive({});
|
const shopInfo = reactive({});
|
||||||
Object.assign(shopInfo, uni.cache.get('shopInfo'));
|
Object.assign(shopInfo, uni.cache.get('shopInfo'));
|
||||||
@@ -768,11 +817,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 分步取值 + 每层兜底,避免某一环不存在导致 undefined
|
const shopExtend = ref('');
|
||||||
const shopExtendShopTable = uni.cache.get('shopTable') || {}; // 兜底空对象
|
|
||||||
const shopExtendMap = shopExtendShopTable.shopExtendMap || {}; // 兜底空对象
|
|
||||||
// 最终声明:即使 shopinfo_bg 不存在,也兜底为空字符串/默认值
|
|
||||||
const shopExtend = ref(shopExtendMap.shopinfo_bg || '');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用数据合集 end
|
* 通用数据合集 end
|
||||||
@@ -804,6 +849,35 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 购物车对应的商品数
|
||||||
|
const GoodsIDInCartNumMap = computed(() => {
|
||||||
|
const map = {}
|
||||||
|
for (let cart of cartStore.carts) {
|
||||||
|
if (map[cart.product_id]) {
|
||||||
|
map[cart.product_id] += cart.number * 1
|
||||||
|
} else {
|
||||||
|
map[cart.product_id] = cart.number * 1
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return map
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回购物车对应的商品数量
|
||||||
|
*/
|
||||||
|
function returnGoodsImCartNum(goods) {
|
||||||
|
if (!goods) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
if (GoodsIDInCartNumMap.value.hasOwnProperty(goods.id)) {
|
||||||
|
return GoodsIDInCartNumMap.value[goods.id]
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 获取商品数据
|
// 获取商品数据
|
||||||
const shopProductList = reactive({
|
const shopProductList = reactive({
|
||||||
hots: [],
|
hots: [],
|
||||||
@@ -1269,9 +1343,9 @@
|
|||||||
//预览图
|
//预览图
|
||||||
const showPrveImg = ref(false);
|
const showPrveImg = ref(false);
|
||||||
const prveImgsList = ref([]);
|
const prveImgsList = ref([]);
|
||||||
|
|
||||||
function updateShowPrveImg(e){
|
function updateShowPrveImg(e) {
|
||||||
showPrveImg.value=e
|
showPrveImg.value = e
|
||||||
}
|
}
|
||||||
|
|
||||||
function prveImgs(images) {
|
function prveImgs(images) {
|
||||||
@@ -1285,14 +1359,24 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function getProductImgs(item) {
|
async function getProductImgs(item) {
|
||||||
console.log('getProductImgs',item)
|
console.log('getProductImgs', item)
|
||||||
let res = await APIminiAppinfo(item.id);
|
let res = await APIminiAppinfo(item.id);
|
||||||
prveImgs(res.images);
|
prveImgs(res.images);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const goodsModalList = ref([])
|
||||||
|
|
||||||
|
function goodsModalClose(index) {
|
||||||
|
goodsModalList.value.splice(index, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
function modalAdd(item) {
|
||||||
|
clickspecifications(item)
|
||||||
|
}
|
||||||
|
|
||||||
//获取多规格数据
|
//获取多规格数据
|
||||||
const clickspecifications = async (item, index, indexs, type) => {
|
const clickspecifications = async (item, index, indexs, type) => {
|
||||||
console.log('clickspecifications',item);
|
console.log('clickspecifications', item);
|
||||||
// 商品类型 single-单规格商品 sku-多规格商品 package-套餐商品 weight-称重商品 coupon-团购券
|
// 商品类型 single-单规格商品 sku-多规格商品 package-套餐商品 weight-称重商品 coupon-团购券
|
||||||
// if (
|
// if (
|
||||||
// item.isSoldStock == 1 ||
|
// item.isSoldStock == 1 ||
|
||||||
@@ -1305,7 +1389,10 @@
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
if (item.isSoldStock == 1 || (item.isSaleTime == 0 && !item.isSaleTimeshow)) {
|
if (item.isSoldStock == 1 || (item.isSaleTime == 0 && !item.isSaleTimeshow)) {
|
||||||
return false;
|
return uni.showToast({
|
||||||
|
title: '商品已下架或不在可售时间内',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
shopCartNumber.value = 0;
|
shopCartNumber.value = 0;
|
||||||
@@ -1350,7 +1437,16 @@
|
|||||||
.filter(([_, value]) => value.length > 0));
|
.filter(([_, value]) => value.length > 0));
|
||||||
// 给默认数量
|
// 给默认数量
|
||||||
specifications.item.amountcartNumber = 0;
|
specifications.item.amountcartNumber = 0;
|
||||||
showShopsku.value = true;
|
// showShopsku.value = true;
|
||||||
|
goodsModalList.value.push({
|
||||||
|
show: true,
|
||||||
|
goods: {
|
||||||
|
...specifications.item,
|
||||||
|
/*过滤掉只有一个规格且下架的商品或者skuList为空的商品*/
|
||||||
|
relatedRecommendJson: (specifications.item.relatedRecommendJson || []).filter(v => v
|
||||||
|
.skuList && v.skuList.length)
|
||||||
|
}
|
||||||
|
})
|
||||||
};
|
};
|
||||||
// 判断商品是否在可售时间内
|
// 判断商品是否在可售时间内
|
||||||
const isProductAvailable = async (sellDaysStr, startTimeStr, endTimeStr) => {
|
const isProductAvailable = async (sellDaysStr, startTimeStr, endTimeStr) => {
|
||||||
@@ -1585,20 +1681,27 @@
|
|||||||
// 返回商品对应sku数据
|
// 返回商品对应sku数据
|
||||||
|
|
||||||
function cartInit(arr) {
|
function cartInit(arr) {
|
||||||
|
|
||||||
const result = []
|
const result = []
|
||||||
console.log('cartInitArr',arr);
|
|
||||||
console.log('allGoodsArr',allGoodsArr);
|
|
||||||
cartStore.carts = arr.map(v => {
|
cartStore.carts = arr.map(v => {
|
||||||
const goods = allGoodsArr.find(g => g.id == v.product_id)
|
const goods = cartStore.allGoodsArr.find(g => g.id == v.product_id)
|
||||||
const goodsSkuList = goods?goods.skuList : []
|
const goodsSkuList = goods ? goods.skuList : []
|
||||||
const findSku = goodsSkuList.find(sku => sku.id == v.sku_id)
|
const findSku = goodsSkuList.find(sku => sku.id == v.sku_id)
|
||||||
const memberPrice = findSku ? findSku.memberPrice : 0
|
const memberPrice = findSku ? findSku.memberPrice : 0
|
||||||
|
const is_temporary = v.is_temporary || v.isTemporary
|
||||||
const is_time_discount = limitUtils.canUseLimitTimeDiscount({
|
const is_time_discount = limitUtils.canUseLimitTimeDiscount({
|
||||||
...v,
|
...v,
|
||||||
memberPrice
|
memberPrice
|
||||||
}, cartStore.limitTimeDiscount, shopInfo,
|
}, cartStore.limitTimeDiscount, shopInfo,
|
||||||
shopUserInfo.value, 'product_id');
|
shopUserInfo.value, 'product_id');
|
||||||
if(!goods){
|
if (!goods && !is_temporary) {
|
||||||
|
console.log('删除未匹配到的商品', {
|
||||||
|
id: v.id,
|
||||||
|
operate_type: "del",
|
||||||
|
table_code: uni.cache.get('tableCode'),
|
||||||
|
shop_id: uni.cache.get('shopId'),
|
||||||
|
type: "shopping",
|
||||||
|
})
|
||||||
useSocket.sendMessage({
|
useSocket.sendMessage({
|
||||||
id: v.id,
|
id: v.id,
|
||||||
operate_type: "del",
|
operate_type: "del",
|
||||||
@@ -1613,7 +1716,7 @@
|
|||||||
is_time_discount: is_time_discount ? 1 : 0,
|
is_time_discount: is_time_discount ? 1 : 0,
|
||||||
memberPrice
|
memberPrice
|
||||||
}
|
}
|
||||||
}).filter(v=>v)
|
}).filter(v => v)
|
||||||
|
|
||||||
for (let cart of arr) {
|
for (let cart of arr) {
|
||||||
const findItem = cartStore.carts.find(v => v.id == cart.id)
|
const findItem = cartStore.carts.find(v => v.id == cart.id)
|
||||||
@@ -1647,7 +1750,7 @@
|
|||||||
isLoading.value = false;
|
isLoading.value = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
console.log('product index 收到消息', Message);
|
|
||||||
// 检查消息是否已经处理过
|
// 检查消息是否已经处理过
|
||||||
if (processedMessageIds.has(Message.msg_id)) {
|
if (processedMessageIds.has(Message.msg_id)) {
|
||||||
return;
|
return;
|
||||||
@@ -1658,8 +1761,11 @@
|
|||||||
if (Message.operate_type == 'init') {
|
if (Message.operate_type == 'init') {
|
||||||
// cartStore.limitTimeDiscount = Message.time_dis_info;
|
// cartStore.limitTimeDiscount = Message.time_dis_info;
|
||||||
cartInit(Message.data)
|
cartInit(Message.data)
|
||||||
|
try {
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
|
} catch (error) {
|
||||||
|
//TODO handle the exception
|
||||||
|
}
|
||||||
isLoading.value = false;
|
isLoading.value = false;
|
||||||
|
|
||||||
if (!socketInitFinished) {
|
if (!socketInitFinished) {
|
||||||
@@ -1790,7 +1896,7 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//除去p 每次返回都回执消息
|
//除去p 每次返回都回执消息
|
||||||
await websocketsendMessage({
|
await websocketsendMessage({
|
||||||
@@ -2084,11 +2190,11 @@
|
|||||||
}
|
}
|
||||||
return currentTime >= startTime && currentTime <= endTime;
|
return currentTime >= startTime && currentTime <= endTime;
|
||||||
});
|
});
|
||||||
let allGoodsArr=[]
|
const allGoodsArr = ref([])
|
||||||
// 列表请求
|
// 列表请求
|
||||||
const productqueryProduct = async () => {
|
const productqueryProduct = async () => {
|
||||||
cartStore.goodsIsloading = false;
|
cartStore.goodsIsloading = false;
|
||||||
allGoodsArr=[]
|
allGoodsArr.value = []
|
||||||
try {
|
try {
|
||||||
shopProductList.hots = await productminiApphotsquery();
|
shopProductList.hots = await productminiApphotsquery();
|
||||||
shopProductList.productInfo = await APIgroupquery();
|
shopProductList.productInfo = await APIgroupquery();
|
||||||
@@ -2100,40 +2206,46 @@
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
uni.pro.switchTab('index/index');
|
uni.pro.switchTab('index/index');
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
return; // 出错直接返回,避免后续逻辑
|
||||||
}
|
}
|
||||||
if (shopProductList.productInfo.length > 0 || shopProductList.hots.length > 0) {
|
|
||||||
//TODO handle the exception
|
|
||||||
//第一步:将所有商品的 cartNumber 初始化为 0
|
|
||||||
shopProductList.productInfo.forEach((group) => {
|
|
||||||
group.productList.forEach(async (product) => {
|
|
||||||
product.cartNumber = 0;
|
|
||||||
product.isSaleTimeshow = await isProductAvailable(product.days, product
|
|
||||||
.startTime, product.endTime);
|
|
||||||
|
|
||||||
allGoodsArr.push(product)
|
|
||||||
|
|
||||||
|
if (shopProductList.productInfo.length > 0 || shopProductList.hots.length > 0) {
|
||||||
|
// 第一步:处理productInfo(替换forEach为for...of,支持await)
|
||||||
|
for (const group of shopProductList.productInfo) {
|
||||||
|
for (const product of group.productList) {
|
||||||
|
product.cartNumber = 0;
|
||||||
|
// 等待异步函数执行完成后,再push
|
||||||
|
product.isSaleTimeshow = await isProductAvailable(
|
||||||
|
product.days,
|
||||||
|
product.startTime,
|
||||||
|
product.endTime
|
||||||
|
);
|
||||||
|
allGoodsArr.value.push(product);
|
||||||
cartStore.setGoodsMap(product.id, product);
|
cartStore.setGoodsMap(product.id, product);
|
||||||
});
|
}
|
||||||
});
|
}
|
||||||
shopProductList.hots.forEach(async (i) => {
|
|
||||||
|
// 第二步:处理hots(同理替换forEach为for...of)
|
||||||
|
for (const i of shopProductList.hots) {
|
||||||
i.cartNumber = 0;
|
i.cartNumber = 0;
|
||||||
i.isSaleTimeshow = await isProductAvailable(i.days, i.startTime, i.endTime);
|
i.isSaleTimeshow = await isProductAvailable(i.days, i.startTime, i.endTime);
|
||||||
allGoodsArr.push(i)
|
allGoodsArr.value.push(i);
|
||||||
cartStore.setGoodsMap(i.id, i);
|
cartStore.setGoodsMap(i.id, i);
|
||||||
});
|
|
||||||
console.log('shopProductList', shopProductList);
|
|
||||||
|
|
||||||
if(cartStore.carts.length>0){
|
|
||||||
cartInit(cartStore.carts)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 此时所有异步操作完成,allGoodsArr已有数据
|
||||||
|
// console.log('allGoodsArr', allGoodsArr);
|
||||||
|
// console.log('shopProductList', shopProductList);
|
||||||
|
console.log('cartStore.carts', cartStore.carts)
|
||||||
|
cartStore.allGoodsArr = allGoodsArr.value
|
||||||
|
if (cartStore.carts.length > 0) {
|
||||||
|
cartInit(cartStore.carts);
|
||||||
|
}
|
||||||
|
|
||||||
cartStore.goodsIsloading = true;
|
cartStore.goodsIsloading = true;
|
||||||
scrollTopSize.value = 0;
|
scrollTopSize.value = 0;
|
||||||
topArr.value = [];
|
topArr.value = [];
|
||||||
// userStore.actionsAPIuser()
|
|
||||||
// 数据可以更新
|
|
||||||
isDataLoaded.value = true;
|
isDataLoaded.value = true;
|
||||||
// 历史订单
|
|
||||||
Historicalorders();
|
Historicalorders();
|
||||||
updateProductQuantities();
|
updateProductQuantities();
|
||||||
} else {
|
} else {
|
||||||
@@ -2147,6 +2259,16 @@
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pageOptions.showGoodsId) {
|
||||||
|
const item = allGoodsArr.value.find(v => v.id == pageOptions.showGoodsId)
|
||||||
|
if (item) {
|
||||||
|
clickspecifications(item)
|
||||||
|
}
|
||||||
|
pageOptions.showGoodsId = null
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
provide('cartStore', cartStore);
|
provide('cartStore', cartStore);
|
||||||
@@ -2328,28 +2450,90 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
import {
|
||||||
|
shareMixin,
|
||||||
|
handleMixinOnLoad,
|
||||||
|
returnQuery,
|
||||||
|
jsonToUrl,
|
||||||
|
wxShare,
|
||||||
|
returnCommonQuery
|
||||||
|
} from '@/utils/share.js'
|
||||||
|
// defineOptions({
|
||||||
|
// mixins: [shareMixin],
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
let isGoodsShare = ref(false)
|
||||||
|
|
||||||
|
function shareClick() {
|
||||||
|
isGoodsShare.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
async function onShare() {
|
||||||
|
const queryJson = await returnCommonQuery()
|
||||||
|
let query = jsonToUrl(queryJson)
|
||||||
|
query += '&type=beforehand'
|
||||||
|
let json = {}
|
||||||
|
const shopName = uni.cache.get('shopInfo').shopName || ''
|
||||||
|
if (goodsModalList.value.length && isGoodsShare.value) {
|
||||||
|
const goods = goodsModalList.value[goodsModalList.value.length - 1].goods
|
||||||
|
query += '&showGoodsId=' + goods.id
|
||||||
|
json.title = goods.name + (shopName ? `-${shopName}` : '')
|
||||||
|
json.imageUrl = goods.coverImg
|
||||||
|
json.showGoodsId = goods.id
|
||||||
|
} else {
|
||||||
|
json.title = shopName
|
||||||
|
json.imageUrl = uni.cache.get('shopInfo').logo || ''
|
||||||
|
}
|
||||||
|
console.log('onShareAppMessage', {
|
||||||
|
query,
|
||||||
|
...json,
|
||||||
|
path: '/pages/product/index' + '?' + query
|
||||||
|
});
|
||||||
|
return wxShare({
|
||||||
|
query,
|
||||||
|
...json,
|
||||||
|
path: '/pages/product/index' + '?' + query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onShareAppMessage(onShare)
|
||||||
|
|
||||||
|
onShareTimeline(onShare)
|
||||||
|
|
||||||
|
const pageOptions = reactive({})
|
||||||
onLoad(async (e) => {
|
onLoad(async (e) => {
|
||||||
|
Object.assign(pageOptions, e)
|
||||||
if (e.type) {
|
if (e.type) {
|
||||||
orderType.value = e.type;
|
orderType.value = e.type;
|
||||||
}
|
}
|
||||||
//获取用户信息
|
|
||||||
const userInfo = await APIshopUserInfo({
|
await handleMixinOnLoad({
|
||||||
shopId: uni.cache.get('shopId')
|
...e,
|
||||||
|
shopId: e.shopId || uni.cache.get('shopId')
|
||||||
})
|
})
|
||||||
//获取店铺信息
|
|
||||||
const shopInfoRes = await APIusershopInfodetail({
|
if(userStore.shopUserInfo.shopExtendList){
|
||||||
shopId: uni.cache.get('shopId')
|
shopExtend.value=userStore.shopUserInfo.shopExtendList.find(v=>v.autoKey=='shopinfo_bg')||''
|
||||||
});
|
|
||||||
if (shopInfoRes && shopInfoRes.shopInfo) {
|
|
||||||
Object.assign(shopInfo, shopInfoRes.shopInfo);
|
|
||||||
uni.cache.set('shopInfo', shopInfoRes.shopInfo)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// //获取用户信息
|
||||||
if (userInfo && typeof userInfo === 'object') {
|
// const userInfo = await APIshopUserInfo({
|
||||||
shopUserInfo.value = userInfo
|
// shopId: uni.cache.get('shopId')
|
||||||
uni.cache.set('shopUserInfo', userInfo)
|
// })
|
||||||
|
// //获取店铺信息
|
||||||
|
// const shopInfoRes = await APIusershopInfodetail({
|
||||||
|
// shopId: uni.cache.get('shopId')
|
||||||
|
// });
|
||||||
|
Object.assign(shopInfo, userStore.shopInfo);
|
||||||
|
if (e.type == 'beforehand') {
|
||||||
|
uni.cache.set("tableCode", userStore.shopUserInfo.id);
|
||||||
|
options.initMessage.table_code = userStore.shopUserInfo.id
|
||||||
}
|
}
|
||||||
|
options.initMessage.shop_id = userStore.shopInfo.id
|
||||||
|
shopUserInfo.value = userStore.shopUserInfo
|
||||||
|
|
||||||
await productqueryProduct();
|
await productqueryProduct();
|
||||||
|
|
||||||
const extraInitPar = {}
|
const extraInitPar = {}
|
||||||
@@ -2361,6 +2545,11 @@
|
|||||||
|
|
||||||
const time_dis_info = await getLimitDiscount()
|
const time_dis_info = await getLimitDiscount()
|
||||||
options.initMessage.time_dis_info = time_dis_info
|
options.initMessage.time_dis_info = time_dis_info
|
||||||
|
|
||||||
|
console.log('options.initMessage', {
|
||||||
|
...options.initMessage,
|
||||||
|
...extraInitPar,
|
||||||
|
})
|
||||||
useSocket.connect({
|
useSocket.connect({
|
||||||
...options.initMessage,
|
...options.initMessage,
|
||||||
...extraInitPar,
|
...extraInitPar,
|
||||||
@@ -2381,7 +2570,7 @@
|
|||||||
tableCode: uni.cache.get('tableCode')
|
tableCode: uni.cache.get('tableCode')
|
||||||
});
|
});
|
||||||
oldOrder.value = res;
|
oldOrder.value = res;
|
||||||
if (res && res.id && shopInfo.registerType == 'after'&&!e.noJump) {
|
if (res && res.id && shopInfo.registerType == 'after' && !e.noJump) {
|
||||||
toHistory();
|
toHistory();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2441,8 +2630,8 @@
|
|||||||
idKey: 'id'
|
idKey: 'id'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function watchEmit(){
|
function watchEmit() {
|
||||||
uni.$off('updateProductIndex')
|
uni.$off('updateProductIndex')
|
||||||
uni.$on('updateProductIndex', function(data) {
|
uni.$on('updateProductIndex', function(data) {
|
||||||
getNewUserDiscount()
|
getNewUserDiscount()
|
||||||
@@ -2481,6 +2670,7 @@
|
|||||||
useSocket.setOnMessage(() => {});
|
useSocket.setOnMessage(() => {});
|
||||||
}
|
}
|
||||||
onHide(() => {
|
onHide(() => {
|
||||||
|
isGoodsShare.value = false
|
||||||
closeSocket();
|
closeSocket();
|
||||||
});
|
});
|
||||||
onUnload(() => {
|
onUnload(() => {
|
||||||
@@ -2496,12 +2686,12 @@
|
|||||||
});
|
});
|
||||||
if (res && typeof res == 'object') {
|
if (res && typeof res == 'object') {
|
||||||
newUserDiscount.value = res;
|
newUserDiscount.value = res;
|
||||||
cartStore.consumeDiscount=res
|
cartStore.consumeDiscount = res
|
||||||
cartStore.newUserDiscount=res.amount
|
cartStore.newUserDiscount = res.amount
|
||||||
}else{
|
} else {
|
||||||
newUserDiscount.value = null;
|
newUserDiscount.value = null;
|
||||||
cartStore.consumeDiscount={}
|
cartStore.consumeDiscount = {}
|
||||||
cartStore.newUserDiscount=0
|
cartStore.newUserDiscount = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2561,8 +2751,8 @@
|
|||||||
return 0
|
return 0
|
||||||
})
|
})
|
||||||
const oldOrder = ref(null);
|
const oldOrder = ref(null);
|
||||||
|
|
||||||
|
|
||||||
// 限时折扣
|
// 限时折扣
|
||||||
async function getLimitDiscount() {
|
async function getLimitDiscount() {
|
||||||
const limitRes = await limitTimeDiscountapi.getConfig({
|
const limitRes = await limitTimeDiscountapi.getConfig({
|
||||||
@@ -3199,7 +3389,6 @@
|
|||||||
border-radius: 20rpx;
|
border-radius: 20rpx;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding-bottom: 200rpx;
|
|
||||||
|
|
||||||
.positionabsolute {
|
.positionabsolute {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -3234,9 +3423,7 @@
|
|||||||
border-bottom: 2rpx solid #f0f0f0;
|
border-bottom: 2rpx solid #f0f0f0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.shop_sku_box:last-child {
|
|
||||||
padding-bottom: 140rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shop_sku_box {
|
.shop_sku_box {
|
||||||
padding: 20rpx;
|
padding: 20rpx;
|
||||||
@@ -3322,9 +3509,6 @@
|
|||||||
padding: 30rpx 28rpx;
|
padding: 30rpx 28rpx;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
box-shadow: 0rpx -6rpx 14rpx 2rpx rgba(0, 0, 0, 0.1);
|
box-shadow: 0rpx -6rpx 14rpx 2rpx rgba(0, 0, 0, 0.1);
|
||||||
position: fixed;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
|
|
||||||
.price {
|
.price {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -3700,4 +3884,31 @@
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
margin-left: 20rpx;
|
margin-left: 20rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.recommand-goods {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-top: 24rpx;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-right: 30rpx;
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
width: 210rpx;
|
||||||
|
|
||||||
|
&:nth-child(3n) {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name {
|
||||||
|
height: 84rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -60,6 +60,9 @@
|
|||||||
<text v-if="item.bizCode == 'cashback'">
|
<text v-if="item.bizCode == 'cashback'">
|
||||||
消费返现
|
消费返现
|
||||||
</text>
|
</text>
|
||||||
|
<text v-if="item.bizCode == 'cashback_refund'">
|
||||||
|
消费返现扣减
|
||||||
|
</text>
|
||||||
<text v-if="item.bizCode == 'freeIn'">
|
<text v-if="item.bizCode == 'freeIn'">
|
||||||
霸王餐充值
|
霸王餐充值
|
||||||
</text>
|
</text>
|
||||||
|
|||||||
@@ -1,461 +1,498 @@
|
|||||||
<!-- 充值中心 -->
|
<!-- 充值中心 -->
|
||||||
<template>
|
<template>
|
||||||
<view class="container">
|
<view class="container">
|
||||||
<up-navbar
|
<up-navbar bgColor="transparent" title="充值中心" @leftClick="back"></up-navbar>
|
||||||
bgColor="transparent"
|
<view class="header-wrap">
|
||||||
title="充值中心"
|
<image class="bg" src="/static/czzx_header_bg.png" mode="aspectFill"></image>
|
||||||
@leftClick="back"
|
<view class="select-shop">
|
||||||
></up-navbar>
|
<view class="select-btn">
|
||||||
<view class="header-wrap">
|
<up-icon name="map" color="#333"></up-icon>
|
||||||
<image
|
<text class="t">{{ shopInfo.shopName }}</text>
|
||||||
class="bg"
|
<up-icon name="arrow-right" color="#333"></up-icon>
|
||||||
src="/static/czzx_header_bg.png"
|
</view>
|
||||||
mode="aspectFill"
|
<ymf-share></ymf-share>
|
||||||
></image>
|
</view>
|
||||||
<view class="select-shop">
|
<view class="balance-wrap">
|
||||||
<view class="select-btn">
|
<view class="left">
|
||||||
<up-icon name="map" color="#333"></up-icon>
|
<text class="i t">余额</text>
|
||||||
<text class="t">{{ shopInfo.shopName }}</text>
|
<text class="n t">{{ shopUserInfo.amount || 0 }}</text>
|
||||||
<up-icon name="arrow-right" color="#333"></up-icon>
|
</view>
|
||||||
</view>
|
<view class="right">
|
||||||
</view>
|
<text class="t" @click="toduihuan">兑换码</text>
|
||||||
<view class="balance-wrap">
|
<text class="t" @click="toDetail">明细</text>
|
||||||
<view class="left">
|
<text class="t" @click="toPwd">密码设置</text>
|
||||||
<text class="i t">余额</text>
|
</view>
|
||||||
<text class="n t">{{ shopUserInfo.amount || 0 }}</text>
|
</view>
|
||||||
</view>
|
<view class="btm-wrap">
|
||||||
<view class="right">
|
<view class=""></view>
|
||||||
<text class="t" @click="toduihuan">兑换码</text>
|
</view>
|
||||||
<text class="t" @click="toDetail">明细</text>
|
</view>
|
||||||
<text class="t" @click="toPwd">密码设置</text>
|
<view class="bottom">
|
||||||
</view>
|
<view class="u-flex u-flex-between">
|
||||||
</view>
|
<view class="u-flex">
|
||||||
<view class="btm-wrap">
|
<image src="/static/vip/money.png" style="width: 44rpx; height: 44rpx" mode=""></image>
|
||||||
<view class=""> </view>
|
<text class="u-m-l-24 color-333 font-16 font-700">立即充值</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
<view class="font-12 color-999">
|
||||||
<view class="bottom">
|
<text>充值代表接受</text>
|
||||||
<view class="u-flex u-flex-between">
|
<text style="color: #ecb592">《用户隐私协议》</text>
|
||||||
<view class="u-flex">
|
</view>
|
||||||
<image
|
</view>
|
||||||
src="/static/vip/money.png"
|
<view class="list u-m-t-40">
|
||||||
style="width: 44rpx; height: 44rpx"
|
<view class="item color1" @click="sel = index" v-for="(item, index) in list" :key="index" :class="{ active: sel == index }">
|
||||||
mode=""
|
<view class="">
|
||||||
></image>
|
<text>¥</text>
|
||||||
<text class="u-m-l-24 color-333 font-16 font-700">立即充值</text>
|
<text class="font-700" style="font-size: 48 u-flex-1rpx" :class="{ color2: sel == index }">{{ item.amount }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="font-12 color-999">
|
<view class="font-12" v-if="item.rewardAmount" :class="{ color2: sel == index }">
|
||||||
<text>充值代表接受</text>
|
<text>赠</text>
|
||||||
<text style="color: #ecb592">《用户隐私协议》</text>
|
<text>¥</text>
|
||||||
</view>
|
<text class="font-14">{{ item.rewardAmount }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="list u-m-t-40">
|
<view class="font-12" v-if="item.rewardPoints" style="color: #5f2e0f">
|
||||||
<view
|
<text>送</text>
|
||||||
class="item color1"
|
<text class="font-14">{{ item.rewardPoints }}</text>
|
||||||
@click="sel = index"
|
<text class="">积分</text>
|
||||||
v-for="(item, index) in list"
|
</view>
|
||||||
:key="index"
|
<view class="font-12 color-666" v-if="item.couponInfoList.length">
|
||||||
:class="{ active: sel == index }"
|
<text>送</text>
|
||||||
>
|
<text>{{ couponNum(item.couponInfoList) }}</text>
|
||||||
<view class="">
|
<text>张券</text>
|
||||||
<text>¥</text>
|
<text class="color2 u-m-l-8" v-if="sel == index" @click="lookCoupon(item)">查看</text>
|
||||||
<text
|
</view>
|
||||||
class="font-700"
|
|
||||||
style="font-size: 48 u-flex-1rpx"
|
|
||||||
:class="{ color2: sel == index }"
|
|
||||||
>{{ item.amount }}</text
|
|
||||||
>
|
|
||||||
</view>
|
|
||||||
<view
|
|
||||||
class="font-12"
|
|
||||||
v-if="item.rewardAmount"
|
|
||||||
:class="{ color2: sel == index }"
|
|
||||||
>
|
|
||||||
<text>赠</text>
|
|
||||||
<text>¥</text>
|
|
||||||
<text class="font-14">{{ item.rewardAmount }}</text>
|
|
||||||
</view>
|
|
||||||
<view class="font-12" v-if="item.rewardPoints" style="color: #5f2e0f">
|
|
||||||
<text>送</text>
|
|
||||||
<text class="font-14">{{ item.rewardPoints }}</text>
|
|
||||||
<text class="">积分</text>
|
|
||||||
</view>
|
|
||||||
<view class="font-12 color-666" v-if="item.couponInfoList.length">
|
|
||||||
<text>送</text>
|
|
||||||
<text>{{ couponNum(item.couponInfoList) }}</text>
|
|
||||||
<text>张券</text>
|
|
||||||
<text
|
|
||||||
class="color2 u-m-l-8"
|
|
||||||
v-if="sel == index"
|
|
||||||
@click="lookCoupon(item)"
|
|
||||||
>查看</text
|
|
||||||
>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="sel u-flex" v-if="sel == index">
|
<view class="sel u-flex" v-if="sel == index">
|
||||||
<image class="image" src="/static/vip/sel.png" mode=""></image>
|
<image class="image" src="/static/vip/sel.png" mode=""></image>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<template v-if="state.isCustom">
|
<template v-if="state.isCustom">
|
||||||
<view class="u-flex other flex-center">
|
<view class="u-flex other flex-center">
|
||||||
<text class="font-14 color-333 font-700 u-m-r-28">其他金额</text>
|
<text class="font-14 color-333 font-700 u-m-r-28">其他金额</text>
|
||||||
<up-input
|
<up-input v-model="money" type="number" placeholder="请输入充值金额" border="none" placeholder-style="font-size:14px;"></up-input>
|
||||||
v-model="money"
|
</view>
|
||||||
type="number"
|
<view class="color-999 font-12 u-m-t-4">自定义金额充值时,不享受任何优惠赠送</view>
|
||||||
placeholder="请输入充值金额"
|
</template>
|
||||||
border="none"
|
|
||||||
placeholder-style="font-size:14px;"
|
|
||||||
></up-input>
|
|
||||||
</view>
|
|
||||||
<view class="color-999 font-12 u-m-t-4"
|
|
||||||
>自定义金额充值时,不享受任何优惠赠送</view
|
|
||||||
>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<button
|
<button class="buy-btn" @click="buy" :class="{ disabled: !state.isEnable }">
|
||||||
class="buy-btn"
|
<text class="font-16">¥{{ charge_money }}</text>
|
||||||
@click="buy"
|
<text class="font-14 u-m-l-24">立即充值</text>
|
||||||
:class="{ disabled: !state.isEnable }"
|
</button>
|
||||||
>
|
<view class="u-m-t-36 color-999 font-12">
|
||||||
<text class="font-16">¥{{ charge_money }}</text>
|
<view>充值说明</view>
|
||||||
<text class="font-14 u-m-l-24">立即充值</text>
|
<view class="u-m-t-16">
|
||||||
</button>
|
<text>适用门店</text>
|
||||||
<view class="u-m-t-36 color-999 font-12">
|
<text class="color2 u-m-l-28" @click="toShopList">全国门店通用 {{ '>' }}</text>
|
||||||
<view>充值说明</view>
|
</view>
|
||||||
<view class="u-m-t-16">
|
<view class="u-m-t-16">
|
||||||
<text>适用门店</text>
|
<text>有效期限</text>
|
||||||
<text class="color2 u-m-l-28" @click="toShopList"
|
<text class="u-m-l-28">永久有效</text>
|
||||||
>全国门店通用 {{ ">" }}
|
</view>
|
||||||
</text>
|
<view class="u-m-t-16 u-flex u-flex-y-center">
|
||||||
</view>
|
<text class="no-wrap">注意事项</text>
|
||||||
<view class="u-m-t-16">
|
<view class="u-m-l-28">
|
||||||
<text>有效期限</text>
|
<view>1.储值完成后不支持自助退款,可联系商家处理</view>
|
||||||
<text class="u-m-l-28">永久有效 </text>
|
<view>2.余额不支持转赠,不可提现,长期有效</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-m-t-16 u-flex u-flex-y-center">
|
</view>
|
||||||
<text class="no-wrap">注意事项</text>
|
<view class="u-m-t-16 u-flex u-flex-y-center">
|
||||||
<view class="u-m-l-28">
|
<text class="no-wrap">充值说明</text>
|
||||||
<view>1.储值完成后不支持自助退款,可联系商家处理</view>
|
<text class="u-m-l-28" style="word-break: break-all">
|
||||||
<view> 2.余额不支持转赠,不可提现,长期有效</view>
|
{{ state.remark || '' }}
|
||||||
</view>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-m-t-16 u-flex u-flex-y-center">
|
</view>
|
||||||
<text class="no-wrap">充值说明</text>
|
</view>
|
||||||
<text class="u-m-l-28" style="word-break: break-all">
|
<CouponList v-model="couponModel.show" :list="couponModel.couponInfoList"></CouponList>
|
||||||
{{ state.remark || "" }}
|
</view>
|
||||||
</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<CouponList
|
|
||||||
v-model="couponModel.show"
|
|
||||||
:list="couponModel.couponInfoList"
|
|
||||||
></CouponList>
|
|
||||||
</view>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { APIusershopInfodetail, APIshopUserInfo } from "@/common/api/member.js";
|
import ymfShare from '@/components/ymf-components/ymf-share.vue';
|
||||||
import CouponList from "@/components/coupon/list.vue";
|
import { shareMixin, handleMixinOnLoad, returnQuery } from '@/utils/share.js';
|
||||||
import * as rechargeApi from "@/common/api/market/recharge.js";
|
import { APIusershopInfodetail, APIshopUserInfo } from '@/common/api/member.js';
|
||||||
import { recharge } from "@/common/api/order/index.js";
|
import CouponList from '@/components/coupon/list.vue';
|
||||||
import { joinMember } from "@/common/api/order/index.js";
|
import * as rechargeApi from '@/common/api/market/recharge.js';
|
||||||
import { ref, onMounted, computed, reactive, watch } from "vue";
|
import { recharge } from '@/common/api/order/index.js';
|
||||||
import { onLoad, onShow } from "@dcloudio/uni-app";
|
import { joinMember } from '@/common/api/order/index.js';
|
||||||
import { pay } from "@/utils/pay.js";
|
import { ref, onMounted, computed, reactive, watch } from 'vue';
|
||||||
|
import { onLoad, onShow } from '@dcloudio/uni-app';
|
||||||
|
import { pay } from '@/utils/pay.js';
|
||||||
|
|
||||||
function toShopList() {
|
function toShopList() {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: "/pages/user/member/czzx-shop-list?shopId=" + option.shopId,
|
url: '/pages/user/member/czzx-shop-list?shopId=' + option.shopId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function toduihuan() {
|
function toduihuan() {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: "/user/exchange/index",
|
url: '/user/exchange/index'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function couponNum(list) {
|
function couponNum(list) {
|
||||||
return list.reduce((prve, cur) => {
|
return list.reduce((prve, cur) => {
|
||||||
return prve + cur.num;
|
return prve + cur.num;
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
const couponModel = reactive({
|
const couponModel = reactive({
|
||||||
show: false,
|
show: false,
|
||||||
couponInfoList: [],
|
couponInfoList: []
|
||||||
});
|
});
|
||||||
|
|
||||||
function lookCoupon(item) {
|
function lookCoupon(item) {
|
||||||
couponModel.show = true;
|
couponModel.show = true;
|
||||||
couponModel.couponInfoList = item.couponInfoList;
|
couponModel.couponInfoList = item.couponInfoList;
|
||||||
}
|
}
|
||||||
async function buy() {
|
async function buy() {
|
||||||
if (!state.isEnable) {
|
if (!state.isEnable) {
|
||||||
return uni.showToast({
|
return uni.showToast({
|
||||||
title: "充值未开启,暂不能充值",
|
title: '充值未开启,暂不能充值',
|
||||||
icon: "none",
|
icon: 'none'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!charge_money.value) {
|
if (!charge_money.value) {
|
||||||
return uni.showToast({
|
return uni.showToast({
|
||||||
title: "请选择或者输入充值金额",
|
title: '请选择或者输入充值金额',
|
||||||
icon: "none",
|
icon: 'none'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const json = {
|
const json = {
|
||||||
shopId: option.shopId,
|
shopId: option.shopId,
|
||||||
shopUserId: shopUserInfo.id,
|
shopUserId: shopUserInfo.id
|
||||||
};
|
};
|
||||||
if (sel.value < 0) {
|
if (sel.value < 0) {
|
||||||
json.amount = `${money.value}`.trim() * 1;
|
json.amount = `${money.value}`.trim() * 1;
|
||||||
} else {
|
} else {
|
||||||
json.rechargeDetailId = list.value[sel.value].id;
|
json.rechargeDetailId = list.value[sel.value].id;
|
||||||
json.amount = list.value[sel.value].amount;
|
json.amount = list.value[sel.value].amount;
|
||||||
}
|
}
|
||||||
const res = await recharge(json);
|
const res = await recharge(json);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
return uni.showToast({
|
return uni.showToast({
|
||||||
title: "充值失败",
|
title: '充值失败',
|
||||||
icon: "error",
|
icon: 'error'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const payRes = await pay(res);
|
const payRes = await pay(res);
|
||||||
console.log(payRes);
|
console.log(payRes);
|
||||||
if (payRes) {
|
if (payRes) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "充值成功",
|
title: '充值成功',
|
||||||
icon: "none",
|
icon: 'none'
|
||||||
});
|
});
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function toDetail() {
|
function toDetail() {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: "/pages/user/member/billDetails?type=1&shopId=" + option.shopId,
|
url: '/pages/user/member/billDetails?type=1&shopId=' + option.shopId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function toPwd() {
|
function toPwd() {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: "/pages/user/member/setPassword?type=1&shopId=" + option.shopId,
|
url: '/pages/user/member/setPassword?type=1&shopId=' + option.shopId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function back() {
|
function back() {
|
||||||
uni.navigateBack();
|
safeNavigateBack();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修复版:安全的页面返回方法
|
||||||
|
* 彻底避免 "cannot navigate back at first page" 报错
|
||||||
|
* @param {Number} delta 返回的页面数,默认1
|
||||||
|
* @param {Function} fallback 失败时的降级处理函数
|
||||||
|
*/
|
||||||
|
function safeNavigateBack(delta = 1, fallback) {
|
||||||
|
// 1. 立即获取页面栈,确保拿到最新状态(关键修复点)
|
||||||
|
const pages = getCurrentPages();
|
||||||
|
// 2. 严谨判断:页面栈长度必须大于 delta 才能返回
|
||||||
|
const canNavigateBack = pages.length > delta;
|
||||||
|
|
||||||
|
console.log('页面栈信息:', {
|
||||||
|
pagesLength: pages.length,
|
||||||
|
delta: delta,
|
||||||
|
canNavigateBack: canNavigateBack
|
||||||
|
});
|
||||||
|
|
||||||
|
// 3. 如果不能返回,直接执行降级逻辑
|
||||||
|
if (!canNavigateBack) {
|
||||||
|
console.warn('当前是首页/页面栈不足,无法返回');
|
||||||
|
handleFallback(fallback);
|
||||||
|
return; // 终止后续执行,彻底避免调用 navigateBack
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. 能返回时才执行 navigateBack
|
||||||
|
try {
|
||||||
|
uni.navigateBack({
|
||||||
|
delta: delta,
|
||||||
|
success: () => {
|
||||||
|
console.log('页面返回成功');
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
console.error('navigateBack 执行失败:', err);
|
||||||
|
handleFallback(fallback);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('页面返回异常:', error);
|
||||||
|
handleFallback(fallback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一处理降级逻辑
|
||||||
|
* @param {Function} fallback 自定义降级函数
|
||||||
|
*/
|
||||||
|
function handleFallback(fallback) {
|
||||||
|
if (typeof fallback === 'function') {
|
||||||
|
fallback(); // 执行自定义降级
|
||||||
|
} else {
|
||||||
|
// 默认降级:返回首页(请替换为你的首页路径)
|
||||||
|
uni.showToast({
|
||||||
|
title: '已到首页,无法返回',
|
||||||
|
icon: 'none',
|
||||||
|
duration: 1500
|
||||||
|
});
|
||||||
|
|
||||||
|
// 如果需要强制跳首页,解开下面注释(根据你的业务选择)
|
||||||
|
uni.switchTab({
|
||||||
|
url: '/pages/index/index',
|
||||||
|
fail: () => {
|
||||||
|
uni.redirectTo({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const list = ref([]);
|
const list = ref([]);
|
||||||
const sel = ref(0);
|
const sel = ref(0);
|
||||||
const money = ref(null);
|
const money = ref(null);
|
||||||
const option = reactive({
|
const option = reactive({
|
||||||
shopId: "",
|
shopId: ''
|
||||||
});
|
});
|
||||||
const shopInfo = reactive({});
|
const shopInfo = reactive({});
|
||||||
const shopUserInfo = reactive({});
|
const shopUserInfo = reactive({});
|
||||||
const state = reactive({});
|
const state = reactive({});
|
||||||
async function init() {
|
async function init() {
|
||||||
const shopInfoRes = await APIusershopInfodetail({
|
const shopInfoRes = await APIusershopInfodetail({
|
||||||
shopId: option.shopId,
|
shopId: option.shopId
|
||||||
});
|
});
|
||||||
if (shopInfoRes) {
|
if (shopInfoRes) {
|
||||||
Object.assign(shopInfo, shopInfoRes.shopInfo);
|
Object.assign(shopInfo, shopInfoRes.shopInfo);
|
||||||
}
|
}
|
||||||
const shopUserInfoRes = await APIshopUserInfo({
|
const shopUserInfoRes = await APIshopUserInfo({
|
||||||
shopId: option.shopId,
|
shopId: option.shopId
|
||||||
});
|
});
|
||||||
if (shopUserInfoRes) {
|
if (shopUserInfoRes) {
|
||||||
Object.assign(shopUserInfo, shopUserInfoRes);
|
Object.assign(shopUserInfo, shopUserInfoRes);
|
||||||
}
|
}
|
||||||
const res = await rechargeApi.config({
|
const res = await rechargeApi.config({
|
||||||
shopId: option.shopId,
|
shopId: option.shopId
|
||||||
});
|
});
|
||||||
if (res) {
|
if (res) {
|
||||||
Object.assign(state, res);
|
Object.assign(state, res);
|
||||||
list.value = res.rechargeDetailList;
|
list.value = res.rechargeDetailList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const charge_money = computed(() => {
|
const charge_money = computed(() => {
|
||||||
if (sel.value < 0) {
|
if (sel.value < 0) {
|
||||||
if (money.value > 0) {
|
if (money.value > 0) {
|
||||||
return money.value;
|
return money.value;
|
||||||
}
|
}
|
||||||
return "";
|
return '';
|
||||||
}
|
}
|
||||||
const item = list.value[sel.value];
|
const item = list.value[sel.value];
|
||||||
if (item) {
|
if (item) {
|
||||||
return item.amount;
|
return item.amount;
|
||||||
}
|
}
|
||||||
return "";
|
return '';
|
||||||
});
|
});
|
||||||
onLoad((opt) => {
|
|
||||||
Object.assign(option, opt);
|
onShareAppMessage(async (res) => {
|
||||||
// init();
|
let query = await returnQuery();
|
||||||
|
return {
|
||||||
|
title: `充值-${shopInfo.shopName}`,
|
||||||
|
path: `/pages/user/member/czzx?${query}`,
|
||||||
|
imageUrl: shopInfo.logo,
|
||||||
|
query
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
onLoad(async (opt) => {
|
||||||
|
Object.assign(option, opt);
|
||||||
|
await handleMixinOnLoad(opt);
|
||||||
|
// init();
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => money.value,
|
() => money.value,
|
||||||
(newval) => {
|
(newval) => {
|
||||||
if (newval && newval > 0) {
|
if (newval && newval > 0) {
|
||||||
sel.value = -1;
|
sel.value = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
init();
|
init();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.color1 {
|
.color1 {
|
||||||
color: #5f2e0f;
|
color: #5f2e0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
.color2 {
|
.color2 {
|
||||||
color: #ff6300;
|
color: #ff6300;
|
||||||
}
|
}
|
||||||
|
|
||||||
.buy-btn {
|
.buy-btn {
|
||||||
margin-top: 28rpx;
|
margin-top: 28rpx;
|
||||||
padding: 32rpx 32rpx;
|
padding: 32rpx 32rpx;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
border-radius: 80rpx;
|
border-radius: 80rpx;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
background: linear-gradient(98deg, #fe6d1100 40.64%, #ffd1b4 105.2%),
|
background: linear-gradient(98deg, #fe6d1100 40.64%, #ffd1b4 105.2%), linear-gradient(259deg, #fe6d11 50.14%, #ffd1b4 114.93%);
|
||||||
linear-gradient(259deg, #fe6d11 50.14%, #ffd1b4 114.93%);
|
box-shadow: 0 14rpx 30.4rpx 0 #fe8b435e;
|
||||||
box-shadow: 0 14rpx 30.4rpx 0 #fe8b435e;
|
&.disabled {
|
||||||
&.disabled {
|
background: #eee;
|
||||||
background: #eee;
|
box-shadow: none;
|
||||||
box-shadow: none;
|
border: none;
|
||||||
border: none;
|
color: #999;
|
||||||
color: #999;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.other {
|
.other {
|
||||||
background: #f6f6f6;
|
background: #f6f6f6;
|
||||||
padding: 24rpx 16rpx;
|
padding: 24rpx 16rpx;
|
||||||
margin-top: 40rpx;
|
margin-top: 40rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-wrap {
|
.header-wrap {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 530rpx;
|
height: 530rpx;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: calc(var(--status-bar-height) + 140rpx) 28rpx 28rpx;
|
padding: calc(var(--status-bar-height) + 140rpx) 28rpx 28rpx;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.bg {
|
.bg {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select-shop {
|
.select-shop {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
justify-content: space-between;
|
||||||
position: relative;
|
align-items: center;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
.select-btn {
|
.select-btn {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 12upx;
|
gap: 12upx;
|
||||||
|
|
||||||
.t {
|
.t {
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.balance-wrap {
|
.balance-wrap {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-top: 20rpx;
|
padding-top: 20rpx;
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.t {
|
.t {
|
||||||
color: #5e3110;
|
color: #5e3110;
|
||||||
|
|
||||||
&.i {
|
&.i {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 10upx;
|
top: 10upx;
|
||||||
font-size: 28upx;
|
font-size: 28upx;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.n {
|
&.n {
|
||||||
font-size: 64upx;
|
font-size: 64upx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.right {
|
.right {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 12upx;
|
gap: 12upx;
|
||||||
|
|
||||||
.t {
|
.t {
|
||||||
color: #86491d;
|
color: #86491d;
|
||||||
font-size: 28upx;
|
font-size: 28upx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom {
|
.bottom {
|
||||||
background-color: rgba(255, 255, 255, 0.3);
|
background-color: rgba(255, 255, 255, 0.3);
|
||||||
padding: 40rpx 28rpx 0 28rpx;
|
padding: 40rpx 28rpx 0 28rpx;
|
||||||
transform: translateY(-140rpx);
|
transform: translateY(-140rpx);
|
||||||
border-radius: 74rpx 74rpx 0 0;
|
border-radius: 74rpx 74rpx 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.list {
|
.list {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, 1fr);
|
grid-template-columns: repeat(3, 1fr);
|
||||||
column-gap: 20rpx;
|
column-gap: 20rpx;
|
||||||
row-gap: 22rpx;
|
row-gap: 22rpx;
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
padding: 36rpx 22rpx;
|
padding: 36rpx 22rpx;
|
||||||
border-radius: 42rpx;
|
border-radius: 42rpx;
|
||||||
background: linear-gradient(180deg, #f5f5f5 58.54%, #fff 140.47%);
|
background: linear-gradient(180deg, #f5f5f5 58.54%, #fff 140.47%);
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
position: relative;
|
position: relative;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
border: 6rpx solid transparent;
|
border: 6rpx solid transparent;
|
||||||
transition: all 0.3s ease-in-out;
|
transition: all 0.3s ease-in-out;
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
background: linear-gradient(180deg, #ffc29a -26.17%, #fff 64.06%);
|
background: linear-gradient(180deg, #ffc29a -26.17%, #fff 64.06%);
|
||||||
border: 6rpx solid #fe6c0e;
|
border: 6rpx solid #fe6c0e;
|
||||||
box-shadow: 0 0 31rpx 2rpx #fe8b435e;
|
box-shadow: 0 0 31rpx 2rpx #fe8b435e;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sel {
|
.sel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
|
|
||||||
transform: translateX(-50%) translateY(21rpx);
|
transform: translateX(-50%) translateY(21rpx);
|
||||||
|
|
||||||
.image {
|
.image {
|
||||||
width: 42rpx;
|
width: 42rpx;
|
||||||
height: 42rpx;
|
height: 42rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
1117
pages/user/user.vue
1117
pages/user/user.vue
File diff suppressed because it is too large
Load Diff
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@@ -30,8 +30,8 @@ importers:
|
|||||||
specifier: ^0.1.2
|
specifier: ^0.1.2
|
||||||
version: 0.1.2
|
version: 0.1.2
|
||||||
ysk-utils:
|
ysk-utils:
|
||||||
specifier: ^1.0.81
|
specifier: ^1.0.83
|
||||||
version: 1.0.81
|
version: 1.0.83
|
||||||
devDependencies:
|
devDependencies:
|
||||||
unplugin-auto-import:
|
unplugin-auto-import:
|
||||||
specifier: ^0.16.7
|
specifier: ^0.16.7
|
||||||
@@ -357,8 +357,8 @@ packages:
|
|||||||
webpack-virtual-modules@0.6.2:
|
webpack-virtual-modules@0.6.2:
|
||||||
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
|
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
|
||||||
|
|
||||||
ysk-utils@1.0.81:
|
ysk-utils@1.0.83:
|
||||||
resolution: {integrity: sha512-c6SOfOaw43aDDuyXgEv24Vo561EfFoa1gfGbY+p1EfXHoGPOE6tQLekbWW9bn37KAse0Gdef7VCbdv0Dr6ltaw==}
|
resolution: {integrity: sha512-48KLQJXQtF8nLaaFHR1hAFx/QGS848fg7n37BpZEtwliD+D5ZHQFPOCZNaM68jiwDTWhNg41rHpZzhAUQXe+/Q==}
|
||||||
|
|
||||||
snapshots:
|
snapshots:
|
||||||
|
|
||||||
@@ -684,7 +684,7 @@ snapshots:
|
|||||||
|
|
||||||
webpack-virtual-modules@0.6.2: {}
|
webpack-virtual-modules@0.6.2: {}
|
||||||
|
|
||||||
ysk-utils@1.0.81:
|
ysk-utils@1.0.83:
|
||||||
dependencies:
|
dependencies:
|
||||||
bignumber.js: 9.3.1
|
bignumber.js: 9.3.1
|
||||||
loadsh: 0.0.4
|
loadsh: 0.0.4
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<view @click="prveImg(item.goodsImageUrl)">
|
<view @click="prveImg(item.goodsImageUrl)">
|
||||||
<image class="top-img" :src="item.goodsImageUrl" mode="aspectFill" ></image>
|
<image class="top-img" :src="item.goodsImageUrl" mode="aspectFill"></image>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<view class="sku">
|
<view class="sku">
|
||||||
@@ -27,7 +27,10 @@
|
|||||||
</view>
|
</view>
|
||||||
<text class="text">剩余:{{item.quantity}}</text>
|
<text class="text">剩余:{{item.quantity}}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-name">{{item.goodsName}}</view>
|
<view class="goods-name u-flex u-row-between">
|
||||||
|
<text class="u-m-r-30" style="word-break: break-all;">{{item.goodsName}}</text>
|
||||||
|
<ymfShare color="#333" />
|
||||||
|
</view>
|
||||||
<view class="bg-f7" style="height: 24rpx"></view>
|
<view class="bg-f7" style="height: 24rpx"></view>
|
||||||
<view class="desc">
|
<view class="desc">
|
||||||
<view class="u-flex">
|
<view class="u-flex">
|
||||||
@@ -55,10 +58,10 @@
|
|||||||
|
|
||||||
<view style="height: 140px"></view>
|
<view style="height: 140px"></view>
|
||||||
<view class="fixed-bottom u-flex u-row-center">
|
<view class="fixed-bottom u-flex u-row-center">
|
||||||
<view v-if="isCanExchange" class="btn" @click="exchangeClick" >
|
<view v-if="isCanExchange" class="btn" @click="exchangeClick">
|
||||||
{{returnBtmText}}
|
{{returnBtmText}}
|
||||||
</view>
|
</view>
|
||||||
<view class="btn gray" v-else >
|
<view class="btn gray" v-else>
|
||||||
{{returnBtmText}}
|
{{returnBtmText}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -84,7 +87,7 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="goods-info">
|
<view class="goods-info">
|
||||||
<view class="u-flex">
|
<view class="u-flex">
|
||||||
|
|
||||||
<image class="cover" v-if="item.goodsCategory!='优惠券'" :src="item.goodsImageUrl"></image>
|
<image class="cover" v-if="item.goodsCategory!='优惠券'" :src="item.goodsImageUrl"></image>
|
||||||
<view v-else class="cover bg-fff">
|
<view v-else class="cover bg-fff">
|
||||||
<couponIcon :item="item.couponInfo" typeKey="couponType" />
|
<couponIcon :item="item.couponInfo" typeKey="couponType" />
|
||||||
@@ -116,6 +119,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import ymfShare from '@/components/ymf-components/ymf-share.vue'
|
||||||
import {
|
import {
|
||||||
computed,
|
computed,
|
||||||
reactive
|
reactive
|
||||||
@@ -125,6 +129,11 @@
|
|||||||
} from '@/utils/uniapp.js'
|
} from '@/utils/uniapp.js'
|
||||||
import modal from "@/scoreShop/components/modal.vue";
|
import modal from "@/scoreShop/components/modal.vue";
|
||||||
import * as pointGoodsApi from "@/common/api/order/pointGoods.js";
|
import * as pointGoodsApi from "@/common/api/order/pointGoods.js";
|
||||||
|
import {
|
||||||
|
userPoints
|
||||||
|
} from "@/common/api/market/points.js";
|
||||||
|
|
||||||
|
|
||||||
import couponIcon from "@/components/coupon-icon/index";
|
import couponIcon from "@/components/coupon-icon/index";
|
||||||
import {
|
import {
|
||||||
pay
|
pay
|
||||||
@@ -135,10 +144,10 @@
|
|||||||
const modalData = reactive({
|
const modalData = reactive({
|
||||||
show: false,
|
show: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
function prveImg(url){
|
function prveImg(url) {
|
||||||
uni.previewImage({
|
uni.previewImage({
|
||||||
urls:[url]
|
urls: [url]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,16 +313,64 @@
|
|||||||
return `单人兑换已达上限`
|
return `单人兑换已达上限`
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
onLoad((opt) => {
|
async function getGoods() {
|
||||||
const exchange_goods = uni.getStorageSync('exchange_goods')
|
const res = await pointGoodsApi.pointsGoods({
|
||||||
if (exchange_goods.goodsDescription) {
|
id: options.id
|
||||||
exchange_goods.goodsDescription = JSON.parse(exchange_goods.goodsDescription)
|
})
|
||||||
|
if (res.goodsDescription) {
|
||||||
|
res.goodsDescription = JSON.parse(res.goodsDescription)
|
||||||
} else {
|
} else {
|
||||||
exchange_goods.goodsDescription = []
|
res.goodsDescription = []
|
||||||
}
|
}
|
||||||
const pointsUserData = uni.getStorageSync('pointsUser')
|
res.couponInfo=res.couponInfo||{}
|
||||||
Object.assign(item, exchange_goods)
|
|
||||||
Object.assign(pointsUser, pointsUserData)
|
Object.assign(item, res)
|
||||||
|
}
|
||||||
|
async function getPointUser() {
|
||||||
|
const res = await userPoints({
|
||||||
|
shopUserId: uni.cache.get('shopUserInfo').id || ''
|
||||||
|
})
|
||||||
|
Object.assign(pointsUser, res.pointsUser)
|
||||||
|
}
|
||||||
|
async function init() {
|
||||||
|
await getGoods()
|
||||||
|
await getPointUser()
|
||||||
|
}
|
||||||
|
|
||||||
|
import {
|
||||||
|
shareMixin,
|
||||||
|
handleMixinOnLoad,wxShare,returnQuery ,returnIndexBg,
|
||||||
|
} from '@/utils/share.js'
|
||||||
|
// defineOptions({
|
||||||
|
// mixins: [shareMixin],
|
||||||
|
// });
|
||||||
|
|
||||||
|
onShareAppMessage(async(res)=>{
|
||||||
|
const query=await returnQuery()
|
||||||
|
const shopInfo=uni.cache.get('shopInfo')
|
||||||
|
return wxShare({
|
||||||
|
...res,
|
||||||
|
title:item.goodsName +'-'+shopInfo.shopName,
|
||||||
|
path:'/scoreShop/detail/index'+'?'+query,
|
||||||
|
query,
|
||||||
|
imageUrl:item.goodsImageUrl||returnIndexBg()||''
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
const options = reactive({})
|
||||||
|
onLoad(async (opt) => {
|
||||||
|
Object.assign(options, opt)
|
||||||
|
await handleMixinOnLoad(opt)
|
||||||
|
await init()
|
||||||
|
// const exchange_goods = uni.getStorageSync('exchange_goods')
|
||||||
|
// if (exchange_goods.goodsDescription) {
|
||||||
|
// exchange_goods.goodsDescription = JSON.parse(exchange_goods.goodsDescription)
|
||||||
|
// } else {
|
||||||
|
// exchange_goods.goodsDescription = []
|
||||||
|
// }
|
||||||
|
// const pointsUserData = uni.getStorageSync('pointsUser')
|
||||||
|
// Object.assign(item, exchange_goods)
|
||||||
|
// Object.assign(pointsUser, pointsUserData)
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -463,11 +520,12 @@
|
|||||||
height: 184rpx;
|
height: 184rpx;
|
||||||
border-radius: 16rpx;
|
border-radius: 16rpx;
|
||||||
background: #d9d9d9;
|
background: #d9d9d9;
|
||||||
&.bg-fff{
|
|
||||||
|
&.bg-fff {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom {
|
.bottom {
|
||||||
@@ -487,7 +545,8 @@
|
|||||||
font-size: 700;
|
font-size: 700;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.w-full{
|
|
||||||
|
.w-full {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
function toDetail(item) {
|
function toDetail(item) {
|
||||||
uni.setStorageSync('exchange_goods', item)
|
uni.setStorageSync('exchange_goods', item)
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/scoreShop/detail/index?id=' + item.id,
|
url: '/scoreShop/detail/index?id=' + item.id+'&shopId='+item.shopId,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,13 @@
|
|||||||
<view class="tab-item" :class="tabActive === 0 ? 'active' : ''" @click="tabActive = 0">优惠券</view>
|
<view class="tab-item" :class="tabActive === 0 ? 'active' : ''" @click="tabActive = 0">优惠券</view>
|
||||||
<view class="tab-item" :class="tabActive === 1 ? 'active' : ''" @click="tabActive = 1">其它商品</view>
|
<view class="tab-item" :class="tabActive === 1 ? 'active' : ''" @click="tabActive = 1">其它商品</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-flex" @click="toggleLayout">
|
<view class="u-flex gap-20">
|
||||||
<image :src="layout === 'block' ? imgs.layout_block : imgs.layout" class="layout" />
|
<view @click="toggleLayout">
|
||||||
|
<image :src="layout === 'block' ? imgs.layout_block : imgs.layout" class="layout" />
|
||||||
|
</view>
|
||||||
|
<ymfShare size="40rpx" color="#9C571F"></ymfShare>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
<goodsList :pointsUser="pointsUser" :layout="layout" :list="list" @exchange="exchange"></goodsList>
|
<goodsList :pointsUser="pointsUser" :layout="layout" :list="list" @exchange="exchange"></goodsList>
|
||||||
|
|
||||||
@@ -44,6 +48,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import ymfShare from '@/components/ymf-components/ymf-share.vue'
|
||||||
import * as pointGoodsApi from "@/common/api/order/pointGoods.js";
|
import * as pointGoodsApi from "@/common/api/order/pointGoods.js";
|
||||||
import goodsList from "./components/goods-list.vue";
|
import goodsList from "./components/goods-list.vue";
|
||||||
import {
|
import {
|
||||||
@@ -70,9 +75,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function back() {
|
function back() {
|
||||||
uni.navigateBack({
|
const pages = getCurrentPages();
|
||||||
delta: 1,
|
if (pages.length < 2) {
|
||||||
});
|
uni.switchTab({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.navigateBack({
|
||||||
|
delta: 1,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// function exchange(item) {
|
// function exchange(item) {
|
||||||
@@ -87,12 +101,13 @@
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
function toDetail() {
|
function toDetail() {
|
||||||
if(!pointsUser.value||!pointsUser.value.id){
|
if (!pointsUser.value || !pointsUser.value.id) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/user/member/billDetails?type=2&shopId=' + query.shopId + '&id=' + (pointsUser.value?pointsUser.value.id :
|
url: '/pages/user/member/billDetails?type=2&shopId=' + query.shopId + '&id=' + (pointsUser.value ?
|
||||||
|
pointsUser.value.id :
|
||||||
'')
|
'')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -132,7 +147,41 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onLoad((opt) => {
|
|
||||||
|
|
||||||
|
import {
|
||||||
|
shareMixin,
|
||||||
|
handleMixinOnLoad,
|
||||||
|
returnQuery,
|
||||||
|
jsonToUrl,
|
||||||
|
wxShare,returnIndexBg ,
|
||||||
|
returnCommonQuery
|
||||||
|
} from '@/utils/share.js'
|
||||||
|
// defineOptions({
|
||||||
|
// mixins: [shareMixin],
|
||||||
|
// });
|
||||||
|
|
||||||
|
async function onShare() {
|
||||||
|
const queryJson = await returnCommonQuery()
|
||||||
|
let query = jsonToUrl(queryJson)
|
||||||
|
let json = {}
|
||||||
|
|
||||||
|
json.title = '积分乐园,好物兑换'
|
||||||
|
json.imageUrl = returnIndexBg()||uni.cache.get('shopInfo').logo || ''
|
||||||
|
return wxShare({
|
||||||
|
query,
|
||||||
|
...json,
|
||||||
|
path: '/scoreShop/index/index' + '?' + query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onShareAppMessage(onShare)
|
||||||
|
onShareTimeline(onShare)
|
||||||
|
const options = reactive({
|
||||||
|
|
||||||
|
})
|
||||||
|
onLoad(async (opt) => {
|
||||||
|
Object.assign(options, opt)
|
||||||
query.shopId = opt.shopId || ''
|
query.shopId = opt.shopId || ''
|
||||||
})
|
})
|
||||||
watch(() => tabActive.value, (newval, oldval) => {
|
watch(() => tabActive.value, (newval, oldval) => {
|
||||||
@@ -151,8 +200,23 @@
|
|||||||
query.page++
|
query.page++
|
||||||
getList();
|
getList();
|
||||||
})
|
})
|
||||||
onShow(() => {
|
import {
|
||||||
refresh()
|
productStore
|
||||||
|
} from '@/stores/user.js';
|
||||||
|
import {
|
||||||
|
onShareAppMessage
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
import { onShareTimeline } from '@dcloudio/uni-app';
|
||||||
|
const storeuser = productStore();
|
||||||
|
|
||||||
|
|
||||||
|
onShow(async () => {
|
||||||
|
if (!storeuser.isHasLogin) {
|
||||||
|
await handleMixinOnLoad(options)
|
||||||
|
refresh()
|
||||||
|
} else {
|
||||||
|
refresh()
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@@ -164,6 +228,10 @@
|
|||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.gap-20 {
|
||||||
|
gap: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
.top {
|
.top {
|
||||||
padding: 138rpx 26rpx 48rpx 42rpx;
|
padding: 138rpx 26rpx 48rpx 42rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -1,124 +1,130 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="min-page bg-f7 u-font-28 color-333">
|
<view class="min-page bg-f7 u-font-28 color-333">
|
||||||
<up-navbar
|
<up-navbar title="兑换成功" bgColor="transparent" leftIconColor="#333" @leftClick="back()"
|
||||||
title="兑换成功"
|
titleStyle="color:#333"></up-navbar>
|
||||||
bgColor="transparent"
|
<view class="content">
|
||||||
leftIconColor="#333"
|
<view class="bg" :style="{ backgroundImage: `url(${imgs.bg})` }">
|
||||||
@leftClick="back()"
|
<image :src="imgs.success" class="success"></image>
|
||||||
titleStyle="color:#333"
|
<view class="u-font-40 font-700">兑换成功</view>
|
||||||
></up-navbar>
|
<view class="u-font-32 font-700">{{item.pointsGoodsName}}</view>
|
||||||
<view class="content">
|
<view class="u-m-t-14" v-if="item.goodsCategory!='优惠券'">需前往店铺自行兑换领取</view>
|
||||||
<view class="bg" :style="{ backgroundImage: `url(${imgs.bg})` }">
|
<view class="u-m-t-14" v-else>优惠券直接到账您的账户中</view>
|
||||||
<image :src="imgs.success" class="success"></image>
|
</view>
|
||||||
<view class="u-font-40 font-700">兑换成功</view>
|
<view class="info u-flex u-flex-col">
|
||||||
<view class="u-font-32 font-700">{{item.pointsGoodsName}}</view>
|
<view class="u-p-22">
|
||||||
<view class="u-m-t-14" v-if="item.goodsCategory!='优惠券'">需前往店铺自行兑换领取</view>
|
<text class="color-666">兑换商品:</text>
|
||||||
<view class="u-m-t-14" v-else>优惠券直接到账您的账户中</view>
|
<text>{{item.pointsGoodsName}}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="info u-flex u-flex-col">
|
<view class="u-p-22">
|
||||||
<view class="u-p-22">
|
<text class="color-666">兑换数量:</text>
|
||||||
<text class="color-666">兑换商品:</text>
|
<text>{{item.number}}份</text>
|
||||||
<text>{{item.pointsGoodsName}}</text>
|
</view>
|
||||||
</view>
|
<view class="u-p-22">
|
||||||
<view class="u-p-22">
|
<text class="color-666">消耗积分:</text>
|
||||||
<text class="color-666">兑换数量:</text>
|
<text>{{item.spendPoints}}</text>
|
||||||
<text>{{item.number}}份</text>
|
</view>
|
||||||
</view>
|
<view class="u-p-22" v-if="item.extraPaymentAmount">
|
||||||
<view class="u-p-22">
|
<text class="color-666">支付金额:</text>
|
||||||
<text class="color-666">消耗积分:</text>
|
<text>{{item.extraPaymentAmount}}</text>
|
||||||
<text>{{item.spendPoints}}</text>
|
</view>
|
||||||
</view>
|
<view class="u-p-22">
|
||||||
<view class="u-p-22" v-if="item.extraPaymentAmount">
|
<text class="color-666">下单时间:</text>
|
||||||
<text class="color-666">支付金额:</text>
|
<text>{{item.createTime}}</text>
|
||||||
<text>{{item.extraPaymentAmount}}</text>
|
</view>
|
||||||
|
<view class="u-p-22">
|
||||||
|
<text class="color-666">订单号:</text>
|
||||||
|
<text>:{{item.orderNo}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex bottom u-row-center">
|
||||||
|
<view class="back btn" @click="back">继续兑换</view>
|
||||||
|
<view class="look btn" @click="lookOrder">查看订单</view>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-p-22">
|
</view>
|
||||||
<text class="color-666">下单时间:</text>
|
|
||||||
<text>{{item.createTime}}</text>
|
|
||||||
</view>
|
|
||||||
<view class="u-p-22">
|
|
||||||
<text class="color-666">订单号:</text>
|
|
||||||
<text>:{{item.orderNo}}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="u-flex bottom u-row-center">
|
|
||||||
<view class="back btn" @click="back">继续兑换</view>
|
|
||||||
<view class="look btn" @click="lookOrder">查看订单</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
const imgs = {
|
||||||
|
bg: "https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/2/b625560a5b75418c9e643841f8674a0c.png",
|
||||||
|
success: "https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/2/c2f0865efb444de58ff0d8bb3a51d300.png",
|
||||||
|
};
|
||||||
|
|
||||||
|
function back() {
|
||||||
|
const pages = getCurrentPages();
|
||||||
|
if(pages.length<2){
|
||||||
|
uni.redirectTo({
|
||||||
|
url: '/scoreShop/index/index?shopId=' + item.shopId
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
uni.navigateBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const imgs = {
|
function lookOrder() {
|
||||||
bg: "https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/2/b625560a5b75418c9e643841f8674a0c.png",
|
uni.redirectTo({
|
||||||
success:
|
url: '/scoreShop/order/index?shopId=' + item.shopId
|
||||||
"https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/2/c2f0865efb444de58ff0d8bb3a51d300.png",
|
})
|
||||||
};
|
}
|
||||||
function back() {
|
const item = reactive({
|
||||||
uni.navigateBack();
|
|
||||||
}
|
})
|
||||||
function lookOrder() {
|
onLoad(opt => {
|
||||||
uni.redirectTo({
|
const exchange_goods_success_data = uni.getStorageSync('exchange_goods_success')
|
||||||
url:'/scoreShop/order/index?shopId='+item.shopId
|
Object.assign(item, exchange_goods_success_data)
|
||||||
})
|
|
||||||
}
|
})
|
||||||
const item=reactive({
|
|
||||||
|
|
||||||
})
|
|
||||||
onLoad(opt=>{
|
|
||||||
const exchange_goods_success_data=uni.getStorageSync('exchange_goods_success')
|
|
||||||
Object.assign(item,exchange_goods_success_data)
|
|
||||||
|
|
||||||
})
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.content {
|
.content {
|
||||||
background: linear-gradient(180deg, #f5cd82 0%, rgba(247, 219, 165, 0) 100%);
|
background: linear-gradient(180deg, #f5cd82 0%, rgba(247, 219, 165, 0) 100%);
|
||||||
height: 670rpx;
|
height: 670rpx;
|
||||||
$color: #9c571f;
|
$color: #9c571f;
|
||||||
.bg {
|
|
||||||
width: 100%;
|
|
||||||
height: 586rpx;
|
|
||||||
background-size: cover;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: flex-end;
|
|
||||||
align-items: center;
|
|
||||||
padding-bottom: 26rpx;
|
|
||||||
color: $color;
|
|
||||||
|
|
||||||
.success {
|
.bg {
|
||||||
width: 310rpx;
|
width: 100%;
|
||||||
height: 206rpx;
|
height: 586rpx;
|
||||||
}
|
background-size: cover;
|
||||||
}
|
display: flex;
|
||||||
.info {
|
flex-direction: column;
|
||||||
padding-left: 174rpx;
|
justify-content: flex-end;
|
||||||
padding-right: 32rpx;
|
align-items: center;
|
||||||
}
|
padding-bottom: 26rpx;
|
||||||
}
|
color: $color;
|
||||||
.bottom {
|
|
||||||
gap: 48rpx;
|
|
||||||
margin-top: 44rpx;
|
|
||||||
|
|
||||||
.btn {
|
.success {
|
||||||
padding: 14rpx 76rpx;
|
width: 310rpx;
|
||||||
border-radius: 100rpx;
|
height: 206rpx;
|
||||||
font-size: 32rpx;
|
}
|
||||||
border: 1px solid transparent;
|
}
|
||||||
&.back {
|
|
||||||
border-color: $my-main-color;
|
.info {
|
||||||
color: $my-main-color;
|
padding-left: 174rpx;
|
||||||
}
|
padding-right: 32rpx;
|
||||||
&.look {
|
}
|
||||||
background-color: $my-main-color;
|
}
|
||||||
border-color: $my-main-color;
|
|
||||||
color: #fff;
|
.bottom {
|
||||||
}
|
gap: 48rpx;
|
||||||
}
|
margin-top: 44rpx;
|
||||||
}
|
|
||||||
</style>
|
.btn {
|
||||||
|
padding: 14rpx 76rpx;
|
||||||
|
border-radius: 100rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
|
||||||
|
&.back {
|
||||||
|
border-color: $my-main-color;
|
||||||
|
color: $my-main-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.look {
|
||||||
|
background-color: $my-main-color;
|
||||||
|
border-color: $my-main-color;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
1
src/auto-imports.d.ts
vendored
1
src/auto-imports.d.ts
vendored
@@ -39,6 +39,7 @@ declare global {
|
|||||||
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
||||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
||||||
const onShareAppMessage: typeof import('@dcloudio/uni-app')['onShareAppMessage']
|
const onShareAppMessage: typeof import('@dcloudio/uni-app')['onShareAppMessage']
|
||||||
|
const onShareTimeline: typeof import('@dcloudio/uni-app')['onShareTimeline']
|
||||||
const onShow: typeof import('@dcloudio/uni-app')['onShow']
|
const onShow: typeof import('@dcloudio/uni-app')['onShow']
|
||||||
const onUnload: typeof import('@dcloudio/uni-app')['onUnload']
|
const onUnload: typeof import('@dcloudio/uni-app')['onUnload']
|
||||||
const onUnmounted: typeof import('vue')['onUnmounted']
|
const onUnmounted: typeof import('vue')['onUnmounted']
|
||||||
|
|||||||
@@ -90,11 +90,13 @@ export const useWebSocket = defineStore('socketTask', () => {
|
|||||||
let onMessage = () => {
|
let onMessage = () => {
|
||||||
|
|
||||||
}
|
}
|
||||||
function setOnMessage(onMessageBallBack){
|
|
||||||
onMessage=onMessageBallBack
|
function setOnMessage(onMessageBallBack) {
|
||||||
|
onMessage = onMessageBallBack
|
||||||
}
|
}
|
||||||
function chnageInitMessage(data){
|
|
||||||
initMessage=data
|
function chnageInitMessage(data) {
|
||||||
|
initMessage = data
|
||||||
}
|
}
|
||||||
// 连接 WebSocket
|
// 连接 WebSocket
|
||||||
const connect = async (connectMsg, onMessageBallBack) => {
|
const connect = async (connectMsg, onMessageBallBack) => {
|
||||||
@@ -127,6 +129,8 @@ export const useWebSocket = defineStore('socketTask', () => {
|
|||||||
url: uni.conf.baseUrlwws + '?' + Date.now(),
|
url: uni.conf.baseUrlwws + '?' + Date.now(),
|
||||||
success: (res) => {
|
success: (res) => {
|
||||||
console.log('连接成功');
|
console.log('连接成功');
|
||||||
|
console.log('connectMsg', connectMsg);
|
||||||
|
console.log('initMessage', initMessage);
|
||||||
isConnected.value = true;
|
isConnected.value = true;
|
||||||
// 监听初始化成功在开启心跳
|
// 监听初始化成功在开启心跳
|
||||||
startHeartbeat();
|
startHeartbeat();
|
||||||
@@ -233,7 +237,7 @@ export const useWebSocket = defineStore('socketTask', () => {
|
|||||||
|
|
||||||
// 发送消息
|
// 发送消息
|
||||||
const sendMessage = (data) => {
|
const sendMessage = (data) => {
|
||||||
if(!data){
|
if (!data) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (isConnected.value && data) {
|
if (isConnected.value && data) {
|
||||||
@@ -369,6 +373,8 @@ export const useWebSocket = defineStore('socketTask', () => {
|
|||||||
initNetworkListener,
|
initNetworkListener,
|
||||||
connect,
|
connect,
|
||||||
allowReconnect,
|
allowReconnect,
|
||||||
socketTask,setOnMessage,chnageInitMessage
|
socketTask,
|
||||||
|
setOnMessage,
|
||||||
|
chnageInitMessage
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
@@ -39,6 +39,9 @@ export const useCartsStore = defineStore("cart", () => {
|
|||||||
);
|
);
|
||||||
//用户信息
|
//用户信息
|
||||||
const shopUserInfo = ref(uni.cache.get("shopUserInfo") || {});
|
const shopUserInfo = ref(uni.cache.get("shopUserInfo") || {});
|
||||||
|
|
||||||
|
//全部的商品列表
|
||||||
|
const allGoodsArr=ref([])
|
||||||
|
|
||||||
const consumeDiscount = ref({});
|
const consumeDiscount = ref({});
|
||||||
|
|
||||||
@@ -324,9 +327,13 @@ export const useCartsStore = defineStore("cart", () => {
|
|||||||
}
|
}
|
||||||
carts.value = arr
|
carts.value = arr
|
||||||
.map((v) => {
|
.map((v) => {
|
||||||
|
|
||||||
const item = getProductDetails(v);
|
const item = getProductDetails(v);
|
||||||
if (!item) {
|
const is_temporary=v.is_temporary||v.isTemporary
|
||||||
|
if(is_temporary){
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
if (!item&&!is_temporary) {
|
||||||
socketSendMsg({
|
socketSendMsg({
|
||||||
id: v.id,
|
id: v.id,
|
||||||
operate_type: "del",
|
operate_type: "del",
|
||||||
@@ -496,10 +503,10 @@ export const useCartsStore = defineStore("cart", () => {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const isUse =
|
const isUse =
|
||||||
shopUserInfo.value.isVip && shopUserInfo.value.isMemberPrice && shopInfo.value
|
shopUserInfo.value.isVip && shopUserInfo.value.isMemberPrice ?
|
||||||
.isMemberPrice == 1 ?
|
|
||||||
true :
|
true :
|
||||||
false;
|
false;
|
||||||
|
console.log('useVipPrice',isUse);
|
||||||
return isUse;
|
return isUse;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -754,6 +761,6 @@ export const useCartsStore = defineStore("cart", () => {
|
|||||||
//限时折扣
|
//限时折扣
|
||||||
limitTimeDiscount,
|
limitTimeDiscount,
|
||||||
shopUserInfo,
|
shopUserInfo,
|
||||||
socketSendMsg,
|
socketSendMsg,allGoodsArr
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@@ -25,7 +25,7 @@ export const Memberpay = defineStore('memberpay', {
|
|||||||
let res = await APIpayltPayVip({
|
let res = await APIpayltPayVip({
|
||||||
...data,
|
...data,
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
payType: 'wechatPay',
|
payType: 'WECHAT',
|
||||||
openId: uni.cache.get('userInfo').wechatOpenId,
|
openId: uni.cache.get('userInfo').wechatOpenId,
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-ALIPAY
|
// #ifdef MP-ALIPAY
|
||||||
@@ -113,7 +113,7 @@ export const Memberpay = defineStore('memberpay', {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
payType: 'wechatPay',
|
payType: 'WECHAT',
|
||||||
openId: uni.cache.get('userInfo').wechatOpenId,
|
openId: uni.cache.get('userInfo').wechatOpenId,
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-ALIPAY
|
// #ifdef MP-ALIPAY
|
||||||
|
|||||||
118
stores/user.js
118
stores/user.js
@@ -49,7 +49,7 @@ export const Storelogin = defineStore("login", {
|
|||||||
rawData: infoRes.rawData,
|
rawData: infoRes.rawData,
|
||||||
source: "wechat",
|
source: "wechat",
|
||||||
});
|
});
|
||||||
console.log('APIuserlogin',res);
|
console.log('APIuserlogin', res);
|
||||||
if (res) {
|
if (res) {
|
||||||
this.token = res.token;
|
this.token = res.token;
|
||||||
this.miniAppOpenId = res.userInfo
|
this.miniAppOpenId = res.userInfo
|
||||||
@@ -110,12 +110,90 @@ export const productStore = defineStore("product", {
|
|||||||
latitude: "",
|
latitude: "",
|
||||||
longitude: "",
|
longitude: "",
|
||||||
},
|
},
|
||||||
|
token: "",
|
||||||
|
miniAppOpenId: "",
|
||||||
|
userInfo: "",
|
||||||
|
shopId: uni.cache.get('shopId') || '',
|
||||||
shopInfo: {
|
shopInfo: {
|
||||||
shopId: "",
|
shopId: "",
|
||||||
isOrderFence: 0,
|
isOrderFence: 0,
|
||||||
|
id: '',
|
||||||
},
|
},
|
||||||
|
shopUserInfo:{
|
||||||
|
|
||||||
|
},
|
||||||
|
isHasLogin:false
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
|
actionslogin() {
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
uni.login({
|
||||||
|
provider: "weixin",
|
||||||
|
success: (data) => {
|
||||||
|
// 微信小程序环境
|
||||||
|
uni.getUserInfo({
|
||||||
|
provider: "weixin",
|
||||||
|
success: async (infoRes) => {
|
||||||
|
let res = await APIuserlogin({
|
||||||
|
code: data.code, //临时登录凭证
|
||||||
|
rawData: infoRes.rawData,
|
||||||
|
source: "wechat",
|
||||||
|
});
|
||||||
|
console.log('APIuserlogin', res);
|
||||||
|
if (res) {
|
||||||
|
this.token = res.token;
|
||||||
|
this.isHasLogin=true
|
||||||
|
this.miniAppOpenId = res.userInfo
|
||||||
|
.miniAppOpenId;
|
||||||
|
this.userInfo = res.userInfo;
|
||||||
|
uni.cache.set("token", res.token);
|
||||||
|
uni.cache.set("userInfo", res.userInfo);
|
||||||
|
uni.cache.set("followIndex", res
|
||||||
|
.followIndex || "");
|
||||||
|
}
|
||||||
|
resolve(true);
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
reject(false);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// #endif
|
||||||
|
// #ifdef MP-ALIPAY
|
||||||
|
my.getAuthCode({
|
||||||
|
scopes: "auth_base",
|
||||||
|
success: async (data) => {
|
||||||
|
// 支付宝小程序环境
|
||||||
|
// my.getAuthUserInfo({
|
||||||
|
// success: async (infoRes) => {
|
||||||
|
let res = await APIuserlogin({
|
||||||
|
code: data.authCode, //临时登录凭证
|
||||||
|
// rawData: JSON.stringify(infoRes),
|
||||||
|
source: "alipay",
|
||||||
|
});
|
||||||
|
if (res) {
|
||||||
|
this.isHasLogin=true
|
||||||
|
this.token = res.token;
|
||||||
|
this.miniAppOpenId = res.userInfo.miniAppOpenId;
|
||||||
|
this.userInfo = res.userInfo;
|
||||||
|
uni.cache.set("token", res.token);
|
||||||
|
uni.cache.set("openId", res.userInfo.alipayOpenId);
|
||||||
|
uni.cache.set("userInfo", res.userInfo);
|
||||||
|
resolve(true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail: () => {
|
||||||
|
reject(false);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// #endif
|
||||||
|
// #ifdef H5
|
||||||
|
resolve(true)
|
||||||
|
// #endif
|
||||||
|
});
|
||||||
|
},
|
||||||
getLocation() {
|
getLocation() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
console.log("获取经纬度");
|
console.log("获取经纬度");
|
||||||
@@ -185,11 +263,11 @@ export const productStore = defineStore("product", {
|
|||||||
console.log("扫码内容", q);
|
console.log("扫码内容", q);
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url:'/pages/product/index'
|
url: '/pages/product/index'
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
if (q) {
|
if (q) {
|
||||||
console.log(q);
|
console.log(q);
|
||||||
@@ -448,19 +526,43 @@ export const productStore = defineStore("product", {
|
|||||||
|
|
||||||
// 通过shopId 获取店铺会员信息
|
// 通过shopId 获取店铺会员信息
|
||||||
actionsproductqueryProduct() {
|
actionsproductqueryProduct() {
|
||||||
|
console.log('actionsproductqueryProduct:token',uni.cache.get('token'));
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
let res = await APIshopUserInfo();
|
let res = await APIshopUserInfo();
|
||||||
uni.cache.set("shopUserInfo", res);
|
if(res&& typeof res === 'object'){
|
||||||
uni.cache.set("orderVIP", res);
|
this.shopUserInfo=res;
|
||||||
uni.cache.set("ordershopUserInfo", res.shopInfo);
|
uni.cache.set("shopUserInfo", res);
|
||||||
resolve(res);
|
uni.cache.set("orderVIP", res);
|
||||||
|
uni.cache.set("ordershopUserInfo", res.shopInfo);
|
||||||
|
resolve(res);
|
||||||
|
}else{
|
||||||
|
reject(false);
|
||||||
|
}
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
reject(false);
|
reject(false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async pageOnload() {
|
||||||
|
console.log('开始加载必须数据')
|
||||||
|
//登录
|
||||||
|
await this.actionslogin()
|
||||||
|
//获取会员信息
|
||||||
|
await this.actionsproductqueryProduct()
|
||||||
|
//获取店铺信息
|
||||||
|
await this.getShopInfo()
|
||||||
|
console.log('必须数据加载完毕')
|
||||||
|
},
|
||||||
|
async getShopInfo(shopId) {
|
||||||
|
const shopRes = await APIusershopInfodetail({
|
||||||
|
shopId: this.shopId || shopId,
|
||||||
|
});
|
||||||
|
this.shopInfo = shopRes.shopInfo;
|
||||||
|
uni.cache.set("shopInfo", shopRes.shopInfo);
|
||||||
|
},
|
||||||
// 用户信息获取
|
// 用户信息获取
|
||||||
actionsAPIuser() {
|
actionsAPIuser() {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
311
utils/share.js
311
utils/share.js
@@ -1,3 +1,15 @@
|
|||||||
|
import {
|
||||||
|
autoBindInviteUser,
|
||||||
|
autoGetInviteCode
|
||||||
|
} from '@/common/api/market/distribution.js'
|
||||||
|
import {
|
||||||
|
APIshopUserInfo,
|
||||||
|
APIusershopInfodetail
|
||||||
|
} from '@/common/api/member.js'
|
||||||
|
import {
|
||||||
|
productStore
|
||||||
|
} from '@/stores/user.js';
|
||||||
|
const accountStore = productStore();
|
||||||
const accountInfo = wx.getAccountInfoSync();
|
const accountInfo = wx.getAccountInfoSync();
|
||||||
export const envVersion = accountInfo.miniProgram.envVersion;
|
export const envVersion = accountInfo.miniProgram.envVersion;
|
||||||
let type = 3;
|
let type = 3;
|
||||||
@@ -13,9 +25,306 @@ if (envVersion === 'trial') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定用户邀请关系(核心函数)
|
||||||
|
* 功能说明:校验邀请码有效性,有效则调用自动绑定接口完成邀请关系绑定
|
||||||
|
* @param {Object} args - 绑定邀请关系的入参对象
|
||||||
|
* @param {number} [args.shopUserId] - 需要绑定邀请人的用户ID(integer <int64>,可选)
|
||||||
|
* @param {number} [args.shopId] - 店铺ID(integer <int64>,可选)
|
||||||
|
* @param {string} args.inviteCode - 邀请人的邀请码(必填,非空校验通过后才会执行绑定逻辑)
|
||||||
|
* @returns {void} 无返回值
|
||||||
|
*/
|
||||||
|
export async function bindInvite(args) {
|
||||||
|
// 解构入参对象,获取需要的核心参数
|
||||||
|
const {
|
||||||
|
shopUserId,
|
||||||
|
shopId,
|
||||||
|
inviteCode
|
||||||
|
} = args;
|
||||||
|
|
||||||
|
// 校验邀请码有效性:若邀请码为空、null、undefined,则直接返回,不执行后续绑定逻辑
|
||||||
|
if (!inviteCode || inviteCode === null || inviteCode === undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const shopUserInfo = uni.cache.get('shopUserInfo')
|
||||||
|
// 邀请码有效,调用自动绑定邀请人接口,传递绑定所需参数
|
||||||
|
return await autoBindInviteUser({
|
||||||
|
id: shopUserInfo.id,
|
||||||
|
shopId,
|
||||||
|
inviteCode
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export function wxShare(par) {
|
export function wxShare(par) {
|
||||||
return {
|
return {
|
||||||
...par,
|
...par,
|
||||||
type
|
type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function returnCommonQuery() {
|
||||||
|
const shopId = uni.cache.get('shopId')
|
||||||
|
const shopUserInfo = uni.cache.get('shopUserInfo')
|
||||||
|
const shopInfo = uni.cache.get('shopInfo')
|
||||||
|
const inviteCode = await autoGetInviteCode({
|
||||||
|
shopId: shopId,
|
||||||
|
shopUserId: shopUserInfo.id
|
||||||
|
})
|
||||||
|
|
||||||
|
const queryJson = {
|
||||||
|
inviteCode: (inviteCode && inviteCode !== true) ? inviteCode : null,
|
||||||
|
shopId,
|
||||||
|
shopUserId: shopUserInfo.id,
|
||||||
|
}
|
||||||
|
return Promise.resolve(queryJson)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function jsonToUrl(json) {
|
||||||
|
let result = ''
|
||||||
|
for (let key in json) {
|
||||||
|
if (json[key]) {
|
||||||
|
if (result === '') {
|
||||||
|
result += `${key}=${json[key]}`
|
||||||
|
} else {
|
||||||
|
result += `&${key}=${json[key]}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Object} query 参数对象
|
||||||
|
* @param {Array} showkeys 需要显示的key不包括公共参数
|
||||||
|
*/
|
||||||
|
export async function returnQuery(query, showkeys) {
|
||||||
|
|
||||||
|
|
||||||
|
const shopId = uni.cache.get('shopId')
|
||||||
|
const shopUserInfo = uni.cache.get('shopUserInfo')
|
||||||
|
const shopInfo = uni.cache.get('shopInfo')
|
||||||
|
const inviteCode = await autoGetInviteCode({
|
||||||
|
shopId: shopId,
|
||||||
|
shopUserId: shopUserInfo.id
|
||||||
|
})
|
||||||
|
|
||||||
|
const pages = getCurrentPages();
|
||||||
|
const currentPage = pages[pages.length - 1];
|
||||||
|
const currentPath = currentPage.route;
|
||||||
|
const currentOptions = currentPage.options;
|
||||||
|
|
||||||
|
|
||||||
|
let sharePath = `/${currentPath}`;
|
||||||
|
const queryJson = {
|
||||||
|
inviteCode: (inviteCode && inviteCode !== true) ? inviteCode : null,
|
||||||
|
shopId,
|
||||||
|
shopUserId: shopUserInfo.id,
|
||||||
|
...query
|
||||||
|
}
|
||||||
|
for (const key in currentOptions) {
|
||||||
|
if (currentOptions.hasOwnProperty(key)) {
|
||||||
|
if (showkeys && Array.isArray(showkeys) && showkeys.includes(key)) {
|
||||||
|
queryJson[key] = encodeURIComponent(currentOptions[key])
|
||||||
|
} else {
|
||||||
|
queryJson[key] = encodeURIComponent(currentOptions[key])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
queryJson.shopId = shopId
|
||||||
|
queryJson.inviteCode = (inviteCode && inviteCode !== true) ? inviteCode : null
|
||||||
|
queryJson.shopUserId = shopUserInfo.id
|
||||||
|
|
||||||
|
let result = ''
|
||||||
|
for (let key in queryJson) {
|
||||||
|
if (queryJson[key]) {
|
||||||
|
if (result === '') {
|
||||||
|
result += `${key}=${queryJson[key]}`
|
||||||
|
} else {
|
||||||
|
result += `&${key}=${queryJson[key]}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Promise.resolve(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseQueryString(queryString) {
|
||||||
|
const queryParams = queryString.split("&").map((param) => param.split("="));
|
||||||
|
const params = {};
|
||||||
|
for (const [key, value] of queryParams) {
|
||||||
|
params[key] = value;
|
||||||
|
}
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 混入的 onLoad 核心逻辑(抽成独立函数)
|
||||||
|
* @param {Object} opt - 页面 onLoad 接收的参数
|
||||||
|
* @param {Object} vm - 组件实例(this)
|
||||||
|
*/
|
||||||
|
export async function handleMixinOnLoad(opt, vm) {
|
||||||
|
console.log('onLoad');
|
||||||
|
const options = {}
|
||||||
|
if (opt.q) {
|
||||||
|
const q = decodeURIComponent(opt.q);
|
||||||
|
const params = parseQueryString(q.split("?")[1]);
|
||||||
|
Object.assign(options, params);
|
||||||
|
} else {
|
||||||
|
Object.assign(options, opt);
|
||||||
|
}
|
||||||
|
console.log('options', options);
|
||||||
|
if (options.shopId) {
|
||||||
|
uni.cache.set('shopId', options.shopId)
|
||||||
|
accountStore.shopId = options.shopId
|
||||||
|
await accountStore.pageOnload()
|
||||||
|
}
|
||||||
|
uni.setStorageSync('loadFinsh', true)
|
||||||
|
// const shopId = uni.cache.get('shopId')
|
||||||
|
// const shopUserInfo = uni.cache.get('shopUserInfo')
|
||||||
|
// const shopInfo = uni.cache.get('shopInfo')
|
||||||
|
// const inviteCode = await autoGetInviteCode({
|
||||||
|
// shopId: shopId,
|
||||||
|
// shopUserId: shopUserInfo.id
|
||||||
|
// })
|
||||||
|
if (options.inviteCode) {
|
||||||
|
return await bindInvite(options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
import {
|
||||||
|
isJsonArrayString
|
||||||
|
} from '@/utils/util.js';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回店铺首页图片
|
||||||
|
*/
|
||||||
|
export function returnIndexBg() {
|
||||||
|
try {
|
||||||
|
const orderVIP = uni.cache.get('orderVIP')
|
||||||
|
if (!orderVIP || !orderVIP.shopExtendList) {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
if (!isJsonArrayString(orderVIP.shopExtendList[0].value)) {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
return JSON.parse(orderVIP.shopExtendList[0].value)[0]
|
||||||
|
} catch (error) {
|
||||||
|
console.error('orderVIP.shopExtendList[0].value 格式不正确')
|
||||||
|
return ''
|
||||||
|
//TODO handle the exception
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// utils/share.js
|
||||||
|
export const shareMixin = {
|
||||||
|
|
||||||
|
// async onLoad(opt) {
|
||||||
|
// console.log('onLoad');
|
||||||
|
// const options = {}
|
||||||
|
// if (opt.q) {
|
||||||
|
// const q = decodeURIComponent(opt.q);
|
||||||
|
// const params = parseQueryString(q.split("?")[1]);
|
||||||
|
// Object.assign(options, params);
|
||||||
|
// } else {
|
||||||
|
// Object.assign(options, opt);
|
||||||
|
// }
|
||||||
|
// console.log('options', options);
|
||||||
|
// if (options.shopId) {
|
||||||
|
// uni.cache.set('shopId', options.shopId)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const shopId = uni.cache.get('shopId')
|
||||||
|
// const shopUserInfo = uni.cache.get('shopUserInfo')
|
||||||
|
// const shopInfo = uni.cache.get('shopInfo')
|
||||||
|
// const inviteCode = await autoGetInviteCode({
|
||||||
|
// shopId: shopId,
|
||||||
|
// shopUserId: shopUserInfo.id
|
||||||
|
// })
|
||||||
|
|
||||||
|
// uni.setStorageSync('loadFinsh',true)
|
||||||
|
|
||||||
|
|
||||||
|
// if (options.inviteCode) {
|
||||||
|
// bindInvite(options)
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
async onShareAppMessage(res) {
|
||||||
|
|
||||||
|
const shopInfo = uni.cache.get('shopInfo')
|
||||||
|
const pages = getCurrentPages();
|
||||||
|
const currentPage = pages[pages.length - 1];
|
||||||
|
const currentPath = currentPage.route;
|
||||||
|
const currentOptions = currentPage.options;
|
||||||
|
|
||||||
|
let sharePath = `/${currentPath}`;
|
||||||
|
|
||||||
|
|
||||||
|
const query = await returnQuery()
|
||||||
|
const indexBg = returnIndexBg()
|
||||||
|
console.log('indexBg', indexBg);
|
||||||
|
const imageUrl = indexBg || shopInfo.logo
|
||||||
|
// 全局默认配置(可被页面覆盖)
|
||||||
|
const defaultShareConfig = {
|
||||||
|
title: shopInfo.shopName,
|
||||||
|
path: sharePath + '?' + query,
|
||||||
|
imageUrl: imageUrl,
|
||||||
|
query,
|
||||||
|
// desc: '描述',
|
||||||
|
success: (res) => {
|
||||||
|
console.log('分享好友成功', res);
|
||||||
|
// 可加埋点等统一逻辑
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
console.error('分享好友失败', err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 页面自定义配置覆盖全局
|
||||||
|
const pageShareConfig = this.$options.shareConfig || {};
|
||||||
|
console.log('mixIn onShareAppMessage', {
|
||||||
|
...defaultShareConfig,
|
||||||
|
...pageShareConfig
|
||||||
|
})
|
||||||
|
return wxShare({
|
||||||
|
...defaultShareConfig,
|
||||||
|
...pageShareConfig
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
async onShareTimeline() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const shopInfo = uni.cache.get('shopInfo')
|
||||||
|
|
||||||
|
const pages = getCurrentPages();
|
||||||
|
const currentPage = pages[pages.length - 1];
|
||||||
|
const currentPath = currentPage.route;
|
||||||
|
const currentOptions = currentPage.options;
|
||||||
|
|
||||||
|
|
||||||
|
let sharePath = `/${currentPath}`;
|
||||||
|
|
||||||
|
|
||||||
|
const query = await returnQuery()
|
||||||
|
const indexBg = returnIndexBg()
|
||||||
|
const imageUrl = indexBg || shopInfo.logo
|
||||||
|
const defaultTimelineConfig = {
|
||||||
|
title: shopInfo.shopName,
|
||||||
|
path: sharePath + '?' + query,
|
||||||
|
imageUrl: imageUrl,
|
||||||
|
query,
|
||||||
|
};
|
||||||
|
|
||||||
|
const pageTimelineConfig = this.$options.shareTimelineConfig || {};
|
||||||
|
return wxShare({
|
||||||
|
...defaultTimelineConfig,
|
||||||
|
...pageTimelineConfig
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -15,6 +15,7 @@ module.exports = defineConfig({
|
|||||||
{
|
{
|
||||||
"@dcloudio/uni-app": [
|
"@dcloudio/uni-app": [
|
||||||
"onShareAppMessage",
|
"onShareAppMessage",
|
||||||
|
"onShareTimeline",
|
||||||
"onLoad",
|
"onLoad",
|
||||||
"onShow",
|
"onShow",
|
||||||
"onHide",
|
"onHide",
|
||||||
@@ -33,11 +34,11 @@ module.exports = defineConfig({
|
|||||||
],
|
],
|
||||||
server: {
|
server: {
|
||||||
proxy: {
|
proxy: {
|
||||||
'/api': {
|
'/testApi': {
|
||||||
// target: 'https://cashier.sxczgkj.com', // 目标服务器地址
|
// target: 'https://cashier.sxczgkj.com', // 目标服务器地址
|
||||||
target: 'http://192.168.1.42/', // 目标服务器地址
|
target: 'http://192.168.1.42/', // 目标服务器地址
|
||||||
changeOrigin: true, // 是否更改请求源
|
changeOrigin: true, // 是否更改请求源
|
||||||
rewrite: path => path.replace(/^\/api/, '')
|
rewrite: path => path.replace(/^\/testApi/, '')
|
||||||
},
|
},
|
||||||
'/prodApi': {
|
'/prodApi': {
|
||||||
target: 'https://cashier.sxczgkj.com', // 目标服务器地址
|
target: 'https://cashier.sxczgkj.com', // 目标服务器地址
|
||||||
|
|||||||
Reference in New Issue
Block a user