1.添加N个页面

This commit is contained in:
王创世 2025-06-07 18:31:27 +08:00
parent 5c3b736c51
commit dc69c5e7bb
15 changed files with 1407 additions and 689 deletions

View File

@ -112,7 +112,13 @@
// autoBack
this.$emit('leftClick')
if(this.autoBack) {
if (getCurrentPages().length > 1) {
uni.navigateBack()
} else {
uni.switchTab({
url: "/pages/index/index"
})
}
}
},
//

View File

@ -4,7 +4,7 @@
<u-navbar :is-back="true" leftIconColor="#FFFFFF" :autoBack='true' title="" :bgColor="background"
:titleStyle='titleStyle'> </u-navbar>
</view> -->
<view class="box flex justify-start flex-column align-items" >
<view class="box flex justify-start flex-column align-items">
<!-- <view class="swiper">
<u-swiper :list="detail.images" indicator indicatorActiveColor="#323232" indicatorMode="dot" :indicator-style="{ bottom: '60rpx',zIndex: 999}"
height="580rpx" circular></u-swiper>
@ -17,12 +17,14 @@
<view class="flex flex-column">
<view class="flex">
<image v-if="detail.images" :src="detail.images[0]" mode="" style="width: 159rpx;height: 159rpx;border-radius: 18rpx;"></image>
<image v-if="detail.images" :src="detail.images[0]" mode=""
style="width: 159rpx;height: 159rpx;border-radius: 18rpx;"></image>
<view class="flex align-items flex-column" style="margin-left: 20rpx;">
<span class="first-name white-space">{{detail.title}}</span>
<span class="first-name white-space">{{ detail.title }}</span>
<view class="rbot flex align-items">
<image src="/static/center/address.png" mode="" style="width: 32rpx;height: 32rpx;margin-right: 20rpx;"></image>
<span class="white-space">{{detail.address_detail}}</span>
<image src="/static/center/address.png" mode=""
style="width: 32rpx;height: 32rpx;margin-right: 20rpx;"></image>
<span class="white-space">{{ detail.address_detail }}</span>
</view>
</view>
</view>
@ -31,15 +33,18 @@
<span class="line"></span>
<span class="flex align-items" style="width: 100%;justify-content: space-between;">
<view class="tt1">活动时间</view>
<span style="font-size: 14px;">{{formattedTime.formattedTime}}</span>
<span style="font-size: 14px;">{{ formattedTime.formattedTime }}</span>
</span>
<span class="line"></span>
<span class="flex align-items" style="width: 100%;justify-content: space-between;">
<view class="tt1">数量<span> (剩余{{detail.join_info.stock - detail.join_info.people_number}})</span></view>
<view class="tt1">数量<span>
(剩余{{ detail.join_info.stock - detail.join_info.people_number }})</span></view>
<span class="flex align-items">
<image style="width: 42rpx;height: 42rpx;" src="/static/detail/jian.png" @click="removeMon"></image>
<image style="width: 42rpx;height: 42rpx;" src="/static/detail/jian.png" @click="removeMon">
</image>
<span style="margin: 0 20rpx;">{{ nummoney }}</span>
<image style="width: 42rpx;height: 42rpx;" src="/static/detail/jia.png" @click="addMon"></image>
<image style="width: 42rpx;height: 42rpx;" src="/static/detail/jia.png" @click="addMon">
</image>
</span>
</span>
<span class="line"></span>
@ -48,57 +53,89 @@
<span style="color: #FF4810;font-weight: 900;">{{ priceGem }}</span>
</span>
<span class="line"></span>
<span class="flex align-items" style="width: 100%;justify-content: space-between;margin-bottom: 40rpx;">
<span class="flex align-items"
style="width: 100%;justify-content: space-between;">
<view class="tt1">支付方式</view>
<span class="flex align-items">
<image style="width: 44rpx;height: 44rpx;" src="/static/detail/weixin.png"></image>
<span style="margin-left: 20rpx;">微信支付</span>
</span>
</span>
<span class="line"></span>
<view style="width: 100%;display: flex;align-items: center;justify-content: space-between;padding-bottom:30rpx;">
<view style="font-size: 28rpx;">
备注
</view>
<view style="width: 75%;">
<input type="number" placeholder="订单备注" class="input" v-model="desc" />
</view>
</view>
<view class="third flex flex-column" style="justify-content: flex-start;background: linear-gradient( 180deg, #EFFFD6 0%, #FFFFFF 30%);">
</view>
</view>
<view class="third flex flex-column"
style="justify-content: flex-start;background: linear-gradient( 180deg, #EFFFD6 0%, #FFFFFF 30%);">
<view class="flex align-items" style="padding: 30rpx;justify-content: space-between;">
<view class="third-top flex align-items" style="margin: 0px;">
<span>报名信息
<image class="icons" src="/static/detail/xiangqing.png"></image>
</span>
</view>
<view style="display: flex;align-items: center;" @click="openUrl('/packageB/team/index')">
<view>
<u-icon name="plus" color="#323232"></u-icon>
</view>
<view style="font-size: 28rpx;margin-left: 10rpx;">管理报名人</view>
</view>
</view>
<view style="font-size: 24rpx;color: #999999;margin-left: 30rpx;">请填写真实的报名人认证信息</view>
<view style="padding: 30rpx;margin-top: 20rpx;">
<view v-for="(item, index) in displayedList" @click="chickTeam(item, index)"
style="padding:0rpx 30rpx;">
<view style="padding-top: 40rpx;">
<view style="display: flex;align-items: center;justify-content: space-between;">
<view>
<view style="font-size: 28rpx;color: #323232;">李明</view>
<view style="color: #9C9C9C;font-size: 24rpx;margin-top: 10rpx;">身份证 410305200001012025</view>
<view style="font-size: 28rpx;color: #323232;">{{ item.name }}</view>
<view style="color: #9C9C9C;font-size: 24rpx;margin-top: 10rpx;">身份证 {{ item.idnum }}
</view>
</view>
<view>
<image src="/static/fabu/nocheck.png" style="width: 40rpx;height: 40rpx"></image>
<image v-if="!item.is" src="/static/fabu/nocheck.png"
style="width: 40rpx;height: 40rpx"></image>
<image v-else src="/static/fabu/check.png" style="width: 40rpx;height: 40rpx"></image>
</view>
</view>
<view style="height: 1px;background-color: #F0F0F0;width: 100%;margin-top: 20rpx;"></view>
</view>
<view style="height: 1px;background-color: #F0F0F0;width: 100%;margin-top: 40rpx;"></view>
</view>
<view style="padding: 30rpx;">
<view style="padding: 15rpx 0rpx;display: flex;align-items: center;border-radius: 118rpx;width: 323rpx;background: #F7F7F7;margin: 0 auto;justify-content: center;">
<view>
<image src="/static/order_add.png" style="width: 30rpx;height: 30rpx"></image>
<view v-if="!down" @click="down = true"
style="padding: 15rpx 0rpx;display: flex;align-items: center;border-radius: 118rpx;width: 260rpx;background: #F7F7F7;margin: 0 auto;justify-content: center;">
<view style="font-size: 28rpx;">收起全部</view>
<view style="margin-left: 20rpx;">
<u-icon name="arrow-up"></u-icon>
</view>
</view>
<view v-if="down" @click="down = false"
style="padding: 15rpx 0rpx;display: flex;align-items: center;border-radius: 118rpx;width: 260rpx;background: #F7F7F7;margin: 0 auto;justify-content: center;">
<view style="font-size: 28rpx;">展开全部</view>
<view style="margin-left: 20rpx;">
<u-icon name="arrow-down"></u-icon>
</view>
<view style="font-size: 28rpx;margin-left: 20rpx;">添加/删除报名人</view>
</view>
</view>
</view>
<view class="third flex flex-column" style="justify-content: flex-start;" v-if="priceGem > 0">
<view @click="tipsShow= true" class="flex align-items" style="padding: 30rpx;justify-content: space-between;">
<view @click="tipsShow = true" class="flex align-items"
style="padding: 30rpx;justify-content: space-between;">
<view class="third-top flex align-items" style="margin: 0px;">
<span>退款政策
<image class="icons" src="/static/detail/xiangqing.png"></image>
</span>
</view>
<view style="display: flex;align-items: center;">
<view style="background: #323232;border-radius: 8rpx;text-align: center;padding: 2rpx 10rpx 10rpx 10rpx;">
<text style="font-size: 22rpx;color: #BBFC5B;">{{detail.refund_info.title}}</text>
<view
style="background: #323232;border-radius: 8rpx;text-align: center;padding: 2rpx 10rpx 10rpx 10rpx;">
<text style="font-size: 22rpx;color: #BBFC5B;">{{ detail.refund_info.title }}</text>
</view>
<view style="margin-left: 10rpx;"><u-icon name="arrow-right"></u-icon></view>
</view>
@ -129,11 +166,12 @@
margin: '0 auto',
display: 'flex',
justifyContent: 'flex-start',
alignItems: 'center'}" :closeable="false" :show="tipsShow" :round="10" mode="center"
:closeOnClickOverlay="false">
<view style="font-size: 32rpx;font-weight: 400;margin: 12rpx 0 24rpx 0;">退款政策</view>
<view class="third-center">
<uni-table border stripe emptyText="暂无更多数据" >
alignItems: 'center'
}" :closeable="false" :show="tipsShow" :round="10" mode="center" :closeOnClickOverlay="false">
<view style="font-size: 32rpx;font-weight: 400;margin: 20rpx 0 24rpx 0;">退款政策</view>
<view class="third-center" style="padding: 30rpx;">
<view v-html="detail.refund_info.desc"></view>
<!-- <uni-table border stripe emptyText="暂无更多数据">
<uni-tr>
<uni-th width="160" align="left">申请退款时间</uni-th>
<uni-th width="70" align="left">退款比例</uni-th>
@ -149,7 +187,7 @@
<uni-td>需协商</uni-td>
<uni-td>需协商</uni-td>
</uni-tr>
</uni-table>
</uni-table> -->
</view>
<view class="popup-footer">
<view class="zhixiao shows_zhidao" @click="tipsShow = false">我已知晓</view>
@ -164,7 +202,7 @@
<view class="third-center">
<span style="color: #9C9C9C; font-size: 24rpx;">
活动均为主理人自行发布并组织的活动请您注意粗门仅为活动提供平台技术支持活动后续事项有主理人负责组织费用均为主理人收取
活动均为主理人自行发布并组织的活动请您注意我们仅为活动提供平台技术支持活动后续事项有主理人负责组织费用均为主理人收取
如您因活动发起组织撤销下线退款等引起的纠纷须由主理人自行解决并承担后果
</span>
</view>
@ -192,13 +230,13 @@
<!-- 购买弹窗 -->
<u-popup :show="buyShow" mode="center" :round="10" :zIndex="99999" :custom-style="popupStyle" @close="buyClose"
@open="buyOpen" :safeAreaInsetBottom="false" :closeable="true">
<u-popup :show="buyShow" mode="center" :round="10" :zIndex="99999" :custom-style="popupStyle"
@close="buyClose" @open="buyOpen" :safeAreaInsetBottom="false" :closeable="true">
<view class="popupBox flex justify-start align-items flex-column">
<view class="pop-header flex align-items flex-column flex-start">
<span class="name white-space">{{detail.title}}</span>
<span class="name white-space">{{ detail.title }}</span>
<span class="price">
<span v-if="detail.feel == 0">{{detail.price}}</span>
<span v-if="detail.feel == 0">{{ detail.price }}</span>
<span v-if="detail.feel == 1">免费</span>
</span>
<!-- <image src="../../static/center/buy.png" mode="" style="width: 168rpx; height: 48rpx;">
@ -238,21 +276,32 @@
<!-- 声明 -->
<u-popup @touchmove.native.stop.prevent :closeable="true" :show="show" :round="10" mode="center" @close="close"
@open="open" :custom-style="popupStylezf">
<u-popup @touchmove.native.stop.prevent :closeable="true" :show="show" :round="10" mode="center"
@close="close" @open="open" :custom-style="popupStylezf">
<span style="font-size: 42rpx;font-weight: 800;margin: 12rpx 0 24rpx 0;height: 120rpx;">免责声明</span>
<scroll-view ref="scrollView" :scroll-top="scrollTop" :show-scrollbar='true' @scrolltolower="handleScroll"
scroll-y="true" style="height: 800rpx;margin-bottom: 24rpx;">
<scroll-view ref="scrollView" :scroll-top="scrollTop" :show-scrollbar='true'
@scrolltolower="handleScroll" scroll-y="true" style="height: 800rpx;margin-bottom: 24rpx;">
<view class="popup flex align-items flex-column">
<rich-text :nodes="Negotiate"></rich-text>
</view>
</scroll-view>
<view class="popup-footer">
<span class="zhixiao" v-if="agreeShow == false">我同意</span>
<span class="zhixiao shows_zhidao" v-if="agreeShow == true"
@click="change">我同意</span>
<span class="zhixiao shows_zhidao" v-if="agreeShow == true" @click="change">我同意</span>
</view>
</u-popup>
<u-popup @touchmove.native.stop.prevent :closeable="false" :show="qunShow" :round="10" mode="bottom">
<view style="text-align: center;font-size: 32rpx;color: #3D3D3D;padding: 30rpx;font-weight: 600;">活动二维码</view>
<view style="text-align: center;">
<image :show-menu-by-longpress="true" :src="detail.image" style="width: 400rpx;border: 1rpx solid #D5FD99;" mode="widthFix"></image>
</view>
<view style="padding: 0rpx 40rpx;">
<view style="font-size: 28rpx;font-weight: 300;color: #9C9C9C;text-align: center;margin-top: 20rpx;">长按识别二维码进群</view>
<view style="font-size: 28rpx;color: #3D3D3D;text-align: center;margin-top: 30rpx;">如果无法加入或者开启了群验证可能是成员已满您即将加入由用户自发组织的户外活动请知悉</view>
<view style="font-size: 28rpx;color: #0CA013;text-align: center;margin-top: 30rpx;">确认您已知晓用户协议的用户义务与责任平台不对活动真实性作担保请入群自行辨别</view>
</view>
<view @click="openUrlSuccess('/packageA/my/success')" class="btn_1">我已知晓</view>
</u-popup>
</view>
</view>
</template>
@ -273,7 +322,7 @@
// },
fomartertime() {
return dayjs(this.detail.last_time*1000).format('YYYY-MM-DD HH:mm:ss');
return dayjs(this.detail.last_time * 1000).format('YYYY-MM-DD HH:mm:ss');
},
formattedTime() {
const startTime = dateWeek(this.detail.start_time);
@ -286,25 +335,26 @@
data() {
return {
qunShow:false,
style: {
//
img: 'width: 100%'
},
tipsShow:false,
nummoney:1,
priceGem:null,
tipsShow: false,
nummoney: 1,
priceGem: null,
Negotiate: null, //
agree: false,
agreeShow: false,
protocolArr: ["<支付协议>"],
value_slide:0,
value_slide: 0,
scrollTop: 0,
userInfo: {},
path: 'https://testy.hschool.com.cn//uploads/20241219/3406baf51fcc28c63c31ebcee5c9c75e.jpg',
uloadingShow: false,
show: false,
shows:false,
shows: false,
buyShow: false,
type: 0, // 0 1 2 3
id: 1,
@ -346,7 +396,11 @@
titleStyle: {
color: '#FFFFFF'
},
oper_data:null
oper_data: null,
teamList: [],
down: false,
desc:'',
teamListJson:''
};
},
@ -376,16 +430,89 @@
// this.getShare()
this.getAgreement();
this.getMoneyGetm();
},
},
onShow() {
this.getTeam();
},
computed: {
displayedList() {
return this.down ?
this.teamList.filter((_, i) => i < 2) //
:
this.teamList
}
},
methods: {
addMon(){
chickTeam(item, index) {
this.$set(this.teamList[index], 'is', !this.teamList[index].is);
//this.teamLististrue josn [{name:"",idnum:"410303199501220515"}]
let teamList = this.teamList.filter(item => item.is).map(item => ({
name: item.name,
idnum: item.idnum
}));
console.log(teamList);
var key=JSON.stringify(teamList);
//url
key=encodeURIComponent(key);
this.teamListJson=key;
this.getTeamGetm();
},
getTeamGetm() {
let num = this.nummoney;
uni.$u.http.post('/api/school.newactivity.order/confirm', {
activity_id: this.id,
order_no: this.order_no,
is_compute: 1,
num: num || 1,
desc:this.desc,
people: this.teamListJson
}).then(res => {
console.log(res);
}).catch(error => {
});
},
getTeam() {
uni.$u.http.get('/api/school.newactivity.activity_join/people_list').then(res => {
console.log(res)
if (res.code == 1) {
// is
this.teamList = res.data.list;
this.teamList = res.data.list.map(item => ({
...item,
is: false
}))
if (res.data.list.length > 2) {
this.down = true;
}
} else {
this.teamList = [];
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
openUrlSuccess(url) {
uni.redirectTo({
url: url
})
},
openUrl(url) {
uni.navigateTo({
url: url
})
},
addMon() {
if (this.detail.feel == 1) {
if (this.nummoney < Number(this.oper_data.free_activity_max_people) &&
this.nummoney < (this.detail.join_info.stock - this.detail.join_info.people_number)) {
this.nummoney++
this.getMoneyGetm();
}else{
} else {
uni.showToast({
title: '不能超过免费限制数量和剩余可报名人数',
icon: 'none',
@ -393,12 +520,12 @@
})
return;
}
}else{
} else {
if (this.nummoney < (this.detail.join_info.stock - this.detail.join_info.people_number)) {
this.nummoney++
this.getMoneyGetm();
}else{
} else {
uni.showToast({
title: '不能超过剩余数量',
icon: 'none',
@ -408,7 +535,7 @@
}
}
},
removeMon(){
removeMon() {
if (this.nummoney > 1) {
this.nummoney--
this.getMoneyGetm();
@ -659,7 +786,9 @@
activity_id: this.id,
order_no: this.order_no,
is_compute: 1,
num:num || 1
num: num || 1,
people: this.teamListJson,
desc:this.desc
}).then(res => {
if (res.code == 1) {
this.priceGem = res.data.order_data.totalprice
@ -685,7 +814,9 @@
activity_id: this.id,
order_no: this.order_no,
is_compute: 1,
num:num || 1
num: num || 1,
desc:this.desc,
people: this.teamListJson
}).then(res => {
if (res.code == 1) {
this.PayPirce = res.data.order_data.totalprice
@ -706,6 +837,7 @@
},
//
create(order_no, PayPirce) {
uni.$u.http.post('/api/school.newactivity.order/create', {
order_no: order_no,
}).then(res => {
@ -715,17 +847,18 @@
} else {
this.uloadingShow = false
uni.showToast({
title: '创建成功',
title: '报名成功',
icon: 'success',
duration: 2000,
complete: function() {
setTimeout(function() {
uni.redirectTo({
url: "/packageA/my/success?status=" + "2,3"
})
}, 2000);
}
// complete: function() {
// setTimeout(function() {
// uni.redirectTo({
// url: "/packageA/my/success?status=" + "2,3"
// })
// }, 2000);
// }
});
this.qunShow =true;
}
} else {
uni.showToast({
@ -760,9 +893,10 @@
success(res) {
if (res.errMsg == "requestPayment:ok") {
that.order_no = ''
uni.redirectTo({
url: "/packageA/my/success?status=" + '2,3'
})
// uni.redirectTo({
// url: "/packageA/my/success?status=" + '2,3'
// })
that.qunShow =true;
console.log('支付成功', res)
} else {
that.uloadingShow = false
@ -817,9 +951,10 @@
</script>
<style lang="scss" scoped>
.detail_all{
.detail_all {
background-color: #f7f7f7;
}
.w-100 {
width: 100%;
}
@ -860,7 +995,7 @@
.con-center {
background: white;
border-radius:0 0 44rpx 44rpx;
border-radius: 0 0 44rpx 44rpx;
position: relative;
}
@ -879,7 +1014,7 @@
position: relative;
}
.topimgs_rmb{
.topimgs_rmb {
position: absolute;
top: -168rpx;
right: 30rpx;
@ -887,24 +1022,28 @@
height: 118rpx;
z-index: 0;
}
.topimgs{
.topimgs {
position: absolute;
top: -120rpx;
width: 100%;
z-index: 0;
}
.top_texts{
.top_texts {
position: absolute;
top: -156rpx;
right: 68rpx;
z-index: 3;
color: #ffffff;
.xiao{
.xiao {
margin-left: 4rpx;
font-size: 22rpx;
font-weight: 400;
}
}
.first-box {
width: 690rpx;
background: #FFFFFF;
@ -912,6 +1051,7 @@
// padding-left: 24rpx;
margin-top: 20rpx;
border-radius: 20rpx;
// z-index: 1;
.sigh {
width: 88rpx;
@ -923,7 +1063,8 @@
font-size: 24rpx;
color: #222222;
}
.first-name{
.first-name {
width: 430rpx;
// height: 77rpx;
font-family: PingFang SC, PingFang SC;
@ -932,7 +1073,8 @@
color: #323232;
// margin-left: 16rpx;
}
.rbot{
.rbot {
width: 430rpx;
height: 52rpx;
font-size: 26rpx;
@ -958,9 +1100,11 @@
line-height: 32rpx;
margin: 0 6rpx;
}
.tt1{
.tt1 {
font-size: 28rpx;
span{
span {
padding-left: 15rpx;
font-size: 22rpx;
color: #9C9C9C;
@ -981,8 +1125,9 @@
font-size: 26rpx;
color: #222222;
}
.xieyi{
background-color:#BBFC5B;
.xieyi {
background-color: #BBFC5B;
width: 30%;
height: 40rpx;
border-radius: 8rpx;
@ -1015,19 +1160,24 @@
margin: 0 22rpx 0 4rpx;
}
}
.value_slide{
.value_slide {
width: 50%;
::v-deep .uni-slider-handle-wrapper{
::v-deep .uni-slider-handle-wrapper {
height: 10rpx;
}
::v-deep .uni-slider-handle{
::v-deep .uni-slider-handle {
background: url('@/static/detail/qiu.png') !important;
border-radius: 0;
background-size: 52rpx 52rpx !important;
}
::v-deep .uni-slider-value{
::v-deep .uni-slider-value {
color: #323232;
&::after{
&::after {
content: '%';
}
}
@ -1038,22 +1188,25 @@
.third {
width: 100%;
background: #ffffff;
margin-top:20rpx;
margin-top: 20rpx;
border-radius: 44rpx;
.third-top{
.third-top {
font-family: PingFang SC, PingFang SC;
font-weight: bold;
font-size: 36rpx;
color: #323232;
line-height: 50rpx;
margin-top: 30rpx;
margin-left:30rpx;
margin-left: 30rpx;
position: relative;
z-index: 10;
}
span{
span {
position: relative;
.icons{
.icons {
width: 37rpx;
height: 20rpx;
position: absolute;
@ -1062,20 +1215,26 @@
z-index: -1;
}
}
.third-center {
padding: 30rpx;
overflow: hidden;
::v-deep .uni-table{
::v-deep .uni-table {
min-width: 690rpx;
}
.v_html{
word-wrap: break-word;word-break: break-all;
.v_html {
word-wrap: break-word;
word-break: break-all;
}
.imgs{
.imgs {
width: 690rpx;
}
}
.mgbot{
.mgbot {
margin-bottom: 210rpx;
}
@ -1113,15 +1272,16 @@
.footer-right {
position: absolute;
width: 100%;
width: 95%;
height: 102rpx;
background: #C1C1C1;
border-radius: 200rpx;
margin: 0 auto;
left: 0;
right: 0;
span {
width: 94%;
width: 100%;
height: 102rpx;
line-height: 102rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
@ -1279,12 +1439,14 @@
border-bottom-left-radius: 50px;
box-shadow: 0 0 20upx rgba(0, 0, 0, .09);
}
.popup-footer {
display: flex;
justify-content: center;
align-items: center;
// margin: 30rpx 0;
height: 146rpx;
.zhixiao {
height: 80rpx;
background: #E8E8E8;
@ -1302,13 +1464,15 @@
bottom: 0;
border-radius: 0rpx 0rpx 20rpx 20rpx;
}
.shows_zhidao{
.shows_zhidao {
background-color: #323232;
color:#BBFC5B;
color: #BBFC5B;
font-weight: 400;
font-size: 36rpx;
}
}
.cancel {
width: 100vw;
padding: 30rpx;
@ -1519,4 +1683,22 @@
align-items: center;
}
}
.input {
text-align: right;
font-size: 28rpx;
}
.btn_1 {
width: 95%;
height: 90rpx;
background: #323232;
border-radius: 198rpx 198rpx 198rpx 198rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 32rpx;
color: #BBFC5B;
line-height: 90rpx;
text-align: center;
margin: 0 auto;
margin-top: 30rpx;
}
</style>

View File

@ -80,6 +80,26 @@
</view>
</view>
<view v-if="detail.image!='' && detail.image!=null"
style="border-radius: 44rpx;width: 100%;position: relative;margin: 30rpx 0rpx 10rpx 0rpx;background-color: #ffffff;">
<view style="display: flex;justify-content: space-between;align-items: center;padding:20rpx 30rpx;">
<view style="display: flex;align-items: center;">
<view>
<image src="/static/detail/wx.png" style="width: 100rpx;height: 100rpx;"></image>
</view>
<view style="margin-left: 20rpx;">
<view style="font-size: 28rpx;color: #3D3D3D;">群二维码</view>
<view style="margin-top: 10rpx;font-size: 24rpx;color: #9C9C9C;">
上传时间{{formatTimestamp(detail.updatetime)}}</view>
</view>
</view>
<view style="display: flex;align-items: center;">
<view class="ck-qrcode" @click="openImg(detail.image)">
查看
</view>
</view>
</view>
</view>
<view class="third flex flex-column" style="justify-content: flex-start;">
<view class="third-top flex align-items">
@ -391,6 +411,11 @@
},
methods: {
openImg(img) {
uni.previewImage({
urls: [img],
});
},
// saveClick() {
// console.log('saveClick')
// //
@ -509,6 +534,16 @@
});
});
},
formatTimestamp(timestamp) {
const date = new Date(timestamp * 1000); // 101000
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0");
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}.${month}.${day}`;
},
//
timeago(timestamp) {
const now = new Date().getTime(); //
@ -1176,8 +1211,8 @@
}
.imgs {
margin-top: 30rpx;
width: 690rpx;
display: block;
width: 100%;
}
}
@ -1755,4 +1790,16 @@
// #endif
}
.ck-qrcode{
width: 180rpx;
height: 70rpx;
background: #323232;
border-radius: 198rpx 198rpx 198rpx 198rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 42rpx;
color: #BBFC5B;
line-height: 70rpx;
text-align: center;
}
</style>

View File

@ -6,8 +6,8 @@
</view>
<view class="box flex justify-start flex-column align-items" :class="overlay ? 'no-scroll' : ''">
<view class="swiper">
<u-swiper :list="detail.images" indicator indicatorActiveColor="#323232" indicatorMode="dot" :indicator-style="{ bottom: '60rpx',zIndex: 999}"
height="580rpx" circular></u-swiper>
<u-swiper :list="detail.images" indicator indicatorActiveColor="#323232" indicatorMode="dot"
:indicator-style="{ bottom: '60rpx',zIndex: 999}" height="580rpx" circular></u-swiper>
</view>
<view class="con-center w-100 flex justify-center flex-column align-items flex-start">
@ -32,13 +32,16 @@
<span class="first-image flex align-items" style="margin-top: 25rpx;width: 100%;">
<image :src="detail.user.avatar" mode="" class="icon-size" style="width: 36rpx;height: 36rpx;margin-right: 12rpx;border-radius: 80rpx;"></image>
<image :src="detail.user.avatar" mode="" class="icon-size"
style="width: 36rpx;height: 36rpx;margin-right: 12rpx;border-radius: 80rpx;"></image>
<span style="color: #9C9C9C ;width: 32%;">{{ detail.user.nickname }}</span>
<span class="flex justify-center align-items xieyi">
<image src="/static/detail/baohu.png" mode=""
style="width: 28rpx;height: 28rpx;margin-right: 0;" ></image>
<span class="white-space" style="width: 90rpx;text-align: center;">{{ detail.refund_info.title }}</span>
<image src="/static/detail/zidong.png" mode="" style="width: 20rpx;height: 20rpx;margin-right: 0;" ></image>
style="width: 28rpx;height: 28rpx;margin-right: 0;"></image>
<span class="white-space"
style="width: 90rpx;text-align: center;">{{ detail.refund_info.title }}</span>
<image src="/static/detail/zidong.png" mode=""
style="width: 20rpx;height: 20rpx;margin-right: 0;"></image>
</span>
</span>
@ -51,63 +54,100 @@
@click.stop="toMap(detail.latitude,detail.longitude,detail.address_detail)">
<image src="/static/center/address.png" mode="" class="icon-size"></image>
<span>{{detail.address_detail}}</span>
<image src="/static/detail/daohang.png" class="icon-size" style="width: 50rpx; height: 50rpx;"></image>
<image src="/static/detail/daohang.png" class="icon-size" style="width: 50rpx; height: 50rpx;">
</image>
</span>
<span class="line" style="margin-bottom: 0rpx;"></span>
<view class="second-box flex align-items space-between">
<view class="flex align-items">
<u-avatar-group :urls="join_info.users"
keyName="avatar" size="30" gap="0.3" :maxCount="3"></u-avatar-group>
<u-avatar-group :urls="join_info.users" keyName="avatar" size="30" gap="0.3"
:maxCount="3"></u-avatar-group>
<image src="/static/index/dian.png"
:class="join_info.users && join_info.users.length > 0 ? '' : 'smalld'"
style="width: 58rpx;height: 58rpx;margin-left:-20rpx;z-index: 1;"></image>
</view>
<span class="number">{{join_info.people_number}}/{{join_info.stock >= 10000 ? '9999+' : join_info.stock}}
<span
class="number">{{join_info.people_number}}/{{join_info.stock >= 10000 ? '9999+' : join_info.stock}}
人数</span>
<view class="value_slide">
<u-slider
v-model="value_slide"
showValue
min="0"
max="100"
blockSize="12"
inactiveColor="#EBEBEB"
activeColor="#BBFC5B"
disabled
></u-slider>
<u-slider v-model="value_slide" showValue min="0" max="100" blockSize="12"
inactiveColor="#EBEBEB" activeColor="#BBFC5B" disabled></u-slider>
</view>
</view>
</view>
</view>
<!-- 报名成功 -->
<view class="third flex flex-column" style="justify-content: flex-start;margin-bottom: 0rpx;">
<view class="third-top flex align-items" style="justify-content: space-between;">
<view class="third" style="margin-bottom: 0rpx;margin-top: 30rpx;">
<view class="third-top flex align-items" style="justify-content: space-between;padding-top: 20rpx;">
<span>报名信息
<image class="icons" src="/static/detail/xiangqing.png"></image>
</span>
<view style="margin-right: 35rpx;" @click="toSgindetail()">
<span style="font-family: PingFang SC, PingFang SC;font-weight: 400;font-size: 26rpx;color: #3D3D3D;">查看全部</span>
<image src="/static/detail/zidong.png" style="margin-left: 20rpx;width: 20rpx;height: 20rpx;"> </image>
<span
style="font-family: PingFang SC, PingFang SC;font-weight: 400;font-size: 26rpx;color: #3D3D3D;">查看全部</span>
<image src="/static/detail/zidong.png" style="margin-left: 20rpx;width: 20rpx;height: 20rpx;">
</image>
</view>
</view>
<view class="flex third-center-gro" style="justify-content: space-between; position: relative;">
<scroll-view scroll-y="true" class="scroll-container">
<view v-for="(item, index) in mysignList" :key="index" >
<view class="flex align-items" style="justify-content: space-between;height: 50rpx;line-height: 50rpx;">
<view class="t1_name">{{item.user.nickname}}</view>
<view class="t1_order">订单编号{{item.order_no}}</view>
<view class="t1_num">数量{{item.num}}</view>
<view v-if="detail.some_people" class="flex third-center-gro"
style="justify-content: space-between; position: relative;height: 100%;">
<view v-if="detail.some_people.peoples.length>0" style="width: 100%;">
<view v-for="(item, index) in detail.some_people.peoples" :key="index">
<view class="flex align-items" style="justify-content: space-between;">
<view class="">
<view style="font-size: 28rpx;color: #323232;">{{item.name}}</view>
<view style="font-size: 24rpx;color: #9C9C9C;margin-top: 10rpx;">身份证号{{item.idnum}}
</view>
</view>
</scroll-view>
<view class="">
<text v-if="item.status==3" style="font-size: 28rpx;color: #999999;">未核销</text>
<text v-if="item.status==6" style="font-size: 28rpx;color: #FF4810;">已核销</text>
</view>
</view>
<view v-if="index<detail.some_people.peoples.length-1"
style="height: 1px;background-color: #F0F0F0;width: 100%;margin: 30rpx 0rpx;"></view>
</view>
</view>
<view v-if="detail.some_people.peoples.length==0" style="text-align: center;margin: 0 auto;">
<image src="/static/detail/no_info.png" style="width: 200rpx;height: 200rpx"></image>
<view style="font-size: 36rpx;font-weight: 300;color: #9C9C9C;">暂无报名信息</view>
</view>
</view>
</view>
<view
style="border-radius: 44rpx;width: 100%;position: relative;margin: 30rpx 0rpx;background-color: #ffffff;">
<view style="display: flex;justify-content: space-between;align-items: center;padding:20rpx 30rpx;">
<view style="display: flex;align-items: center;">
<view>
<image src="/static/detail/wx.png" style="width: 100rpx;height: 100rpx;"></image>
</view>
<view style="margin-left: 20rpx;">
<view style="font-size: 28rpx;color: #3D3D3D;">群二维码</view>
<view style="margin-top: 10rpx;font-size: 24rpx;color: #9C9C9C;">
上传时间{{formatTimestamp(detail.updatetime)}}</view>
</view>
</view>
<view style="display: flex;align-items: center;">
<view @click="openImg(detail.image)">
<image :src="detail.image" style="width: 70rpx;height: 70rpx;"></image>
</view>
<u-upload @afterRead="afterRead" :maxCount="1">
<view style="display: flex;align-items: center;">
<view style="font-size: 28rpx;color: #323232;margin:0rpx 0rpx 0rpx 20rpx;">修改</view>
<view>
<image src="/static/detail/zidong.png"
style="margin-left: 20rpx;width: 20rpx;height: 20rpx;">
</image>
</view>
</view>
</u-upload>
</view>
</view>
</view>
<view class="third flex flex-column" style="justify-content: flex-start;">
<view class="third flex flex-column" style="justify-content: flex-start;padding-top: 20rpx;">
<view class="third-top flex align-items">
<span>活动详情
<image class="icons" src="/static/detail/xiangqing.png"></image>
@ -117,19 +157,19 @@
<view class="v_html">
<rich-text :nodes="detail.content"></rich-text>
</view>
<image mode="widthFix" class="imgs" v-for="(item,index) in detail.images" :key="index" :src="item"></image>
<image mode="widthFix" class="imgs" v-for="(item,index) in detail.images" :key="index" :src="item">
</image>
</view>
</view>
<view class="footer flex align-items" style="justify-content: space-between;">
<view class="footer-left">
</view>
<view class="bottom_fot">
<view class="footer-right flex justify-center align-items">
<span @click="cancelsOpen"> 取消活动 </span>
<view class="footer" style="display: flex;align-items: center;;justify-content: space-between;gap: 30rpx;">
<view @click="overlayShow()">
<image src="@/static/detail/fenxiang.png" style="width: 173rpx;height: 100rpx;" mode="widthFix">
</image>
</view>
<view class="footer-right" @click="cancelsOpen">
取消活动
</view>
</view>
@ -138,8 +178,8 @@
<!-- 二次确认弹窗 -->
<u-popup :show="cancelsShow" mode="center" :round="10" :zIndex="99999" :custom-style="popupStyle" @close="cancelsClose"
@open="cancelsOpen" :safeAreaInsetBottom="false" :closeable="false">
<u-popup :show="cancelsShow" mode="center" :round="10" :zIndex="99999" :custom-style="popupStyle"
@close="cancelsClose" @open="cancelsOpen" :safeAreaInsetBottom="false" :closeable="false">
<view class="popupBox flex justify-start align-items flex-column">
<view class="pop-header flex align-items flex-column flex-start">
<span class="name white-space">是否确认取消活动</span>
@ -158,7 +198,73 @@
</view>
</view>
</u-popup>
<u-overlay zIndex="5555" :show="overlay"></u-overlay>
<!-- 分享海报 -->
<view v-if="overlay" class="pos">
<image @click="closeoo" src="/static/center/close.png" mode=""
style="z-index: 10000;width: 64rpx;height: 64rpx;position: absolute;top: 200rpx;right: 45rpx;">
</image>
<l-painter isCanvasToTempFilePath :after-delay="500" @success="sunccessimg"
css="width:661rpx;height: 1072rpx;background-image:url(https://naweigetetest2.hschool.com.cn/dyqc/fenxiang.png);"
custom-style="position:absolute;left:45rpx;right:44rpx;top:200rpx;z-index:100">
<l-painter-image :src="detail.user.avatar"
css="z-index:300;margin-left: 15rpx; margin-top: 120rpx;border: 2rpx solid #FFFFFF; width: 60rpx; height: 60rpx; border-radius: 50%;" />
<l-painter-view css="margin-top: 130rpx; padding-left: 20rpx; display: inline-block">
<l-painter-text :text="detail.user.nickname+'的邀请'"
css="display: block; height: 36rpx;color: #3D3D3D; font-size: 28rpx; fontWeight: 400;" />
</l-painter-view>
<l-painter-view
css="margin-left: 20rpx; margin-top: 20rpx; margin-bottom: 20rpx; box-sizing: border-box;width: 100%;">
<l-painter-image :src="detail.images[0]"
css="width: 620rpx; height: 620rpx; border-radius: 24rpx;object-fit: cover;" />
<l-painter-view
css="margin-top: 30rpx;display: flex;justify-content: space-between;width:100%;">
<l-painter-view css="display: flex;flex-direction: column;width: 420rpx;">
<l-painter-text
css="line-clamp: 1;font-weight: bold;color:#202020;font-size: 32rpx;width:400rpx;box-sizing:border-box;line-height: 42rpx;"
:text="detail.title"></l-painter-text>
<l-painter-text
css="line-clamp: 1; color:#FF4810;font-size: 28rpx;width:220rpx;margin-top: 20rpx;line-height: 38rpx;"
:text="'¥'+detail.price"></l-painter-text>
<l-painter-text
css="line-clamp: 2; color:#9C9C9C;font-size: 26rpx;margin-top: 20rpx;line-height: 36rpx;width: 360rpx;"
:text="'地址:'+detail.address"></l-painter-text>
</l-painter-view>
<l-painter-view
css="background: #ffffff;border-radius: 18rpx;width: 200rpx; height: 200rpx;margin-right: 50rpx;">
<l-painter-qrcode css="width: 160rpx; height: 160rpx;margin:20rpx;"
:text="qrUrl"></l-painter-qrcode>
</l-painter-view>
</l-painter-view>
</l-painter-view>
</l-painter>
<view class="btnList">
<button open-type="share" class="no-border-button" plain="true">
<image src="/static/detail/savewec.png" mode=""
style="width: 88rpx;height: 88rpx;margin-bottom: 15rpx;"></image>
微信
</button>
<!-- <view class="save" @click.stop="sharePoster()">
<image src="/static/detail/pyq.png" mode="" style="width: 88rpx;height: 88rpx;margin-bottom: 15rpx;"></image>
朋友圈
</view> -->
<view class="save" @click="save()">
<image src="/static/detail/donwload.png" mode=""
style="width: 88rpx;height: 88rpx;margin-bottom: 15rpx;"></image>
保存图片
</view>
</view>
<!-- <canvas canvas-id="myCanvas"
style="position: absolute;top:256rpx;left: 48rpx; width: 661rpx;height:1075rpx; visibility: hidden;z-index: 10;">
</canvas> -->
</view>
</view>
@ -200,9 +306,9 @@
img: 'width: 100%'
},
mysignList:[],
join_info:{},
value_slide:0,
mysignList: [],
join_info: {},
value_slide: 0,
scrollTop: 0,
overlay: false,
userInfo: {},
@ -268,15 +374,133 @@
console.log(options.id)
this.getDetail()
this.getPeople()
this.getShare()
},
methods: {
async afterRead(item) {
const result = await this.uploadFilePromise(item.file.url, 'user');
console.log(result);
if (result.code != 1) {
uni.showToast({
title: result.msg,
icon: 'none',
duration: 2000
});
return;
} else {
uni.$u.http.post('/api/school.new_activity/edit_qrcode', {
id: this.id,
image: result.data.url,
}).then(res => {
if (res.code == 1) {
uni.showToast({
title: '上传成功!',
icon: 'none',
duration: 2000
});
this.getDetail();
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
uni.showToast({
title: '请求失败,请稍后再试',
icon: 'none',
duration: 2000
});
});
}
},
uploadFilePromise(url, category) {
console.log('category', category)
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
url: 'https://naweigetetest2.hschool.com.cn/api/common/upload', //
filePath: url,
name: 'file',
formData: {
user: 'test',
category: category
},
header: {
"token": uni.getStorageSync("token")
},
success: (res) => {
console.log(res);
var d = JSON.parse(res.data);
resolve(d);
},
fail: (err) => {
reject(err);
}
});
});
},
openImg(img) {
uni.previewImage({
urls: [img],
});
},
formatTimestamp(timestamp) {
const date = new Date(timestamp * 1000); // 101000
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0");
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}.${month}.${day}`;
},
sunccessimg(event) {
this.path = event
},
closeoo() {
this.overlay = false;
},
getShare() {
uni.$u.http.post('/api/wechat_util/link', {
path: 'packageA/center/detail',
query: `id=${this.id}`,
}).then(res => {
if (res.code == 1) {
this.qrUrl = res.data.url_link
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
uni.showToast({
title: '请求失败,请稍后再试',
icon: 'none',
duration: 2000
});
});
},
overlayShow() {
const token = uni.getStorageSync('token')
if (token) {
this.overlay = true
let that = this;
uni.showToast({
title: '海报生成中...',
icon: 'none',
duration: 2000,
complete: function() {
//
setTimeout(() => {
//
that.overlay = true;
}, 2000);
}
});
} else {
uni.showToast({
title: '请登录',
@ -335,7 +559,7 @@
});
});
},
toSgindetail(){
toSgindetail() {
uni.navigateTo({
url: '/packageA/center/signDetail?id=' + this.id
});
@ -369,7 +593,7 @@
});
},
//
cancels(){
cancels() {
uni.$u.http.post('/api/school.new_activity/cancel', {
id: this.id,
}).then(res => {
@ -647,7 +871,7 @@
activity_id: this.id,
order_no: this.order_no,
is_compute: 1,
num:1
num: 1
}).then(res => {
if (res.code == 1) {
this.PayPirce = res.data.order_data.totalprice
@ -670,10 +894,10 @@
</script>
<style lang="scss" scoped>
.detail_all{
.detail_all {
background-color: #f7f7f7;
height: 100vh;
}
.w-100 {
width: 100%;
}
@ -733,7 +957,7 @@
position: relative;
}
.topimgs_rmb{
.topimgs_rmb {
position: absolute;
top: -168rpx;
right: 30rpx;
@ -741,24 +965,28 @@
height: 118rpx;
z-index: 0;
}
.topimgs{
.topimgs {
position: absolute;
top: -120rpx;
width: 100%;
z-index: 0;
}
.top_texts{
.top_texts {
position: absolute;
top: -156rpx;
right: 68rpx;
z-index: 3;
color: #ffffff;
.xiao{
.xiao {
margin-left: 4rpx;
font-size: 22rpx;
font-weight: 400;
}
}
.first-box {
width: 690rpx;
background: #FFFFFF;
@ -767,6 +995,7 @@
// margin-top: 20rpx;
border-radius: 20rpx;
z-index: 1;
.sigh {
width: 88rpx;
height: 40rpx;
@ -777,7 +1006,8 @@
font-size: 24rpx;
color: #222222;
}
.first-name{
.first-name {
width: 586rpx;
height: 52rpx;
font-family: PingFang SC, PingFang SC;
@ -820,8 +1050,9 @@
font-size: 26rpx;
color: #222222;
}
.xieyi{
background-color:#BBFC5B;
.xieyi {
background-color: #BBFC5B;
width: 156rpx;
height: 48rpx;
border-radius: 8rpx;
@ -834,6 +1065,7 @@
height: 64rpx;
border-radius: 16rpx 16rpx 16rpx 16rpx;
margin: 20rpx 0 20rpx 0;
.smalld {
margin-left: 0 !important;
}
@ -856,6 +1088,7 @@
margin: 0 22rpx 0 4rpx;
}
}
// .value_slide{
// width: 50%;
// ::v-deep .uni-slider-handle-wrapper{
@ -879,23 +1112,23 @@
.third {
width: 100%;
background: #ffffff;
margin-top:20rpx;
border-radius: 44rpx;
margin-bottom: 150rpx;
.third-top{
.third-top {
font-family: PingFang SC, PingFang SC;
font-weight: bold;
font-size: 36rpx;
color: #323232;
line-height: 50rpx;
margin-top: 30rpx;
margin-left:30rpx;
margin-left: 30rpx;
position: relative;
z-index: 10;
}
span{
span {
position: relative;
.icons{
.icons {
width: 37rpx;
height: 20rpx;
position: absolute;
@ -904,17 +1137,23 @@
z-index: -1;
}
}
.third-center {
padding: 30rpx;
overflow: hidden;
margin: 0 auto;
.v_html{
word-wrap: break-word;word-break: break-all;
.v_html {
word-wrap: break-word;
word-break: break-all;
}
.imgs{
.imgs {
width: 690rpx;
display: block;
}
}
.third-center-gro {
margin-top: 28rpx;
width: auto;
@ -924,25 +1163,10 @@
margin-left: 30rpx;
margin-right: 30rpx;
margin-bottom: 30rpx;
.scroll-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
// animation: scroll 12s linear infinite;
// @keyframes scroll {
// 0% {
// transform: translateY(0);
// }
// 100% {
// transform: translateY(calc(-100% + 8 * 100px));
// /* 8 * 100px 100px */
// }
// }
.t1_name{
width: 240rpx;
.scroll-container {
.t1_name {
width: 100rpx;
height: 36rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
@ -953,8 +1177,9 @@
font-style: normal;
text-transform: none;
}
.t1_order{
width: 310rpx;
.t1_order {
width: 350rpx;
height: 36rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
@ -968,7 +1193,8 @@
overflow: hidden;
text-overflow: ellipsis;
}
.t1_num{
.t1_num {
width: 103rpx;
height: 36rpx;
@ -1003,9 +1229,9 @@
.footer {
width: 100%;
height: 166rpx;
// background: #ffffff;
width: 93%;
height: 185rpx;
background: #ffffff;
border-radius: 0rpx 0rpx 0rpx 0rpx;
position: fixed;
z-index: 99;
@ -1013,6 +1239,8 @@
bottom: 0;
/* 定位在底部 */
left: 0;
right: 0;
margin: 0 auto;
/* 定位在左边 */
.footer-left {
@ -1044,28 +1272,29 @@
height: 118rpx;
}
}
.bottom_fot{
.bottom_fot {
width: 100%;
height: 147rpx;
background: #FFFFFF;
position: fixed;
bottom: 0;
}
.footer-right {
margin: 0 auto;
width: 690rpx;
width: 100%;
height: 90rpx;
background: #323232;
text-align: center;
line-height: 90rpx;
border-radius: 200rpx;
margin-top: 30rpx;
span {
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 48rpx;
color: #BBFC5B;
}
}
}
.popupBox {
@ -1073,8 +1302,9 @@
height: 414rpx;
background-image: url("https://naweigetetest2.hschool.com.cn/dyqc/confirm2.png");
background-size: 100%;
background-repeat:no-repeat;
background-repeat: no-repeat;
border-radius: 44rpx;
.pop-header {
width: 100%;
@ -1082,6 +1312,7 @@
background-position: left bottom;
height: 414rpx;
margin-top: 80rpx;
span {
font-family: PingFang SC, PingFang SC;
font-weight: 400;
@ -1142,7 +1373,8 @@
justify-content: center;
align-items: center;
}
.span1{
.span1 {
background: rgba(193, 193, 193, 0.22);
color: #202020;
margin-right: 30rpx;
@ -1328,35 +1560,6 @@
top: 8rpx;
}
.pos {
position: relative;
}
.btnList {
width: 690rpx;
position: absolute;
bottom: 150rpx;
left: 30rpx;
display: flex;
justify-content: space-evenly;
span {
width: 250rpx;
height: 80rpx;
background: #FFFFFF;
border-radius: 401rpx 401rpx 401rpx 401rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #008CFF;
display: flex;
justify-content: center;
align-items: center;
}
.save {}
}
.no-scroll {
overflow: hidden;
height: 100vh;
@ -1365,44 +1568,9 @@
::v-deep ._root {
padding: 0 10rpx;
}
.no-border-button {
background-color: transparent;
/* 去掉背景色 */
border: none;
/* 去掉边框 */
padding: 0;
/* 去掉内边距 */
margin: 0;
/* 去掉外边距 */
display: inline-flex;
/* 使按钮内容居中 */
align-items: center;
/* 垂直居中 */
justify-content: center;
/* 水平居中 */
flex-flow: column;
height: 80rpx;
line-height: inherit;
span {
width: 250rpx;
height: 80rpx;
background: #FFFFFF;
border-radius: 401rpx 401rpx 401rpx 401rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #008CFF;
display: flex;
justify-content: center;
align-items: center;
}
}
</style>
<style lang="scss">
.value_slide {
<style lang="scss" scoped>
.value_slide {
width: 50%;
::v-deep .uni-slider-handle-wrapper {
@ -1447,9 +1615,73 @@
width: 30rpx;
color: #323232;
&::after { content: '%';
&::after {
content: '%';
}
}
// #endif
}
.pos {
position: fixed;
width: 100%;
height: 100%;
z-index: 99999;
.posterClose {
position: absolute;
// right: 8rpx;
top: 200rpx;
}
}
.btnList {
position: absolute;
bottom: 10rpx;
display: flex;
justify-content: space-around;
align-items: self-start;
width: 750rpx;
height: 247rpx;
background: #FFFFFF;
border-radius: 44rpx 44rpx 0rpx 0rpx;
color: #999999;
font-family: PingFang SC Regular, PingFang SC Regular;
font-weight: 400;
font-size: 28rpx;
.save {
margin-top: 60rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
}
.no-border-button {
background-color: transparent;
/* 去掉背景色 */
border: none;
/* 去掉边框 */
padding: 0;
/* 去掉内边距 */
margin: 0;
/* 去掉外边距 */
display: inline-flex;
/* 使按钮内容居中 */
align-items: center;
/* 垂直居中 */
justify-content: center;
/* 水平居中 */
flex-flow: column;
// height: 80rpx;
line-height: inherit;
margin-top: 60rpx;
font-family: PingFang SC Regular, PingFang SC Regular;
font-weight: 400;
font-size: 28rpx;
color: #999999;
}
</style>

View File

@ -1,5 +1,5 @@
<template>
<view class="box flex flex-column align-items">
<!-- <view class="box flex flex-column align-items">
<view v-for="(item, index) in mysignList" :key="index" style="margin: 0 30rpx;">
<view class="flex align-items" style="justify-content: space-between;height: 70rpx;line-height: 70rpx;">
<view class="t1_name">
@ -11,6 +11,45 @@
<view class="t1_num">数量{{item.num}}</view>
</view>
</view>
</view> -->
<view class="page">
<view style="padding: 30rpx;">
<view
style="padding: 0px 30rpx;text-align: center;display: flex;align-items: center;justify-content: space-between;background-color: #323232;height: 181rpx;border-radius: 18rpx;">
<view>
<view style="font-size: 36rpx;color: #BBFC5B;font-weight: 600;">{{activity_info.total_num}}</view>
<view style="font-size: 28rpx;font-weight: 300;color: #FFFFFF;margin-top: 20rpx;">活动总人数</view>
</view>
<view style="width: 1rpx;height: 60rpx;background-color: #FFFFFF;"></view>
<view>
<view style="font-size: 36rpx;color: #BBFC5B;font-weight: 600;">{{activity_info.sign_num}}</view>
<view style="font-size: 28rpx;font-weight: 300;color: #FFFFFF;margin-top: 20rpx;">报名人数</view>
</view>
<view style="width: 1rpx;height: 60rpx;background-color: #FFFFFF;"></view>
<view>
<view style="font-size: 36rpx;color: #BBFC5B;font-weight: 600;">{{activity_info.verification_num}}</view>
<view style="font-size: 28rpx;font-weight: 300;color: #FFFFFF;margin-top: 20rpx;">核销人数</view>
</view>
</view>
<view v-for="item in mysignList"
style="background: linear-gradient( 180deg, rgba(232,255,197,0.89) 0%, #FFFFFF 31%);border-radius: 18rpx;margin-top: 30rpx;padding-bottom: 20rpx;">
<view style="font-size: 26rpx;color: #3D3D3D;padding: 30rpx;font-weight: 600;">订单编号{{item.order_no}}</view>
<view style="width: 100%;height: 1rpx;background-color: #EEEEEE;margin: 10rpx 0;"></view>
<view v-for="(v,i) in item.ordercode">
<view style="display: flex;align-items: center;justify-content: space-between;padding:10rpx 30rpx;">
<view>
<view style="font-size: 28rpx;color: #323232;">{{v.name}}</view>
<view style="color: #9C9C9C;font-size: 24rpx;margin-top: 20rpx;">身份证 {{v.idnum}}</view>
</view>
<view>
<text v-if="v.status==3" style="font-size: 28rpx;color: #999999;">未核销</text>
<text v-if="v.status==6" style="font-size: 28rpx;color: #FF4810;">已核销</text>
</view>
</view>
<view v-if="i<item.ordercode.length-1" style="width: 100%;height: 1rpx;background-color: #EEEEEE;margin: 10rpx 0;"></view>
</view>
</view>
</view>
</view>
</template>
@ -18,7 +57,8 @@
export default {
data() {
return {
mysignList:[],
mysignList: [],
activity_info:{}
};
},
onLoad(option) {
@ -27,7 +67,7 @@
onShow() {
this.getPeople();
},
methods:{
methods: {
//
getPeople() {
const that = this
@ -39,6 +79,7 @@
},
}).then(res => {
if (res.code == 1) {
this.activity_info=res.data.activity_info;
this.mysignList = res.data.list;
} else {
@ -58,7 +99,7 @@
});
},
//
toDetail(status){
toDetail(status) {
uni.navigateTo({
url: "/packageA/my/exercise?status=" + status
})
@ -74,103 +115,9 @@
</script>
<style lang="scss" scoped>
.w-100 {
width: 100%;
}
.w-400{
width: 400rpx;
}
.flex {
display: flex;
}
.justify-center {
justify-content: center;
}
.space-between {
justify-content: space-between;
}
.align-items {
align-items: center;
}
.flex-column {
flex-flow: column;
}
.justify-start {
justify-content: start;
}
.mar-top-30 {
margin-top: 30rpx;
}
.hui{
.page {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
}
.white-space {
overflow: hidden;
/* 确保超出容器的文本被隐藏 */
white-space: nowrap;
/* 确保文本在一行内显示 */
text-overflow: ellipsis;
}
.box{
width: 750rpx;
height: 100vh;
background-color: #FFFFFF;
.t1_name{
width: 140rpx;
height: 36rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 26rpx;
color: #3D3D3D;
line-height: 36rpx;
text-align: left;
font-style: normal;
text-transform: none;
display: flex;
align-items: center;
.imgs{
margin-left: 10rpx;
width: 26rpx;
height: 26rpx;
}
}
.t1_order{
width: 430rpx;
height: 36rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 26rpx;
color: #3D3D3D;
line-height: 36rpx;
text-align: left;
font-style: normal;
text-transform: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.t1_num{
width: 103rpx;
height: 36rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 26rpx;
color: #3D3D3D;
line-height: 36rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
min-height: 100vh;
background: #F7F7F7;
}
</style>

View File

@ -64,22 +64,15 @@
<text style="margin-left: 20rpx;vertical-align: middle;font-size: 26rpx;">未开始</text>
</view>
<view v-if="item.status == 2" style="display: flex;align-items: center;">
<u-avatar-group
:urls="item.join_info.users"
keyName="avatar"
size="30"
maxCount="1"
gap="0.4"
></u-avatar-group>
<image
src="/static/index/dian.png"
style="
<u-avatar-group :urls="item.join_info.users" keyName="avatar" size="30" maxCount="1"
gap="0.4"></u-avatar-group>
<image src="/static/index/dian.png" style="
width: 60rpx;
height: 60rpx;
margin-left: -20rpx;
"
></image>
<view style="margin-left: 20rpx;vertical-align: middle;font-size: 24rpx;">{{ Number(item.join_info.people_number) + "人已上车" }}</view>
"></image>
<view style="margin-left: 20rpx;vertical-align: middle;font-size: 24rpx;">
{{ Number(item.join_info.people_number) + "人已上车" }}</view>
</view>
<view style="font-size: 26rpx; width: 24%;">
<text>核销</text>
@ -247,8 +240,15 @@
//
getHotList(val) {
console.log(val);
let auth_status = val == '0' ? 0 : '1';
let vals = val == '0' ? '' : val;
var auth_status='';
if (val == 0) {
val = '';
var auth_status=this.auth_status;
}else{
var auth_status='1';
}
//let auth_status = val == '0' ? 0 : '1';
//let vals = val == '0' ? '' : val;
uni.$u.http
.get("/api/school.new_activity/activity_list", {
params: {
@ -257,7 +257,7 @@
order: "normal",
my: 1,
auth_status: auth_status,
status: vals, // 5
status: val, // 5
},
})
.then((res) => {
@ -941,10 +941,13 @@
}
}
}
.wsh_hot{
.wsh_hot {
margin-top: 160rpx;
}
.content {
// height: 462rpx;
// overflow-x: auto;
/* 允许横向滚动 */
@ -1064,7 +1067,8 @@
}
.bottom {
margin:20rpx 10rpx 30rpx 10rpx;
margin: 20rpx 10rpx 30rpx 10rpx;
.number {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;

View File

@ -484,7 +484,7 @@
this.detail = res.data.detail.detail;
// this.qrList = res.data.detail.ordercode;
this.qrimages = res.data.detail.ordercode.map(item => item.codeimage);
this.qrimages = res.data.detail.ordercode;
this.detailAny = res.data.detail;
this.generateAllQRCodes()
} else {

View File

@ -24,8 +24,8 @@
methods:{
//
toDetail(status){
uni.navigateTo({
url: "/packageA/my/exercise?status=" + status
uni.redirectTo({
url: "/packageA/my/exercise"
})
},
//
@ -94,8 +94,8 @@
width: 690rpx;
margin-top: 30rpx;
.img_1{
width: 200px;
height: 200px;
width: 100px;
height: 100px;
margin-top:190rpx ;
}
.text_1{

View File

@ -4,8 +4,9 @@
<swiper class="swiper-box" :current="currentIndex" @change="onSwiperChange" circular>
<swiper-item v-for="(item, index) in images" :key="index" class="swiper-item">
<view style="border: 1px solid #9C9C9C;width: 280rpx;height: 280rpx;margin: 0 auto;border-radius: 8rpx;">
<image :src="item" class="swiper-image" mode="aspectFill" />
<image :src="item.codeimage" class="swiper-image" mode="aspectFill" />
</view>
<view style="text-align: center;font-size: 26rpx;margin-top: 20rpx;">{{item.name}}</view>
</swiper-item>
</swiper>

45
packageB/privacy.vue Normal file
View File

@ -0,0 +1,45 @@
<template>
<view style="padding: 30rpx;">
<view v-if="type=='privacy'" v-html="info.privacy"></view>
<view v-if="type=='user_protocol'" v-html="info.user_protocol"></view>
</view>
</template>
<script>
export default {
data() {
return {
type:'',
info:''
}
},
onLoad(options) {
this.type=options.type;
this.getInfo();
//uniapp
if(this.type=='privacy'){
uni.setNavigationBarTitle({
title: '隐私政策'
})
}else{
uni.setNavigationBarTitle({
title: '用户协议'
})
}
},
methods: {
getInfo(){
uni.$u.http.get('/api/index/agreement').then(res=>{
console.log(res)
if(res.code==1){
this.info=res.data;
}
})
}
}
}
</script>
<style>
</style>

213
packageB/team/index.vue Normal file
View File

@ -0,0 +1,213 @@
<template>
<view class="team-container">
<view v-for="item in list" style="padding:0rpx 30rpx;">
<view style="display: flex;align-items: center;justify-content: space-between;">
<view>
<view style="font-size: 28rpx;color: #323232;">{{ item.name }}</view>
<view style="color: #9C9C9C;font-size: 24rpx;margin-top: 10rpx;">
<text>身份证</text>
<text style="margin-left: 10rpx;">{{ item.idnum }}</text>
</view>
</view>
<view style="font-size: 28rpx;">
<text style="color: #FF4810;" @click="edit(item)">编辑</text>
<text style="color: #323232;margin-left: 30rpx;" @click="del(item)">删除</text>
</view>
</view>
<view style="height: 1px;background-color: #F0F0F0;width: 100%;margin: 30rpx 0px;"></view>
</view>
<view style="padding: 30rpx;">
<view class="btn_1" @click="show = true">
<view>
<u-icon name="plus" color="#BBFC5B" size="15"></u-icon>
</view>
<view style="margin-left: 10rpx;">添加报名人</view>
</view>
</view>
<u-popup :show="show" :round="20" :closeable="true" mode="bottom" @close="close">
<view
style="padding: 26rpx;font-size: 36rpx;font-weight: 400;color: #3D3D3D;text-align: center;font-weight: 600;">
新增报名人身份信息
</view>
<view style="padding: 0rpx 30rpx;">
<view style="display: flex;align-items: center;justify-content: space-between;padding: 30rpx 0rpx;">
<view style="font-size: 30rpx;">
姓名
</view>
<view style="width: 75%;">
<input type="number" placeholder="请填写真实姓名" class="input" v-model="form.name" />
</view>
</view>
<view style="height: 1px;background-color: #F0F0F0;width: 100%;margin-top: 20rpx;"></view>
<view style="display: flex;align-items: center;justify-content: space-between;padding: 30rpx 0rpx;">
<view style="font-size: 30rpx;">
身份证号
</view>
<view style="width: 75%;">
<input type="number" placeholder="请填写身份证号" class="input" v-model="form.idnum" />
</view>
</view>
<view style="height: 1px;background-color: #F0F0F0;width: 100%;"></view>
<view style="font-size: 24rpx;color: #9C9C9C;margin-top: 40rpx;">
<text>你的个人信息我们将严格保密并仅用于投保使用详情可查看</text>
<text style="color: #0CA013;" @click="go('/packageB/privacy?type=privacy')">隐私政策</text>
<text></text>
<text style="color: #0CA013;" @click="go('/packageB/privacy?type=user_protocol')">用户协议</text>
</view>
</view>
<view style="margin-top: 40rpx;">
<view class="btn_1" @click="save">确认</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
show: false,
form: {
name: '',
idnum: ''
},
list: []
}
},
onLoad() {
this.getList()
},
methods: {
edit(item){
this.form.name=item.name;
this.form.idnum=item.idnum;
this.show=true;
},
del(item){
var that=this;
//
uni.showModal({
title: '提示',
content: '确定要删除吗?',
success: (res) => {
if (res.confirm) {
that.delData(item);
}
}
})
},
delData(item){
uni.$u.http.post('/api/school.newactivity.activity_join/del',{ids:item.id}).then(res=>{
console.log(res)
if(res.code==1){
uni.showToast({
title: res.msg,
icon: 'success',
duration: 2000
});
this.getList();
}else{
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
getList() {
uni.$u.http.get('/api/school.newactivity.activity_join/people_list').then(res => {
console.log(res)
if (res.code == 1) {
this.list = res.data.list
} else {
this.list = [];
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
save() {
if (this.form.name == '') {
uni.showToast({
title: '请填写真实姓名',
icon: 'none',
duration: 2000
});
return;
}
if (this.form.idnum == '') {
uni.showToast({
title: '请填写身份证号',
icon: 'none',
duration: 2000
});
return;
}
uni.$u.http.post('/api/school.newactivity.activity_join/add', this.form).then(res => {
console.log(res)
if (res.code == 1) {
uni.showToast({
title: res.msg,
icon: 'success',
duration: 2000
});
this.getList()
this.show = false;
this.form = {
name: '',
idnum: ''
}
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
close() {
this.show = false
},
go(url){
uni.navigateTo({
url: url
})
}
}
}
</script>
<style scoped lang="scss">
.team-container {
font-family: PingFang SC, PingFang SC;
padding-top: 20rpx;
}
.btn_1 {
width: 95%;
height: 90rpx;
background: #323232;
border-radius: 198rpx 198rpx 198rpx 198rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 32rpx;
color: #BBFC5B;
line-height: 90rpx;
text-align: center;
margin: 0 auto;
margin-top: 30rpx;
display: flex;
align-items: center;
justify-content: center;
}
.input {
text-align: right;
}
</style>

View File

@ -316,6 +316,16 @@
"style": {
"navigationBarTitleText": "身份信息"
}
}, {
"path": "team/index",
"style": {
"navigationBarTitleText": "添加报名人"
}
}, {
"path": "privacy",
"style": {
"navigationBarTitleText": ""
}
}]
}
],

View File

@ -100,6 +100,24 @@
</view>
<view class="first flex flex-column align-items justify-start" style="margin-top: 20rpx;width: 100%;">
<view class="row flex align-items" style="margin-top: 25rpx;">
<view style="width: 40%;" class="label flex align-items ">
<text style="color: #3D3D3D;">*</text>群二维码上传
</view>
<view class="row-right">
<u-upload @afterRead="uploadQun" :maxCount="1">
<view style="display: flex;justify-content: flex-end;align-items: center;">
<view v-if="qunQrcode==''" style="color: #9C9C9C;font-size: 26rpx;">未上传</view>
<view v-if="qunQrcode!=''" style="color: #FF4810;font-size: 26rpx;">已上传</view>
<u-icon name="arrow-right" color="#323232"></u-icon>
</view>
</u-upload>
</view>
</view>
<span class="line-row"></span>
</view>
<view class="first flex flex-column align-items justify-start" style="margin-top: 20rpx;">
<view class="row flex align-items" style="margin-top: 25rpx;">
<span class="label flex align-items ">
@ -133,13 +151,12 @@
<u-icon name="arrow-right" color="#323232"></u-icon>
</span>
</view>
</view>
<span style="margin:30rpx 0 0 0; width: 750rpx;" v-if="status == -1 || status == 2">
<view style="margin:30rpx 0 0 0;" v-if="status == -1 || status == 2">
<cc-protocolBox :agree="agree" :protocolArr="protocolArr" @click="agree = false"
@protocolClick="protocolClick"></cc-protocolBox>
</span>
</view>
</scroll-view>
<view class="bottom flex align-items justify-center" v-if="status == -1 || status == 2">
<span class="flex align-items justify-center" @click="apply()" v-if="agree == true">确认发布</span>
@ -342,7 +359,8 @@
times_e: '',
//
times_sinb: '',
times_sine: ''
times_sine: '',
qunQrcode: '',
};
},
onLoad() {
@ -371,6 +389,10 @@
this.form.refund_id = item.id;
this.form.refund_idn = item.title;
},
async uploadQun(item) {
const result = await this.uploadFilePromise(item.file.url, 'user');
this.qunQrcode = result;
},
//
// tofb() {
// const token = uni.getStorageSync('token')
@ -753,7 +775,7 @@
"token": uni.getStorageSync("token")
},
success: (res) => {
resolve(JSON.parse(res.data).data.fullurl);
resolve(JSON.parse(res.data).data.url);
},
fail: (err) => {
reject(err);
@ -911,6 +933,14 @@
});
return;
}
if (this.qunQrcode == '' || this.qunQrcode == null) {
uni.showToast({
title: '请上传群二维码!',
icon: 'none',
duration: 2000
});
return;
}
let hdtime = dayjs(this.form.date).format('YYYY-MM-DD HH:mm:ss') + ' - ' + dayjs(this.form.date1).format(
'YYYY-MM-DD HH:mm:ss');
let bmtime = dayjs(this.form.birth).format('YYYY-MM-DD HH:mm:ss') + ' - ' + dayjs(this.form.birth1).format(
@ -929,18 +959,19 @@
longitude: this.form.longitude,
latitude: this.form.latitude,
address: this.form.address,
address_detail: this.form.address_detail
address_detail: this.form.address_detail,
image:this.qunQrcode
}
uni.$u.http.post(url, params).then(res => {
if (res.code == 1) {
uni.showToast({
title: '发布',
title: '发布成功!',
icon: 'none',
duration: 2000,
complete: function() {
setTimeout(function() {
uni.switchTab({
url: "/pages/my/index"
uni.navigateTo({
url: "/packageA/my/orderList"
})
}, 2000);
}

BIN
static/detail/no_info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
static/detail/wx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB