Merge branch 'test' of https://newgitea.sxczgkj.cn/czg_team/cashier_wx into prod
This commit is contained in:
@@ -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'
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -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) => {
|
||||||
|
|||||||
@@ -52,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) {
|
||||||
@@ -135,7 +135,7 @@ export default async (params) => {
|
|||||||
// 不管成功还是失败都会执行
|
// 不管成功还是失败都会执行
|
||||||
setTimeout((res) => {
|
setTimeout((res) => {
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
uni.hideToast();
|
// uni.hideToast();
|
||||||
}, 10000);
|
}, 10000);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
// 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 = 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,
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ page,
|
|||||||
image {
|
image {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
.relative{
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
.absolute{
|
.absolute{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|||||||
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>
|
||||||
@@ -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
@@ -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
@@ -2,9 +2,11 @@
|
|||||||
<view class="content min-page bg-f7">
|
<view class="content min-page bg-f7">
|
||||||
<view class="contentbox">
|
<view class="contentbox">
|
||||||
<template v-if="shopExtend.length">
|
<template v-if="shopExtend.length">
|
||||||
<image class="bg" :src="shopExtend[0].value" mode="aspectFill" v-if="!isJsonArrayString(shopExtend[0].value)"></image>
|
<image class="bg" :src="shopExtend[0].value" mode="aspectFill"
|
||||||
|
v-if="!isJsonArrayString(shopExtend[0].value)"></image>
|
||||||
<swiper class="swiper" autoplay circular v-else>
|
<swiper class="swiper" autoplay circular v-else>
|
||||||
<swiper-item class="swiper-item" v-for="(item, index) in JSON.parse(shopExtend[0].value)" :key="index">
|
<swiper-item class="swiper-item" v-for="(item, index) in JSON.parse(shopExtend[0].value)"
|
||||||
|
:key="index">
|
||||||
<image class="swiper-bg" :src="item"></image>
|
<image class="swiper-bg" :src="item"></image>
|
||||||
</swiper-item>
|
</swiper-item>
|
||||||
</swiper>
|
</swiper>
|
||||||
@@ -118,516 +120,535 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import attractPopup from '@/components/attract-popup.vue';
|
import attractPopup from '@/components/attract-popup.vue';
|
||||||
import { homeData } from '@/common/api/market/index.js';
|
import {
|
||||||
import { getMemberConfig, getRechargeConfig } from '@/common/api/index/index.js';
|
homeData
|
||||||
import { ref, reactive, defineProps, defineEmits, onMounted } from 'vue';
|
} from '@/common/api/market/index.js';
|
||||||
import { isJsonArrayString } from '@/utils/util.js';
|
import {
|
||||||
|
getMemberConfig,
|
||||||
|
getRechargeConfig
|
||||||
|
} from '@/common/api/index/index.js';
|
||||||
|
import {
|
||||||
|
ref,
|
||||||
|
reactive,
|
||||||
|
defineProps,
|
||||||
|
defineEmits,
|
||||||
|
onMounted
|
||||||
|
} from 'vue';
|
||||||
|
import {
|
||||||
|
isJsonArrayString
|
||||||
|
} from '@/utils/util.js';
|
||||||
|
|
||||||
const attractPopupRef = ref(null);
|
const attractPopupRef = ref(null);
|
||||||
|
|
||||||
const imgs = {
|
const imgs = {
|
||||||
recharge: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/2f22c0ced494497e8d6f981832b191c9.png',
|
recharge: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/2f22c0ced494497e8d6f981832b191c9.png',
|
||||||
share: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/bcb8d461e96d445ba40256079da775b3.png',
|
share: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/bcb8d461e96d445ba40256079da775b3.png',
|
||||||
vip: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/cfc3bf5ba12747c6ada4d5a388aceca3.png',
|
vip: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/cfc3bf5ba12747c6ada4d5a388aceca3.png',
|
||||||
orderFood: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/7c54a22d56f44813bf3f76c1a82a34f3.png',
|
orderFood: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/7c54a22d56f44813bf3f76c1a82a34f3.png',
|
||||||
big_orderFood: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/b3c7f6139eff4a7d81482cf533ec79fa.png',
|
big_orderFood: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/b3c7f6139eff4a7d81482cf533ec79fa.png',
|
||||||
takeout: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/3623cbf425d845a993acb4309404a7b9.png',
|
takeout: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/3623cbf425d845a993acb4309404a7b9.png',
|
||||||
groupBuying: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/117745e0f3db48b489f9d4e5c5967043.png',
|
groupBuying: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/117745e0f3db48b489f9d4e5c5967043.png',
|
||||||
points: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/df0758f7b86449f89f882e50226e17c7.png',
|
points: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/df0758f7b86449f89f882e50226e17c7.png',
|
||||||
code: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/044dcaf913054f03a9db7983f048b1e6.png',
|
code: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/044dcaf913054f03a9db7983f048b1e6.png',
|
||||||
defaultAvatar: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/b98d2c7110e847f996e8d7ba4342f0a5.png',
|
defaultAvatar: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/b98d2c7110e847f996e8d7ba4342f0a5.png',
|
||||||
taocan: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/1eb9aa9b865b47b39ab9d7ac404601a9.png'
|
taocan: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/4/1eb9aa9b865b47b39ab9d7ac404601a9.png'
|
||||||
};
|
};
|
||||||
// 定义接收的属性
|
// 定义接收的属性
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
shopExtend: {
|
shopExtend: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: []
|
default: []
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function toGroupBuying() {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/groupBuying/index/index'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function toFenxiao() {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/distribution/shop-detail/index?shopId=' + uni.cache.get('shopId')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function toIntegralMall() {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/scoreShop/index/index?shopId=' + uni.cache.get('shopId')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
import { productStore } from '@/stores/user.js';
|
|
||||||
import { onShow } from '@dcloudio/uni-app';
|
|
||||||
|
|
||||||
// 显示弹窗
|
|
||||||
const popupShow = ref(false);
|
|
||||||
const scanCodehandle = (i) => {
|
|
||||||
popupShow.value = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 预点单
|
|
||||||
function beforehandOrderHandle() {
|
|
||||||
popupShow.value = false;
|
|
||||||
uni.cache.set('dinersNum', 1);
|
|
||||||
uni.cache.set('tableCode', shopUserInfo.id);
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/pages/product/index?type=beforehand'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 扫码点餐
|
|
||||||
async function scanOrderHandle() {
|
|
||||||
popupShow.value = false;
|
|
||||||
const store = productStore();
|
|
||||||
await store.scanCodeactions();
|
|
||||||
}
|
|
||||||
|
|
||||||
function toTaocan() {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/userPackage/index/index'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const memberindex = (url) => {
|
|
||||||
uni.pro.navigateTo(url, {
|
|
||||||
shopId: uni.cache.get('shopId'),
|
|
||||||
type: 'index'
|
|
||||||
});
|
|
||||||
};
|
|
||||||
const shopUserInfo = reactive({});
|
|
||||||
Object.assign(shopUserInfo, uni.cache.get('shopUserInfo') || {});
|
|
||||||
|
|
||||||
function tomember() {
|
|
||||||
if (isMember.value) {
|
|
||||||
const shopId = uni.cache.get('shopId');
|
|
||||||
if (!shopUserInfo.isVip) {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/user/vip/buy-vip?shopId=' + shopId
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
uni.navigateTo({
|
|
||||||
url: '/user/vip/vip?shopId=' + shopId
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
uni.showToast({
|
|
||||||
title: '暂未开放',
|
|
||||||
icon: 'none'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function toCharge() {
|
|
||||||
if (isCharge.value) {
|
|
||||||
const shopId = uni.cache.get('shopId');
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/pages/user/member/czzx?shopId=' + shopId
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
uni.showToast({
|
|
||||||
title: '暂未开放',
|
|
||||||
icon: 'none'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const getQueryString = (url, name) => {
|
|
||||||
//解码
|
|
||||||
var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i');
|
|
||||||
var r = url.substr(1).match(reg);
|
|
||||||
if (r != null) {
|
|
||||||
return r[2];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 获取会员配置
|
|
||||||
const isMember = ref(0);
|
|
||||||
const isCharge = ref(0);
|
|
||||||
async function getVipConfig() {
|
|
||||||
try {
|
|
||||||
const res1 = await getMemberConfig({
|
|
||||||
shopId: uni.cache.get('shopId')
|
|
||||||
});
|
|
||||||
const res2 = await getRechargeConfig({
|
|
||||||
shopId: uni.cache.get('shopId')
|
|
||||||
});
|
|
||||||
|
|
||||||
isMember.value = +res1.memberConfig.isOpen;
|
|
||||||
isCharge.value = +res2.isEnable;
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const allConfig = reactive({
|
|
||||||
takeout: 0,
|
|
||||||
group: 0,
|
|
||||||
pointsMall: 0,
|
|
||||||
distribution: 0,
|
|
||||||
couponNum: 0,
|
|
||||||
pointNum: 0
|
|
||||||
});
|
|
||||||
|
|
||||||
function getHomeData() {
|
|
||||||
homeData().then((res) => {
|
|
||||||
Object.assign(allConfig, res);
|
|
||||||
imgs.defaultAvatar = res.userAvatar ? res.userAvatar : imgs.defaultAvatar;
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
onMounted(() => {
|
|
||||||
updateData();
|
|
||||||
});
|
|
||||||
|
|
||||||
function updateData() {
|
function toGroupBuying() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/groupBuying/index/index'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function toFenxiao() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/distribution/shop-detail/index?shopId=' + uni.cache.get('shopId')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function toIntegralMall() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/scoreShop/index/index?shopId=' + uni.cache.get('shopId')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
import {
|
||||||
|
productStore
|
||||||
|
} from '@/stores/user.js';
|
||||||
|
import {
|
||||||
|
onShow
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
|
||||||
|
// 显示弹窗
|
||||||
|
const popupShow = ref(false);
|
||||||
|
const scanCodehandle = (i) => {
|
||||||
|
popupShow.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 预点单
|
||||||
|
function beforehandOrderHandle() {
|
||||||
|
popupShow.value = false;
|
||||||
|
uni.cache.set('dinersNum', 1);
|
||||||
|
uni.cache.set('tableCode', shopUserInfo.id);
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/product/index?type=beforehand'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 扫码点餐
|
||||||
|
async function scanOrderHandle() {
|
||||||
|
popupShow.value = false;
|
||||||
|
const store = productStore();
|
||||||
|
await store.scanCodeactions();
|
||||||
|
}
|
||||||
|
|
||||||
|
function toTaocan() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/userPackage/index/index'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const memberindex = (url) => {
|
||||||
|
uni.pro.navigateTo(url, {
|
||||||
|
shopId: uni.cache.get('shopId'),
|
||||||
|
type: 'index'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const shopUserInfo = reactive({});
|
||||||
Object.assign(shopUserInfo, uni.cache.get('shopUserInfo') || {});
|
Object.assign(shopUserInfo, uni.cache.get('shopUserInfo') || {});
|
||||||
getVipConfig();
|
|
||||||
getHomeData();
|
function tomember() {
|
||||||
}
|
if (isMember.value) {
|
||||||
defineExpose({
|
const shopId = uni.cache.get('shopId');
|
||||||
updateData
|
if (!shopUserInfo.isVip) {
|
||||||
});
|
uni.navigateTo({
|
||||||
|
url: '/user/vip/buy-vip?shopId=' + shopId
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/user/vip/vip?shopId=' + shopId
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: '暂未开放',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toCharge() {
|
||||||
|
if (isCharge.value) {
|
||||||
|
const shopId = uni.cache.get('shopId');
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/user/member/czzx?shopId=' + shopId
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: '暂未开放',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const getQueryString = (url, name) => {
|
||||||
|
//解码
|
||||||
|
var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i');
|
||||||
|
var r = url.substr(1).match(reg);
|
||||||
|
if (r != null) {
|
||||||
|
return r[2];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取会员配置
|
||||||
|
const isMember = ref(0);
|
||||||
|
const isCharge = ref(0);
|
||||||
|
async function getVipConfig() {
|
||||||
|
try {
|
||||||
|
const res1 = await getMemberConfig({
|
||||||
|
shopId: uni.cache.get('shopId')
|
||||||
|
});
|
||||||
|
const res2 = await getRechargeConfig({
|
||||||
|
shopId: uni.cache.get('shopId')
|
||||||
|
});
|
||||||
|
|
||||||
|
isMember.value = +res1.memberConfig.isOpen;
|
||||||
|
isCharge.value = +res2.isEnable;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const allConfig = reactive({
|
||||||
|
takeout: 0,
|
||||||
|
group: 0,
|
||||||
|
pointsMall: 0,
|
||||||
|
distribution: 0,
|
||||||
|
couponNum: 0,
|
||||||
|
pointNum: 0
|
||||||
|
});
|
||||||
|
|
||||||
|
function getHomeData() {
|
||||||
|
homeData().then((res) => {
|
||||||
|
Object.assign(allConfig, res);
|
||||||
|
imgs.defaultAvatar = res.userAvatar ? res.userAvatar : imgs.defaultAvatar;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
onMounted(() => {
|
||||||
|
updateData();
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateData() {
|
||||||
|
Object.assign(shopUserInfo, uni.cache.get('shopUserInfo') || {});
|
||||||
|
getVipConfig();
|
||||||
|
getHomeData();
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
updateData
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
page {
|
page {
|
||||||
background: #f6f8fa;
|
background: #f6f8fa;
|
||||||
}
|
}
|
||||||
|
|
||||||
.swiper {
|
.swiper {
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
.swiper-item {
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
.swiper-bg {
|
.swiper-item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
|
.swiper-bg {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
.contentbox {
|
.contentbox {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
|
||||||
height: 430rpx;
|
|
||||||
|
|
||||||
.bg {
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 430rpx;
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.contentboxitem {
|
.bg {
|
||||||
position: absolute;
|
width: 100%;
|
||||||
bottom: 0;
|
height: 100%;
|
||||||
width: 90%;
|
position: absolute;
|
||||||
left: 50%;
|
top: 0;
|
||||||
transform: translate(-50%, 50%);
|
left: 0;
|
||||||
padding: 38rpx 0 26rpx 0;
|
z-index: -1;
|
||||||
background: rgba(255, 255, 255, 0.98);
|
|
||||||
box-shadow: 0rpx 6rpx 12rpx 2rpx rgba(0, 0, 0, 0.16);
|
|
||||||
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
|
||||||
|
|
||||||
.contentboxitemleft {
|
|
||||||
width: 50%;
|
|
||||||
border-right: 2rpx solid #623618;
|
|
||||||
|
|
||||||
image {
|
|
||||||
width: 134rpx;
|
|
||||||
height: 134rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.contentboxitemlefttextone {
|
|
||||||
margin-top: 10rpx;
|
|
||||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 32rpx;
|
|
||||||
color: #333333;
|
|
||||||
}
|
|
||||||
|
|
||||||
.contentboxitemlefttexttow {
|
|
||||||
margin-top: 2rpx;
|
|
||||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.contentboxitemright {
|
.contentboxitem {
|
||||||
width: 50%;
|
position: absolute;
|
||||||
padding: 0 34rpx;
|
bottom: 0;
|
||||||
|
width: 90%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, 50%);
|
||||||
|
padding: 38rpx 0 26rpx 0;
|
||||||
|
background: rgba(255, 255, 255, 0.98);
|
||||||
|
box-shadow: 0rpx 6rpx 12rpx 2rpx rgba(0, 0, 0, 0.16);
|
||||||
|
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
||||||
|
|
||||||
.contentboxitemright_item:nth-child(2) {
|
.contentboxitemleft {
|
||||||
margin-top: 30rpx;
|
width: 50%;
|
||||||
}
|
border-right: 2rpx solid #623618;
|
||||||
|
|
||||||
.contentboxitemright_item {
|
|
||||||
image {
|
image {
|
||||||
width: 96rpx;
|
width: 134rpx;
|
||||||
height: 96rpx;
|
height: 134rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.contentboxitemright_itembox {
|
.contentboxitemlefttextone {
|
||||||
width: 170rpx;
|
margin-top: 10rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
text:nth-child(1) {
|
.contentboxitemlefttexttow {
|
||||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
margin-top: 2rpx;
|
||||||
font-weight: 400;
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
font-size: 32rpx;
|
font-weight: 400;
|
||||||
color: #333333;
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentboxitemright {
|
||||||
|
width: 50%;
|
||||||
|
padding: 0 34rpx;
|
||||||
|
|
||||||
|
.contentboxitemright_item:nth-child(2) {
|
||||||
|
margin-top: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentboxitemright_item {
|
||||||
|
image {
|
||||||
|
width: 96rpx;
|
||||||
|
height: 96rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
text:nth-child(2) {
|
.contentboxitemright_itembox {
|
||||||
margin-top: 2rpx;
|
width: 170rpx;
|
||||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
|
||||||
font-weight: 400;
|
text:nth-child(1) {
|
||||||
font-size: 24rpx;
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
color: #999999;
|
font-weight: 400;
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
text:nth-child(2) {
|
||||||
|
margin-top: 2rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.popup-content {
|
.popup-content {
|
||||||
width: 90vw;
|
width: 90vw;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
|
||||||
.header-wrap {
|
.header-wrap {
|
||||||
height: 64px;
|
height: 64px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
border-bottom: 1px solid #ececec;
|
border-bottom: 1px solid #ececec;
|
||||||
padding: 0 28upx;
|
padding: 0 28upx;
|
||||||
|
|
||||||
.t {
|
.t {
|
||||||
font-size: 32upx;
|
font-size: 32upx;
|
||||||
color: #333;
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close {
|
||||||
|
$size: 60upx;
|
||||||
|
width: $size;
|
||||||
|
height: $size;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.close {
|
.btn-content {
|
||||||
$size: 60upx;
|
height: 86px;
|
||||||
width: $size;
|
|
||||||
height: $size;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
gap: 60upx;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 248upx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-content {
|
.menus {
|
||||||
height: 86px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
padding: 32rpx 40rpx;
|
||||||
justify-content: center;
|
margin-top: 150rpx;
|
||||||
gap: 60upx;
|
gap: 20rpx;
|
||||||
|
|
||||||
.btn {
|
.menu-item {
|
||||||
width: 248upx;
|
background-color: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
text-align: center;
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
box-shadow: 0rpx 6rpx 12rpx 2rpx rgba(0, 0, 0, 0.16);
|
||||||
|
flex: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.menus {
|
.userInfo {
|
||||||
display: flex;
|
|
||||||
padding: 32rpx 40rpx;
|
|
||||||
margin-top: 150rpx;
|
|
||||||
gap: 20rpx;
|
|
||||||
|
|
||||||
.menu-item {
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
text-align: center;
|
|
||||||
padding: 32rpx 28rpx;
|
|
||||||
box-shadow: 0rpx 6rpx 12rpx 2rpx rgba(0, 0, 0, 0.16);
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.userInfo {
|
|
||||||
display: flex;
|
|
||||||
padding: 22rpx 24rpx;
|
|
||||||
margin: 0 4rpx;
|
|
||||||
align-items: center;
|
|
||||||
align-self: stretch;
|
|
||||||
border-radius: 24rpx;
|
|
||||||
background: #fff;
|
|
||||||
position: relative;
|
|
||||||
z-index: 99;
|
|
||||||
margin-top: -36rpx;
|
|
||||||
|
|
||||||
.vip {
|
|
||||||
background: #fa720a;
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: #ffffff;
|
|
||||||
padding: 6rpx 10rpx;
|
|
||||||
margin-left: 10rpx;
|
|
||||||
border-radius: 20rpx 20rpx 20rpx 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.code {
|
|
||||||
width: 33px;
|
|
||||||
height: 33px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.new-menus-box {
|
|
||||||
margin: 0 16rpx 0 16rpx;
|
|
||||||
|
|
||||||
.new-menus {
|
|
||||||
display: flex;
|
display: flex;
|
||||||
background-color: #fff;
|
padding: 22rpx 24rpx;
|
||||||
border-radius: 16rpx;
|
margin: 0 4rpx;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
border-radius: 24rpx;
|
||||||
|
background: #fff;
|
||||||
|
position: relative;
|
||||||
|
z-index: 99;
|
||||||
|
margin-top: -36rpx;
|
||||||
|
|
||||||
.icon {
|
.vip {
|
||||||
width: 79px;
|
background: #fa720a;
|
||||||
height: 79px;
|
font-size: 24rpx;
|
||||||
|
color: #ffffff;
|
||||||
|
padding: 6rpx 10rpx;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
border-radius: 20rpx 20rpx 20rpx 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.layout2 {
|
.code {
|
||||||
padding: 29px 0;
|
width: 33px;
|
||||||
|
height: 33px;
|
||||||
.diner,
|
|
||||||
.takeout {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.line {
|
|
||||||
width: 2rpx;
|
|
||||||
height: 156rpx;
|
|
||||||
background: #ededed;
|
|
||||||
}
|
|
||||||
|
|
||||||
.takeout {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&.layout1 {
|
.new-menus-box {
|
||||||
padding: 36rpx 40rpx;
|
margin: 0 16rpx 0 16rpx;
|
||||||
justify-content: space-between;
|
|
||||||
|
.new-menus {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 16rpx;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.big_img {
|
.icon {
|
||||||
width: 330rpx;
|
width: 79px;
|
||||||
height: 330rpx;
|
height: 79px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.layout2 {
|
||||||
|
padding: 29px 0;
|
||||||
|
|
||||||
|
.diner,
|
||||||
|
.takeout {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
width: 2rpx;
|
||||||
|
height: 156rpx;
|
||||||
|
background: #ededed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.takeout {}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.layout1 {
|
||||||
|
padding: 36rpx 40rpx;
|
||||||
|
justify-content: space-between;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.big_img {
|
||||||
|
width: 330rpx;
|
||||||
|
height: 330rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 48rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.desc {
|
||||||
|
margin-top: 20rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.groupBuying {
|
||||||
|
padding: 16rpx 38rpx;
|
||||||
|
border-top: 2rpx solid #ededed;
|
||||||
|
background-color: #fff;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
color: #333333;
|
||||||
|
font-size: 36rpx;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.desc {
|
||||||
|
margin-top: 16rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.points {
|
||||||
|
margin-top: 10px;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 16rpx 68rpx;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 98px;
|
||||||
|
height: 98px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.taocan {
|
||||||
|
.img {
|
||||||
|
width: 117px;
|
||||||
|
height: 117px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom_menus {
|
||||||
|
display: flex;
|
||||||
|
gap: 14rpx;
|
||||||
|
margin-top: 10px;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
padding: 20rpx;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
background: #fff;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 39px;
|
||||||
|
height: 39px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 48rpx;
|
font-size: 32rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.desc {
|
.desc {
|
||||||
margin-top: 20rpx;
|
margin-top: 8rpx;
|
||||||
font-size: 32rpx;
|
|
||||||
color: #999;
|
color: #999;
|
||||||
|
font-size: 24rpx;
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
</style>
|
||||||
|
|
||||||
.groupBuying {
|
|
||||||
padding: 16rpx 38rpx;
|
|
||||||
border-top: 2rpx solid #ededed;
|
|
||||||
background-color: #fff;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.img {
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
|
||||||
color: #333333;
|
|
||||||
font-size: 36rpx;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.desc {
|
|
||||||
margin-top: 16rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.points {
|
|
||||||
margin-top: 10px;
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 16rpx 68rpx;
|
|
||||||
border-radius: 16rpx;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
|
|
||||||
.img {
|
|
||||||
width: 98px;
|
|
||||||
height: 98px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.taocan {
|
|
||||||
.img {
|
|
||||||
width: 117px;
|
|
||||||
height: 117px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.bottom_menus {
|
|
||||||
display: flex;
|
|
||||||
gap: 14rpx;
|
|
||||||
margin-top: 10px;
|
|
||||||
|
|
||||||
.item {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
padding: 20rpx;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
border-radius: 18rpx;
|
|
||||||
background: #fff;
|
|
||||||
|
|
||||||
.img {
|
|
||||||
width: 39px;
|
|
||||||
height: 39px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
|
||||||
font-size: 32rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.desc {
|
|
||||||
margin-top: 8rpx;
|
|
||||||
color: #999;
|
|
||||||
font-size: 24rpx;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
v-else-if="item1.isTemporary &&item1.productName=='签子'"
|
v-else-if="item1.isTemporary &&item1.productName=='签子'"
|
||||||
src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png"
|
src="https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/5/b97054debd83486ab7ad8e20ca6a360a.png"
|
||||||
></u-image>
|
></u-image>
|
||||||
<u-image width="112" height="112" radius="20"
|
<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>
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
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 +
|
url: "/pages/product/index?type=beforehand&order_id=" + item.id +
|
||||||
'&one_more_order=1',
|
'&one_more_order=1&shopId='+item.shopId,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -13,8 +13,10 @@
|
|||||||
<up-swiper :list="goods.images" @change="swiperChange" :current="swiperCurrent" radius="6px"
|
<up-swiper :list="goods.images" @change="swiperChange" :current="swiperCurrent" radius="6px"
|
||||||
height="250" @click="prveImgs(goods.images, goods.images[swiperCurrent])">
|
height="250" @click="prveImgs(goods.images, goods.images[swiperCurrent])">
|
||||||
</up-swiper>
|
</up-swiper>
|
||||||
|
<view class="shop_sku_name u-flex u-row-between">
|
||||||
<view class="shop_sku_name">{{ goods.name }}</view>
|
<view class="u-line-1" style="max-width: 600rpx;">{{ goods.name }}</view>
|
||||||
|
<ymfShare @shareClick="shareClick" />
|
||||||
|
</view>
|
||||||
<view class="shop_sku_description" v-if="isSkuGoods">
|
<view class="shop_sku_description" v-if="isSkuGoods">
|
||||||
{{ goods.shortTitle ? goods.shortTitle : '' }}
|
{{ goods.shortTitle ? goods.shortTitle : '' }}
|
||||||
</view>
|
</view>
|
||||||
@@ -190,7 +192,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<view class="shop_bottom" style="position: absolute;bottom: 0;">
|
<view class="shop_bottom" style="position: absolute;bottom: 0;z-index:100;">
|
||||||
<view class="flex-between">
|
<view class="flex-between">
|
||||||
<view class="price price-sku" v-if="goods.type != 'package' && goods.result">
|
<view class="price price-sku" v-if="goods.type != 'package' && goods.result">
|
||||||
<text class="i">¥</text>
|
<text class="i">¥</text>
|
||||||
@@ -308,6 +310,7 @@
|
|||||||
import {
|
import {
|
||||||
useNavbarStore
|
useNavbarStore
|
||||||
} from '@/stores/navbarStore';
|
} from '@/stores/navbarStore';
|
||||||
|
import ymfShare from '@/components/ymf-components/ymf-share.vue'
|
||||||
const store = useNavbarStore();
|
const store = useNavbarStore();
|
||||||
const {
|
const {
|
||||||
showBack,
|
showBack,
|
||||||
@@ -479,11 +482,11 @@
|
|||||||
const swiperCurrent = ref(0);
|
const swiperCurrent = ref(0);
|
||||||
|
|
||||||
function returnFirstSku(product) {
|
function returnFirstSku(product) {
|
||||||
console.log('returnFirstSku', product.skuList[0]);
|
console.log('returnFirstSku', product);
|
||||||
return {
|
return {
|
||||||
...product.skuList[0],
|
...product.skuList[0]||'',
|
||||||
sku_id: product.skuList[0].id,
|
sku_id: product.skuList[0].id||'',
|
||||||
id: product.id,
|
id: product.id||'',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//返回是否是多规格商品
|
//返回是否是多规格商品
|
||||||
@@ -503,8 +506,10 @@
|
|||||||
swiperCurrent.value = e.current;
|
swiperCurrent.value = e.current;
|
||||||
}
|
}
|
||||||
|
|
||||||
const emits = defineEmits(['prveImgs', 'websocketsendMessage', 'close', 'modalAdd'])
|
const emits = defineEmits(['prveImgs', 'websocketsendMessage', 'close', 'modalAdd','shareClick'])
|
||||||
|
function shareClick(){
|
||||||
|
emits('shareClick',props.goods)
|
||||||
|
}
|
||||||
function prveImgs(images, currentUrl) {
|
function prveImgs(images, currentUrl) {
|
||||||
emits('prveImgs', images, currentUrl)
|
emits('prveImgs', images, currentUrl)
|
||||||
}
|
}
|
||||||
@@ -831,7 +836,7 @@
|
|||||||
padding: 0 28rpx;
|
padding: 0 28rpx;
|
||||||
margin-top: 20rpx;
|
margin-top: 20rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 32upx;
|
font-size: 32rpx;
|
||||||
margin-bottom: 16rpx;
|
margin-bottom: 16rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -573,17 +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>
|
||||||
|
|
||||||
<view
|
<view v-for="(item,index) in goodsModalList" :key="index">
|
||||||
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"
|
||||||
<goodsModal :key="index" v-model="item.show" :goods="item.goods" @prveImgs="prveImgs" @close="goodsModalClose(index)"
|
@modalAdd="modalAdd" :GoodsIDInCartNumMap="GoodsIDInCartNumMap"></goodsModal>
|
||||||
@websocketsendMessage="websocketsendMessage"
|
|
||||||
@modalAdd="modalAdd"
|
|
||||||
:GoodsIDInCartNumMap="GoodsIDInCartNumMap"
|
|
||||||
></goodsModal>
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<xbSwiperPreview :visable="showPrveImg" :imgs="prveImgsList" @update:visable="updateShowPrveImg">
|
<xbSwiperPreview :visable="showPrveImg" :imgs="prveImgsList" @update:visable="updateShowPrveImg">
|
||||||
</xbSwiperPreview>
|
</xbSwiperPreview>
|
||||||
<!-- 显示选择人数popup -->
|
<!-- 显示选择人数popup -->
|
||||||
@@ -749,7 +745,9 @@
|
|||||||
useCartStore
|
useCartStore
|
||||||
} from '@/stores/order.js';
|
} from '@/stores/order.js';
|
||||||
import {
|
import {
|
||||||
computed, provide
|
computed,
|
||||||
|
provide,
|
||||||
|
reactive
|
||||||
} from 'vue';
|
} from 'vue';
|
||||||
const cartStore = useCartStore();
|
const cartStore = useCartStore();
|
||||||
/**
|
/**
|
||||||
@@ -819,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
|
||||||
@@ -874,11 +868,11 @@
|
|||||||
* 返回购物车对应的商品数量
|
* 返回购物车对应的商品数量
|
||||||
*/
|
*/
|
||||||
function returnGoodsImCartNum(goods) {
|
function returnGoodsImCartNum(goods) {
|
||||||
if(!goods){
|
if (!goods) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
if (GoodsIDInCartNumMap.value.hasOwnProperty(goods.id)) {
|
if (GoodsIDInCartNumMap.value.hasOwnProperty(goods.id)) {
|
||||||
return GoodsIDInCartNumMap.value[goods.id]
|
return GoodsIDInCartNumMap.value[goods.id]
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -1369,13 +1363,14 @@
|
|||||||
let res = await APIminiAppinfo(item.id);
|
let res = await APIminiAppinfo(item.id);
|
||||||
prveImgs(res.images);
|
prveImgs(res.images);
|
||||||
}
|
}
|
||||||
|
|
||||||
const goodsModalList=ref([])
|
const goodsModalList = ref([])
|
||||||
|
|
||||||
function goodsModalClose(index){
|
function goodsModalClose(index) {
|
||||||
goodsModalList.value.splice(index,1)
|
goodsModalList.value.splice(index, 1)
|
||||||
}
|
}
|
||||||
function modalAdd(item){
|
|
||||||
|
function modalAdd(item) {
|
||||||
clickspecifications(item)
|
clickspecifications(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1395,8 +1390,8 @@
|
|||||||
|
|
||||||
if (item.isSoldStock == 1 || (item.isSaleTime == 0 && !item.isSaleTimeshow)) {
|
if (item.isSoldStock == 1 || (item.isSaleTime == 0 && !item.isSaleTimeshow)) {
|
||||||
return uni.showToast({
|
return uni.showToast({
|
||||||
title:'商品已下架或不在可售时间内',
|
title: '商品已下架或不在可售时间内',
|
||||||
icon:'none'
|
icon: 'none'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1444,8 +1439,13 @@
|
|||||||
specifications.item.amountcartNumber = 0;
|
specifications.item.amountcartNumber = 0;
|
||||||
// showShopsku.value = true;
|
// showShopsku.value = true;
|
||||||
goodsModalList.value.push({
|
goodsModalList.value.push({
|
||||||
show:true,
|
show: true,
|
||||||
goods:specifications.item
|
goods: {
|
||||||
|
...specifications.item,
|
||||||
|
/*过滤掉只有一个规格且下架的商品或者skuList为空的商品*/
|
||||||
|
relatedRecommendJson: (specifications.item.relatedRecommendJson || []).filter(v => v
|
||||||
|
.skuList && v.skuList.length)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
// 判断商品是否在可售时间内
|
// 判断商品是否在可售时间内
|
||||||
@@ -1681,20 +1681,20 @@
|
|||||||
// 返回商品对应sku数据
|
// 返回商品对应sku数据
|
||||||
|
|
||||||
function cartInit(arr) {
|
function cartInit(arr) {
|
||||||
|
|
||||||
const result = []
|
const result = []
|
||||||
cartStore.carts = arr.map(v => {
|
cartStore.carts = arr.map(v => {
|
||||||
const goods = cartStore.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_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&&!is_temporary) {
|
if (!goods && !is_temporary) {
|
||||||
console.log('删除未匹配到的商品', {
|
console.log('删除未匹配到的商品', {
|
||||||
id: v.id,
|
id: v.id,
|
||||||
operate_type: "del",
|
operate_type: "del",
|
||||||
@@ -1761,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) {
|
||||||
@@ -2191,7 +2194,7 @@
|
|||||||
// 列表请求
|
// 列表请求
|
||||||
const productqueryProduct = async () => {
|
const productqueryProduct = async () => {
|
||||||
cartStore.goodsIsloading = false;
|
cartStore.goodsIsloading = false;
|
||||||
allGoodsArr.value=[]
|
allGoodsArr.value = []
|
||||||
try {
|
try {
|
||||||
shopProductList.hots = await productminiApphotsquery();
|
shopProductList.hots = await productminiApphotsquery();
|
||||||
shopProductList.productInfo = await APIgroupquery();
|
shopProductList.productInfo = await APIgroupquery();
|
||||||
@@ -2234,7 +2237,7 @@
|
|||||||
// console.log('allGoodsArr', allGoodsArr);
|
// console.log('allGoodsArr', allGoodsArr);
|
||||||
// console.log('shopProductList', shopProductList);
|
// console.log('shopProductList', shopProductList);
|
||||||
console.log('cartStore.carts', cartStore.carts)
|
console.log('cartStore.carts', cartStore.carts)
|
||||||
cartStore.allGoodsArr=allGoodsArr.value
|
cartStore.allGoodsArr = allGoodsArr.value
|
||||||
if (cartStore.carts.length > 0) {
|
if (cartStore.carts.length > 0) {
|
||||||
cartInit(cartStore.carts);
|
cartInit(cartStore.carts);
|
||||||
}
|
}
|
||||||
@@ -2256,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);
|
||||||
@@ -2437,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 = {}
|
||||||
@@ -2470,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,
|
||||||
@@ -2590,6 +2670,7 @@
|
|||||||
useSocket.setOnMessage(() => {});
|
useSocket.setOnMessage(() => {});
|
||||||
}
|
}
|
||||||
onHide(() => {
|
onHide(() => {
|
||||||
|
isGoodsShare.value = false
|
||||||
closeSocket();
|
closeSocket();
|
||||||
});
|
});
|
||||||
onUnload(() => {
|
onUnload(() => {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
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",
|
||||||
|
|||||||
Reference in New Issue
Block a user