feat:v1.4前端更新

This commit is contained in:
超凡
2025-06-24 14:43:09 +08:00
parent 0268aa5033
commit 35fec82e4a
1026 changed files with 118424 additions and 56490 deletions

View File

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,177 @@
<template>
<!-- 小程序顶部提示 -->
<view>
<view class="tip_box" :class="{ anScale: isAm }" v-if="showTip"
:style="{ top: isCustom ? boxTop + 'px' : '0px' }">
<view class="arrow" :style="{ 'margin-right': arrowMargin + 'px', borderBottomColor: bgColor }"></view>
<view class="container" :style="{'margin-right': cotainerMargin + 'px',backgroundColor: bgColor,borderRadius: borderR + 'px',}">
<!-- 提示文字 -->
<view class="tips" :style="{ color: fontObj.color, fontSize: fontObj.fontSize, fontWeight: fontObj.fontWeight }">
{{ text }}</view>
<view class="close" @tap="tipHidden">
<text class="iconfont icon-cha3" v-if="closeColor"></text>
<text class="iconfont icon-cha3" style="color:#fff;" v-else></text>
</view>
</view>
</view>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
export default {
data() {
return {
showTip: false,
boxTop: 0,
arrowMargin: 0,
cotainerMargin: 0,
screenWidth: 0,
};
},
props: {
/* 是否是自定义头部 */
isCustom: {
type: Boolean,
default: false,
},
/* 背景颜色 */
bgColor: {
type: String,
default: "#ffffff",
},
/* 提示文字 */
text: {
type: String,
default: "添加到我的小程序",
},
/* 提示文字样式 */
fontObj: {
type: Object,
default: function() {
return {
color: "#202020",
fontSize: "12px",
fontWeight: "0",
};
},
},
/* 圆角大小 px*/
borderR: {
type: Number,
default: 5,
},
/* 延时出现 */
delay: {
type: Number,
default: 2000,
},
/* 关闭btn黑白两色 或者自行添加 */
closeColor: {
type: Boolean,
default: true,
},
/* 动画效果 */
isAm: {
type: Boolean,
default: true,
},
},
methods: {
tipHidden: function() {
uni.setStorageSync("my_tips_2020", "true");
this.showTip = false;
},
timeOut() {
this.tipHidden();
this.showTip = true;
},
init() {
if (uni.getStorageSync("my_tips_2020")) return;
let rect = uni.getMenuButtonBoundingClientRect();
let screenWidth = uni.getSystemInfoSync().screenWidth;
this.boxTop = rect.bottom;
this.arrowMargin = rect.width * 0.75 + 4;
this.cotainerMargin = screenWidth - rect.right;
this.timeOut();
},
},
onReady() {
this.init();
},
};
</script>
<style lang="scss" scoped>
@keyframes anScale {
from {
-webkit-transform: scale3d(0.96, 0.96, 0.96);
transform: scale3d(0.96, 0.96, 0.96);
}
50% {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
}
to {
-webkit-transform: scale3d(0.96, 0.96, 0.96);
transform: scale3d(0.96, 0.96, 0.96);
}
}
.anScale {
animation: anScale 1s linear infinite;
}
.tip_box {
width: 70%;
position: fixed;
top: 0;
right: 0;
z-index: 100;
display: flex;
justify-content: flex-end;
align-items: flex-end;
flex-direction: column;
.arrow {
width: 0;
height: 0;
border: 10rpx solid;
border-color: transparent;
}
.container {
display: flex;
align-items: center;
justify-content: center;
padding: 16rpx 24rpx;
.tips {
flex: 1;
padding-right: 12rpx;
}
.close {
height: 30rpx;
width: 30rpx;
font-size: 20rpx;
line-height: 30rpx;
color: #999;
.closeImg {
height: 100%;
width: 100%;
}
}
}
}
</style>

View File

@@ -1,266 +0,0 @@
<template>
<view :class="{borderShow:isBorader}">
<view class="combination" v-if="combinationList.length">
<view class="title acea-row row-between">
<view class="spike-bd">
<view v-if="assistUserList.length > 0" class="activity_pic">
<view v-for="(item,index) in assistUserList" :key="index" class="picture"
:style='index===2?"position: relative":"position: static"'>
<span class="avatar" :style='"background-image: url("+item+")"'></span>
<span v-if="index===2 && Number(assistUserCount) > 3" class="mengceng">
<i>···</i>
</span>
</view>
<text class="pic_count">{{assistUserCount}}人参与</text>
</view>
</view>
<navigator url="/pages/activity/goods_combination/index" hover-class="none"
class="more acea-row row-center-wrapper">GO<text class="iconfont icon-xiangyou"></text></navigator>
</view>
<view class="conter acea-row">
<scroll-view scroll-x="true" style="white-space: nowrap; vertical-align: middle;"
show-scrollbar="false">
<view class="itemCon" v-for="(item, index) in combinationList" :key="index" @click="goDetail(item)">
<view class="item">
<view class="pictrue">
<image :src="item.image"></image>
</view>
<view class="text lines1">
<view class="name line1">{{item.title}}</view>
<view class="money">¥<text class="num">{{item.price}}</text></view>
<view class="y_money">¥{{item.otPrice}}</view>
</view>
</view>
</view>
<!-- <navigator :url="`/pages/activity/goods_combination_details/index?id=${item.id}`" hover-class="none" class="item" v-for="(item, index) in combinationList" :key="index">
<view class="pictrue">
<image :src="item.image"></image>
</view>
<view class="text lines1">
<text class="money">¥<text class="num">{{item.price}}</text></text>
<text class="y_money">¥{{item.otPrice}}</text>
</view>
</navigator> -->
</scroll-view>
</view>
</view>
</view>
</template>
<script>
let app = getApp();
import {
getCombinationIndexApi
} from '@/api/activity.js';
export default {
name: 'b_combination',
data() {
return {
combinationList: [],
isBorader: false,
assistUserList: [],
assistUserCount: 0
};
},
created() {
this.getCombinationList();
},
mounted() {},
methods: {
// 拼团列表
getCombinationList: function() {
let that = this;
getCombinationIndexApi().then(function(res) {
that.combinationList = res.data.productList;
that.assistUserList = res.data.avatarList;
that.assistUserCount = res.data.totalPeople;
}).catch((res) => {
return that.$util.Tips({
title: res
});
})
},
goDetail(item) {
uni.navigateTo({
url: `/pages/activity/goods_combination_details/index?id=${item.id}`
})
}
}
}
</script>
<style lang="scss" scoped>
.mengceng {
width: 38rpx;
height: 38rpx;
line-height: 36rpx;
background: rgba(51, 51, 51, 0.6);
text-align: center;
border-radius: 50%;
opacity: 1;
position: absolute;
left: 0px;
top: 2rpx;
color: #FFF;
i{
font-style: normal;
font-size: 20rpx;
}
}
.activity_pic {
margin-left: 28rpx;
padding-left: 20rpx;
.picture {
display: inline-block;
}
.avatar {
width: 38rpx;
height: 38rpx;
display: inline-table;
vertical-align: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
border-radius: 50%;
background-repeat: no-repeat;
background-size: cover;
background-position: 0 0;
margin-right: -10rpx;
box-shadow: 0 0 0 1px #fff;
}
.pic_count {
margin-left: 30rpx;
color: $theme-color;
font-size: 22rpx;
font-weight: 500;
}
}
.default {
width: 690rpx;
height: 300rpx;
border-radius: 14rpx;
margin: 26rpx auto 0 auto;
background-color: #ccc;
text-align: center;
line-height: 300rpx;
.iconfont {
font-size: 80rpx;
}
}
.combination {
width: auto;
background-color: #fff;
border-radius: 14rpx;
margin: 0 auto 30rpx auto;
padding: 16rpx 24rpx 24rpx 24rpx;
background-image: url(../../../static/images/pth.png);
background-repeat: no-repeat;
background-size: 100%;
.title {
width: 80%;
margin-left: 128rpx;
.sign {
width: 40rpx;
height: 40rpx;
image {
width: 100%;
height: 100%;
}
}
.name {
font-size: 32rpx;
color: #282828;
margin-left: 12rpx;
font-weight: bold;
text {
color: #797979;
font-size: 24rpx;
font-weight: 400;
margin-left: 14rpx;
}
}
.more {
width: 86rpx;
height: 40rpx;
background: linear-gradient(142deg, #FFE9CE 0%, #FFD6A7 100%);
opacity: 1;
border-radius: 18px;
font-size: 22rpx;
color: #FE960F;
padding-left: 8rpx;
font-weight: 800;
.iconfont {
font-size: 21rpx;
}
}
}
.conter {
margin-top: 24rpx;
.itemCon {
display: inline-block;
width: 220rpx;
margin-right: 24rpx;
}
.item {
width: 100%;
.pictrue {
width: 100%;
height: 220rpx;
border-radius: 6rpx;
image {
width: 100%;
height: 100%;
border-radius: 6rpx;
}
}
.text {
margin-top: 4rpx;
.y_money {
font-size: 24rpx;
color: #999999;
text-decoration: line-through;
}
.name {
font-size: 24rpx;
color: #000;
margin-top: 14rpx;
}
.money {
color: #FD502F;
font-size: 28rpx;
height: 100%;
font-weight: bold;
margin: 10rpx 0 0rpx 0;
.num {
font-size: 28rpx;
}
}
}
}
}
}
</style>

View File

@@ -1,189 +0,0 @@
<template>
<view :class="{borderShow:isBorader}">
<view class="combination" v-if="bargList.length">
<view class="title acea-row row-between">
<view class="acea-row row-column">
<image src="../../../static/images/kanjia.png" class="pic"></image>
</view>
<navigator url="/pages/activity/goods_bargain/index" hover-class="none" class="more acea-row row-center-wrapper">GO<text class="iconfont icon-xiangyou"></text></navigator>
</view>
<view class="conter acea-row">
<scroll-view scroll-x="true" style="white-space: nowrap; vertical-align: middle;" show-scrollbar="false">
<view class="itemCon" v-for="(item, index) in bargList" :key="index" @click="bargDetail(item)">
<view class="item">
<view class="pictrue">
<image :src="item.image"></image>
</view>
<view class="text lines1">
<view class="name line1">{{item.title}}</view>
<view class="money">¥<text class="num">{{item.minPrice}}</text></view>
<view class="btn">参与砍价</view>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</template>
<script>
let app = getApp();
import {
toLogin
} from '@/libs/login.js';
import {
getBargainIndexApi
} from '@/api/activity.js';
import { mapGetters } from 'vuex';
export default {
name: 'c_bargain',
computed: mapGetters({
'userData': 'userInfo',
'uid': 'uid'
}),
data() {
return {
bargList: [],
isBorader:false
};
},
created() {
this.getBargainList();
},
mounted() {
},
methods: {
// 砍价列表
getBargainList() {
getBargainIndexApi().then(res => {
this.bargList = res.data ? res.data.productList : [];
})
},
bargDetail(item){
uni.navigateTo({
url: `/pages/activity/goods_bargain_details/index?id=${item.id}&startBargainUid=${this.uid}`
});
}
}
}
</script>
<style lang="scss" scoped>
.pic{
width: 130rpx;
height: 30rpx;
}
.default{
width: 690rpx;
height: 300rpx;
border-radius: 14rpx;
margin: 26rpx auto 0 auto;
background-color: #ccc;
text-align: center;
line-height: 300rpx;
.iconfont{
font-size: 80rpx;
}
}
.combination{
width: auto;
background-image: url(../../../static/images/kjbj.png);
background-repeat: no-repeat;
background-size: 100%;
background-color: #fff;
border-radius: 14rpx;
margin: 30rpx auto 0 auto;
padding: 25rpx 20rpx 25rpx 20rpx;
.title {
.sign {
font-size: 32rpx;
color: $theme-color;
margin-bottom: 2rpx;
font-weight: bold;
margin-bottom: 10rpx;
}
.name {
text {
color: #333333;
font-size: 26rpx;
font-weight: 400;
}
}
.more {
width: 86rpx;
height: 40rpx;
background: linear-gradient(142deg, #FFE9CE 0%, #FFD6A7 100%);
opacity: 1;
border-radius: 18px;
font-size: 22rpx;
color: #FE960F;
padding-left: 8rpx;
font-weight: 800;
.iconfont {
font-size: 21rpx;
}
}
}
.conter{
margin-top: 28rpx;
.itemCon {
display: inline-block;
width: 220rpx;
margin-right: 24rpx;
}
.item{
width:100%;
.pictrue{
width: 100%;
height: 220rpx;
border-radius: 6rpx;
image{
width: 100%;
height: 100%;
border-radius: 6rpx;
}
}
.text{
margin-top: 4rpx;
.y_money {
font-size: 24rpx;
color: #999999;
text-decoration: line-through;
}
.name {
font-size: 24rpx;
color: #000;
margin-top: 14rpx;
}
.money {
color: #FD502F;
font-size: 28rpx;
height: 100%;
font-weight: bold;
margin: 10rpx 0;
.num {
font-size: 28rpx;
}
}
.btn{
width: 220rpx;
height: 48rpx;
line-height: 48rpx;
text-align: center;
background: linear-gradient(129deg, #FF5555 0%, #FF0000 100%);
opacity: 1;
border-radius: 0px 0px 14rpx 14rpx;
color: #FFFFFF;
font-size: 26rpx;
margin-top: 6rpx;
}
}
}
}
}
</style>

View File

@@ -0,0 +1,48 @@
<template>
<view class="copyRight-box" v-if="copyRightInfo">
<view>
<text @click="toIcp">{{copyRightInfo.copyrightIcpNumber}}</text>
</view>
<view class="bottom mt10" @click="toInternet">
<text>{{copyRightInfo.copyrightInternetRecord}}</text>
</view>
</view>
</template>
<script>
import {getConfigCopyright} from '@/api/api.js'
export default{
data(){
return{
copyRightInfo:null
}
},
mounted() {
this.getCopyright()
},
methods:{
getCopyright(){
getConfigCopyright().then(res=>{
this.copyRightInfo=res.data
})
},
toIcp(){
window.open(this.copyRightInfo.copyrightIcpNumberUrl)
},
toInternet(){
window.open(this.copyRightInfo.copyrightInternetRecordUrl)
},
}
}
</script>
<style lang="scss" scoped>
.copyRight-box{
padding: 40rpx 0;
text-align: center;
text{
color: #666;
font-size: 24rpx;
}
}
</style>

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

File diff suppressed because it is too large Load Diff