Merge branch 'youda' into youda_wz

This commit is contained in:
zpc 2025-04-18 11:17:22 +08:00
commit 55a6b589ab
13 changed files with 2999 additions and 2945 deletions

15
App.vue
View File

@ -222,4 +222,19 @@ button.hide {
.uni-tabbar__icon {
height: 50px !important;
}
@keyframes m-zoom {
0% {
transform: scale(1);
}
50% {
transform: scale(0.9);
}
100% {
transform: scale(1);
}
}
</style>

View File

@ -25,6 +25,14 @@ class RequestManager {
return whitelistUrls.some(whiteItem => url.indexOf(whiteItem) > -1)
}
/**
* 生成唯一的nonce值
* @returns {String} nonce值
*/
static generateNonce() {
return md5(Date.now() + Math.random().toString(36).substring(2, 15));
}
/**
* 发送网络请求
* @param {Object} param 请求参数
@ -43,7 +51,7 @@ class RequestManager {
return new Promise((resolve, reject) => {
// 参数检查
if (!param || typeof param !== 'object') {
reject(new Error('请求参数错误11'))
reject(new Error('请求参数错误'))
return
}
@ -90,9 +98,48 @@ class RequestManager {
console.log('请求URL:', requestUrl)
// 使用正则表达式从URL中提取主机名
const hostRegex = /^(?:https?:\/\/)?([^\/]+)/i
const matches = requestUrl.match(hostRegex)
const host = matches && matches[1] ? matches[1] : 'localhost'
let header = {}
// 添加签名和防重放攻击参数
// 1. 添加时间戳
data.timestamp = Math.floor(Date.now() / 1000)
// 2. 添加nonce随机字符串
data.nonce = RequestManager.generateNonce()
if (method.toUpperCase() == 'POST') {
// 按照键名对参数进行排序
const sortedParams = {}
Object.keys(data).sort().forEach(key => {
sortedParams[key] = data[key]
})
// 组合参数为字符串
let signStr = ''
for (const key in sortedParams) {
if (typeof sortedParams[key] === 'object') {
signStr += key + '=' + JSON.stringify(sortedParams[key]) + '&'
} else {
signStr += key + '=' + sortedParams[key] + '&'
}
}
// 获取时间戳,组合为密钥
const timestamp = data.timestamp
const appSecret = host + timestamp
// 添加密钥并去除最后的&
signStr = signStr.substring(0, signStr.length - 1) + appSecret
console.log('签名字符串:', signStr)
// 使用MD5生成签名
const sign = md5(signStr)
data.sign = sign
header = {
'content-type': 'application/x-www-form-urlencoded',
client: client,
@ -102,41 +149,32 @@ class RequestManager {
}
} else {
// GET请求添加签名
if (data) {
// 添加时间戳参数
data.timestamp = Math.floor(Date.now() / 1000);
// 按照键名对参数进行排序
const sortedParams = {}
Object.keys(data).sort().forEach(key => {
sortedParams[key] = data[key]
})
// 按照键名对参数进行排序
const sortedParams = {};
Object.keys(data).sort().forEach(key => {
sortedParams[key] = data[key];
});
// 组合参数为字符串
let signStr = '';
for (const key in sortedParams) {
signStr += key + '=' + sortedParams[key] + '&';
}
// 获取当前请求的域名和时间戳,组合为密钥
// 使用正则表达式从URL中提取主机名
const hostRegex = /^(?:https?:\/\/)?([^\/]+)/i;
const matches = requestUrl.match(hostRegex);
const host = matches && matches[1] ? matches[1] : 'localhost';
const timestamp = data.timestamp;
const appSecret = host + timestamp;
// 添加密钥并去除最后的&
signStr = signStr.substring(0, signStr.length - 1) + appSecret;
console.log(signStr);
// 使用MD5生成签名
const sign = md5(signStr);
// 添加签名到请求参数
data.sign = sign;
// 组合参数为字符串
let signStr = ''
for (const key in sortedParams) {
signStr += key + '=' + sortedParams[key] + '&'
}
// 获取时间戳,组合为密钥
const timestamp = data.timestamp
const appSecret = host + timestamp
// 添加密钥并去除最后的&
signStr = signStr.substring(0, signStr.length - 1) + appSecret
console.log('签名字符串:', signStr)
// 使用MD5生成签名
const sign = md5(signStr)
// 添加签名到请求参数
data.sign = sign
header = {
'content-type': 'application/json',
token: token,

View File

@ -4,17 +4,17 @@
<view class="banner-slot-container" v-if="$slots.default">
<slot></slot>
</view>
<swiper class="swiper-box" :style="{ height: height + 'rpx' }" :autoplay="true" :indicator-dots="false" :circular="true" :interval="3000"
@change="swChange">
<swiper class="swiper-box" :style="{ height: height + 'rpx' }" :autoplay="true" :indicator-dots="false"
:circular="true" :interval="3000" @change="swChange">
<swiper-item v-for="(v, i) in advert" :key="i" @click="navTo(v)">
<image class="yh_bg" :src="v.imgurl"></image>
<image class="yh_bg" :src="v.imgurl" :style="{ width: imgWidth + '%' }"></image>
</swiper-item>
</swiper>
<!-- 指示器 (可选) -->
<view class="sw-dot relative" v-if="showIndicator">
<view class="sw-dot-item" v-for="(item, i) in advert" :key="i" :class="{act: swCur == i}"></view>
<view class="sw-dot-item" v-for="(item, i) in advert" :key="i" :class="{ act: swCur == i }"></view>
</view>
</view>
</template>
@ -37,7 +37,12 @@ export default {
height: {
type: [Number, String],
default: 465
}
},
//
imgWidth: {
type: Number,
default: 92
},
},
data() {
return {
@ -63,55 +68,17 @@ export default {
}
});
},
//
swChange(e) {
this.swCur = e.detail.current;
},
//
navTo(item) {
/* 领券中心 */
if (item.ttype == 1) {
this.$c.to({
url: '/package/index/coupon-center',
query: {
coupon_id: item.coupon_id
}
})
}
this.$c.navTo(item);
if (item.goods_id > 0) {
if (item.ttype == 2) {
/* 一番赏 */
this.$c.to({
url: '/pages/shouye/detail',
query: {
goods_id: item.goods_id
}
})
}
/* 无限赏 */
if (item.ttype == 3) {
this.$c.to({
url: '/pages/shouye/detail_wuxian',
query: {
goods_id: item.goods_id
}
})
}
/* 连击赏 */
if (item.ttype == 4) {
this.$c.to({
url: '/package/index/lian-ji',
query: {
goods_id: item.goods_id
}
})
}
}
}
}
}
@ -133,7 +100,7 @@ export default {
}
/* 允许插槽内的元素可以被点击 */
.banner-slot-container > * {
.banner-slot-container>* {
pointer-events: auto;
}
@ -157,7 +124,7 @@ export default {
position: absolute;
bottom: 20rpx;
width: 100%;
&-item {
width: 12rpx;
height: 12rpx;
@ -165,7 +132,7 @@ export default {
background-color: rgba(255, 255, 255, 0.5);
margin: 0 5rpx;
transition: all 0.3s;
&.act {
width: 24rpx;
border-radius: 6rpx;
@ -173,4 +140,4 @@ export default {
}
}
}
</style>
</style>

View File

@ -16,6 +16,9 @@
<text>{{ localBossCardData.king_user.z_nums }}</text>
</view>
<view class="" v-if="localBossCardData.king_user == null">
虚位以待
</view>
</view>
<view class="flex ml40 mr30" @click="openBossPop">
<text style="font-size: 20rpx; color: #999999;">查看更多 ></text>
@ -24,7 +27,7 @@
<!-- 领主弹窗 - 显示领主详细信息和挑战人数/领主记录 -->
<uni-popup ref="bossPop" type="bottom" mask-background-color="rgba(0,0,0,0.8)">
<view v-if="localBossCardData && localBossCardData.king_user" class="boss-pop relative">
<view v-if="localBossCardData" class="boss-pop relative">
<!-- 弹窗标题 -->
<view class="boss-pop-title">
<text>领主接力</text>
@ -41,7 +44,7 @@
<image :src="$img1('index/king.png')"></image>
<view class="boss-name hang1">
{{ localBossCardData.king_user.nickname }}
{{ (localBossCardData.king_user == null ? "虚位以待" : localBossCardData.king_user.nickname) }}
</view>
<!-- 规则按钮 -->
@ -67,8 +70,7 @@
</view>
<!-- 滚动列表区域 - 显示挑战人数或领主记录 -->
<child-scroll class="list-wrap" height="350rpx" ref="bossScroll" :fixed="false" :size="20"
@up="getBossData">
<child-scroll class="list-wrap" height="350rpx" ref="bossScroll" :fixed="false" :size="20" @up="getBossData">
<view class="boss-list">
<template v-for="(item, i) in bossList">
<!-- 挑战人数列表项 -->
@ -208,13 +210,13 @@ export default {
}
});
},
/**
* 打开领主弹窗
*/
openBossPop() {
this.$refs.bossPop.open();
// //
// this.$nextTick(() => {
// // bossList
@ -224,19 +226,19 @@ export default {
// this.$refs.bossScroll.mescroll.resetUpScroll();
// this.$refs.bossScroll.mescroll.scrollTo(0, 0);
// }
// //
// this.getBossData({ num: 1, init: false });
// });
},
/**
* 打开指定弹窗
* @param {String} popName - 弹窗引用名称
*/
open(popName) {
this.$refs[popName].open();
//
if (popName === 'playPop') {
this.$c.getRule(14).then(res => {
@ -246,7 +248,7 @@ export default {
});
}
},
/**
* 关闭指定弹窗
* @param {String} popName - 弹窗引用名称
@ -254,7 +256,7 @@ export default {
close(popName) {
this.$refs[popName].close();
},
/**
* 切换标签页
* @param {Number} i - 标签页索引
@ -267,7 +269,7 @@ export default {
this.$refs.bossScroll.mescroll.resetUpScroll();
this.$refs.bossScroll.mescroll.scrollTo(0, 0);
},
/**
* 获取挑战人数/领主记录列表数据
* @param {Object} params - 参数对象
@ -341,6 +343,7 @@ export default {
}
&-content {
/* 领主昵称 */
>view:nth-child(1) {
font-weight: normal;
@ -612,6 +615,7 @@ export default {
height: 300rpx;
.p-item {
/* 物品图片 */
.play-pic {
margin: 0 auto 0;
@ -642,4 +646,4 @@ export default {
color: #8A8A8A;
}
}
</style>
</style>

View File

@ -0,0 +1,148 @@
<template>
<view>
<!-- 悬浮球 -->
<template v-if="floatBall">
<view v-for="(item, index) in floatBall" :style="[getBallStyle(item)]" :key="index" class="group-fixed1"
@click="BallClick(item)">
<image :src="item.image"></image>
</view>
</template>
<!-- 悬浮球弹窗 -->
<uni-popup ref="floatBall_popup" type="center" maskBackgroundColor="rgba(0,0,0,0.8)">
<view class="pop-ball"
:style="{ backgroundImage: 'url(' + ballItem.image_bj + ')', backgroundSize: '100% 99.5%', backgroundRepeat: 'no-repeat' }">
<image show-menu-by-longpress v-if="ballItem != null" :src="ballItem.image_details" mode="aspectFit"
:style="[getPopupStyle(ballItem)]">
</image>
</view>
<view class="pop-ball-close flex" @click="$refs.floatBall_popup.close()">
<view style="width: 48rpx;height: 48rpx;border-radius: 50%;opacity: 0.5;">
<image show-menu-by-longpress :src="$img1('common/close.png')" class="img100" />
</view>
</view>
</uni-popup>
</view>
</template>
<script>
export default {
name: 'FloatBall',
data() {
return {
floatBall: [],
ballItem: null
}
},
computed: {
getBallStyle() {
return (item) => {
let s = {
width: item.width,
height: item.height,
top: item.position_y,
};
if (item.position_x.indexOf('-') > -1) {
let position_x = item.position_x.split('-')[1];
s.right = position_x;
} else {
s.left = item.position_x;
}
if (item.effect == 1) {
s.animation = "m-zoom 1.2s ease-in-out infinite";
}
return s;
}
},
getPopupStyle() {
return (item) => {
if (item == null) {
return {};
}
let s = {
width: item.image_details_w,
height: item.image_details_h,
position: 'relative',
};
if (item.image_details_x != "0") {
s.left = item.image_details_x;
}
if (item.image_details_y != "0") {
s.top = item.image_details_y;
}
return s;
};
}
},
methods: {
BallClick(item) {
if (item.type == 2) {
this.$c.nav(item.link_url);
return;
}
if (item.type == 1) {
this.ballItem = item;
this.$refs.floatBall_popup.open();
}
},
async getFloatBall() {
const { status, data, msg } = await this.$request.get("getFloatBall");
if (status == 1) {
this.floatBall = data;
}
}
},
mounted() {
this.getFloatBall();
}
}
</script>
<style lang="scss" scoped>
.group-fixed1 {
width: 52rpx;
height: 120rpx;
position: fixed;
z-index: 10;
right: 0;
top: 21vh;
image {
width: 100%;
height: 100%;
}
}
.pop-ball {
width: 85vw;
// height: 400px;
position: relative;
border-radius: 25rpx;
display: flex;
align-items: center;
justify-content: center;
}
.pop-ball-close {
margin-top: 20rpx;
width: 100%;
height: 50rpx;
display: flex;
align-items: center;
justify-content: center;
}
@keyframes m-zoom {
0% {
transform: scale(1);
}
50% {
transform: scale(0.9);
}
100% {
transform: scale(1);
}
}
</style>

View File

@ -6,8 +6,11 @@
<view class="_rule_pop common_bg">
<view class="_rule_pop_title">{{ ruleData.title }}</view>
<scroll-view scroll-y class="_rule_pop_bd" :class="{'has-check': noticeCheck}">
<view v-html="ruleData.content"></view>
<scroll-view scroll-y class="_rule_pop_bd" :class="{ 'has-check': noticeCheck }">
<view v-if="is_image_optimizer&&images.length>0" class="image-optimizer">
<image show-menu-by-longpress v-for="(image, index) in images" :key="index" :src="image" mode="widthFix" style="width: 100%;"></image>
</view>
<view v-else v-html="ruleData.content"></view>
</scroll-view>
<view v-if="noticeCheck" class="check-btn" @click="todayHide = !todayHide">
@ -28,116 +31,137 @@
</template>
<script>
export default {
props: {
noticeCheck: {
type: Boolean,
default: false
}
},
export default {
props: {
noticeCheck: {
type: Boolean,
default: false
}
},
data() {
return {
ruleData: '',
todayHide: false
}
},
data() {
return {
ruleData: '',
todayHide: false,
is_image_optimizer: false,
images: []
}
},
mounted() {
console.log(this.noticeCheck)
},
mounted() {
console.log(this.noticeCheck)
},
methods: {
popChange({
show
}) {
if (!show) {
if (this.todayHide) {
uni.setStorageSync('_last_notice_date', this.$c.getDateTime())
}
methods: {
popChange({
show
}) {
if (!show) {
if (this.todayHide) {
uni.setStorageSync('_last_notice_date', this.$c.getDateTime())
}
},
}
},
close() {
this.$refs._rule_pop.close()
},
close() {
this.$refs._rule_pop.close()
},
open(opt) {
this.ruleData = opt
open(opt) {
this.ruleData = opt
this.$refs._rule_pop.open()
},
this.$refs._rule_pop.open()
},
async getRule(id, title = '') {
let res = await this.$c.getRule(id, true)
async getRule(id, title = '') {
this.is_image_optimizer = false;
this.images = [];
let { status, data, msg, is_image_optimizer } = await this.$c.getRule(id, true)
if (status) {
if (is_image_optimizer != null && is_image_optimizer == 1) {
console.log('开启图片优化');
this.is_image_optimizer = true;
//
const imgRegex = /<img[^>]+src="([^"]+)"[^>]*>/g;
let match;
while ((match = imgRegex.exec(data)) !== null) {
// images.push(match[1]);
this.images.push(match[1]);
}
console.log('提取的图片地址:', this.images);
//
}
this.open({
title: title,
content: res.data
content: data
})
} else {
this.$c.toast(msg)
}
}
}
}
</script>
<style lang="scss">
._rule_pop {
width: 610rpx;
height: 820rpx;
box-sizing: border-box;
padding: 0 40rpx 0;
background: #FFFFFF;
border-radius: 30rpx;
._rule_pop {
width: 610rpx;
height: 820rpx;
box-sizing: border-box;
padding: 0 40rpx 0;
background: #FFFFFF;
border-radius: 30rpx;
._rule_pop_title {
padding: 40rpx 0;
text-align: center;
font-weight: 500;
font-size: 36rpx;
color: #333333;
// font-family: YouSheBiaoTiHei;
}
._rule_pop_title {
padding: 40rpx 0;
text-align: center;
font-weight: 500;
font-size: 36rpx;
color: #333333;
// font-family: YouSheBiaoTiHei;
}
._rule_pop_bd {
height: 670rpx;
._rule_pop_bd {
height: 670rpx;
font-size: 26rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #999999;
font-size: 26rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #999999;
&.has-check {
height: 620rpx;
}
}
.check-btn {
display: flex;
justify-content: center;
align-items: center;
padding: 20rpx 0 0;
.icon {
width: 32rpx;
height: 32rpx;
margin-right: 10rpx;
image {
width: 100%;
height: 100%;
}
}
font-size: 24rpx;
color: #888;
}
.close {
width: 48rpx;
height: 48rpx;
position: absolute;
left: 50%;
bottom: 0;
transform: translate(-50%, 150%);
&.has-check {
height: 620rpx;
}
}
.check-btn {
display: flex;
justify-content: center;
align-items: center;
padding: 20rpx 0 0;
.icon {
width: 32rpx;
height: 32rpx;
margin-right: 10rpx;
image {
width: 100%;
height: 100%;
}
}
font-size: 24rpx;
color: #888;
}
.close {
width: 48rpx;
height: 48rpx;
position: absolute;
left: 50%;
bottom: 0;
transform: translate(-50%, 150%);
}
}
</style>

View File

@ -47,8 +47,8 @@
</view>
</view>
<view class="swiper-container">
<swiper class="swiper-box" :current="currentItemId" :autoplay="false"
@change="handleSwiperChange" :indicator-dots="false" :circular="true" :interval="3000">
<swiper class="swiper-box" :current="currentItemId" :autoplay="false" @change="handleSwiperChange"
:indicator-dots="false" :circular="true" :interval="3000">
<swiper-item v-for="(item, index) in goodsList" :key="index" :item-id="item.index">
<view class="swiper-item-content">
<view class="item-background">
@ -74,10 +74,8 @@
<scroll-view v-if="currentTab == 1" scroll-y="true" style="width: 100%; height: 890rpx; padding: 24rpx;">
<view class="row align-center participant-row"
:class="{ 'show': participantRowsShow[index] }"
v-for="(item, index) in participantList" :key="index"
style="height: 76rpx; margin-bottom: 24rpx;">
<view class="row align-center participant-row" :class="{ 'show': participantRowsShow[index] }"
v-for="(item, index) in participantList" :key="index" style="height: 76rpx; margin-bottom: 24rpx;">
<view class="center" style="width: 30rpx;">
<text style="color: #999999; font-size: 20rpx;">{{ index + 1 }}</text>
@ -96,10 +94,8 @@
</view>
</scroll-view>
<scroll-view v-if="currentTab == 2" scroll-y="true" style="width: 100%; height: 890rpx; padding: 24rpx;">
<view class="row align-center award-row"
:class="{ 'show': awardRowsShow[index] }"
v-for="(item, index) in awardRecordList" :key="index"
style="height: 76rpx; margin-bottom: 24rpx;">
<view class="row align-center award-row" :class="{ 'show': awardRowsShow[index] }"
v-for="(item, index) in awardRecordList" :key="index" style="height: 76rpx; margin-bottom: 24rpx;">
<view class="center" style="width: 30rpx;">
<text style="color: #999999; font-size: 20rpx;">{{ index + 1 }}</text>
@ -122,8 +118,7 @@
<view class="column align-center"
style="width: 100%; height: 198rpx; background-color: #fff; margin-top: 8rpx;">
<view class="participation-button"
:class="{ 'show': buttonShow, 'pulse': buttonPulse }"
<view class="participation-button" :class="{ 'show': buttonShow, 'pulse': buttonPulse }"
@click="handleButtonPulse">
<text class="button-text">{{ buttonText }}</text>
</view>
@ -147,7 +142,7 @@
</view>
<view class="popup-content">
提示需在指定时间{{ bonusData.start_time }}-{{ bonusData.end_time }}消耗达到{{ bonusData.choujiang_xianzhi
}}钻石即可加入房间还需{{ remainingDiamond }}钻石.
}}钻石即可加入房间还需{{ $c.removeTrailingZeros(remainingDiamond) }}钻石.
</view>
</view>
@ -224,7 +219,7 @@ export default {
isAgree: true,
loading: false,
user_count: 0, //
//
headerShow: false,
contentShow: false,
@ -232,7 +227,7 @@ export default {
tabsShow: [false, false, false],
participantRowsShow: [],
awardRowsShow: [],
//
buttonPulse: false
}
@ -245,7 +240,7 @@ export default {
return '';
},
remainingDiamond() {
let t = this.bonusData.choujiang_xianzhi - this.user_total_consumption;
let t = (this.bonusData.choujiang_xianzhi - this.user_total_consumption).toFixed(2);
return t > 0 ? t : 0;
}
},
@ -253,7 +248,7 @@ export default {
console.log(options)
this.goods_id = options.goods_id
await this.load(options.goods_id)
//
setTimeout(() => {
this.applyPageTransitions();
@ -475,11 +470,11 @@ export default {
this.remainingTime = this.formatRemainingTime(endDate - serverNow, "距离开奖时间:");
return;
}
}, 1000);
},
onUnload() {
@ -512,7 +507,7 @@ export default {
} catch (error) {
console.error("加载参与人数列表失败", error);
}
if (this.currentTab === 1) {
setTimeout(() => {
this.animateListItems('participant-row');
@ -543,7 +538,7 @@ export default {
} catch (error) {
console.error("加载赏品记录失败", error);
}
if (this.currentTab === 2) {
setTimeout(() => {
this.animateListItems('award-row');
@ -566,7 +561,7 @@ export default {
//
if (className === 'participant-row') {
this.participantRowsShow = Array(this.participantList.length).fill(false);
//
for (let i = 0; i < this.participantList.length; i++) {
((index) => {
@ -577,7 +572,7 @@ export default {
}
} else if (className === 'award-row') {
this.awardRowsShow = Array(this.awardRecordList.length).fill(false);
//
for (let i = 0; i < this.awardRecordList.length; i++) {
((index) => {
@ -595,7 +590,7 @@ export default {
const endDate = new Date(this.bonusData.end_time.replace(/-/g, '/'));
const openDate = new Date(this.bonusData.open_time.replace(/-/g, '/'));
// console.log(currentDate,startDate);
if (currentDate < startDate) {
this.buttonText = "未开始";
} else if (currentDate >= startDate && currentDate <= endDate) {
@ -617,7 +612,7 @@ export default {
setTimeout(() => {
this.buttonPulse = false;
}, 400); //
//
this.handleButtonClick();
},
@ -700,19 +695,19 @@ export default {
url: '/pages/shouye/index'
});
},
applyPageTransitions() {
//
this.headerShow = true;
//
setTimeout(() => { this.tabsShow[0] = true; }, 100);
setTimeout(() => { this.tabsShow[1] = true; }, 200);
setTimeout(() => { this.tabsShow[2] = true; }, 300);
//
setTimeout(() => { this.contentShow = true; }, 200);
//
setTimeout(() => { this.buttonShow = true; }, 300);
}
@ -736,7 +731,7 @@ export default {
position: relative;
margin-right: 25rpx;
transition: all 0.3s ease;
&:active {
transform: scale(0.95);
}
@ -764,7 +759,7 @@ export default {
font-weight: 400;
font-size: 28rpx;
color: #CCCCCC;
&::after {
content: '';
position: absolute;
@ -784,6 +779,7 @@ export default {
from {
width: 0;
}
to {
width: 48rpx;
}
@ -807,25 +803,25 @@ export default {
padding: 8rpx;
border-radius: 12rpx;
position: relative;
&:active {
transform: translateY(-6rpx) scale(1.05);
background-color: rgba(0, 0, 0, 0.02);
}
image {
transition: all 0.25s ease;
box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1);
}
&:active image {
box-shadow: 0 8rpx 12rpx rgba(0, 0, 0, 0.15);
}
text {
transition: color 0.25s ease;
}
&:active text {
color: #666 !important;
}
@ -839,11 +835,11 @@ export default {
overflow: visible;
border: none !important;
outline: none !important;
&::after {
border: none !important;
}
&::before {
content: '';
position: absolute;
@ -857,11 +853,11 @@ export default {
opacity: 0;
transition: all 0.2s ease;
}
&:active {
transform: scale(0.9) rotate(15deg);
}
&:active::before {
transform: scale(1);
opacity: 1;
@ -924,18 +920,18 @@ export default {
box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.1);
position: relative;
overflow: hidden;
//
opacity: 0;
transform: translateY(20rpx);
transition: transform 0.5s ease, opacity 0.5s ease, background-color 0.2s ease, box-shadow 0.2s ease;
transition-delay: 0.3s;
&.show {
opacity: 1;
transform: translateY(0);
}
&.pulse {
animation: buttonPulse 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
@ -969,7 +965,7 @@ export default {
font-size: 35rpx;
background-color: #f9f9f9;
position: relative;
&::after {
content: '';
position: absolute;
@ -1011,11 +1007,11 @@ export default {
transition: all 0.25s ease;
position: relative;
overflow: hidden;
&:active {
transform: scale(0.95);
}
&::after {
content: '';
position: absolute;
@ -1029,12 +1025,12 @@ export default {
opacity: 0;
transition: all 0.3s ease-out;
}
&:active::after {
transform: translate(-50%, -50%) scale(3);
opacity: 0;
}
text {
position: relative;
z-index: 1;
@ -1046,11 +1042,11 @@ export default {
.cancel-button {
background-color: #FFFFFF;
border: 1px solid #eee;
text {
color: #333333;
}
&:active {
background-color: #f5f5f5;
}
@ -1059,11 +1055,11 @@ export default {
.confirm-button {
background-color: #CDEF27;
box-shadow: 0 4rpx 8rpx rgba(205, 239, 39, 0.3);
text {
color: #333333;
}
&:active {
background-color: #b9d721;
box-shadow: 0 2rpx 4rpx rgba(205, 239, 39, 0.2);
@ -1075,6 +1071,7 @@ export default {
transform: scale(0.9);
opacity: 0;
}
to {
transform: scale(1);
opacity: 1;
@ -1086,6 +1083,7 @@ export default {
opacity: 0;
transform: translateY(20rpx);
}
to {
opacity: 1;
transform: translateY(0);
@ -1096,7 +1094,7 @@ export default {
opacity: 0;
transform: translateX(-20rpx);
transition: all 0.4s ease;
&.show {
opacity: 1;
transform: translateX(0);
@ -1107,7 +1105,7 @@ export default {
opacity: 0;
transform: translateX(-20rpx);
transition: all 0.4s ease;
&.show {
opacity: 1;
transform: translateX(0);
@ -1118,7 +1116,7 @@ export default {
opacity: 0;
transform: translateY(-20rpx);
transition: all 0.5s ease;
&.show {
opacity: 1;
transform: translateY(0);
@ -1129,7 +1127,7 @@ export default {
opacity: 0;
transform: translateY(10rpx);
transition: all 0.4s ease;
&.show {
opacity: 1;
transform: translateY(0);
@ -1141,7 +1139,7 @@ export default {
transform: translateY(20rpx);
transition: all 0.5s ease;
transition-delay: 0.2s;
&.show {
opacity: 1;
transform: translateY(0);
@ -1153,15 +1151,18 @@ export default {
transform: scale(1);
box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.1);
}
40% {
transform: scale(0.92);
box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.05);
}
80% {
transform: scale(1.05);
box-shadow: 0 6rpx 10rpx rgba(0, 0, 0, 0.15);
background-color: #e0ff3a;
}
100% {
transform: scale(1);
box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.1);

View File

@ -1,87 +1,81 @@
<template>
<view style="padding-bottom: 300rpx; background-color: white;">
<view class="" style="display: flex; flex-direction: column;">
<view style="position: relative;">
<view class="title">
商城好物
</view>
<image v-if="advert != null && advert.length > 0" :src="advert[0].imgurl"
style="width: 100%; margin-top:10rpx ;" mode=""></image>
</view>
<view class="grid-container">
<view v-for="(item, index) in datas" :key="index" class="grid-item" @click="order_money(item)">
<page-container title="商城好物">
<banner :type-id="10" :height="326"></banner>
<view style="padding-bottom: 300rpx; background-color: white;">
<view class="" style="display: flex; flex-direction: column;">
<view class="grid-container">
<view v-for="(item, index) in datas" :key="index" class="grid-item" @click="order_money(item)">
<view class=""
style="background-color: #D8D8D8; height: 324rpx; border-radius: 16rpx 16rpx 0rpx 0rpx;">
<image :src="item.imgurl"
style=" width: 326.39rpx; height: 324rpx; position: absolute; left: 2rpx; border-radius: 16rpx"
mode="">
</image>
</view>
<view class="goods-name hang1" style=" width: 290rpx;">
<text style="color: #333333; font-size: 27rpx;">{{ item.title }}</text>
</view>
<view class="price-box">
<view class="price">
<text><text style="font-size: 24rpx;">{{ item.price }}</text></text>
</view>
</view>
<view class="num-box">
<view class="num ml10"> {{ item.sale_stock }}/{{ item.stock }} </view>
<view class="box icon">
<image :src="$img1('index/box.png')" lazy-load></image>
</view>
</view>
</view>
</view>
</view>
<uni-popup ref="pop" type="bottom">
<view v-if="orderData" class="buy-pop relative">
<view class="buy-pop-hd">
<view style="width: 24rpx;">
</view>
<text class="">确认订单</text>
<view class="close icon" @click="close('pop')">
<image :src="$img('/static/img/close2.png')" lazy-load></image>
</view>
</view>
<view class="buy-card">
<view class="buy-info">
<view class="pic">
<image :src="orderData.goods.imgurl_detail" style="width: 190rpx; height: 190rpx;"
lazy-load>
<view class="" style="background-color: #D8D8D8; height: 324rpx; border-radius: 16rpx 16rpx 0rpx 0rpx;">
<image :src="item.imgurl"
style=" width: 326.39rpx; height: 324rpx; position: absolute; left: 2rpx; border-radius: 16rpx"
mode="">
</image>
</view>
<view class="info-r">
<view class="hang1" style="width: 100%; color: #333333; font-size: 24rpx;">
{{ orderData.goods.title }}
<view class="goods-name hang1" style=" width: 290rpx;">
<text style="color: #333333; font-size: 27rpx;">{{ item.title }}</text>
</view>
<view class="price-box">
<view class="price">
<text><text style="font-size: 24rpx;">{{ item.price }}</text></text>
</view>
<view class="type">类型:明信片</view>
<view class="price-num">
<view class="price" style="font-size: 16rpx;">
¥<text style="font-size: 28rpx;">{{ orderData.goods.price }}</text>
</view>
<view class="num">×{{ orderData.goods.prize_num }}</view>
</view>
<view class="num-box">
<view class="num ml10"> {{ item.sale_stock }}/{{ item.stock }} </view>
<view class="box icon">
<image :src="$img1('index/box.png')" lazy-load></image>
</view>
</view>
</view>
</view>
<view class="br20 mt20" style="background: #FFFFFF;">
<view class="pay-type" @click="changePay(0)">
<view class="" style="width: 100%; color: #333333;">
微信支付
</view>
<view class="icon">
<image v-if="zhifu == 0" :src="$img1('common/check_act.png')" lazy-load></image>
<image v-else :src="$img1('common/check.png')" lazy-load></image>
</view>
<uni-popup ref="pop" type="bottom">
<view v-if="orderData" class="buy-pop relative">
<view class="buy-pop-hd">
<view style="width: 24rpx;">
</view>
<text class="">确认订单</text>
<view class="close icon" @click="close('pop')">
<image :src="$img('/static/img/close2.png')" lazy-load></image>
</view>
</view>
<!-- <view class="pay-type" @click="changePay(1)">
<view class="buy-card">
<view class="buy-info">
<view class="pic">
<image :src="orderData.goods.imgurl_detail" style="width: 190rpx; height: 190rpx;"
lazy-load>
</image>
</view>
<view class="info-r">
<view class="hang1" style="width: 100%; color: #333333; font-size: 24rpx;">
{{ orderData.goods.title }}
</view>
<view class="type">类型:明信片</view>
<view class="price-num">
<view class="price" style="font-size: 16rpx;">
¥<text style="font-size: 28rpx;">{{ orderData.goods.price }}</text>
</view>
<view class="num">×{{ orderData.goods.prize_num }}</view>
</view>
</view>
</view>
</view>
<view class="br20 mt20" style="background: #FFFFFF;">
<view class="pay-type" @click="changePay(0)">
<view class="" style="width: 100%; color: #333333;">
微信支付
</view>
<view class="icon">
<image v-if="zhifu == 0" :src="$img1('common/check_act.png')" lazy-load></image>
<image v-else :src="$img1('common/check.png')" lazy-load></image>
</view>
</view>
<!-- <view class="pay-type" @click="changePay(1)">
<view class="" style="width: 100%; color: #333333;">
{{ $config.getAppSetting('currency2_name') }}
@ -94,48 +88,50 @@
</view>
</view> -->
</view>
<view class="rule">
<scroll-view class="rule-inner" scroll-y>
<view v-html="sendRuleData"></view>
</scroll-view>
</view>
<view class="agree" @click="isAgree = !isAgree">
<view class="icon">
<image v-if="isAgree" :src="$img1('common/check_act.png')" lazy-load></image>
<image v-else :src="$img1('common/check.png')" lazy-load></image>
</view>
我已满18岁,阅读并同意
<view class="rule">
<scroll-view class="rule-inner" scroll-y>
<view v-html="sendRuleData"></view>
</scroll-view>
</view>
<view class="agree" @click="isAgree = !isAgree">
<view class="icon">
<image v-if="isAgree" :src="$img1('common/check_act.png')" lazy-load></image>
<text @click.stop="$c.to({ url: '/pages/guize/guize?type=4' })">
用户协议
</text>
<image v-else :src="$img1('common/check.png')" lazy-load></image>
</view>
<text @click.stop="$c.to({ url: '/pages/guize/guize?type=5' })">
隐私政策
</text>
我已满18岁,阅读并同意
<text @click.stop="$c.to({ url: '/pages/guize/guize?type=4' })">
用户协议
</text>
<text @click.stop="$c.to({ url: '/pages/guize/guize?type=5' })">
隐私政策
</text>
</view>
<view class="pay-btn" v-if="zhifu == 0" @click="$c.noDouble(confirmSubmit(1))">
<text>
{{
` ¥${orderData.price}`
}}
</text>
</view>
<view class="pay-btn" v-if="zhifu == 1" @click="$c.noDouble(pay(1))">
<text>{{ orderData.price * 100 }}{{ $config.getAppSetting('currency2_name') }}</text>
</view>
</view>
</uni-popup>
</view>
</page-container>
<view class="pay-btn" v-if="zhifu == 0" @click="$c.noDouble(confirmSubmit(1))">
<text>
{{
` ¥${orderData.price}`
}}
</text>
</view>
<view class="pay-btn" v-if="zhifu == 1" @click="$c.noDouble(pay(1))">
<text>{{ orderData.price * 100 }}{{ $config.getAppSetting('currency2_name') }}</text>
</view>
</view>
</uni-popup>
</view>
</template>
@ -252,7 +248,7 @@ export default {
if (this.zhifu == 1) {
}
},
confirmSubmit(type) {

View File

@ -1,58 +1,33 @@
<template>
<!-- @touchstart="touchStart" @touchend="touchEnd" -->
<view
class="content"
:style="{
'padding-top': `calc(${$sys().statusBarHeight}px + 330rpx)`
}"
>
<view class="content" :style="{
'padding-top': `calc(${$sys().statusBarHeight}px + 330rpx)`
}">
<!-- 发货须知 -->
<view
class="head commng_bg"
:style="{
'background-image': `url(${$img('/static/img/global_page_bg.png')})`
}"
>
<view class="head commng_bg" :style="{
'background-image': `url(${$img('/static/img/global_page_bg.png')})`
}">
<view class="head_top">
<view
class="status_bar"
:style="{
height: `calc(${$sys().statusBarHeight}px + 88rpx)`
}"
></view>
<view class="status_bar" :style="{
height: `calc(${$sys().statusBarHeight}px + 88rpx)`
}"></view>
</view>
<!-- 功能切换 -->
<view class="qiehuan_box">
<view class="qiehuan">
<view @click="getlist(v.id)" v-for="(v, i) in arr" :key="i">
<view :class="show == v.id ? 'xzs' : 'wzs'">{{ v.title }}</view>
<image
:src="$img('/static/img/tab_arrow.png')"
class="activeImg"
v-if="show == v.id"
></image>
<image :src="$img('/static/img/tab_arrow.png')" class="activeImg" v-if="show == v.id"></image>
</view>
</view>
<image
:src="$img('/static/img/bag_fhxz.png')"
@click="$refs.shuoming.open()"
></image>
<image :src="$img('/static/img/bag_fhxz.png')" @click="$refs.shuoming.open()"></image>
</view>
<!-- 搜索 -->
<view
class="title_ipt common_bg"
:style="{
'background-image': `url(${$img('/static/img/bag_search_box.png')})`
}"
>
<input
type="text"
placeholder="请输入关键字"
placeholder-style="color:rgba(255,255,255,0.6)"
confirm-type="search"
v-model="keyword"
@confirm="search()"
/>
<view class="title_ipt common_bg" :style="{
'background-image': `url(${$img('/static/img/bag_search_box.png')})`
}">
<input type="text" placeholder="请输入关键字" placeholder-style="color:rgba(255,255,255,0.6)" confirm-type="search"
v-model="keyword" @confirm="search()" />
<image @click="search()" :src="$img('/static/icon/search.png')"></image>
</view>
<view class="header" v-if="show != 3">
@ -77,27 +52,14 @@
</view>
</scroll-view>
</view>
<mescroll-body
ref="mescrollRef"
@init="mescrollInit"
:down="downOption"
@down="downCallback"
@up="upCallback"
>
<mescroll-body ref="mescrollRef" @init="mescrollInit" :down="downOption" @down="downCallback" @up="upCallback">
<!-- 赏池预览 -->
<view class="shop_con" v-if="show != 3">
<template v-for="(item, index) in goodsdata">
<view
class="shop"
v-for="(v, i) in item.orderlist"
:key="v.prize_code"
>
<view
class="shop-inner common_bg"
:style="{
'background-image': `url(${$img('/static/img/yf_ib.png')})`
}"
>
<view class="shop" v-for="(v, i) in item.orderlist" :key="v.prize_code">
<view class="shop-inner common_bg" :style="{
'background-image': `url(${$img('/static/img/yf_ib.png')})`
}">
<view class="pic">
<image :src="v.goodslist_imgurl" mode="scaleToFill" />
@ -116,21 +78,11 @@
</view>
<view class="num-box">
<image
@click.stop="jian(v)"
class="btn"
:src="$img('/static/icon/jian.png')"
mode="scaleToFill"
/>
<image @click.stop="jian(v)" class="btn" :src="$img('/static/icon/jian.png')" mode="scaleToFill" />
<input @blur="verifyNum(v)" v-model="v.number" />
<image
@click.stop="jia(v)"
class="btn"
:src="$img('/static/icon/jia.png')"
mode="scaleToFill"
/>
<image @click.stop="jia(v)" class="btn" :src="$img('/static/icon/jia.png')" mode="scaleToFill" />
</view>
<!-- <view class="shop_title">
@ -175,26 +127,16 @@
</view>
<!-- 卡册 -->
<view v-if="show == 3" style="margin-top: 40rpx">
<view
:style="
'background: url(' +
z_imgPath +
'ka_bg.png' +
') no-repeat 0 0 / 100% 100%;'
"
class="caStyle"
@click="gotoPage('caceDetail?caId=' + item.goods_id)"
v-for="(item, index) in goodsdata"
:key="index"
>
<view :style="'background: url(' +
z_imgPath +
'ka_bg.png' +
') no-repeat 0 0 / 100% 100%;'
" class="caStyle" @click="gotoPage('caceDetail?caId=' + item.goods_id)" v-for="(item, index) in goodsdata"
:key="index">
<image :src="item.goods_imgurl" mode="aspectFill"></image>
<view style="width: 630rpx; margin: 8rpx auto 0; height: 33rpx">
<cmd-progress
:percent="item.gailv"
:show-info="false"
stroke-color="#1AC762"
:strokeWidth="10"
></cmd-progress>
<cmd-progress :percent="item.gailv" :show-info="false" stroke-color="#1AC762"
:strokeWidth="10"></cmd-progress>
</view>
<view class="caTitle">
<view>{{ item.goods_title }}</view>
@ -211,47 +153,27 @@
<!-- huisou_click -->
<!-- <image :src="z_imgPath + 'qujiaoliu.png'" @click="toNewMp()" v-if="show<4" class="dabao"></image> 暂时隐藏 -->
<!-- 换为打包 -->
<view
@click="huisou_click()"
class="common_bg"
:style="{
'background-image': `url(${$img('/static/img/bag_hb.png')})`
}"
v-if="show == 1 || show == 5 || show == 2"
>
<view @click="huisou_click()" class="common_bg" :style="{
'background-image': `url(${$img('/static/img/bag_hb.png')})`
}" v-if="show == 1 || show == 5 || show == 2">
<!-- 环保 -->
</view>
<view
@click="fahuo_click()"
class="common_bg"
:style="{
'background-image': `url(${$img('/static/img/bag_fh.png')})`
}"
v-if="show == 1 || show == 5 || show == 2"
>
<view @click="fahuo_click()" class="common_bg" :style="{
'background-image': `url(${$img('/static/img/bag_fh.png')})`
}" v-if="show == 1 || show == 5 || show == 2">
<!-- 发货 -->
</view>
<view
@click="suo_click()"
class="common_bg"
:style="{
'background-image': `url(${$img('/static/img/bag_ss.png')})`
}"
v-if="show == 1 || show == 5 || show == 2"
>
<view @click="suo_click()" class="common_bg" :style="{
'background-image': `url(${$img('/static/img/bag_ss.png')})`
}" v-if="show == 1 || show == 5 || show == 2">
<!-- 上锁 -->
</view>
<!-- <image :src="z_imgPath + 'dabao.png'" @click="huisou_click()" v-if="show==1 ||show==5||show==2"></image>
<image :src="z_imgPath + 'fahuo.png'" @click="fahuo_click()" v-if="show==1 ||show==5||show==2"></image>
<image :src="z_imgPath + 'shangsuo.png'" @click="suo_click()" v-if="show==1 ||show==5||show==2"></image> -->
<view
@click="jiesuo_click()"
class="common_bg"
:style="{
'background-image': `url(${$img('/static/img/bag_js.png')})`
}"
v-if="show == 4"
>
<view @click="jiesuo_click()" class="common_bg" :style="{
'background-image': `url(${$img('/static/img/bag_js.png')})`
}" v-if="show == 4">
<!-- 解锁 -->
</view>
<!-- <image :src="z_imgPath + 'jiesuo.png'" @click="jiesuo_click()" v-if="show==4" class="jiesuo"></image> -->
@ -260,25 +182,15 @@
<!-- 刷新浮框 -->
<view class="xuanfu">
<!-- <image :src="z_imgPath + 'jiaoliu.png?12'" @click="toNewMp()"></image> -->
<image
:src="$img('/static/img/yf_rb.png')"
@click="getlist(show)"
></image>
<image
:src="$img('/static/img/bag_qx.png')"
@click="quanxuan_click()"
v-if="show != 3"
></image>
<image :src="$img('/static/img/yf_rb.png')" @click="getlist(show)"></image>
<image :src="$img('/static/img/bag_qx.png')" @click="quanxuan_click()" v-if="show != 3"></image>
</view>
<!-- 发货说明 -->
<uni-popup ref="shuoming" type="center">
<view
class="pop common_bg"
:style="{
'background-image': `url(${$img('/static/img/yf_rule_pop_bg.png')})`
}"
>
<view class="pop common_bg" :style="{
'background-image': `url(${$img('/static/img/yf_rule_pop_bg.png')})`
}">
<view class="pop_title">发货须知</view>
<view class="pop_con">
<scroll-view scroll-y="true" style="height: 600rpx">
@ -286,11 +198,7 @@
</scroll-view>
</view>
<image
@click="$refs.shuoming.close()"
class="close"
:src="$img('/static/icon/close.png')"
></image>
<image @click="$refs.shuoming.close()" class="close" :src="$img('/static/icon/close.png')"></image>
</view>
</uni-popup>
@ -314,14 +222,9 @@
</view>
</view>
<view class="xuyuan_con">
<view
class="xuyuan_item common_bg"
:style="{
'background-image': `url(${$img('/static/img/yf_ib.png')})`
}"
v-for="(item, index) in huishou_Arr"
:key="index"
>
<view class="xuyuan_item common_bg" :style="{
'background-image': `url(${$img('/static/img/yf_ib.png')})`
}" v-for="(item, index) in huishou_Arr" :key="index">
<view class="shop_item_img">
<image :src="item.goodslist_imgurl"></image>
<view>
@ -348,13 +251,9 @@
<view class="pop-ft">
<view class="price">环保合计:{{ zong_price.toFixed(2) }}</view>
<view
@click="huisou_btn"
class="confirm-btn common_bg"
:style="{
'background-image': `url(${$img('/static/img/bag_qrhs.png')})`
}"
></view>
<view @click="huisou_btn" class="confirm-btn common_bg" :style="{
'background-image': `url(${$img('/static/img/bag_qrhs.png')})`
}"></view>
</view>
<!-- <view
class="pop_huishou"
@ -391,14 +290,9 @@
</view>
</view>
<view class="xuyuan_con" style="border: none">
<view
class="xuyuan_item common_bg"
v-for="(item, index) in huishou_Arr"
:key="index"
:style="{
'background-image': `url(${$img('/static/img/yf_ib.png')})`
}"
>
<view class="xuyuan_item common_bg" v-for="(item, index) in huishou_Arr" :key="index" :style="{
'background-image': `url(${$img('/static/img/yf_ib.png')})`
}">
<view class="shop_item_img">
<image :src="item.goodslist_imgurl"></image>
<view>
@ -414,11 +308,7 @@
</view>
</view>
<view class="xuyuan kuaidi">
<view
@click="showMulLinkageThreePicker()"
class="flex_center"
style="justify-content: space-between"
>
<view @click="showMulLinkageThreePicker()" class="flex_center" style="justify-content: space-between">
<view style="width: 580rpx; font-size: 28rpx">
{{ selectCity }}
</view>
@ -428,11 +318,7 @@
<view class="kuaidi_text">
如果不满{{ post.free_post }}需支付{{ post.post_money }}元运费
</view>
<textarea
placeholder="请输入留言内容"
maxlength="50"
v-model="message"
></textarea>
<textarea placeholder="请输入留言内容" maxlength="50" v-model="message"></textarea>
</view>
<view class="pop-ft">
@ -440,13 +326,9 @@
需支付:{{ num >= post.free_post ? 0 : post.post_money }}
</view>
<view
@click="fahuo_btn"
class="confirm-btn common_bg"
:style="{
'background-image': `url(${$img('/static/img/bag_qrfh.png')})`
}"
></view>
<view @click="fahuo_btn" class="confirm-btn common_bg" :style="{
'background-image': `url(${$img('/static/img/bag_qrfh.png')})`
}"></view>
</view>
<!-- <view
@ -488,32 +370,21 @@
</view>
</uni-popup>
<!-- 详情弹窗 -->
<uni-popup
ref="yulanPop"
type="center"
mask-background-color="rgba(0,0,0,.95)"
>
<uni-popup ref="yulanPop" type="center" mask-background-color="rgba(0,0,0,.95)">
<view>
<view class="yulanStyle">
<view style="font-size: 36rpx; flex: 1; text-align: left">
{{ yulan_news.shang_title }}
</view>
<image
:src="yulan_news.goodslist_imgurl"
mode=""
class="shang_img"
></image>
<image :src="yulan_news.goodslist_imgurl" mode="" class="shang_img"></image>
<image class="img_bg" :src="z_imgPath + 'yulan_bg.png'"></image>
</view>
<view
class="hang1"
style="
<view class="hang1" style="
color: #fff;
font-size: 28rpx;
padding: 10rpx 0;
text-align: center;
"
>
">
{{ yulan_news.goodslist_title }}
</view>
</view>
@ -788,6 +659,12 @@ export default {
if (that.fh_status) {
return
}
uni.showToast({
title: '发货未开放',
icon: 'loading',
duration: 1000
})
return;
if (that.recovery_info && that.recovery_info.length > 0) {
that.fh_status = true
that.req({
@ -1224,9 +1101,11 @@ export default {
.kaType {
display: flex;
margin: 0 0 0 30rpx;
> view {
>view {
margin-right: 20rpx;
}
.sty {
background-color: #ebfffa;
color: #333;
@ -1234,6 +1113,7 @@ export default {
padding: 15rpx 20rpx;
border-radius: 10rpx;
}
.selSty {
background-color: #1ac762;
color: #333;
@ -1241,29 +1121,34 @@ export default {
border-radius: 10rpx;
}
}
.caStyle {
width: 690rpx;
height: 880rpx;
margin: 0 30rpx 20rpx;
padding-top: 10rpx;
box-sizing: border-box;
> image {
>image {
width: 670rpx;
height: 740rpx;
display: block;
margin: 0rpx auto;
}
.caTitle {
display: flex;
justify-content: space-between;
margin: 20rpx 20rpx 0;
color: #fff;
}
text {
color: #feff00;
}
}
.yulanStyle > .shang_img {
.yulanStyle>.shang_img {
width: 563rpx;
height: 754rpx;
position: absolute;
@ -1272,7 +1157,8 @@ export default {
right: 0;
margin: 0 auto;
}
.yulanStyle > .img_bg {
.yulanStyle>.img_bg {
width: 100%;
height: 100%;
position: absolute;
@ -1280,7 +1166,8 @@ export default {
top: 0;
z-index: 999;
}
.yulanStyle > view:nth-of-type(1) {
.yulanStyle>view:nth-of-type(1) {
position: absolute;
top: 54rpx;
left: 45rpx;
@ -1357,16 +1244,16 @@ textarea {
color: #999999;
}
.kuaidi > view:nth-of-type(2) {
.kuaidi>view:nth-of-type(2) {
font-size: 28rpx;
}
.kuaidi > view:nth-of-type(1) {
.kuaidi>view:nth-of-type(1) {
border-bottom: 1rpx solid #666666;
padding: 20rpx 0;
}
.kuaidi > view {
.kuaidi>view {
margin-top: 20rpx;
}
@ -1380,7 +1267,7 @@ textarea {
color: #ffffff;
}
.order_title > image {
.order_title>image {
width: 162rpx;
height: 47rpx;
position: absolute;
@ -1468,7 +1355,7 @@ textarea {
color: #ffffff;
}
.shop_item_img > view:nth-of-type(1) {
.shop_item_img>view:nth-of-type(1) {
position: absolute;
bottom: 0;
left: 0;
@ -1496,7 +1383,7 @@ textarea {
}
}
.shop_item_img > image {
.shop_item_img>image {
width: 100%;
height: 100%;
border-radius: 8rpx;
@ -1536,7 +1423,7 @@ textarea {
padding-bottom: 10rpx;
}
.xuyuan_head > view:nth-of-type(2) {
.xuyuan_head>view:nth-of-type(2) {
font-size: 24rpx;
}
@ -1616,12 +1503,12 @@ textarea {
align-items: center;
}
.footer > image {
.footer>image {
width: 212rpx;
height: 70rpx;
}
.footer > image:nth-of-type(3) {
.footer>image:nth-of-type(3) {
/* width: 212rpx;
height: 106rpx;
position: absolute;
@ -1635,7 +1522,8 @@ textarea {
.jiesuo {
margin: auto;
}
.footer > view {
.footer>view {
width: 206rpx;
height: 84rpx;
display: flex;
@ -1647,6 +1535,7 @@ textarea {
color: #ffffff;
margin: 0 auto;
}
.footer {
width: 690rpx;
display: flex;
@ -1686,7 +1575,7 @@ button {
z-index: 21;
}
.shop_head > text {
.shop_head>text {
background: #ff7514;
border-radius: 10rpx;
padding: 2rpx 20rpx;
@ -1709,7 +1598,7 @@ button {
/* border: 1rpx solid red; */
}
.shop_title > image {
.shop_title>image {
width: 140rpx;
height: 140rpx;
margin-right: 20rpx;
@ -1822,7 +1711,7 @@ button {
height: 26rpx;
}
.goods_title > view {
.goods_title>view {
/* background: #ff7514; */
width: 40rpx;
height: 40rpx;
@ -1851,12 +1740,12 @@ button {
padding-right: 10rpx;
}
.title_ipt > image {
.title_ipt>image {
width: 33rpx;
height: 33rpx;
}
.title_ipt > input {
.title_ipt>input {
width: 570rpx;
height: 60rpx;
box-sizing: border-box;
@ -1881,10 +1770,12 @@ button {
color: #ffffff;
font-size: 24rpx;
}
.qiehuan_box > image {
.qiehuan_box>image {
width: 170rpx;
height: 59rpx;
}
.activeImg {
position: absolute;
width: 30rpx !important;
@ -1894,6 +1785,7 @@ button {
right: 0;
margin: 0 auto;
}
.qiehuan {
display: flex;
justify-content: space-around;
@ -1902,11 +1794,13 @@ button {
font-weight: bold;
font-family: YouSheBiaoTiHei;
}
.qiehuan image {
width: 90rpx;
height: 47rpx;
}
.qiehuan > view {
.qiehuan>view {
// flex: 1;
// text-align: center;
margin-right: 20rpx;
@ -1943,13 +1837,13 @@ button {
color: #bec0d3;
}
.header_title > view:nth-of-type(2) {
.header_title>view:nth-of-type(2) {
width: 520rpx;
text-align: center;
/* margin: auto; */
}
.header_title > view:nth-of-type(1) {
.header_title>view:nth-of-type(1) {
display: flex;
align-items: center;
}
@ -1978,8 +1872,7 @@ button {
width: 100%;
}
.head_top {
}
.head_top {}
.head {
width: 750rpx;

View File

@ -677,6 +677,7 @@ export default {
})
return
}
let data = this.handelList.map(item => {
return {
prize_code: item.prize_code,
@ -912,6 +913,14 @@ export default {
},
open(e) {
if (e == "sendPop") {
uni.showToast({
title: '发货未开放',
icon: 'none',
duration: 1000
})
return;
}
this.handelList = []
const choose = this.getChooseGoods()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -85,18 +85,17 @@
<rule-pop ref="rulePop"></rule-pop>
<uni-popup ref="posterPopup" type="center">
<view style="width:650rpx;height:950rpx;">
<image :src="getHaiBao()" style="width: 100%;"></image>
<image :src="logo_image" style="width: 100%;"></image>
</view>
<view style="text-align: center; margin-top: 20rpx;">
<image style="width: 48px;height: 48px;" @click="saveImageToPhotosAlbum()" :src="getXiaZai()"></image>
<image show-menu-by-longpress style="width: 48px;height: 48px;" @click="saveImageToPhotosAlbum()" :src="getXiaZai()"></image>
</view>
</uni-popup>
</view>
</template>
<script>
import UQRCode from 'uqrcodejs'; // npm install uqrcodejs
export default {
data() {
var isH5 = false;
@ -118,6 +117,7 @@
onShareAppMessage() {
let that = this
return {
// imageUrl: this.getHaiBao(),
title: "友达赏,正版潮玩手办一番赏",
path: '/pages/shouye/index?pid=' + uni.getStorageSync('userinfo').ID
}
@ -127,7 +127,7 @@
},
methods: {
saveImageToPhotosAlbum() {
const imageUrl = this.getHaiBao(); //
const imageUrl = this.logo_image; //
//
wx.downloadFile({
url: imageUrl,
@ -202,7 +202,7 @@
success(res) {
that.total = res.data.count
that.commission = res.data.money
// that.logo_image = res.data.share_image
that.logo_image = res.data.share_image
that.mescroll.endByPage(res.data.data.length, res.data.last_page)
if (pageNo == 1) {
that.listdata = res.data.data