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/plus/vip/apply.vue |  527 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 398 insertions(+), 129 deletions(-)

diff --git a/mobile/pages/plus/vip/apply.vue b/mobile/pages/plus/vip/apply.vue
index fac43bd..c3ef593 100644
--- a/mobile/pages/plus/vip/apply.vue
+++ b/mobile/pages/plus/vip/apply.vue
@@ -1,123 +1,251 @@
 <template>
-	<view class="apply-vip" v-if="!loading">
+	<view class="apply-bonus" v-if="!loadding">
 		<!-- #ifdef MP-WEIXIN || APP-PLUS -->
 		<view class="ww100" :style="'height:'+topBarTop()+'px;'"></view>
 		<view class="tc  head_top" :style="topBarHeight() == 0 ? '': 'height:'+topBarHeight()+'px;'">
 			<view class="reg180" @click="goback"><text class="icon iconfont icon-jiantou"></text></view>
-			<view class="fb">{{titel}}</view>
+			<view class="fb">{{title}}</view>
 		</view>
 		<!-- #endif -->
 		<view class="banner d-c-c d-c" v-if="top_background!=''">
 			<image :src="top_background" mode="widthFix"></image>
 		</view>
-		<view class="banner-fill"></view>
-		<!--申请成功-->
-		<template v-if="apply_status == 'success'">
-			<view class="form-wrap p30 f30 tc">
-				<view class="pb30 d-c-c gray3 f40 fb">
-					申请已提交
+		<view class="apply-box">
+			<!--申请成功-->
+			<template v-if="!is_applying ">
+				<view class="form-wrap p-30-0 f30">
+					<view class="p30 d-c-c gray3 f30 fb border-b-d">
+						{{words.apply.words.title.value}}
+					</view>
+					<view class="section">
+						<view @click="selectItem(item)" class="item" :class="index==productList.length-1?'noborder':'border-b-e'" v-for="(item, index) in productList" :key="index">
+							<image :src="item.product_image" class="cover" mode="aspectFit"></image>
+							<view class="info">
+								<view class="title">{{ item.product_name }}</view>
+								<view class="describe">{{ item.product_sku.product_attr }}</view>
+								<view class="level-box count_choose">
+									<view class="price">
+										¥
+										<text class="num">{{ item.product_sku.product_price }}</text>
+									</view>
+									<view class="num-wrap">
+										<view class="" @tap.stop="reduceFunc(item)" v-if="item.total_num > 1">
+											<image class="reduce_icon" src="../../../static/icon/reduce.png" mode=""></image>
+										</view>
+										<view class="text-wrap">{{item.total_num}}</view>
+										<view class="" @tap.stop="addFunc(item)" v-if="item.total_num < item.product_sku.stock_num ">
+											<image class="add_icon" src="../../../static/icon/add.png" mode=""></image>
+										</view>
+									</view>
+								</view>
+							</view>
+							<view class="icon-box pl20" :class="product_id==item.product_id?'active':''">
+								<text class="icon iconfont icon-xuanze f50"></text>
+							</view>
+						</view>
+					</view>
+					<view class="button-box p-30-0">
+						<view class="d-c-c f28">
+							<checkbox-group @change="changeFunc">
+								<checkbox value="checkbox" :checked="is_read" />
+							</checkbox-group>
+							<text>我已阅读并了解</text>
+							<text class="red" @click="isPopup=true">
+								【{{ words.apply.words.license.value }}】
+							</text>
+						</view>
+						<view class="d-c-c mt30">
+							<button class="btn-red" @click="Submit()">{{ words.apply.words.submit.value }}</button>
+						</view>
+					</view>
 				</view>
-				<view class="pt20">
-					您的申请已提交,请耐心等待审核
+				<view class="bottom-banner d-c-c d-c" v-if="bottom_background!=''">
+					<image :src="bottom_background" mode="widthFix"></image>
 				</view>
-				<view class="pt30">
-					<button type="primary" class="btn-gcred" @click="gotoVip">返回VIP中心</button>
+			</template>
+			<!--分销商审核中-->
+			<template v-if="is_applying">
+				<view class="d-c-c pt30">
+					<text style=" font-size: 100rpx;" class="icon iconfont icon-icon_xianshi-xian"></text>
 				</view>
+				<view class="p-30-0 d-c-c gray6 f30">
+					{{ words.apply.words.wait_audit.value }}
+				</view>
+				<view class="p30 mt30 d-c-c">
+					<button type="primary" class="btn-red" @click="gotoShop">{{ words.apply.words.goto_mall.value }}</button>
+				</view>
+			</template>
+		</view>
+		<!--协议-->
+		<Popup :show="isPopup" msg="申请协议">
+			<view class="agreement-content f28 lh150">
+				{{agreement}}
 			</view>
-		</template>
-		
-		<!--申请表单-->
-		<template v-else>
-			<view class="form-wrap p30 f30">
-				<form @submit="formSubmit">
-					<view class="form-item border-b">
-						<view class="field-name">姓名</view>
-						<input name="real_name" class="flex-1 ml20" type="text" placeholder="请输入真实姓名" />
-					</view>
-					<view class="form-item border-b">
-						<view class="field-name">手机号</view>
-						<input name="mobile" class="flex-1 ml20" type="number" maxlength="11" placeholder="请输入手机号" />
-					</view>
-					<view class="form-item border-b">
-						<view class="field-name">推荐人</view>
-						<input name="referee_id" class="flex-1 ml20" type="number" placeholder="请输入推荐人ID(选填)" />
-					</view>
-					
-					<view class="pt30">
-						<button class="btn-gcred" form-type="submit">提交申请</button>
-					</view>
-				</form>
+			<view class="ww100 pt20 d-c-c">
+				<button type="primary" class="btn-red" @click="isPopup=false">我已阅读</button>
 			</view>
-		</template>
+		</Popup>
 	</view>
 </template>
 
 <script>
+	import Popup from '@/components/uni-popup.vue'
 	export default {
+		components: {
+			Popup
+		},
 		data() {
 			return {
-				loading: true,
-				titel: '',
+				/*是否加载完成*/
+				loadding: true,
+				/*弹窗是否打开*/
+				isPopup: false,
+				/*是否阅读了规则*/
+				is_read:false,
+				agreement: '',
+				is_applying: false,
+                referee_name:'',
+				words:{},
+				is_bonus:'',
+				/*顶部背景*/
 				top_background: '',
-				apply_status: 'form' // form-表单, success-申请成功
-			};
+				/*小程序订阅消息*/
+				temlIds: [],
+				productList: [],
+				bottom_background: '',
+				product_id: '',
+				product_sku_id: '',
+				title: ''
+			}
 		},
-		onLoad() {
-			this.getPageData();
+		mounted() {
+			/*数据*/
+			this.getData();
 		},
 		methods: {
-			// 获取页面数据
-			getPageData() {
+			/*获取数据*/
+			getData() {
 				let self = this;
-				uni.showLoading({ title: '加载中' });
-				
-				self._get('plus.vip.apply/getAgreement', {}, function(res) {
-					self.titel = '申请成为VIP';
-					self.top_background = res.data.data.background?.cash_apply || '';
-					self.loading = false;
+				uni.showLoading({
+					title: '加载中'
+				})
+				self._get('plus.vip.apply/apply', {
+					platform: self.getPlatform(),
+					referee_id: uni.getStorageSync('referee_id')
+				}, function(res) {
 					uni.hideLoading();
-				});
-			},
-			
-			// 表单提交
-			formSubmit(e) {
-				let self = this;
-				let formData = e.detail.value;
-				
-				// 数据验证
-				if (!formData.real_name) {
-					uni.showToast({ title: '请输入姓名', icon: 'none' });
-					return;
-				}
-				
-				if (!/^1[3-9]\d{9}$/.test(formData.mobile)) {
-					uni.showToast({ title: '请输入正确的手机号', icon: 'none' });
-					return;
-				}
-				
-				if (formData.referee_id && !/^\d+$/.test(formData.referee_id)) {
-					uni.showToast({ title: '推荐人ID格式不正确', icon: 'none' });
-					return;
-				}
-				
-				// 提交申请
-				uni.showLoading({ title: '提交中' });
-				self._post('plus.vip.apply/submit', formData, function(res) {
-					uni.hideLoading();
-					if (res.code === 1) {
-						uni.showToast({ title: '申请提交成功' });
-						self.apply_status = 'success';
-					} else {
-						uni.showToast({ title: res.msg, icon: 'none' });
+					self.top_background = res.data.background;
+					self.is_applying = res.data.is_applying;
+					self.referee_name = res.data.referee_name!=null?res.data.referee_name:'平台';
+					self.is_bonus=res.data.is_bonus;
+					self.words = res.data.words;
+					self.temlIds = res.data.template_arr;
+					self.agreement = res.data.license;
+					self.productList = res.data.productList;
+					self.bottom_background = res.data.bottom_background;
+					/*默认选中商品*/
+					self.product_id = self.productList[0].product_id;
+					self.product_sku_id = self.productList[0].product_sku.product_sku_id;
+					/*设置标题*/
+					// uni.setNavigationBarTitle({
+					//     title: self.words.apply.title.value
+					// });
+					self.title = self.words.apply.title.value;
+					self.loadding = false;
+					if(self.is_bonus){
+						uni.navigateBack({});
 					}
 				});
 			},
 			
-			// 返回VIP中心
-			gotoVip() {
-				uni.redirectTo({
-					url: '/pages/plus/vip/index'
-				});
+			/*购买商品*/
+			Submit() {
+				if(!this.is_read){
+					uni.showToast({
+						title: '请同意协议!',
+						icon:'none'
+					});
+					return;
+				}
+				let product_id = this.product_id;
+				let product_num = 1;
+				let product_sku_id = this.product_sku_id;
+				this.gotoPage('/pages/order/confirm-order?product_id=' + product_id + '&product_num=' + product_num +
+						'&product_sku_id=0&order_type=buy');
+			},
+			
+			/*申请*/
+			formSubmit: function(e) {
+				let formdata = e.detail.value;
+				formdata.referee_id=uni.getStorageSync('referee_id');
+				let self = this;
+				
+				if(formdata.name==''){
+					uni.showToast({
+						title: '请输入姓名!',
+						icon:'none'
+					});
+					return;
+				}
+				if(formdata.mobile.length==''){
+					uni.showToast({
+						title: '请输入手机号!',
+						icon: 'none'
+					});
+					return;
+				}
+				if (!/^1(3|4|5|6|7|8|9)\d{9}$/.test(formdata.mobile)) {
+					uni.showToast({
+						title: '手机有误,请重填!',
+						icon: 'none'
+					});
+					return;
+				}
+				
+				if(!self.is_read){
+					uni.showToast({
+						title: '请同意协议!',
+						icon:'none'
+					});
+					return;
+				}
+				
+				let callback = function(){
+					uni.showLoading({
+						title: '正在提交',
+						mask: true
+					})
+					self._post('plus.bonus.apply/submit', formdata, function(res) {
+						uni.hideLoading();
+						uni.showToast({
+							title: '申请成功'
+						});
+						self.getData();
+					});
+				};
+				self.subMessage(self.temlIds, callback);
+			},
+			
+			/*去商城看看*/
+			gotoShop(){
+				uni.switchTab({
+					url:'/pages/index/index'
+				})
+			},
+			
+			/*同意协议*/
+			changeFunc(e){
+				if(e.target.value.length>0){
+					this.is_read=true;
+				}else{
+					this.is_read=false;
+				}
+			},
+			
+			/*选择商品*/
+			selectItem(e) {
+				this.product_id = e.product_id;
+				this.product_sku_id = e.product_sku.product_sku_id;
 			},
 			
 			goback() {
@@ -127,21 +255,171 @@
 	}
 </script>
 
-<style lang="scss">
-	.apply-vip {
-		min-height: 100vh;
-		background: #fff;
+<style>
+.apply-bonus .banner {
+	position: absolute;
+	width: 100%;
+	z-index: 0;
+	min-height: 167rpx;
+	/* padding-bottom: 60rpx; */
+	background-repeat: no-repeat;
+	background-size: 100%;
+	top: 0;
+}
+.apply-bonus .banner image{ width: 100%;}
+
+	.form-wrap {
+		background: #FFFFFF;
+		border-radius: 26rpx 26rpx 0 0;
+		/* box-shadow: 0 0 8rpx 0 rgba(0, 0, 0, .2); */
+	}
+
+	.form-item {
+		padding: 20rpx 0;
+		margin-bottom: 20rpx;
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+		font-size: 28rpx;
+	}
+
+	.form-item .field-name {
+		width: 180rpx;
+	}
+
+	.form-item input {
+		font-size: 28rpx;
+	}
+
+	.agreement-content {
+		max-height: 60vh;
+		overflow-y: auto;
+	}
+	.apply-bonus .btn-red{
+		width: 600rpx;
+	height: 88rpx;
+	line-height: 88rpx;
+	border-radius: 44rpx;
+	box-shadow: 0 8rpx 16rpx 0 rgba(226,35,26,.6);}
+	
+	/* 商品列表样式 */
+	.section .item {
+		margin: 0 26rpx;
+		display: flex;
+		align-items: center;
+		padding-bottom: 29rpx;
+		padding-top: 29rpx;
 	}
 	
-	.head_top {
-		position: absolute;
+	.section .cover {
+		width: 150rpx;
+		height: 150rpx;
+		border-radius: 8px;
+	}
+	
+	.section .info {
+		flex: 1;
+		padding-left: 30rpx;
+		box-sizing: border-box;
+		overflow: hidden;
+	}
+	
+	.section .title {
 		width: 100%;
-		padding-top: var(--status-bar-height);
-		height: 30px;
-		line-height: 30px;
-		color: #FFFFFF;
+		font-size: 26rpx;
+		display: -webkit-box;
+		overflow: hidden;
+		-webkit-line-clamp: 2;
+		-webkit-box-orient: vertical;
+	}
+	
+	.vender .list .describe {
+		width: 100%;
+		white-space: nowrap;
+		overflow: hidden;
+		text-overflow: ellipsis;
+	}
+	
+	.section .describe {
+		margin-top: 20rpx;
+		font-size: 24rpx;
+		color: #999999;
+		display: -webkit-box;
+		-webkit-box-orient: vertical;
+		-webkit-line-clamp: 3;
+		overflow: hidden;
+	}
+	
+	.section .price {
+		color: #F6220C;
+		font-size: 24rpx;
+	}
+	
+	.section .price .num {
+		padding: 0 4rpx;
 		font-size: 32rpx;
-		z-index: 2;
+	}
+	
+	.section .level-box {
+		margin-top: 20rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+	}
+	
+	.section .level-box .key {
+		font-size: 24rpx;
+		color: #999999;
+	}
+	
+	.section .level-box .num-wrap {
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+	}
+	
+	.section .level-box .icon-box {
+		width: 33rpx;
+		height: 33rpx;
+		border: 1px solid #c5c5c5;
+		background: #f2f2f2;
+	}
+	
+	.section .level-box .icon-box .gray {
+		color: #cccccc;
+	}
+	
+	.section .level-box .icon-box .gray3 {
+		color: #333333;
+	}
+	
+	.section .level-box .text-wrap {
+		margin: 0 20rpx;
+		height: 33rpx;
+		border: none;
+		background: none;
+	}
+	
+	.section .level-box .text-wrap input {
+		padding: 0 4rpx;
+		height: 33rpx;
+		line-height: 1;
+		width: 40rpx;
+		font-size: 32rpx;
+		text-align: center;
+		display: flex;
+		align-items: center;
+		min-height: 33rpx;
+	}
+	
+	.button-box {
+		margin: 0 26rpx;
+		background: #f5f5f5;
+		border-radius: 8rpx;
+	}
+	
+	.icon-box.active text {
+		color: #F6220C;
 	}
 	
 	.reg180 {
@@ -153,40 +431,31 @@
 	}
 	
 	.icon-jiantou {
+	
 		color: #FFFFFF;
 		font-size: 30rpx;
 	}
 	
-	.banner-fill {
-		height: 200rpx;
-	}
-	
-	.form-wrap {
-		.form-item {
-			display: flex;
-			align-items: center;
-			padding: 30rpx 0;
-			
-			.field-name {
-				width: 150rpx;
-				color: #333;
-			}
-			
-			input {
-				height: 50rpx;
-				line-height: 50rpx;
-			}
-		}
-	}
-	
-	.btn-gcred {
+	.head_top {
+		position: absolute;
 		width: 100%;
-		height: 88rpx;
-		line-height: 88rpx;
-		border-radius: 44rpx;
-		background: #FF5649;
-		border-color: #FF5649;
-		color: #fff;
+		height: 30px;
+		line-height: 30px;
+		color: #FFFFFF;
 		font-size: 32rpx;
+		z-index: 2;
 	}
-</style>
\ No newline at end of file
+	
+	.apply-box {
+		padding-top: 260rpx;
+		position: relative;
+	}
+	
+	.bottom-banner {
+		width: 100%;
+	}
+	
+	.bottom-banner image {
+		width: 100%;
+	}
+</style>

--
Gitblit v1.9.2