Browse Source

迁移初始文件

puyao 2 tháng trước cách đây
mục cha
commit
f821f824b9

+ 1 - 0
App.vue

@@ -10,6 +10,7 @@
 		},
 		onLaunch: function() {
 			console.log('App Launch')
+			uni.hideTabBar();
 			var that=this;
 			uni.$on('initSocket', () => {
 				that.initSocket()

+ 1 - 1
common/request.js

@@ -5,7 +5,7 @@ export default class Request {
 		// let path = 'http://42.194.245.189:8007';
 		// let path = 'http://42.194.245.189:8007';
 		// let path = 'http://192.168.10.155:8007'
-		let path = 'http://h5api.wxcourse.cdwjyyh.com'
+		let path = 'https://h5api.wxcourse.cdwjyyh.com'
 		uni.setStorageSync('requestPath',path)
 		// uni.showLoading({
 		// 	title: '加载中'

+ 12 - 3
pages.json

@@ -37,7 +37,7 @@
             "style" :                                                                                    
             {
 				"navigationBarTextStyle": "white",
-                "navigationBarTitleText": "我的",
+                "navigationBarTitleText": "",
                 "enablePullDownRefresh": false
             }
             
@@ -192,7 +192,11 @@
 				"navigationBarBackgroundColor": "#ffffff",
 				"navigationBarTextStyle": "black",
 		        "navigationBarTitleText": "员工列表",
-		        "enablePullDownRefresh": false
+		        "enablePullDownRefresh": false,
+		        "navigationStyle": "custom",
+		        "app-plus": {
+		        	"bounce": "none"
+		        }
 		    }
 		    
 		}
@@ -203,7 +207,11 @@
 				"navigationBarBackgroundColor": "#ffffff",
 				"navigationBarTextStyle": "black",
 		        "navigationBarTitleText": "员工详情",
-		        "enablePullDownRefresh": false
+		        "enablePullDownRefresh": false,
+		        "navigationStyle": "custom",
+		        "app-plus": {
+		        	"bounce": "none"
+		        }
 		    }
 		    
 		}
@@ -412,6 +420,7 @@
 		"backgroundColor": "#ffffff"
 	},
 	"tabBar": {
+		"animation": false,
 		"color": "#7e7e7e",
 		"selectedColor": "#115296",
 		"borderStyle": "white",

+ 13 - 11
pages/auth/login.vue

@@ -1,7 +1,7 @@
 <template>
-	<view class="column" style="height: 100%;">
-		 <view class="content flex-1">
-			 <view class="login">
+	<view class="column" style="height: 100vh;">
+		 <view class="content flex-1" >
+			 <view class="login pt14">
 				<view class="head">
 					 <image src="/static/logo.png" ></image>
 					 <p class="title">销售管理端</p>
@@ -11,13 +11,15 @@
 					 <view class="login-item">
 						 <!-- <text>帐号</text> -->
 						 <view class="input-account">
-							 <input v-model="account" placeholder="请输入帐号" type="text" ></input>
+							 <input v-model="account"
+							  placeholder="请输入帐号" type="text" ></input>
 						 </view>
 					 </view> 
 					 <view class="login-item">
 						 <!-- <text>密码</text> -->
 						 <view class="input-pwd">
-							 <input v-model="password"  placeholder="请输入密码" type="password" ></input>
+							 <input v-model="password" 
+							  placeholder="请输入密码" type="password" ></input>
 						 </view>
 					 </view> 
 					 <view class="btns">
@@ -26,9 +28,9 @@
 				</view>
 			 </view>
 		 </view>
-		 <view class="footer">
+		 <!-- <view class="footer" >
 			 <p>版权所有 @2024</p>
-		 </view>
+		 </view> -->
 		 
 	</view>
 </template>
@@ -46,8 +48,6 @@ export default {
 	onLoad(option) 
 	{
 	},
-	onUnload() {
-	},
 	mounted() {
 
 	},
@@ -116,7 +116,8 @@ page{
 	 flex-direction: column;
 	 align-items: center;
 	 justify-content: center;
-	 height: calc(100vh);
+	 // height: calc(100vh);
+	  overflow-y: auto;
 	 width: 100%;
 	 .login{
 		 width: 100%;
@@ -208,9 +209,10 @@ page{
 .footer{
 	color: #686866;
 	width: 100%;
-	position: fixed;
+	 position: sticky;
 	text-align: center;
 	bottom: 60upx;
+	z-index: 1;
 	font-size: 28rpx;
 }
 

+ 114 - 53
pages/courseManage/components/courseItem.vue

@@ -32,6 +32,12 @@
 		<!-- 分享弹窗 -->
 		<u-popup :show="showShare" :closeOnClickOverlay="true" :round='20' @close="closeShare" @open="openShare">
 			<view class="sharePop x-ac">
+				<view class="sharePop-item y-f" @click="shareimg">
+					<image src="@/static/images/card_icon.png" mode="aspectFill"
+						style="width: 80rpx; height: 80rpx;margin-top: 20rpx;"></image>
+					<view style="font-weight: bold;margin-bottom: 4px;">生成卡片</view>
+					<view style="font-size: 12px;color: #888;">指导分享轻松转发</view>
+				</view>
 				<view class="sharePop-item y-f" @click="buildimg">
 					<image src="@/static/images/poster_icon.png" mode="aspectFill"></image>
 					<view style="font-weight: bold;margin-bottom: 4px;">生成海报</view>
@@ -58,32 +64,32 @@
 		<u-notify ref="uNotify" message=""></u-notify>
 		<!-- 生成海报 -->
 		<u-popup :show="setImg" @close="closeimg" :round="12" style="z-index: 999;">
-			<view class="w100 h500">
+			<view class="w100 h400">
 				<image :src="codeLink.url" class="codeimg w660" mode="widthFix"></image>
 			</view>
 			<view class="justify-around mtb40">
-				<view class="column justify-center align-center" @click="shareimg">
+				<!-- <view class="column justify-center align-center" @click="shareimg">
 					<image src='@/static/image/wechat.png' class="w80 h80"></image>
 					<view class="mt10">微信好友</view>
-				</view>
+				</view> -->
 				<view class="column justify-center align-center" @click="downimg">
 					<image src='@/static/image/downicon.png' class="w80 h80"></image>
-					<view class="mt10">长按海报保存</view>
+					<view class="mt10 mb100">长按海报保存</view>
 				</view>
 			</view>
 		</u-popup>
 		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
 			<view class="point-box">
-				<view class="imgshe" >
+				<view class="imgshe">
 					<image src='@/static/image/point.png' class="w300 h300"></image>
 				</view>
 				<view class="column colorf fs32 xu-box fs40
 				align-center justify-center">
 					<view class="justify-center">点击右上角
-					<image src="../../../static/image/wxmore.png"
-					class="w50 h50 mlr10"></image>
+						<image src="../../../static/image/wxmore.png" class="w50 h50 mlr10"></image>
 					</view>
 					<view class="mt20">选择 “转发给朋友”</view>
+					<view style="color: #cbcbcb;" class="fs28 mt40">点击任意位置关闭弹窗</view>
 				</view>
 			</view>
 		</u-overlay>
@@ -131,65 +137,106 @@
 				painterId: 'myPainter',
 				isLongPress: false,
 				painterSrc: '',
-				showzhidao:false,
+				showzhidao: false,
+				imgs:'https://h5.wxcourse.cdwjyyh.com/icon/20250214100002.png'
 			}
 		},
-		onLoad() {
-		},
+		onLoad() {},
 		mounted() {
-			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {},
-			this.getjssdklist()
+			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
+
 		},
 		methods: {
 			// 获取jssdk
 			getjssdklist() {
 				const param = {
-					url: window.location.href
+					url: window.location.href.split('#')[0] // 注意去除 hash
 				}
 				getSDK(param).then(res => {
 					wx.config({
+						debug: false,
 						appId: res.data.appId, // 必填,公众号的唯一标识
 						timestamp: res.data.timestamp, // 必填,生成签名的时间戳
 						nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
 						signature: res.data.signature, // 必填,签名
-						jsApiList: ["updateAppMessageShareData"] // 必填,需要使用的JS接口列表
+						jsApiList: ["updateAppMessageShareData", "onMenuShareAppMessage", ] // 必填,需要使用的JS接口列表
 					});
 				})
 			},
-			
+
 			shareimg() {
-				  let self = this
-				  //分享好友
-				  // 配置--你到时候把配置全局 --就是这些东西  调接口拿
-				  wx.ready(function() { //需在用户可能点击分享按钮前就先调用
-				  	wx.updateAppMessageShareData({
-				  		title: self.info.courseName+self.info.title, // 分享标题
-				  		desc: self.info.title, // 分享描述
-				  		link:self.copylink, 
+				let self = this
+				//分享好友
+				// 配置--你到时候把配置全局 --就是这些东西  调接口拿
+				console.log(self.info.thumbnail + self.copylink, 11111)
+				wx.ready(function() { //需在用户可能点击分享按钮前就先调用
+					wx.updateAppMessageShareData({
+						title: self.info.courseName + self.info.title, // 分享标题
+						desc: self.info.title, // 分享描述
+						link: self.copylink,
+						// 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
+						imgUrl: self.info.thumbnail||self.imgs, // 分享图标
+						success: function(res) {
+							console.log(self.info, '456');
+							self.showzhidao = true
+							self.setImg = false
+							self.showShare = false
+							// 设置成功
+							uni.showToast({
+								title: '卡片已生成',
+								icon: 'none',
+								duration: 1000
+							});
+						},
+						// fail: function(err) {
+						// 	console.log(err);
+						// 	uni.showToast({
+						// 		title: JSON.stringify(err),
+						// 		icon: 'none',
+						// 		duration: 2000
+						// 	})
+						// },
+						// complete: function(res) {
+						// 	uni.showToast({
+						// 		title: JSON.stringify(res),
+						// 		icon: 'none',
+						// 		duration: 2000
+						// 	})
+						// },
+						
+					})
+
+					// 另外一个方法·
+					wx.onMenuShareAppMessage({
+						title: self.info.courseName + self.info.title, // 分享标题
+						desc: self.info.title, // 分享描述
+						link: self.copylink,
 						// 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
-				  		imgUrl: self.info.thumbnail, // 分享图标
-				  		success: function(res) {
-							console.log(self.info,'456');
-							self.showzhidao=true
-							self.setImg=false
-							self.showShare=false
-				  			// 设置成功
-				  			uni.showToast({
-				  				title: '海报已生成',
-				  				icon: 'none',
-				  				duration: 1000
-				  			}); 
-				  		},
-				  		fail: function(err) {
-				  			console.log(err);
-				  			uni.showToast({
-				  				title: '海报生成失败,请重试',
-				  				icon: 'none',
-				  				duration: 2000
-				  			})
-				  		}
-				  	})
-				  });
+						imgUrl: self.info.thumbnail, // 分享图标
+						success: function(res) {
+							console.log(self.info, '456');
+							self.showzhidao = true
+							self.setImg = false
+							self.showShare = false
+							// 设置成功
+							uni.showToast({
+								title: '卡片已生成',
+								icon: 'none',
+								duration: 1000
+							});
+						},
+						// complete: function(res) {
+						// 	uni.showToast({
+						// 		title: JSON.stringify(res),
+						// 		icon: 'none',
+						// 		duration: 2000
+						// 	})
+						// }
+					})
+					// wx.error((res) => {
+					// 	console.log('wx.error:', res);
+					// })
+				});
 			},
 			downimg() {
 
@@ -268,6 +315,8 @@
 			},
 			handleShare() {
 				this.showShare = true
+				this.getjssdklist()
+				this.getlink('preload'); // 提前加载链接
 			},
 			closeShare() {
 				this.showShare = false
@@ -295,7 +344,11 @@
 				sharecourselink(params).then(res => {
 					if (res.code == 200) {
 						this.copylink = res.data
-						setTimeout(()=>{
+						if (this.copylink.startsWith('http://')) {
+							this.copylink = this.copylink.replace('http://', 'https://');
+						  }
+						console.log(this.copylink)
+						setTimeout(() => {
 							uni.setClipboardData({
 								data: this.copylink,
 								success: () => {
@@ -312,8 +365,8 @@
 									});
 								}
 							});
-						},100)
-						
+						}, 100)
+
 						console.log(this.copylink)
 					} else {
 						uni.showToast({
@@ -323,7 +376,7 @@
 					}
 				})
 			},
-			getlink() {
+			getlink(type) {
 				const params = {
 					companyId: this.user.companyId,
 					companyUserId: this.user.userId,
@@ -335,6 +388,10 @@
 				sharecourselink(params).then(res => {
 					if (res.code == 200) {
 						this.copylink = res.data
+						// 强制使用 HTTPS
+						  if (this.copylink.startsWith('http://')) {
+							this.copylink = this.copylink.replace('http://', 'https://');
+						  }
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -379,18 +436,21 @@
 </script>
 
 <style scoped lang="scss">
-	.imgshe{
+	.imgshe {
 		display: flex;
 		flex-direction: row-reverse
 	}
-	.point-box{
+
+	.point-box {
 		height: 100%;
 		width: 100%;
-		.xu-box{
+
+		.xu-box {
 			border: #f5f5f5 4rpx dashed;
 			padding: 20rpx 20rpx;
 		}
 	}
+
 	.codeimg {
 		position: absolute;
 		z-index: 99999;
@@ -411,6 +471,7 @@
 	.sharePop {
 		background-color: #fff;
 		padding: 50px 0;
+		padding-bottom: 100px;
 		border-radius: 20px 20px 0 0;
 
 		&-item {

+ 6 - 5
pages/courseManage/components/vipUserItem.vue

@@ -9,12 +9,12 @@
 					<u-checkbox :checked="item.checked" shape="circle" activeColor="#FF6C47" :name="true"
 						labelColor="#FF6C47" />
 				</u-checkbox-group>
-				<view class="list-item w100">
+				<view class="list-item w100" @click="morepage(item)" >
 					<view class="list-item-head x-bc">
 						<view class="x-f" style="flex: 1;overflow: hidden;">
 							<u-avatar :src='item.avatar'></u-avatar>
 							<view class="list-item-head-l">
-								<view style="flex: 1;overflow: hidden;display: flex;">
+								<view style="flex: 1;overflow: hidden;display: flex;" @click.passive.stop>
 									<text class="list-item-name one-t">{{item.nickName}}</text>
 									<image class="list-item-copy" src="@/static/images/copy_icon.png" mode="aspectFill"
 										@click="copyId(item.userId)">
@@ -25,7 +25,7 @@
 							</view>
 						</view>
 						<image class="phone" src="@/static/manergevip/phone.png" mode="aspectFill"
-							v-if="!isShowSelectAll" @click="tophone(item.phone)"></image>
+							v-if="!isShowSelectAll" @click="tophone(item.phone)" @click.passive.stop></image>
 					</view>
 					<view class="list-item-desc">
 						<view class="taglist">
@@ -53,7 +53,7 @@
 							</view>
 						</view>
 					</view>
-					<view class="justify-between" v-if="!isShowSelectAll">
+					<view class="justify-between" v-if="!isShowSelectAll" @click.passive.stop>
 						<view @click="morepage(item)">更多</view>
 						<view class="justify-start">
 							<view class="btn-box base-color base-bg-sure bor-blue" @click="openModel('label',item)"
@@ -88,7 +88,7 @@
 				type: Object,
 				default: () => ({
 					pageNum: 1,
-					pageSize: 10,
+					pageSize: 12,
 				})
 			},
 			status: {
@@ -166,6 +166,7 @@
 				}, 1000)
 			},
 			reachBottom() {
+				//上拉
 				// status这个是加载状态
 				if (this.status === 'loadmore') {
 					this.$emit('changeStatus', 'loading')

+ 0 - 1
pages/courseManage/course/becomeVip.vue

@@ -12,7 +12,6 @@
 		 mode='center' round='20' style="flex: 0;" >
 			<view class="VIPvie w600 h600 column justify-center align-center">
 				<image src="../../../static/manergevip/becomeTrue.png" class="h400 w400"></image>
-				
 				<view class="bold fs50 center mt80">{{tips}}!</view>
 			</view>
 		</u-popup>

+ 101 - 52
pages/courseManage/course/learning.vue

@@ -1,17 +1,20 @@
 <template>
 	<view class="content" v-show="!loading">
-		<view class="video-box">
-			<!-- <image v-if="!isLogin || isAddKf!=1" class="video-poster" :src="courseInfo.imgUrl" mode="aspectFill"></image> -->
+		<view v-if="!isvip&&!istoken">
+			<image v-if="!isvip" class="video-poster" :src="courseInfo.imgUrl"
+			 mode="aspectFill"></image>
+		</view>
+		<view class="video-box" v-else>
 			<video :style="{'--progress': progress + '%'}" id="myVideo" :src="videoUrl" :show-center-play-btn="false"
 				:show-progress="true" :auto-pause-if-navigate="true" :auto-pause-if-open-native="true"
 				@timeupdate="videoTimeupdate" @error="videoErrorCallback" @play="getPlay" @pause="getPause"
 				@ended="getEnded" @fullscreenchange="fullscreenchange" @progress="progressChange"
-				:controls="!showPlay"></video>
+				:controls="!showPlay" :poster="poster"></video>
 			<cover-view class="video-controls-box" @click="clickVideo" v-if="showPlay">
 				<cover-image class="video-play" src="@/static/image/video_icon.png" @click="play()"></cover-image>
 			</cover-view>
 		</view>
-
+		
 		<view class="title-content" id="title-content">
 			<!-- 答题时展示小节课程名,其他展示课程名 -->
 			<!-- 课程名字 -->
@@ -173,17 +176,18 @@
 		</u-popup>
 		<!-- footer -->
 		<view class="footer">
-			<view class="justify-between" v-if="isvip==1">
-				<!-- <view  class="justify-between" v-if="isvip==1"> -->
+			<view class="justify-between" v-if="isvip==1&&user.userType==='01'">
 				<view class="copybtn flex-1 mr40" @click="buildimg">生成海报</view>
 				<view class="copybtn flex-1" @click="setTimeShow=!setTimeShow">复制链接</view>
 			</view>
-			<view class='footer-btn footer-btn-border' @click="submit" v-else>
-				<image class="footer-btn-img" v-show="isLogin" src="@/static/image/red_envelope_btnimg.png"
+			<view class='footer-btn footer-btn-border' @click="submit" v-if="!isvip&&istoken">
+				<image class="footer-btn-img"  src="@/static/image/red_envelope_btnimg.png"
 					mode="aspectFill"></image>
 				<text>提交答案领取红包</text>
 			</view>
-
+			<view class='footer-btn footer-btn-border' @click="submit" v-else-if="!isvip&&!istoken">
+				<text >立即学习</text>
+			</view>
 		</view>
 		<u-modal :show="setTimeShow" content='content' class="model" @confirm="confirmTime" :closeOnClickOverlay='true'
 			@close="closetext">
@@ -221,6 +225,7 @@
 						<image src="../../../static/image/wxmore.png" class="w50 h50 mlr10"></image>
 					</view>
 					<view class="mt20">选择 “转发给朋友”</view>
+					<view style="color: #cbcbcb;" class="fs28 mt40">点击任意位置关闭弹窗</view>
 				</view>
 			</view>
 		</u-overlay>
@@ -339,7 +344,12 @@
 				answermsg: '',
 				courselink: '',
 				type: 1,
-				isUservip: 1
+				isUservip: 1,
+				user:[],
+				users:[],
+				poster:'',
+				istoken:false,
+				imgs:'https://h5.wxcourse.cdwjyyh.com/icon/20250214100002.png'
 			}
 		},
 		filters: {
@@ -350,8 +360,8 @@
 		},
 		onLoad(option) {
 			this.urlOption = option.course ? JSON.parse(option.course) : {},
-				// console.log(this.urlOption)
-				this.code = option.code
+			// console.log(this.urlOption)
+			this.code = option.code
 			this.isvip = option.isvip
 			this.videoId = this.urlOption.videoId
 			this.companyId = this.urlOption.companyId
@@ -370,7 +380,7 @@
 					isUser: this.isUservip
 				}
 			}
-			console.log(this.urlOption, 111)
+			// console.log(this.urlOption, 111)
 			//获取到code和token和id直接自动登录
 			this.qwUserId = this.urlOption.qwUserId || ''
 			this.corpId = this.urlOption.corpId || ''
@@ -386,22 +396,25 @@
 			}
 		},
 		onShow() {
-			console.log("onShow=====")
 			this.tipsOpen = false
 			this.isExpand = true
 			this.isLogin = this.utils.isLogin() //登录判断
 			this.uuId = generateRandomString(16)
+			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
 			this.users = uni.getStorageSync("userInfo") ? JSON.parse(uni.getStorageSync("userInfo")) : {}
 			this.userId = this.users.userId
-			console.log('===========');
+			if(uni.getStorageSync('UserAppToken')){
+				this.istoken=true
+				this.userId = this.users.userId;
+				this.isLOOK()
+			}
+			console.log(this.users,111)
 			console.log(uni.getStorageInfoSync());
 			console.log('UserAppToken:' + uni.getStorageSync('UserAppToken'));
-			console.log('AppToken:' + uni
-				.getStorageSync('AppToken'));
-			console.log('===========');
+			// console.log('AppToken:' + uni.getStorageSync('AppToken'));
+			// this.isLOOK()
 			if (this.isvip == 1 || uni.getStorageSync('UserAppToken')) {
 				this.getH5CourseVideoDetailsM()
-				//就是这个地方,没有执行
 			}
 			if (this.videoId) {
 				this.getH5CourseByVideo()
@@ -440,7 +453,7 @@
 						timestamp: res.data.timestamp, // 必填,生成签名的时间戳
 						nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
 						signature: res.data.signature, // 必填,签名
-						jsApiList: ["updateAppMessageShareData"] // 必填,需要使用的JS接口列表
+						jsApiList: ["updateAppMessageShareData", "onMenuShareAppMessage",] // 必填,需要使用的JS接口列表
 					});
 				})
 			},
@@ -448,34 +461,56 @@
 				let self = this
 				//分享好友
 				// 配置--你到时候把配置全局 --就是这些东西  调接口拿
-				wx.ready(function() { //需在用户可能点击分享按钮前就先调用
-					wx.updateAppMessageShareData({
-						title: self.courseInfo.courseName + self.courseInfo.title, // 分享标题
-						desc: self.courseInfo.title, // 分享描述
-						link: self.copylink,
-						// 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
-						imgUrl: self.courseInfo.thumbnail, // 分享图标
-						success: function(res) {
-							// console.log(self.copylink,'456');
-							self.showzhidao = true
-							self.setImg = false
-							self.showShare = false
-							// 设置成功
-							uni.showToast({
-								title: '海报已生成',
-								icon: 'none',
-								duration: 1000
-							});
-						},
-						fail: function(err) {
-							uni.showToast({
-								title: '海报生成失败,请重试',
-								icon: 'none',
-								duration: 2000
-							})
-						}
-					})
-				});
+				setTimeout(()=>{
+					wx.ready(function() { //需在用户可能点击分享按钮前就先调用
+						wx.updateAppMessageShareData({
+							title: self.courseInfo.courseName + self.courseInfo.title, // 分享标题
+							desc: self.courseInfo.title, // 分享描述
+							link: self.copylink,
+							// 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
+							imgUrl: self.courseInfo.thumbnail||self.imgs, // 分享图标
+							success: function(res) {
+								// console.log(self.copylink,'456');
+								self.showzhidao = true
+								self.setImg = false
+								self.showShare = false
+								// 设置成功
+								uni.showToast({
+									title: '卡片已生成',
+									icon: 'none',
+									duration: 1000
+								});
+							},
+							fail: function(err) {
+								uni.showToast({
+									title: '卡片生成失败,请重试',
+									icon: 'none',
+									duration: 2000
+								})
+							}
+						})
+						// 另外一个方法·
+						wx.onMenuShareAppMessage({
+							title: self.courseInfo.courseName + self.courseInfo.title, // 分享标题
+							desc: self.courseInfo.title, // 分享描述
+							link: self.copylink,
+							// 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
+							imgUrl: self.courseInfo.thumbnail, // 分享图标
+							success: function(res) {
+								self.showzhidao = true
+								self.setImg = false
+								self.showShare = false
+								// 设置成功
+								uni.showToast({
+									title: '卡片已生成',
+									icon: 'none',
+									duration: 1000
+								});
+							},
+						})
+					});
+				},300)
+				
 			},
 			closeimg() {
 				this.setImg = false
@@ -494,7 +529,7 @@
 					linkId: this.linkId,
 					userId: this.userId,
 					videoId: this.videoId,
-					code: this.code,
+					// code: this.code,
 					createTime: ''
 				}
 				idlookCourse(param).then(res => {
@@ -572,6 +607,9 @@
 				sharecourselink(params).then(res => {
 					if (res.code == 200) {
 						this.copylink = res.data
+						if (this.copylink.startsWith('http://')) {
+							this.copylink = this.copylink.replace('http://', 'https://');
+						  }
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -594,6 +632,9 @@
 				sharecourselink(params).then(res => {
 					if (res.code == 200) {
 						this.copylink = res.data
+						if (this.copylink.startsWith('http://')) {
+							this.copylink = this.copylink.replace('http://', 'https://');
+						  }
 						// console.log(res.data)
 						setTimeout(() => {
 							uni.setClipboardData({
@@ -786,6 +827,7 @@
 						if (res.code == 200) {
 							// console.log(res)
 							this.courseInfo = res.data
+							console.log('aaaa',this.courseInfo)
 							uni.setNavigationBarTitle({
 								title: this.courseInfo && this.courseInfo.title ? this.courseInfo
 									.title : ''
@@ -807,7 +849,6 @@
 			},
 			getH5CourseVideoDetailsM() {
 				console.log(1433223);
-				// 不要同名  方法名字喝接口名字不能这样搞
 				// {videoId: this.videoId}
 				console.log(this.isvip == 1)
 				getH5CourseVideoDetails(this.urlOption).then(res => {
@@ -815,6 +856,7 @@
 						if (res.code == 200) {
 							// console.log(res.course.videoUrl)
 							this.videoUrl = res.course.videoUrl
+							this.poster=res.course.imgUrl
 							// this.videoUrl = res.course && res.course.lineOne ? res.course.lineOne : ""
 							this.config = res.config || {}
 							this.duration = res.course && res.course.duration ? res.course.duration : 0
@@ -875,7 +917,14 @@
 			},
 			submit() {
 				// 登录
-				this.courseAnswer()
+				if(this.istoken){
+					this.courseAnswer()
+				}else{
+					uni.showToast({
+						title: "请先授权登录!",
+						icon: "none"
+					})
+				}
 			},
 			// 答题
 			courseAnswer() {
@@ -1064,10 +1113,10 @@
 							let beforLoginUrl = uni.getStorageSync('beforLoginPage');
 							// console.log("beforLoginUrl:"+beforLoginUrl);
 							// console.log(`登录成功后跳转${beforLoginUrl}`);
+							this.isLOOK()
 							uni.reLaunch({
 								url: beforLoginUrl
 							});
-							this.isLOOK()
 							window.location.href = window.location.href
 						} else {
 							uni.showToast({

+ 1 - 1
pages/courseManage/index.vue

@@ -80,7 +80,7 @@
 			}
 		},
 		onLoad() {
-			console.log(this.windowHeight);
+			// console.log(this.windowHeight);
 			this.bodyHeight = `calc(${this.windowHeight}px - 56px)`
 			uni.setNavigationBarTitle({
 				title: '数据'

+ 39 - 21
pages/courseManage/vip/index.vue

@@ -193,15 +193,21 @@
 						<view class="tagbox-item x-f tag-active">未打标签</view>
 					</view> -->
 					<view class="x-bc" style="margin-top: 30px;">
-						<view class="sharePop-item y-f" @click="buildimg">
+						<view class="sharePop-item y-f " @click="shareimg" style="text-align: center;">
+							<image src="@/static/images/card_icon.png" mode="aspectFill"
+							style="width: 80rpx; height: 80rpx;margin-top: 20rpx;"></image>
+							<view style="font-weight: bold;margin-bottom: 4px;">生成卡片</view>
+							<view style="font-size: 12px;color: #888;">指导分享轻松转发</view>
+						</view>
+						<view class="sharePop-item y-f " @click="buildimg"  style="text-align: center;">
 							<image src="@/static/images/poster_icon.png" mode="aspectFill"></image>
 							<view style="font-weight: bold;margin-bottom: 4px;">生成海报</view>
 							<view style="font-size: 12px;color: #888;">保存海报美观宣传</view>
 						</view>
-						<view class="sharePop-item y-f" @click="copyLink">
+						<view class="sharePop-item y-f " @click="copyLink"  style="text-align: center;">
 							<image src="@/static/images/link_icon.png" mode="aspectFill"></image>
 							<view style="font-weight: bold;margin-bottom: 4px;">复制链接</view>
-							<view style="font-size: 12px;color: #888;">生成链接一键复制</view>
+							<view style="font-size: 12px;color: #888; " >生成链接一键复制</view>
 						</view>
 					</view>
 				</view>
@@ -217,21 +223,19 @@
 				</view>
 			</view>
 		</u-modal>
+		<!-- 长按保存海报 -->
 		<u-popup :show="setImg"  @close="closeimg" :round="12">
 			<view  class="w100 h500">
 				<image :src="codeLink.url" class="codeimg w660" mode="widthFix"></image>
 			</view>
 			<view class="justify-around mtb40">
-				<view class="column justify-center align-center" @click="shareimg">
-					<image src='@/static/image/wechat.png' class="w80 h80"></image>
-					<view class="mt10">微信好友</view>
-				</view>
 				<view class="column justify-center align-center" @click="downimg">
 					<image src='@/static/image/downicon.png' class="w80 h80"></image>
 					<view class="mt10">长按图片保存</view>
 				</view>
 			</view>
 		</u-popup>
+		<!-- 卡片分享引导 -->
 		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
 			<view class="point-box">
 				<view class="imgshe" >
@@ -244,6 +248,7 @@
 					class="w50 h50 mlr10"></image>
 					</view>
 					<view class="mt20">选择 “转发给朋友”</view>
+					<view style="color: #cbcbcb;" class="fs28 mt40">点击任意位置关闭弹窗</view>
 				</view>
 			</view>
 		</u-overlay>
@@ -432,13 +437,15 @@
 				codeLink: [],
 				zhanshitag:'',
 				copyLinks:'',
-				showzhidao:false
+				showzhidao:false,
+				imgs:'https://h5.wxcourse.cdwjyyh.com/icon/20250214100002.png'
 			}
 		},
 		onLoad() {
 			uni.setNavigationBarTitle({
 				title: '数据统计'
 			});
+			// this.getjssdklist()
 		},
 		onShow() {
 			this.getfsuserListdata()
@@ -450,7 +457,6 @@
 			this.getfsuserListdata()
 			this.getcompanyTag()
 			this.getblacknum()
-			this.getjssdklist()
 		},
 		computed: {
 			selectedCount() {
@@ -480,17 +486,15 @@
 					wx.updateAppMessageShareData({
 						title: self.user.userName+"邀请您成为会员", // 分享标题
 						desc: self.user.deptName, // 分享描述
-						link:self.copylinks, 
-										// 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
-						imgUrl: self.codeLink.url, // 分享图标
+						link:self.copyLinks, 
+						imgUrl: self.codeLink.url ||self.imgs, // 分享图标
 						success: function(res) {
-							console.log(self.codeLink.url,'456');
 							self.showzhidao=true
 							self.setImg=false
 							self.showShare=false
 							// 设置成功
 							uni.showToast({
-								title: '海报已生成',
+								title: '卡片已生成',
 								icon: 'none',
 								duration: 1000
 							}); 
@@ -498,7 +502,7 @@
 						fail: function(err) {
 							console.log(err);
 							uni.showToast({
-								title: '海报生成失败,请重试',
+								title: '卡片生成失败,请重试',
 								icon: 'none',
 								duration: 2000
 							})
@@ -529,7 +533,7 @@
 				getgroupList().then(res => {
 					if (res.code == 200) {
 						this.columns = [res.data]
-						console.log(this.columns)
+						// console.log(this.columns)
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -967,6 +971,10 @@
 				this.companytag.forEach(tag => {
 					tag.checked = false; // 将所有标签的show属性重置为true
 				});
+				this.showPop = false
+				this.$nextTick(()=>{
+					this.getfsuserListdata()
+				})
 			},
 			closeCalendar() {
 				this.showCalendar = false
@@ -994,8 +1002,9 @@
 				if (this.idx.length == 0) {
 					this.showCompanytag = this.companytag
 				}
-
-				this.getfsuserListdata()
+				this.$nextTick(()=>{
+					this.getfsuserListdata("refresh")
+				})
 			},
 			chooseTag(i) {
 				this.companytag[i].checked = !this.companytag[i].checked
@@ -1006,6 +1015,8 @@
 			vipInvite() {
 				this.invitePop = true
 				this.sharetaglist=null
+				this.getlink('preload')
+				this.getjssdklist()
 			},
 			copyLink() {
 				this.setTimeShow = true
@@ -1039,7 +1050,7 @@
 					}
 				})
 			},
-			getlink(){
+			getlink(type){
 				//生成链接
 				const param={
 					code:'',
@@ -1051,7 +1062,11 @@
 				becomeVipuser(param).then(res=>{
 					if(res.code==200){
 						this.copyLinks=res.data
-						console.log(this.copyLinks)
+						if (this.copyLinks.startsWith('http://')) {
+							this.copyLinks = this.copyLinks.replace('http://', 'https://');
+						  }
+						console.log('28835',this.copyLinks)
+						console.log(this.copyLinks,'235')
 					}else{
 					}
 				})
@@ -1068,6 +1083,9 @@
 				becomeVipuser(param).then(res=>{
 					if(res.code==200){
 						this.copyLinks=res.data
+						if (this.copyLinks.startsWith('http://')) {
+							this.copyLinks = this.copyLinks.replace('http://', 'https://');
+						  }
 						console.log(this.copyLinks)
 						setTimeout(()=>{
 							uni.setClipboardData({
@@ -1269,7 +1287,7 @@
 		}
 
 		&-body {
-			padding: 10px 15px;
+			padding: 10px 10px;
 		}
 
 		.radiobox {

+ 308 - 18
pages/user/index.vue

@@ -2,7 +2,7 @@
 	<view class="content">
 		<view class="bg"></view>
 		<view class="cont-box">
-			<view class="user-cont">
+			<view class="user-cont" @click="navTo('/pages/user/userInfo')">
 				<view class="user-box" v-if="user!=null">
 					<view class="left">
 						<image src="../../static/images/default.png"></image>
@@ -11,7 +11,7 @@
 							<view class="account">{{user.deptName}}</view>
 						</view>
 					</view>
-					<view class="right" @click="navTo('/pages/user/userInfo')">
+					<view class="right" >
 						<image src="../../static/images/right_arrow.png"></image>
 					</view>
 				</view>
@@ -23,17 +23,17 @@
 			
 			<view class="menu-box">
 				<view class="title-box">
-					<image class="icon" src="../../static/images/office.png"></image>
+					<image class="icon" src="../../static/manergevip/chang.png"></image>
 					<view class="title">常用功能</view>
 				</view>
 				<view class="line"></view>
 				<view class="menus">
-					<view class="menu-item" @click="navTo('/pages/user/ai/index')">
-						<image src="../../static/images/menu_info.png"></image>
+					<!-- <view class="menu-item" @click="navTo('/pages/user/ai/index')">
+						<image src="../../static/manergevip/serve.png"></image>
 						<view class="m-name">AI客服</view>
-					</view>
+					</view> -->
 					<view class="menu-item" @click="navTo('/pages/user/qwSop/sop')">
-						<image src="../../static/images/menu_info.png"></image>
+						<image src="../../static/manergevip/sop.png"></image>
 						<view class="m-name">群发SOP</view>
 					</view>
 					<!-- <view class="menu-item" @click="navTo('/pages/user/courseSop/sop')">
@@ -44,10 +44,18 @@
 						<image src="../../static/images/menu_info.png"></image>
 						<view class="m-name">看课管理</view>
 					</view>
+					<view class="menu-item" @click="navTo('/pages/user/users/users')">
+						<image src="../../static/manergevip/qudao.png"></image>
+						<view class="m-name">渠道管理</view>
+					</view>
+					<view class="menu-item" @click="handleShare">
+						<image src="../../static/manergevip/share-manage.png"></image>
+						<view class="m-name">渠道邀请</view>
+					</view>
 				</view>
 				
 			</view>
-			<view class="menu-box">
+			<!-- <view class="menu-box">
 				<view class="title-box">
 					<image class="icon" src="../../static/images/office.png"></image>
 					<view class="title">客户管理</view>
@@ -67,7 +75,7 @@
 						<view class="m-name">导入微信用户</view>
 					</view>
 				</view>
-			</view>
+			</view> -->
 			<!-- <view class="menu-box">
 				<view class="title-box">
 					<image class="icon" src="../../static/images/office.png"></image>
@@ -103,18 +111,29 @@
 			</view> -->
 			<view class="menu-box">
 				<view class="title-box">
-					<image class="icon" src="../../static/images/office.png"></image>
+					<image class="icon" src="../../static/manergevip/qita.png"></image>
 					<view class="title">其它工具</view>
 				</view>
 				<view class="line"></view>
-				<view class="menus">
+				<!-- <view class="menus">
 					<view class="menu-item" @click="navTo('/pages/user/users/users')">
 						<image src="../../static/images/menu_info.png"></image>
 						<view class="m-name">通讯录</view>
 					</view>
+				</view> -->
+				<view class="menus">
+					<view class="menu-item" @click="navTo('/pages/user/about')">
+						<image src="../../static/manergevip/about.png"></image>
+						<view class="m-name">关于我们</view>
+					</view>
+					<view class="menu-item" @click="navTo('/pages/user/editUser')">
+						<image src="../../static/manergevip/setup.png"></image>
+						<view class="m-name">设置</view>
+					</view>
 				</view>
+				
 			</view>
-			<view class="menu-box1">
+			<!-- <view class="menu-box1">
 				<view class="menu-item" @click="navTo('/pages/user/about')">
 					<view class="left">
 						<image src="../../static/images/icon_about_us.png"></image>
@@ -133,11 +152,71 @@
 						<image src="../../static/images/right_arrow.png"></image>
 					</view>
 				</view>
-			</view>
+			</view> -->
 			<view class="btn-box" >
 				<view class="sub-btn" @click="showLogout()">退出登录</view>
 			</view>
 		</view>
+		<!-- 分享弹窗 -->
+		<u-popup :show="showShare" :closeOnClickOverlay="true" :round='20' @close="closeShare" @open="openShare">
+			<view class="sharePop x-ac">
+				<view class="sharePop-item y-f" @click="shareimg">
+					<image src="@/static/images/card_icon.png" mode="aspectFill"
+						style="width: 80rpx; height: 80rpx;margin-top: 20rpx;"></image>
+					<view style="font-weight: bold;margin-bottom: 4px;">生成卡片</view>
+					<view style="font-size: 12px;color: #888;">指导分享轻松转发</view>
+				</view>
+				<view class="sharePop-item y-f" @click="buildimg">
+					<image src="@/static/images/poster_icon.png" mode="aspectFill"></image>
+					<view style="font-weight: bold;margin-bottom: 4px;">生成海报</view>
+					<view style="font-size: 12px;color: #888;">保存海报美观宣传</view>
+				</view>
+				<view class="sharePop-item y-f" @click="setTimeShow=true">
+					<image src="@/static/images/link_icon.png" mode="aspectFill"></image>
+					<view style="font-weight: bold;margin-bottom: 4px;">复制链接</view>
+					<view style="font-size: 12px;color: #888;">生成链接一键复制</view>
+				</view>
+			</view>
+		</u-popup>
+		<!-- 长按保存海报 -->
+		<u-popup :show="setImg"  @close="closeimg" :round="12">
+			<view  class="w100 h500">
+				<image :src="codeLink.url" class="codeimg w660" mode="widthFix"></image>
+			</view>
+			<view class="justify-around mtb40">
+				<view class="column justify-center align-center" @click="downimg">
+					<image src='@/static/image/downicon.png' class="w80 h80"></image>
+					<view class="mt10">长按图片保存</view>
+				</view>
+			</view>
+		</u-popup>
+		<!-- 设置链接有效时长弹窗 -->
+		<u-modal :show="setTimeShow" content='content' class="model" @confirm="confirmTime">
+			<view class="setTimebox">
+				<view class="timetip">不传默认以系统参数为准</view>
+				<view class="x-f">
+					<text style="margin-right: 20px;">链接有效时长(分钟)</text>
+					<u-input fontSize="14px" placeholder="链接有效时长" border="none" v-model="time" maxlength="5"></u-input>
+				</view>
+			</view>
+		</u-modal>
+		<!-- 卡片分享引导 -->
+		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
+			<view class="point-box">
+				<view class="imgshe" >
+					<image src='@/static/image/point.png' class="w300 h300"></image>
+				</view>
+				<view class="column colorf fs32 xu-box fs40
+				align-center justify-center">
+					<view class="justify-center">点击右上角
+					<image src="@/static/image/wxmore.png"
+					class="w50 h50 mlr10"></image>
+					</view>
+					<view class="mt20">选择 “转发给朋友”</view>
+					<view style="color: #cbcbcb;" class="fs28 mt40">点击任意位置关闭弹窗</view>
+				</view>
+			</view>
+		</u-overlay>
 		<u-modal :show="show" title="提示" :showCancelButton="true"  @cancel="hideLogout()" @confirm="logout()" content='确认退出吗?'></u-modal>
 	</view>
 </template>
@@ -145,12 +224,27 @@
 <script>
 	
 	import { getCompanyUser } from '@/api/user.js'
- 
+	import {
+		sharecourselink,
+		buildCode,
+		getSDK,
+		becomeVipuser,
+		becomeVipuserImg
+	} from '@/api/courseManage'
+	import wx from 'weixin-js-sdk'
 	export default {
 		data() {
 			return {
 				show:false,
 				user:null,
+				showShare:false,
+				copyLinks:'',
+				setTimeShow:false,
+				time:'',
+				setImg:false,
+				codeLink:'',
+				showzhidao:false,
+				imgs:'https://h5.wxcourse.cdwjyyh.com/icon/20250214100002.png'
 			}
 		},
 		onShow() {
@@ -158,7 +252,148 @@
 		
 		},
 		methods: {
-			
+			// 获取jssdk
+			getjssdklist() {
+				const param = {
+					url: window.location.href.split('#')[0] // 注意去除 hash
+				}
+				getSDK(param).then(res => {
+					wx.config({
+						debug: false,
+						appId: res.data.appId, // 必填,公众号的唯一标识
+						timestamp: res.data.timestamp, // 必填,生成签名的时间戳
+						nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
+						signature: res.data.signature, // 必填,签名
+						jsApiList: ["updateAppMessageShareData", "onMenuShareAppMessage", ] // 必填,需要使用的JS接口列表
+					});
+				})
+			},
+			shareimg(){
+				//分享好友
+				let self = this
+				// 配置--你到时候把配置全局 --就是这些东西  调接口拿
+				wx.ready(function() { //需在用户可能点击分享按钮前就先调用
+					wx.updateAppMessageShareData({
+						title: self.user.userName+"邀请您成为群管", // 分享标题
+						desc: self.user.deptName, // 分享描述
+						link:self.copyLinks, 
+						imgUrl: self.codeLink.url ||self.imgs, // 分享图标
+						success: function(res) {
+							self.showzhidao=true
+							self.setImg=false
+							self.showShare=false
+							// 设置成功
+							uni.showToast({
+								title: '卡片已生成',
+								icon: 'none',
+								duration: 1000
+							}); 
+						},
+						fail: function(err) {
+							console.log(err);
+							uni.showToast({
+								title: '卡片生成失败,请重试',
+								icon: 'none',
+								duration: 2000
+							})
+						}
+					})
+				});
+			},
+			handleShare() {
+				this.showShare = true
+				this.getjssdklist()
+				this.getlink('preload'); // 提前加载链接
+			},
+			//设置链接时长
+			confirmTime() {
+				this.setTimeShow = false
+				this.showShare = false
+				this.getlink('preload')
+				this.copyLink()
+			},
+			closeimg(){
+				this.setImg=false
+				this.showShare=false
+			},
+			buildimg() {
+				//生成海报
+				this.setImg=!this.setImg
+				this.getshareimg()
+			},
+			getshareimg(){
+				//生成海报
+				uni.showLoading({
+					title: '正在生成中...'
+				})
+				const param={
+					code:'',
+					companyId:this.user.companyId,
+					companyUserId:this.user.userId
+				}
+				becomeVipuserImg(param).then(res=>{
+					if(res.code==200){
+						this.codeLink=res.data
+						this.getlink()
+						console.log(res)
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+							duration: 2000
+						});
+					}
+				})
+			},
+			getlink(type){
+				//生成链接
+				const param={
+					companyId:this.user.companyId,
+					companyUserId:this.user.userId,
+					tagids:'',
+					limitTime:this.time
+				}
+				becomeVipuser(param).then(res=>{
+					if(res.code==200){
+						this.copyLinks=res.data
+						if (this.copyLinks.startsWith('http://')) {
+							this.copyLinks = this.copyLinks.replace('http://', 'https://');
+						  }
+						console.log(this.copyLinks,'分享链接')
+					}else{
+					}
+				})
+			},
+			copyLink(){
+				setTimeout(() => {
+					uni.setClipboardData({
+						data: this.copyLinks,
+						success: () => {
+							uni.showToast({
+								title: '链接已复制',
+								icon: 'none',
+								duration: 2000
+							});
+							// this.setTimeShow = !this.setTimeShow
+							this.showShare = false
+						},
+						fail: () => {
+							uni.showToast({
+								title: '复制失败',
+								icon: 'none'
+							});
+						}
+					});
+				}, 100)
+			},
+			closeShare() {
+				this.showShare = false
+				// console.log('open');
+			},
+			openShare() {
+				// this.showShare = false
+				// console.log('close');
+			},
 			showLogout(){
 				this.show=true;
 			},
@@ -186,6 +421,7 @@
 				getCompanyUser(data).then(res => {
 					if(res.code==200){
 						this.user=res.data;
+						console.log(this.user)
 					}else{
 						
 					}
@@ -202,6 +438,39 @@
 	}
 </style>
 <style scoped lang="scss">
+	.imgshe{
+		display: flex;
+		flex-direction: row-reverse
+	}
+	.point-box{
+		height: 100%;
+		width: 100%;
+		.xu-box{
+			border: #f5f5f5 4rpx dashed;
+			padding: 20rpx 20rpx;
+		}
+	}
+	.setTimebox {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		width: fit-content;
+		height: fit-content;
+	}
+	.codeimg {
+		position: absolute;
+		z-index: 9999;
+		left: 40rpx;
+		top: 40rpx;
+	}
+	.timetip {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #2979ff;
+		text-align: center;
+		margin-bottom: 5px;
+	}
 	.content{
 		position: relative;
 		height: 100%;
@@ -302,8 +571,8 @@
 					align-items: center;
 					justify-content: flex-start;
 					.icon{
-						width: 30rpx;
-						height:30rpx;
+						width: 40rpx;
+						height:40rpx;
 					}
 					.title{
 						margin-left: 10rpx;
@@ -382,7 +651,7 @@
 		}
 	}
 	.btn-box{
-		margin: 60rpx 0rpx 30rpx;
+		margin: 30rpx 0rpx 30rpx;
 		display: flex;
 		align-items: center;
 		justify-content: center;
@@ -398,5 +667,26 @@
 			font-family: PingFang SC;
 			color: #111;
 		}
+	}
+	.sharePop {
+		background-color: #fff;
+		padding: 50px 0;
+		padding-bottom: 100px;
+		border-radius: 20px 20px 0 0;
+	
+		&-item {
+			padding: 0 10px;
+			box-sizing: border-box;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			display: inline-flex !important;
+	
+			image {
+				height: 48px;
+				width: 48px;
+				margin-bottom: 10px;
+			}
+		}
 	}
 </style>

+ 86 - 70
pages/user/users/userInfo.vue

@@ -8,48 +8,65 @@
 						<image class="img" :src="avatar" mode="aspectFill"></image>
 					</view>
 					<view class="info">
-						<text class="name">{{nickName}}</text>
-						<text class="title">{{postNames}}</text>
+						<!-- <text class="name">{{nickName}}</text> -->
+						<!-- <text class="title">{{postNames}}</text> -->
+						<view>
+							<text class="fs28">{{nickName}}</text>
+							<text class="fs24 ml40 base-color-3">{{sex}}</text>
+						</view>
+						<view class="base-color-9 fs24 mt12">注册时间:{{!userinfo.createTime||userinfo.createTime.slice(0, 10)}}</view>
 					</view>
 				</view>
 				<image v-if="!isShow" class="right" src="/static/images/icon_edit.png" mode="aspectFill" @click="editInfo"></image>
 			</view>
 			<!-- 公司 -->
-			<view class="comp-info">
-				<image class="img" src="/static/images/icon_comp_white.png" mode="aspectFill"></image>
-				<text class="text">{{deptName}}</text>
+			<view class="justify-between">
+				<view class="comp-info">
+					<image class="img" src="/static/images/icon_comp.png" mode="aspectFill"></image>
+					<text class="fs24 base-color-6">{{deptName}}</text>
+				</view>
+				<view class="comp-info">
+					<image class="img" src="/static/images/phone.png" mode="aspectFill"></image>
+					<text class="fs24 base-color-6">{{userinfo.phonenumber}}</text>
+				</view>
 			</view>
+			
 		</view>
 		<!-- 详细信息 -->
-		<view class="info-detail">
-			<view class="item">
-				<text class="label">姓名</text>
-				<text class="text">{{nickName}}</text>
-			</view>
-			<view class="item">
-				<text class="label">性别</text>
-				<text class="text">{{sex}}</text>
-			</view>
-			<view class="item column" @click="callPhone(phonenumber)">
-				<view class="left">
-					<text class="label">手机</text>
-					<text class="text">{{phonenumber}}</text>
+		<view class="p20 justify-between wrap">
+			<view class="base-bg-sure radius12 pl20 ptb12 item">
+				<view class="bold">会员总数</view>
+				<view class="mt12 base-color">
+					<text class="fs40 bold">98</text>
+					<text class="fs28">人</text>
 				</view>
-				<image class="img" src="/static/images/icon_phone_left.png" mode="aspectFill"  ></image>
 			</view>
-			<view class="item">
-				<text class="label">邮箱</text>
-				<text class="text">{{email}}</text>
+			<view class="base-bg-sure radius12 pl20 ptb12 item">
+				<view class="bold">今日新增会员</view>
+				<view class="mt12 base-color">
+					<text class="fs40 bold">98</text>
+					<text class="fs28">人</text>
+				</view>
 			</view>
-			<view class="item">
-				<text class="label">部门</text>
-				<text class="text">{{deptName}}</text>
+			<view class="base-bg-sure radius12 pl20 ptb12 item">
+				<view class="bold">会员红包数</view>
+				<view class="mt12 base-color">
+					<text class="fs40 bold">98</text>
+					<text class="fs28">个</text>
+				</view>
 			</view>
-			<view class="item">
-				<text class="label">岗位</text>
-				<text class="text">{{postNames}}</text>
+			<view class="base-bg-sure radius12 pl20 ptb12 item">
+				<view class="bold">新会员红包金额</view>
+				<view class="mt12 base-color">
+					<text class="fs40 bold">98</text>
+					<text class="fs28">元</text>
+				</view>
 			</view>
 		</view>
+		<view class="footer-btn ">
+			<view :class="shenhe?'shenhed':'notshenhe'" @click="submitshen">{{shenhe?'已审核':'待审核'}}</view>
+			<view class="base-bg-false base-color-red bor-red" @click="submitjin">{{jinyong?'禁用':'未禁用'}}</view>
+		</view>
 	</view>
 </template>
 
@@ -67,6 +84,9 @@
 				sex:"",
 				isShow:false,
 				userId:undefined,
+				userinfo:[],
+				shenhe:false,
+				jinyong:false
 			}
 		},
 		onLoad(option) {
@@ -94,8 +114,16 @@
 			}
 		},
 		methods: {
+			submitshen(){
+				
+			},
+			submitjin(){
+				
+			},
 			bindUser(data){
 				var that=this;
+				that.userinfo=data.user
+				console.log(that.userinfo)
 				that.nickName=data.user.nickName;
 				that.deptName=data.user.dept.deptName;
 				that.posts=data.post;
@@ -127,7 +155,6 @@
 				getUserInfoByUserId(data).then(
 					res => {
 						that.bindUser(res);
-						
 					},
 					rej => {}
 				);
@@ -164,10 +191,38 @@
 	}
 </style>
 <style scoped lang="scss">
+	.footer-btn{
+		display: flex;
+		justify-content: space-around;
+		position: fixed;
+		bottom: 0;
+		width: 100%;
+		padding: 40rpx 0;
+		view{
+			width: 40%;
+			text-align: center;
+			padding: 20rpx 0;
+			border-radius: 50rpx;
+		}
+	}
+	.shenhed{
+		background-color: rgba(64, 149,229,0.1);
+		border: 2rpx solid #4095E5;
+		color:#4095E5 ;
+	}
+	.notshenhe{
+		background-color:rgba(255, 108,71,0.1) ;
+		border: 2rpx solid #FF6C47;
+		color: #FF6C47;
+	}
+	.item{
+		width: calc(50% - 20rpx);
+		margin-top: 20rpx;
+	}
 	.content{
 		// 个人信息
 		.user-info{
-			background: #115296;
+			background: linear-gradient(to right, #dae9ff, #e1e1fd);
 			padding: 0 30upx;
 			.info-box{
 				display: flex;
@@ -192,20 +247,6 @@
 							height: 100%;
 						}
 					}
-					.info{
-						height: 80upx;
-						display: flex;
-						flex-direction: column;
-						justify-content: space-between;
-						.name{
-							font-size: 30upx;
-							color: #fff;
-						}
-						.title{
-							font-size: 28upx;
-							color: #fff;
-						}
-					}
 				}
 				.right{
 					width: 40upx;
@@ -227,31 +268,6 @@
 				}
 			}
 		}
-		// 详细信息
-		.info-detail{
-			padding: 0 24upx;
-			.item{
-				padding: 20upx 0;
-				border-bottom: 1px solid #f7f7f7;
-				.label{
-					font-size: 30upx;
-					color: #999;
-					margin-right: 20upx;
-				}
-				.text{
-					font-size: 30upx;
-					color: #333;
-				}
-				&.column{
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					.img{
-						width: 50upx;
-						height: 50upx;
-					}
-				}
-			}
-		}
+		
 	}
 </style>

+ 149 - 29
pages/user/users/users.vue

@@ -1,24 +1,55 @@
 <template>
-	<view>
-		<view class="top">
-			<u-search placeholder="输入姓名搜索" v-model="searchContent" @custom="search()" @search="search()"></u-search>
+	<view class="column" style="height: calc(100% - 20rpx) ;">
+		<view class="top " >
+			<u-search placeholder="输入姓名/昵称搜索" bgColor='#F8F8FC'
+			 v-model="searchContent" @custom="search()" @search="search()"></u-search>
+			 <view class="justify-around  fs28">
+			 	<view v-for="(item,index) in tabs" :key="index" :class="act==index?'active':'notact'" 
+				@click="tabact(index)" class="flex-1 center ptb20">{{item}}</view>
+				<view v-show="act==1" @click="selectact=!selectact" :class="selectact?'active':''"
+				class="flex-1 center ptb20">批量</view>
+			 </view>
 		</view>
-		<scroll-view scroll-y class="indexes" :scroll-into-view="'indexes-'+ listCurID" :style="[{height:'calc(100vh -  88rpx)'}]"
-		 :scroll-with-animation="true" :enable-back-to-top="true">
+		
+		<scroll-view scroll-y class="indexes flex-1 pb60" :scroll-into-view="'indexes-'+ listCurID" :style="[{height:'calc(100vh - 300rpx)'}]"
+		 :scroll-with-animation="true" :enable-back-to-top="true" >
 			<view v-for="(item,index) in list" :key="index">
 				<view :class="'indexItem-' + item.firstLetter" :id="'indexes-' + item.firstLetter" :data-index="item.firstLetter">
 					<view class="zm">{{item.firstLetter}}</view>
 					<view class="user-list">
-						<view class="user-item" v-for="(subitem) in item.list" @click="navTo(subitem)" >
-							<view class="avatar" >
-								<image class="img" :src="subitem.avatar?(baseUrl+subitem.avatar):avatar" mode="aspectFill"></image>
-							</view> 
-							<view class="content">
-								<view class="name">
-									{{subitem.nickName}}
+						<view class="user-item justify-start" v-for="(subitem,index) in item.list" 
+						@click="navTo(subitem)" :key="index">
+							<u-checkbox-group @change="changeitem(subitem.userId)" v-if="selectact">
+								<u-checkbox :checked="subitem.checked" shape="circle" activeColor="#1773ff" :name="subitem.userId"
+									labelColor="#1773ff" />
+							</u-checkbox-group>
+							<view class="bgf p20 radius16 flex-1">
+								<view class="justify-between align-center">
+									<view class="justify-start align-center">
+										<view class="avatar" >
+											<image class="img" :src="subitem.avatar?(baseUrl+subitem.avatar):avatar" mode="aspectFill"></image>
+										</view> 
+										<view class="content">
+											<view class="name">
+												{{subitem.nickName}}
+											</view>
+											<view class="dept justify-start align-center">
+												<u-icon name="phone"></u-icon><view>1576984582</view> </view>
+											<view class="dept">注册时间:2025-01-24</view>
+										</view>
+									</view>
+									<view class="base-color fs24">未禁用</view>
 								</view>
-								<view class="dept">
-									{{subitem.deptName}}
+								<view class="justify-between mt10">
+									<view class="fs24 mt20 ml10" style="color: #115296;">
+										{{subitem.deptName}}
+									</view>
+									<!-- <view class="fs24 base-color-red mr10 bor-red
+									base-bg-false plr20 radius40 ptb4">已禁用</view> -->
+									<view class="fs24 base-color mr10 bor-blue h52 lh50
+									base-bg-sure plr20 radius40 " style="width: fit-content;" v-if="act==0">已审核</view>
+									<view class="fs24 base-color-red mr10 bor-red h52 lh50
+									base-bg-false plr20 radius40 " style="width: fit-content;" v-if="!selectact&&act==1">待审核</view>
 								</view>
 							</view>
 						</view>
@@ -28,7 +59,23 @@
 		</scroll-view>
 		<view class="indexBar" :style="[{height:'calc(100vh - 88rpx)'}]">
 			<view class="indexBar-box" @touchstart="tStart" @touchend="tEnd" @touchmove.stop="tMove">
-				<view class="indexBar-item" v-for="(item,index) in list" :key="index" :id="index" @touchstart="getCur" @touchend="setCur"> {{item.firstLetter}}</view>
+				<view class="indexBar-item" v-for="(item,index) in list" :key="index" :id="index" 
+				@touchstart="getCur" @touchend="setCur"> {{item.firstLetter}}</view>
+			</view>
+		</view>
+		<view class="justify-between base-bg-f foot-select " v-if="selectact">
+			<view class="align-center justify-between " v-if="selectact">
+				<u-checkbox-group @change="selectAll">
+					<u-checkbox :checked="isSelectAll" shape="circle" activeColor="#1773ff" :name="true"
+						label="全选" labelColor="#333" />
+						<text class="fs24 base-color-9 ml12">已选{{ selectedUsers.length }}个</text>
+						<!-- {{selectedCount}} -->
+				</u-checkbox-group>
+			</view>
+			<view class="justify-center ">
+				<button class="base-bg-f radius100 base-color-red h62 ml10 fs28 lh60"
+					style="border: #ef4c50 solid 2rpx;" 
+					@click="batchApprove">通过审核</button>
 			</view>
 		</view>
 		<!--选择显示-->
@@ -50,7 +97,12 @@
 				listCurID: '',
 				list: [],
 				listCur: '',
-				searchContent:"",
+				searchContent:"",
+				tabs:['已审核','未审核'],
+				act:0,
+				selectact:false,
+				isSelectAll:false,
+				selectedUsers:[]
 			}
 		},
 		onLoad() {
@@ -66,6 +118,58 @@
 			}).exec()
 		},
 		methods: {
+			batchApprove(){
+				 if (this.selectedUsers.length === 0) {
+					  uni.showToast({
+						title: '请先选择用户',
+						icon: 'none',
+					  });
+					  return;
+				}
+			},
+			// 全选
+			selectAll() {
+				this.isSelectAll = !this.isSelectAll;
+				this.selectedUsers = []; // 清空已选列表
+				 // 遍历所有用户项,更新 checked 状态
+				    this.list = this.list.map(group => {
+				      group.list = group.list.map(user => {
+				        if (this.isSelectAll) {
+				          this.selectedUsers.push(user.userId); // 添加用户ID到选中列表
+				        }
+				        return {
+				          ...user,
+				          checked: this.isSelectAll,
+				        };
+				      });
+				      return group;
+				    });
+				// 如果取消全选,清空 selectedUsers
+					if (!this.isSelectAll) {
+					  this.selectedUsers = [];
+					}
+			},
+			// 单选 /反选 
+			changeitem(userId) {
+				const index = this.selectedUsers.indexOf(userId);
+				if (index === -1) {
+				  this.selectedUsers.push(userId); // 选中
+				} else {
+				  this.selectedUsers.splice(index, 1); // 取消选中
+				}
+				// 更新全选状态
+				this.isSelectAll = this.selectedUsers.length === this.getTotalUsers();
+			},
+			// 计算总用户数
+			  getTotalUsers() {
+			    return this.list.reduce((total, group) => total + group.list.length, 0);
+			  },
+			tabact(index){
+				this.act=index
+				if(index==0){
+					this.selectact=false
+				}
+			},
 			getUser(){
 				var data = {searchKey:this.searchContent};
 				var that=this;
@@ -137,15 +241,33 @@
 		}
 	}
 </script>
-<style  >
-	 
+<style  lang="scss">
+	::v-deep {
+		.foot-select {
+			 position: fixed;
+			  bottom: 0;
+			  width: 100%;
+			  padding: 20rpx;
+			  background: #fff;
+			  box-shadow: 0 -2rpx 10rpx rgba(0,0,0,0.1);
+			  z-index: 1000;
+		}
+	}
+	 .active{
+		 color: #1773ff;
+		 font-weight: bold;
+	 }
+	 .notact{
+		 color: #888;
+	 }
 	page {
-		 
+		background-color: #F8F8FC; 
 	}
 	.top{
-		height: 88rpx;
+		/* height: 88rpx; */
 		background-color: #fff;
 		padding: 0rpx 15rpx;
+		padding-top: 20rpx;
 	}
 	.indexes {
 		position: relative;
@@ -215,21 +337,19 @@
 		font-size: 48upx;
 	}
 	.zm{
-		height:50rpx;
+		height:30rpx;
 		padding: 0rpx 20rpx;
+		font-size: 24rpx;
+		color: #888;
+		background: #F8F8FC;
 	}
 	.user-list{
-		
-		background-color: #fff;
-		 
+		 margin: 20rpx;
+		 border-radius: 20rpx;
 	}
 	.user-item{
-		padding: 15rpx;
 		width: 100%;
-		display: flex;
-		align-items: center;
-		justify-content: flex-start;
-		border-bottom: 1px solid #f7f7f7;
+		margin: 12rpx 0;
 	}
 	.user-item .avatar{
 		width: 100upx;

BIN
static/images/card_icon.png


BIN
static/manergevip/about.png


BIN
static/manergevip/chang.png


BIN
static/manergevip/qita.png


BIN
static/manergevip/qudao.png


BIN
static/manergevip/serve.png


BIN
static/manergevip/setup.png


BIN
static/manergevip/share-manage.png


BIN
static/manergevip/sop.png