From 04102f7237efefa744090ed7c25f7b5d0807b679 Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Thu, 05 Feb 2026 18:11:57 +0800
Subject: [PATCH] 完成运营中心提现和运营中心权限管理
---
mobile/pages/branch/activity/detail/detail.vue | 665 ++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 560 insertions(+), 105 deletions(-)
diff --git a/mobile/pages/branch/activity/detail/detail.vue b/mobile/pages/branch/activity/detail/detail.vue
index e97f3dc..65af4e1 100644
--- a/mobile/pages/branch/activity/detail/detail.vue
+++ b/mobile/pages/branch/activity/detail/detail.vue
@@ -33,9 +33,28 @@
</view>
<view class="flex-1">
- <view class="activity-item" v-if="activityData.fee > 0">
+ <view class="activity-item">
<view class="gray6 f24">活动费用</view>
- <view class="info">¥{{activityData.fee}}/人</view>
+ <view class="info" v-if="activityData.fee > 0">¥{{activityData.fee}}/人</view>
+ <view class="info" v-else>免费</view>
+ </view>
+ </view>
+ </view>
+ <view class="activity-item d-b-c" v-if="activityData.address">
+ <view class="flex-1">
+ <view class="gray6 f24">活动地点</view>
+ <view class="info">{{activityData.address}}</view>
+ </view>
+ <view>
+ <view class="d-s-c contact ml20">
+ <view class="d-c-c d-c" @click="openLocation()">
+ <text class="iconfont icon-dizhi"></text>
+ <text class="text">导航</text>
+ </view>
+ <view class="d-c-c d-c ml20" @click="callPhone()">
+ <text class="iconfont icon-002dianhua"></text>
+ <text class="text">电话</text>
+ </view>
</view>
</view>
</view>
@@ -52,19 +71,27 @@
<view class="gray6 f24">活动发起分会</view>
<view class="info">{{activityData.branch.name}}</view>
</view>
- <view class="activity-item d-b-c" v-if="activityData.fee > 0">
+ <view class="activity-item">
<view>
- <view class="gray6 f24">已报名人数</view>
- <view class="info">{{activityData.total}}</view>
+ <view class="gray6 f24">已报名人员({{activityData.total}}人)</view>
+ <view class="info"></view>
</view>
- <view class="avatar-list d-s-c">
- <image :src="item.avatarUrl" mode="aspectFill" v-for="(item, index) in userList"
- :key="index"></image>
- <view class="more" v-if="activityData.total > 8"></view>
+ <view class="avatar-list d-s-c pt10">
+ <view class="d-c-c d-c avatar-item" v-for="(item, index) in userList" :key="index">
+ <image :src="item.avatarUrl" mode="aspectFill"></image>
+ <text class="text-ellipsis">{{item.real_name}}</text>
+ </view>
+ <view class="more d-c-c d-c" v-if="activityData.total > 5" @click="openUser">
+ <view class="d-c-c more-icon">
+ <text class="iconfont icon-gengduo"></text>
+ </view>
+ <text>更多</text>
+ </view>
</view>
</view>
+
<!-- 活动结束图标 -->
- <view class="status-image" v-if="activityData.is_finish">
+ <view class="status-image" v-if="activityData.status_text.status==2">
<image :src="remoteImg('finish')"></image>
</view>
<!-- 活动进行中图标 -->
@@ -78,40 +105,57 @@
</view>
</view>
<!-- 活动介绍 -->
- <view class="wrapper bg-white radius24" v-if="activityData.content">
+ <view class="wrapper bg-white radius24" v-if="activityData.content || activityData.describe">
<view class="info-title-box tc pt30 fb f30">
<view class="info-title">活动介绍</view>
</view>
- <view class="activity-desc p30" v-html="activityData.content"></view>
+ <view class="activity-desc p30" v-html="activityData.content||activityData.describe"></view>
+ <!-- <view class="activity-desc p30" v-else>{{ activityData.describe }}</view> -->
</view>
</view>
<view class="detail-footer">
- <!-- 如果已经报名 -->
- <block v-if="activityData.is_reg">
- <!-- 如果已经核销 -->
- <view class="d-c-c finish-btn" v-if="activityData.is_verify">
- <button class='modifyBnt' @click="onAlbum">活动相册</button>
- <!-- 如果有走访企业,跳转企业店铺 -->
- <button class='modifyBnt' @click="gotoSupplier" v-if="activityData.is_visit">超值购</button>
- <button class='modifyBnt' @click="showShare" v-else>分享给好友</button>
- </view>
- <button v-else-if="activityData.status_text.status==1" class='modifyBnt'
- @click="onVerify">马上签到</button>
- <button v-else-if="activityData.status_text.status==2" class='modifyBnt disabled'>您缺席了这场活动</button>
- <button v-else class='modifyBnt disabled'>活动未开始</button>
- </block>
+ <!-- 如果是扫码进来的,都显示可以签到 -->
+ <view :class="{'d-c-c two-col-btn':canReg == 1}" v-if="user_verify">
+ <button class='modifyBnt disabled' v-if="activityData.is_verify">您已签到</button>
+ <button class='modifyBnt' @click="onVerify" v-else>马上签到</button>
+ <button class='modifyBnt' @click="onReg(true)" v-if="canReg==1">帮朋友报名</button>
+ </view>
+ <!-- 如果活动已结束 -->
+ <view class="d-c-c two-col-btn" v-else-if="activityData.status_text.status==2">
+ <button class='modifyBnt' @click="onAlbum">活动相册</button>
+ <!-- 如果有走访企业,跳转企业店铺 -->
+ <button class='modifyBnt' @click="gotoSupplier" v-if="activityData.is_visit">走访企业的店铺</button>
+ <button class='modifyBnt' @click="showShare" v-else>分享给好友</button>
+ </view>
<block v-else>
- <button v-if="activityData.status_text.reg_status==0" class='modifyBnt disabled'>报名未开始</button>
- <block v-else-if="activityData.status_text.reg_status==1">
- <button v-if="activityData.limit_num==activityData.total && activityData.limit_num!=0"
- class='modifyBnt disabled'>已报满</button>
- <button v-else class='modifyBnt' @click="onReg">提交报名</button>
+ <!-- 如果已经报名 -->
+ <view class="d-c-c two-col-btn" v-if="activityData.is_reg">
+ <button class='modifyBnt disabled' v-if="activityData.is_verify">您已签到</button>
+ <button class='modifyBnt disabled' v-else @click="scanCode">您已报名</button>
+ <button class='modifyBnt' @click="onReg(true)" v-if="canReg==1">帮朋友报名</button>
+ <block v-else>
+ <button class='modifyBnt' @click="showShare" v-if="activityData.is_verify">分享给好友</button>
+ <button class='modifyBnt' @click="scanCode" v-else>扫码签到</button>
+ </block>
+ </view>
+ <!-- 如果还没有报名 -->
+ <block v-else>
+ <view class="d-c-c two-col-btn" v-if="canReg==1">
+ <button class='modifyBnt' @click="onReg(false)">我要报名</button>
+ <button class='modifyBnt' @click="onReg(true)">帮朋友报名</button>
+ </view>
+ <view class="d-c-c" v-else>
+ <button v-if="canReg==0" class='modifyBnt disabled'>报名未开始</button>
+ <button v-else-if="canReg==3" class='modifyBnt disabled'>已报满</button>
+ <button v-else class='modifyBnt disabled'>报名已结束</button>
+ </view>
</block>
- <button v-else class='modifyBnt disabled'>报名已结束</button>
</block>
-
-
</view>
+ </view>
+ <!-- 活动购物图标(仅在活动进行时显示) -->
+ <view class="shopping-box" @click="gotoPage('pages/branch/activity/product/index?activity_id='+activity_id)" v-if="activityData.is_visit && activityData.status_text.status == 1 && activityData.is_verify">
+ <image :src="remoteImg('activity_shopping')"></image>
</view>
<!--报名成功弹窗-->
<view class="success-box" v-if="isShowbox">
@@ -150,14 +194,28 @@
<!-- #endif -->
</view>
</uniPopup>
+ <!--核销失败弹窗-->
+ <uniPopup :show="isShowVerify" type="middle" @hidePopup="popupVerifyFunc(null)">
+ <view class="d-c-c d-c verify-choose">
+ <view class="f30 fb">签到失败了,因为您还没报名</view>
+ <view class="p-20-0 f28 gray6">如果您朋友已经帮您报名了,请输入您的手机号重新签到:</view>
+ <input class="ww100 f30 fb tc verify-input" type="text" maxlength="30" placeholder="请输入手机号码" v-model="verify_mobile" placeholder-class="placeholder" />
+ <view class="foot">
+ <view class="btn" @click="popupVerifyFunc('reg')">现在报名</view>
+ <view class="btn" @click="popupVerifyFunc('retry')">重新签到</view>
+ </view>
+ </view>
+ </uniPopup>
<!-- 报名弹窗 -->
- <RegForm ref="regForm" :isOpenReg="isOpenReg" :in_radius="in_radius" @close="closeRegFunc"></RegForm>
+ <RegForm ref="regForm" :isOpenReg="isOpenReg" :in_radius="in_radius" :is_friend="is_friend" @close="closeRegFunc"></RegForm>
<!--分享底部弹窗-->
<Share :isbottmpanel="isbottmpanel" :activity_id="activity_id" @close="closeBottmpanel"></Share>
<!--app分享-->
<AppShare :isAppShare="isAppShare" :appParams="appParams" @close="closeAppShare"></AppShare>
<!-- 打开活动相册 -->
<Album ref="album" :isOpenAlbum="isOpenAlbum" :activity_id="activity_id" @close="closeAlbumFunc"></Album>
+ <!-- 打开报名用户名单 -->
+ <User ref="user" :isOpenUser="isOpenUser" :activity_id="activity_id" @close="closeUserFunc"></User>
</view>
</template>
@@ -170,13 +228,16 @@
import Share from './popup/share.vue';
import Album from './popup/album.vue'; // 相册
import uniPopup from '@/components/uni-popup.vue';
+ import utils from '@/common/utils.js';
+ import User from './popup/user.vue'; // 相册
export default {
components: {
RegForm,
AppShare,
Share,
Album,
- uniPopup
+ uniPopup,
+ User,
},
data() {
return {
@@ -187,7 +248,11 @@
},
balance: 0,
activity_id: 0,
- activityData: {},
+ activityData: {
+ status_text: {
+ reg_status: 0
+ }
+ },
userList: [],
/*是否显示支付宝支付,只有在h5,非微信内打开才显示*/
showAlipay: false,
@@ -213,49 +278,41 @@
longitude: 0,
isVerify: false, // 签到成功弹窗
in_radius: false, // 用户是否在活动地点限定范围内
+ user_verify: 0, // 核销标识,只有扫核销码进来值才是1
+ is_friend: false, // 是否是帮朋友报名
+ isShowVerify: false, // 核销选择框(针对核销时返回未报名的情况,选择是否有朋友帮报名)
+ verify_mobile: '', // 朋友帮报名填的手机号
+ isOpenUser: false, // 报名用户名单弹窗
}
},
onLoad(e) {
/*活动id*/
- if (typeof e.activity_id != 'undefined') {
- this.activity_id = e.activity_id;
- } else {
- let scene = utils.getSceneData(e);
+ let scene = utils.getSceneData(e);
+ if (scene && typeof scene === 'object' && Object.keys(scene).length > 0) {
this.activity_id = scene.activity_id;
+ this.user_verify = scene.user_verify;
+ } else {
+ this.activity_id = e.activity_id;
}
},
onShow() {
- this.getUserLocation();
this.getData();
},
- methods: {
- // 获取用户坐标并判断在不在活动范围内
- getUserLocation() {
- let self = this;
- uni.getLocation({
- type: 'gcj02',
- success: (res) => {
- self.latitude = res.latitude;
- self.longitude = res.longitude;
- // 计算距离
- const distance = this.calculateDistance(
- res.latitude, res.longitude,
- parseFloat(self.activityData.latitude), parseFloat(self.activityData.longitude)
- );
- if (distance <= self.activityData.radius) {
- self.in_radius = true;
- }
- },
- fail: (err) => {
- console.error('获取位置失败:', err);
- uni.showToast({
- title:'获取位置失败' + err,
- icon: 'none'
- });
- }
- });
+ onUnload() {
+ this.stopWatchingLocation();
+ },
+ computed: {
+ canReg() {
+ let status = this.activityData.status_text.reg_status; // 0未开始 1可报 2报名已结束 3报满
+ if (this.activityData.status_text.reg_status == 1 && (this.activityData.limit_num > this.activityData.total || this.activityData.limit_num == 0)) {
+ status = 1;
+ } else if (this.activityData.limit_num == this.activityData.total && this.activityData.limit_num > 0) {
+ status = 3;
+ }
+ return status;
},
-
+ },
+ methods: {
/*获取数据*/
getData() {
let self = this;
@@ -270,18 +327,223 @@
function(res) {
self.activityData = res.data.detail;
self.userList = res.data.userList;
- if (self.activityData.radius > 0) {
- self.getUserLocation();
+ // 当活动设置了签到范围并且是扫核销码进来的
+ if (self.activityData.radius > 0 && self.user_verify) {
+ self.initializeWithLocation();
}
self.loadding = false;
uni.hideLoading();
}
);
},
+
+ // 初始化并等待位置信息
+ async initializeWithLocation() {
+ try {
- onReg() {
- this.isOpenReg = true;
+ // 等待获取第一个有效位置
+ const location = await this.startWatchingLocation();
+
+ console.log('获得初始位置:', location);
+
+ // 检查用户是否在活动范围
+ this.updateInRadius();
+
+ } catch (error) {
+ console.error('初始化失败:', error);
+ uni.showToast({
+ title: '位置获取失败,请重新扫码试试',
+ icon: 'none'
+ });
+ }
+ },
+
+ // 修改后的开始监听位置方法,返回 Promise
+ startWatchingLocation() {
+ return new Promise(async (resolve, reject) => {
+ try {
+ // 存储 resolve 和 reject 以便在位置回调中使用
+ this.locationResolve = resolve;
+ this.locationReject = reject;
+
+ // 申请定位权限
+ await this.authorizeLocation();
+
+ // 开始位置更新
+ await this.startLocationUpdate();
+
+ // 监听位置变化
+ this.watchLocationChange();
+
+ // 设置超时处理
+ setTimeout(() => {
+ if (this.locationReject) {
+ this.locationReject(new Error('位置获取超时'));
+ this.locationResolve = null;
+ this.locationReject = null;
+ }
+ }, 10000); // 10秒超时
+
+ } catch (error) {
+ reject(error);
+ }
+ });
+ },
+
+ // 授权定位
+ authorizeLocation() {
+ return new Promise((resolve, reject) => {
+ uni.authorize({
+ scope: 'scope.userLocation',
+ success: resolve,
+ fail: (err) => {
+ uni.showModal({
+ title: '提示',
+ content: '需要您授权位置信息,请前往设置页开启权限',
+ success: (modalRes) => {
+ if (modalRes.confirm) {
+ uni.openSetting({
+ success: (openRes) => {
+ if (openRes.authSetting[
+ 'scope.userLocation'
+ ]) {
+ resolve();
+ } else {
+ reject(new Error(
+ '用户未授权位置权限'));
+ }
+ }
+ });
+ } else {
+ reject(new Error('用户取消授权'));
+ }
+ }
+ });
+ }
+ });
+ });
+ },
+
+ // 开启位置更新
+ startLocationUpdate() {
+ return new Promise((resolve, reject) => {
+ uni.startLocationUpdate({
+ success: resolve,
+ fail: reject
+ });
+ });
+ },
+
+ // 监听位置变化
+ watchLocationChange() {
+ if (this._locationChangeCallback) {
+ uni.offLocationChange(this._locationChangeCallback);
+ }
+
+ this._locationChangeCallback = (res) => {
+ console.log('位置变化:', res);
+ this.latitude = res.latitude;
+ this.longitude = res.longitude;
+
+ // 如果是第一次获取位置,解析 Promise
+ if (this.locationResolve) {
+ this.locationResolve({
+ latitude: res.latitude,
+ longitude: res.longitude,
+ accuracy: res.accuracy
+ });
+ this.locationResolve = null;
+ this.locationReject = null;
+ }
+
+ // 位置更新后处理
+ this.updateInRadius();
+ };
+
+ uni.onLocationChange(this._locationChangeCallback);
+ },
+
+ // 检查是否在签到范围
+ updateInRadius() {
+ let self = this;
+ // 如果不是扫码进来的或者没有设置活动范围
+ if (!self.user_verify || !self.activityData.radius) {
+ return;
+ }
+ // 计算距离
+ const distance = this.calculateDistance(
+ parseFloat(self.latitude),
+ parseFloat(self.longitude),
+ parseFloat(self.activityData.latitude),
+ parseFloat(self.activityData.longitude)
+ );
+ if (distance <= self.activityData.radius) {
+ self.in_radius = true;
+ }
+ },
+
+ // 停止监听位置
+ stopWatchingLocation() {
+ if (this._locationChangeCallback) {
+ uni.offLocationChange(this._locationChangeCallback);
+ this._locationChangeCallback = null;
+ }
+
+ // 清理 Promise 相关状态
+ if (this.locationReject) {
+ this.locationReject(new Error('位置监听已停止'));
+ this.locationResolve = null;
+ this.locationReject = null;
+ }
+
+ uni.stopLocationUpdate();
+ },
+
+ // 获取用户坐标并判断在不在活动范围内(弃用)
+ // getUserLocation() {
+ // let self = this;
+ // uni.getLocation({
+ // type: 'gcj02',
+ // success: (res) => {
+ // self.latitude = res.latitude;
+ // self.longitude = res.longitude;
+ // // 计算距离
+ // const distance = this.calculateDistance(
+ // res.latitude, res.longitude,
+ // parseFloat(self.activityData.latitude), parseFloat(self.activityData.longitude)
+ // );
+ // if (distance <= self.activityData.radius) {
+ // self.in_radius = true;
+ // }
+ // },
+ // fail: (err) => {
+ // console.error('获取位置失败:', err);
+ // uni.showToast({
+ // title: '获取位置失败' + err,
+ // icon: 'none'
+ // });
+ // }
+ // });
+ // },
+
+ onReg(e) {
this.$refs.regForm.activityData = this.activityData;
+ /* this.$refs.regForm.branch_name = this.activityData.branch.name;
+ this.$refs.regForm.formData.branch_id = this.activityData.branch_id; */
+ this.is_friend = e;
+ //if (this.activityData.fee > 0 || e || !this.activityData.is_member) {
+ this.isOpenReg = true;
+ /* } else {
+ uni.showModal({
+ title: '提示',
+ content: '确定要报名吗?',
+ success: (modalRes) => {
+ if (modalRes.confirm) {
+ this.$refs.regForm.onSubmit();
+ }
+ }
+ });
+ } */
},
closeRegFunc(e) {
@@ -305,16 +567,16 @@
let self = this;
if (!self.in_radius && self.activityData.radius > 0) {
uni.showModal({
- title: '签到失败',
- content: `您距离活动地点太远,无法签到`,
- showCancel: false
+ title: '签到失败',
+ content: `您距离活动地点太远,无法签到`,
+ showCancel: false
});
return false;
} else {
self.doVierfy();
}
},
-
+
// 执行签到
doVierfy() {
let self = this;
@@ -323,38 +585,70 @@
});
self._post(
'branch.activityUser/verify', {
- activity_id: self.activity_id
+ activity_id: self.activity_id,
+ verify_mobile: self.verify_mobile
},
function(res) {
uni.hideLoading();
+ if (res.data.result =='not_reg') {
+ self.isShowVerify = true;
+ return;
+ }
self.isVerify = true;
self.getData();
}
);
},
+ // 签到失败弹窗处理
+ popupVerifyFunc(e) {
+ if (e == 'reg') {
+ this.onReg(false);
+ } else if (e == 'retry') { // 朋友帮报名,输入手机号重新签到
+ if (this.verify_mobile == '') {
+ uni.showToast({
+ title: '请输入手机号',
+ icon: 'none'
+ });
+ return;
+ }
+ if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.verify_mobile)) {
+ uni.showToast({
+ title: '请输入正确的手机号',
+ icon: 'none'
+ });
+ return;
+ }
+ this.doVierfy();
+ }
+ this.verify_mobile = '';
+ this.isShowVerify = false;
+ },
+
// 计算坐标距离
calculateDistance(lat1, lng1, lat2, lng2) {
- const R = 6371000; // 地球半径(米)
- const toRadians = (degree) => degree * (Math.PI / 180);
-
- const φ1 = toRadians(lat1);
- const φ2 = toRadians(lat2);
- const Δφ = toRadians(lat2 - lat1);
- const Δλ = toRadians(lng2 - lng1);
-
- const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
- Math.cos(φ1) * Math.cos(φ2) *
- Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
- const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
-
- const distance = R * c;
- return Math.round(distance * 100) / 100; // 保留两位小数
+ const R = 6371000; // 地球半径(米)
+ const toRadians = (degree) => degree * (Math.PI / 180);
+
+ const φ1 = toRadians(lat1);
+ const φ2 = toRadians(lat2);
+ const Δφ = toRadians(lat2 - lat1);
+ const Δλ = toRadians(lng2 - lng1);
+
+ const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
+ Math.cos(φ1) * Math.cos(φ2) *
+ Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+
+ const distance = R * c;
+ return Math.round(distance * 100) / 100; // 保留两位小数
},
// 打开相册
onAlbum() {
this.isOpenAlbum = true;
+ this.$refs.album.initData();
+ this.$refs.album.getData();
},
closeAlbumFunc(e) {
@@ -452,10 +746,81 @@
}
});
},
-
+
gotoSupplier() {
this.gotoPage('pages/shop/shop?shop_supplier_id=' + this.activityData.visit_supplier_id);
},
+
+ scanCode() {
+ let self = this;
+ //#ifndef H5
+ // 只允许通过相机扫码
+ uni.scanCode({
+ onlyFromCamera: true,
+ success: function(res) {
+ if (res.errMsg == 'scanCode:ok') {
+ if (res.path != 'undefined') {
+ self.gotoPage(res.path);
+ }
+ } else {
+ uni.showToast({
+ title: '扫码失败,请重试'
+ })
+ }
+ }
+ });
+ //#endif
+ },
+
+ callPhone(){
+ uni.makePhoneCall({
+ phoneNumber: this.activityData.phone + ''
+ });
+ },
+
+ /*导航*/
+ openLocation() {
+ let self = this;
+ uni.openLocation({
+ latitude: Number(this.activityData.latitude),
+ longitude: Number(this.activityData.longitude),
+ address: this.activityData.address
+ });
+ },
+
+ // 打开报名名单
+ openUser() {
+ this.isOpenUser = true;
+ },
+
+ closeUserFunc(e) {
+ this.isOpenUser = false;
+ },
+
+ },
+ onShareAppMessage() {
+ if (this.activityData) {
+ return {
+ title: `${this.activityData.name}`,
+ path: `/pages/plus/business/detail?activity_id=${this.activity_id}`
+ };
+ }
+ return {
+ title: '活动详情',
+ path: `/pages/plus/business/detail?activity_id=${this.activity_id}`
+ };
+ },
+ onShareTimeline() {
+ if (this.activityData) {
+ return {
+ title: `${this.activityData.name}`,
+ path: `/pages/plus/business/detail?activity_id=${this.activity_id}`
+ };
+ }
+ return {
+ title: '活动详情',
+ path: `/pages/plus/business/detail?activity_id=${this.activity_id}`
+ };
}
}
</script>
@@ -529,26 +894,45 @@
}
.iconfont {
- margin-right: 17rpx;
+ // margin-right: 17rpx;
font-size: 34rpx;
}
.activity-item {
.avatar-list {
+ .avatar-item {
+ width: 90rpx;
+ padding-right: 10rpx;
+ }
image {
width: 70rpx;
height: 70rpx;
border-radius: 70rpx;
- border: 2rpx solid #ffffff;
- margin-left: -20rpx;
}
.more {
- position: relative;
- width: 140rpx;
- height: 70rpx;
- margin-left: -140rpx;
- background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, .9));
+ padding-left: 10rpx;
+
+ .more-icon {
+ width: 70rpx;
+ height: 70rpx;
+ border-radius: 70rpx;
+ background: #f1f1f1;
+ }
+ }
+ }
+
+ .contact {
+ .iconfont {
+ font-size: 30rpx;
+ // font-weight: bold;
+ color: #333333;
+ margin-right: 0;
+ }
+
+ .text {
+ font-size: 24rpx;
+ color: #333333;
}
}
}
@@ -563,7 +947,7 @@
height: 120rpx;
}
}
-
+
.status-verify {
position: absolute;
bottom: 200rpx;
@@ -572,7 +956,7 @@
border-radius: 60rpx 0 0 60rpx;
font-size: 28rpx;
padding: 6rpx 20rpx;
-
+
.iconfont {
margin-right: 10rpx;
}
@@ -708,7 +1092,7 @@
}
}
- .personal-data .finish-btn .modifyBnt {
+ .personal-data .two-col-btn .modifyBnt {
width: 325rpx;
margin: 0 20rpx;
}
@@ -818,4 +1202,75 @@
box-shadow: 0 8rpx 16rpx 0 rgba(226, 35, 26, 0.6);
}
}
+
+ .verify-choose {
+ padding-bottom: 78rpx;
+
+ .verify-input {
+ border: 1rpx solid #ddd;
+ border-radius: 12rpx;
+ padding: 16rpx 0;
+ }
+
+ .foot {
+ height: 78rpx;
+ border-top: 1px solid #EAEAEA;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+
+ .btn {
+ color: #999999;
+ font-size: 26rpx;
+ width: 50%;
+ text-align: center;
+ height: 78rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ +.btn {
+ color: #E93323;
+ position: relative;
+
+ &::before {
+ content: "";
+ display: block;
+ width: 1px;
+ height: 78rpx;
+ background: #EAEAEA;
+ position: absolute;
+ left: 0;
+ top: 0;
+ }
+ }
+ }
+ }
+ }
+ @keyframes pulse {
+ 0% {
+ transform: scale(1);
+ }
+ 50% {
+ transform: scale(1.2); /* 放大到1.2倍 */
+ }
+ 100% {
+ transform: scale(1);
+ }
+ }
+ .shopping-box {
+
+ image {
+ width: 180rpx;
+ height: 180rpx;
+ position: fixed;
+ bottom: 130rpx;
+ right: 20rpx;
+ animation: pulse 0.8s infinite; /* 动画名称,持续时间,无限循环 */
+ }
+ }
</style>
\ No newline at end of file
--
Gitblit v1.9.2