MONSTER-ygh пре 1 година
родитељ
комит
28c01a9f20

+ 76 - 3
common/apiurl.js

@@ -3,10 +3,83 @@
 */
 const apiurl = {
 	/** 案例 */
-	case: {
-		url: '/member/wechat/appletGetOpenId',
+	login: {
+		url: '/member/auth/personsLogin',
+		type: 'post'
+	},
+	loginOut: {
+		url: '/member/auth/personsLogout',
+		type: 'post'
+	},
+	/** 首页 */
+	retailIndex: {
+		url: '/system/client/retailIndex',
 		type: 'get'
-	}
+	},
+	/** 用户信息 */
+	getInfo: {
+		url: '/member/marketPersons/getInfo',
+		type: 'get'
+	},
+	getRetailQrcode: {
+		url: '/member/marketPersons/getRetailQrcode',
+		type: 'get'
+	},
+	getRetailStatistics: {
+		url: '/member/marketPersons/getRetailStatistics',
+		type: 'get'
+	},
+	getRetailInfo: {
+		url: '/member/marketPersons/getRetailInfo',
+		type: 'get'
+	},
+	payset: {
+		url: '/member/marketPersons/payset',
+		type: 'post'
+	},
+	marketPersonsSerial: {
+		url: '/member/marketPersonsSerial/detailList',
+		type: 'get'
+	},
+	withdrawInfo: {
+		url: '/member/marketPersons/withdrawInfo',
+		type: 'get'
+	},
+	orderWithdraw: {
+		url: '/order/orderWithdraw/submit',
+		type: 'post'
+	},
+	marketPersons: {
+		url: '/member/marketPersons/paysetCheck',
+		type: 'post'
+	},
+	getRetailInfo: {
+		url: '/member/marketPersons/getRetailInfo',
+		type: 'get'
+	},
+	orderWithdrawList: {
+		url: '/order/orderWithdraw/pageList',
+		type: 'get'
+	},
+	orderWithdrawSelectById: {
+		url: '/order/orderWithdraw/selectById',
+		type: 'get'
+	},
+	/**
+	 * @author ygh
+	 * @date 2023-12-14
+	 * 公众号获取openid
+	 * 
+	 * */
+	wxinfoH5: {
+		url: '/member/wechat/h5/code/',
+		type: 'get',
+		addUrl: true
+	},
+	personsLoginCheck: {
+		url: '/member/auth/personsLoginCheck',
+		type: 'get'
+	},
 }
 
 

+ 32 - 29
common/config.js

@@ -1,52 +1,55 @@
 /**
  * 配置通用 
  */
-// const node_dev = process.env.H_NODE_ENV;
+const node_dev = process.env.H_NODE_ENV;
 // //运行到浏览器用的
-// let baseUrl='/api';
-// let upFileUrl='/api';
-// //打包用的
-// if (node_dev) {
-//  baseUrl = process.env.H_BASE_URL;
-//  upFileUrl = process.env.H_UP_FILE_URL
-// }
-
-/**
- * 后端环境配置
- */
 let baseUrl = null // 后端服务接口
 let upFileUrl= null // 后端上传接口
 let staticUrl= null // 静态文件地址
-//64
+
+// 本地
 // #ifdef MP
 	baseUrl='https://greatadmin.dev.gztjy.top/serviceapi';
 	upFileUrl='http://fileupload.hw.hongweisoft.com/upload/single/minio';
-	// staticUrl='http://res.hw.hongweisoft.com/xushuo/';
 	staticUrl='https://miniores.hw.hongweisoft.com/greattransition/staticfile';
 // #endif
 // #ifdef H5
-	baseUrl='/api/serviceapi';
+	baseUrl='/api';
 	upFileUrl='http://fileupload.hw.hongweisoft.com/upload/single/minio';
-	// staticUrl='http://res.hw.hongweisoft.com/xushuo/';
-	staticUrl='/static/';
-// #endif
-
-//正式
-// #ifdef MP
-	// baseUrl='https://xusapi.gzxsjt.cn/appapi/app';
-	// upFileUrl='https://xusapi.gzxsjt.cn/thirdapi/upload/single/minio';
-	// staticUrl='https://xusapi.gzxsjt.cn/miniores/imgs/app';
-// #endif
-// #ifdef H5
-	// baseUrl='https://xusapi.gzxsjt.cn/appapi/app';
-	// upFileUrl='https://xusapi.gzxsjt.cn/thirdapi/upload/single/minio';
-	// staticUrl='https://xusapi.gzxsjt.cn/miniores/imgs/app';
+	staticUrl='https://greath5.dev.gztjy.top/distribution/static/';
 // #endif
 
+// 打包用的
+if (node_dev =='development') { // 分销测试
+ // #ifdef MP
+ 	baseUrl='';
+ 	upFileUrl='';
+ 	staticUrl='';
+ // #endif
+ // #ifdef H5
+ 	baseUrl='https://greath5.dev.gztjy.top/serviceapi';
+ 	upFileUrl='h';
+ 	staticUrl='https://greath5.dev.gztjy.top/distribution/static/';
+ // #endif
+}
+if (node_dev =='production') { // 分销正式
+ // #ifdef MP
+ 	baseUrl='';
+ 	upFileUrl='';
+ 	staticUrl='';
+ // #endif
+ // #ifdef H5
+ 	baseUrl='https://h5.wdzzgs.com/serviceapi';
+ 	upFileUrl='';
+ 	staticUrl='https://h5.wdzzgs.com/distribution/static/';
+ // #endif
+}
 
 
 const commonConfig = {
 	wxAppid: '', // 测试wxAppid
+	appid: 'wx6490eaa0d20d2be2', // 公众号
+	redirectUri: encodeURIComponent('https://h5.wdzzgs.com/distribution/pages/login/index'), //
 	baseUrl: baseUrl, // 服务器地址
 	uploadFileUrl: upFileUrl, // 上传文件路径
 	staticUrl:staticUrl,

+ 42 - 67
common/request.js

@@ -1,5 +1,4 @@
 import { commonConfig } from '@/common/config.js';
-import {againToken}  from '../utils/againToken.js'
 import { showFullScreenLoading , tryHideFullScreenLoading } from '../utils/loading.js'
 let showModal = false;
 // 此vm参数为页面的实例,可以通过它引用vuex中的变量
@@ -31,71 +30,44 @@ module.exports = (vm) => {
 	})
 	
 	let unlogin = function(){
-		if(vm.vuex_user_info.userid&&vm.vuex_wechatOpenid) {
-			againToken(vm.$u,vm.vuex_wechatOpenid,vm.vuex_user_info.userid)
-		} else {
-			let pages = getCurrentPages();
-			let backUrl = pages[pages.length - 1].route;
-			let options =uni.$u.queryParams( pages[pages.length - 1].options);
-			let fullBackUrl = backUrl+options;
-			
-			// const backArr = ['productdetails'];//需要登录返回的页面
-			// const hasBackArr = backArr.some(backPage => backUrl.includes(backPage));
-			// if(hasBackArr){
-			// 	console.log('包含');
-			// 	uni.setStorage({
-			// 		key: 'backUrl',
-			// 		data: fullBackUrl,
-			// 		success: function () {
-			// 			// console.log('setStorage success');
-			// 		}
-			// 	});
-			// }else{
-			// 	console.log('不包含');
-			// 	uni.removeStorage({
-			// 		key: 'backUrl',
-			// 		success: function (res) {
-			// 			// console.log('success');
-			// 		}
-			// 	});
-			// }
-			uni.setStorage({
-				key: 'backUrl',
-				data: fullBackUrl,
-				success: function () {
-					// console.log('setStorage success');
-				}
-			});
-			tryHideFullScreenLoading()
-			if(showModal){return}
-			showModal = true;
-			uni.showModal({
-			  title: '提示',
-			  content: '你需要登录后,才可使用此功能!',
-			  success: res => {
-			    if (res.confirm) {
-			      uni.$u.route('/pages/login/login');
-			    }else{
-					uni.removeStorage({
-						key: 'backUrl',
-						success: function (res) {
-							// console.log('success');
-						}
-					});
-					let pages = getCurrentPages();
-					// console.log('pages',pages);
-					if(pages.length>1){
-						uni.navigateBack()
-					}
-				}
-			  },
-			  complete() {
-			  	showModal = false
-				uni.$u.vuex('vuex_member_info', {});
-			  }
-			})
-
-		}
+		let pages = getCurrentPages();
+		let backUrl = pages[pages.length - 1].route;
+		let options =uni.$u.queryParams( pages[pages.length - 1].options);
+		let fullBackUrl = backUrl+options;
+		uni.setStorageSync('backUrl',fullBackUrl);
+		tryHideFullScreenLoading()
+		uni.setStorageSync('lifeData',{}); // 清除缓存
+		uni.$u.vuex('vuex_user_info', {});
+		console.log("dfsfsdf")
+		uni.reLaunch({
+			url: "/pages/login/index"
+		})
+		// if(showModal){return}
+		// showModal = true;
+		// uni.showModal({
+		//   title: '提示',
+		//   content: '你需要登录后,才可使用此功能!',
+		//   success: res => {
+		//     if (res.confirm) {
+		//       uni.$u.route('/pages/login/index');
+		//     }else{
+		// 		uni.removeStorage({
+		// 			key: 'backUrl',
+		// 			success: function (res) {
+		// 				// console.log('success');
+		// 			}
+		// 		});
+		// 		let pages = getCurrentPages();
+		// 		// console.log('pages',pages);
+		// 		if(pages.length>1){
+		// 			uni.navigateBack()
+		// 		}
+		// 	}
+		//   },
+		//   complete() {
+		//   	showModal = false
+		//   }
+		// })
 	}
 	
 	// 响应拦截
@@ -109,9 +81,12 @@ module.exports = (vm) => {
 			console.log('data====',data);
 			// 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
 			if (custom.toast !== false) {
-				const unshowmsg = ['令牌不能为空'];
+				const unshowmsg = ['令牌不能为空','登录用户:null 不存在'];
 				if (!unshowmsg.includes(data.msg)) {
 				  uni.$u.toast(data.msg)
+				  
+				}else {
+					tryHideFullScreenLoading()
 				}
 				// uni.$u.toast(data.msg)
 			}

+ 58 - 2
components/customListItem/customListItem.vue

@@ -1,11 +1,67 @@
 <template>
 	<view>
-		<view>dfssfdgdsfg</view>
+		<view class="custom-list-item">
+			<view class="custom-list-item-left">
+				<text>{{ item && item.serialContent }}</text>
+				<text>{{ item && item.createTime }}</text>
+			</view>
+			<text 
+			class="custom-list-item-right"
+			:style="{color: item.serialType == 2 ?'#363636':'#EE0808' }">{{ item.serialType == 2 ?'-':'+' }} {{ item && item.balance }}</text>
+		</view>
 	</view>
 </template>
 
 <script>
+	export default {
+		props: {
+			item: {
+				type: Object,
+				default: () => {
+					return {
+						serialType: null,
+						balance: null,
+						serialContent: null,
+						createTime: null
+					}
+				}
+			}
+		},
+		
+	}
 </script>
 
-<style>
+<style lang="scss" scoped>
+	.custom-list-item {
+		width: 100%;
+		border-bottom: 2rpx solid #EEEEEE;
+		padding: 40rpx 10rpx;
+		box-sizing: border-box;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		.custom-list-item-left {
+			display: flex;
+			flex-direction: column;
+			font-family: SourceHanSansCN, SourceHanSansCN;
+			>text:nth-child(1) {
+				margin-bottom: 10rpx;
+				font-size: 28rpx;
+				font-weight: 400;
+				color: #363636;
+			}
+			>text:nth-child(2) {
+				font-size: 24rpx;
+				font-weight: 400;
+				color: #999999;
+			}
+		}
+		.custom-list-item-right {
+			font-size: 28rpx;
+			font-family: SourceHanSansCN, SourceHanSansCN;
+			font-weight: 400;
+			color: #363636;
+			white-space: nowrap;
+		}
+	}
 </style>

+ 45 - 9
components/customPromotionCode/customPromotionCode.vue

@@ -14,7 +14,8 @@
 			<!-- #endif -->
 			<!-- #ifdef H5 -->
 			<view class="promotion-code-info">
-				<canvas canvas-id="canvas" class="canvas"></canvas>
+				<canvas v-if="!posterSrc" canvas-id="canvas" class="canvas promotion-canvas"></canvas>
+				<image class="promotion-code-info-img" v-else :src="posterSrc"></image>
 			</view>
 			<!-- #endif -->
 			<view class="promotion-code-but" @click="saveImage()">
@@ -25,6 +26,7 @@
 </template>
 
 <script>
+import { nextTick } from "vue"
 	export default {
 		data() {
 			return {
@@ -45,7 +47,12 @@
 			initData(data) {
 				console.log(data)
 				this.show = true
-				this.getPoster()
+				this.performInfo.posterImg = data.posterImg
+				this.performInfo.appletQrcode = data.url
+				this.posterSrc = ''
+				this.$nextTick(()=>{
+					this.getCanvasInfo()
+				})
 			},
 			open() {
 				// console.log('open');
@@ -54,8 +61,17 @@
 				this.show = false
 				// console.log('close');
 			},
+			getCanvasInfo(){
+				let that = this
+				//.box获取class为box的元素,如果使用的id= 'box' 则使用'#box'
+				const query = uni.createSelectorQuery();
+				query.select('.promotion-canvas').boundingClientRect(data => {
+				  that.getPoster(data.width,data.height)
+				}).exec();
+			},
 			// 海报相关开始
-			getPoster(item) {
+			getPoster(w,h) {
+				console.log(w,h)
 				this.posterShow = true;
 				this.shareShow = false;
 
@@ -63,6 +79,7 @@
 				uni.showLoading({
 					title: '生成海报中'
 				});
+				
 				// 前端生成海报开始
 				let that = this;
 				const ctx = uni.createCanvasContext('canvas', this);
@@ -77,14 +94,14 @@
 						uni.getImageInfo({
 							src: this.performInfo.appletQrcode,
 							success: res2 => {
-								
+								console.log("res2===",res2)
 								const img2 = res2.path;
 
 								// 绘制海报背景图
-								ctx.drawImage(img1, 0, 0, 544, 988);
+								ctx.drawImage(img1, 0, 0, w, h);
 
 								// 绘制海报二维码
-								ctx.drawImage(img2, 10, 400, 100, 600);
+								ctx.drawImage(img2, w-80, h-80, 80, 80);
 
 								// 绘制完成后导出图片并显示
 								ctx.draw(false, () => {
@@ -130,10 +147,24 @@
 					url: this.posterSrc,
 					success(res) {
 						if (res.statusCode === 200) {
+							const systemInfo = uni.getSystemInfoSync(); // 调用 getSystemInfoSync() 函数获取系统信息
+							console.log(systemInfo); // 打印输出系统信息对象
+							if (systemInfo.ua.indexOf('MicroMessenger') != -1 ) {
+							    uni.showToast({
+							    	title: "微信浏览器不可下载,可长安图片保存",
+							    	icon: 'none',
+									duration: 4000
+							    })
+								return
+							}
 							// #ifdef MP
 								that.saveImageToPhotosAlbum(res)
 							// #endif
 							// #ifdef H5
+								var alink = document.createElement("a");
+								alink.href = res.tempFilePath;
+								alink.download = "pic"; //图片名
+								alink.click();
 								uni.showToast({
 									title: '下载成功',
 									icon: 'none'
@@ -148,11 +179,12 @@
 					},
 					fail(e) {
 						console.log('下载图片失败', e);
-						console.log('posterSrc', that.posterSrc);
+						uni.hideLoading();
 						uni.showToast({
 							title: '下载图片失败',
 							icon: 'none'
 						});
+						
 					}
 				});
 			},
@@ -213,13 +245,17 @@
 		flex-direction: column;
 		align-items: center;
 		.promotion-code-info {
-			width: 544rpx;
-			height: 988rpx;
+			width: 574rpx;
+			height: 1042rpx;
 			flex-shrink: 0;
 			.canvas {
 				width: 100%;
 				height: 100%;
 			}
+			.promotion-code-info-img {
+				width: 100%;
+				height: 100%;
+			}
 		}
 		.promotion-code-but {
 			margin-top: 40rpx;

+ 39 - 13
components/customScrollList/customScrollList.vue

@@ -23,9 +23,9 @@
                         <text class="pull-down-text" :style="[pullDownTextStyle]">{{ refreshStateText }}</text>
                     </view>
                 </view>
-                <view class="empty-wrap" v-if="showEmpty">
+                <view class="empty-wrap-me" v-if="showEmpty">
                     <slot name="empty" v-if="$slots.empty"></slot>
-                    <view class="empty-view" v-else>
+                    <view class="empty-view-me" v-else>
                         <image class="empty-image" :src="defaultOption.emptyImage || images.empty" mode="aspectFit"></image>
                         <text class="empty-text" :style="[emptyTextStyle]">{{ emptyText }}</text>
                     </view>
@@ -128,7 +128,10 @@ export default {
                 if (this.defaultOption.auto) this.load();
             });
         },
-        // 加载数据
+        /**
+		 * 加载数据
+		 * 
+		 */
         load() {
             if (this.defaultOption.disabled || this.loading || this.loadDisabled) return;
             // 开启正在加载
@@ -343,24 +346,41 @@ export default {
                 }, 100);
             }
         },
-        // 上拉触底事件
+        /**
+		 * 
+		 * 上拉触底事件 滚动触底
+		 * @param {Object} e
+		 */ 
         handleScrolltolower(e) {
             if (this.loadDisabled) return;
             this.$emit('scrolltolower', e);
+			// 
             this.load();
         },
-        // 滚动事件
+        /**
+		 * 滚动事件
+		 * @param {Object} event
+		 * 
+		 */
         handleScroll(event) {
             this.currentScrollTop = event.detail.scrollTop;
             this.$emit('scroll', event.detail);
         },
-        // 触摸按下处理
+        /**
+		 * 当手指触摸屏幕时触发;即使已经有一个手指放在了屏幕上也会触发。 
+		 * 触摸按下处理
+		 * @param {Object} event
+		 */
         handleTouchStart(event) {
             if (this.defaultOption.disabled) return;
             this.currentTouchStartY = event.touches[0].clientY;
             this.$emit('touchStart', event);
         },
-        // 触摸按下滑动处理
+        /**
+		 * 当手指在屏幕上滑动时连续地触发。在这个事件发生期间,调用preventDefault() 可以阻止滚动。
+		 * 触摸按下滑动处理
+		 * @param {Object} event
+		 */ 
         handleTouchMove(event) {
             if (this.defaultOption.disabled || this.currentScrollTop) return;
             if (event.touches[0].clientY >= this.currentTouchStartY) {
@@ -373,7 +393,12 @@ export default {
                 this.$emit('touchMove', event);
             }
         },
-        // 触摸松开处理
+        /**
+		 * 移动端
+		 * 当手指从屏幕上移开时触发
+		 * 触摸松开处理
+		 * @param {Object} event
+		 */
         handleTouchEnd(event) {
             if (this.defaultOption.disabled) return;
             // 当下拉高度小于下拉阈值
@@ -571,7 +596,7 @@ export default {
 };
 </script>
 
-<style scoped lang="scss">
+<style lang="scss" scoped>
 .scroll-list-wrap {
     box-sizing: border-box;
     .scroll-view {
@@ -613,7 +638,7 @@ export default {
                     }
                 }
             }
-            .empty-wrap {
+            .empty-wrap-me {
                 top: 0;
                 left: 0;
                 width: 100%;
@@ -621,10 +646,11 @@ export default {
                 display: flex;
                 position: absolute;
                 align-items: center;
+				justify-content: center;
                 flex-direction: column;
-                .empty-view {
+                .empty-view-me {
                     margin: auto;
-                    display: flex;
+                    display: flex !important;
                     align-items: center;
                     flex-direction: column;
                     .empty-image {
@@ -664,4 +690,4 @@ export default {
         }
     }
 }
-</style>
+</style>

+ 26 - 0
manifest.json

@@ -68,5 +68,31 @@
     "uniStatistics" : {
         "enable" : false
     },
+    "h5" : {
+        "devServer" : {
+            "proxy" : {
+                "/api" : {
+                    "disableHostCheck" : true,
+                    "target" : "https://greath5.dev.gztjy.top/serviceapi", //请求的目标域名
+                    "changeOrigin" : true,
+                    "secure" : false,
+                    "pathRewrite" : {
+                        //使用代理; 告诉他你这个连接要用代理
+                        "^/api" : ""
+                    }
+                }
+            },
+            "https" : false
+        },
+        "sdkConfigs" : {
+            "maps" : {}
+        },
+        "title" : "伟大转折",
+        "router" : {
+            "mode" : "history",
+            "base" : "/distribution/"
+        },
+        "template" : ""
+    },
     "vueVersion" : "2"
 }

+ 29 - 11
package.json

@@ -1,13 +1,31 @@
 {
-    "id": "scroll-list",
-    "name": "滚动列表【自动加载,上拉加载,下拉刷新,可自定义】",
-    "version": "1.1.0",
-    "description": "滚动列表【自动加载,上拉加载,下拉刷新,可自定义】",
-    "keywords": [
-        "自动加载",
-        "上拉加载",
-        "下拉刷新",
-        "可自定义",
-        "滚动"
-    ]
+	"id": "scroll-list",
+	"name": "滚动列表【自动加载,上拉加载,下拉刷新,可自定义】",
+	"version": "1.1.0",
+	"description": "滚动列表【自动加载,上拉加载,下拉刷新,可自定义】",
+	"keywords": [
+		"自动加载",
+		"上拉加载",
+		"下拉刷新",
+		"可自定义",
+		"滚动"
+	],
+	"uni-app": {
+	    "scripts": {
+	        "h5-weixin": { 
+	            "title":"分销测试",
+	            "env": {
+	              "UNI_PLATFORM": "h5",
+	              "H_NODE_ENV": "development"
+	            }
+	        },
+			"h5-weixin1": {
+			    "title":"分销正式",
+			    "env": {
+			      "UNI_PLATFORM": "h5",
+			      "H_NODE_ENV": "production"
+			    }
+			}
+	    }    
+	}
 }

+ 28 - 7
pages.json

@@ -3,6 +3,13 @@
 		"autoscan": true // 自动扫描组件
 	},
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+			"path": "pages/login/index",
+			"style": {
+				"navigationBarTitleText": "登录",
+				"navigationStyle": "custom"
+			}
+		},
 		{
 			"path": "pages/main/index",
 			"style": {
@@ -10,6 +17,13 @@
 				"navigationStyle": "custom"
 			}
 		},
+		{
+			"path": "pages/index/search",
+			"style": {
+				"navigationBarTitleText": "搜索",
+				"navigationStyle": "custom"
+			}
+		},
 		{
 			"path": "pages/cash/index",
 			"style": {
@@ -24,6 +38,20 @@
 				"navigationStyle": "custom"
 			}
 		},
+		{
+			"path": "pages/cashList/index",
+			"style": {
+				"navigationBarTitleText": "提现记录",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/cashPrompt/index",
+			"style": {
+				"navigationBarTitleText": "提现提示",
+				"navigationStyle": "custom"
+			}
+		},
 		{
 			"path": "pages/consume/index",
 			"style": {
@@ -51,13 +79,6 @@
 				"navigationBarTitleText": "设置密码",
 				"navigationStyle": "custom"
 			}
-		},
-		{
-			"path": "pages/login/index",
-			"style": {
-				"navigationBarTitleText": "登录",
-				"navigationStyle": "custom"
-			}
 		}
 	],
 	"globalStyle": {

+ 45 - 7
pages/balance/index.vue

@@ -16,7 +16,7 @@
 			<view class="balance-content-userinfo">
 				<view class="balance-content-userinfo-box">
 					<view class="balance-userinfo-info">
-						<view class="balance-userinfo-title"><text>张飞烤地瓜旅行社</text></view>
+						<view class="balance-userinfo-title"><text>{{ withdrawInfo && withdrawInfo.name }}</text></view>
 						<view class="balance-userinfo-count">
 							<!-- 余额 -->
 							<view 
@@ -31,7 +31,7 @@
 							</view>
 							<!-- 去提现 -->
 							<view class="balance-userinfo-cash">
-								<view @click="navigateToFun({url: '/pages/balance/index'})">去提现</view>
+								<view @click="navigateToFun({url: '/pages/cash/index'})">去提现</view>
 							</view>
 						</view>
 					</view>
@@ -57,13 +57,14 @@
 	export default {
 		data() {
 			return {
-				title: '这是我的',
+				title: '余额提现',
 				statusBarHeight: 0, // 状态栏安全距离
-				monry: 123456.789,
+				monry: 0,
 				tool: [ // 我的工具
-					{ title: "支付设置",icon: this.$commonConfig.staticUrl + 'balance/zhifu.png', url: '/pages/passwordSet/index' },
+					{ title: "支付设置",icon: this.$commonConfig.staticUrl + 'balance/zhifu.png', url: '/pages/passwordSet/index?type=1' },
 					{ title: "收支明细",icon: this.$commonConfig.staticUrl + 'balance/mingxi.png', url: '/pages/consume/index' },
-				]
+				],
+				withdrawInfo: {}
 			}
 		},
 		onLoad() {
@@ -71,6 +72,7 @@
 		},
 		onShow() {
 			this.statusBarHeight = getApp().globalData.statusBarHeight
+			this.getWithdrawInfo()
 		},
 		methods: {
 			/**
@@ -78,7 +80,24 @@
 			 * @data 2023-12-20
 			 */
 			navigateToFun(item){
-				navigateTo(item.url)
+				if(this.withdrawInfo.ifPaySet == 0 && item.url == '/pages/cash/index'){
+					uni.showModal({
+					  title: '提示',
+					  content: '请先设置密码!!!',
+					  success: res => {
+						  if(res.confirm){
+							  uni.navigateTo({
+							  	url: '/pages/passwordSet/index?type=0'
+							  });
+						  }
+					  },
+					  complete() {
+					  	
+					  }
+					})
+				}else {
+					navigateTo(item.url)
+				}
 			},
 			/**
 			 * 数字显示格式化
@@ -90,6 +109,25 @@
 				}else if(num>100000){
 					return (num/10000).toFixed(2)
 				}
+			},
+			/**
+			 * 获取数据
+			 */
+			async getWithdrawInfo() {
+				try{
+					let res = await this.$u.api.withdrawInfo({
+						noSign: 1,
+						userid: this.vuex_user_info.userId
+					})
+					
+					if(res && res.code ===200) {
+						this.withdrawInfo = res.data
+						this.monry = res.data.brokerageTotal
+					} 
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+				}
 			}
 		}
 	}

+ 346 - 63
pages/cash/index.vue

@@ -2,15 +2,10 @@
 	<view class="cash-content" :style="{'--status-bar-': statusBarHeight}">
 		<view class="cash-content-info">
 			<!-- 头部主要内容 开始 -->
-			<view class="cash-content-header">	
-				<customNavbar 
-				title="余额提现" 
-				bgColor="rgba(0,0,0,0)"
-				:customNavbarInfo="{}"
-				:contentStyle="{}"
-				:leftStyle="{color: '#fff'}"
-				></customNavbar>
-				
+			<view class="cash-content-header">
+				<customNavbar title="余额提现" bgColor="rgba(0,0,0,0)" :customNavbarInfo="{}" :contentStyle="{}"
+					:leftStyle="{color: '#fff'}"></customNavbar>
+
 				<!--  余额 开始  -->
 				<view class="cash-content-money">
 					<text>可提现余额(元)</text>
@@ -23,7 +18,7 @@
 					</view>
 				</view>
 				<!--  余额 结束  -->
-				
+
 				<!--  提现 开始  -->
 				<view class="cash-content-cash">
 					<view class="cash-content-cash-box">
@@ -31,99 +26,135 @@
 						<view class="cash-content-cash-money">
 							<text class="cash-content-cash-money-icon">¥</text>
 							<view class="cash-content-cash-input">
-								<u--input
-								    placeholder="请输入内容"
-								    border="none"
-									clearable
-								    v-model="moneyValue"
-								  ></u--input>
+								<u--input placeholder="请输入内容" border="none" clearable type="number" v-model="moneyValue"
+									@change="moneyAccountFun"></u--input>
 							</view>
-							
+
 							<text class="cash-content-cash-money-all" @click="cashAll()">全部提现</text>
 						</view>
+
+						<view class="cash-content-cash-service">
+							<view>
+								<text>服务费</text>
+								<text>{{ setServiceType(withdrawInfo)}}</text>
+							</view>
+							<view>
+								<text>到账金额</text>
+								<text>{{ moneyAccount }}</text>
+							</view>
+						</view>
+
 						<view class="cash-content-cash-card">
 							<u-cell-group :border="false">
-								<u-cell 
-								:border="false" 
-								title="个人设置"
-								isLink
-								:value="'中国银行'"
-								@click="openPopup()"
-								 ></u-cell>
+								<u-cell :border="false" title="提现至" :isLink="false" :value="'微信钱包'"
+									@click="openPopup()"></u-cell>
 							</u-cell-group>
 						</view>
-						
+
 						<view class="cash-content-cash-submit">
-							<view>提现</view>
+							<view @click="openModal">提现</view>
 						</view>
 					</view>
 				</view>
 				<!--  提现 结束  -->
-				
+
 				<!-- 选择银行卡 -->
-				<u-picker 
-				:show="show" 
-				keyName="label" 
-				:columns="columns"
-				@cancel="cancelPicker"
-				@confirm="confirmPicker"
-				></u-picker>
+				<u-picker :show="show" keyName="label" :columns="columns" @cancel="cancelPicker"
+					@confirm="confirmPicker"></u-picker>
 			</view>
 			<!-- 头部主要内容 结束 -->
+
+			<!-- 输入密码  -->
+			<u-overlay :show="showModal">
+				<view class="password-model">
+					<view>
+						<view>请输入支付密码</view>
+						<view>提现</view>
+						<view>¥{{ moneyValue }}</view>
+						<view>
+							<u-code-input @finish="marketPersons" v-model="password" :focus="true"></u-code-input>
+						</view>
+						<text @click="clearOverlay"><u-icon name="close-circle" size="30"></u-icon></text>
+					</view>
+				</view>
+			</u-overlay>
 		</view>
 	</view>
 </template>
 
 <script>
-	import { navigateTo } from "@/utils/util.js"
+	import {
+		navigateTo
+	} from "@/utils/util.js"
 	export default {
 		data() {
 			return {
 				title: '这是我的',
 				statusBarHeight: 0, // 状态栏安全距离
-				monry: 123456.789,
+				monry: 0,
 				moneyValue: null,
+				moneyAccount: '',
 				tool: [ // 我的工具
-					{ title: "支付设置",icon: this.$commonConfig.staticUrl + 'balance/zhifu.png', url: '/pages/invitationStatistics/index' },
-					{ title: "余额提现",icon: this.$commonConfig.staticUrl + 'balance/mingxi.png', url: '/pages/balance/index' },
+					{
+						title: "支付设置",
+						icon: this.$commonConfig.staticUrl + 'balance/zhifu.png',
+						url: '/pages/invitationStatistics/index'
+					},
+					{
+						title: "余额提现",
+						icon: this.$commonConfig.staticUrl + 'balance/mingxi.png',
+						url: '/pages/balance/index'
+					},
 				],
 				show: false,
 				columns: [
-                    [{
-                        label: '雪月夜',
-                        // 其他属性值
-                        id: 2021
-                        // ...
-                    }, {
-                        label: '冷夜雨',
-                        id: 804
-                    }]
-                ]
+					[{
+						label: '雪月夜',
+						// 其他属性值
+						id: 2021
+						// ...
+					}, {
+						label: '冷夜雨',
+						id: 804
+					}]
+				],
+				withdrawInfo: {},
+				showModal: false,
+				password: ''
 			}
 		},
 		onLoad() {
-
+			// #ifdef H5
+			window.addEventListener('popstate', this.browserBack)
+			// #endif
+		},
+		onUnload() {
+			// #ifdef H5
+			window.removeEventListener("popstate", this.browserBack);
+			// #endif
 		},
 		onShow() {
 			this.statusBarHeight = getApp().globalData.statusBarHeight
+			this.getWithdrawInfo()
+
 		},
 		methods: {
 			/**
 			 * @author ygh
 			 * @data 2023-12-20
 			 */
-			navigateToFun(){
+			navigateToFun() {
 				navigateTo('/pages/cash/index')
 			},
 			/**
 			 * 数字显示格式化
 			 *
 			 */
-			numFormat(num=0) {
-				if(num<100000) {
+			numFormat(num = 0) {
+				if (num < 100000) {
 					return num
-				}else if(num>100000){
-					return (num/10000).toFixed(2)
+				} else if (num > 100000) {
+					return (num / 10000).toFixed(2)
 				}
 			},
 			/**  全部提现  */
@@ -134,6 +165,7 @@
 			 *  打开选择器
 			 */
 			openPopup() {
+				return
 				this.show = true
 			},
 			/** 取消选择器  */
@@ -144,6 +176,164 @@
 			confirmPicker() {
 				this.show = false
 			},
+			/**
+			 * 获取数据
+			 */
+			async getWithdrawInfo() {
+				try {
+					let res = await this.$u.api.withdrawInfo({
+						noSign: 1,
+						userid: this.vuex_user_info.userId
+					})
+
+					if (res && res.code === 200) {
+						this.withdrawInfo = res.data
+						// this.withdrawInfo.serviceType = 1
+						// this.withdrawInfo.serviceCharge = 0
+						this.monry = res.data.withdrawTotal
+					}
+				} catch (e) {
+					//TODO handle the exception
+					console.error("e===", e)
+				}
+			},
+			openModal() {
+				if (!this.moneyValue || this.moneyValue < this.withdrawInfo.minAmount) {
+					uni.showToast({
+						title: '最小提现金额' + this.withdrawInfo.minAmount,
+						icon: 'none'
+					});
+					return
+				}
+				if(this.moneyValue > this.monry) {
+					uni.showToast({
+						title: '总金额不能大于用户可提现金额',
+						icon: 'none'
+					});
+					return
+				}
+				// uni.showModal({
+				//   title: '提示',
+				//   content: '确定提现余额吗?',
+				//   success: res => {
+				//     this.orderWithdraw()
+				//   },
+				//   complete() {
+
+				//   }
+				// })
+				this.showModal = true
+				// #ifdef H5
+				window.history.replaceState(null, null, document.URL)
+				// #endif
+			},
+			/**  关闭 */
+			clearOverlay() {
+				this.showModal = false
+			},
+			/**
+			 * 密码校验
+			 */
+			async marketPersons() {
+				try {
+					let res = await this.$u.api.marketPersons({
+						noSign: 1,
+						userid: this.vuex_user_info.userId,
+						oldPassword: this.password
+					})
+
+					if (res && res.code === 200) {
+						this.orderWithdraw()
+					} else {
+						this.password = ''
+					}
+				} catch (e) {
+					//TODO handle the exception
+					console.error("e===", e)
+					this.password = ''
+				}
+			},
+			/**
+			 * 提交申请
+			 */
+			async orderWithdraw() {
+				try {
+					let res = await this.$u.api.orderWithdraw({
+						noSign: 1,
+						userid: this.vuex_user_info.userId,
+						"withdrawType": "wechat",
+						"withdrawTotal": this.moneyValue,
+						"serviceAmount": 1,
+						"bankId": null
+					})
+
+					if (res && res.code === 200) {
+						navigateTo('pages/cashPrompt/index',{
+							id: res.data.bankInfo.id,
+							// ...res.data.bankInfo,
+							// moneyValue: this.moneyValue,
+							// withdrawType: 'wechat',
+							// serviceType: this.withdrawInfo.serviceType,
+							// serviceCharge: this.withdrawInfo.serviceCharge
+						})
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						})
+					}
+					this.showModal = false
+				} catch (e) {
+					//TODO handle the exception
+					console.error("e===", e)
+					this.showModal = false
+					uni.showToast({
+						title: "提交失败",
+						icon: 'none'
+					})
+				}
+			},
+			/**
+			 * 设置服务费显示
+			 */
+			setServiceType(data) {
+				if (data && data.serviceType) {
+					return data.serviceType == 1 ? ('¥' + data.serviceCharge) : data.serviceCharge
+				}
+			},
+			/**
+			 * 设置到账金额
+			 */
+			moneyAccountFun() {
+				let money = ''
+				if (this.withdrawInfo.serviceType == 1) {
+					money = this.moneyValue - (isNaN(this.withdrawInfo.serviceCharge) ? 0 : this.withdrawInfo
+						.serviceCharge)
+				} else if (this.withdrawInfo.serviceType == 2) {
+					let num1 = this.withdrawInfo.serviceCharge.replace("%", '')
+					let num = isNaN(num1) ? 0 : (Number(num1) / 100)
+					money = num ? this.moneyValue * num : Number(this.moneyValue)
+				}
+				this.moneyAccount = money < 0 ? '金额过小于零' : '¥' + money.toFixed(2)
+			},
+			browserBack() {
+				console.log(1);
+				// 在这里写弹框
+				uni.showModal({
+					title: '提示',
+					content: '返回后此页面的操作将不作保留!',
+					cancelText: '确定返回',
+					confirmText: '留在此页',
+					success: (res) => {
+						if (res.confirm) {
+							// 用户选择留在此页,不进行任何操作
+						} else if (res.cancel) {
+							window.history.back(); // 使用window.history.back()返回上一页
+						}
+					}
+				});
+				window.history.replaceState(null, null, document.URL); // 保留此行代码
+			},
 		}
 	}
 </script>
@@ -154,12 +344,14 @@
 		flex-direction: column;
 		align-items: center;
 		justify-content: center;
-		--header-h: 580rpx;
+		--header-h: 620rpx;
+
 		.cash-content-info {
 			width: 100%;
 			box-sizing: border-box;
 		}
 	}
+
 	/** 头部主要内容 开始 */
 	.cash-content-header {
 		width: 100%;
@@ -167,13 +359,15 @@
 		box-sizing: border-box;
 		background: var(--gd-bgm-lg-color);
 		position: relative;
+
 		::v-deep .u-search {
 			padding: 0 30rpx !important;
 		}
+
 		::v-deep .u-search__action {
 			color: #fff !important;
 		}
-		
+
 		/**  余额 开始  */
 		.cash-content-money {
 			width: 100%;
@@ -181,34 +375,39 @@
 			margin-top: 50rpx;
 			padding-left: 66rpx;
 			color: #fff;
+
 			>text {
 				font-size: 24rpx;
 			}
+
 			.cash-content-money-num {
 				display: flex;
 				justify-content: center;
 				align-items: flex-start;
 				flex-direction: column;
 				margin-top: 24rpx;
-				> text:nth-child(1) {
+
+				>text:nth-child(1) {
 					.balance-userinfo-util {
 						font-size: 24rpx;
 						margin-left: 5rpx;
 					}
+
 					::v-deep .u-count-num {
 						font-weight: bold !important;
 						font-size: 48rpx !important;
 					}
 				}
-				> text:nth-child(2) {
+
+				>text:nth-child(2) {
 					margin-top: 20rpx;
 					font-size: 24rpx;
 				}
 			}
 		}
-		
+
 		/**  余额 结束  */
-		
+
 		/**  提现 开始  */
 		.cash-content-cash {
 			width: 100%;
@@ -217,51 +416,80 @@
 			top: 100%;
 			transform: translateY(-50%);
 			padding: 0 12rpx;
+
 			.cash-content-cash-box {
 				width: 100%;
 				height: 100%;
 				background-color: #fff;
-				box-shadow: 0rpx 2rpx 12rpx 0rpx rgba(221,221,221,0.5);
+				box-shadow: 0rpx 2rpx 12rpx 0rpx rgba(221, 221, 221, 0.5);
 				border-radius: 20rpx;
 				box-sizing: border-box;
 				padding: 34rpx 30rpx 38rpx;
+
 				>text {
 					font-size: 28rpx;
 					color: #363636;
 				}
+
 				.cash-content-cash-money {
 					width: 100%;
 					display: flex;
 					align-items: center;
 					padding: 40rpx 0 20rpx;
 					border-bottom: 2rpx solid #EEEEEE;
+
 					::v-deep .u-cell__body {
 						padding: 20rpx 0 !important;
 					}
+
 					.cash-content-cash-input {
 						width: 100%;
 						padding: 0 10rpx;
 					}
+
 					>text {
 						flex-shrink: 0;
 						flex-wrap: nowrap;
 						white-space: nowrap;
 					}
+
 					.cash-content-cash-money-icon {
 						font-size: 32rpx;
 					}
+
 					.cash-content-cash-money-all {
 						color: var(--gd-but-color);
 						font-size: 24rpx;
 						cursor: pointer;
 					}
 				}
+
+				.cash-content-cash-service {
+					width: 100%;
+					box-sizing: border-box;
+					padding: 20rpx 0;
+					border-bottom: 2rpx solid #EEEEEE;
+
+					>view {
+						width: 100%;
+						display: flex;
+						justify-content: space-between;
+						align-items: center;
+						color: #606060;
+						padding: 5rpx 0 10rpx;
+						font-size: 24rpx;
+					}
+
+				}
+
 				.cash-content-cash-card {
 					width: 100%;
+
 					::v-deep .u-cell__body {
 						padding: 20rpx 0 !important;
 					}
 				}
+
 				.cash-content-cash-submit {
 					width: 100%;
 					height: 92rpx;
@@ -271,6 +499,7 @@
 					box-sizing: border-box;
 					padding: 0 80rpx 0;
 					margin-top: 70rpx;
+
 					>view {
 						width: 100%;
 						height: 100%;
@@ -286,8 +515,62 @@
 				}
 			}
 		}
+
 		/**  提现 结束  */
 	}
+
 	/** 头部主要内容 结束  **/
-	
-</style>
+
+
+	/**  密码弹窗  */
+	.password-model {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		box-sizing: border-box;
+		padding: 0 40rpx;
+
+		>view {
+			width: 100%;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			flex-direction: column;
+			background-color: #fff;
+			color: #000;
+			padding: 50rpx 10rpx;
+			box-sizing: border-box;
+			position: relative;
+			border-radius: 20rpx;
+
+			>view {
+				font-size: 32rpx;
+				padding: 10rpx 0;
+				box-sizing: border-box;
+			}
+
+			>view:nth-child(3) {
+				width: 100%;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				font-size: 52rpx;
+				border-bottom: 2rpx solid #ccc;
+				padding: 10rpx 0 20rpx;
+				color: var(--gd-bgm-color);
+			}
+
+			>view:nth-child(4) {
+				margin-top: 30rpx;
+			}
+
+			>text {
+				position: absolute;
+				top: 0;
+				right: 0;
+			}
+		}
+	}
+</style>

+ 474 - 0
pages/cashList/index.vue

@@ -0,0 +1,474 @@
+<template>
+	<view class="consume-content" :style="{'--status-bar-': statusBarHeight}">
+		<view class="consume-content-info">
+			<!-- 头部主要内容 开始 -->
+			<view class="consume-content-header">
+				<customNavbar title="收支明细" bgColor="var(--gd-bgm-color)" :customNavbarInfo="{}" :contentStyle="{}"
+					:leftStyle="{color: '#fff'}"></customNavbar>
+				<!--  tab 开始 -->
+				<u-tabs 
+				:list="list1" 
+				@click="clickTabs" 
+				lineColor="var(--gd-bgm-color)"
+				:activeStyle="{ color: 'rgba(127, 127, 127, 1)' }"
+				:inactiveStyle="{ color: 'rgba(127, 127, 127, 1)' }"
+				:scrollable="false"
+				></u-tabs>
+				<!--  tab 结束 -->
+			</view>
+			<!-- 头部主要内容 结束 -->
+			
+			<!--  收支列表 开始  -->
+			<view class="consume-content-list">
+				<customScrollList
+				ref="customScrollList" 
+				@load="load"
+				@paging="paging"
+				@refresh="refresh"
+				 >
+					<view v-if="orderWithdrawList.length>0" style="width: 100%;padding: 0 30rpx;box-sizing: border-box;">
+						<view v-for="(item,index) in orderWithdrawList" :key="index">
+							<view class="custom-list-item">
+								<view class="custom-list-item-left">
+									<text>申请状态:{{ withdrawStatus(item.status) }}</text>
+									<text>提现类型:{{ withdrawType(item.withdrawType)  }}</text>
+									<text>支付方式:{{ payWay(item.payWay) }}</text>
+									<text>支付状态:{{ payStatus(item.payStatus) }}</text>
+									<text>手续费:{{ item && item.servicePrice }}</text>
+									<text>提现时间:{{ item && item.createTime }}</text>
+								</view>
+								<text 
+								class="custom-list-item-right">{{ item.withdrawPrice }}</text>
+							</view>
+						</view>
+					</view>
+				</customScrollList>
+			</view>
+			<!--  收支列表 结束  -->
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		navigateTo
+	} from "@/utils/util.js"
+	export default {
+		data() {
+			return {
+				title: '收支明细',
+				statusBarHeight: 0, // 状态栏安全距离
+				monry: 123456.789,
+				moneyValue: null,
+				tool: [ // 我的工具
+					{
+						title: "支付设置",
+						icon: this.$commonConfig.staticUrl + 'balance/zhifu.png',
+						url: '/pages/invitationStatistics/index'
+					},
+					{
+						title: "余额提现",
+						icon: this.$commonConfig.staticUrl + 'balance/mingxi.png',
+						url: '/pages/balance/index'
+					},
+				],
+				list1: [
+					{
+						name: '全部',
+						key: '',
+					}, 
+					{
+						name: '提现中',
+						key: 0,
+					},
+					{
+						name: '提现成功',
+						key: 1,
+					},
+					{
+						name: '提现失败',
+						key: 2,
+					}
+				],
+				serialType: '',
+				orderWithdrawList: []
+			}
+		},
+		onLoad() {
+
+		},
+		onShow() {
+			this.statusBarHeight = getApp().globalData.statusBarHeight
+		},
+		methods: {
+			/**
+			 * @author ygh
+			 * @data 2023-12-20
+			 */
+			navigateToFun() {
+				navigateTo('/pages/cash/index')
+			},
+			/**
+			 * 数字显示格式化
+			 *
+			 */
+			numFormat(num = 0) {
+				if (num < 100000) {
+					return num
+				} else if (num > 100000) {
+					return (num / 10000).toFixed(2)
+				}
+			},
+			/**
+			 * 选择tabs
+			 */
+			clickTabs(item) {
+				console.log('item', item);
+				if(this.serialType == item.key) return
+				this.serialType = item.key
+				this.$refs.customScrollList.refresh()
+			},
+			/**
+			 * 获取数据
+			 */
+			async load(paging) {
+				try{
+					this.$refs.customScrollList.showPullUp = true
+					let res = await this.$u.api.orderWithdrawList({
+						noSign: 1,
+						userid: this.vuex_user_info.userId,
+						pageNum: 1,
+						pageSize: 10,
+						serialType: this.serialType
+					})
+					
+					if(res && res.code ===200) {
+						if(res.data.rows){
+							this.orderWithdrawList = this.orderWithdrawList.concat(res.data.rows)
+						}else {
+							this.orderWithdrawList = []
+						}
+						this.$refs.customScrollList.loadSuccess({
+							list: this.orderWithdrawList,
+							total: this.orderWithdrawList.length
+						})
+					} else {
+						this.$refs.customScrollList.loadSuccess({
+							list: [],
+							total: res.data.total || this.orderWithdrawList.length
+						})
+					}
+					
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.$refs.customScrollList.loadSuccess({
+						list: [],
+						total: res.data.total || this.orderWithdrawList.length
+					})
+				}
+			},
+			paging(paging){
+				console.log("下拉  加载数据")
+			},
+			/**
+			 * 下拉触底
+			 */
+			async refresh(paging){
+				console.log("上拉  加载数据")
+				//this.$refs.customScrollList.showEmpty = true
+				try{
+					//this.$refs.customScrollList.showPullUp = true
+					let res = await this.$u.api.orderWithdrawList({
+						pageNum: paging.page,
+						pageSize: paging.size
+					})
+					if(res && res.code ===200) {
+						if(res.data.performList){
+							this.orderWithdrawList = [].concat(res.data.performList)
+						}else {
+							this.orderWithdrawList = []
+						}
+						// this.orderWithdrawList = null
+						this.$refs.customScrollList.refreshSuccess({
+							list: this.orderWithdrawList,
+							total: this.orderWithdrawList.length
+						})
+					} else {
+						this.$refs.customScrollList.refreshSuccess({
+							list: [],
+							total: res.data.total || this.orderWithdrawList.length
+						})
+					}
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.$refs.customScrollList.refreshSuccess({
+						list: [],
+						total: res.data.total || this.orderWithdrawList.length
+					})
+				}
+			},
+			/**
+			 * 支付方式
+			 */
+			payWay(type){
+				let src = ''
+				switch(type) {
+					case 'cahsh': src="现金"; break;
+					case 'wecaht.applet': src="微信小程序支付"; break;
+					case 'alipay': src="支付宝"; break;
+				}
+				return src
+			},
+			/**
+			 * 支付状态
+			 */
+			payStatus(type){
+				let src = ''
+				switch(type) {
+					case '0': src="未支付"; break;
+					case '1': src="已支付"; break;
+					case '2': src="支付中"; break;
+					case '3': src="支付失败"; break;
+					case '4': src="支付退款"; break;
+				}
+				return src
+			},
+			/**
+			 * 提现方式
+			 */
+			withdrawType(type){
+				let src = ''
+				switch(type) {
+					case 'wechat': src="微信零钱"; break;
+					case 'bank': src="银行卡"; break;
+				}
+				return src
+			},
+			/**
+			 * 申请状态
+			 */
+			withdrawStatus(type){
+				let src = ''
+				switch(type) {
+					case '0': src="申请中"; break;
+					case '1': src="提现成功"; break;
+					case '2': src="提现失败"; break;
+				}
+				return src
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.consume-content {
+		width: 100%;
+		height: 100%;
+		--header-h: 90rpx;
+
+		.consume-content-info {
+			width: 100%;
+			height: 100%;
+			display: flex;
+			flex-direction: column;
+			box-sizing: border-box;
+		}
+	}
+
+	/** 头部主要内容 开始 */
+	.consume-content-header {
+		width: 100%;
+		//height: var(--header-h);
+		box-sizing: border-box;
+		position: relative;
+
+		::v-deep .u-search {
+			padding: 0 30rpx !important;
+		}
+
+		::v-deep .u-search__action {
+			color: #fff !important;
+		}
+
+		/**  余额 开始  */
+		.consume-content-money {
+			width: 100%;
+			box-sizing: border-box;
+			margin-top: 50rpx;
+			padding-left: 66rpx;
+			color: #fff;
+
+			>text {
+				font-size: 24rpx;
+			}
+
+			.consume-content-money-num {
+				display: flex;
+				justify-content: center;
+				align-items: flex-start;
+				flex-direction: column;
+				margin-top: 24rpx;
+
+				>text:nth-child(1) {
+					.balance-userinfo-util {
+						font-size: 24rpx;
+						margin-left: 5rpx;
+					}
+
+					::v-deep .u-count-num {
+						font-weight: bold !important;
+						font-size: 48rpx !important;
+					}
+				}
+
+				>text:nth-child(2) {
+					margin-top: 20rpx;
+					font-size: 24rpx;
+				}
+			}
+		}
+
+		/**  余额 结束  */
+
+		/**  提现 开始  */
+		.consume-content-cash {
+			width: 100%;
+			box-sizing: border-box;
+			position: absolute;
+			top: 100%;
+			transform: translateY(-50%);
+			padding: 0 12rpx;
+
+			.consume-content-consume-box {
+				width: 100%;
+				height: 100%;
+				background-color: #fff;
+				box-shadow: 0rpx 2rpx 12rpx 0rpx rgba(221, 221, 221, 0.5);
+				border-radius: 20rpx;
+				box-sizing: border-box;
+				padding: 34rpx 30rpx 38rpx;
+
+				>text {
+					font-size: 28rpx;
+					color: #363636;
+				}
+
+				.consume-content-consume-money {
+					width: 100%;
+					display: flex;
+					align-items: center;
+					padding: 40rpx 0 20rpx;
+					border-bottom: 2rpx solid #EEEEEE;
+
+					::v-deep .u-cell__body {
+						padding: 20rpx 0 !important;
+					}
+
+					.consume-content-consume-input {
+						width: 100%;
+						padding: 0 10rpx;
+					}
+
+					>text {
+						flex-shrink: 0;
+						flex-wrap: nowrap;
+						white-space: nowrap;
+					}
+
+					.consume-content-consume-money-icon {
+						font-size: 32rpx;
+					}
+
+					.consume-content-consume-money-all {
+						color: var(--gd-but-color);
+						font-size: 24rpx;
+						cursor: pointer;
+					}
+				}
+
+				.consume-content-consume-card {
+					width: 100%;
+
+					::v-deep .u-cell__body {
+						padding: 20rpx 0 !important;
+					}
+				}
+
+				.consume-content-consume-submit {
+					width: 100%;
+					height: 92rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					box-sizing: border-box;
+					padding: 0 80rpx 0;
+					margin-top: 70rpx;
+
+					>view {
+						width: 100%;
+						height: 100%;
+						border-radius: 46rpx;
+						color: #fff;
+						background-color: var(--gd-but-color);
+						font-size: 28rpx;
+						font-family: SourceHanSansCN, SourceHanSansCN;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+					}
+				}
+			}
+		}
+
+		/**  提现 结束  */
+	}
+
+	/** 头部主要内容 结束  **/
+	
+	/** 收支列表 开始  */
+	.consume-content-list {
+		width: 100%;
+		height: 100%;
+		background: #F7F7F9;
+		// overflow: hidden;
+		>view {
+			width: 100%;
+		}
+	}
+	
+	.custom-list-item {
+		width: 100%;
+		border-bottom: 2rpx solid #EEEEEE;
+		padding: 40rpx 10rpx;
+		box-sizing: border-box;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		.custom-list-item-left {
+			display: flex;
+			flex-direction: column;
+			font-family: SourceHanSansCN, SourceHanSansCN;
+			>text {
+				margin-bottom: 10rpx;
+				font-size: 28rpx;
+				font-weight: 400;
+				color: #363636;
+			}
+			>text:last-child {
+				font-size: 24rpx;
+				font-weight: 400;
+				color: #999999;
+			}
+		}
+		.custom-list-item-right {
+			font-size: 28rpx;
+			font-family: SourceHanSansCN, SourceHanSansCN;
+			font-weight: 400;
+			color: #363636;
+			white-space: nowrap;
+		}
+	}
+	/** 收支列表 结束  */
+</style>

+ 177 - 0
pages/cashPrompt/index.vue

@@ -0,0 +1,177 @@
+<template>
+	<view class="inspage-content" :style="{'--status-bar-': statusBarHeight}">
+		<view class="inspage-content-info">
+			<!-- 头部主要内容 开始 -->
+			<view class="inspage-content-header">	
+				<customNavbar 
+				title="提示" 
+				bgColor="var(--gd-bgm-color)"
+				:contentStyle="{ color: '#fff' }"
+				:left-style="{ color: '#fff' }"
+				></customNavbar>
+			</view>
+			<!-- 头部主要内容 结束 -->
+			
+			<!-- userInfo内容 开始 -->
+			
+			<view class="inspage-content-userinfo">
+				<text>{{ withdrawStatus(retailStatistics.status) }}</text>
+				<text>¥2000</text>
+				<view>
+					<view>
+						<text>服务费</text>
+						<text>¥{{ retailStatistics && retailStatistics.servicePrice }}</text>
+					</view>
+					<view>
+						<text>到账账户</text>
+						<text>{{ withdrawType(retailStatistics.withdrawType) }}</text>
+					</view>
+				</view>
+			</view>
+			<!-- userInfo内容 结束 -->
+		</view>
+	</view>
+</template>
+
+<script>
+	import { navigateTo } from "@/utils/util.js"
+	export default {
+		data() {
+			return {
+				title: '提示',
+				statusBarHeight: 0, // 状态栏安全距离
+				tool: [ // 我的工具
+					{ title: "邀请总人数",num: 0,decimals:0 },
+					{ title: "待核销",num: 0,decimals:2 },
+					{ title: "已核销",num: 0,decimals:2 },
+				],
+				retailStatistics: {}, // 统计信息
+				params: {}
+			}
+		},
+		onLoad(e) {
+			this.params = e
+		},
+		onShow() {
+			this.statusBarHeight = getApp().globalData.statusBarHeight
+			this.orderWithdrawSelectById()
+		},
+		methods: {
+			/**
+			 * @author ygh
+			 * @data 2023-12-20
+			 */
+			navigateToFun(item){
+				navigateTo(item.url)
+			},
+			/**
+			 * 数字显示格式化
+			 *
+			 */
+			numFormat(num=0) {
+				if(num<100000) {
+					return num
+				}else if(num>100000){
+					return (num/10000).toFixed(2)
+				}
+			},
+			/** 获取数据 */
+			async orderWithdrawSelectById(){
+				try{
+					let res = await this.$u.api.orderWithdrawSelectById({
+						noSign: 1,
+						userid: this.vuex_user_info.userId,
+						id: this.params.id
+					})
+					
+					if(res && res.code ===200) {
+						this.retailStatistics = res.data
+					} 
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+				}
+			},
+			withdrawType(type){
+				let src = ''
+				switch(type) {
+					case 'wechat': src="微信零钱"; break;
+					case 'bank': src="银行卡"; break;
+				}
+				return src
+			},
+			/**
+			 * 申请状态
+			 */
+			withdrawStatus(type){
+				let src = ''
+				switch(type) {
+					case '0': src="正在提现,请耐心等待!"; break;
+					case '1': src="提现成功!"; break;
+					case '2': src="提现失败!"; break;
+				}
+				return src
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.inspage-content {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		--header-h: 90rpx;
+		.inspage-content-info {
+			width: 100%;
+			box-sizing: border-box;
+		}
+	}
+	/** 头部主要内容 开始 */
+	.inspage-content-header {
+		width: 100%;
+		height: var(--header-h);
+		box-sizing: border-box;
+		::v-deep .u-search {
+			padding: 0 30rpx !important;
+		}
+		::v-deep .u-search__action {
+			color: #fff !important;
+		}
+	}
+	/** 头部主要内容 结束  **/
+	
+	/** userInfo内容 开始 */
+	.inspage-content-userinfo {
+		width: 100%;
+		padding: 24rpx 40rpx 0;
+		box-sizing: border-box;
+		>text {
+			width: 100%;
+			display: flex;
+			justify-content: center;
+		}
+		>text:nth-child(1) {
+			padding: 50rpx 0 100rpx;
+			font-size: 32rpx;
+		}
+		>text:nth-child(2) {
+			padding: 50rpx 0 100rpx;
+			color: var(--gd-bgm-color);
+			font-size: 52rpx;
+		}
+		>view {
+			padding-top: 50rpx;
+			color: #606060;
+			font-size: 24rpx;
+			>view {
+				padding-bottom: 20rpx;
+				width: 100%;
+				display: flex;
+				justify-content: space-between;
+			}
+		}
+	}
+	/** userInfo内容 结束  **/
+</style>

+ 104 - 7
pages/consume/index.vue

@@ -20,9 +20,16 @@
 			
 			<!--  收支列表 开始  -->
 			<view class="consume-content-list">
-				<mescroll-body class="" style="width: 100%;height: 100%;min-height: unset;" ref="mescrollRef">
-					<customListItem v-for="(item,index) in 200" />
-				</mescroll-body>
+				<customScrollList
+				ref="customScrollList" 
+				@load="load"
+				@paging="paging"
+				@refresh="refresh"
+				 >
+					<view v-if="marketPersonsSerialList.length>0" style="width: 100%;padding: 0 30rpx;box-sizing: border-box;">
+						<customListItem :item="item" v-for="(item,index) in marketPersonsSerialList" />
+					</view>
+				</customScrollList>
 			</view>
 			<!--  收支列表 结束  -->
 		</view>
@@ -36,7 +43,7 @@
 	export default {
 		data() {
 			return {
-				title: '这是我的',
+				title: '收支明细',
 				statusBarHeight: 0, // 状态栏安全距离
 				monry: 123456.789,
 				moneyValue: null,
@@ -54,14 +61,19 @@
 				],
 				list1: [
 					{
-						name: '全部'
+						name: '全部',
+						key: '',
 					}, 
 					{
 						name: '收入',
+						key: 1,
 					},
 					{
 						name: '支出',
-					}],
+						key: 2,
+				}],
+				serialType: '',
+				marketPersonsSerialList: []
 			}
 		},
 		onLoad() {
@@ -94,7 +106,91 @@
 			 */
 			clickTabs(item) {
 				console.log('item', item);
-			}
+				if(this.serialType == item.key) return
+				this.serialType = item.key
+				this.$refs.customScrollList.refresh()
+			},
+			/**
+			 * 获取数据
+			 */
+			async load(paging) {
+				try{
+					this.$refs.customScrollList.showPullUp = true
+					let res = await this.$u.api.marketPersonsSerial({
+						noSign: 1,
+						userid: this.vuex_user_info.userId,
+						pageNum: 1,
+						pageSize: 10,
+						serialType: this.serialType
+					})
+					
+					if(res && res.code ===200) {
+						if(res.data.rows){
+							this.marketPersonsSerialList = this.marketPersonsSerialList.concat(res.data.rows)
+						}else {
+							this.marketPersonsSerialList = []
+						}
+						this.$refs.customScrollList.loadSuccess({
+							list: this.marketPersonsSerialList,
+							total: this.marketPersonsSerialList.length
+						})
+					} else {
+						this.$refs.customScrollList.loadSuccess({
+							list: [],
+							total: res.data.total || this.marketPersonsSerialList.length
+						})
+					}
+					
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.$refs.customScrollList.loadSuccess({
+						list: [],
+						total: this.marketPersonsSerialList.length
+					})
+				}
+			},
+			paging(paging){
+				console.log("下拉  加载数据")
+			},
+			/**
+			 * 下拉触底
+			 */
+			async refresh(paging){
+				console.log("上拉  加载数据")
+				//this.$refs.customScrollList.showEmpty = true
+				try{
+					//this.$refs.customScrollList.showPullUp = true
+					let res = await this.$u.api.marketPersonsSerial({
+						pageNum: paging.page,
+						pageSize: paging.size
+					})
+					if(res && res.code ===200) {
+						if(res.data.performList){
+							this.marketPersonsSerialList = [].concat(res.data.performList)
+						}else {
+							this.marketPersonsSerialList = []
+						}
+						// this.marketPersonsSerialList = null
+						this.$refs.customScrollList.refreshSuccess({
+							list: this.marketPersonsSerialList,
+							total: this.marketPersonsSerialList.length
+						})
+					} else {
+						this.$refs.customScrollList.refreshSuccess({
+							list: [],
+							total: res.data.total || this.marketPersonsSerialList.length
+						})
+					}
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.$refs.customScrollList.refreshSuccess({
+						list: [],
+						total: this.marketPersonsSerialList.length
+					})
+				}
+			},
 		}
 	}
 </script>
@@ -268,6 +364,7 @@
 	.consume-content-list {
 		width: 100%;
 		height: 100%;
+		background: #F7F7F9;
 		// overflow: hidden;
 	}
 	/** 收支列表 结束  */

+ 119 - 13
pages/index/index.vue

@@ -7,8 +7,20 @@
 				title="全名分享" 
 				bgColor="rgba(0,0,0,0)"
 				:is-left="false"
-				:customNavbarInfo='{}'></customNavbar>
-				<u-search :showAction="true" bgColor="#fff" actionText="搜索"></u-search>
+				:customNavbarInfo='{}'>
+					<view slot="right">
+						<image @click="getRetailQrcode()" style="width: 44rpx;height: 44rpx;" :src="fengxiang" mode=""></image>
+					</view>
+				</customNavbar>
+				<u-search 
+				@clickIcon="navigateToFun('/pages/index/search')" 
+				@custom="navigateToFun('/pages/index/search')"
+				@focus="navigateToFun('/pages/index/search')"
+				:showAction="true" 
+				bgColor="#fff" 
+				actionText="搜索">
+					
+				</u-search>
 			</view>
 			<!-- 头部主要内容 结束 -->
 			
@@ -19,23 +31,24 @@
 				ref="customScrollList" 
 				@load="load"
 				@paging="paging"
+				@refresh="refresh"
 				 >
-				 <view class="index-content-list-info">
+				 <view class="index-content-list-info" v-if="retailIndex.length>0">
 					 <text class="index-content-list-class">剧目</text>
 					 <view 
 					 class="index-content-list-item"
-					 v-for="(item,index) in 10" 
+					 v-for="(item,index) in retailIndex" 
 					 :key="index">
 						 
 						 <view class="index-content-list-content">
 							<image 
 							class="index-content-list-image"
-							src="../../static/login/bgm.png" mode=""></image>
+							:src="item.showImg" mode="scaleToFill"></image>
 							<view class="index-content-list-tool">
-								<text class="index-content-list-title">《伟大转折》</text>
+								<text class="index-content-list-title">{{ item.name }}</text>
 								<text 
 								class="index-content-list-but"
-								@click="navigateToFun('/pages/publicSharingDetails/index',item)"
+								@click="navigateToFun('/pages/publicSharingDetails/index',{ performId: item.id})"
 								>查看</text>
 							</view>
 						 </view>
@@ -45,6 +58,8 @@
 			</view>
 			<!-- 列表主要内容 结束 -->
 		</view>
+		<!-- 我的分享码  -->
+		<customPromotionCode ref="customPromotionCode" />
 	</view>
 </template>
 
@@ -56,30 +71,121 @@
 		data() {
 			return {
 				title: '全名分享',
+				loading: false,
 				statusBarHeight: 0, // 状态栏安全距离
+				retailIndex: [], // 剧目列表
+				fengxiang: this.$commonConfig.staticUrl+'index/fengxiang.png'
 			}
 		},
 		onLoad() {
-
+			
 		},
 		onShow() {
 			this.statusBarHeight = getApp().globalData.statusBarHeight
+			//this.load()
 		},
 		methods: {
-			load(){
+			async load(paging){
 				console.log("上拉  加载数据")
-				this.$refs.customScrollList.showPullUp = false
-				//this.$refs.customScrollList.showEmpty = true
+				try{
+					let res = await this.$u.api.retailIndex({
+						"page": paging.page,
+						"pages": paging.size,
+					})
+					if(res && res.code ===200) {
+						if(res.data.performList){
+							this.retailIndex = this.retailIndex.concat(res.data.performList)
+						}else {
+							this.retailIndex = []
+						}
+						this.$refs.customScrollList.loadSuccess({
+							list: this.retailIndex,
+							total: this.retailIndex.length
+						})
+					} else {
+						this.$refs.customScrollList.loadSuccess({
+							list: [],
+							total: 0
+						})
+					}
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.$refs.customScrollList.loadSuccess({
+						list: [],
+						total: 0
+					})
+				}
 			},
 			paging(){
 				console.log("下拉  加载数据")
 			},
+			/**
+			 * 下拉触底
+			 */
+			async refresh(paging){
+				console.log("上拉  加载数据",this.retailIndex)
+				//this.$refs.customScrollList.showEmpty = true
+				try{
+					//this.$refs.customScrollList.showPullUp = true
+					let res = await this.$u.api.retailIndex({
+						pageNum: paging.page,
+						pageSize: paging.size
+					})
+					if(res && res.code ===200) {
+						if(res.data.performList){
+							this.retailIndex = [].concat(res.data.performList)
+						}else {
+							this.retailIndex = []
+						}
+						// this.retailIndex = null
+						this.$refs.customScrollList.refreshSuccess({
+							list: this.retailIndex,
+							total: this.retailIndex.length
+						})
+					} else {
+						this.$refs.customScrollList.refreshSuccess({
+							list: [],
+							total: 0
+						})
+					}
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.$refs.customScrollList.refreshSuccess({
+						list: [],
+						total: 0
+					})
+				}
+			},
 			/**
 			 * @author ygh
 			 * @data 2023-12-20
 			 */
-			navigateToFun(url,data) {
-				navigateTo(url)
+			navigateToFun(url,data={}) {
+				console.log("dsffd",data)
+				navigateTo(url,data)
+			},
+			/**
+			 * 我的推广码
+			 */
+			async getRetailQrcode(){
+				try{
+					let res = await this.$u.api.getRetailQrcode({
+						noSign: 1,
+						userid: this.vuex_user_info.userId
+					})
+					
+					if(res && res.code ===200) {
+						this.$refs.customPromotionCode.initData(res.data)
+						// #ifdef H5
+						window.history.pushState(null, null, document.URL)
+						// #endif
+					} 
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+				}
 			},
 		}
 	}

+ 276 - 0
pages/index/search.vue

@@ -0,0 +1,276 @@
+<template>
+	<view class="index-content" :style="{'--status-bar-': statusBarHeight}">
+		<view class="index-content-info">
+			<!-- 头部主要内容 开始 -->
+			<view class="index-content-header">	
+				<customNavbar 
+				title="搜索" 
+				bgColor="rgba(0,0,0,0)"
+				:is-left="true"
+				:leftStyle="{ color: '#fff' }"
+				:customNavbarInfo='{}'></customNavbar>
+				<u-search 
+				v-model="keyValue" 
+				:showAction="true" 
+				bgColor="#fff" 
+				actionText="搜索"
+				@search="search"
+				@custom="search"
+				></u-search>
+			</view>
+			<!-- 头部主要内容 结束 -->
+			
+			<!-- 列表主要内容 开始 -->
+			
+			<view class="index-content-list">
+				<customScrollList 
+				ref="customScrollList" 
+				@load="load"
+				@paging="paging"
+				@refresh="refresh"
+				 >
+				 <view class="index-content-list-info" v-if="retailIndex.length>0">
+					 <text class="index-content-list-class">剧目</text>
+					 <view 
+					 class="index-content-list-item"
+					 v-for="(item,index) in retailIndex" 
+					 :key="index">
+						 
+						 <view class="index-content-list-content">
+							<image 
+							class="index-content-list-image"
+							:src="item.showImg" mode="scaleToFill"></image>
+							<view class="index-content-list-tool">
+								<text class="index-content-list-title">{{ item.name }}</text>
+								<text 
+								class="index-content-list-but"
+								@click="navigateToFun('/pages/publicSharingDetails/index',item)"
+								>查看</text>
+							</view>
+						 </view>
+					 </view>
+				 </view>
+				</customScrollList>
+			</view>
+			<!-- 列表主要内容 结束 -->
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		navigateTo
+	} from "@/utils/util.js"
+	export default {
+		data() {
+			return {
+				title: '全名分享',
+				loading: false,
+				statusBarHeight: 0, // 状态栏安全距离
+				retailIndex: [], // 剧目列表
+				keyValue: ''
+			}
+		},
+		onLoad() {
+			
+		},
+		onShow() {
+			this.statusBarHeight = getApp().globalData.statusBarHeight
+			//this.load()
+		},
+		methods: {
+			/** 搜索 */
+			search(){
+				if(!this.keyValue) {
+					uni.showToast({
+						title: "请输入关键字",
+						icon: 'none'
+					})
+					return
+				}
+				this.$refs.customScrollList.refresh()
+			},
+			async load(paging){
+				if(!this.keyValue) {
+					this.$refs.customScrollList.loadSuccess({
+						list: [],
+						total: 100
+					})
+					return
+				}
+				console.log("上拉  加载数据")
+				try{
+					let res = await this.$u.api.retailIndex({
+						"page": paging.page,
+						"pages": paging.size,
+						"name": this.keyValue
+					})
+					if(res && res.code ===200) {
+						this.retailIndex = this.retailIndex.concat(res.data.performList)
+						// this.retailIndex = null
+						this.$refs.customScrollList.loadSuccess({
+							list: this.retailIndex,
+							total: this.retailIndex.length
+						})
+					} else {
+						this.$refs.customScrollList.loadSuccess({
+							list: [],
+							total: 0
+						})
+					}
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.$refs.customScrollList.loadSuccess({
+						list: [],
+						total: 0
+					})
+				}
+			},
+			paging(){
+				console.log("下拉  加载数据")
+			},
+			/**
+			 * 下拉触底
+			 */
+			async refresh(paging){
+				console.log("上拉  加载数据",this.retailIndex)
+				//this.$refs.customScrollList.showEmpty = true
+				try{
+					//this.$refs.customScrollList.showPullUp = true
+					let res = await this.$u.api.retailIndex({
+						pageNum: paging.page,
+						pageSize: paging.size,
+						name: this.keyValue
+					})
+					if(res && res.code ===200) {
+						if(res.data.performList){
+							this.retailIndex = [].concat(res.data.performList)
+						}else {
+							this.retailIndex = []
+						}
+						
+						this.$refs.customScrollList.refreshSuccess({
+							list: this.retailIndex,
+							total:this.retailIndex.length
+						})
+					} else {
+						this.$refs.customScrollList.refreshSuccess({
+							list: [],
+							total: 0
+						})
+					}
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.$refs.customScrollList.refreshSuccess({
+						list: [],
+						total: 0
+					})
+				}
+			},
+			/**
+			 * @author ygh
+			 * @data 2023-12-20
+			 */
+			navigateToFun(url,data) {
+				navigateTo(url)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.index-content {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		box-sizing: border-box;
+		
+		--header-h: 170rpx;
+		// background-color: 
+		.index-content-info {
+			width: 100%;
+			box-sizing: border-box;
+		}
+	}
+	/** 头部主要内容 开始 */
+	.index-content-header {
+		width: 100%;
+		height: var(--header-h);
+		box-sizing: border-box;
+		background-color: var(--gd-bgm-color);
+		::v-deep .u-search {
+			padding: 0 30rpx !important;
+		}
+		::v-deep .u-search__action {
+			color: #fff !important;
+		}
+	}
+	/** 头部主要内容 结束  **/
+	
+	
+	/** 列表主要内容 开始 */
+	.index-content-list {
+		width: 100%;
+		height: calc( 100% - var(--header-h) - var(--status-bar-h) );
+	}
+	
+	.index-content-list-info {
+		width: 100%;
+		box-sizing: border-box;
+		padding: 32rpx 32rpx 20rpx;
+		.index-content-list-class {
+			font-size: 32rpx;
+			font-family: SourceHanSansCN, SourceHanSansCN;
+			font-weight: bold;
+			color: #2D2D2D;
+		}
+		.index-content-list-item {
+			width: 100%;
+			box-sizing: border-box;
+			background: #FFFFFF;
+			box-shadow: 0rpx 2rpx 20rpx 0rpx rgba(200,200,200,0.5);
+			border-radius: 24rpx;
+			overflow: hidden;
+			margin-top: 40rpx;
+			.index-content-list-content {
+				width: 100%;
+				box-sizing: border-box;
+				.index-content-list-image {
+					width: 100%;
+					height: 242rpx;
+				}
+				.index-content-list-tool {
+					display: flex;
+					width: 100%;
+					justify-content: space-between;
+					align-items: center;
+					padding:42rpx 28rpx 46rpx;
+					box-sizing: border-box;
+					.index-content-list-title {
+						font-size: 28rpx;
+						font-family: SourceHanSansCN, SourceHanSansCN;
+						font-weight: bold;
+						color: #363636;
+					}
+					.index-content-list-but {
+						width: 160rpx;
+						height: 51rpx;
+						background: #ED0000;
+						border-radius: 24rpx;
+						font-size: 20rpx;
+						font-family: PingFangSC, PingFang SC;
+						font-weight: 400;
+						color: #FFFFFF;
+						display: flex;
+						justify-content: center;
+						align-items: center;
+					}
+				}
+			}
+		}
+	}
+	/** 列表主要内容 结束  **/
+</style>

+ 29 - 5
pages/invitationStatistics/index.vue

@@ -41,13 +41,14 @@
 	export default {
 		data() {
 			return {
-				title: '这是我的',
+				title: '统计分销',
 				statusBarHeight: 0, // 状态栏安全距离
 				tool: [ // 我的工具
-					{ title: "邀请总人数",num: 20000,decimals:0 },
-					{ title: "待核销",num: 56900.99,decimals:2 },
-					{ title: "已核销",num: 12566000.99,decimals:2 },
-				]
+					{ title: "邀请总人数",num: 0,decimals:0 },
+					{ title: "待核销",num: 0,decimals:2 },
+					{ title: "已核销",num: 0,decimals:2 },
+				],
+				retailStatistics: {}, // 统计信息
 			}
 		},
 		onLoad() {
@@ -55,6 +56,7 @@
 		},
 		onShow() {
 			this.statusBarHeight = getApp().globalData.statusBarHeight
+			this.getRetailStatistics()
 		},
 		methods: {
 			/**
@@ -74,6 +76,28 @@
 				}else if(num>100000){
 					return (num/10000).toFixed(2)
 				}
+			},
+			/** 获取数据 */
+			async getRetailStatistics(){
+				try{
+					let res = await this.$u.api.getRetailStatistics({
+						noSign: 1,
+						userid: this.vuex_user_info.userId
+					})
+					
+					if(res && res.code ===200) {
+						this.retailStatistics = res.data
+						let list = [].concat(this.tool)
+						list[0].num = this.retailStatistics.retailMemberNum
+						list[1].num = this.retailStatistics.retailNouseNum
+						list[2].num = this.retailStatistics.retailUseNum
+						
+						this.tool = [].concat(list)
+					} 
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+				}
 			}
 		}
 	}

+ 121 - 5
pages/login/index.vue

@@ -21,6 +21,7 @@
 								placeholder="请输入账号"
 								border="surround"
 								shape="circle"
+								clearable
 								prefixIcon="account-fill"
 								prefixIconStyle="font-size: 22px;color: #909399"
 								></u--input>
@@ -28,9 +29,11 @@
 							<u-form-item prop="password">
 								<u--input
 								v-model="form.password" 
-								placeholder="请输入密码"
+								placeholder="请输入密码"
 								border="surround"
 								shape="circle"
+								type="password"
+								clearable
 								prefixIcon="lock-fill"
 								prefixIconStyle="font-size: 22px;color: #909399"
 								></u--input>
@@ -59,6 +62,7 @@
 				title: '《伟大转折》剧目全民分享系统',
 				logoUrl: this.$commonConfig.staticUrl + "login/logo.png",
 				loading: false,
+				code: null,
 				form: {
 					name: '',
 					password: '',
@@ -72,7 +76,6 @@
 					},
 					'password': {
 						type: 'string',
-						max: 1,
 						required: true,
 						message: '请填写密码',
 						trigger: ['blur', 'change']
@@ -84,8 +87,18 @@
 			//如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
 		    this.$refs.uForm.setRules(this.rules)
 		},
-		onLoad() {
-
+		onLoad(e) {
+			// #ifdef H5
+			if(this.vuex_user_info && this.vuex_user_info.accessToken){
+				this.personsLoginCheck()
+			}else {
+				if(!e.code) { // 微信第三方登录失败
+					this.redirectToAuth()
+				}else {
+					this.code = e.code
+				}
+			}
+			// #endif
 		},
 		onShow() {
 
@@ -99,11 +112,114 @@
 			submit() {
 				this.loading = true
 				this.$refs.uForm.validate().then(res => {
-					this.$u.toast('校验通过')
+					this.login()
 				}).catch(errors => {
 					this.$u.toast('校验失败')
 					this.loading = false
 				})
+			},
+			/**
+			 *  登录
+			 */
+			async login(){
+				try{
+					let openid = ''
+					// #ifdef H5
+					const node_dev = process.env.H_NODE_ENV;
+					if(node_dev){
+						let wxinfo = await this.$u.api.wxinfoH5({code:this.code});
+						openid = wxinfo.data.openid;
+					}
+					// #endif
+					let res = await this.$u.api.login({
+						"mobile": this.form.name,
+						"password": this.form.password,
+						"h5OpenId": openid
+					})
+					if(res && res.code ===200) {
+						this.loading = false
+						if(res.data && res.data.accessToken){
+							this.$u.vuex('vuex_user_info', res.data);
+							let backUrl = uni.getStorageSync('backUrl')
+							console.log("backUrl===",backUrl)
+							if(backUrl && backUrl != '/pages/login/index') {
+								uni.reLaunch({
+									url: '/'+backUrl
+								})
+							}else {
+								uni.reLaunch({
+									url: '/pages/main/index'
+								})
+							}
+						} else {
+							// 清空用户数据缓存
+							uni.setStorageSync('lifeData',{}); // 清除缓存
+							this.$u.vuex('vuex_user_info', {});
+							this.redirectToAuth()
+						}
+					} else {
+						// 清空用户数据缓存
+						uni.setStorageSync('lifeData',{}); // 清除缓存
+						this.$u.vuex('vuex_user_info', {});
+						this.redirectToAuth()
+					}
+					
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.loading = false
+					uni.setStorageSync('lifeData',{}); // 清除缓存
+					this.$u.vuex('vuex_user_info', {});
+					this.redirectToAuth()
+				}
+			},
+			/**  公众号 微信授权登录  */
+			redirectToAuth() {
+				const node_dev = process.env.H_NODE_ENV;
+				if(node_dev){
+					const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.$commonConfig.appid}&redirect_uri=${this.$commonConfig.redirectUri}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`;
+					window.location.href = authUrl;
+				}
+			},
+			/** 检测是否已登录  */
+			async personsLoginCheck() {
+				try{
+					let res = await this.$u.api.login({
+						"noSign": 1,
+						
+					})
+					if(res && res.code ===200) {
+						if(res.data && res.data.accessToken){
+							this.$u.vuex('vuex_user_info', res.data);
+							let backUrl = uni.getStorageSync('backUrl')
+							if(backUrl) {
+								uni.reLaunch({
+									url: backUrl
+								})
+							}else {
+								uni.reLaunch({
+									url: '/pages/main/index'
+								})
+							}
+						} else {
+							// 清空用户数据缓存
+							uni.setStorageSync('lifeData',{}); // 清除缓存
+							this.$u.vuex('vuex_user_info', {});
+							this.redirectToAuth()
+						}
+					} else {
+						// 清空用户数据缓存
+						uni.setStorageSync('lifeData',{}); // 清除缓存
+						this.$u.vuex('vuex_user_info', {});
+						this.redirectToAuth()
+					}
+				}catch(e){
+					//TODO handle the exception
+					uni.setStorageSync('lifeData',{}); // 清除缓存
+					this.$u.vuex('vuex_user_info', {});
+					this.redirectToAuth()
+				}
+				
 			}
 		}
 	}

+ 37 - 11
pages/main/index.vue

@@ -8,15 +8,15 @@
 			<view class="main-tabar-info">
 				<view class="main-tabar-item" @click="clickTabbar('index')">
 					<view>
-						<image :src="staticUrl+'/img/tabbar-home.png'"></image>
+						<image :src="pageAction=='index'?(staticUrl+'tabar/index_1.png'):(staticUrl+'tabar/index_0.png')"></image>
 					</view>
-					<text>{{ '首页' }}</text>
+					<text :style="{ color: pageAction=='index'? '#ED0000':'#595D60'  }">{{ '首页' }}</text>
 				</view>
 				<view class="main-tabar-item"> 
 					<view>
-						<image :src="staticUrl+'/img/tabbar-my.png'"  @click="clickTabbar('me')"></image>
+						<image :src="pageAction=='me'?(staticUrl+'tabar/me_1.png'):(staticUrl+'tabar/me_0.png')"  @click="clickTabbar('me')"></image>
 					</view>
-					<text>{{ '我的' }}</text>
+					<text :style="{ color: pageAction=='me'? '#ED0000':'#595D60'  }">{{ '我的' }}</text>
 				</view>
 			</view>
 		</view>
@@ -35,16 +35,39 @@
 			return {
 				title: '主页',
 				pageAction: 'index',
-				staticUrl:'https://miniores.hw.hongweisoft.com/greattransition/staticfile',
+				staticUrl:this.$commonConfig.staticUrl,
 			}
 		},
-		onLoad() {
+		onLoad(e) {
+			this.pageAction = e.router || 'index'
+			// window.history.pushState(null, null, document.URL + '#1') //往浏览器历史中添加一次记录
+			// window.onhashchange = (e) => {
+			// 	console.log(e);
+			// 	uni.showModal({
+			// 		title: '提示',
+			// 		content: '返回后此页面的操作将不作保留!',
+			// 		cancelText: '确定返回',
+			// 		confirmText: '留在此页',
+			// 		success: (res) => {
+			// 			if (res.confirm) {
+			// 				window.history.pushState(null, null, document.URL + '#1')
+			// 			} else if (res.cancel) {
+			// 				window.history.back();
+			// 				window.onhashchange = null //这里不取消监听那么上面的history.back()也会触发一次uni.showModal,就会有两个弹窗
+			// 			}
+			// 		}
+			// 	});
+			// }
 			
 		},
+		onUnload() {
+			console.log("dsfasfasdf======")
+			//window.removeEventListener("popstate", this.browserBack);
+		},
 		onShow() {
-			this.pageAction = uni.getStorageSync('page_action') || 'index'
-			console.log('this.pageAction===',uni.getStorageSync('page_action'),this.pageAction)
+			
 		},
+		
 		methods: {
 			/**
 			 * @author ygh
@@ -52,10 +75,13 @@
 			 * @param {Object} type
 			 */
 			clickTabbar(type){
+				if( this.pageAction == type ) return
 				this.pageAction = type
-				uni.setStorageSync('page_action',this.pageAction)
-				
-			}
+				//this.$u.route('/pages/main/index',{router:this.pageAction});
+				uni.reLaunch({
+					url: "/pages/main/index?router="+type
+				})
+			},
 		}
 	}
 </script>

+ 169 - 10
pages/me/index.vue

@@ -16,9 +16,8 @@
 			
 			<view class="me-content-userinfo">
 				<view class="me-userinfo-info">
-					<view><text>分销商名称:</text><text>张飞烤地瓜旅行社是发射点发射点发
-					张飞烤地瓜旅行社是发射点发射点发张飞烤地瓜旅行社是发射点发射点发</text></view>
-					<view><text>负责人:</text><text>关羽</text></view>
+					<view><text>分销商名称:</text><text>{{ userInfo && userInfo.name }}</text></view>
+					<view><text>负责人:</text><text>{{ userInfo && userInfo.contact }}</text></view>
 				</view>
 			</view>
 			<!-- userInfo内容 结束 -->
@@ -39,6 +38,15 @@
 				</view>
 			</view>
 			<!-- tool内容 结束  -->
+			<!--  退出登录  -->
+			<view class="me-content-loginout">
+				<u-button
+				class="login-info-submit-but"
+				@click="submit()"
+				:loading="loading"
+				loadingText="退出中..."
+				>退出登录</u-button>
+			</view>
 		</view>
 		<!-- 我的分享码  -->
 		<customPromotionCode ref="customPromotionCode" />
@@ -51,19 +59,30 @@
 		data() {
 			return {
 				title: '这是我的',
+				loading: false,
 				statusBarHeight: 0, // 状态栏安全距离
 				tool: [ // 我的工具
 					{ title: "邀请统计",icon: this.$commonConfig.staticUrl + 'me/yijian2.png', url: '/pages/invitationStatistics/index' },
 					{ title: "余额提现",icon: this.$commonConfig.staticUrl + 'me/beifeng.png', url: '/pages/balance/index' },
 					{ title: "我的推广码",icon: this.$commonConfig.staticUrl + 'me/yijian1.png', url: '' },
-				]
+					// { title: "提现记录",icon: this.$commonConfig.staticUrl + 'me/beifeng.png', url: '/pages/cashList/index' },
+				],
+				userInfo: {}
 			}
 		},
-		onLoad() {
-
-		},
-		onShow() {
+	
+		
+		mounted() {
+			console.log('wpsdfsfasdfads')
 			this.statusBarHeight = getApp().globalData.statusBarHeight
+			this.getUserInfo() 
+			// #ifdef H5
+			//window.addEventListener('popstate', this.browserBack)
+			// #endif
+		},
+		destroyed() {
+			console.log("dsfadsfsdfasdf")
+			//window.removeEventListener("popstate", this.browserBack);
 		},
 		methods: {
 			/**
@@ -74,10 +93,133 @@
 				if(item.url) {
 					navigateTo(item.url)
 				}else {
-					this.$refs.customPromotionCode.initData("我是谁!!!")
+					this.getRetailQrcode()
 				}
 				
-			}
+			},
+			/**
+			 * 获取用户信息
+			 */
+			async getUserInfo() {
+				try{
+					let res = await this.$u.api.getInfo({
+						noSign: 1,
+						userid: this.vuex_user_info.userId
+					})
+					
+					if(res && res.code ===200) {
+						this.userInfo = res.data
+					} 
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+				}
+			},
+			/**
+			 * 我的推广码
+			 */
+			async getRetailQrcode(){
+				try{
+					let res = await this.$u.api.getRetailQrcode({
+						noSign: 1,
+						userid: this.vuex_user_info.userId
+					})
+					
+					if(res && res.code ===200) {
+						this.$refs.customPromotionCode.initData(res.data)
+						// #ifdef H5
+						//window.history.pushState(null, null, document.URL)
+						// #endif
+					} 
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+				}
+			},
+			/**
+			 * 
+			 * 提交登录
+			 * 
+			 */
+			submit() {
+				// 在这里写弹框
+				uni.showModal({
+					title: '提示',
+					content: '确定退出登录吗?',
+					cancelText: '取消',
+					confirmText: '确定',
+					success: (res) => {
+						if(res.confirm){
+							this.loginOut()
+						}
+						
+					}
+				});
+			},
+			async loginOut() {
+				// console.log("vuex_user_info===",this.vuex_user_info)
+				// return
+				// if(!this.vuex_user_info.accessToken) {
+				// 	this.$u.vuex('vuex_user_info', {});
+				// 	uni.reLaunch({
+				// 		url: "/pages/login/index"
+				// 	})
+				// 	return
+				// }
+				this.loading = true
+				try{
+					let res = await this.$u.api.loginOut({})
+					this.loading = false
+					if(res && res.code ===200) {
+						uni.setStorageSync('lifeData',{}); // 清除缓存
+						this.$u.vuex('vuex_user_info', {});
+						uni.reLaunch({
+							url: "/pages/login/index"
+						})
+					} else {
+						// uni.showToast({
+						// 	icon: "none",
+						// 	title: res.msg
+						// })
+						uni.setStorageSync('lifeData',{}); // 清除缓存
+						this.$u.vuex('vuex_user_info', {});
+						uni.reLaunch({
+							url: "/pages/login/index"
+						})
+					}
+					this.loading = false
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					// uni.showToast({
+					// 	icon: "none",
+					// 	title: "退出失败"
+					// })
+					uni.setStorageSync('lifeData',{}); // 清除缓存
+					this.$u.vuex('vuex_user_info', {});
+					uni.reLaunch({
+						url: "/pages/login/index"
+					})
+					this.loading = false
+				}
+			},
+			browserBack() {
+				// 在这里写弹框
+				uni.showModal({
+					title: '提示',
+					content: '返回后此页面的操作将不作保留!',
+					cancelText: '确定返回',
+					confirmText: '留在此页',
+					success: (res) => {
+						if (res.confirm) {
+							// 用户选择留在此页,不进行任何操作
+						} else if (res.cancel) {
+							window.history.back(); // 使用window.history.back()返回上一页
+						}
+					}
+				});
+				//window.history.replaceState(null, null, document.URL); // 保留此行代码
+			},
 		}
 	}
 </script>
@@ -192,4 +334,21 @@
 		}
 	}
 	/** tool内容 结束  */
+	
+	/** */
+	.me-content-loginout {
+		width: 100%;
+		padding: 50rpx 50rpx 0;
+		box-sizing: border-box;
+		.login-info-submit-but {
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			border-radius: 40rpx;
+			width: 100% !important;
+			height: 80rpx !important;
+			background-color: var(--gd-bgm-color);
+			color: #fff;
+		}
+	}
 </style>

+ 127 - 8
pages/passwordSet/index.vue

@@ -34,7 +34,9 @@
 				statusBarHeight: 0, // 状态栏安全距离
 				value: "",
 				tip: ["输入当前密码,已确认身份","设置六位数数字密码","再次输入"],
-				actionIndex: 0
+				actionIndex: 0,
+				password: '',
+				withdrawInfo: {}
 			}
 		},
 		onLoad() {
@@ -42,6 +44,7 @@
 		},
 		onShow() {
 			this.statusBarHeight = getApp().globalData.statusBarHeight
+			this.getWithdrawInfo()
 		},
 		methods: {
 			/**
@@ -52,16 +55,132 @@
 				navigateTo(item.url)
 			},
 			finish(){
-				uni.showLoading({
-					title: "认证中..."
-				})
-				setTimeout(()=>{
-					this.actionIndex += 1
+				if(this.actionIndex == 0) { // 认证密码
+					this.marketPersons()
+				}else if(this.actionIndex == 1) {
+					uni.showLoading({
+						title: "下一步"
+					})
+					this.password = this.value
+					setTimeout(()=>{
+						this.$set(this,'value', '')
+						this.actionIndex += 1
+						console.log("this.value==",this.value)
+						uni.hideLoading()
+					},500)
+					
+				}else if(this.actionIndex == 2) {
+					if(this.password != this.value){
+						uni.showToast({
+							title: '两次密码不一样',
+							icon: 'none'
+						});
+						this.getWithdrawInfo()
+					}else {
+						this.payset()
+					}
+				}
+			},
+			/**
+			 * 获取用户密码信息
+			 */
+			async getWithdrawInfo() {
+				try{
+					this.password = ''
 					this.value = ''
-					uni.hideLoading({
+					let res = await this.$u.api.withdrawInfo({
+						noSign: 1,
+						userid: this.vuex_user_info.userId
+					})
+					
+					if(res && res.code ===200) {
+						this.withdrawInfo = res.data
+						if(this.withdrawInfo.ifPaySet== 0) {
+							this.actionIndex = 1
+						}else {
+							this.actionIndex = 0
+						}
+					} 
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+				}
+			},
+			/**
+			 * 密码校验
+			 */
+			async marketPersons() {
+				try{
+					uni.showLoading({
+						title: "认证中..."
+					})
+					let res = await this.$u.api.marketPersons({
+						noSign: 1,
+						userid: this.vuex_user_info.userId,
+						oldPassword: this.value
+					})
+					
+					if(res && res.code ===200) {
+						this.value = ''
+						this.actionIndex += 1
+						uni.hideLoading()
+						uni.showToast({
+							title: '认证成功',
+							icon: 'none'
+						});
 						
+					} else {
+						this.value = ''
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					this.value = ''
+					uni.showToast({
+						title: "认证失败",
+						icon: 'none'
+					});
+				}
+			},
+			/**
+			 * 设置密码
+			 */
+			async payset() {
+				try{
+					let res = await this.$u.api.payset({
+						noSign: 1,
+						userid: this.vuex_user_info.userId,
+						newPassword: this.value
 					})
-				},2000)
+					
+					if(res && res.code ===200) {
+						uni.showToast({
+							title: "设置成功",
+							icon: 'none'
+						});
+						uni.navigateBack({
+							delta: 1
+						})
+					} else {
+						uni.showToast({
+							title: "设置失败",
+							icon: 'none'
+						});
+						this.getWithdrawInfo()
+					}
+				}catch(e){
+					//TODO handle the exception
+					console.error("e===",e)
+					uni.showToast({
+						title: "设置失败",
+						icon: 'none'
+					});
+					this.getWithdrawInfo()
+				}
 			}
 		}
 	}

+ 34 - 12
pages/publicSharingDetails/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="psd-content">
 		<view class="psd-content-info">
-			<view class="psd-bgm" :style="{backgroundImage: 'url('+logoUrl+')'}">
+			<view class="psd-bgm" :style="{backgroundImage: 'url('+perform.showImg+')'}">
 				<!-- 头部主要内容 开始 -->
 				<view class="index-content-header">	
 					<customNavbar 
@@ -15,7 +15,7 @@
 			</view>
 			<view class="psd-info">
 				<view class="psd-info-box">
-					<text class="psd-info-title">《伟大转折》剧目</text>
+					<text class="psd-info-title">{{ perform && perform.name }}</text>
 					<view class="psd-info-main">
 						<text>票务信息</text>
 						<view>
@@ -25,11 +25,14 @@
 								<text>分销价</text>
 								<text>佣金</text>
 							</view>
-							<view v-for="(item,index) in 4" :key="index">
-								<text>普通票</text>
-								<text>5555</text>
-								<text>5555</text>
-								<text>5555</text>
+							<view 
+							v-if="perform && perform.brokerageList && perform.brokerageList.length>0"
+							v-for="(item,index) in perform.brokerageList" 
+							:key="index">
+								<text>{{item.goodsName}}</text>
+								<text>{{item.originalSalePrice}}</text>
+								<text>{{item.salePrice}}</text>
+								<text>{{item.brokeragePrice}}</text>
 							</view>
 						</view>
 					</view>
@@ -46,16 +49,35 @@
 				title: '《伟大转折》剧目全民分享系统',
 				logoUrl: this.$commonConfig.staticUrl + "login/bgm.png",
 				loading: false,
+				performId: null,
+				perform: {}
 			}
 		},
-		onLoad() {
-
+		onLoad(e) {
+			console.log(e)
+			this.performId = e.performId
 		},
 		onShow() {
-
+			this.getRetailInfo()
 		},
 		methods: {
-			
+			async getRetailInfo(){
+				try{
+					this.perform = {}
+					let res = await this.$u.api.getRetailInfo({
+						noSign: 1,
+						userid: this.vuex_user_info.userId,
+						performId: this.performId,
+					})
+					if(res && res.code ===200) {
+						this.perform = res.data
+					} else {
+						
+					}
+				}catch(e){
+					
+				}
+			}
 		}
 	}
 </script>
@@ -79,7 +101,7 @@
 	.psd-bgm {
 		width: 100%;
 		height: var(--bgm-height);
-		background-size: 100% auto;
+		background-size: 100% 100%;
 		background-repeat: no-repeat;
 		box-sizing: border-box;
 

BIN
static/index/fengxiang.png


BIN
static/tabar/index_0.png


BIN
static/tabar/index_1.png


BIN
static/tabar/me_0.png


BIN
static/tabar/me_1.png


+ 1 - 1
uni.scss

@@ -17,7 +17,7 @@
 @import '@/uni_modules/uview-ui/theme.scss';
 
 /* 图片服务器地址  */
-$image-beas-url: '/static/';
+$image-beas-url: 'https://greath5.dev.gztjy.top/distribution/static/';
 page {
 	width: 100%;
 	height: 100%;

+ 0 - 0
unpackage/dist/build/.automator/h5/.automator.json


+ 1 - 1
utils/util.js

@@ -9,7 +9,7 @@
 export function navigateTo(url,data = {}) {
 	uni.navigateTo({
 		url: `${url}?${Object.keys(data)
-		.map(key=> `${data[key]}` )
+		.map(key=> `${key}=${data[key]}` )
 		.join('&')}`
 	})
 }