瀏覽代碼

首次提交代码

puyao 2 周之前
父節點
當前提交
45f84d923a
共有 47 個文件被更改,包括 3319 次插入3058 次删除
  1. 32 1
      App.vue
  2. 13 13
      api/course.js
  3. 31 4
      api/courseManage.js
  4. 38 2
      api/user.js
  5. 38 8
      common/request.js
  6. 107 19
      components/courseItem.vue
  7. 17 1
      components/dropdownPanel.vue
  8. 12 5
      components/enterpriseimg.vue
  9. 116 29
      components/liveCourse.vue
  10. 12 11
      components/newuser.vue
  11. 5 5
      components/userUrgeCourse.vue
  12. 60 31
      components/vipUserItem.vue
  13. 9 9
      manifest.json
  14. 28 0
      note.txt
  15. 126 81
      pages.json
  16. 6 6
      pages/auth/login.vue
  17. 116 210
      pages/auth/wxlogin.vue
  18. 47 2
      pages/course/course.vue
  19. 0 210
      pages/courseManage/course/becomeSale.vue
  20. 0 221
      pages/courseManage/course/becomeVip.vue
  21. 0 255
      pages/courseManage/course/courseVideo.vue
  22. 122 51
      pages/courseManage/manage/changeVip.vue
  23. 10 4
      pages/courseManage/manage/exprotList.vue
  24. 4 1
      pages/courseManage/manage/lableSetup.vue
  25. 0 787
      pages/courseManage/manage/manageDetail.vue
  26. 0 465
      pages/courseManage/manage/manageIndex.vue
  27. 7 2
      pages/courseManage/manage/userDataDetail.vue
  28. 19 12
      pages/courseManage/operation/index.vue
  29. 34 23
      pages/courseManage/statistics.vue
  30. 42 16
      pages/courseManage/vip/ManageDetail.vue
  31. 214 56
      pages/customer/index.vue
  32. 3 3
      pages/enterprise/enterprise.vue
  33. 13 12
      pages/index/index.vue
  34. 7 5
      pages/urgeCourse/urgeCourse.vue
  35. 62 5
      pages/user/editUser.vue
  36. 70 31
      pages/user/index.vue
  37. 32 7
      pages/user/userInfo.vue
  38. 535 74
      pages/user/users/becomeVIP.vue
  39. 9 4
      pages/user/users/userInfo.vue
  40. 261 11
      pages/user/users/users.vue
  41. 2 13
      pages_course/reward.vue
  42. 460 194
      pages_course/video.vue
  43. 548 144
      pages_course/videovip.vue
  44. 9 8
      project.config.json
  45. 42 6
      router/router.js
  46. 1 1
      utils/common.js
  47. 二進制
      xiaohongqun_uni_app.zip

+ 32 - 1
App.vue

@@ -1,5 +1,5 @@
 <script>
-	var wsUrl="ws://42.194.245.189:8008/app/webSocket/w-";
+	// var wsUrl="ws://42.194.245.189:8008/app/webSocket/w-";
 	var pingpangTimes=null;
 	var isSocketOpen=false;
 	var socket=null;
@@ -11,6 +11,7 @@
 		},
 		onLaunch: function() {
 			// uni.hideTabBar();
+			this.checkUpdate()
 			console.log(nowapp)
 		},
 		onLoad() {
@@ -29,7 +30,37 @@
 			
 		},
 		methods:{
+			checkUpdate() {
+				const updateManager = uni.getUpdateManager();
+				updateManager.onCheckForUpdate(function(res) {
+					// 请求完新版本信息的回调
+					console.log('是否有新版本:', res.hasUpdate);
+				});
 			
+				updateManager.onUpdateReady(function() {
+					uni.showModal({
+						title: '更新提示',
+						content: '新版本已经准备好,是否重启小程序?',
+						confirmText: '立即重启',
+						confirmColor: '#2179f5',
+						success(res) {
+							if (res.confirm) {
+								// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
+								updateManager.applyUpdate();
+							}
+						}
+					});
+				});
+			
+				updateManager.onUpdateFailed(function() {
+					// 新的版本下载失败
+					uni.showModal({
+						title: '更新提示',
+						content: '新版本下载失败,请检查网络后重试。',
+						showCancel: false
+					});
+				});
+			},
 		}
 	}
 </script>

+ 13 - 13
api/course.js

@@ -2,27 +2,27 @@ import Request from '../common/request.js';
 let request = new Request().http
 
 export function loginByMp(data) {
- 	 return request('/app/wx/courseLogin2',data,'POST','application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+ 	 return request('/app/wx/courseLogin2',data,'POST','application/json;charset=UTF-8');
  }
 
 // 获取真实链接
 export function getRealLink(data) {
-	return request('/app/course/getRealLink', data, 'GET','','https://h5api.his.cdwjyyh.com');
+	return request('/app/course/getRealLink', data, 'GET','');
 }
 
 // h5课程简介
 export function getH5CourseByVideoId(data) {
-	return request('/course_uniapp/app/course/wx/h5/getH5CourseByVideoId', data, 'GET','','https://h5api.his.cdwjyyh.com');
+	return request('/course_uniapp/app/course/wx/h5/getH5CourseByVideoId', data, 'GET','');
 }
 
 // h5课程详情加问答
 export function getH5CourseVideoDetails(data) {
-	return request('/course_uniapp/app/course/wx/h5/videoDetails', data, 'GET','','https://h5api.his.cdwjyyh.com');
+	return request('/course_uniapp/app/course/wx/h5/videoDetails', data, 'GET','');
 }
 
 // 答题发红包
 export function courseAnswer(data) {
-	return request('/course_uniapp/app/course/wx/h5/courseAnswer', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+	return request('/course_uniapp/app/course/wx/h5/courseAnswer', data, 'POST', 'application/json;charset=UTF-8');
 }
 
 // // 记录看课时间(旧)
@@ -32,41 +32,41 @@ export function courseAnswer(data) {
 
 // 记录看课时间(新)
 export function getFinishCourseVideo(data) {
-	return request('/course_uniapp/app/course/wx/h5/updateWatchDuration', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+	return request('/course_uniapp/app/course/wx/h5/updateWatchDuration', data, 'POST', 'application/json;charset=UTF-8');
 }
 
 // 关注客服 是否添加客服
 export function getIsAddKf(data) {
-	return request('/course_uniapp/app/course/wx/h5/isAddKf', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+	return request('/course_uniapp/app/course/wx/h5/isAddKf', data, 'POST', 'application/json;charset=UTF-8');
 }
 
 // 流量(缓冲百分比)
 export function getInternetTraffic(data) {
-	return request('/course_uniapp/app/course/wx/h5/getInternetTraffic', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+	return request('/course_uniapp/app/course/wx/h5/getInternetTraffic', data, 'POST', 'application/json;charset=UTF-8');
 }
 
 // 每十分钟获得积分
 export function getIntegralByH5Video(data) {
-	return request('/app/course/getIntegralByH5Video', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+	return request('/app/course/getIntegralByH5Video', data, 'POST', 'application/json;charset=UTF-8');
 }
 
 // 发送奖励
 export function sendReward(data) {
-	return request('/course_uniapp/app/course/wx/h5/sendReward', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+	return request('/course_uniapp/app/course/wx/h5/sendReward', data, 'POST', 'application/json;charset=UTF-8');
 }
 
 // 播放错误上报
 export function getErrMsg(data) {
-	return request('/course_uniapp/app/course/wx/h5/getErrMsg', data, 'POST', 'application/x-www-form-urlencoded','https://h5api.his.cdwjyyh.com');
+	return request('/course_uniapp/app/course/wx/h5/getErrMsg', data, 'POST', 'application/x-www-form-urlencoded');
 }
 
 
 // 获取getWxConfig
 export function getWxConfig(data) {
-	return request('/app/wx/mp/getWxConfig', data, 'GET','','https://h5api.his.cdwjyyh.com');
+	return request('/app/wx/mp/getWxConfig', data, 'GET','');
 }
 
  //微信小程序登录
  export function loginByMiniApp(data) {
  	 return request('/course_uniapp/app/wx/miniapp/loginByMa',data,'POST','application/json;charset=UTF-8');
- }
+ }

+ 31 - 4
api/courseManage.js

@@ -185,8 +185,7 @@ export function changevipUserAll(data){
 
 //根据经销商  查询标签下会员
 export function gettagsUser(data){
-	const url = '/companyapp/app/companyTag/tagSubUsers'
-	return request(url, data, 'GET','application/json;charset=UTF-8')
+	return request('/companyapp/app/companyTag/tagSubUsers', data, 'POST', 'application/json;charset=UTF-8');
 }
 
 // h5课程简介
@@ -266,7 +265,7 @@ export function geturgeCourse(data){
 
 //获取企微账号
 export function geturgeqiwei(data){
-	return request('/companyapp/app/qwWorkTask/getMyQwUserList', data, 'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/qwWorkTask/getQwUserList', data, 'GET', 'application/json;charset=UTF-8');
 }
 
 //获取课程视频详情
@@ -327,5 +326,33 @@ export function getWorkTask(data){
 
 //获取企业理念
 export function getenterprise(data){
-	return request('/app/index/getConcept',data,  'GET', 'application/json;charset=UTF-8');
+	return request('/app/index/getConcept',data, 'GET');
+}
+
+//获取今日课程
+export function getTodayCourse(data){
+	return request('/companyapp/app/fs/course/todayCourseList',data, 'GET', 'application/json;charset=UTF-8');
+}
+
+//更改课程时间
+export function updataTime(data){
+	return request('/companyapp/app/fs/course/setWatchTime',data, 'POST', 'application/json;charset=UTF-8');
+}
+
+//更改课程时间
+export function updataRemark(data){
+	return request('/companyapp/app/fs/user/changeUserRemark',data, 'POST', 'application/json;charset=UTF-8');
+}
+//通过id获取项目
+export function getprojectChange(data){
+	return request('/companyapp/app/companyUser/getDictByKeyByProject',data, 'POST','application/json;charset=UTF-8');
+}
+
+//查看用户轨迹
+export function getuserTrajectory(data){
+	return request('/companyapp/app/operationLog/page',data, 'POST', 'application/json;charset=UTF-8');
+}
+//生成小程序链接
+export function copyuniLink(data) {
+	return request('/companyapp/app/fs/course/getGotoWxAppLink', data, 'GET', 'application/json;charset=UTF-8');
 }

+ 38 - 2
api/user.js

@@ -28,17 +28,53 @@ let request = new Request().http
  }
  // 成为会员
  export function registerCourses(data) {
- 	 return request('/course_uniapp/companyapp/app/fs/user/beMember',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/companyapp/app/fs/user/beMember',data,'POST','application/json;charset=UTF-8');
  }
  export function setUserInfo(data) {
  	 return request('/companyapp/app/user/setUserInfo',data,'POST','application/json;charset=UTF-8');
  }
  //微信小程序登录
  export function loginByMiniApp(data) {
- 	 return request('/app/wx/miniapp/loginByMa',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/course_uniapp/app/wx/miniapp/loginByMa',data,'POST','application/json;charset=UTF-8');
  }
  
  //微信小程序查询用户信息
  export function getwxuser(data) {
  	 return request('/app/wx/miniapp/getMaUser',data,'GET','application/json;charset=UTF-8');
+ }
+ 
+ //查询销售部门列表
+ export function querydepartment(data) {
+ 	 return request('/companyapp/app/companyUser/deptList',data,'GET','application/json;charset=UTF-8');
+ }
+ //查询销售岗位列表
+ export function querypost(data) {
+ 	 return request('/companyapp/app/companyUser/postList',data,'GET','application/json;charset=UTF-8');
+ }
+ //查询销售角色列表
+ export function queryrole(data) {
+ 	 return request('/companyapp/app/companyUser/roleList',data,'GET','application/json;charset=UTF-8');
+ }
+ //修改销售部门和岗位
+ export function modifysaleNews(data) {
+ 	 return request('/companyapp/app/companyUser/changeUserDeptAndPost',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ //获取头像以及昵称信息
+ export function getusername(data) {
+ 	 return request('/companyapp/app/wx/h5/mp/userInfo',data,'POST','application/json;charset=UTF-8');
+ }
+ //会员页面获取项目列表
+ export function getprojectlist(data) {
+ 	 return request('/companyapp/app/common/getDictByKey',data,'GET','application/json;charset=UTF-8');
+ }
+ 
+ //检查是否有头像以及昵称
+ export function checkUserInfo(data) {
+ 	 return request('/course_uniapp/app/user/checkUserInfo',data,'GET','application/json;charset=UTF-8');
+ }
+ 
+ //更改用户头像以及昵称
+ export function editUser(data) {
+ 	 return request('/course_uniapp/app/user/editUser',data,'POST','application/json;charset=UTF-8');
  }

+ 38 - 8
common/request.js

@@ -1,26 +1,55 @@
 // uni-app请求封装
-import {TOKEN_KEY} from '@/utils/common.js'
+import {TOKEN_WEXIN} from '@/utils/common.js'
 export default class Request {
 	http(router, data = {}, method,contentType) {
 		let that = this;
 		//曹丽芹
 		// let path = 'http://192.168.10.131:7015'
-		// let path = 'https://userapp.fbylive.com'//福本源
+		//涂小龙
+		// let path = 'http://192.168.10.125:7015'
+		//刘明欣
+		// let path = 'http://192.168.10.150:8080'
+		//张玉朋
+		// let path = 'http://192.168.10.157:8113'
+		//庄旭
+		
+		// let path = 'http://192.168.10.158:8007'//蜂巢快药
+		let path = 'https://userapp.fbylive.com'//福本源
 		// let path = 'https://userapp.zkhj6.com'//中康
-		let path = 'http://company.h5.test.ylrztop.com'//云融融智
+		// let path = 'https://user.test.ylrztop.com/api'//云融融智
+		// let path = 'https://userapp.ashyisheng.com'//蜂巢快药
+		// let path = 'https://userapp.whhm.ylrzcloud.com/prod-api'//惠名大药房
+		// let path = 'https://userapp.xdtongshuntang.top'//同顺堂
+		// let path = 'https://userapp.liangmiaoedu.com'//良苗
+		// let path = 'https://usercourse.beliyostore.com'//倍力优
+		// let path = 'https://app.bainian1000y.cn/prod-api'//百年康城
+		// let path = 'https://userapp.drk.ylrzcloud.com/prod-api'//青岛市德瑞康中医医院
+		// let path = 'https://userapp.moonxiang.com/prod-api'//北京存在文化
+		// let path = 'https://userapp.fbylive.com'//福本源测试
 		uni.setStorageSync('requestPath',path)
 		// uni.showLoading({
 		// 	title: '加载中'
 		// });
 		let token = uni.getStorageSync('AppToken');
+		// if(router.indexOf("/companyapp")!=-1){
+		// 	router =router.replace('/companyapp','/companyappnew')
+		// }
 		if(router.indexOf("/course_uniapp")!=-1){
 			router =router.replace('/course_uniapp','')
-			// path = 'https://userapp.fbylive.com'
+			// path = 'https://userapp.fbylive.com'//福本源
 			// path = 'https://userapp.zkhj6.com'//中康
-			let path = 'http://company.h5.test.ylrztop.com'//云融融智
+			// path = 'https://user.test.ylrztop.com/api'//云融融智
+			// path = 'https://userapp.ashyisheng.com'//蜂巢快药
+			// path = 'https://userapp.liangmiaoedu.com'//良苗
+			// path = 'https://usercourse.beliyostore.com'//倍力优
+			// path = 'https://userapp.bainian1000y.cn/prod-api'//百年康城
+			// path = 'https://userapp.whhm.ylrzcloud.com/prod-api'//惠名大药房
+			// path = 'https://userapp.cqsft.vip'//四福堂
+			// path = 'https://userapp.drk.ylrzcloud.com/prod-api'//青岛市德瑞康中医医院
 			// path = 'http://192.168.10.131:7014'
+			// path = 'https://userapp.fbylive.com/new'//福本源测试
 			//#ifdef MP-WEIXIN
-			token =uni.getStorageSync('AppToken_MYfby')
+			token =uni.getStorageSync('TOKEN_WEXIN')
 			//#endif
 			// #ifdef H5
 			token =uni.getStorageSync('TOKEN_KEY')
@@ -62,7 +91,7 @@ export default class Request {
 						  loginPage = '/pages/auth/login';
 						  // #endif
 						  // #ifdef MP-WEIXIN
-						  loginPage = '/pages/auth/wxlogin';
+						  loginPage = '/pages/enterprise/enterprise';
 						  // #endif
 						  
 						//如果登录界面已打开,自动关闭
@@ -91,7 +120,8 @@ export default class Request {
 				},
 				complete:(res) =>{
 					//接口调用结束的回调函数(调用成功、失败都会执行)
-					if (res.data.code == 401) {
+					console.log('1111',res)
+					if (res.data&& res.data.code == 401) {
 						return false
 					}
 					uni.hideLoading();

+ 107 - 19
components/courseItem.vue

@@ -1,5 +1,6 @@
 <template>
 	<view class="courselist-item" style="height: 100%;">
+		
 		<view class="courselist-con x-start" @click="toCourseDetail(info)">
 			<view class="courselist-img">
 				<!-- <view class="status">进行中</view> -->
@@ -13,14 +14,41 @@
 					</view>
 				</view>
 				<view class="courselist-desc one-t" v-show="from != 'course'">{{info.courseName}}</view>
-				<view :class="from == 'course' ? 'courselist-con-timebox ':'courselist-con-timebox x-f'">
-					<view class="x-f acea-row"><u-icon class="icon" name="file-text" color="#999"
-							size="20"></u-icon>{{info.createTime}}</view>
-					<view class="x-f acea-row"><u-icon class="icon" name="clock" color="#999"
-							size="16"></u-icon>{{$formatSeconds(info.duration,1)}}</view>
+				<view :class="from == 'course' ? 'courselist-con-timebox ':'courselist-con-timebox x-f'" @click.passive.stop>
+					<view class="x-f acea-row"><u-icon class="icon" name="hourglass" color="#999"
+							size="20"></u-icon>开始时间:{{info.startDateTime?info.startDateTime:''}}</view>
+					<view class="x-f acea-row"><u-icon class="icon" name="hourglass-half-fill" color="#999"
+							size="20"></u-icon>结束时间:{{info.endDateTime?info.endDateTime:''}}</view>
+					<view class="justify-between align-center">
+						<view class="x-f acea-row"><u-icon class="icon" name="clock" color="#999"
+								size="16"></u-icon>{{$formatSeconds(info.duration,1)}}</view>
+						<view class="u-border radius50 ptb8 plr18 base-color-6" style="width: fit-content;"
+						@click="showtime=!showtime">调整看课时间</view>
+					</view>
+					<u-modal :show="showtime"  :title="titletime" @confirm="confirmtime" @close="showtime=!showtime" 
+					@cancel="showtime=!showtime" :closeOnClickOverlay="true" :showCancelButton="true">
+						<view class="slot-content">
+							<view class="justify-start align-center">
+								<view class="mr20">开始时间:</view>
+								<u-input v-model="startTimevalue"  placeholder="请选择开始时间" @focus="startTime=!startTime"></u-input>
+							</view>
+							<view class="justify-start align-center mt20">
+								<view class="mr20">结束时间:</view>
+								<u-input v-model="endTimevalue"  placeholder="请选择结束时间" @focus="endtime=!endtime"></u-input>
+							</view>
+						</view>
+					</u-modal>
+					<u-datetime-picker :show="startTime" v-model="value1" mode="time" @cancel="startTime=!startTime"
+					@confirm="confirmstart"></u-datetime-picker>
+					<u-datetime-picker :show="endtime" v-model="value2" mode="time" @cancel="endtime=!endtime"
+					@confirm="confirmend"></u-datetime-picker>
 				</view>
 			</view>
 		</view>
+		<view class="justify-start align-center ml20">
+			<view class="base-color-6 mr20">所属项目</view>
+			<view>{{info.projectName}}</view>
+		</view>
 		<view class="courselist-footer x-f ">
 			<!--#ifdef MP-WEIXIN-->
 			<view class="courselist-footer-item x-c " @click="handleClick()"><u-icon
@@ -110,7 +138,8 @@
 	import {
 		sharecourselink,
 		buildCode,
-		getSDK
+		getSDK,
+		updataTime
 	} from '@/api/courseManage'
 	import html2canvas from 'html2canvas'
 	import wx from 'weixin-js-sdk'
@@ -151,22 +180,80 @@
 				isLongPress: false,
 				painterSrc: '',
 				showzhidao: false,
-				imgPath:this.$store.state.imgpath,
-				imgs:this.$store.state.imgpath+'/app/image/logo.png',
+				// imgPath:this.$store.state.imgpath,
+				imgs:this.$store.state.imgpath+'/app/image/logoshare.png',
+				showtime:false,
+				titletime:'调整看课时间',
+				endTimevalue:'',
+				startTimevalue:'',
+				startTime:false,
+				endtime:false,
+				value1:'00:00',
+				value2:"23:59"
 			}
 		},
-		// computed: {
-		//     imgPath() {
-		//       return this.$store.state.imgpath
-		//     }
-		//   },
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		  },
 		onLoad() {},
 		mounted() {
-			
 			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
-
 		},
 		methods: {
+			confirmstart(e){
+				this.startTimevalue=e.value
+				this.startTime=!this.startTime
+				console.log(e)
+			},
+			confirmend(e){
+				this.endTimevalue=e.value
+				this.endtime=!this.endtime
+				console.log(e)
+			},
+			confirmtime(){
+				if(this.startTimevalue==''){
+					uni.showToast({
+						title: '请选择开始时间',
+						icon: 'none',
+						duration: 1000
+					});
+					return
+				}
+				if(this.endTimevalue==''){
+					uni.showToast({
+						title: '请选择结束时间',
+						icon: 'none',
+						duration: 1000
+					});
+					return
+				}
+				this.showtime=!this.showtime
+				const data={
+					periodId:this.info.periodId,
+					courseId:this.info.courseId,
+					videoId:this.info.videoId,
+					startDateTime:this.info.startDateTime.substring(0, 10)+' '+this.startTimevalue+":00",
+					endDateTime:this.info.endDateTime.substring(0, 10)+' '+this.endTimevalue+":59"
+				}
+				updataTime([data]).then(res=>{
+					if(res.code==200){
+						uni.showToast({
+							title: '完成看课时间调整!',
+							icon: 'none',
+							duration: 1000
+						});
+						this.$emit('retime',1)
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				})
+			},
 			handleClick(){
 				this.parentMethod();
 				 this.$emit('trigger-share', {
@@ -174,7 +261,7 @@
 					 path: "pages_course/videovip",
 					 onshow:true,
 					 params: { companyId: this.user.companyId, companyUserId: this.user.userId,id:this.info.id,
-					 courseId:this.info.courseId,videoId:this.info.videoId,periodId:this.info.periodId},
+					 courseId:this.info.courseId,videoId:this.info.videoId,periodId:this.info.periodId,projectId:this.info.projectId},
 					 img:this.info.thumbnail||this.imgs
 				   });
 			},
@@ -329,7 +416,7 @@
 				uni.navigateTo({
 					// url: '/pages/courseManage/course/learning?course='+JSON.stringify(info)
 					// url: `/pages/courseManage/course/learning?course=${JSON.stringify(info)}&isvip=1`
-					url:'/pages/courseManage/course/courseVideo?videoId='+info.videoId
+					url:'/pages_course/course/courseVideo?videoId='+info.videoId+'&id='+info.id+'&periodId='+info.periodId
 				})
 
 			},
@@ -359,7 +446,7 @@
 					companyId: this.user.companyId,
 					companyUserId: this.user.userId,
 					courseId: this.info.courseId,
-					time: this.time,
+					effectiveDuration: this.time,
 					videoId: this.info.videoId,
 					periodId:this.info.periodId,
 					id:this.info.id
@@ -435,8 +522,9 @@
 					fileId: this.info.fileId,
 					courseName: this.info.courseName,
 					videoId:this.info.videoId,
-					
+					periodId:this.info.periodId
 				}
+				console.log()
 				uni.navigateTo({
 					url: '/pages/courseManage/statistics?info=' + JSON.stringify(info)
 				})

+ 17 - 1
components/dropdownPanel.vue

@@ -4,7 +4,7 @@
 			<view class="mask" :class="showMask ? 'show' : 'hide'" :style="{top: top}" @tap="tapMask"></view>
 			<view class="navs">
 				<view class="c-flex-center" :class="{ 'c-flex-center': index > 0, actNav: index === actNav }"
-					v-for="(item, index) in navData" :key="index" @click="navClick(item,index)">
+					v-for="(item, index) in filterData" :key="index" @click="navClick(item,index)">
 					<view v-if="item.special&&item.name=='批量'" class="x-f" style="align-items: end;">
 						<u-icon name="file-text" :color="index === actNav ?'#2979ff':'#222'" size="20"></u-icon>
 						{{index === actNav ? '取消':'批量'}}
@@ -88,6 +88,14 @@
 			// 		this.showMask=false
 			// 	}
 			// }
+			navData(newVal,oldVal){
+				console.log(newVal,oldVal)
+				// if(newVal==2){
+				// 	console.log(newVal,oldVal)
+				// 	this.popupShow=false
+				// 	this.showMask=false
+				// }
+			}
 		},
 		computed: {
 		    imgPath() {
@@ -139,6 +147,14 @@
 					this.actNav = null
 					return
 				}
+				if(item.type=='click'){
+					this.popupShow = false
+					this.showMask = false
+					this.$emit('onChange', this.actNav);
+					this.$emit('onClick', item);
+					this.actNav = index;
+					return
+				}
 
 				this.titname = index
 				this.$emit('onClick', item);

+ 12 - 5
components/enterpriseimg.vue

@@ -3,7 +3,7 @@
 		<view class="top-content ">
 			<view class="status_bar" :style="{height: statusBarHeight+'px'}"></view>
 			<!-- 这里是状态栏 -->
-			<view class="top-title">企业理念</view>
+			<view class="top-title">关于</view>
 		</view>
 		<view :style="{marginTop: `calc(${statusBarHeight}px + 88rpx)`}">
 			<image :src="enterpriseimg"
@@ -23,15 +23,22 @@
 			};
 		},
 		mounted() {
+			this.getenterprises()
 			console.log(this.$store.state.imgpath)
 			const imgs = []
-			this.getenterprise()
 		},
 		methods: {
-			getenterprise(){
+			getenterprises(){
 				getenterprise().then(res=>{
-					this.enterpriseimg=res.data.images
-					console.log(res)
+					if(res.code==200){
+						console.log(res)
+						this.enterpriseimg=res.data.images
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
 				})
 			},
 		}

+ 116 - 29
components/liveCourse.vue

@@ -5,17 +5,17 @@
 				<view :class="activeTab == 0 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(0)">
 					<view>直播计划</view>
 					<view class="headnav-num">3</view>
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/idle.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/images/idle.png'" mode="aspectFill"></image>
 				</view>
 				<view :class="activeTab == 1? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(1)">
 					<view>今日直播</view>
 					<view class="headnav-num">3</view>
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/streaming.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/images/streaming.png'" mode="aspectFill"></image>
 				</view>
 				<view :class="activeTab == 2 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(2)">
 					<view>往日直播</view>
 					<view class="headnav-num">3</view>
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/finished.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/images/finished.png'" mode="aspectFill"></image>
 				</view>
 			</view> -->
 			<!-- <view class="x-bc">
@@ -23,17 +23,22 @@
 					<text>{{item.name}}</text><u-icon class="arrow-down" name="arrow-down" :color="searchbarNav == index ?'#1677ff':'#999'" size="12"></u-icon>
 				</view>
 			</view> -->
-			<dropdownPanel :filterData='filterData' @onChange="onChange" @confirm="confirm" @reset="reset">
-				<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnableds" 
-					:refresher-triggered="triggereds" refresher-background="rgba(0,0,0,0)"
-					@refresherrefresh="pullDownRefreshs" @refresherrestore="triggereds = false"
+			<dropdownPanel :filterData='filterData' @onChange="onChange" @confirm="confirm" @reset="reset"
+			@onClick="selindex">
+			<!-- <view class="justify-center align-center">
+				<view class="u-border ptb4 plr20 radius50 fs24 base-color-6">上一页</view>
+				<view class="mlr20">1</view>
+				<view class="u-border ptb4 plr20 radius50 fs24 base-color-6">下一页</view>
+			</view> -->
+				<scroll-view scroll-y="true" class="hb"  :refresher-enabled="isEnableds" @refresherrefresh="pullDownRefreshs"
+					:refresher-triggered="triggereds" refresher-background="rgba(0,0,0,0)" @refresherrestore="triggereds = false"
 					:upper-threshold="100" :lower-threshold="100" @refresherabort="triggereds = false"
 					@scrolltolower="reachBottoms">
 					<view  class="justify-between align-center mb20 mlr20 ">
-						<u-search placeholder="搜索训练营" v-model="keyword" :showAction="false" height="30px"
+						<u-search placeholder="搜索课程" v-model="keyword" :showAction="false" height="30px"
 							@search='searchKeyword'></u-search>
 					</view>
-					<view v-if="searchbarNav == 0">
+					<view v-if="searchbarNav == 1">
 						<view class="boxnav x-bc">
 							<view class="boxnav-item" v-for="(item,index) in courseList" :key="index">
 								<view class="boxnav-item-info one-t"
@@ -44,6 +49,7 @@
 					</view>
 					<u-loadmore :status="status" />
 				</scroll-view>
+				
 			</dropdownPanel>
 		</view>
 		<view  class="justify-between align-center mb20 mlr20 mt20 ">
@@ -51,13 +57,13 @@
 				@search='searchKeywordlist' bgColor='#fff'></u-search>
 		</view>
 		<view class="container-right" >
-			<scroll-view style="height:100%" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="triggered"
+			<scroll-view style="height:100%" :scroll-y="true" :refresher-enabled="isEnableds" :refresher-triggered="triggered"
 				refresher-background="rgba(0,0,0,0)" @refresherrefresh="pullDownRefresh" :scroll-top='scrollTop'
 				@refresherrestore="triggered = false" :upper-threshold="100" :lower-threshold="100"
 				@refresherabort="triggered = false" @scrolltolower="reachBottom" @scroll="scroll">
 				<view class="list">
 					<courseItem :from="'course'" :activeTab="1" v-for="(item,index) in dataList" :key="index"
-						:info="item"  @trigger-share="handleShare" :parent-method="parentMethod"/>
+						:info="item"  @trigger-share="handleShare" :parent-method="parentMethod" @retime='reflashtime'/>
 					<u-loadmore :status="loadStatus" />
 				</view>
 			</scroll-view>
@@ -68,7 +74,8 @@
 <script>
 	import {
 		getFsCourseList,
-		getCourseVdieoList
+		getCourseVdieoList,
+		getTodayCourse,
 	} from "@/api/courseManage.js"
 	import dropdownPanel from "@/components/dropdownPanel.vue"
 	import courseItem from "@/components/courseItem.vue"
@@ -83,8 +90,12 @@
 			return {
 				user: {},
 				filterData: [{
-						name: '训练营-营期',
+						name: '今日课程',
 						value: 0,
+						type: 'click',
+					},{
+						name: ' 我的课程',
+						value: 1,
 					},
 				],
 				contentH: 0,
@@ -92,9 +103,9 @@
 				courseList: [],
 				courseId: '',
 				searchbarNav: 0,
-				courserIndex: '',
+				courserIndex: null,
 				searchbar: [{
-						name: '训练营-营期'
+						name: '我的课程'
 					},
 					{
 						name: '课程状态'
@@ -123,7 +134,7 @@
 				dataList: [],
 				params: {
 					pageNum: 1,
-					pageSize: 10
+					pageSize: 4
 				},
 				triggered: false,
 				loadStatus: 'loadmore',
@@ -141,16 +152,72 @@
 					scrollTop: 0
 				},
 				shareConfig:'',
-				titleName:''
+				titleName:'',
+				seltoday:0
 			}
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
 		mounted() {
 			const windowHeight = uni.getSystemInfoSync().windowHeight
 			this.contentH = `calc(${windowHeight}px - 132px - 56px)`
 			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
-			this.getFsCourseList()
+			this.gettodaylist()
+			console.log(this.courserIndex)
 		},
 		methods: {
+			reflashtime(){
+				this.keywordlist=''
+				this.params.pageNum=1
+				this.dataList=[]
+				this.gettodaylist('refresh')
+				this.getFsCourseList('refresh')
+			},
+			gettodaylist(type){
+				const data={
+					pageNum:this.params.pageNum,
+					pageSize:this.params.pageSize,
+					keyword:this.keywordlist,
+				}
+				getTodayCourse(data).then(res=>{
+					console.log(res)
+					if(res.code==200){
+						this.viewload=false
+						const list=res.data.list
+						// this.dataList=res.data.list
+						if (type == 'refresh') {
+							this.dataList = list
+						} else {
+							this.dataList = [...this.dataList, ...list]
+						}
+						if ( res.data.isLastPage) {
+							this.loadStatus = 'nomore'
+						} else {
+							this.loadStatus = 'loadmore'
+						}
+					}else{
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						});
+					}
+				})
+			},
+			selindex(e){
+				this.seltoday=e.value
+				if(e.value==0){
+					this.params.pageNum = 1
+					this.gettodaylist('refresh')
+				}else{
+					this.params.pageNum = 1
+					this.keywordlist=''
+					this.getFsCourseList('refresh')
+				}
+				console.log(e)
+			},
 			handleShare(config) {
 			      // 保存分享配置到父页面数据
 			      this.shareConfig = config;
@@ -173,15 +240,24 @@
 				this.getFsCourseList()
 			},
 			handleCourse(item,index) {
+				console.log(index)
 				this.courserIndex = index
 				this.titleName=item.periodName
 				this.actid=item.periodId
 			},
 			confirm() {
+				if(this.actid==''){
+					uni.showToast({
+						icon: 'none',
+						title: '请选择课程',
+					});
+					return
+				}
 				this.courseId = this.actid
-				this.filterData[0].name=this.titleName
-				console.log(this.filterData[0].name)
+				this.filterData[1].name=this.titleName
+				console.log(this.filterData[1].name)
 				this.params.pageNum=1
+				// this.getListInit()
 				this.getListData('refresh')
 			},
 			searchKeyword(value){
@@ -193,7 +269,12 @@
 			searchKeywordlist(value){
 				this.dataList = []
 				this.keywordlist = value
-				this.getListData()
+				this.params.pageNum=1
+				if(this.seltoday==0){
+					this.gettodaylist()
+				}else{
+					this.getListData()
+				}
 			},
 			pullDownRefreshs() {
 				// 下拉
@@ -240,9 +321,9 @@
 						} else {
 							this.status = 'loadmore'
 						}
-						this.courseId=this.courseList[0].periodId
-						this.filterData[0].name=this.courseList[0].periodName
-						this.getListInit()
+						// this.courseId=this.courseList[0].periodId
+						// this.filterData[1].name=this.courseList[0].periodName
+						// this.getListInit()
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -257,9 +338,6 @@
 			clickSearchbar(type) {
 				this.searchbarNav = type == this.searchbarNav ? 'colse' : type
 			},
-			mescrollInit(mescroll) {
-				this.mescroll = mescroll;
-			},
 			getListInit() {
 				this.params.pageNum = 1
 				this.getListData('refresh')
@@ -317,7 +395,12 @@
 					uni.showNavigationBarLoading()
 					setTimeout(() => {
 						this.params.pageNum += 1;
-						this.getListData('more')
+						if(this.seltoday==0){
+							this.gettodaylist('more')
+						}else{
+							this.getListData('more')
+						}
+						// this.getListData('more')
 						uni.hideNavigationBarLoading()
 					}, 500);
 				}
@@ -331,7 +414,11 @@
 					this.triggered = false;
 					uni.stopPullDownRefresh()
 					this.params.pageNum = 1;
-					this.getListData('refresh')
+					if(this.seltoday==0){
+						this.gettodaylist('refresh')
+					}else{
+						this.getListData('refresh')
+					}
 				}, 500)
 			}
 		}

+ 12 - 11
components/newuser.vue

@@ -5,17 +5,17 @@
 			<view class="top-title">我的</view>
 		</view>
 		<view class="user-cont" :style="{marginTop: `calc(${statusBarHeight}px + 88rpx)`}">
-			<view class="user-box" v-if="user!=null">
+			<!-- <view class="user-box" v-if="user!=null">
 				<view class="left">
 					<u-avatar :src="user.avatar" size="50"></u-avatar>
 					<view class="user" >
 						<view v-if="!usertoken" class="fs40 bold" @click="loginto" >
 							立即登录
 						</view>
-						<view class="username">{{user}}</view>
+						<view class="username">{{user.nickname}}</view>
 					</view>
 				</view>
-			</view>
+			</view> -->
 			
 			<view class="company" v-if="user!=null">
 				<image :src="imgPath+'/app/images/icon_comp.png'"></image>
@@ -37,11 +37,11 @@
 			 	</view>
 			</view>
 		</view>
-		<view class="p20">
+		<!-- <view class="p20">
 			<view class="btn-box" v-if="usertoken">
 				<view class="sub-btn" @click="this.show=!this.show">退出登录</view>
 			</view>
-		</view>
+		</view> -->
 		<u-modal :show="show" @confirm="showLogout" :title="title" :content='content' :showCancelButton="true"
 		@cancel='this.show=!this.show'></u-modal>
 	</view>
@@ -61,8 +61,9 @@
 			}
 		},
 		mounted() {
-			this.usertoken=uni.getStorageSync('AppToken_MYfby')
-			this.user=uni.getStorageSync('phoneNumber')
+			this.usertoken=uni.getStorageSync('TOKEN_WEXIN')
+			this.user=JSON.parse(uni.getStorageSync('userInfo')) 
+			console.log(this.user)
 		},
 		computed: {
 		    imgPath() {
@@ -72,14 +73,14 @@
 		methods: {
 			loginto(){
 				uni.navigateTo({
-					url:'/pages/auth/wxlogin'
+					url:'/pages/enterprise/enterprise'
 				})
 			},
 			showLogout(){
-				uni.removeStorageSync('AppToken_MYfby')
-				// uni.removeStorageSync('AppToken_MYfby')
+				uni.removeStorageSync('TOKEN_WEXIN')
+				uni.removeStorageSync('userInfo')
 				uni.navigateTo({
-					url:'/pages/auth/wxlogin'
+					url:'/pages/enterprise/enterprise'
 				})
 			},
 			navTo(url){

+ 5 - 5
components/userUrgeCourse.vue

@@ -1,5 +1,5 @@
 <template>
-	<view>
+	<view class="hb">
 		<!-- <dropdownPanel :filterData='filterData' @confirm="confirmA" @reset="resetA" @onChange="onChangeA"
 			style="flex: 1;">
 			<view class="p20 fs28 column flex-1 hb hidden" v-if="searchbarNav == 0">
@@ -29,8 +29,8 @@
 				</scroll-view>
 			</view>
 		</dropdownPanel> -->
-		<view>
-			<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabled"
+		<view class="hb">
+			<scroll-view scroll-y="true" class="hb pb120" :refresher-enabled="isEnabled"
 				:refresher-triggered="triggered" refresher-background="rgba(0,0,0,0)"
 				@refresherrefresh="pullDownRefresh" @refresherrestore="triggere = false" :upper-threshold="100"
 				:lower-threshold="100" @refresherabort="triggered = false" @scrolltolower="reachBottom">
@@ -43,7 +43,7 @@
 						</view>
 					</view>
 				</view>
-				<u-loadmore :status="status" />
+				<u-loadmore :status="status"/>
 			</scroll-view>
 		</view>
 	</view>
@@ -95,7 +95,7 @@
 				isEnabled: true,
 				status: 'nomore',
 				pageNum: 1,
-				pageSize: 8,
+				pageSize:8,
 				userlist:[]
 			};
 		},

+ 60 - 31
components/vipUserItem.vue

@@ -10,7 +10,7 @@
 						labelColor="#FF6C47" />
 				</u-checkbox-group>
 				<view class="list-item w100" @click="morepage(item)" >
-					<view class="list-item-head x-bc">
+					<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">
@@ -20,22 +20,33 @@
 									<image class="list-item-copy" :src="imgPath+'/app/images/copy_icon.png'" mode="aspectFill"
 										@click="copyId(item.nickname)">
 									</image>
+									<text class="base-color-9">#{{item.userId}}</text>
 								</view>
-								<text class="list-item-name one-t fs24 base-color-9 ">备注:{{item.remark}}</text>
-								<view class="list-item-re">注册时间:{{item.createTime?item.createTime.substring(0,10):'--'}}
+								<text class="list-item-name one-t fs24 base-color-9 ">备注:{{item.remark?item.remark:'暂无'}}</text>
+								<view class="justify-start align-center" v-if="item.projectName!=null">
+									<view class="base-color-9 fs24">归属项目</view>
+									<view><u-tag :text="item.projectName!=null?item.projectName:'无'" 
+									size="mini" color="#029aff" bgColor="#fff" borderColor="#fff"></u-tag></view>
+								</view>
+								<view class="list-item-re justify-start align-center">
+									<view>注册时间:{{item.createTime?item.createTime.substring(0,10):'--'}}</view>
 								</view>
 							</view>
 						</view>
-						<image class="phone" :src="imgPath+'/app/manergevip/phone.png'" mode="aspectFill"
-							v-if="!isShowSelectAll" @click="tophone(item.phone)" @click.passive.stop></image>
+						<view @click.passive.stop>
+							<image class="phone" :src="imgPath+'/app/manergevip/phone.png'" mode="aspectFill"
+								v-if="!isShowSelectAll" @click="tophone(item.phone)" ></image>
+						</view>
 					</view>
 					<view class="list-item-desc">
 						<view class="taglist  ">
+							<view class="base-color-9 fs24">归属销售</view>
 							<view><u-tag :text="item.repeatCompanyUserName?item.repeatCompanyUserName:item.companyUserNickName" 
 							size="mini" color="#029aff" bgColor="#fff" borderColor="#fff"></u-tag></view>
-						<view v-for="(tag,i) in item.tag ? item.tag.split(',') : []" :key="index">
-							<u-tag :text="tag" size="mini" color="#999" bgColor="#fff" borderColor="#fff"></u-tag>
-						</view>
+							<view v-for="(tag,i) in item.tag ? item.tag.split(',') : []" :key="index">
+								<u-tag :text="tag" size="mini" color="#999" bgColor="#fff" borderColor="#fff"></u-tag>
+							</view>
+							
 						</view>
 						<view style="margin-top: 5px;" v-if="item.status==1&&item.isRepeatFans!==1">
 							<text class="label u-border-right pr20" style="color:#00af05;" v-if="item.courseCountStatus==1">正常看课</text>
@@ -53,9 +64,9 @@
 							<view class="btn-box base-color base-bg-sure bor-blue" @click="openModel('label',item)"
 								v-if="item.status==1&&item.isRepeatFans!==1">改标签</view>
 							<view class="btn-box base-color-red base-bg-false bor-red"
-								@click="openModel('disable',item)" v-if="item.status==1&&item.isRepeatFans!==1">禁用</view>
+								@click="openModel('disable',item)" v-if="item.status==1">禁用</view>
 							<view class="btn-box base-color-red base-bg-false bor-red"
-								@click="openModel('disabled',item)" v-if="item.status==0&&item.isRepeatFans!==1">取消禁用</view>
+								@click="openModel('disabled',item)" v-if="item.status==0||item.status==2">取消禁用</view>
 							<!-- <view class="btn-box base-color-red base-bg-false bor-red" @click="openModel('change',item)"
 								v-if="item.status!=7 && user.userType==0">更换归属</view> -->
 						</view>
@@ -83,7 +94,7 @@
 </template>
 
 <script>
-	import {getchangesUserInfo} from '@/api/courseManage.js'
+	import {getchangesUserInfo,updataRemark} from '@/api/courseManage.js'
 	export default {
 		props: {
 			viplist: {
@@ -131,9 +142,9 @@
 				openData:[],
 				morelist:[
 					{
-						name:'改姓名',
+						name:'改昵称',
 						value:0,
-						text:'请输入姓名'
+						text:'请输入修改昵称'
 					},
 					{
 						name:'改备注',
@@ -153,7 +164,11 @@
 				this.showmore=!this.showmore
 			},
 			confirmchange(){
-				this.updatagroup()
+				if(this.titlelist=='改昵称'){
+					this.updatagroup()
+				}else{
+					this.updataremark()
+				}
 				console.log(this.openData.userId)
 				console.log(this.changeremark)
 				console.log(this.changelist)
@@ -162,10 +177,29 @@
 					this.showmore=false
 				},200)
 			},
+			updataremark(){
+				const data={
+					remark:this.changeremark,
+					userCompanyUserId:this.openData.userCompanyUserId
+				}
+				updataRemark(data).then(res=>{
+					if(res.code==200){
+						uni.showToast({
+							icon: 'none',
+							title: "修改成功"
+						})
+						this.$emit('changelistname')
+					}else{
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
 			updatagroup(){
 				const data={
 					fsUserId:this.openData.userId,
-					remark:this.changeremark,
 					nickName:this.changelist
 				}
 				getchangesUserInfo(data).then(res=>{
@@ -189,15 +223,10 @@
 				this.contpl=item.text
 				this.selnum=item.value
 				console.log(this.openData)
-				if(item.value==0){
-					this.changelist=this.openData.nickname
-					this.changeremark=this.openData.remark
-					this.showlist=true
-				}else if(item.value==1){
-					this.changelist=this.openData.nickname
-					this.changeremark=this.openData.remark
-					this.showlist=true
-				}
+				console.log('标题',this.titlelist)
+				this.changelist=this.openData.nickname
+				this.changeremark=this.openData.remark
+				this.showlist=true
 			},
 			closemore(){
 				this.showmore=!this.showmore
@@ -279,20 +308,20 @@
 			},
 			morepage(item) {
 				uni.navigateTo({
-					url: '/pages/courseManage/vip/ManageDetail?id='+item.userId
+					url: '/pages/courseManage/vip/ManageDetail?id='+item.userId+"&userCompanyId="+item.userCompanyUserId
 				})
 				uni.setStorageSync('detailUser', item)
 			},
 			openModel(tag, item) {
 				if (tag == 'label') {
-					this.$emit('getlableId', item.userId)
+					this.$emit('getlableId', item.userCompanyUserId)
 				} else if (tag == 'disable') {
-					this.$emit('getuserId', item.userId)
+					this.$emit('getuserId', item.userCompanyUserId)
 				}else if (tag == 'disabled') {
-					this.$emit('getuserIds', item.userId)
+					this.$emit('getuserIds', item.userCompanyUserId)
 					console.log(item.userId)
 				} else {
-					this.$emit('change', item.userId)
+					this.$emit('change', item.userCompanyUserId)
 				}
 			},
 			// 单选
@@ -324,8 +353,8 @@
 		&-head {
 			.phone {
 				flex-shrink: 0;
-				width: 25px;
-				height: 25px;
+				width: 80rpx;
+				height: 80rpx;
 			}
 
 			&-l {

+ 9 - 9
manifest.json

@@ -1,6 +1,6 @@
 {
     "name" : "直播管理",
-    "appid" : "__UNI__7F50713",
+    "appid" : "__UNI__0BEA3A0",
     "description" : "",
     "versionName" : "1.0.8",
     "versionCode" : 108,
@@ -111,15 +111,15 @@
     "mp-weixin" : {
         "appid" : "wxb9b453d37c5fad45",
         "setting" : {
-            "urlCheck" : true
+            "urlCheck" : true,
+            "minified" : true
         },
         "usingComponents" : true,
-        "permission" : {
-            "scope.userLocation" : {
-                "desc" : "获取您的位置信息为了更好的推荐服务"
-            }
-        },
-        "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ]
+        "permission" : {},
+        "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ],
+        "unipush" : {
+            "enable" : false
+        }
     },
     "mp-alipay" : {
         "usingComponents" : true
@@ -142,7 +142,7 @@
         },
         "router" : {
             "mode" : "hash",
-            "base" : "./"
+            "base" : "/"
         }
     }
 }

+ 28 - 0
note.txt

@@ -0,0 +1,28 @@
+
+1.全局搜索manifest.json中的小程序配置中的appid(小程序发布)
+
+小程序appid
+福本源:wxb9b453d37c5fad45
+云联融智:wxd70f99287830cb51
+蜂巢快药(爱上嘉园):wx903d9aee9cffb320
+中康未来智慧:wxedde588767b358b1
+同顺堂:wx6fbd7f185732fd95
+良苗:wx80dc06697b583cd9
+倍力优看课:wx301ab2fad04c658a
+
+2.router.js中文件内 state的图片地址以及小程序名称配置更换
+3./common/request.js 中的 接口地址
+					let path = 'https://userapp.fbylive.com'//福本源  更换
+4.pages_course/webview.vue 页面中的webviewUrl替换,这个webview的页面为后台提供地址,页面里面需要使用服务号的appid
+
+5.h5打包需要个更换appid
+/pages/user/users/becomVIP.vue页面 h5 appid
+// let appid = "wx961fadab9bcb792b"; //微信APPid(福本源)
+// let appid = "wx93ce67750e3cfba3"; //微信APPid(云联融智)
+//let appid = "wxea1da2b708ab3c2f"; //微信APPid(蜂巢快药)
+// let appid = "wx3de90a39feb8107a"; //微信APPid(中康未来智慧)
+// let appid = "wxec49f9d783abf233"; //微信APPid(惠名大药房)
+// let appid = "wx5a0f7e1932e2689e"; //微信APPid(同顺堂)
+// let appid = "wx568ea6b70350c585"; //微信APPid(倍力优)
+// let appid = "wx0d021524695f1943"; //微信APPid(百年康城)
+// let appid = "wx090c5f399d65456e"; //微信APPid(青岛市北德瑞康中医医院)

+ 126 - 81
pages.json

@@ -183,7 +183,12 @@
 				"navigationBarTextStyle": "black",
 		        "navigationBarTitleText": "员工详情",
 		        "enablePullDownRefresh": false,
-		        "navigationStyle": "custom",
+		        // #ifdef H5
+		        "navigationStyle": "custom", 
+		        // #endif
+		        // #ifndef H5
+		        "navigationStyle": "default",
+		        // #endif
 		        "app-plus": {
 		        	"bounce": "none"
 		        }
@@ -298,26 +303,6 @@
 				}
 			}
 		},
-		{
-			"path" : "pages/courseManage/manage/manageDetail",
-			"style" : 
-			{
-				"navigationBarTitleText" : "群管详情页",
-				"navigationBarBackgroundColor": "#ffffff",
-				"navigationBarTextStyle": "black",
-				"enablePullDownRefresh": false,
-				        // #ifdef H5
-				        "navigationStyle": "custom",
-				        // #endif
-				        // 小程序保留默认
-				        // #ifndef H5
-				        "navigationStyle": "default",
-				        // #endif
-				"app-plus": {
-					"bounce": "none"
-				}
-			}
-		},
 		{
 			"path" : "pages/courseManage/manage/changeVip",
 			"style" : 
@@ -337,20 +322,6 @@
 				}
 			}
 		},
-		{
-			"path" : "pages/courseManage/course/becomeVip",
-			"style" : 
-			{
-				"navigationBarTitleText" : "注册",
-				"navigationBarBackgroundColor": "#ffffff",
-				"navigationBarTextStyle": "black",
-				"enablePullDownRefresh": false,
-				"navigationStyle": "custom",
-				"app-plus": {
-					"bounce": "none"
-				}
-			}
-		},
 		{
 			"path" : "pages/courseManage/manage/setup",
 			"style" : 
@@ -364,58 +335,14 @@
 				}
 			}
 		},
-		{
-			"path" : "pages/courseManage/manage/manageIndex",
-			"style" : 
-			{
-				"navigationBarTitleText" : "管理",
-				"navigationBarBackgroundColor": "#ffffff",
-				"navigationBarTextStyle": "black",
-				"enablePullDownRefresh": false,
-				// #ifdef H5
-				"navigationStyle": "custom",
-				// #endif
-				// #ifndef H5
-				"navigationStyle": "default",
-				// #endif
-				"app-plus": {
-					"bounce": "none"
-				}
-			}
-		},
-		{
-			"path" : "pages/courseManage/course/courseVideo",
-			"style" : 
-			{
-				"navigationBarTitleText" : "课程详情",
-				"navigationBarBackgroundColor": "#ffffff",
-				"navigationBarTextStyle": "black",
-				"enablePullDownRefresh": false,
-				// #ifdef H5
-				"navigationStyle": "custom", 
-				// #endif
-				// #ifndef H5
-				"navigationStyle": "default",
-				// #endif
-				"app-plus": {
-					"bounce": "none"
-				}
-			}
-		},
-		{
-			"path" : "pages/courseManage/course/becomeSale",
-			"style" : 
-			{
-				"navigationBarTitleText" : "注册"
-			}
-		},
+		
 		{
 			"path" : "pages/course/course",
 			"style" : 
 			{
 				"navigationBarTitleText" : "课程库",
 				"navigationBarTextStyle": "black",
-				"enablePullDownRefresh": true,
+				"enablePullDownRefresh": false,
 				// "navigationStyle": "custom",
 				"app-plus": {
 					"bounce": "none"
@@ -463,8 +390,68 @@
 				"navigationStyle": "custom"
 			}
 		}
+		// {
+		// 	"path" : "pages/auth/callback",
+		// 	"style" : 
+		// 	{
+		// 		"navigationBarTitleText" : ""
+		// 	}
+		// }
     ],
 	"subPackages": [
+		{
+			"root": "pages_manage",
+			"pages": [
+				{
+					"path" : "manageDetail",
+					"style" : 
+					{
+						"navigationBarTitleText" : "群管详情页",
+						"navigationBarBackgroundColor": "#ffffff",
+						"navigationBarTextStyle": "black",
+						"enablePullDownRefresh": false,
+						// #ifdef H5
+						"navigationStyle": "custom",
+						// #endif
+						// 小程序保留默认
+						// #ifndef H5
+						"navigationStyle":"default",
+						// #endif
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				},
+				{
+					"path" : "manageIndex",
+					"style" : 
+					{
+						"navigationBarTitleText" : "管理",
+						"navigationBarBackgroundColor": "#ffffff",
+						"navigationBarTextStyle": "black",
+						"enablePullDownRefresh": false,
+						// #ifdef H5
+						"navigationStyle": "custom",
+						// #endif
+						// #ifndef H5
+						"navigationStyle": "default",
+						// #endif
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				},
+				{
+					"path": "actDetail",
+					"style": {
+						"navigationBarTitleText": "用户行为轨迹",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				}
+			]
+		},
 		{
 			"root": "pages_course",
 			"pages": [
@@ -478,6 +465,32 @@
 						}
 					}
 				},
+				{
+					"path" : "course/becomeSale",
+					"style" : 
+					{
+						"navigationBarTitleText" : "注册"
+					}
+				},
+				{
+					"path" : "course/courseVideo",
+					"style" : 
+					{
+						"navigationBarTitleText" : "课程详情",
+						"navigationBarBackgroundColor": "#ffffff",
+						"navigationBarTextStyle": "black",
+						"enablePullDownRefresh": false,
+						// #ifdef H5
+						"navigationStyle": "custom", 
+						// #endif
+						// #ifndef H5
+						"navigationStyle": "default",
+						// #endif
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				},
 				{
 					"path": "video",//企微看课
 					"style": {
@@ -497,6 +510,38 @@
 							"titleNView": false
 						}
 					}
+				},
+				{
+					"path" : "webview",
+					"style" : 
+					{
+						"navigationBarTitleText" : "授权登录",
+						"navigationBarTextStyle": "black",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				},
+				{
+					"path" : "exportlist/exportlist",
+					"style" : 
+					{
+						"navigationBarTitleText" : "导出列表",
+						"navigationBarBackgroundColor": "#ffffff",
+						"navigationBarTextStyle": "black",
+						"enablePullDownRefresh": false,
+						// #ifdef H5
+						"navigationStyle": "custom", 
+						// #endif
+						// #ifndef H5
+						"navigationStyle":"default",
+						// #endif
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
 				}
 			]
 		}

+ 6 - 6
pages/auth/login.vue

@@ -28,7 +28,7 @@
 				</view>
 			 </view>
 		 </view>
-		 <view class="footer-tips">重庆云联融智提供技术支持</view>
+		 <!-- <view class="footer-tips">重庆云联融智提供技术支持</view> -->
 	</view>
 </template>
 
@@ -44,12 +44,11 @@ export default {
 	},
 	computed: {
 	    imgPath() {
-	      // 处理空值,返回默认路径或空字符串
-	      // if (!this.$store.state.imgpath) {
-	      //   return '' // 本地默认图
-	      // }
 	      return this.$store.state.imgpath
-	    }
+	    },
+		appid() {
+			return this.$store.state.appid
+		},
 	  },
 	onLoad(option) {
 	},
@@ -92,6 +91,7 @@ export default {
 			var data = {
 				account:this.account,
 				password: this.password,
+				appid:this.appid
 			};
 			var that=this;
 			uni.showLoading({

+ 116 - 210
pages/auth/wxlogin.vue

@@ -8,23 +8,16 @@
         		<image :src="imgPath+'/app/image/logo.png'"></image>
 				<!-- <image  src="https://rk-hw079058881.obs.cn-north-9.myhuaweicloud.com/fs/20250424/1745461007445.png"></image> -->
         	</view>
-        	<view class="title">壹道正气</view>
+        	<view class="title">{{name}}</view>
         </view>
         <view class="login-notice">为了提供更优质的服务,请先登录</view>
-		<!-- <button
-			class="author-btn"
-			@click="wxLogin()"  >微信授权登录</button> -->
 		<view class="btns">
-			<button
-				class="author-btn"
-				open-type="getPhoneNumber"
-				@getphonenumber="phoneLogin"  >一键授权手机号登录</button>
+				<button
+					class="author-btn"
+					open-type="getPhoneNumber"
+					@getphonenumber="phoneLogin"  >一键授权手机号登录</button>
 			<button class="author-btn" v-if="isAgreement==false" @click="handleAgree()">一键授权手机号登录</button>
 		</view>
-		<!-- <button
-			class="author-btn"
-			open-type="getPhoneNumber"
-			@getphonenumber="phoneLogin"  >微信授权登录</button> -->
 		<button class="close-btn" @tap="back">暂不登录</button>
 			
 		<view class="tips">
@@ -43,19 +36,23 @@
 </template>
 
 <script>
-import { loginByMiniApp,getUserInfo } from '@/api/user'
+	import { loginByMp} from '@/api/user'
+import {loginByMiniApp , getUserInfo } from '@/api/user'
 export default {
 	data() {
 		return {
 			code:null,
 			isAgreement:false,
-			companyId:null
+			companyId:null,
 		}
 	},
 	computed: {
 	    imgPath() {
 	      return this.$store.state.imgpath
-	    }
+	    },
+		name() {
+			  return this.$store.state.logoname
+			},
 	},
 	onLoad(option) {
 		this.companyId=option.companyId
@@ -89,8 +86,6 @@ export default {
 	},
 	methods: {
 		handleAgree(){
-			console.log(123)
-			
 			if(!this.isAgreement){
 			  	uni.showToast({
 			  		icon:'none',
@@ -117,14 +112,20 @@ export default {
 		getWxCode() {
 			//在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头; 
 			//http://shequ.natapp1.cc/#/pages/index/index?deviceId=8
-			var appId="wxb9b453d37c5fad45";
-			var url="https://api.zxfh.cdwjyyh.com";
+			var appId="wxd70f99287830cb51";
+			var url="https://company.h5.test.ylrztop.com";
 			window.location.href ='https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appId+'&redirect_uri=' +encodeURIComponent(url+"/#/pages/auth/wxLogin") +'&response_type=code&scope=snsapi_userinfo&state=JeffreySu-954&connect_redirect=1#wechat_redirect';
 			//console.log('https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appId+'&redirect_uri=' +encodeURIComponent("http://shequ.natapp1.cc/#/pages/index/index?deviceId="+this.deviceId) +'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect')
 			// redirect_uri是授权成功后,跳转的url地址,微信会帮我们跳转到该链接,并且通过?的形式拼接code
 		},
 		handleAgreement(){
 			this.isAgreement=!this.isAgreement;
+			// if(!uni.getStorageSync('userInfos')){
+			// 	uni.navigateTo({
+			// 		url:'/pages_course/webview'
+			// 	})
+			// 	return
+			// }
 		},
 		openH5(url){
 			var requestPath = uni.getStorageSync('requestPath');
@@ -153,89 +154,9 @@ export default {
 				
 			})
 		},
-		wxLogin() {
-			var that=this;
-			if(!this.isAgreement){
-				uni.showToast({
-					icon:'none',
-					title: "请先同意协议后再登录",
-				});
-				return false;
-			}
-			uni.showLoading({
-				title:"处理中..."
-			})
-			this.utils.getProvider()
-			.then(provider => {
-				console.log('当前的环境商',provider)
-				if (!provider) {
-				  reject()
-				}
-				// uni登录
-				uni.login({
-					provider: provider,
-					success: async loginRes => {
-						console.log(loginRes)
-						let code = loginRes.code // 获取开发code
-						var userCode=uni.getStorageSync('userCode');
-						loginByMiniApp({
-						   encryptedData: e.mp.detail.encryptedData,
-						   iv: e.mp.detail.iv,
-						   code: code,
-						   userCode:userCode
-						})
-						.then( res => {
-							if(res.code==200){
-								uni.hideLoading();
-								uni.showToast({
-									icon:'none',
-									title: "登录成功",
-								});
-								console.log(res);
-								uni.setStorageSync('AppToken_MYfby',res.token);
-								uni.setStorageSync('userInfo',JSON.stringify(res.user));
-								uni.hideLoading()
-								//that.getUserInfo()
-								uni.$emit('refreshLogin');
-								// uni.navigateBack({
-								// 	delta:1
-								// })
-								uni.navigateTo({
-									url:'/pages/enterprise/enterprise'
-								})
-							}
-							else{
-								uni.hideLoading();
-								uni.showToast({
-									icon:'none',
-									title: "授权登录失败,请重新登录",
-								});
-							}
-						   
-						 })
-						 .catch(error => {
-							console.log(error)
-							uni.hideLoading();
-							uni.showToast({
-								icon:'none',
-								title: "登录接口调用失败",
-							});
-						 })
-						 
-					}
-				})
-			})
-			.catch(err => {
-				uni.showToast({
-					icon:'none',
-					title: err,
-				});
-			})
-		},
-		// 微信用户手机号登录
+		// 微信用户登录
 		phoneLogin(e) {
-			
-			var that=this;
+			console.log(e)
 			if(!this.isAgreement){
 				uni.showToast({
 					icon:'none',
@@ -243,93 +164,76 @@ export default {
 				});
 				return false;
 			}
+			// console.log(uni.getStorageSync('userInfos'))
+			
 			uni.showLoading({
-				title:"处理中..."
-			})
-			if (e.mp.detail.errMsg == 'getPhoneNumber:ok') {
-				this.utils.getProvider()
-				.then(provider => {
-					console.log('当前的环境商',provider)
-					if (!provider) {
-					  reject()
-					}
-					// uni登录
-					uni.login({
-						provider: provider,
-						success: async loginRes => {
-							console.log(loginRes)
-							let code = loginRes.code // 获取开发code
-							var userCode=uni.getStorageSync('userCode');
-							loginByMiniApp({
-							   encryptedData: e.mp.detail.encryptedData,
-							   iv: e.mp.detail.iv,
-							   code: code,
-							   // userCode:userCode
-							})
-							.then( res => {
-								if(res.code==200){
-									console.log(res)
-									uni.hideLoading();
-									uni.showToast({
-										icon:'none',
-										title: "登录成功",
-									});
-									uni.setStorageSync('AppToken_MYfby',res.token);
-									uni.setStorageSync('nickName',res.nickName);
-									uni.setStorageSync('phoneNumber',res.phoneNumber);
-									uni.hideLoading()
-									//that.getUserInfo()
-									uni.$emit('refreshLogin');
-									// if(this.companyId==null){
-									// 	uni.navigateTo({
-									// 		url:'/pages/enterprise/enterprise'
-									// 	})
-									// }else{
-										
-									// }
-									uni.navigateTo({
-											url:'/pages/enterprise/enterprise'
-										})
-									// uni.navigateBack({
-									// 	delta:1
-									// })
-									
-								}
-								else{
-									uni.hideLoading();
-									uni.showToast({
-										icon:'none',
-										title: "授权登录失败,请重新登录",
-									});
-								}
-							   
-							 })
-							 .catch(error => {
-								console.log(error)
-								uni.hideLoading();
-								uni.showToast({
-									icon:'none',
-									title: "登录接口调用失败",
-								});
-							 })
-							 
+				title: "处理中..."
+			});
+				if (e.mp.detail.errMsg == 'getPhoneNumber:ok') {
+					this.utils.getProvider()
+					.then(provider => {
+						if (!provider) {
+						  reject()
 						}
+						// uni登录
+						uni.login({
+							provider: provider,
+							success: async loginRes => {
+								console.log(loginRes)
+								console.log(e)
+								let code = loginRes.code // 获取开发code
+								// const userinfos=JSON.parse(uni.getStorageSync('userInfos')) 
+								loginByMiniApp({
+								   encryptedData: e.mp.detail.encryptedData,
+								   iv: e.mp.detail.iv,
+								   code: code,
+								   // nickname:userinfos.nickname,
+								   // avatar:userinfos.avatar
+								})
+								.then( res => {
+									if(res.code==200){
+										console.log(res)
+										uni.hideLoading();
+										uni.showToast({
+											icon:'none',
+											title: "登录成功",
+										});
+										uni.setStorageSync('TOKEN_WEXIN', res.token);
+										uni.setStorageSync('userInfo', JSON.stringify(res.user));
+										this.userInfo=res.user;
+										uni.hideLoading()
+										setTimeout(()=>{
+											uni.navigateTo({
+												url:'/pages/enterprise/enterprise'
+											})
+										},200)
+									}
+									else{
+										uni.hideLoading();
+										uni.showToast({
+											icon:'none',
+											title: "授权登录失败,请重新登录",
+										});
+									}
+								   
+								 })
+							}
+						})
 					})
-				})
-				.catch(err => {
+					.catch(err => {
+						uni.showToast({
+							icon:'none',
+							title: err,
+						});
+					})
+					 
+				} else {
 					uni.showToast({
-						icon:'none',
-						title: err,
-					});
-				})
-				 
-			} else {
-				uni.showToast({
-					title: '已拒绝授权',
-					icon: 'none',
-					duration: 2000,
-				})
-			}
+						title: '已拒绝授权',
+						icon: 'none',
+						duration: 2000,
+					})
+				}
 		},
 		back() {
 			uni.navigateBack()
@@ -446,32 +350,34 @@ export default {
 			color: rgba(255, 255, 255, 1);
 		}
 	}
-	.author-btn{
-		z-index:100;
-		// position: absolute;
-		width: 630rpx;
-		height: 80rpx;
-		background: linear-gradient(to right, #48a2e1 0%, #2aa7B9 100%);
-		background: -moz-linear-gradient(to right, #48a2e1 0%, #2aa7B9 100%);
-		// box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
-		border-radius: 40rpx;
-		font-size: 30rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: rgba(255, 255, 255, 1);
-	}
-    .author-btn {
-      width: 630rpx;
-      height: 80rpx;
-      background: linear-gradient(to right, #48a2e1 0%, #2aa7B9 100%);
-      background: -moz-linear-gradient(to right, #48a2e1 0%, #2aa7B9 100%);
-      // box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
-      border-radius: 40rpx;
-      font-size: 30rpx;
-      font-family: PingFang SC;
-      font-weight: 500;
-      color: rgba(255, 255, 255, 1);
-    }
+	// .author-btn{
+	// 	z-index:100;
+	// 	// position: absolute;
+	// 	width: 630rpx;
+	// 	height: 80rpx;
+	// 	background: linear-gradient(to right, #48a2e1 0%, #2aa7B9 100%);
+	// 	background: -moz-linear-gradient(to right, #48a2e1 0%, #2aa7B9 100%);
+	// 	// box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
+	// 	border-radius: 40rpx;
+	// 	font-size: 30rpx;
+	// 	font-family: PingFang SC;
+	// 	font-weight: 500;
+	// 	text-align: center;
+	// 	line-height: 80rpx;
+	// 	color: rgba(255, 255, 255, 1);
+	// }
+    // .author-btn {
+    //   width: 630rpx;
+    //   height: 80rpx;
+    //   background: linear-gradient(to right, #48a2e1 0%, #2aa7B9 100%);
+    //   background: -moz-linear-gradient(to right, #48a2e1 0%, #2aa7B9 100%);
+    //   // box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
+    //   border-radius: 40rpx;
+    //   font-size: 30rpx;
+    //   font-family: PingFang SC;
+    //   font-weight: 500;
+    //   color: rgba(255, 255, 255, 1);
+    // }
 
     .close-btn {
       width: 630rpx;

+ 47 - 2
pages/course/course.vue

@@ -15,6 +15,8 @@
 					<view style="font-weight: bold;margin-bottom: 4px;">生成卡片</view>
 					<view style="font-size: 12px;color: #888;">指导分享轻松转发</view>
 					<button open-type="share" class="share">分享课程</button>
+					<view  @click="copy"
+					class="base-color-6 u-border ptb10 plr30 radius50 mt20">复制页面地址</view>
 				</view>
 				<!--#endif-->
 			</view>
@@ -25,6 +27,8 @@
 <script>
 	import liveCourse from "@/components/liveCourse.vue"
 	import living from "@/components/living.vue"
+	import {copyuniLink} from "@/api/courseManage.js"
+	
 	export default {
 		components: {
 			living,
@@ -52,7 +56,10 @@
 		computed: {
 			    imgPath() {
 			      return this.$store.state.imgpath
-			    }
+			    },
+				imgname() {
+				  return this.$store.state.logoname
+				}
 			  },
 		mounted() {},
 		onShareAppMessage() {
@@ -70,6 +77,44 @@
 			}
 		},
 		methods: {
+			copy(){
+				this.copyuniLinks()
+			},
+			copyuniLinks(){
+				const data={
+					appid:wx.getAccountInfoSync().miniProgram.appId,//乐氏本源
+					linkStr:this.childdata.path + "?course=" + JSON.stringify(this.childdata.params)
+				}
+				copyuniLink(data).then(res=>{
+					if(res.code==200){
+						uni.hideLoading();
+						setTimeout(() => {
+							uni.setClipboardData({
+								data:res.data,
+								success: () => {
+									uni.showToast({
+										title: '链接已复制',
+										icon: 'none',
+										duration: 2000
+									});
+								},
+								fail: () => {
+									uni.showToast({
+										title: '复制失败',
+										icon: 'none'
+									});
+								}
+							});
+						}, 200)
+					}else{
+						uni.hideLoading();
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				})
+			},
 			closeShare() {
 				this.showShare = false
 				// console.log('open');
@@ -115,7 +160,7 @@
 			top: 0;
 			left: 0;
 			width: 100%;
-			height: 100%;
+			height: 80%;
 			opacity: 0;
 		}
 	.sharePop {

+ 0 - 210
pages/courseManage/course/becomeSale.vue

@@ -1,210 +0,0 @@
-<template>
-	<view class="centerV hb base-bg-f">
-		<image :src="imgPath+'/app/image/logo.png'" mode="aspectFit" class="w400"></image>
-		<view class="fs48 bold mt30">注册账户</view>
-		<view class="login">
-			 <view class="login-item">
-				 <view class="input-pwd input-phone">
-					 <input v-model="phoneNumber"  maxlength="11"
-					  placeholder="请输入电话号码" type="number" ></input>
-				 </view>
-			 </view> 
-			 <view class="login-item">
-				 <view class="input-account">
-					 <input v-model="nickName" 
-					  placeholder="请输入名字" type="text" ></input>
-				 </view>
-			 </view> 
-			 <view class="login-item">
-				 <!-- <text>密码</text> -->
-				 <view class="input-pwd">
-					 <input v-model="password" maxlength="16"
-					  placeholder="请输入密码" type="password" ></input>
-				 </view>
-			 </view> 
-			 <view class="btns">
-				 <view class="login-btn" @click="login">注册账号</view>
-			 </view>
-		</view>
-		<u-popup :show="showvip" @close="close" @open="open"
-		 mode='center' round='20' style="flex: 0;" >
-			<view class="VIPvie w600 h600 column justify-center align-center">
-				<image :src="imgPath+'/app/manergevip/becomeTrue.png'" class="h400 w400"></image>
-				<view class="bold fs50 center mt100">{{tips}}!</view>
-				<view class="gologin" @click="loginNav">去登录</view>
-			</view>
-		</u-popup>
-	</view>
-</template>
-
-<script>
-	import { loginsales } from '@/api/courseManage.js'
-	export default {
-		data() {
-			return {
-				tips:'',
-				showvip:false,
-				companyId:'',
-				phoneNumber:'',
-				nickName:'',
-				password:''
-			}
-		},
-		computed: {
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		  },
-		onLoad(option) {
-			this.companyId = option.id
-		},
-		methods: {
-			close() {},
-			open() {},
-			login(){
-				const data={
-					companyId:this.companyId,
-					phoneNumber:this.phoneNumber,
-					nickName:this.nickName,
-					password:this.password
-				}
-				if(this.phoneNumber==''){
-					uni.showToast({ title: '请输入手机号!', icon: 'none' });
-					return
-				}
-				if(this.nickName==''){
-					uni.showToast({ title: '请输入名字!', icon: 'none' });
-					return
-				}
-				if(this.password==''){
-					uni.showToast({ title: '请输入密码!', icon: 'none' });
-					return
-				}
-				if(!uni.$u.test.mobile(this.phoneNumber)){
-					uni.showToast({ title: '请输入正确的手机号码!', icon: 'none' });
-					return
-				}
-				loginsales(data).then(res=>{
-					console.log(res)
-					if(res.code==200){
-						this.showvip=true
-						this.tips='恭喜账户注册成功'
-						uni.showToast({
-							title: '注册成功',
-							icon: 'none',
-						});
-					}else{
-						uni.showToast({
-							title: res.msg,
-							icon: 'none',
-							duration: 2000
-						});
-					}
-				})
-			},
-			loginNav(){
-				// 条件编译判断平台,设置不同登录页路径
-				 let loginPage = '';
-				 // #ifdef H5
-				 loginPage = '/pages/auth/login';
-				 // #endif
-				 // #ifdef MP-WEIXIN
-				 loginPage = '/pages/auth/wxlogin';
-				 // #endif
-				uni.navigateTo({
-					url:loginPage
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-.VIPvie {
-	width: 580rpx;
-	background: linear-gradient(to bottom, #c3dbfe 2%, #f6fbfe 50%);
-	border-radius: 20rpx;
-	height: 640rpx;
-	position: relative;
-
-	image {
-		position: absolute;
-		top: -120rpx;
-		left: 16%;
-	}
-}
-.login{
-width: 100%;
-padding: 30rpx 50rpx;
-.login-item{
-	margin-bottom: 30rpx;
-	text-align: left;
-	.input-account{
-		margin-top: 20rpx;
-		margin-bottom: 20rpx;
-		border-radius:40rpx;
-		border:solid 1rpx #e4e4e4;
-		height: 80rpx;	
-		width: 100%;
-		background:url('/static/account.png') no-repeat 0 center;
-		background-size: 30rpx 30rpx;
-		background-position: 30rpx;
-		input{
-			margin-left: 80rpx;
-			height: 80rpx;
-			line-height: 80rpx
-		}
-	 
-	}
-	.input-pwd{
-		margin-top: 20rpx;
-		margin-bottom: 20rpx;
-		border-radius:40rpx;
-		border:solid 1rpx #e4e4e4;
-		height: 80rpx;	
-		width: 100%;
-		background:url('/static/password.png') no-repeat 0 center;
-		background-size: 30rpx 30rpx;
-		background-position: 30rpx;
-		input{
-			margin-left: 80rpx;
-			height: 80rpx;
-			line-height: 80rpx
-		}
-	}
-	.input-phone{
-		background:url('https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/companyphone.png') no-repeat 0 center;
-		background-size: 40rpx 40rpx;
-		background-position: 24rpx;
-	}
-}
-.btns{
-	margin: 60rpx 0rpx;
-	.login-btn {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		width: 100%;
-		height: 80rpx;
-		// background: linear-gradient(to bottom, #cfe3ff, #cabbfd);
-		background: #5c82ff;
-		box-shadow: 0px 7rpx 6rpx 0px rgba(0, 0, 0, 0.2);
-		border-radius: 40rpx;
-		font-size: 30rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: rgba(255, 255, 255, 1.0);
-	}
-}
-
-}
-.gologin{
-	color: #80b9ff;
-	margin-top: 40rpx;
-	border: #80b9ff solid 2rpx;
-	padding:10rpx 30rpx;
-	font-size: 24rpx;
-	border-radius: 40rpx;
-	margin-bottom: 20rpx;
-}
-</style>

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

@@ -1,221 +0,0 @@
-<template>
-	<view class="centerV hb base-bg-f">
-		<view class="w100 centerV" v-if="isH5vip!=true">
-			<image :src="imgPath+'/app/image/becomevip.png'" class="h193 w193 mb40"></image>
-			<view class="bold">是否申请成为会员</view>
-			<view class="justify-center w100 mt40 mb40">
-				<view class="quxiao">取消</view>
-				<view class="sure" @click="becomeVipfun">确定</view>
-			</view>
-		</view>
-		<u-popup :show="showvip" @close="close" @open="open"
-		 mode='center' round='20' style="flex: 0;" >
-			<view class="VIPvie w600 h600 column justify-center align-center">
-				<image :src="imgPath+'/app/manergevip/becomeTrue.png'" class="h400 w400"></image>
-				<view class="bold fs50 center mt80">{{tips}}!</view>
-			</view>
-		</u-popup>
-	</view>
-</template>
-
-<script>
-	import {
-		becomeVip
-	} from "@/api/courseManage.js"
-	import {
-		loginByMp
-	} from '@/api/user'
-	const isWechat = () => {
-		return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
-	}
-	export default {
-		data() {
-			return {
-				userId: '',
-				companyId: '',
-				companyUserId: '',
-				code: '',
-				showvip: false,
-				user:'',
-				tips:'',
-				isH5vip:false,
-				becomeuser:{}
-			}
-		},
-		computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    }
-		  },
-		onLoad(option) {
-			if (option && option.user) {
-				// console.log('分享链接进入',option)
-				this.becomeuser = JSON.parse(option.user)
-				this.companyId = this.becomeuser.companyId
-				this.companyUserId = this.becomeuser.companyUserId
-			} else {
-				this.companyId = option.companyId
-				this.userId = option.userId
-				this.companyUserId = option.companyUserId
-				this.code = option.code
-			}
-		},
-		onShow() {
-			this.isH5vip = uni.getStorageSync("isH5vip")
-			console.log(this.isH5vip)
-			if (this.becomeuser&&JSON.stringify(this.becomeuser)!='{}'){
-				if(uni.getStorageSync("isH5vip")==true){
-					this.becomeVipfun()
-				}else{
-					setTimeout(() => {
-						this.getWechatCode()
-						this.userId=this.user.userId
-						console.log(this.userId)
-					}, 200)
-				}
-			}
-		},
-		methods: {
-			close() {},
-			open() {},
-			becomeVipfun() {
-				uni.showLoading({
-					title: '正在加载中...'
-				})
-				if (this.becomeuser!=''){
-					this.user = uni.getStorageSync("userInfo") ? JSON.parse(uni.getStorageSync("userInfo")) : {}
-					this.userId=this.user.userId
-				} 
-				const param = {
-					companyId: this.companyId,
-					userId: this.userId,
-					companyUserId: this.companyUserId,
-				}
-				console.log(param)
-				becomeVip(param).then(res => {
-					if (res.code == 200) {
-						console.log(res)
-						// if(this.becomeuser==''){
-						// 	setTimeout(()=>{
-								this.showvip = true
-								this.tips=res.msg
-						// 	},1000)
-						// }
-					} else {
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				})
-			},
-			// 获取code
-			getWechatCode() {
-				if (isWechat) {
-					let appid = "wx93ce67750e3cfba3"; //微信APPid
-					let code = this.getUrlCode().code; //是否存在code
-					let local = window.location.href;
-					if (code == null || code === "") {
-						let urlPaths = local.split("/courseh5");
-						uni.setStorageSync('beforLoginPage', urlPaths[1]);
-						window.location.href =
-							"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
-							appid +
-							"&redirect_uri=" +
-							encodeURIComponent(local) +
-							"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
-					} else {
-						this.code = code;
-						this.loginByMp()
-					}
-				}
-			},
-			getUrlCode() {
-				// 截取url中的code方法
-				var url = location.search;
-				var theRequest = new Object();
-				if (url.indexOf("?") != -1) {
-					var str = url.substr(1);
-					var strs = str.split("&");
-					for (var i = 0; i < strs.length; i++) {
-						theRequest[strs[i].split("=")[0]] = strs[i].split("=")[1];
-					}
-				}
-				return theRequest;
-			},
-			loginByMp() {
-				if (this.code == null) {
-					return;
-				}
-				uni.showLoading({
-					title: "处理中..."
-				});
-				// let that = this;
-				var data = {
-					code: this.code,
-					companyUserId:this.companyUserId
-				}
-				loginByMp(data).then(res => {
-						uni.hideLoading();
-						if (res.code == 200) {
-							// 登录后存token和用户信息
-							uni.setStorageSync('UserAppToken', res.token);
-							this.isH5vip = uni.setStorageSync("isH5vip",res.isH5Vip);
-							uni.setStorageSync('userInfo', JSON.stringify(res.user));
-							let beforLoginUrl = uni.getStorageSync('beforLoginPage');
-							// console.log("beforLoginUrl:"+beforLoginUrl);
-							console.log(`登录成功后跳转${beforLoginUrl}`);
-							uni.reLaunch({
-								url: beforLoginUrl
-							});
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
-						}
-					},
-					err => {}
-				);
-			},
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.VIPvie {
-		width: 580rpx;
-		background: linear-gradient(to bottom, #c3dbfe 2%, #f6fbfe 50%);
-		border-radius: 20rpx;
-		height: 600rpx;
-		position: relative;
-
-		image {
-			position: absolute;
-			top: -120rpx;
-			left: 16%;
-		}
-	}
-
-	.quxiao {
-		width: 30%;
-		height: 72rpx;
-		line-height: 72rpx;
-		text-align: center;
-		border: 2rpx solid #ccc;
-		border-radius: 8rpx;
-		color: #666;
-		margin-right: 10rpx;
-	}
-
-	.sure {
-		width: 30%;
-		background-color: #1777ff;
-		height: 72rpx;
-		line-height: 72rpx;
-		text-align: center;
-		border-radius: 8rpx;
-		color: #fff;
-		margin-left: 10rpx;
-	}
-</style>

+ 0 - 255
pages/courseManage/course/courseVideo.vue

@@ -1,255 +0,0 @@
-<template>
-	<view class="column">
-		<view class="video-box" >
-			<video id="myVideo" :src='listdetail.videoUrl' show-mute-btn='false'
-			vslide-gesture-in-fullscreen='true'   loop='true' enable-progress-gesture='true'
-			 enable-danmu controls='true'  autoplay="true" object-fit='contain' show-center-play-btn='true'
-			class="videotop" ></video> 
-		</view>
-		<view class="title-content" id="title-content">
-			<!-- 课程标题 -->
-			<view >
-				{{listdetail.title}} 
-			</view>
-			<view class="fs24" style="color: #666;font-weight: normal;">
-				{{listdetail.description}}
-			</view>
-			<view class="fs24" style="color: #999;font-weight: normal;">课程视频时长:{{formatSeconds(listdetail.duration)}}</view>
-		</view>
-		<!-- 问题 -->
-		<view class="ques-content ">
-			<view class="ques-content-tit">问答题</view>
-			<view class="center fs32" v-if="listdetail.questionBankList.length<1" style="color: #666;">暂无问答题</view>
-			<view v-for="(item,index) in listdetail.questionBankList" :key="index">
-				<view class="ques-title">
-					<text>{{index + 1}}.</text>
-					<view class="ques-type" v-show="item.type == 1 || item.type == 2">
-						{{item.type == 1 ? '单选' : item.type == 2 ? '多选' : ''}}
-					</view>
-					<text >{{item.title}}</text>
-				</view>
-				<view :class="option.isAnswer== 1 ?'ques-option ques-option-active':'ques-option'"
-					v-for="(option,idx) in item.question" :key="idx">
-					<view>
-						{{numberToLetter(idx)}}.
-					</view>
-					<view>{{option.name}}</view>
-				</view>
-			</view>
-		</view>
-		<view class="footer">
-			<view class="justify-between" >
-				<!-- <view class="copybtn flex-1 mr40" @click="buildimg">生成海报</view> -->
-				<view class="copybtn flex-1" @click="copyshareLink()">复制分享链接</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getcourseDetail,
-		sharecourselink
-	} from '@/api/courseManage'
-	import {
-		numberToLetter
-	} from "@/utils/tools.js"
-	export default {
-		data() {
-			return {
-				videoId:'',
-				listdetail:[],
-				user:{},
-				copylink:''
-			}
-		},
-		onLoad(option) {
-			this.videoId=option.videoId
-		},
-		onShow() {
-			this.getdetail()
-			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
-		},
-		methods: {
-			numberToLetter(num) {
-				// 将数字转换为字母的 ASCII 码
-				let letterCode = num + 65;
-				// 将 ASCII 码转换为大写字母
-				let letter = String.fromCharCode(letterCode);
-				return letter;
-			},
-			//转化时间格式
-			 formatSeconds(seconds) {
-			  const hours = Math.floor(seconds / 3600);
-			  const minutes = Math.floor((seconds % 3600) / 60);
-			  const remainingSeconds = seconds % 60;
-			  
-			  // 补零函数:确保两位数显示
-			  const pad = (num) => num.toString().padStart(2, '0');
-			  
-			  return `${pad(hours)}:${pad(minutes)}:${pad(remainingSeconds)}`;
-			},
-			// 获取视频详情
-			getdetail() {
-				const param = {
-					videoId:this.videoId
-				}
-				getcourseDetail(param).then(res => {
-					if(res.code==200){
-						this.listdetail=res.data
-						this.listdetail.questionBankList= this.listdetail.questionBankList.map(item => ({
-							...item,
-							question: JSON.parse(item.question),
-							answer: '',
-						}))
-					}else{
-						uni.showToast({
-							title: res.msg,
-							icon: 'none',
-						});
-					}
-				})
-			},
-			copyshareLink(){
-				const params = {
-					companyId: this.user.companyId,
-					companyUserId: this.user.userId,
-					courseId: this.listdetail.courseId,
-					time: this.time,
-					videoId: this.listdetail.videoId,
-				}
-				sharecourselink(params).then(res => {
-					if (res.code == 200) {
-						this.copylink = res.url
-						// if (this.copylink.startsWith('http://')) {
-						// 	this.copylink = this.copylink.replace('http://', 'https://');
-						//   }
-						// console.log(this.copylink)
-						setTimeout(() => {
-							uni.setClipboardData({
-								data: this.copylink,
-								success: () => {
-									uni.showToast({
-										title: '链接已复制',
-										icon: 'none',
-										duration: 2000
-									});
-								},
-								fail: () => {
-									uni.showToast({
-										title: '复制失败',
-										icon: 'none'
-									});
-								}
-							});
-						}, 100)
-				
-						console.log(this.copylink)
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-				console.log(123)
-			}
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-.video-box {
-	width: 100%;
-	height: 420rpx;
-	overflow: hidden;
-	position: relative;
-
-	#myVideo {
-		width: 100%;
-		height: 100%;
-	}
-}
-.title-content {
-	padding: 20rpx 32rpx;
-	background-color: #fff;
-	font-size: 28rpx;
-	font-weight: bold;
-	line-height: 1.6;
-	
-}
-.ques-content-tit {
-	font-family: PingFang SC, PingFang SC;
-	font-weight: 600;
-	font-size: 36rpx;
-	color: #222222;
-}
-.ques-content {
-	background-color: #fff;
-	margin-top: 20rpx;
-	padding: 32rpx 32rpx;
-	padding-bottom: 140rpx;
-	box-sizing: border-box;
-	ont-family: PingFang SC, PingFang SC;
-	font-weight: 400;
-	font-size: 28rpx;
-	color: #222222;
-}
-.ques-title {
-	margin: 32rpx 0 34rpx 0;
-	font-weight: 500;
-	font-size: 32rpx;
-	white-space: normal;
-}
-.ques-type {
-	flex-shrink: 0;
-	min-width: 72rpx;
-	height: 40rpx;
-	padding: 0 12rpx;
-	margin: 0 12rpx;
-	box-sizing: border-box;
-	background: #ff8901;
-	border-radius: 8rpx 8rpx 8rpx 8rpx;
-	line-height: 40rpx;
-	text-align: center;
-	font-family: PingFang SC, PingFang SC;
-	font-weight: 400;
-	font-size: 24rpx;
-	color: #FFFFFF;
-	display: inline-block;
-}
-
-.ques-option {
-	min-height: 88rpx;
-	padding: 24rpx 32rpx;
-	box-sizing: border-box;
-	margin-bottom: 24rpx;
-	background: #F5F7FA;
-	border-radius: 16rpx 16rpx 16rpx 16rpx;
-	display: flex;
-	align-items: center;
-
-	&-active {
-		color: #1db131 !important;
-		background: #e8fcee !important;
-	}
-}
-.footer {
-	border-top: 1rpx solid #ededef;
-	background: #fff;
-	width: 100%;
-	position: fixed;
-	bottom: 0;
-	padding: 24rpx 32rpx;
-	box-sizing: border-box;
-	z-index: 9;
-	.copybtn {
-		background: #FF5C03;
-		color: #fff;
-		text-align: center;
-		font-size: 28rpx;
-		border-radius: 80rpx;
-		padding: 20rpx 0;
-	}
-}
-</style>

+ 122 - 51
pages/courseManage/manage/changeVip.vue

@@ -11,8 +11,7 @@
 			<view class="mb20 fs28">选择接收销售</view>
 			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20">
 				<text class="mr20">接收销售</text>
-				<u-input placeholder="请选择接收销售" @focus="selsome" border="none"
-				v-model="username"></u-input>
+				<view @click="selsome" class="flex-1" :class="username==''?'base-color-9':'color3'">{{username?username:'请选择销售'}}</view>
 			</view>
 			<view class='fs24 mtb12 base-color base-bg-sure mr20 pl20 ptb4'>
 				如更换全部会员,则包含小黑屋会员</view>
@@ -22,19 +21,23 @@
 			<view class="mb20 fs28">选择会员</view>
 			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20">
 				<text class="mr20">标签</text>
-				<u-input placeholder="请选择标签" border="none" @focus='changelabel'
-				v-model="usertag"></u-input>
+				<view @click="changelabel" class="flex-1 fs28" :class="usertag==''?'base-color-9':'color3'">{{usertag?usertag:'请选择销售'}}</view>
 			</view>
-			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20 mt20">
+			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20 mt20 " >
+				<text class="mr20">选择项目</text>
+				<view @click="changeproject" class="flex-1 fs28" :class="projectuser==''?'base-color-9':'color3'"
+				>{{projectuser?projectuser:'请选择项目'}}</view>
+			</view>
+			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20 mt20 " >
 				<text class="mr20">选择会员</text>
-				<u-input placeholder="请选择会员" border="none" @focus='changelabelvip'
-				v-model="tagsuser"></u-input>
+				<view @click="changelabelvip" class="flex-1 fs28" :class="tagsuser==''?'base-color-9':'color3'"
+				>{{tagsuser?tagsuser:'请选择会员'}}</view>
 			</view>
 			<view class="mb20 fs28 mt20">选择接收销售</view>
 			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20">
 				<text class="mr20">接收销售</text>
-				<u-input placeholder="请选择接收销售" border="none" @focus='changeuser'
-				v-model="username"></u-input>
+				<view @click="changeuser" class="flex-1 fs28" :class="username==''?'base-color-9':'color3'"
+				>{{username?username:"请选择销售"}}</view>
 			</view>
 		</view>
 		<view class="foot-box justify-around">
@@ -55,17 +58,38 @@
 					@click="showvip=!showvip" style="display: inline-block;float: right;"></u-icon>
 				</view>
 				<view class="justify-start wrap">
-					<view class="p16 mlr12" v-for="(item,index) in tagsuserlist" :key="index">
+					<view class="p16 mlr4" v-for="(item,index) in tagsuserlist" :key="index">
 						<u-tag :text="item.userName" :plain="!item.checked" type="primary" :name="index"
 								@click="checkboxClick">
 						</u-tag>
 					</view>
+					<view class="base-color-red fs24 bor-red p8 radius8 plr12" v-if="tagsuserlist.length==0">暂无会员</view>
 				</view>
 				<view class="centerV">
 					<view @click="getuserid" class="surebtn">确定</view>
 				</view>
 			</view>
 		</u-popup>
+		<u-popup :show="showproject" @close="showproject=!showproject"  >
+			<view class="p20 h400">
+				<view class="mb20" style="text-align: center;">
+					<view style="display: inline-block; ">选择项目</view>
+					<u-icon name="close-circle" color="#ccc" size="28"
+					@click="showproject=!showproject" style="display: inline-block;float: right;"></u-icon>
+				</view>
+				<view class="justify-start wrap">
+					<view class="p16 mlr12" v-for="(item,index) in projectlist" :key="index">
+						<u-tag :text="item.dictLabel" :plain="!item.checked" type="primary" :name="index"
+								@click="checkproClick">
+						</u-tag>
+					</view>
+					<view class="base-color-red fs24 bor-red p8 radius8 plr12" v-if="projectlist.length==0">暂无项目</view>
+				</view>
+				<view class="centerV">
+					<view @click="getprojectid" class="surebtn">确定</view>
+				</view>
+			</view>
+		</u-popup>
 		<u-popup :show="showPop" :round="12" @close="closePop" class="model" :zIndex="10076" style="flex: 0;">
 			<view class="popbox">
 				<view class="popbox-head">
@@ -82,7 +106,7 @@
 						@refresherrefresh="pullDownRefreshs" @refresherrestore="triggereds = false" :upper-threshold="100"
 						:lower-threshold="100" @refresherabort="triggereds = false" @scrolltolower="reachBottoms">
 						<view class="tagbox-list x-f" style="white-space: nowrap;flex-wrap: wrap;">
-							<view class="tagbox-item x-f tag-active" v-if="columnsa.length<=0">暂无标签</view>
+							<view class="base-color-red fs24 bor-red p8 radius8 plr12" v-if="columnsa.length<=0">暂无标签</view>
 							<view class="mlr10 mb10" v-for="(item,index) in columnsa" :key='item.tagId'>
 									<u-tag :text="item.tag" :plain="!item.checked" :name="index"
 										@click="chooseTag(index)"></u-tag>
@@ -110,6 +134,7 @@
 		getallTags,
 		changevipUserAll,
 		gettagsUser,
+		getprojectChange
 	} from "@/api/courseManage.js"
 	export default {
 		data() {
@@ -133,11 +158,14 @@
 				userid:0,
 				username:'',
 				usertag:'',
-				tagsid:'',
+				tagsid:[],
 				showvip:false,
 				groupid:0,
 				tagsuser:'',
 				tagsuserlist:[],
+				showproject:false,
+				projectuser:'',
+				projectlist:[],
 				user:[],
 				usertagsid:[],
 				showPop:false,
@@ -148,7 +176,8 @@
 				statusA: 'loadmore',
 				isEnableds: true,
 				pagetag:[],
-				ids:[]
+				ids:[],
+				projectid:[]
 			}
 		},
 		onLoad(option) {
@@ -159,9 +188,35 @@
 			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
 		},
 		methods: {
+			getproject(){
+				const data={
+					companyUserId:this.groupid,
+					 tagIds:this.tagsid
+				}
+				getprojectChange(data).then(res=>{
+					if(res.code==200){
+						this.projectlist=res.data.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+					}else{
+						uni.showToast({
+							title:res.msg,
+							icon: 'none',
+							duration: 1000
+						}); 
+					}
+				})
+			},
 			resetPop(){
+				//重置标签
 				this.tagkeywords=''
 				this.usertag=''
+				this.projectuser=''
+				this.ids=[]
+				this.projectid=[]
 				this.tagpageNum=1
 				this.gettaglist()
 			},
@@ -171,15 +226,14 @@
 				this.gettaglist()
 			},
 			confirmPop() {
-				// this.queryParam.typeIndex = this.typeIndex
+				//标签选择确定
 				this.showPop = false
 				this.usertag = this.columnsa.filter(item => item.checked).map(v => v.tag).join(',')
-				this.tagsid = this.columnsa.filter(item => item.checked).map(v => v.tagId).join(',')
-				this.ids= this.columnsa.filter(item => item.checked).map(v => v.tagId)
-				//filtter(过滤)  筛选所有checked==true的  然后map返回每一项的id
-				// if (this.idx.length == 0) {
-				// 	this.showCompanytag = this.companytag
-				// }
+				this.tagsid = this.columnsa.filter(item => item.checked).map(v => v.tagId)
+				this.projectid=[]
+				this.projectuser=''
+				this.ids=[]
+				this.tagsuser=''
 			},
 			chooseTag(i) {
 				this.columnsa[i].checked = !this.columnsa[i].checked
@@ -230,11 +284,27 @@
 			checkboxClick(name){
 				this.tagsuserlist[name].checked = !this.tagsuserlist[name].checked
 			},
+			checkproClick(name){
+				this.projectlist[name].checked = !this.projectlist[name].checked
+			},
+			getprojectid(){
+				//确定项目
+				this.projectid=this.projectlist.filter(item => item.checked)
+				.map(v => v.dictValue)
+				this.projectuser=this.projectlist.filter(item => item.checked)
+				.map(v => v.dictLabel).join(',')
+				this.showproject=!this.showproject
+				this.ids=[]
+				this.tagsuser=''
+			},
 			getuserid(){
+				//会员确定
 				this.tagsuser = this.tagsuserlist.filter(item => item.checked)
 				.map(v => v.userName).join(',')
-				this.ids = this.tagsuserlist.filter(item => item.checked)
-				.map(v => v.userId)
+				this.ids = this.tagsuserlist.filter(item => item.checked).map(v => {
+					return {projectId:v.projectId,userId:v.userId};
+				})
+				console.log(this.ids)
 				this.showvip=!this.showvip
 			},
 			close(){
@@ -242,22 +312,24 @@
 			},
 			open(){
 				
+			},
+			changeproject(){
+				//选择项目
+				this.showproject=!this.showproject
+				this.projectlist=[]
+				this.getproject()
 			},
 			changelabelvip(){
-				if(this.tagsid==''){
-					uni.showToast({
-						icon: 'none',
-						title: "请先选择标签"
-					})
-				}else{
-					this.showvip=!this.showvip
-					this.gettagUserlist()
-				}
+				this.showvip=!this.showvip
+				this.tagsuserlist=[]
+				this.gettagUserlist()
 			},
 			gettagUserlist(){
-				console.log(this.tagsid)
+				//会员列表
 				const param={
-					tagId:this.tagsid,
+					tagIds:this.tagsid,
+					projectIds:this.projectid,
+					companyUserId:this.groupid
 				}
 				gettagsUser(param).then(res=>{
 					if(res.code==200){
@@ -272,12 +344,15 @@
 				})
 			},
 			changeall(){
+				
 				//更换会员归属
 				const param={
-					from:this.groupid,
-					to:this.userid,
-					type:this.active,
-					ids:this.ids
+					from:this.groupid,//发送群主
+					to:this.userid,//接收群主
+					type:this.active,//1
+					ids:this.ids,
+					tagList:this.tagsid,
+					project:this.projectid
 				}
 				changevipUserAll(param).then(res=>{
 					if(res.code==200){
@@ -304,15 +379,10 @@
 						this.changeall()
 					}
 				}else{
-					if(this.tagsid==''){
+					if(this.ids.length==0&&this.projectid.length==0&&this.tagsid.length==0){
 						uni.showToast({
 							icon: 'none',
-							title: '请选择标签'
-						})
-					}else if(this.ids==''){
-						uni.showToast({
-							icon: 'none',
-							title: '请选择会员'
+							title: '请选择标签或者项目'
 						})
 					}else if(this.userid==''){
 						uni.showToast({
@@ -329,11 +399,6 @@
 				this.userid=e.value[0].userId
 				this.showb=!this.showb
 			},
-			receiveB(e){
-				this.tagsid=e.value[0].tagId
-				this.usertag=e.value[0].tag
-				this.showa=!this.showa
-			},
 			receiveA(e){
 				this.username=e.value[0].nickName
 				this.userid=e.value[0].userId
@@ -341,6 +406,7 @@
 			},
 			change(index){
 				this.active=index
+				this.username=''
 			},
 			selsome(){
 				console.log(12)
@@ -348,7 +414,6 @@
 				this.getgrouplist()
 			},
 			changelabel(){
-				this.tagsuser=''
 				this.showPop=true
 				this.gettaglist()
 			},
@@ -358,13 +423,18 @@
 			},
 			gettaglist(type){
 				//获取标签列表
+				uni.showLoading({
+					title:'加载中...'
+				})
 				const data={
 					pageNum:this.tagpageNum,
 					pageSize:this.tagpageSize,
-					keyword:this.tagkeywords
+					keyword:this.tagkeywords,
+					companyUserId:this.groupid
 				}
 				getallTags(data).then(res=>{
 					if(res.code==200){
+						uni.hideLoading()
 						const dataList = res.data.list.map(item => {
 							return {
 								...item,
@@ -385,6 +455,7 @@
 						this.pagetag=res.data
 						this.changetag = this.columnsa
 					}else{
+						uni.hideLoading()
 						uni.showToast({
 							icon: 'none',
 							title: res.msg

+ 10 - 4
pages/courseManage/manage/exprotList.vue

@@ -38,10 +38,16 @@
 		mode="center" round='10'>
 			<view class="poplist scrolly">
 				<view class="center mb20">更换会员</view>
-				<view v-for="(item,index) in nowlist" :key="index" class="justify-start align-center">
-					<u-avatar :src="item.avatar" size="25"></u-avatar>
-					<view class="fs28 ml16 base-color-6">昵称:</view>
-					<view class="fs28 base-color-6">{{item.userName}}</view>
+				<view v-for="(item,index) in nowlist" :key="index" class="mtb16" >
+					<view class="justify-start align-center">
+						<u-avatar :src="item.avatar" size="25"></u-avatar>
+						<view class="fs28 ml16">昵称:</view>
+						<view class="fs28 ">{{item.userName}}</view>
+					</view>
+					<view class="justify-start align-center fs24 mt8 base-color-6 ">
+						<view>所属项目:</view>
+						<view >{{item.projectName}}</view>
+					</view>
 				</view>
 			</view>
 		</u-popup>

+ 4 - 1
pages/courseManage/manage/lableSetup.vue

@@ -131,7 +131,7 @@
 			},
 			changeProhibit(){
 				const alltag=this.selectidAll.join(',')
-				console.log(this.selectidAll)
+				console.log(this.selectidAll,alltag)
 				//删除标签
 				if(this.selectidAll==''){
 					uni.showToast({
@@ -153,6 +153,8 @@
 							icon: 'none',
 							title: '标签删除成功'
 						})
+						this.isSelectAll=false
+						this.selectedCount=0
 						this.getcompanylabel()
 					}else {
 						uni.showToast({
@@ -251,6 +253,7 @@
 						checked: this.isSelectAll
 					}
 				})
+				this.selectidAll = this.companylabel.filter(item => item.checked).map(item => item.tagId)
 				const seletnum = this.companylabel.filter(item => item.checked).map(item => item.tagId)
 				this.selectedCount=seletnum.length
 				console.log(this.companylabel)

+ 0 - 787
pages/courseManage/manage/manageDetail.vue

@@ -1,787 +0,0 @@
-<template>
-	<view class="column flex-1 hb">
-		<view class="header p20">
-			<view class="justify-start align-center">
-				<u-avatar :src="grouplist.avatar" size="50"></u-avatar>
-				<view class="ml20">
-					<view class="justify-start align-center ">
-						<text class="fs32 bold mr8">{{grouplist.nickName}}</text>
-						<image class="w40 h40" :src="imgPath+'/app/images/copy_icon.png'" @click="copyId" mode="aspectFill">
-					</view>
-					<view class="fs24 base-color-9 mt10">备注:{{grouplist.remark ||'暂无'}}</view>
-				</view>
-			</view>
-			<view class="ptb20 fs24 base-color-6">手机号码:{{grouplist.phonenumber||'暂无'}}</view>
-		</view>
-		<view class="bgf">
-			<view class="centerV">
-				<u-tabs :list="list1" @click="clickTab" lineColor='#1773ff' lineWidth='40'
-					activeStyle="font-weight:bold"></u-tabs>
-			</view>
-			<view class="justify-between box-blue" v-show="showCont==1">
-				<view class="base-bg-sure boxs">
-					<view class="bold">会员总数</view>
-					<view class="base-color fs28">
-						<text class="fs40 bold">{{companyUserCount.userTotal}}</text>人
-					</view>
-				</view>
-				<view class="base-bg-sure boxs">
-					<view class="bold">今日新增会员</view>
-					<view class="base-color fs28">
-						<text class="fs40 bold">{{companyUserCount.todayNewUser}}</text>人
-					</view>
-				</view>
-				<view class="base-bg-sure boxs">
-					<view class="bold">会员红包数</view>
-					<view class="base-color fs28"><text class="fs40 bold">{{companyUserCount.userRedPacketNum}}</text>个</view>
-				</view>
-				<view class="base-bg-sure boxs">
-					<view class="bold">新会员红包金额</view>
-					<view class="base-color fs28"><text class="fs40 bold">{{companyUserCount.todayUserRedPacketAmount}}</text>元</view>
-				</view>
-			</view>
-			<dropdownPanel :filterData='filterData' @onChange="onChange" @confirm="confirm" @reset="reset">
-				<view v-if="searchbarNav == 0">
-					<view class="mb20" >
-						<u-search placeholder="请输入搜索营期" v-model="keywordC" :showAction="false" height="30px"
-							@search='getcompanyTagC'></u-search>
-					</view>
-					<view class="p20 fs28 column flex-1 scrolly">
-						<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabledC"
-							:refresher-triggered="triggeredC" refresher-background="rgba(0,0,0,0)"
-							@refresherrefresh="pullDownRefreshC" @refresherrestore="triggeredC = false"
-							:upper-threshold="100" :lower-threshold="100" @refresherabort="triggeredC = false"
-							@scrolltolower="reachBottomC">
-							<view v-for="(item,index) in courseOne" :key="item.index"
-								:class="courseid==item.periodId?'actNav':''" class="m10 p10 center"
-								style="border-bottom: 2rpx solid #eee;" @click="getCourseOne(item.periodId)">
-								{{item.periodName}}
-							</view>
-						</scroll-view>
-						<u-loadmore :status="statusC" />
-					</view>
-				</view>
-				<view class="p20 fs28 column flex-1 hidden h100" v-if="searchbarNav == 1">
-					<view class="mb20" >
-						<u-search placeholder="请输入搜索课程" v-model="keyword" :showAction="false" height="30px"
-							@search='getcompanyTag'></u-search>
-					</view>
-					<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnableds"
-						:refresher-triggered="triggereds" refresher-background="rgba(0,0,0,0)"
-						@refresherrefresh="pullDownRefreshs" @refresherrestore="triggereds = false"
-						:upper-threshold="100" :lower-threshold="100" @refresherabort="triggereds = false"
-						@scrolltolower="reachBottoms">
-						<view v-for="(item,index) in courseTwo" :key="item.index"
-							:class="courseids==item.videoId?'actNav':''" class="m10 p10 center"
-							style="border-bottom: 2rpx solid #eee;" @click="getCourseTwo(item.videoId)">
-							{{item.title}}
-						</view>
-						<u-loadmore :status="statusA" />
-						<view class="ptb40"></view>
-					</scroll-view>
-				</view>
-			</dropdownPanel>
-		</view>
-		<view class="column flex-1 scrolly" v-show="showCont==0">
-			<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabled" :refresher-triggered="triggered"
-				refresher-background="rgba(0,0,0,0)" @refresherrefresh="pullDownRefresh"
-				@refresherrestore="triggered = false" :upper-threshold="100" :lower-threshold="100"
-				@refresherabort="triggered = false" @scrolltolower="reachBottom">
-				<view class="m20 radius16 bgf p20" style="border: #3e9f59 solid 2rpx;"
-					v-for="(item,index) in courselist" :key="index">
-					<view class="justify-start align-center pb20" style="border-bottom: #eee solid 2rpx;">
-						<view class="doingimg">
-							<image :src="item.thumbnail" class='w150 h90 radius16'></image>
-							<view class="doing">进行中</view>
-						</view>
-						<view class="ml20">
-							<view class="justify-start align-center">
-								<view>{{item.courseName}}</view>
-								<view class="justify-start align-center base-color">ID
-									<image class="w40 h40" @click="copyCourseId(item.courseName)"
-										:src="imgPath+'/app/images/copy_icon.png'" mode="aspectFill">
-								</view>
-							</view>
-							<view class="fs24 base-color-6 column">
-								<text>{{item.title}}</text>
-								<text></text>
-							</view>
-						</view>
-					</view>
-					<view class="justify-between fs28 mt20">
-						<view class="flex-1">
-							<view class="mb8 base-color-6">观看人数</view>
-							<view>{{item.countVO.courseWatchNum}}</view>
-						</view>
-						<view class="flex-1">
-							<view class="mb8 base-color-6">完播人数</view>
-							<view>{{item.countVO.courseCompleteNum}}
-								<text class="base-color-red ml16">完播率{{item.countVO.completeRate}}%</text>
-							</view>
-						</view>
-					</view>
-					<view class="justify-between fs28 mt20 pb20" style="border-bottom: #eee solid 2rpx;">
-						<view class="flex-1">
-							<view class="mb8 base-color-6">答题红包数</view>
-							<view>{{item.countVO.redPacketNum}}</view>
-						</view>
-						<view class="flex-1">
-							<view class="mb8 base-color-6">答题红包金额</view>
-							<view>{{item.countVO.redPacketAmount}}元</view>
-						</view>
-					</view>
-					<view class="justify-between mt20">
-						<view class="flex-1">
-							<view class="base-color-6 mb8 ">答题人数</view>
-							<view>{{item.countVO.answerNum}}</view>
-						</view>
-						<view class="flex-1">
-							<view class="base-color-6 mb8 ">正确人数</view>
-							<view>{{item.countVO.answerRightNum}}</view>
-						</view>
-						<view class="flex-1">
-							<!-- <view class="base-color-6 mb8 ">正确率</view>
-							<view>{{item.answerRightRate.toFixed(2)||0}}%</view> -->
-						</view>
-					</view>
-					<!-- <view class="centerV mt20">
-						<view class="colorf base-bg ptb12 w400 radius80 center ">课程数据</view>
-					</view> -->
-				</view>
-				<u-loadmore :status="status" />
-				<view class="h90 "></view>
-			</scroll-view>
-		</view>
-		<view class="column flex-1 scrolly " v-show="showCont==1"
-			style="height: calc(100% - 100rpx);padding-bottom: 100rpx;">
-			<u-collapse ref="collapseRef" :border="false" :value="collapseValue" @change="changeCollapse">
-				<!-- #ifdef MP-WEIXIN -->
-				<u-collapse-item name="course" title="课程统计">
-				<!-- #endif -->
-					<!-- #ifndef MP-WEIXIN -->
-					<u-collapse-item name="course">
-						<text slot="title"  class="bold fs32">课程统计</text>
-						<!-- #endif -->
-					<text slot="value" class="base-color fs24">{{collapseValue.includes('course')?'收回':'展开'}}</text>
-					<view slot="right-icon">
-						<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
-					</view>
-					<view class="justify-around ">
-						<view class="base-bg-f radius16 p30 flex-1">
-							<view class="mb12 bold">营期</view>
-							<view class="base-color">
-								<text class="bold fs40">{{courseCount.courseNum}}</text>期
-							</view>
-						</view>
-						<view class="base-bg-f radius16 p20 flex-1 mlr20">
-							<view class="mb12 bold">课程数</view>
-							<view class="base-color"><text class="bold fs40">{{courseCount.videoNum}}
-								</text>课</view>
-						</view>
-						<view class="base-bg-f radius16 p20 flex-1">
-							<view class="mb12 bold">参与会员</view>
-							<view class="base-color"><text class="bold fs40">
-									{{courseCount.courseUserNum}}</text>人</view>
-						</view>
-					</view>
-				</u-collapse-item>
-				<!-- #ifdef MP-WEIXIN -->
-				<u-collapse-item name="redenvelope" title="答题统计">
-				<!-- #endif -->
-					<!-- #ifndef MP-WEIXIN -->
-					<u-collapse-item name="redenvelope">
-						<text slot="title"  class="bold fs32">答题统计</text>
-						<!-- #endif -->
-					<text slot="value"
-						class="base-color fs24">{{collapseValue.includes('redenvelope')?'收回':'展开'}}</text>
-					<view slot="right-icon">
-						<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
-					</view>
-					<view class="justify-around ">
-						<view class="base-bg-f radius16 p30 flex-1">
-							<view class="mb12 bold">答题人数</view>
-							<view class="base-color"><text class="bold fs40">
-									{{courseCount.answerNum}}</text>人</view>
-						</view>
-						<view class="base-bg-f radius16 p20 flex-1 mlr20">
-							<view class="mb12 bold">正确人数</view>
-							<view class="base-color"><text class="bold fs40">
-									{{courseCount.answerRightNum}}</text>人</view>
-						</view>
-						<view class="base-bg-f radius16 p20 flex-1">
-							<view class="mb12 bold">正确率</view>
-							<view class="base-color"><text class="bold fs40">
-									{{courseCount.answerRightRate}}</text>%</view>
-						</view>
-					</view>
-				</u-collapse-item>
-				<!-- #ifdef MP-WEIXIN -->
-				<u-collapse-item name="live" title="红包统计">
-				<!-- #endif -->
-					<!-- #ifndef MP-WEIXIN -->
-					<u-collapse-item name="live">
-						<text slot="title"  class="bold fs32">红包统计</text>
-						<!-- #endif -->
-					<text slot="value" class="base-color fs24">{{collapseValue.includes('live')?'收回':'展开'}}</text>
-					<view slot="right-icon">
-						<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
-					</view>
-					<view class="justify-around ">
-						<view class="base-bg-f radius16 p30 flex-1">
-							<view class="mb12 bold">红包个数</view>
-							<view class="base-color"><text class="bold fs40">
-									{{courseCount.redPacketNum}}</text>个</view>
-						</view>
-						<view class="base-bg-f radius16 p20  mlr20 justify-start align-center">
-							<image :src="imgPath+'/app/images/redenvelope.png'" class="w102 h102"></image>
-							<view class="ml20">
-								<view class="mb12 bold">答题红包金额</view>
-								<view class="base-color">
-									<text class="bold fs40">
-										{{courseCount.redPacketAmount}}
-									</text>元
-								</view>
-							</view>
-						</view>
-					</view>
-				</u-collapse-item>
-			</u-collapse>
-			<view class="h90 "></view>
-		</view>
-		<view class="foot-box justify-between bgf p20 align-center">
-			<view class="fs28 base-color-6" @click="showmore=true">更多</view>
-			<view class="base-color-red base-bg-false plr20 fs28 ptb8 radius40 bold" @click="changevipDetail()">更换会员归属
-			</view>
-		</view>
-		<view>
-			<u-popup :show="showmore" @close="closemore" @open="openmore" style="flex: 0;">
-				<view class="column align-center">
-					<view class="m20" v-for="(item,index) in morelist" :key="item.value" @click="nameMore(item)">
-						{{item.name}}
-					</view>
-					<u-modal :show="showlist" :title="titlelist" @confirm="confirmchange">
-						<view class="slot-content">
-							<u-input :placeholder="contpl" v-model="changelist" v-if="selnum==1"></u-input>
-							<u-input :placeholder="contpl" v-model="changephone" v-if="selnum==2" maxlength="11" ></u-input>
-							<u-input :placeholder="contpl" v-model="changeremark" v-if="selnum==3"></u-input>
-						</view>
-					</u-modal>
-				</view>
-			</u-popup>
-		</view>
-	</view>
-</template>
-
-<script>
-	import dropdownPanel from "@/components/dropdownPanel.vue"
-	import {
-		getFsCourseList,
-		getCourseVdieoList,
-		getmanagepopnum,
-		getRecPacketCount,
-		getmanagecourse,
-		getcourseList,
-		updategroupinfo,
-		getGroupDetail
-	} from "@/api/courseManage.js"
-	export default {
-		components: {
-			dropdownPanel
-		},
-		data() {
-			return {
-				changeremark: '',
-				changephone: '',
-				list1: [{
-					name: '课程分析'
-				}, {
-					name: '销售数据'
-				}],
-				filterData: [{
-						name: '训练营-营期',
-						value: 0,
-					},
-					{
-						name: '课程',
-						value: 1,
-					},
-				],
-				searchbarNav: 0,
-				showCont: 0,
-				collapseValue: ['course', 'questions', 'redenvelope', 'live', 'funnel'], //
-				showmore: false,
-				morelist: [{
-						name: '复制ID',
-						value: 0,
-						text: ''
-					},
-					{
-						name: '改姓名',
-						value: 1,
-						text: '请输入姓名'
-					},
-					{
-						name: '改手机号码',
-						value: 2,
-						text: '请输入手机号码'
-					},
-					{
-						name: '改备注',
-						value: 3,
-						text: '请输入备注'
-					}
-				],
-				showlist: false,
-				titlelist: '',
-				contpl: '',
-				changelist: '',
-				groupid: 0,
-				courseid: '',
-				courseids: '',
-				courseOne: [],
-				courseTwo: [],
-				triggereds: false,
-				statusA: 'loadmore',
-				isEnableds: true,
-				pageNums: 1,
-				pageSizes: 5,
-				redprice: '',
-				companyUserCount: [],
-				redbaglist: [],
-				courseCount: [],
-				answerlist: [],
-				courselist: [],
-				triggered: false,
-				status: 'loadmore',
-				isEnabled: true,
-				pageNum: 1,
-				pageSize: 3,
-				grouplist: [],
-				selnum: 0,
-				keyword:'',
-				triggeredC: false,
-				statusC: 'loadmore',
-				isEnabledC: true,
-				pageNumC: 1,
-				pageSizeC: 10,
-				keywordC:'',
-			}
-		},
-		onLoad(option) {
-			this.groupid = option.id
-		},
-		computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    }
-		},
-		mounted() {
-			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
-			this.grouplist = uni.getStorageSync("grouplist")
-			this.getvipcount()
-			this.getcout()
-			this.getcoursegroup()
-			this.getgroupdetail()
-		},
-		methods: {
-			getcompanyTagC(value){
-				this.keywordC=value
-				this.getCourseList()
-			},
-			pullDownRefreshC() {
-				// 下拉
-				this.triggeredC = true; //下拉了状态为true
-				setTimeout(() => {
-					this.triggeredC = false;
-					uni.stopPullDownRefresh()
-					this.pageNumC = 1;
-					this.getCourseList('refresh') //触底  不穿执行else
-					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
-					// 请求接口
-				}, 1000)
-			},
-			reachBottomC() {
-				// status这个是加载状态
-				if (this.statusC === 'loadmore') {
-					this.statusC = 'loading'
-					uni.showNavigationBarLoading()
-					setTimeout(() => {
-						this.pageNumC++
-						this.getCourseList() //触底  不穿执行else
-						uni.hideNavigationBarLoading()
-					}, 1000);
-				}
-			},
-			getcompanyTag(value){
-				this.keyword=value
-				this.getCourseListsmall()
-			},
-			copyId() {
-				uni.setClipboardData({
-					data: String(this.grouplist.nickName),
-					success: () => {
-						uni.showToast({
-							title: '用户昵称复制成功',
-							icon: 'none',
-							duration: 2000
-						});
-						this.showmore = false
-					},
-				})
-			},
-			copyCourseId(id) {
-				console.log(id)
-				uni.setClipboardData({
-					data: String(id),
-					success: () => {
-						uni.showToast({
-							title: '课程标题复制成功',
-							icon: 'none',
-							duration: 2000
-						});
-					},
-				})
-			},
-			getgroupdetail() {
-				const param = {
-					companyUserId : this.groupid
-				}
-				getGroupDetail(param).then(res => {
-					this.grouplist = res.data
-				})
-			},
-			updatagroup() {
-				console.log(Number(this.groupid))
-				const param = {
-					nickName: this.changelist,
-					phoneNumber: this.changephone,
-					remark: this.changeremark,
-					userId: this.groupid
-				}
-				updategroupinfo(param).then(res => {
-					if (res.code == 200) {
-						uni.showToast({
-							icon: 'none',
-							title: "修改成功"
-						})
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			pullDownRefresh() {
-				// 下拉
-				this.triggered = true; //下拉了状态为true
-				setTimeout(() => {
-					this.triggered = false;
-					uni.stopPullDownRefresh()
-					this.pageNum = 1;
-					this.getcoursegroup('refresh') //触底  不穿执行else
-					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
-					// 请求接口
-				}, 1000)
-			},
-			reachBottom() {
-				// status这个是加载状态
-				if (this.status === 'loadmore') {
-					this.status = 'loading'
-					uni.showNavigationBarLoading()
-					setTimeout(() => {
-						this.pageNum++
-						this.getcoursegroup() //触底  不穿执行else
-						uni.hideNavigationBarLoading()
-					}, 1000);
-				}
-			},
-			getcoursegroup(type) {
-				const param = {
-					companyUserId: this.groupid,
-					courseId: this.courseid,
-					videoId: this.courseids,
-					pageNum: this.pageNum,
-					pageSize: this.pageSize,
-				}
-				getcourseList(param).then(res => {
-					console.log(res)
-					if (res.code == 200) {
-						// refresh 下拉
-						if (type == 'refresh') {
-							this.courselist = res.data.list
-						} else {
-							// 加载更多 当前页和下一页合并
-							this.courselist = [...this.courselist, ...res.data.list]
-						}
-						if (this.pageNum >= res.data.pages) {
-							this.status = 'nomore'
-						} else {
-							this.status = 'loadmore'
-						}
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			getcout() {
-				const param = {
-					companyUserId: this.groupid,
-					courseId: this.courseid,
-					videoId: this.courseids,
-				}
-				this.getCourselist(param)
-			},
-			getCourselist(param) {
-				getmanagecourse(param).then(res => {
-					if (res.code == 200) {
-						this.courseCount = res.data
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg,
-						});
-					}
-				})
-			},
-			getvipcount() {
-				//获取会员总数
-				const param = {
-					companyUserId: this.groupid,
-				}
-				getmanagepopnum(param).then(res => {
-					if (res.code == 200) {
-						this.companyUserCount=res.data
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg,
-						});
-					}
-				})
-			},
-			pullDownRefreshs() {
-				// 下拉
-				this.triggereds = true; //下拉了状态为true
-				setTimeout(() => {
-					this.triggereds = false;
-					uni.stopPullDownRefresh()
-					this.pageNums = 1;
-					this.getCourseListsmall('refresh') //触底  不穿执行else
-					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
-					// 请求接口
-				}, 1000)
-			},
-			reachBottoms() {
-				// status这个是加载状态
-				if (this.statusA === 'loadmore') {
-					this.statusA = 'loading'
-					uni.showNavigationBarLoading()
-					setTimeout(() => {
-						this.pageNums++
-						this.getCourseListsmall() //触底  不穿执行else
-						uni.hideNavigationBarLoading()
-					}, 1000);
-				}
-			},
-			getCourseOne(id) {
-				this.courseid = id
-			},
-			getCourseTwo(id) {
-				this.courseids = id
-			},
-			getCourseList(type) {
-				this.courseOne=[]
-				//获取课程列表
-				const param = {
-					keyword:this.keywordC,
-					pageNum: this.pageNumC,
-					pageSize: this.pageSizeC, 
-				}
-				getFsCourseList(param).then(res => {
-					if (res.code == 200) {
-						// this.courseOne = res.data.list
-						// console.log(res)
-						if (type == 'refresh') {
-							this.courseOne = res.data.list
-						} else {
-							// 加载更多 当前页和下一页合并
-							this.courseOne = [...this.courseOne, ...res.data.list]
-						}
-						if (res.data.isLastPage) {
-							this.statusC = 'nomore'
-						} else {
-							this.statusC = 'loadmore'
-						}
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			getCourseListsmall(type) {
-				//获取小节目录
-				const param = {
-					courseId: this.courseid,
-					pageNum: this.pageNums,
-					pageSize: this.pageSizes, 
-					keyword:this.keyword
-				}
-				getCourseVdieoList(param).then(res => {
-					if (res.code == 200) {
-						// refresh 下拉
-						if (type == 'refresh') {
-							this.courseTwo = res.data.list
-						} else {
-							// 加载更多 当前页和下一页合并
-							this.courseTwo = [...this.courseTwo, ...res.data.list]
-						}
-						if (this.pageNums >= res.data.pages) {
-							this.statusA = 'nomore'
-						} else {
-							this.statusA = 'loadmore'
-						}
-					} else {
-
-					}
-				})
-			},
-			clickTab(e) {
-				this.showCont = e.index
-				this.$nextTick(() => {
-					this.$refs?.collapseRef?.init()
-				})
-				this.courseid=''
-				this.courseids=''
-				this.keyword=''
-				this.getvipcount()
-				this.getcout()
-				this.getcoursegroup()
-				console.log(e.index)
-			},
-			onChange(index) {
-				this.searchbarNav = index
-
-				if (index == 0) {
-					this.getCourseList()
-				} else {
-					this.getCourseListsmall()
-				}
-			},
-			confirm() {
-				this.getcout()
-				this.getredbaglist()
-				this.courselist = []
-				this.getcoursegroup()
-			},
-			reset() {
-				if (this.searchbarNav == 0) {
-					this.courseid = ''
-					this.getcout()
-					// this.getredbaglist()
-					this.courselist = []
-					this.getcoursegroup()
-				} else {
-					this.courseids = ''
-					this.getcout()
-					// this.getredbaglist()
-					this.courselist = []
-					this.getcoursegroup()
-				}
-			},
-			changeCollapse(e) {
-				this.collapseValue = e.filter(item => item.status == 'open').map(it => it.name)
-				console.log(e.filter(item => item.status == 'open').map(it => it.name))
-			},
-			closemore() {
-				this.showmore = false
-			},
-			openmore() {
-
-			},
-			nameMore(item) {
-				this.titlelist = item.name
-				this.contpl = item.text
-				this.selnum = item.value
-				if (item.value == 0) {
-					this.copyId()
-				} else if (item.value == 1) {
-					this.changelist = this.grouplist.nickName
-					this.showlist = true
-				} else if (item.value == 2) {
-					console.log(this.grouplist.phonenumber)
-					this.changephone = this.grouplist.phonenumber
-					this.showlist = true
-				} else {
-					this.changeremark = this.grouplist.remark
-					this.showlist = true
-				}
-			},
-			confirmchange() {
-				this.updatagroup()
-				this.showlist = false
-				setTimeout(() => {
-					this.showmore = false
-					this.getgroupdetail()
-				}, 200)
-			},
-			changevipDetail() {
-				uni.navigateTo({
-					url: '/pages/courseManage/manage/changeVip?id=' + this.groupid
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.header {
-		background: linear-gradient(to right, rgba(218, 233, 255, 1), rgba(225, 225, 253, 1));
-	}
-
-	.doingimg {
-		position: relative;
-
-	}
-
-	.doing {
-		border-radius: 12rpx 0 12rpx 0;
-		background-color: #3e9f59;
-		color: #fff;
-		width: fit-content;
-		padding: 0 20rpx;
-		font-size: 24rpx;
-		position: absolute;
-		top: 3rpx;
-	}
-
-	.box-blue {
-		flex-wrap: wrap;
-		padding: 20rpx;
-
-		.boxs {
-			width: 48%;
-			border-radius: 20rpx;
-			margin-top: 20rpx;
-			padding: 20rpx 0;
-			padding-left: 32rpx;
-			font-size: 28rpx;
-		}
-	}
-
-	.foot-box {
-		position: fixed;
-		bottom: 0;
-		width: 100%;
-	}
-
-	.actNav {
-		color: #1677ff !important;
-		background-color: #e7f2fe;
-	}
-</style>

+ 0 - 465
pages/courseManage/manage/manageIndex.vue

@@ -1,465 +0,0 @@
-<template>
-	<view class="column flex-1 hb">
-		<view class="header-box ptb52 pl20">
-			<view class="justify-between align-center">
-				<view class="justify-start">
-					<u-avatar :src="user.avatar" size="50"></u-avatar>
-					<view class="column colorf ml16" style="color: #666;">
-						<text>{{user.userName}}</text>
-						<text class="mt20 fs24">ID:{{user.companyId}}</text>
-					</view>
-				</view>
-				<view class="column justify-between mr20 ">
-					<view class="box-btn base-color mb16" @click="exportlist">审核详情</view>
-					<!-- <view class="box-btn base-color centerV" @click="lableSetup">标签设置</view> -->
-				</view>
-			</view>
-			<!-- <view class="bgf mr4 radius20 p32 mt32 justify-start pb32">
-				<view class="flex-1 pb20" @click="userdataDetail">
-					<view class="bold">账户可用余额</view>
-					<view class="bold fs48 base-color">{{balanceuserDay.balance}}</view>
-				</view>
-				<view class="flex-1 pb20 pl40" style="border-left:4rpx solid #0cb2ff;" @click="showday=!showday">
-					<view class="bold"><text class="base-color">
-							{{PickerName}}</text>已发金额</view>
-					<view class="bold fs48 base-color">{{balanceuserDay.todayMoney}}</view>
-				</view>
-			</view> -->
-		</view>
-		<view class="bgf centerV" style="border-radius: 10rpx 10rpx 0 0; margin-top: -8rpx;">
-			<u-tabs :list="list1" @click="clickTab" lineColor='#1773ff' lineWidth='40'
-				activeStyle="font-weight:bold"></u-tabs>
-		</view>
-		<view class="column flex-1 scrolly">
-			<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabled" :refresher-triggered="triggered"
-				refresher-background="rgba(0,0,0,0)" @refresherrefresh="pullDownRefresh"
-				@refresherrestore="triggered = false" :upper-threshold="100" :lower-threshold="100"
-				@refresherabort="triggered = false" @scrolltolower="reachBottom">
-				<view class="mtb20 ml20 mr8 p20 bgf radius20" v-for="(item,index) in redpacklist" :key="index"
-					@click="managedetail(item.userId,item)">
-					<view class="justify-start align-center">
-						<u-avatar :src="item.avatar" size="50"></u-avatar>
-						<view class="ml20" @click.passive.stop>
-							<view class="justify-start align-center">
-								<text class="fs28 bold">{{item.nickName}}</text>
-								<image class="w40 h40" :src="imgPath+'/app/images/copy_icon.png'" 
-								@click="copyId(item.nickName)" mode="aspectFill">
-							</view>
-							<view class="fs24 base-color-6">备注:{{item.remark}}</view>
-						</view>
-					</view>
-					<view class="justify-around mt32">
-						<view class="column align-center">
-							<view class="fs24 base-color-3">今日观看人数</view>
-							<view class="base-color fs28">
-								<text class="bold fs40 base-color">{{item.todayWatchCount}}</text>人
-							</view>
-						</view>
-						<view class="column align-center">
-							<view class="fs24 base-color-3">今日完播人数</view>
-							<view class="base-color fs28">
-								<text class="bold fs40 base-color">{{item.todayFinishCount}}</text>人
-							</view>
-						</view>
-						<view class="column align-center">
-							<view class="fs24 base-color-3">今日完播率</view>
-							<view class="base-color fs28">
-								<text class="bold fs40 base-color" >{{item.todayFinishRate.toFixed(2)}}</text>%
-							</view>
-						</view>
-						<view class="column align-center">
-							<view class="fs24 base-color-3">今日红包金额</view>
-							<view class="base-color fs28">
-								<text class="bold fs40 base-color">{{item.todayRedPacketAmount}}</text>元
-							</view>
-						</view>
-					</view>
-					<view class="base-bg-f8 pl20 fs24 ptb8 mt4 radius20" >
-						<text class="base-color-6">更换归属状态:</text>
-						<text style="color: orange;" v-if="item.applyStatus==0">待审核</text>
-						<text style="color: green;" v-if="item.applyStatus==1">审核通过</text>
-						<text class="base-color-red" v-if="item.applyStatus==2">审核未通过</text>
-						<text class=" base-color" v-if="item.applyStatus==3">暂无</text>
-					</view>
-					
-					<view class="justify-between fs24 mt20 align-center"  @click.passive.stop>
-						<view >
-							<text @click="showmoreA(item)">更多</text></view>
-						<view @click.passive.stop>
-							<view class="ptb16 plr32 base-bg-false radius50 base-color-red fs28 bold"
-								@click="changevipDetail(item.userId)">更换会员归属</view>
-						</view>
-						
-					</view>
-	
-				</view>
-				<u-loadmore :status="status" />
-				<view class="ptb20"></view>
-			</scroll-view>
-		</view>
-		<!-- <image class="invite-member" :src="imgPath+'/app/images/invite-member-icon.png'" mode="aspectFill" @click="vipInvite">
-		</image> -->
-		<!-- 不要写在v-for里面 点击存到data里面-->
-		<view class="">
-			<u-popup :show="showmore" @close="closemore" @open="openmore" >
-				<view class="column align-center">
-					<view class="m20" v-for="(items,index) in morelist"
-					 :key="items.value" @click="nameMore(items)">
-						{{items.name}}</view>
-					<u-modal :show="showlist" :title="titlelist" @confirm="confirmchange" >
-						<view class="slot-content">
-							<u-input :placeholder="contpl" v-model="changelist" v-if="selnum==1"></u-input>
-							<u-input :placeholder="contpl" v-model="changephone" v-if="selnum==2"></u-input>
-							<u-input :placeholder="contpl" v-model="changeremark" v-if="selnum==3"></u-input>
-						</view>
-					</u-modal>
-				</view>
-			</u-popup>
-		</view>
-		<view class="">
-			<u-picker :show="showday" :columns="columns" keyName="label" style="flex:0;" @cancel="cancel"
-				@confirm='confirm'></u-picker>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getusergroup,
-		getuserbalance,
-		updategroupinfo
-	} from "@/api/courseManage.js"
-	export default {
-		data() {
-			return {
-				list1: [{
-						name: '销售员(0)',
-					},
-					// {
-					// 	name: '待审群管(0)'
-					// }, {
-					// 	name: '已拒绝(0)'
-					// }
-				],
-				user: [],
-				showmore:false,
-				showlist:false,
-				contpl:'',
-				changelist:'',
-				changephone:'',
-				changeremark:'',
-				titlelist:'',
-				selnum:0,
-				showday: false,
-				columns: [
-					[{
-							label: '今日',
-							id: 1
-						},
-						{
-							label: '昨日',
-							id: 2
-						},
-						{
-							label: '近七日',
-							id: 3
-						},
-						{
-							label: '本月',
-							id: 4
-						},
-					],
-				],
-				redpacklist: [],
-				triggered: false,
-				status: 'loadmore',
-				isEnabled: true,
-				pageNum: 1,
-				pageSize: 5,
-				startTime: '',
-				endTime: '',
-				balanceuserDay: [],
-				pickered: '',
-				todayday: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
-				PickerName: "今日",
-				morelist:[
-					{
-						name:'复制ID',
-						value:0,
-						text:''
-					},
-					{
-						name:'改姓名',
-						value:1,
-						text:'请输入姓名'
-					},
-					{
-						name:'改手机号码',
-						value:2,
-						text:'请输入手机号码'
-					},
-					{
-						name:'改备注',
-						value:3,
-						text:'请输入备注'
-					}
-				],
-				openData:{}
-			}
-		},
-		mounted() {
-			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
-			this.getredlist()
-			// this.getuserbalancelist()
-		},
-		computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    }
-		},
-		methods: {
-			showmoreA(data){
-				this.openData=data
-				this.groupid=data.userId,
-				this.showmore=!this.showmore
-			},
-			closemore(){
-				this.showmore=false
-			},
-			openmore(){
-				
-			},
-			updatagroup(){
-				console.log( Number(this.groupid))
-				const param={
-					nickName:this.changelist,
-					phoneNumber:this.changephone,
-					remark:this.changeremark,
-					userId: this.groupid
-				}
-				updategroupinfo(param).then(res=>{
-					if(res.code==200){
-						uni.showToast({
-							icon: 'none',
-							title: "修改成功"
-						})
-						this.getredlist('refresh')
-					}else{
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			nameMore(item){
-				console.log(item)
-				this.titlelist=item.name
-				this.contpl=item.text
-				this.selnum=item.value
-				if(item.value==0){
-					uni.setClipboardData({
-						data: String(this.openData.userId),
-						success: () => {
-						  uni.showToast({
-							title: '复制成功',
-							icon: 'none',
-							duration: 2000
-						  });
-						  },
-					})
-				}else if(item.value==1){
-					this.changelist=this.openData.nickName
-					this.showlist=true
-				}else if(item.value==2){
-					console.log(this.openData.phonenumber)
-					this.changephone=this.openData.phonenumber
-					this.showlist=true
-				}else{
-					this.changeremark=this.openData.remark
-					this.showlist=true
-				}
-			},
-			confirmchange(){
-				this.updatagroup()
-				this.showlist=false
-				setTimeout(()=>{
-					this.showmore=false
-				},200)
-			},
-			copyId(id) {
-				uni.setClipboardData({
-					data: String(id),
-					success: () => {
-					  uni.showToast({
-						title: '复制成功',
-						icon: 'none',
-						duration: 2000
-					  });
-					  },
-				})
-			},
-			getuserbalancelist() {
-				const params = {
-					companyId: this.user.companyId,
-					endTime: this.endTime,
-					startTime: this.startTime,
-				}
-				getuserbalance(params).then(res => {
-					if (res.code == 200) {
-						this.balanceuserDay = res.data
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			pullDownRefresh() {
-				// 下拉刷新
-				this.triggered = true; //下拉了状态为true
-				setTimeout(() => {
-					this.triggered = false;
-					uni.stopPullDownRefresh()
-					this.pageNum = 1;
-					this.getredlist('refresh') //触底  不穿执行else
-					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
-					// 请求接口
-				}, 1000)
-			},
-			reachBottom() {
-				// status这个是加载状态
-				console.log(111);
-				if (this.status === 'loadmore') {
-					this.status = 'loading'
-					uni.showNavigationBarLoading()
-					setTimeout(() => {
-						this.pageNum++
-						this.getredlist() //触底  不穿执行else
-						uni.hideNavigationBarLoading()
-					}, 1000);
-				}
-			},
-			 getredlist(type) {
-				const params = {
-					pageNum: this.pageNum,
-					pageSize: this.pageSize,
-				}
-				 getusergroup(params).then(res => {
-					if (res.code == 200) {
-						console.log(res)
-						this.list1[0].name = '销售员(' + res.data.total + ')'
-						// refresh 下拉
-						if (type == 'refresh') {
-							this.redpacklist = res.data.list
-						} else {
-							// 加载更多 当前页和下一页合并
-							this.redpacklist = [...this.redpacklist, ...res.data.list]
-						}
-						if (this.pageNum >= res.data.pages) {
-							this.status = 'nomore'
-						} else {
-							this.status = 'loadmore'
-						}
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			cancel() {
-				this.showday = !this.showday
-			},
-			close() {
-				this.showday = !this.showday
-			},
-			confirm(e) {
-				this.pickered = e.indexs[0]
-				this.PickerName = e.value[0].label
-				if (this.pickered == 0) {
-					this.startTime = this.todayday
-					this.endTime = this.todayday
-				} else if (this.pickered == 1) {
-					let yesterday = new Date();
-					yesterday.setDate(yesterday.getDate() - 1);
-
-					this.startTime = uni.$u.timeFormat(yesterday, 'yyyy-mm-dd')
-					this.endTime = uni.$u.timeFormat(yesterday, 'yyyy-mm-dd')
-				} else if (this.pickered == 2) {
-					let yesterday = new Date();
-					yesterday.setDate(yesterday.getDate() - 6);
-
-					this.startTime = uni.$u.timeFormat(yesterday, 'yyyy-mm-dd')
-					this.endTime = uni.$u.timeFormat(this.todayday, 'yyyy-mm-dd')
-				} else {
-					let today = new Date();
-					let lastDayOfMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0);
-
-					this.startTime = uni.$u.timeFormat(this.todayday, 'yyyy-mm') + '-01'
-					this.endTime = uni.$u.timeFormat(lastDayOfMonth, 'yyyy-mm-dd')
-				}
-				this.startTime = this.startTime + ' 00:00:00'
-				this.endTime = this.endTime + ' 23:59:59'
-				this.showday = !this.showday
-				this.getuserbalancelist()
-			},
-			clickTab(item) {
-				// console.log('item', item);  
-			},
-			exportlist() {
-				uni.navigateTo({
-					url: "/pages/courseManage/manage/exprotList"
-				})
-			},
-			lableSetup() {
-				uni.navigateTo({
-					url: "/pages/courseManage/manage/lableSetup"
-				})
-			},
-			userdataDetail() {
-				uni.navigateTo({
-					url: "/pages/courseManage/manage/userDataDetail"
-				})
-			},
-			managedetail(id,item) {
-				uni.setStorageSync('grouplist', item)
-				uni.navigateTo({
-					url: "/pages/courseManage/manage/manageDetail?id="+id
-				})
-			},
-			changevipDetail(id) {
-				uni.navigateTo({
-					url: '/pages/courseManage/manage/changeVip?id='+id
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.header-box {
-		// background: linear-gradient(to right, rgba(66, 144, 240, 1.0), rgba(39, 107, 254, 1));
-		background: linear-gradient(to bottom, #dae9ff, #e1e1fd);
-		
-	}
-
-	.box-btn {
-		font-size: 28rpx;
-		background-color: #fff;
-		border-radius: 8rpx;
-		padding: 4rpx 20rpx;
-		width: fit-content;
-	}
-
-	.invite-member {
-		height: 55px;
-		width: 50px;
-		position: fixed;
-		bottom: 80px;
-		right: 10px;
-		cursor: pointer;
-	}
-</style>

+ 7 - 2
pages/courseManage/manage/userDataDetail.vue

@@ -67,7 +67,7 @@
 				<view class="bgf m20 p20 radius16" v-for="(item,index) in userlist" :key="index">
 					<view class="justify-between align-center">
 						<view class="justify-start align-center">
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/book.png" class="w80 h80"></image>
+							<image :src="imgPath+'/app/manergevip/book.png'" class="w80 h80"></image>
 							<view class="fs36 bold ml20">课程答题红包</view>
 							<view class="fs28 ml8 base-color-6">归属</view>
 						</view>
@@ -78,7 +78,7 @@
 						<view class="ml20">
 							<view class="justify-start align-center">
 								<text class="fs28 bold">{{item.nickName}}</text>
-								<image class="w40 h40" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/copy_icon.png" mode="aspectFill">
+								<image class="w40 h40" :src="imgPath+'/app/images/copy_icon.png'" mode="aspectFill">
 							</view>
 							<view class="fs24 base-color-6">
 								<text>--</text>
@@ -184,6 +184,11 @@
 				redprice:''
 			}
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
 		mounted() {
 			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
 			this.getuserList()

+ 19 - 12
pages/courseManage/operation/index.vue

@@ -4,17 +4,17 @@
 			<view :class="activeTab == 0 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(0)">
 				<view>直播计划</view>
 				<view class="headnav-num">3</view>
-				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/idle.png" mode="aspectFill"></image>
+				<image :src="imgPath+'app/images/idle.png'" mode="aspectFill"></image>
 			</view>
 			<view :class="activeTab == 1? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(1)">
 				<view>今日直播</view>
 				<view class="headnav-num">3</view>
-				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/streaming.png" mode="aspectFill"></image>
+				<image :src="imgPath+'/app/images/streaming.png'" mode="aspectFill"></image>
 			</view>
 			<view :class="activeTab == 2 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(2)">
 				<view>往日直播</view>
 				<view class="headnav-num">3</view>
-				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/finished.png" mode="aspectFill"></image>
+				<image :src="imgPath+'/app/images/finished.png'" mode="aspectFill"></image>
 			</view>
 		</view> -->
 		<view>
@@ -27,10 +27,9 @@
 							:upper-threshold="100" :lower-threshold="100" @refresherabort="triggereds = false"
 							@scrolltolower="reachBottoms">
 							<view class="p20 fs28 column flex-1 scrolly">
-								<view v-for="(item,index) in courseOne" :key="item.index"
-									:class="courseid==item.periodId?'actNav':''" class="m10 p10 center"
-									style="border-bottom: 2rpx solid #eee;" @click="getCourseOne(item.periodId)">
-									{{item.periodName}}
+								<view v-for="(items,index) in courseOne" :key="items" :class="courseid==items.periodId?'actNav':''" 
+									 class="m10 p10 center" style="border-bottom: 2rpx solid #eee;" @click="getCourseOne(items.periodId)">
+										{{items.periodName}}
 								</view>
 							</view>
 							<u-loadmore :status="statusA" />
@@ -42,7 +41,7 @@
 							@refresherrefresh="pullDownRefresh" @refresherrestore="triggered = false"
 							:upper-threshold="100" :lower-threshold="100" @refresherabort="triggered = false"
 							@scrolltolower="reachBottom">
-							<view v-for="(item,index) in courseTwo" :key="item.index"
+							<view v-for="(item,index) in courseTwo" :key="index"
 								:class="courseids==item.videoId?'actNav':''" class="m10 p10 center"
 								style="border-bottom: 2rpx solid #eee;" @click="getCourseTwo(item.videoId)">
 								{{item.title}}
@@ -161,7 +160,7 @@
 										{{courselist.redPacketNum}}</text>个</view>
 							</view>
 							<view class="base-bg-f8 radius16 p20  mlr20 justify-start align-center">
-								<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/redenvelope.png" class="w102 h102"></image>
+								<image :src="imgPath+'/app/images/redenvelope.png'" class="w102 h102"></image>
 								<view class="ml20">
 									<view class="mb12 bold">答题红包金额</view>
 									<view class="base-color">
@@ -199,7 +198,7 @@
 							<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
 						</view>
 						<view class="flex-1">
-							<view class="mt40">
+							<!-- <view class="mt40">
 								<view class="justify-between align-center">
 									<view class="base-color-3 bold fs32">群管排行榜</view>
 									<view class="justify-start" @click="ordergroup(1)" v-if="orderGroup=='asc'">
@@ -228,7 +227,7 @@
 									</view>
 								</view>
 								<view v-if="rankListA.length==0" class="center mtb32">暂无数据</view>
-							</view>
+							</view> -->
 							<view class="mt60 column flex-1">
 								<view class="justify-between align-center">
 									<view class="base-color-3 bold fs32">课程排行榜</view>
@@ -329,6 +328,11 @@
 				ratelistState:false
 			}
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
 		async mounted() {
 			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
 			this.getCoursestatistics()
@@ -494,6 +498,7 @@
 			},
 			getCourseOne(id) {
 				this.courseid = id
+				
 			},
 			getCourseTwo(id) {
 				this.courseids = id
@@ -517,6 +522,8 @@
 						} else {
 							this.statusA = 'loadmore'
 						}
+						console.log(this.courseOne);
+						// this.courseOne
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -527,7 +534,7 @@
 			},
 			getCourseListsmall(type) {
 				const param = {
-					courseId: this.courseid,
+					periodId: this.courseid,
 					pageNum: this.pageNum,
 					pageSize: this.pageSize, //
 				}

+ 34 - 23
pages/courseManage/statistics.vue

@@ -7,7 +7,7 @@
 					<view class="coursebox-name">
 						<text class="more-t">{{info.title}}-{{info.courseName}}</text>
 						<view class="btn_icon" @click="copyId">ID
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/copy_icon.png" mode="aspectFill"></image>
+							<image :src="imgPath+'/app/images/copy_icon.png'" mode="aspectFill"></image>
 						</view>
 					</view>
 					<view style="margin-top: 5px;">{{info.courseName}}</view>
@@ -87,7 +87,7 @@
 							</view>
 							<view class="redenvelope x-bc">
 								<view class="x-f">
-									<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/redenvelope.png" mode="aspectFill"></image>
+									<image :src="imgPath+'/app/images/redenvelope.png'" mode="aspectFill"></image>
 									<text>答题红包金额</text>
 								</view>
 								<view class="collapse-content-num"><text>{{courseCount.redPacketAmount || '0.00'}}</text>元
@@ -132,9 +132,9 @@
 						<u-tabs :list="list2" :current='currentType' :lineWidth="40" lineColor="#1677ff"
 							:activeStyle="activeStyle" :inactiveStyle="inactiveStyle" @click="clickTypeTab"></u-tabs>
 						<!-- <view class="participate-order x-f">
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/order_icon2.png" mode="aspectFill" v-if="searchTypeIndex == 3">
+							<image :src="imgPath+'/app/images/order_icon2.png'" mode="aspectFill" v-if="searchTypeIndex == 3">
 							</image>
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/order_icon.png" mode="aspectFill" v-else></image>
+							<image :src="imgPath+'/app/images/order_icon.png'" mode="aspectFill" v-else></image>
 							<picker @change="bindPickerChange" :value="searchTypeIndex" :range="typeArray">
 								{{typeoption[searchTypeIndex]}}
 							</picker>
@@ -151,14 +151,15 @@
 									<view class="list-item-head-l">
 										<view style="flex: 1;overflow: hidden;display: flex;">
 											<text class="list-item-name one-t">{{item.nickName}}</text>
-											<image class="list-item-copy" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/copy_icon.png"
+											<image class="list-item-copy" :src="imgPath+'/app/images/copy_icon.png'"
 												mode="aspectFill"></image>
+											<text class="base-color-9">#{{item.userId}}</text>
 										</view>
 										<view class="list-item-re">
 											注册时间:{{item.createTime?item.createTime.substring(0,10):'--'}}</view>
 									</view>
 								</view>
-								<image class="phone" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/phone.png" mode="aspectFill"></image>
+								<!-- <image class="phone" :src="imgPath+'/app/images/phone.png'" mode="aspectFill"></image> -->
 							</view>
 							<view class="list-item-desc">
 								<view class="taglist">
@@ -173,9 +174,15 @@
 									<text class="label">完播次数</text><text
 										class="value-num">{{item.finishCount || 0}}</text>
 									<text class="label">累计时长</text><text
-										class="value-num"> {{$formatSeconds(item.watchTime,1)}}</text>
+										class="value-num"> {{$formatSeconds(item.watchTime,1)||0}}</text>
 										
 								</view>
+								<view style="margin-top: 5px;">
+									<text class="label">累计观看天数</text><text
+										class="value-num">{{item.watchLjCount || 0}}</text>
+									<text class="label">连续看课天数</text><text
+										class="value-num">{{item.watchLxCount || 0}}</text>
+								</view>
 								<view style="margin-top: 5px;">
 									<text class="label">红包领取状态</text>
 									<!-- 发送中  1  已发送 -->
@@ -237,7 +244,9 @@
 		getcourseRates
 	} from "@/api/courseManage.js"
 	import funnelChart from '@/components/chart.vue'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
 	export default {
+		mixins: [MescrollMixin], 
 		components: {
 			funnelChart,
 		},
@@ -256,21 +265,17 @@
 				}],
 				current: 0,
 				list2: [{
-					name: '答题正确',
-					label: '答题正确',
+					name: '答题领奖记录',
+					label: '答题领奖记录',
 					value: 0
 				}, {
-					name: '仅播完',
-					label: '仅播完',
-					value: 2
+					name: '完播',
+					label: '完播',
+					value: 1
 				}, {
 					name: '未完播',
 					label: '未完播',
-					value: 1
-				}, {
-					name: '未播放',
-					label: '未播放',
-					value: 3
+					value: 2
 				}],
 				currentType: 0,
 				activeStyle: {
@@ -302,7 +307,7 @@
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					textNoMore: "已经到底了",
 					empty: {
-						icon: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/empty.png',
+						icon: this.$store.state.imgpath+'/app/images/empty.png',
 						tip: '暂无数据'
 					}
 				},
@@ -316,9 +321,15 @@
 				selectidtag:[],
 				getrateimg: {},
 				ratelistState:false,
-				videoId:''
+				videoId:'',
+				
 			}
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
 		onLoad(option) {
 			this.info = option.info ? JSON.parse(option.info) : {},
 			this.videoId=this.info.videoId
@@ -351,7 +362,7 @@
 			getrateList(){
 				//获取漏斗图
 				const params={
-					videoId:this.info.courseId,
+					videoId:this.info.videoId,
 				}
 				getcourseRates(params).then(res=>{
 					if(res.code==200){
@@ -480,10 +491,8 @@
 						//设置列表数据
 						if (page.num == 1) {
 							that.dataList = res.data.list;
-
 						} else {
 							that.dataList = that.dataList.concat(res.data.list);
-
 						}
 						// this.list2[this.currentType].name = this.list2[this.currentType].label + (res.data.total)
 						that.mescroll.endBySize(res.data.list.length, res.data.total);
@@ -500,7 +509,9 @@
 			},
 			getCount() {
 				const param = {
-					videoId: this.courseId,
+					videoId: this.videoId,
+					periodId:this.info.periodId
+					
 					// endTime: this.todayday + ' 23:59:59',
 					// startTime: this.todayday + ' 00:00:00',
 				}

+ 42 - 16
pages/courseManage/vip/ManageDetail.vue

@@ -1,12 +1,17 @@
 <template>
 	<view>
 		<view class="topBgline plr20">
-			<view class="justify-start p30 bgcolf radius12">
-				<u-avatar :src='detailUser.avatar'></u-avatar>
-				<view class="ml16">
-					<view class="bold fs28">{{detailUser.nickname}}</view>
-					<view class="fs24 base-color-3">注册时间:{{detailUser.createTime}}</view>
+			<view class="justify-between p30 bgcolf radius12 align-center">
+				<view class="justify-start align-center">
+					<u-avatar :src='detailUser.avatar'></u-avatar>
+					<view class="ml16">
+						<view class="bold fs28">{{detailUser.nickname}}</view>
+						<view class="fs24 base-color-3">注册时间:{{detailUser.createTime}}</view>
+					</view>
 				</view>
+				<view class="fs24  ptb8 plr12 base-bg-orange colorf radius12"
+				@click="toactdetail" v-if="imgname=='蜂巢快药'">查看行动轨迹</view>
+				<!-- @click="toactdetail" >查看行动轨迹</view> -->
 			</view>
 		</view>
 		<view class="plr20 ptb32 justify-around bgf">
@@ -71,7 +76,7 @@
 				</u-collapse-item>
 			</u-collapse>
 			<view class="justify-start align-center base-bg-f8 mlr30 radius12 plr20 ptb20">
-				<u-image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/book.png" width="30" height="30"></u-image>
+				<u-image :src="imgPath+'/app/manergevip/book.png'" width="30" height="30"></u-image>
 				<view class="ml20">
 					<view class="base-color-3">答题红包金额</view>
 					<view class="base-color fs24"><text class="fs32 bold mr4">
@@ -81,9 +86,9 @@
 		</view>
 		<view class="justify-center botfun">
 			<view class="justify-start align-center bottom-btns" style="border: 2rpx solid #ee0a25;"
-			@click="disableUser" :class="this.detailUser.status==1?'bgf':'base-bg-red'">
-				<u-icon name="close-circle" :color="this.detailUser.status==1?'#ee0a25':'#fff'" size="22" ></u-icon>
-				<view class=" ml12" :class="this.detailUser.status==1?'base-color-red':'colorf'">{{answerText}}</view>
+			@click="disableUser" :class="this.detailUser.status!==1?'bgf':'base-bg-red'">
+				<u-icon name="close-circle" :color="this.detailUser.status!==1?'#ee0a25':'#fff'" size="22" ></u-icon>
+				<view class=" ml12" :class="this.detailUser.status!==1?'base-color-red':'colorf'">{{answerText}}</view>
 			</view>
 			<!-- <view class="justify-start align-center bottom-btns" style="border: 2rpx solid #1677ff;">
 				<u-icon name="pushpin" color="#1677ff" size="22"></u-icon>
@@ -130,13 +135,22 @@
 				answerText:'禁用',
 				userId:[],
 				id:'',
-				dateTag:''
+				dateTag:'',
+				userCompanyId:''
+			}
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    },
+			imgname() {
+			  return this.$store.state.logoname
 			}
 		},
 		onShow() {
 			this.getAnswerlists()
 			this.detailUser =uni.getStorageSync('detailUser')
-			if(this.detailUser.status==0){
+			if(this.detailUser.status!==1){
 				this.answerText='取消禁用'
 			}
 		},
@@ -145,11 +159,22 @@
 		},
 		onLoad(option) {
 			this.id=option.id
+			this.userCompanyId=option.userCompanyId
 		},
 		methods: {
+			toactdetail(){
+				console.log(11)
+				uni.navigateTo({
+					url:"/pages_manage/actDetail?id="+this.id
+				})
+			},
 			tabActive(item) {
 				this.tabindex = item.value
-				this.dateTag=item.label
+				if(item.value==0){
+					this.dateTag=''
+				}else{
+					this.dateTag=item.label
+				}
 				console.log(item.label)
 				this.getAnswerlists()
 			},
@@ -159,7 +184,8 @@
 			getAnswerlists() {
 				const params = {
 					dateTag:this.dateTag,
-					userId: this.id
+					userId: this.id,
+					userCompanyId:this.userCompanyId
 				}
 				getanswerlist(params).then(res => {
 					if (res.code == 200) {
@@ -186,9 +212,9 @@
 			},
 			addblack(){
 				//添加到黑名单
-				this.userId[0]=this.detailUser.userId
+				this.userId[0]=this.userCompanyId
 				const params={
-					array: this.userId
+					userCompanyUserIds : this.userId
 				}
 				Addblacklist(this.userId).then(res=>{
 					if(res.code==200){
@@ -213,7 +239,7 @@
 			},
 			deleteblack(){
 				//移除黑名单
-				this.userId[0]=this.detailUser.userId
+				this.userId[0]=this.userCompanyId
 				removebalcklist(this.userId).then(res=>{
 					if(res.code){
 						uni.showToast({

+ 214 - 56
pages/customer/index.vue

@@ -13,16 +13,16 @@
 				<view style="margin-top: 10px;" class="justify-between align-center">
 					<u-search placeholder="搜索微信名称、手机、标签" v-model="keyword" :showAction="false" height="30px"
 						@search='searchKeyword'></u-search>
-					<view v-if="current==1" class="fs24 ml20" @click="blackSel()">{{!isShowSelectAll?'批量管理':'取消批量'}}
+					<view v-if="current!==0 " class="fs24 ml20" @click="blackSel()">{{!isShowSelectAll?'批量管理':'取消批量'}}
 					</view>
 				</view>
 				<view class="x-bc" v-if="current==0">
 					<u-tabs :list="list2" :current='currentType' :lineWidth="40" lineColor="#1677ff"
 						:activeStyle="activeStyle" :inactiveStyle="inactiveStyle" @click="clickTypeTab"></u-tabs>
 					<view class="participate-order x-f">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/order_icon2.png"
+						<image :src="imgPath+'/app/images/order_icon2.png'"
 							mode="aspectFill" v-if="searchTypeIndex == 0 || searchTypeIndex == 2"></image>
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/order_icon.png"
+						<image :src="imgPath+'/app/images/order_icon.png'"
 							mode="aspectFill" v-else></image>
 						<picker @change="bindPickerChange" :value="searchTypeIndex" :range="typeArray">
 							{{typeoption[searchTypeIndex]}}
@@ -97,6 +97,16 @@
 							</view>
 						</view>
 					</view>
+					<view v-if="filterData[searchbarNav].type == 'project'">
+						<view class="boxnav x-bc">
+							<view class="boxnav-item" v-for="(item,index) in filterData[searchbarNav].option"
+								:key="index">
+								<view class="boxnav-item-info one-t"
+									:class="projectStatusIndex == index ? 'boxnav-active':''"
+									@click="handleParamItem('project',index,item.id)">{{item.label}}</view>
+							</view>
+						</view>
+					</view>
 				</dropdownPanel>
 			</view>
 		</view>
@@ -185,7 +195,7 @@
 			@confirm='singleChangeLable' ></u-picker> -->
 		<u-popup :show="showTagSelect" @close='closetagselect' :closeOnClickOverlay='true' mode="bottom"
 			style="z-index: 999;">
-			<view class=" w100 bgf">
+			<view class=" w100 bgf pb120">
 				<view class="plr28 ptb16 justify-between" style="flex-direction: row-reverse">
 					<u-icon class="" name="close-circle" color="#ccc" size="24" @click="closetagselect"></u-icon>
 				</view>
@@ -216,11 +226,23 @@
 			</view>
 		</u-popup>
 		<view class="invite-member" :style="{right:vipInviteshow?'-72rpx':'20rpx'}">
-			<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/invite-member-icon.png"
+			<image :src="imgPath+'/app/images/invite-member-icon.png'"
 				mode="aspectFill" @click="vipInvite" style="position: relative;" class="intimg"> </image>
-			<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/tc_close_icon.png'
+			<image :src="imgPath+'/app/image/tc_close_icon.png'"
 				class="falseimg" @click="showinimg"></image>
 		</view>
+		<u-popup :show="projectbox" :round="12" @close="projectbox = false" :zIndex="10074" style="flex: 0;">
+			<view class="pb120">
+				<view class="center bold fs32 mt30">选择项目</view>
+				<view class="p20 justify-start mb60" style="flex-wrap: wrap">
+					<view class="plr16 ptb8 u-border mlr10 radius8 " :class="projectId==item.dictValue?'probgsel':'probg'"
+					 v-for="(item,index) in projectList" :key="index" @click="selproject(item)">
+						{{item.dictLabel}}
+					</view>
+				</view>
+				<view class="quedingpro" @click="submitPro">确定</view>
+			</view>
+		</u-popup>
 		<!-- 邀请弹窗 -->
 		<u-popup :show="invitePop" :round="12" @close="invitePop = false" :zIndex="10074" style="flex: 0;">
 			<view class="popbox">
@@ -257,26 +279,26 @@
 									style="text-align: center;">
 									<!--#endif-->
 									<image
-										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/card_icon.png"
+										:src="imgPath+'/app/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>
 									<!-- #ifdef MP-WEIXIN -->
-									<button open-type="share" class="share">分享卡片</button>
+									<button open-type="share" class="share" >分享卡片</button>
 									<!-- #endif -->
 								</view>
 								<!--#ifdef H5-->
 								<view class="sharePop-item y-f " @click="buildimg" style="text-align: center;">
 									<image
-										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/poster_icon.png"
+										:src="imgPath+'/app/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" style="text-align: center;">
 									<image
-										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/link_icon.png"
+										:src="imgPath+'/app/images/link_icon.png'"
 										mode="aspectFill"></image>
 									<view style="font-weight: bold;margin-bottom: 4px;">复制链接</view>
 									<view style="font-size: 12px;color: #888; ">生成链接一键复制</view>
@@ -303,7 +325,7 @@
 			</view>
 			<view class="justify-around mb40">
 				<view class="column justify-center align-center" @click="downimg">
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/downicon.png'
+					<image :src="imgPath+'/app/image/downicon.png'"
 						class="w80 h80"></image>
 					<view class="mt10">长按图片保存</view>
 				</view>
@@ -313,13 +335,13 @@
 		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
 			<view class="point-box">
 				<view class="imgshe">
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/point.png'
+					<image :src="imgPath+'/app/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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/wxmore.png"
+						<image :src="imgPath+'/app/image/wxmore.png'"
 							class="w50 h50 mlr10"></image>
 					</view>
 					<view class="mt20">选择 “转发给朋友”</view>
@@ -349,6 +371,7 @@
 		removebalcklist,
 		getallTags
 	} from "@/api/courseManage.js";
+	import {getprojectlist} from "@/api/user.js"
 	import vipUserItem from "@/components/vipUserItem.vue"
 	import dropdownPanel from "@/components/dropdownPanel.vue"
 	import wx from 'weixin-js-sdk'
@@ -368,7 +391,11 @@
 
 				}, {
 					name: '小黑屋(0)'
-				}],
+				},
+				{
+					name: '黑名单(0)'
+				}
+				],
 				userList: [],
 				current: 0,
 				keyword: "",
@@ -460,8 +487,17 @@
 						}]
 					},
 					{
-						name: '批量',
+						name: '项目',
 						value: 4,
+						type: 'project',
+						option: [{
+							label: '全部',
+							id: ''
+						}]
+					},
+					{
+						name: '批量',
+						value: 5,
 						type: 'piliang',
 						special: true,
 						stopPrevent: true
@@ -472,6 +508,8 @@
 				registerTimeIndex: 0,
 				watchStatusIndex: 0,
 				courseStatusIndex: 0,
+				projectStatusIndex: 0,
+				selprojectId:'',
 				showCalendar: false,
 				date: '',
 				mode: 'range',
@@ -529,8 +567,8 @@
 				zhanshitag: '',
 				copyLinks: '',
 				showzhidao: false,
-				imgs: this.$store.state.imgpath+'/app/image/logo.png',
-				currentIsBlack: false,
+				imgs: this.$store.state.imgpath+'/app/image/logoshare.png',
+				currentIsBlack: 1,
 				tagpageNum: 1,
 				tagpageSize: 16,
 				triggereds: false,
@@ -548,7 +586,10 @@
 				pagetagA: [],
 				tops: '464rpx',
 				showInvite: false,
-				vipInviteshow: false
+				vipInviteshow: false,
+				projectbox:false,
+				projectList:{},
+				projectId:''
 			}
 		},
 		onLoad() {
@@ -558,15 +599,15 @@
 				menus: ['shareAppMessage']
 			});
 			// #endif
+			this.getsalelist()
+			this.getprojectlistsA()
 		},
 		onShow() {
 			// #ifdef H5
 			this.getjssdklist()
 			// #endif
-			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
-			this.getcompanyTag()
+			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {},
 			this.getvipListnum()
-			this.getsalelist()
 			this.userList = []
 			this.getfsuserListdata()
 		},
@@ -574,8 +615,8 @@
 		onShareAppMessage() {
 			return {
 				title:this.$store.state.logoname+'小程序的'+this.user.userName + '邀请您成为会员!',
-				path: '/pages/user/users/becomeVIP?companyId=' +
-					this.user.companyId + '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist,
+				path: '/pages/user/users/becomeVIP?companyId=' +this.user.companyId+'&projectId='+this.projectId
+				 + '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist,
 				imageUrl: this.imgs,
 			}
 		},
@@ -590,8 +631,74 @@
 			selectedCount() {
 				return this.userList.filter(item => item.checked).length;
 			},
+			imgPath() {
+			  return this.$store.state.imgpath
+			}
 		},
 		methods: {
+			submitPro(){
+				if(this.projectId==''){
+					uni.showToast({
+						title: '请选择项目',
+						icon: 'none',
+						duration: 1000
+					});
+					return
+				}
+				this.projectbox=false
+				this.invitePop = true
+			},
+			selproject(item){
+				this.projectId=item.dictValue
+			},
+			getprojectlistsA(){
+				const oldlist = this.filterData[4].option
+				const data={
+					key:'sys_course_project'
+				}
+				getprojectlist(data).then(res=>{
+					if (res.code == 200) {
+						const list = res.data
+						this.filterData[4].option = oldlist.concat(list.map(item => {
+							return {
+								id: item.dictValue,
+								label: item.dictLabel
+							};
+						}));
+						console.log('1212121212',this.filterData[4].option)
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+						});
+					}
+				})
+			},
+			getprojectlists(){
+				const data={
+					key:'sys_course_project'
+				}
+				getprojectlist(data).then(res=>{
+					// this.projectList=res.data
+					this.projectList = res.data.map(item => {
+						return {
+							...item,
+							checked: false,
+						}
+					})
+					console.log(this.projectList)
+				})
+			},
+			sharecard(){
+				console.log(11)
+				// if(this.projectId==null){
+				// 	uni.showToast({
+				// 		title: '请选择项目',
+				// 		icon: 'none',
+				// 		duration: 1000
+				// 	});
+				// }
+			},
 			changetagall() {
 				this.showTagSelect = !this.showTagSelect
 				this.tagchangekeywords = ''
@@ -650,7 +757,7 @@
 					if (res.code == 200) {
 						this.pageOptions.pageNum = 1
 						// console.log(this.pageOptions.pageNum)
-						this.getfsuserListdata()
+						this.getfsuserListdata('refresh')
 						// 创建一个在**秒后执行的定时器
 						const timer = setTimeout(function() {
 							uni.showToast({
@@ -660,6 +767,7 @@
 						}, 200);
 						this.getvipListnum()
 						this.isShowSelectAll = false
+						this.isSelectAll=false
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -688,6 +796,7 @@
 								label: item.nickName
 							};
 						}));
+						console.log(78787878,this.filterData[0].option)
 					} else {
 						uni.showToast({
 							title: res.msg,
@@ -695,7 +804,6 @@
 						});
 					}
 				})
-
 			},
 			getTagpage(type) {
 				if (type == 'last') {
@@ -859,7 +967,8 @@
 				getvipNum().then(res => {
 					if (res.code == 200) {
 						this.list[0].name = "会员" + '(' + res.data.number + ')'
-						this.list[1].name = "小黑屋" + '(' + res.data.blackNum + ')'
+						this.list[1].name = "小黑屋" + '(' + res.data.smallBlackNum + ')'
+						this.list[2].name = "黑名单" + '(' + res.data.blackNum + ')'
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -869,7 +978,7 @@
 				})
 			},
 			getactNav(data) {
-				if (data.value == 4) {
+				if (data.value == 5) {
 					this.itemname = data.name
 					this.isShowSelectAll = !this.isShowSelectAll
 				} else {
@@ -955,18 +1064,19 @@
 				//改标签选择按钮
 				const params = {
 					tagIds: this.selectidtag,
-					fsUserIds: this.selectidAll
+					userCompanyUserIds: this.selectidAll
 				}
 				changeLable(params).then(res => {
 					if (res.code == 200) {
 						this.userList = []
-						this.getfsuserListdata()
+						this.getfsuserListdata("refresh")
 						const timer = setTimeout(function() {
 							uni.showToast({
 								icon: 'none',
 								title: '标签更改成功'
 							})
 						}, 500);
+						this.isSelectAll=false
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -1023,14 +1133,14 @@
 					registerEndTime: this.endTime, //注册结束
 					watchCourseType: this.watchStatusIndex,
 					missCourseStatus: this.courseStatusIndex,
+					projectId:this.selprojectId,
 					keyword: this.keyword,
 					tagIds: this.idx,
-					isBlack: this.currentIsBlack,
+					status: this.currentIsBlack,
 					companyUserId: this.salesid,
 					continueMissCourseSort: this.searchTypeIndex,
 					...this.pageOptions
 				}
-
 				getfsuserList(param).then(res => {
 					if (res.code == 200) {
 						let dataList = res.data.list.map(item => {
@@ -1060,11 +1170,13 @@
 				})
 			},
 			onChange(index) {
-				if (index == 4) return
+				if (index == 5) return
 				this.searchbarNav = index
 			},
 			searchKeyword(value) {
 				this.keyword = value
+				this.userList = []
+				this.pageOptions.pageNum=1
 				this.getfsuserListdata()
 			},
 			singleChange(data) {
@@ -1084,7 +1196,7 @@
 				Addblacklist(this.selectidAll).then(res => {
 					if (res.code == 200) {
 						this.pageOptions.pageNum = 1
-						this.getfsuserListdata()
+						this.getfsuserListdata('refresh')
 						// 创建一个在**秒后执行的定时器
 						const timer = setTimeout(function() {
 							uni.showToast({
@@ -1093,7 +1205,8 @@
 							})
 						}, 200);
 						this.getvipListnum()
-						this.isShowSelectAll = false
+						// this.isShowSelectAll = false
+						this.isSelectAll=false
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -1115,7 +1228,7 @@
 						checked: this.isSelectAll
 					}
 				})
-				this.selectidAll = this.userList.filter(item => item.checked).map(item => item.userId)
+				this.selectidAll = this.userList.filter(item => item.checked).map(item => item.userCompanyUserId)
 				console.log(this.isSelectAll)
 			},
 			// 单选 /反选 
@@ -1126,7 +1239,7 @@
 					checked: !this.userList[i].checked
 				}
 				this.$set(this.userList, i, arr)
-				this.selectidAll = this.userList.filter(item => item.checked).map(item => item.userId)
+				this.selectidAll = this.userList.filter(item => item.checked).map(item => item.userCompanyUserId)
 				console.log(this.selectidAll)
 				this.isSelectAll = this.userList.every(item => item.checked)
 				if (this.isSelectAll) {
@@ -1137,29 +1250,34 @@
 						}
 					})
 				}
-				this.selectidAll = this.userList.filter(item => item.checked).map(item => item.userId)
+				this.selectidAll = this.userList.filter(item => item.checked).map(item => item.userCompanyUserId)
 
 			},
 			reset() {
 				//重置时间选择等筛选
 				const type = this.filterData[this.searchbarNav].type
 				console.log(this.registerTimeIndex)
+				this.pageOptions.pageNum = 1
 				if (type == 'registerTime') {
 					this.registerTimeIndex = ''
 					this.endTime = ''
 					this.startTime = ''
-					this.getfsuserListdata()
+					this.getfsuserListdata("refresh")
 					// console.log(this.getfsuserListdata())
 				} else if (type == 'watchStatus') {
 					this.watchStatusIndex = 0
-					this.getfsuserListdata()
+					this.getfsuserListdata("refresh")
 				} else if (type == 'userStatus') {
 					this.userStatusIndex = 0
 					this.salesid = ''
-					this.getfsuserListdata()
+					this.getfsuserListdata("refresh")
 				} else if (type == 'courseStatus') {
 					this.courseStatusIndex = 0
-					this.getfsuserListdata()
+					this.getfsuserListdata("refresh")
+				}else if (type == 'project') {
+					this.selprojectId=''
+					this.projectStatusIndex = 0
+					this.getfsuserListdata("refresh")
 				} else {
 
 				}
@@ -1209,6 +1327,14 @@
 				} else if (type == 'courseStatus') {
 					this.getfsuserListdata()
 					console.log(this.courseStatusIndex)
+				}else if (type == 'project') {
+					if (this.projectStatusIndex == 0) {
+						this.selprojectId = ''
+						this.getfsuserListdata()
+					} else {
+						this.getfsuserListdata()
+					}
+					console.log(this.projectStatusIndex)
 				}
 				// this.mescroll.resetUpScroll()
 			},
@@ -1225,6 +1351,9 @@
 					console.log(this.salesid)
 				} else if (type == 'courseStatus') {
 					this.courseStatusIndex = index
+				}else if (type == 'project') {
+					this.selprojectId =id
+					this.projectStatusIndex = index
 				} else {
 					this.ispopshow = false
 				}
@@ -1236,6 +1365,7 @@
 				this.endTime = '' //注册结束
 				this.watchStatusIndex = 0
 				this.salesid = ''
+				this.selprojectId = ''
 				this.courseStatusIndex = 0
 				this.keyword = ''
 				this.idx = []
@@ -1243,11 +1373,15 @@
 				this.isShowSelectAll = false
 				this.userList = []
 				if (index == 0) {
-					this.currentIsBlack = false
-					this.getfsuserListdata()
-				} else {
-					this.currentIsBlack = true
-					this.getfsuserListdata()
+					// 0小黑屋 1正常 2拉黑
+					this.currentIsBlack = 1
+					this.getfsuserListdata("refresh")
+				} else if(index == 1) {
+					this.currentIsBlack = 0
+					this.getfsuserListdata("refresh")
+				}else{
+					this.currentIsBlack = 2
+					this.getfsuserListdata("refresh")
 				}
 				this.getvipListnum()
 			},
@@ -1268,7 +1402,9 @@
 				this.popTitle = type == 'search' ? '搜索选择' : type == 'tag' ? '标签筛选' : ''
 				this.typeIndex = this.queryParam.typeIndex
 				this.showPop = true
-				if (type == 'tag') {}
+				if (type == 'tag') {
+					this.getcompanyTag()
+				}
 			},
 			closePop() {
 				this.showPop = false
@@ -1325,7 +1461,10 @@
 			},
 			vipInvite() {
 				if (!this.vipInviteshow) {
-					this.invitePop = true
+					this.getprojectlists()
+					// this.invitePop = true
+					this.projectId=''
+					this.projectbox=true
 					this.sharetaglist = null
 					this.getlink('preload')
 					this.getjssdklist()
@@ -1357,10 +1496,9 @@
 				const param = {
 					companyId: this.user.companyId,
 					companyUserId: this.user.userId,
-					realLink: url + '#/pages/user/users/becomeVIP' + '?companyId=' +
-						this.user.companyId + '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist,
+					realLink: url + '#/pages/user/users/becomeVIP?companyId='+this.user.companyId + '&projectId='+this.projectId+
+						'&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist,
 					tagIds: this.sharetaglist,
-
 				}
 				becomeVipuserImg(param).then(res => {
 					if (res.code == 200) {
@@ -1385,8 +1523,9 @@
 				}
 				const url = window.location.href.split('#')[0]
 				// console.log(url)
-				this.copyLinks = url + '#/pages/user/users/becomeVIP' + '?companyId=' +
-					this.user.companyId + '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist
+				this.copyLinks = url + '#/pages/user/users/becomeVIP?companyId='+this.user.companyId + 
+				'&projectId='+this.projectId+'&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist
+				console.log('iddd',this.user.companyId)
 			},
 			getshareLink() {
 				//生成链接
@@ -1400,8 +1539,8 @@
 				}
 				const url = window.location.href.split('#')[0]
 				console.log(url)
-				this.copyLinks = url + '#/pages/user/users/becomeVIP' + '?companyId=' +
-					this.user.companyId + '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist
+				this.copyLinks = url + '#/pages/user/users/becomeVIP' + '?companyId='+this.user.companyId  +'&projectId='+this.projectId+
+					 '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist
 				console.log(this.copyLinks)
 				setTimeout(() => {
 					uni.setClipboardData({
@@ -1444,6 +1583,25 @@
 </script>
 
 <style lang="scss" scoped>
+	.probg{
+		color: #666;
+	}
+	.probgsel{
+		background-color: #1677ff;
+		color: #fff;
+		border: none;
+	}
+	.quedingpro{
+		background-color: #1677ff;
+		color: #fff;
+		border-radius: 80rpx;
+		height: 80rpx;
+		line-height: 80rpx;
+		width: 60%;
+		margin: 0 auto;
+		margin-top: 40rpx;
+		text-align: center;
+	}
 	.card-share {
 		position: relative;
 	}
@@ -1597,7 +1755,7 @@
 		font-weight: 400;
 		font-size: 14px;
 		color: #333;
-
+		padding-bottom: 120rpx;
 		&-head {
 			padding: 15px;
 			font-weight: bold;

+ 3 - 3
pages/enterprise/enterprise.vue

@@ -30,7 +30,7 @@
 				tabbarList : [{
 						iconPath: '/static/manageTabIcon/training.png',
 						selectedIconPath: '/static/manageTabIcon/training_on.png',
-						Text: '企业理念',
+						Text: '关于',
 						val:0
 					},
 					{
@@ -47,7 +47,7 @@
 			return {
 				title: this.$store.state.logoname,
 				path: '/pages/enterprise/enterprise',
-				imageUrl: this.$store.state.imgpath+'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 			
 		},
@@ -55,7 +55,7 @@
 		onShareTimeline(res) {
 			return {
 				title: this.$store.state.logoname,
-				imageUrl: this.$store.state.imgpath+'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 			
 		},

+ 13 - 12
pages/index/index.vue

@@ -93,11 +93,11 @@
 						<view class="collapse-content x-ac">
 							<view class="collapse-content-item">
 								<view class="collapse-content-title">观看人数</view>
-								<view class="collapse-content-num"><text>{{courseCount.courseWatchNum || 0}}</text>人
+								<view class="collapse-content-num"><text>{{courseCount.courseWatchNum?courseCount.courseWatchNum:'0' }}</text>人
 								</view>
 								<view style="color: #1677ff;" v-show="queryParam.type == 0">
-									较昨天持平{{compare(courseCount.courseWatchNum,yesterdayVO.courseWatchNum)}}</view>
-								<view v-show="queryParam.type == 0">昨天{{yesterdayVO.courseWatchNum || 0}}</view>
+									较昨天持平{{compare(courseCount.courseWatchNum,yesterdayVO.courseWatchNum?yesterdayVO.courseWatchNum:'0')}}</view>
+								<view v-show="queryParam.type == 0">昨天{{yesterdayVO.courseWatchNum?yesterdayVO.courseWatchNum:'0'}}</view>
 							</view>
 							<view class="collapse-content-item">
 								<view class="collapse-content-title">完播人数</view>
@@ -250,7 +250,7 @@
 											<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
 										</view>
 										<view class="flex-1">
-											<view class="mt40">
+											<!-- <view class="mt40">
 												<view class="justify-between align-center">
 													<view class="base-color-3 bold fs32">群管排行榜</view>
 													<view class="justify-start" @click="ordergroup(1)"
@@ -285,7 +285,7 @@
 													</view>
 												</view>
 												<view v-if="rankListA.length==0" class="center mtb32">暂无数据</view>
-											</view>
+											</view> -->
 											<view class="mt60 column flex-1">
 												<view class="justify-between align-center">
 													<view class="base-color-3 bold fs32">课程排行榜</view>
@@ -386,8 +386,8 @@
 				getrateimg: {},
 				rankListA: [],
 				rankListB: [],
-				activeA: 0,
-				activeB: 0,
+				activeA: 1,
+				activeB: 1,
 				yesterdayVO: [],
 				ratelistState: false
 			}
@@ -448,9 +448,10 @@
 			},
 			getrankCourse() {
 				//获取课程排行
-				this.startTime = this.todayday
-				this.endTime = this.todayday
+				// this.startTime = this.todayday
+				// this.endTime = this.todayday
 				// this.resetDate()
+				
 				const params = {
 					endTime: this.endTime + ' 23:59:59',
 					startTime: this.startTime + ' 00:00:00',
@@ -600,12 +601,12 @@
 					endTime: this.endTime + ' 23:59:59',
 					startTime: this.startTime + ' 00:00:00',
 				}
-				this.getCourseCount(param)
+				this.getCourseCounts(param)
 			},
-			getCourseCount(param) {
+			getCourseCounts(param) {
 				getCourseCount(param).then(res => {
 					if (res.code == 200) {
-						console.log(res)
+						console.log('课程统计',res)
 						this.courseCount = res.data
 						this.yesterdayVO = res.data.yesterdayVO
 					} else {

+ 7 - 5
pages/urgeCourse/urgeCourse.vue

@@ -4,8 +4,8 @@
 			<u-subsection class="subsection" :list="list" :current="current" bgColor="#e7f1fe" activeColor="#1677ff"
 				:fontSize="15" :bold="false" @change="sectionChange"></u-subsection>
 		</view>
-		<userUrgeCourse  v-if="current==0"></userUrgeCourse>
-		<qiweiUrgeCourse v-else></qiweiUrgeCourse>
+		<userUrgeCourse  v-if="current==0" style="height: 100%;"></userUrgeCourse>
+		<!-- <qiweiUrgeCourse v-else></qiweiUrgeCourse> -->
 	</view>
 </template>
 
@@ -21,9 +21,11 @@
 			return {
 				list: [{
 					name: '注册会员',
-				}, {
-					name: '企微'
-				}],
+				}, 
+				// {
+				// 	name: '企微'
+				// },
+				],
 				current:0
 			}
 		},

+ 62 - 5
pages/user/editUser.vue

@@ -11,7 +11,8 @@
 			<view class="info-item">
 				<view class="label">姓名</view>
 				<view class="right">
-					<text class="text">{{nickName}}</text>
+					<!-- <text class="text">{{nickName}}</text> -->
+					<input type="text" v-model="nickName" placeholder="请输入姓名" class="input"></text>
 				</view>
 			</view>
 			<view class="info-item">
@@ -26,6 +27,12 @@
 					<text class="text">{{postNames}}</text>
 				</view>
 			</view>
+			<view class="info-item">
+				<view class="label">角色</view>
+				<view class="right">
+					<text class="text">{{roleNames}}</text>
+				</view>
+			</view>
 			<view class="info-item">
 				<view class="label">性别</view>
 				<view class="right">
@@ -48,6 +55,13 @@
 					<input type="text" v-model="phonenumber" placeholder="请输入手机号" class="input"></text>
 				</view>
 			</view>
+			<view class="info-item">
+				<view class="label">客服二维码</view>
+				<view class="right">
+					<!-- <u-avatar :src="codeimg" size="40" @tap="chooseImages()" :default-url="defaultUrl"></u-avatar> -->
+					<image  class="w90 h90" @tap="chooseImages()" :src="codeimg?codeimg:defaultUrl" mode="aspectFill"></image>
+				</view>
+			</view>
 		</view>
 		<view class="btn-box">
 			<view class="sub-btn" @click="submit()">保存修改</view>
@@ -69,8 +83,12 @@
 				email:"",
 				sexPicker: ['男', '女','未知'],
 				sex: 0, // 性别
-				headImg: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/detault_head.jpg', // 头像,
+				headImg: this.$store.state.imgpath+'/app/images/detault_head.jpg', // 头像,
 				headImgUrl:'',
+				defaultUrl:'https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com/fs/20250606/1749180611713.png',
+				codeimg:'',
+				codeurlimg:'',
+				roleNames:''
 			}
 		},
 		onLoad() {
@@ -80,11 +98,21 @@
 			bindUser(data){
 				var that=this;
 				that.nickName=data.nickName;
-				that.deptName=data.deptName;
+				that.deptName=data.dept.deptName;
+				if(data.posts){
+					that.postNames=data.posts.map(item=>item.postName).join(",")
+				}
+				if(data.roles){
+					this.roleNames=data.roles.map(item=>item.roleName).join(",")
+				}
 				// that.posts=data.post;
 				that.phonenumber=data.phonenumber;
 				that.email=data.email;
 				that.sex=data.sex;
+				if(!that.utils.isEmpty(data.qrCodeWeixin)){
+					that.codeimg=uni.getStorageSync('requestPath')+data.qrCodeWeixin;
+					this.codeurlimg=data.qrCodeWeixin;
+				}
 				if(!that.utils.isEmpty(data.avatar)){
 					that.headImg=uni.getStorageSync('requestPath')+data.avatar;
 					this.headImgUrl=data.avatar;
@@ -105,7 +133,7 @@
 			pickerSex(e) {
 				this.sex = e.detail.value
 			},
-			// 选择照片
+			// 选择头像照片
 			chooseImage() {
 				uni.chooseImage({
 					count: 1, //默认9
@@ -132,6 +160,33 @@
 					}
 				});
 			},
+			// 选择头像照片
+			chooseImages() {
+				uni.chooseImage({
+					count: 1, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					sourceType: ['album', 'camera'], //从相册选择
+					success: (res) => {
+						//this.headImg = res.tempFilePaths[0]
+						uni.uploadFile({
+							url: uni.getStorageSync('requestPath')+'/companyapp/app/common/upload', //仅为示例,非真实的接口地址
+							filePath: res.tempFilePaths[0],
+							name: 'file',
+							formData: {
+								'user': 'test'  // 上传附带参数
+							},
+							success: (uploadFileRes) => {
+								console.log(uploadFileRes)
+								// 根据接口具体返回格式   赋值具体对应url
+								var data=JSON.parse(uploadFileRes.data)
+								this.codeimg=uni.getStorageSync('requestPath')+data.fileName;
+								this.codeurlimg=data.fileName
+							}
+						});
+						
+					}
+				});
+			},
 			// 预览头像
 			viewImage() {
 				uni.previewImage({
@@ -154,7 +209,9 @@
 					});
 					return
 				}
-				var data = {mobile:this.phonenumber,email:this.email,sex:this.sex.toString(),headImg:this.headImgUrl};
+				var data = {mobile:this.phonenumber,email:this.email,
+				name:this.nickName,
+				sex:this.sex.toString(),headImg:this.headImgUrl,qrCodeWeixin:this.codeurlimg};
 				console.log(data);
 				setUserInfo(data).then(
 					res => {

+ 70 - 31
pages/user/index.vue

@@ -16,55 +16,79 @@
 						</view>
 					</view>
 					<view class="right" >
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/right_arrow.png"></image>
+						<image :src="imgPath+'/app/images/right_arrow.png'"></image>
 					</view>
 				</view>
-				<view class="company" v-if="user!=null">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/icon_comp.png"></image>
-					<view class="name">{{user.createBy||'暂无数据'}}</view>
+				<view class="justify-between align-center">
+					<view class="company" v-if="user!=null">
+						<!-- <image :src="imgPath+'/app/images/icon_comp.png'"></image> -->
+						<view class="base-color-6">公司:</view>
+						<view class="name">{{user.companyName||'暂无数据'}}</view>
+					</view>
+					<view class="company" v-if="user!=null">
+						<view class="base-color-6">部门:</view>
+						<view class="name">{{user.dept.deptName||'无'}}</view>
+					</view>
+				</view>
+				<view class="justify-between align-center">
+					<view class="company" v-if="user!=null">
+						<view class="base-color-6">岗位:</view>
+						<view class="name">{{user.postname||'无'}}</view>
+					</view>
+					<view class="company" v-if="user!=null">
+						<view class="base-color-6">角色:</view>
+						<view class="name">{{user.rolesname||'无'}}</view>
+					</view>
 				</view>
 			</view>
-			
-			<view class="menu-box" style="margin-top: -20rpx;">
+			<view class="bgf radius15 p30 justify-between align-center mb40" v-if="balance" >
+				<view class="fs24">红包剩余金额</view>
+				<view class="fs40 bold">{{balance.toFixed(2)}}</view>
+			</view>
+			<view class="menu-box" style="margin-top: -20rpx;" >
 				<view class="title-box">
-					<image class="icon" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/chang.png"></image>
+					<image class="icon" :src="imgPath+'/app/manergevip/chang.png'"></image>
 					<view class="title">常用功能</view>
 				</view>
 				<view class="line"></view>
-				<view class="menus">
-					<view class="menu-item" @click="navTo('/pages/courseManage/manage/manageIndex')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/menu_info.png"></image>
+				<view class="menus" v-if="user!=null">
+					<view class="menu-item" @click="navTo('/pages_manage/manageIndex')">
+						<image :src="imgPath+'/app/images/menu_info.png'"></image>
 						<view class="m-name">销售管理</view>
 					</view>
-					<view class="menu-item" @click="navTo('/pages/user/users/users')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/qudao.png"></image>
+					<view class="menu-item" @click="navTo('/pages/user/users/users')" v-if="user.userType=='00'">
+						<image :src="imgPath+'/app/manergevip/qudao.png'"></image>
 						<view class="m-name">审核销售</view>
 					</view>
-					<view class="menu-item" @click="handleShare">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/share-manage.png"></image>
+					<view class="menu-item" @click="handleShare" v-if="user.userType=='00'">
+						<image :src="imgPath+'/app/manergevip/share-manage.png'" ></image>
 						<view class="m-name">邀请销售</view>
 					</view>
 					<view class="menu-item" @click="navTo('/pages/courseManage/manage/lableSetup')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/changeLable.png"></image>
+						<image :src="imgPath+'/app/images/changeLable.png'"></image>
 						<view class="m-name">标签设置</view>
 					</view>
 			 	</view>
 			</view>
 			<view class="menu-box">
 				<view class="title-box">
-					<image class="icon" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/qita.png"></image>
+					<image class="icon" :src="imgPath+'/app/manergevip/qita.png'"></image>
 					<view class="title">其它工具</view>
 				</view>
 				<view class="line"></view>
 				<view class="menus">
 					<view class="menu-item" @click="navTo('/pages/user/about')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/about.png"></image>
+						<image :src="imgPath+'/app/manergevip/about.png'"></image>
 						<view class="m-name">关于我们</view>
 					</view>
 					<view class="menu-item" @click="navTo('/pages/user/editUser')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/setup.png"></image>
+						<image :src="imgPath+'/app/manergevip/setup.png'"></image>
 						<view class="m-name">设置</view>
 					</view>
+				<!-- 	<view class="menu-item" @click="navTo('/pages_course/exportlist/exportlist')">
+						<u-icon name="attach" color="#2979ff" size="28"></u-icon>
+						<view class="m-name">导出列表</view>
+					</view> -->
 				</view>
 				
 			</view>
@@ -77,7 +101,7 @@
 			<view class="sharePop x-ac">
 				<!--#ifdef MP-WEIXIN-->
 				<view class="sharePop-item y-f" @click="shareimg">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/card_icon.png" mode="aspectFill"
+					<image :src="imgPath+'/app/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>
@@ -85,13 +109,13 @@
 				</view>
 				<!--#endif-->
 				<!-- <view class="sharePop-item y-f" @click="buildimg">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/poster_icon.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/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> -->
 				<!--#ifdef H5-->
 				<view class="sharePop-item y-f" @click="shareSale">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/link_icon.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/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>
@@ -105,7 +129,7 @@
 			</view>
 			<view class="justify-around mtb40">
 				<view class="column justify-center align-center" @click="downimg">
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/downicon.png' class="w80 h80"></image>
+					<image :src="imgPath+'/app/image/downicon.png'" class="w80 h80"></image>
 					<view class="mt10">长按图片保存</view>
 				</view>
 			</view>
@@ -124,12 +148,12 @@
 		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
 			<view class="point-box">
 				<view class="imgshe" >
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/point.png' class="w300 h300"></image>
+					<image :src="imgPath+'/app/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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/wxmore.png"
+					<image :src="imgPath+'/app/image/wxmore.png'"
 					class="w50 h50 mlr10"></image>
 					</view>
 					<view class="mt20">选择 “转发给朋友”</view>
@@ -164,18 +188,20 @@
 				setImg:false,
 				codeLink:'',
 				showzhidao:false,
-				imgs:this.$store.state.imgpath+'/app/image/logo.png'
+				imgs:this.$store.state.imgpath+'/app/image/logoshare.png',
+				balance:0
 			}
 		},
 		onShow() {
+			console.log(this.imgs)
 			this.getCompanyUsers()
 		},
 		onShareAppMessage() {
 			return {
 				title: this.$store.state.logoname+'小程序的'+this.user.nickName+'邀请您成为销售', // 分享卡片标题
-				path: '/pages/courseManage/course/becomeSale?id='+this.user.companyId, // 目标页面路径
+				path: '/pages_course/course/becomeSale?id='+this.user.companyId+'&companyUserId='+this.user.userId, // 目标页面路径
 				// 携带参数:将当前页面的数据拼接到路径中
-				imageUrl: this.user.avatar || this.imgs, // 分享卡片封面图(可选)
+				imageUrl: this.imgs, // 分享卡片封面图(可选)
 				success: (res) => {
 					console.log("分享成功", res);
 				},
@@ -184,6 +210,11 @@
 				},
 			}
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
 		mounted() {
 		},
 		methods: {
@@ -192,7 +223,7 @@
 				 const Path = fullUrl.split('/#')[0] || '';
 				setTimeout(() => {
 					uni.setClipboardData({
-						data: Path+'/#/pages/courseManage/course/becomeSale?id='+this.user.companyId,
+						data: Path+'/#/pages_course/course/becomeSale?id='+this.user.companyId,
 						success: () => {
 							uni.showToast({
 								title: '邀请链接已复制',
@@ -234,7 +265,7 @@
 				// 配置--配置全局 
 				wx.ready(function() { //需在用户可能点击分享按钮前就先调用
 					wx.updateAppMessageShareData({
-						title: self.user.userName+"邀请您成为群管", // 分享标题
+						title: self.user.userName+"邀请您成为销售", // 分享标题
 						desc: self.user.deptName, // 分享描述
 						link:self.copyLinks, 
 						imgUrl: self.codeLink.url ||self.imgs, // 分享图标
@@ -385,11 +416,19 @@
 					if(res.code==200){
 						console.log(res)
 						this.user=res.user;
+						this.balance=res.balance
+						if(res.user.posts){
+							this.user.postname=res.user.posts.map(item=>item.postName).join(",")
+						}
+						if(res.user.roles){
+							this.user.rolesname=res.user.roles.map(item=>item.roleName).join(",")
+						}
 						if(this.user.avatar){
 							this.user.avatar=uni.getStorageSync('requestPath')+res.user.avatar
 						}else{
 							this.user.avatar=='';
 						}
+						console.log('头像',this.user.avatar)
 					}else{
 						
 					}
@@ -462,7 +501,7 @@
 		width: 100%;
 		.bg{
 			width: 100%;
-			height: 360upx;
+			height: 550upx;
 			position: absolute;
 			top: 0;
 			left: 0;
@@ -528,7 +567,7 @@
 					
 				}
 				.company{
-					margin-top: 30rpx;
+					margin-top: 20rpx;
 					display: flex;
 					align-items: center;
 					justify-content: flex-start;

+ 32 - 7
pages/user/userInfo.vue

@@ -12,11 +12,11 @@
 						<text class="title">{{phonenumber}}</text>
 					</view>
 				</view>
-				<image   class="right"  src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/icon_edit.png" mode="aspectFill" @click="editInfo"></image>
+				<image class="right" :src="imgPath+'/app/images/icon_edit.png'" mode="aspectFill'" @click="editInfo"></image>
 			</view>
 			<!-- 公司 -->
 			<view class="comp-info">
-				<image class="img" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/icon_comp_white.png" mode="aspectFill"></image>
+				<image class="img" :src="imgPath+'/app/images/icon_comp_white.png'" mode="aspectFill"></image>
 				<text class="text">{{deptName}}</text>
 			</view>
 		</view>
@@ -48,6 +48,15 @@
 				<text class="label">岗位</text>
 				<text class="text">{{postNames}}</text>
 			</view>
+			<view class="item">
+				<text class="label">角色</text>
+				<text class="text">{{roleNames}}</text>
+			</view>
+			<view class="item justify-start align-center">
+				<text class="label">二维码</text>
+				<!-- <text class="text">{{postNames}}</text> -->
+				<image :src="qrCodeWeixin" class="w120 h120" mode="aspectFill"></image>
+			</view>
 		</view>
 	</view>
 </template>
@@ -57,15 +66,17 @@
 	export default {
 		data() {
 			return {
-				avatar:"https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/detault_head.jpg", 
+				avatar:this.$store.state.imgpath+"/app/images/detault_head.jpg", 
 				nickName:"",
 				deptName:"",
 				postNames:"",
 				phonenumber:"",
 				email:"",
 				sex:"",
+				qrCodeWeixin:"",
 				isShow:false,
 				userId:undefined,
+				roleNames:''
 			}
 		},
 		onLoad(option) {
@@ -80,6 +91,11 @@
 			// })
 			
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
 		onShow() {
 			this.getCompanyUser();
 		},
@@ -87,9 +103,17 @@
 			bindUser(data){
 				var that=this;
 				that.nickName=data.nickName;
-				that.deptName=data.dept.deptName;
-				that.phonenumber=data.phonenumber;
-				that.email=data.email;
+				that.deptName=data.companyName?data.companyName:'暂无';
+				that.phonenumber=data.phonenumber?data.phonenumber:'暂无';
+				if(data.posts){
+					that.postNames=data.posts.map(item=>item.postName).join(",")
+				}
+				if(data.roles){
+					this.roleNames=data.roles.map(item=>item.roleName).join(",")
+				}
+				// this.postNames=data.posts.map(item=>item.postName).join(",")||'暂无'
+				// this.roleNames=data.roles.map(item=>item.roleName).join(",")||'暂无'
+				that.email=data.email?data.email:'暂无';
 				if(data.sex==0){
 					that.sex="男";
 				}
@@ -99,7 +123,8 @@
 				else if(data.sex==2){
 					that.sex="未知";
 				}
-				if(!that.utils.isEmpty(data.avatar)){
+				that.qrCodeWeixin=uni.getStorageSync('requestPath')+data.qrCodeWeixin
+				if(data.avatar){
 					that.avatar=uni.getStorageSync('requestPath')+data.avatar;
 				}
 			},

+ 535 - 74
pages/user/users/becomeVIP.vue

@@ -1,25 +1,92 @@
 <template>
 	<view class="content hb column justify-center align-center bgf">
-		<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/becomevip.png" mode="widthFix"></image>
-		<view class="bold">成为会员,享受更多权益</view>
+		<image :src="imgPath+'/app/image/becomevip.png'" mode="widthFix"></image>
+		<view class="justify-start align-center fs24 base-color-9" v-if="userInfo.userId">
+			<view>{{nameuser?nameuser:'暂未授权昵称'}}#</view>
+			<view>{{userInfo.userId}}</view>
+		</view>
+		<view class="bolds">成为会员,享受更多权益</view>
 		<!--#ifdef H5-->
 		<view class="sure" @click="registerCourse">{{isVip==1?'您已成为会员':viptext}}</view>
 		<!--#endif-->
 		<!--#ifdef MP-WEIXIN-->
-		<view class="btns">
+		
+		<!-- <view class="base-bg-orange colorf ptb20 plr40 radius60" 
+		v-if="(userInfos==null||userInfos=='')&&imgname=='乐氏本源'" @click="nato()">授权用户信息</view> -->
+		<view class="btns" >
+			<button
+				class="author-btn"
+				open-type="getUserInfo"
+				:disabled="userdisabled"
+				@getuserinfo="userInfologin"  v-if="authType==0">{{isVip==1?'您已成为会员':'申请成为会员'}}</button>
 			<button
+				v-else
 				class="author-btn"
 				open-type="getPhoneNumber"
 				@getphonenumber="phoneLogin"  >{{isVip==1?'您已成为会员':'申请成为会员'}}</button>
 			<button class="author-btn" v-if="isVip==1 || isbecomevip==1" @click="handleAgree()">{{viptext}}</button>
 		</view>
+		
+		<!--#endif-->
+		<!--#ifdef MP-WEIXIN-->
+		<u-popup :show="userlogo" mode="bottom" round='12'>
+			<view class="userlogo column">
+				<view class="mtb30 justify-start align-center ml20">
+					<u-avatar :src="imgPath+'/app/image/logo.png'" size="50"></u-avatar>
+					<view class="bold mlr20">{{imgname}}</view>
+					<view>申请</view>
+				</view>
+				<view class="bold fs36 ml20">授权你的昵称头像信息</view>
+				<view class="mtb20 justify-between align-center  plr20">
+					<view class="justify-start align-center">
+						<view class="boxweixin" :class="userinfos.nickname==''?'boxnosel':'boxsel'">
+							<view v-if="userinfos.nickname">√</view>
+						</view>
+						<view class="ml20">
+							<view class="base-color-3 bold">第一步</view>
+							<view class="fs24 base-color-9">请点击授权微信昵称</view>
+						</view>
+					</view>
+					<view class="button-container">
+					   <input 
+					     type="nickname"
+					     class="hidden-input"
+						@blur="onNickNameInput"
+						 @input="onNickNameInput"
+					   />
+					   <button class="custom-button" :class="nameuser==''?'subname':'subavt'">{{nameuser?"已授权":'允许授权'}}</button>
+					 </view>
+				</view>
+				<view class="mtb20 justify-between align-center  plr20 mt40">
+					<view class="justify-start align-center">
+						<view class="boxweixin" :class="userinfos.nickname==''?'boxnosel':'boxsel'">
+							<view v-if="userinfos.avatar">√</view>
+						</view>
+						<view class="ml20">
+							<view class="base-color-3 bold">第二步</view>
+							<view class="fs24 base-color-9">请点击授权微信头像</view>
+						</view>
+					</view>
+					<view class="button-container">
+					  <button open-type="chooseAvatar" @chooseavatar="onChooseAvatar" class="hidden-input" 
+					  v-if="nameuser">
+					    允许授权
+					  </button>
+					  <button class="custom-button sub" @click="shouquan" v-if="nameuser==''">允许授权</button>
+					   <button class="custom-button "  :class="avataruser==''?'subname':'subavt'"
+					   v-else>{{avataruser?"已授权":'允许授权'}}</button>
+					 </view>
+				</view>
+				<view class="submitname" @click="confimrname" :class="nameuser&&avataruser?'subact':'sub'">确定</view>
+			</view>
+		</u-popup>
 		<!--#endif-->
 		<view class="footer-tips">重庆云联融智提供技术支持</view>
 	</view>
 </template>
 
 <script>
-	import { loginByMp,registerCourses,loginByMiniApp} from '@/api/user'
+	import { loginByMp,registerCourses,loginByMiniApp,checkUserInfo,editUser} from '@/api/user'
 	export default {
 		data() {
 			return {
@@ -31,10 +98,50 @@
 				userInfo:{},
 				tagIds:[],
 				isbecomevip:0,
-				viptext:'申请成为会员'
+				viptext:'申请成为会员',
+				userInfos:null,
+				userlogo:false,
+				userinfos:{
+					nickname:'',
+					avatar:""
+				},
+				headImg:'',
+				authType:1,//0微信登录 1手机号登录
+				userdisabled:false,
+				projectId:''
 			}
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    },
+			imgname() {
+			  return this.$store.state.logoname
+			},
+			appid() {
+				return this.$store.state.appid
+			},
+			nameuser() {
+				return this.userinfos.nickname
+			},
+			avataruser() {
+				return this.userinfos.avatar
+			},
+		},
 		onLoad(option) {
+			console.log(option)
+			let path = 'https://userapp.fbylive.com'//福本源
+			// let path = 'https://userapp.zkhj6.com'//中康
+			// let path = 'https://company.h5.test.ylrztop.com/api'//云融融智
+			// let path = 'https://userapp.ashyisheng.com'//蜂巢快药
+			// let path = 'https://userapp.whhm.ylrzcloud.com/prod-api'//惠名大药房
+			// let path = 'https://userapp.xdtongshuntang.top'//同顺堂
+			// let path = 'https://userapp.liangmiaoedu.com'//良苗
+			// let path = 'https://usercourse.beliyostore.com'//倍力优
+			// let path = 'https://userapp.bainian1000y.cn/prod-api'//百年康城
+			// let path = 'https://userapp.drkzyy.cn/prod-api'//青岛市德瑞康
+			// let path = 'https://userapp.moonxiang.com/prod-api'//北京存在文化
+			uni.setStorageSync('requestPath',path)
 			if(uni.getStorageSync('userInfo')&&JSON.stringify(uni.getStorageSync('userInfo'))!='{}') {
 				this.userInfo = JSON.parse(uni.getStorageSync('userInfo'))
 			} else {
@@ -42,7 +149,7 @@
 			}
 			// this.userInfo=JSON.parse(uni.getStorageSync('userInfo')) || {};
 			//#ifdef MP-WEIXIN
-			let obj=uni.getStorageSync('AppToken_MYfby');
+			let obj=uni.getStorageSync('TOKEN_WEXIN');
 			//#endif
 			// #ifdef H5
 			let obj=uni.getStorageSync('TOKEN_KEY');
@@ -51,6 +158,26 @@
 			this.isLogin = !!obj;
 			this.companyid = option.companyId || ''
 			this.companyUserId=option.companyUserId || 0
+			this.projectId = option.projectId
+			//#ifdef MP-WEIXIN
+			// if(this.$store.state.logoname!=='乐氏本源'&&!uni.getStorageSync('userInfos')){
+			// 	this.userlogo=true
+			// }
+			// if(!uni.getStorageSync('userInfos')&&this.$store.state.logoname=='乐氏本源'){
+			// 	uni.navigateTo({
+			// 		url:'/pages_course/webview'
+			// 	})
+			// 	return
+			// }
+			// if(this.$store.state.logoname=='乐氏本源'){
+			// 	this.userInfos=uni.getStorageSync('userInfos')
+			// 	if(!uni.getStorageSync('userInfos')){
+			// 		uni.navigateTo({
+			// 			url:'/pages_course/webview'
+			// 		})
+			// 	}
+			// }
+			//#endif
 			if(option.tagids=="null"){
 				this.tagIds=[]
 			}else{
@@ -59,7 +186,7 @@
 				  .map(item => parseInt(item.trim(), 10))
 				  .filter(num => !isNaN(num)); // 过滤无效转换
 				  this.tagIds =arr
-				console.log(this.tagIds); // [66, 78]
+				// console.log(this.tagIds); 
 			}
 			this.isWechat = String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger"
 			this.code = option.code
@@ -68,6 +195,7 @@
 					this.loginByMp()
 				}
 				// #endif
+				
 		},
 		onShow() {
 			if(uni.getStorageSync('userInfo')&&JSON.stringify(uni.getStorageSync('userInfo'))!='{}') {
@@ -76,19 +204,133 @@
 				this.userInfo = {}
 			}
 			//#ifdef MP-WEIXIN
-			let obj=uni.getStorageSync('AppToken_MYfby');
+			this.userInfos=uni.getStorageSync('userInfos')
+			let obj=uni.getStorageSync('TOKEN_WEXIN');
 			//#endif
 			// #ifdef H5
 			let obj=uni.getStorageSync('TOKEN_KEY');
 			// #endif
 			this.isLogin = !!obj;
 			if(this.isLogin&&this.isVip!=1) {
-				this.registerCourse()
+				this.checkUserInfoA()
 			}
 			
 		},
 		methods: {
+			//检查用户昵称以及头像
+			checkUserInfoA(){
+				checkUserInfo().then(res=>{
+					if(res.code==200){
+						this.isLogin = true
+						this.userInfo= res.user
+						uni.setStorageSync('userInfo', JSON.stringify(res.user));
+						if(this.nameuser==''){
+							this.userinfos.nickname=this.userInfo.nickname?this.userInfo.nickname:this.userInfo.nickName
+						}
+						this.registerCourse()
+					}else if(res.code==500){
+						if(res.authType==2){
+							uni.setStorageSync('authUrl',res.domain)
+							if(!uni.getStorageSync('userInfos')||uni.getStorageSync('userInfos')=={}){
+								uni.navigateTo({
+									url:'/pages_course/webview'
+								})
+								return
+							}
+							this.editUserA()
+						}else{
+							this.userlogo=true
+						}
+					}else{
+						uni.showToast({
+							icon:'none',
+							title:res.msg,
+						});
+					}
+				})
+			},
+			//修改用户昵称以及头像
+			editUserA(){
+				this.userinfos=uni.getStorageSync('userInfos')?uni.getStorageSync('userInfos'):this.userinfos
+				const data={
+					nickname:this.userinfos.nickname,
+					avatar:this.userinfos.avatar,
+				}
+				editUser(data).then(res=>{
+					if(res.code==200){
+						uni.showToast({
+							icon:'none',
+							title:'修改成功!',
+						});
+						setTimeout(()=>{
+							this.registerCourse()
+						},100)
+					}else{
+						uni.removeStorageSync('userInfos')
+						uni.showToast({
+							icon:'none',
+							title:res.msg+'请重新申请',
+						});
+					}
+				})
+			},
+			shouquan(){
+				if(this.userinfos.nickname==''){
+					uni.showToast({
+						icon:'none',
+						title: "请先授权微信昵称",
+					});
+				}
+			},
+			confimrname(){
+				if(this.userinfos.nickname==''){
+					uni.showToast({
+						icon:'none',
+						title: "请授权微信昵称",
+					});
+					return
+				}
+				if(this.userinfos.avatar==''){
+					uni.showToast({
+						icon:'none',
+						title: "请授权微信头像",
+					});
+					return
+				}
+				uni.setStorageSync('userInfos',this.userinfos)
+				this.editUserA()
+				this.userlogo=false
+			},
+			onChooseAvatar(e){
+				this.userinfos.avatar=e.detail.avatarUrl
+				console.log(e.detail.avatarUrl)
+				uni.uploadFile({
+					url: uni.getStorageSync('requestPath')+'/app/common/uploadOSS', //仅为示例,非真实的接口地址
+					filePath: e.detail.avatarUrl,
+					name: 'file',
+					formData: {
+						'user': 'test'  // 上传附带参数
+					},
+					success: (uploadFileRes) => {
+						console.log(uploadFileRes)
+						// 根据接口具体返回格式   赋值具体对应url
+						var data=JSON.parse(uploadFileRes.data)
+						this.headImg=uni.getStorageSync('requestPath')+data.fileName
+						this.userinfos.avatar=data.url
+					}
+				});
+			},
+			onNickNameInput(e){
+				console.log(e)
+				this.userinfos.nickname=e.detail.value
+			},
+			nato(){
+				uni.navigateTo({
+					url:'/pages_course/webview'
+				})
+			},
 			handleAgree(){
+				console.log(144443)
 				if(this.isVip==1){
 					uni.showToast({
 						title: '您已成为会员!',
@@ -104,76 +346,195 @@
 				}
 				
 			},
+			userInfologin(e) {
+				console.log(123333)
+				this.userdisabled=true
+				var that=this;
+				uni.showLoading({
+					title: "加载中..."
+				});
+				if (e.mp.detail.errMsg == 'getUserInfo:ok') {
+					this.utils.getProvider()
+					.then(provider => {
+						if (!provider) {
+							this.userdisabled=false
+						  reject()
+						}
+						// uni登录
+						uni.login({
+							provider: provider,
+							success: async loginRes => {
+								let code = loginRes.code // 获取开发code
+								this.userinfos=uni.getStorageSync('userInfos')?uni.getStorageSync('userInfos'):this.userinfos
+								loginByMiniApp({
+								   encryptedData: e.mp.detail.encryptedData,
+								   iv: e.mp.detail.iv,
+								   code: code,
+								   nickname:this.userinfos.nickname?this.userinfos.nickname:'',
+								   avatar:this.userinfos.avatar?this.userinfos.avatar:'',
+								   companyId : this.companyid || '',
+								   companyUserId:this.companyUserId || 0,
+								   authType:this.authType,
+								   appId:this.appid,
+								   projectId:this.projectId
+								})
+								.then( res => {
+									if(res.code==200){
+										// console.log(res)
+										uni.hideLoading();
+										uni.showToast({
+											icon:'none',
+											title: "登录成功",
+										});
+										uni.setStorageSync('TOKEN_WEXIN', res.token);
+										uni.setStorageSync('userInfo', JSON.stringify(res.user));
+										this.userInfo=res.user;
+										uni.hideLoading()
+										this.userdisabled=false
+										// this.isLogin = true
+										setTimeout(()=>{
+											this.checkUserInfoA()
+											// this.registerCourse()
+										},200)
+									}else if(res.code==406){
+										uni.hideLoading();
+										uni.showToast({
+											icon:'none',
+											title: '该用户已成为其他销售会员',
+										});
+									}
+									else{
+										uni.hideLoading();
+										uni.showToast({
+											icon:'none',
+											title: res.msg,
+										});
+									}
+								   
+								 })
+								 .catch(res=>{
+								 	 this.userdisabled=false
+								 })
+							},
+							fail() {
+								this.userdisabled=false
+							}
+						})
+					})
+					.catch(err => {
+						this.userdisabled=false
+						uni.showToast({
+							icon:'none',
+							title: err,
+						});
+					})
+					 
+				} else {
+					this.userdisabled=false
+					uni.showToast({
+						title: '已拒绝授权',
+						icon: 'none',
+						duration: 2000,
+					})
+				}
+			},
 			// 微信用户手机号登录
 			phoneLogin(e) {
 				var that=this;
 				uni.showLoading({
-					title:"处理中..."
-				})
-					if (e.mp.detail.errMsg == 'getPhoneNumber:ok') {
-						this.utils.getProvider()
-						.then(provider => {
-							if (!provider) {
-							  reject()
+					title: "加载中..."
+				});
+				if (e.mp.detail.errMsg == 'getPhoneNumber:ok') {
+					this.utils.getProvider()
+					.then(provider => {
+						if (!provider) {
+						  reject()
+						}
+						// uni登录
+						uni.login({
+							provider: provider,
+							success: async loginRes => {
+								let code = loginRes.code // 获取开发code
+								this.userinfos=uni.getStorageSync('userInfos')?uni.getStorageSync('userInfos'):this.userinfos
+								loginByMiniApp({
+								   encryptedData: e.mp.detail.encryptedData,
+								   iv: e.mp.detail.iv,
+								   code: code,
+								   nickname:this.userinfos.nickname?this.userinfos.nickname:'',
+								   avatar:this.userinfos.avatar?this.userinfos.avatar:'',
+								   companyId : this.companyid || '',
+								   companyUserId:this.companyUserId || 0,
+								    authType:this.authType,
+									appId:this.appid,
+									projectId:this.projectId
+								})
+								.then( res => {
+									if(res.code==200){
+										// console.log(res)
+										uni.hideLoading();
+										uni.showToast({
+											icon:'none',
+											title: "登录成功",
+										});
+										uni.setStorageSync('TOKEN_WEXIN', res.token);
+										uni.setStorageSync('userInfo', JSON.stringify(res.user));
+										this.userInfo=res.user;
+										uni.hideLoading()
+										// this.isLogin = true
+										// setTimeout(()=>{
+										// 	this.registerCourse()
+										// },200)
+										setTimeout(()=>{
+											this.checkUserInfoA()
+											// this.registerCourse()
+										},200)
+									}else if(res.code==406){
+										uni.hideLoading();
+										uni.showToast({
+											icon:'none',
+											title: '该用户已成为其他销售会员',
+										});
+									}
+									else{
+										uni.hideLoading();
+										uni.showToast({
+											icon:'none',
+											title: res.msg,
+										});
+									}
+								   
+								 })
 							}
-							// uni登录
-							uni.login({
-								provider: provider,
-								success: async loginRes => {
-									console.log(loginRes)
-									let code = loginRes.code // 获取开发code
-									loginByMiniApp({
-									   encryptedData: e.mp.detail.encryptedData,
-									   iv: e.mp.detail.iv,
-									   code: code,
-									})
-									.then( res => {
-										if(res.code==200){
-											console.log(res)
-											uni.hideLoading();
-											uni.showToast({
-												icon:'none',
-												title: "登录成功",
-											});
-											uni.setStorageSync('AppToken_MYfby', res.token);
-											uni.setStorageSync('userInfo', JSON.stringify(res.user));
-											this.userInfo=res.user;
-											uni.hideLoading()
-											this.isLogin = true
-											setTimeout(()=>{
-												this.registerCourse()
-											},200)
-										}
-										else{
-											uni.hideLoading();
-											uni.showToast({
-												icon:'none',
-												title: "授权登录失败,请重新登录",
-											});
-										}
-									   
-									 })
-								}
-							})
 						})
-						.catch(err => {
-							uni.showToast({
-								icon:'none',
-								title: err,
-							});
-						})
-						 
-					} else {
+					})
+					.catch(err => {
 						uni.showToast({
-							title: '已拒绝授权',
-							icon: 'none',
-							duration: 2000,
-						})
-					}
+							icon:'none',
+							title: err,
+						});
+					})
+					 
+				} else {
+					uni.showToast({
+						title: '已拒绝授权',
+						icon: 'none',
+						duration: 2000,
+					})
+				}
 			},
 			getWechatCode() {
 				if (this.isWechat) {
-					let appid = "wx961fadab9bcb792b"; //微信APPid
+					// let appid = "wx961fadab9bcb792b"; //微信APPid(福本源)
+					// let appid = "wx93ce67750e3cfba3"; //微信APPid(云联融智)
+					// let appid = "wxea1da2b708ab3c2f"; //微信APPid(蜂巢快药)
+					// let appid = "wx3de90a39feb8107a"; //微信APPid(中康看课)
+					// let appid = "wxec49f9d783abf233"; //微信APPid(惠名大药房)
+					// let appid = "wx5a0f7e1932e2689e"; //微信APPid(同顺堂)
+					// let appid = "wxe0b82a0018449a62"; //微信APPid(良苗)
+					// let appid = "wx568ea6b70350c585"; //微信APPid(倍力优)
+					let appid = "wx0d021524695f1943"; //微信APPid(百年康城)
+					// let appid = "wx090c5f399d65456e"; //微信APPid(青岛市德瑞康)
+					// let appid = "wx52298c1781d5cc99"; //微信APPid(金慷建)
 					let code = this.getUrlCode().code; //是否存在code
 					let local = window.location.href;
 					if (code == null || code === "") {
@@ -240,6 +601,7 @@
 			},
 			// 成为会员
 			registerCourse() {
+				console.log(123333)
 				this.isVip = 0
 				// 确保从本地存储重新获取最新数据
 				  // if(uni.getStorageSync('userInfo')){
@@ -253,12 +615,13 @@
 				  if(this.tagIds==null){
 					  this.tagIds=""
 				  }
-				  console.log(this.tagIds)
+				  // console.log(this.tagIds)
 				const data={
 					userId:this.userInfo.userId,
 					companyUserId:this.companyUserId,
 					companyId:this.companyid,
-					tagIds:this.tagIds
+					tagIds:this.tagIds,
+					projectId:this.projectId
 					}
 				if(this.isLogin) {
 					registerCourses(data).then(res=>{
@@ -267,12 +630,12 @@
 							this.isbecomevip=1
 							this.viptext='您已成为会员'
 							uni.showToast({
-								title: '您已成为会员,',
+								title: '注册成功',
 								icon:'none'
 							})
 						} else {
 							this.isbecomevip=1
-							console.log(this.isbecomevip)
+							// console.log(this.isbecomevip)
 							this.viptext=res.msg
 							uni.showToast({
 								icon:'none',
@@ -291,6 +654,102 @@
 	}
 </script>
 <style lang="scss" scoped>
+	.subname{
+		background-color: #00aa00;
+		color: #fff;
+	}
+	.subavt{
+		background-color: #fff;
+		border: 2rpx #0a0 solid;
+		color: #00aa00;
+	}
+	.boxweixin{
+		width: 44rpx;
+		height: 44rpx;
+		border-radius: 50%;
+		text-align: center;
+		line-height: 34rpx;
+		color: #0a0;
+	}
+	.boxnosel{
+		border: #757575 4rpx solid;
+	}
+	.boxsel{
+		border: #0a0 4rpx solid;
+	}
+	.button-container {
+	  position: relative;
+	  width: 240rpx;
+	}
+	.hidden-input {
+	  position: absolute;
+	  top: 0;
+	  left: 0;
+	  width: 100%;
+	  height: 100%;
+	  opacity: 0;
+	  z-index: 2;
+	}
+	.custom-button {
+	  position: relative;
+	  z-index: 1;
+	  /* 其他样式 */
+	  width:100%;
+	  margin: 0 auto;
+	  height: 80rpx;
+	  line-height: 60rpx;
+	  font-size: 28rpx;
+	  padding: 10rpx 20rpx;
+	}
+	.submitname{
+		width: 90%;
+		margin: 0 auto;
+		text-align: center;
+		padding: 30rpx;
+		margin-top: 40rpx;
+	}
+	.sub{
+		background-color: #f0f0f0;
+		color: #0a0;
+	}
+	.subact{
+		background-color: #0a0;
+		color: #fff;
+	}
+	.userlogo{
+		height: 760rpx;
+	}
+	.getlogo{
+		width:240rpx;
+		background-color: #fff;
+		// padding: 10rpx 20rpx;
+	}
+	::v-deep .u-popup {
+	 flex: 0 !important;
+	}
+	// .submitname{
+	// 	width: 60%;
+	// 	background-color: #05a8ee;
+	// 	color: #fff;
+	// 	margin: 0 auto;
+	// 	border-radius: 80rpx;
+	// 	text-align: center;
+	// 	padding: 20rpx;
+	// 	margin-top: 40rpx;
+	// }
+	.userlogo{
+		height: 760rpx;
+	}
+	.getlogo{
+		width:calc(60% - 40rpx);
+		margin: 0 auto;
+		background-color: #fff;
+		padding: 10rpx 20rpx;
+		image{
+			width: 80rpx !important;
+			height: 80rpx !important;
+		}
+	}
 	.footer-tips {
 			// margin-top: 14rpx;
 			position: fixed;
@@ -309,7 +768,7 @@
 			height: 300rpx;
 		}
 	}
-	.bold {
+	.bolds {
 		color: #999;
 		font-size: 16px;
 		height: auto;
@@ -337,6 +796,8 @@
 			position: absolute;
 			width: 630rpx;
 			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
 			background: #1777ff;
 			border-radius: 40rpx;
 			font-size: 30rpx;

+ 9 - 4
pages/user/users/userInfo.vue

@@ -17,16 +17,16 @@
 						<view class="base-color-9 fs24 mt12">注册时间:{{!userinfo.createTime||userinfo.createTime.slice(0, 10)}}</view>
 					</view>
 				</view>
-				<image v-if="!isShow" class="right" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/icon_edit.png" mode="aspectFill" @click="editInfo"></image>
+				<image v-if="!isShow" class="right" :src="imgPath+'/app/images/icon_edit.png'" mode="aspectFill" @click="editInfo"></image>
 			</view>
 			<!-- 公司 -->
 			<view class="justify-between">
 				<view class="comp-info">
-					<image class="img" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/icon_comp.png" mode="aspectFill"></image>
+					<image class="img" :src="imgPath+'/app/images/icon_comp.png'" mode="aspectFill"></image>
 					<text class="fs24 base-color-6">{{userinfo.deptName}}</text>
 				</view>
 				<view class="comp-info">
-					<image class="img" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/phone.png" mode="aspectFill"></image>
+					<image class="img" :src="imgPath+'/app/images/phone.png'" mode="aspectFill"></image>
 					<text class="fs24 base-color-6">{{userinfo.phonenumber}}</text>
 				</view>
 			</view>
@@ -76,7 +76,7 @@
 	export default {
 		data() {
 			return {
-				avatar:"https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/default.png", 
+				avatar:this.$store.state.imgpath+"/app/images/default.png", 
 				nickName:"",
 				deptName:"",
 				postNames:"",
@@ -115,6 +115,11 @@
 				this.getUserInfo();
 			}
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
 		methods: {
 			submitshen(){
 				if(this.userinfo.isAudit==1){

+ 261 - 11
pages/user/users/users.vue

@@ -41,10 +41,15 @@
 									<view class="base-color fs24" v-if="subitem.status==0">未禁用</view>
 									<view class="base-color-red fs24" v-else>禁用</view>
 								</view>
-								<view class="justify-between mt10" @click.passive.stop>
-									<view class="fs24 mt20 ml10" style="color: #115296;">
-										{{subitem.deptName}}
+								<view class="justify-between align-center mt10" @click.passive.stop>
+									<view>
+										<text class="base-color-9 ml10 fs24">部门:{{subitem.deptName?subitem.deptName:''}}</text>
+										<view class="fs24 mt10 justify-start align-center" style="color: #115296;">
+											<text class="base-color-9 ml10">岗位:{{subitem.postname?subitem.postname:''}}</text>
+											<text class="base-color-9 ml20">角色:{{subitem.rolesname?subitem.rolesname:''}}</text>
+										</view>
 									</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
@@ -84,17 +89,78 @@
 		<view v-show="!hidden" class="indexToast">
 			{{listCur}}
 		</view>
+		<u-popup :show="showcommpany" mode="center" round="16">
+			<view class="bgf w600 h600 p40 radius16" style="max-height: 600rpx;">
+				<view class="center bold fs32">设置销售员信息</view>
+				<view class="justify-center align-center mtb30">
+					<view class="mr40 fs32 base-color-6">部门:</view>
+					<u-input
+					   placeholder="选择部门"
+					   border="surround"
+					   v-model="valueb"
+					   @focus="showbumen()"
+					 ></u-input>
+				</view>
+				<view class="justify-center align-center mtb30">
+					<view class="mr40 fs32 base-color-6">岗位:</view>
+					 <view class="flex-1 u-border p16 radius8" @click="showgang=!showgang">
+						 <view class="fs28" style="color: #000;">{{valuea}}</view>
+						 <view class="fs28" style="color: #c0c4cc;" v-if="valueid.length==0">选择岗位</view>
+					 </view>
+				</view>
+				<view class="justify-center align-center mtb30">
+					<view class="mr40 fs32 base-color-6">角色:</view>
+					 <view class="flex-1 u-border p16 radius8" @click="showjuese=!showjuese">
+						 <view class="fs28" style="color: #000;">{{valuej}}</view>
+						 <view class="fs28" style="color: #c0c4cc;" v-if="valuej.length==0">选择角色</view>
+					 </view>
+				</view>
+				<view class="justify-around align-center mt50 ">
+					<view class="quxiao" @click="showcommpany=!showcommpany">取消</view>
+					<view class="queren" @click="confirmbchange">通过审核</view>
+				</view>
+				<tki-tree ref="tkitree" :range="columnb"  confirmColor="#4e8af7" :selectParent="true" @confirm="confirmb"/>
+				<u-popup :show="showgang" @close="showgang=!showgang" :closeOnClickOverlay='true'>
+					<view class="center bold fs36 pt40">请选择岗位</view>
+					<view class="justify-start align-center warpbox mt40 p20">
+						<view v-for="(item,index) in postlist" :key="item.postId" class="mlr10 mt10">
+							<u-tag :text="item.postName" :plain="!item.checked" :name="index"
+								@click="choosechangeTag"></u-tag>
+						</view>
+					</view>
+					<view class="justify-around align-center mt50 ">
+						<view class="quxiao" @click="showgang=!showgang">取消</view>
+						<view class="queren" @click="postconfirm">确定</view>
+					</view>
+				</u-popup>
+				<u-popup :show="showjuese" @close="showjuese=!showjuese" :closeOnClickOverlay='true'>
+					<view class="center bold fs36 pt40">请选择角色</view>
+					<view class="justify-start align-center warpbox mt40 p20">
+						<view v-for="(item,index) in rolelist" :key="item.roleId" class="mlr10 mt10">
+							<u-tag :text="item.roleName" :plain="!item.checked" :name="index"
+								@click="choosechangerole"></u-tag>
+						</view>
+					</view>
+					<view class="justify-around align-center mt50 ">
+						<view class="quxiao" @click="showjuese=!showjuese">取消</view>
+						<view class="queren" @click="roleconfirm">确定</view>
+					</view>
+				</u-popup>
+			</view>
+		</u-popup>
 	</view>
 </template>
 
 <script>
-	import {getAllUsers} from '@/api/user.js';
+	import {getAllUsers,querydepartment,querypost,modifysaleNews,queryrole} from '@/api/user.js';
 	import {subsalesaudit} from '@/api/courseManage.js';
+	import tkiTree from "@/components/tki-tree/tki-tree.vue"
 	export default {
+		components: {tkiTree},
 		data() {
 			return {
 				baseUrl:uni.getStorageSync('requestPath'),
-				avatar:"https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/default.png",
+				avatar:this.$store.state.imgpath+"/app/images/default.png",
 				CustomBar: 0,
 				hidden: true,
 				listCurID: '',
@@ -107,11 +173,31 @@
 				isSelectAll:false,
 				selectedUsers:[],
 				isAudits:1,
-				ids:''
+				ids:'',
+				showcommpany:false,
+				columnb: [
+				    ['11', '22', '33']
+				],
+				postlist:{},
+				showgang:false,
+				showjuese:false,
+				valuea:'',
+				valueb:'',
+				actpost:[],
+				valueid:'',
+				valueidbu:'',
+				xuanid:[],
+				valuej:'',
+				rolelist:[],
+				roleid:[],
+				seluserids:[]
 			}
 		},
 		onLoad() {
 			this.getUser();
+			this.getdepartment()
+			this.getpostlist()
+			this.getrolelist()
 		},
 		onReady() {
 			let that = this;
@@ -123,10 +209,132 @@
 			}).exec()
 		},
 		methods: {
+			roleconfirm(){
+				this.roleid = this.rolelist.filter(item => item.checked).map(v => v.roleId).join(",")
+				this.valuej = this.rolelist.filter(item => item.checked).map(v => v.roleName).join(',')
+				this.showjuese=!this.showjuese
+			},
+			choosechangerole(i){
+				this.rolelist[i].checked = !this.rolelist[i].checked
+			},
+			showbumen(){
+				this.$refs.tkitree._show();
+			},
+			confirmbchange(){
+				console.log(this.valueb.length,this.xuanid)
+				if(this.valueb.length==0){
+					uni.showToast({
+						icon: 'none',
+						title: '请选择部门'
+					})
+					return
+				}
+				if(this.xuanid.length==0){
+					uni.showToast({
+						icon: 'none',
+						title: '请选择部门'
+					})
+					return
+				}
+				if(this.valuej.length==0){
+					uni.showToast({
+						icon: 'none',
+						title: '请选择角色'
+					})
+					return
+				}
+				const data={
+					companyUserIds:this.ids,
+					deptId:this.valueidbu,
+					postIds:this.valueid,
+					roleIds:this.roleid
+				}
+				modifysaleNews(data).then(res=>{
+					console.log('设置信息',res)
+					if(res.code==200){
+						// uni.showToast({
+						// 	icon: 'none',
+						// 	title: '成功'
+						// })
+						this.xuanid=[]
+						setTimeout(()=>{
+							this.subsalesaudits()
+						},100)
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+						});
+					}
+				})
+			},
+			getallList(){
+				this.valueidbu=[]
+				this.valueid=[]
+				this.valueb=''
+				this.valuea=''
+				this.ids=''
+			},
+			postconfirm(){
+				this.xuanid=this.postlist.filter(item => item.checked).map(v => v.postId)
+				this.valueid = this.postlist.filter(item => item.checked).map(v => v.postId).join(",")
+				this.valuea = this.postlist.filter(item => item.checked).map(v => v.postName).join(',')
+				this.showgang=!this.showgang
+			},
+			choosechangeTag(i) {
+				console.log(this.postlist[i].checked )
+				this.postlist[i].checked = !this.postlist[i].checked
+			},
+			getdepartment(){
+				querydepartment().then(res=>{
+					if(res.code==200){
+						this.columnb=res.data
+						// console.log('部门',res)
+					}
+				})
+			},
+			getpostlist(){
+				querypost().then(res=>{
+					if(res.code==200){
+						this.postlist = res.data.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						console.log('岗位',res)
+					}
+				})
+			},
+			getrolelist(){
+				queryrole().then(res=>{
+					if(res.code==200){
+						this.rolelist = res.data.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						// console.log('岗位',res)
+					}
+				})
+			},
+			confirma(e){
+				this.showgang = !this.showgang
+				this.valuea=e.value[0]
+				console.log(e)
+			},
+			confirmb(e){
+				this.valueb=e[0].label
+				this.valueidbu=e[0].id
+				console.log(e[0])
+			},
 			getidshen(id){
 				console.log(id)
+				this.getallList()
 				this.ids=id
-				this.subsalesaudits()
+				this.seluserids[0]=id
+				this.showcommpany=!this.showcommpany
 			},
 			batchApprove(){
 				 if (this.selectedUsers.length === 0) {
@@ -138,19 +346,31 @@
 				}
 				
 				this.ids=this.selectedUsers.join(',')
-				this.subsalesaudits()
+				// this.ids=this.selectedUsers
+				this.showcommpany=!this.showcommpany
+				// this.subsalesaudits()
+				// this.confirmbchange()
 			},
 			subsalesaudits(){
 				const data={
-					 userIds:this.ids
+					 userIds:this.seluserids
 				}
-				subsalesaudit(this.ids).then(res=>{
-					console.log(res)
+				subsalesaudit(this.seluserids).then(res=>{
+					console.log("subsalesaudits=====",res)
 					if(res.code==200){
 						uni.showToast({
 							title: "用户通过审核,成为销售!",
 							icon: 'none',
 						});
+						
+						this.valueidbu=[]
+						this.valueid=[]
+						this.valueb=[]
+						this.valuea=''
+						this.valuej=''
+						this.roleid=[]
+						this.ids=''
+						this.showcommpany=!this.showcommpany
 						this.getUser()
 					}else{
 						uni.showToast({
@@ -220,6 +440,17 @@
 					res => {
 						if(res.code==200){
 							 that.list=res.users;
+							this.list=this.list.map(group=>{
+								group.list = group.list.map(user => {
+								   return {
+									 ...user,
+									 checked: this.isSelectAll,
+									 postname:user.post.map(item=>item.postName).join(","),
+									 rolesname:user.roles.map(item=>item.roleName).join(",")
+								   };
+								})
+								return group;
+							})
 						}
 					},
 					rej => {}
@@ -285,6 +516,25 @@
 	}
 </script>
 <style  lang="scss">
+	.quxiao{
+		width: 40%;
+		height: 70rpx;
+		line-height: 70rpx;
+		text-align: center;
+		background-color: #F8F8FC;
+		border: 2rpx solid #cacaca;
+		color: #999;
+		border-radius: 50rpx;
+	}
+	.queren{
+		width: 40%;
+		height: 70rpx;
+		line-height: 70rpx;
+		text-align: center;
+		background-color: #1773ff;
+		color: #fff;
+		border-radius: 50rpx;
+	}
 	::v-deep {
 		.foot-select {
 			 position: fixed;

+ 2 - 13
pages_course/reward.vue

@@ -31,27 +31,16 @@
 			},
 			handleTest() {
 				const that = this
-				console.log(that.mchId)
-				console.log('wxb9b453d37c5fad45',wx.getAccountInfoSync().miniProgram.appId)
-				console.log(that.packageInfo)
+				// console.log(that.mchId)
+				// console.log(that.packageInfo)
 				if (wx.canIUse('requestMerchantTransfer')) {
 				  wx.requestMerchantTransfer({
 				    mchId:that.mchId,
 				    appId:wx.getAccountInfoSync().miniProgram.appId,
 				    package:that.packageInfo,
 				    success: (res) => {
-				      // res.err_msg将在页面展示成功后返回应用时返回ok,并不代表付款成功
-				      console.log('success:', res);
-					  console.log(that.mchId)
-					  console.log('wxb9b453d37c5fad45',wx.getAccountInfoSync().miniProgram.appId)
-					  console.log(that.packageInfo)
 				    },
 				    fail: (res) => {
-				      console.log('fail:', res);
-					  console.log('11111-----')
-					  console.log(that.mchId)
-					  console.log('wxb9b453d37c5fad45',wx.getAccountInfoSync().miniProgram.appId)
-					  console.log(that.packageInfo)
 				    },
 				  });
 				} else {

File diff suppressed because it is too large
+ 460 - 194
pages_course/video.vue


File diff suppressed because it is too large
+ 548 - 144
pages_course/videovip.vue


+ 9 - 8
project.config.json

@@ -1,11 +1,5 @@
 {
-  "appid": "wxa5b19147cb4d515e",
   "compileType": "miniprogram",
-  "libVersion": "3.7.3",
-  "packOptions": {
-    "ignore": [],
-    "include": []
-  },
   "setting": {
     "coverView": true,
     "es6": true,
@@ -18,12 +12,19 @@
       "ignore": [],
       "disablePlugins": [],
       "outputPath": ""
-    }
+    },
+    "ignoreUploadUnusedFiles": true
   },
   "condition": {},
   "editorSetting": {
     "tabIndent": "insertSpaces",
     "tabSize": 2
   },
-  "simulatorPluginLibVersion": {}
+  "simulatorPluginLibVersion": {},
+  "libVersion": "3.8.9",
+  "packOptions": {
+    "ignore": [],
+    "include": []
+  },
+  "appid": "wxa5b19147cb4d515e"
 }

+ 42 - 6
router/router.js

@@ -5,12 +5,48 @@ import Vuex from 'vuex';
 Vue.use(Vuex);
 
 export default new Vuex.Store({
-  state: {
-    // imgpath: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com',//福本源图片请求地址
-	Requestpath: 'https://userapp.fbylive.com',//福本源接口请求地址
-	logoname:'本源一身轻',
-	imgpath: 'https://zkzh-2024.oss-cn-beijing.aliyuncs.com',//中康图片请求地址
-	// Requestpath: 'https://userapp.zkhj6.com'//中康接口请求地址
+  state: {
+	// imgpath: 'https://hylj-1323137866.cos.ap-chongqing.myqcloud.com',//云联融智图片请求地址
+	// logoname:'云联融智优选',
+	// appid:'wxd70f99287830cb51',
+	imgpath: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com',//福本源图片请求地址
+	logoname:'乐氏本源',
+	appid:'wxb9b453d37c5fad45',//乐氏本源
+	// appid:'wx5f7034bb3fb15c15',//云问堂
+	// appid:'wx406e565c370f2fe1',//草木问方
+	// appid:'wx98d6c447b5c7e1ed',//太素本源
+	// imgpath: 'https://sft-1361917636.cos.ap-chongqing.myqcloud.com',//四福堂图片请求地址
+	// logoname:'四福堂',
+	// imgpath: 'https://zkzh-2025.oss-cn-beijing.aliyuncs.com',//中康图片请求地址
+	// logoname:'中康未来智慧',
+	// appid:'wxedde588767b358b1',
+	// appid:'wx77346c2440b70ecd',//中康未来智慧R
+	// appid:'wxdbaca81abc336277',//虹恺百货店
+	// appid:'wxdf9b1a4d3c5b6572'//悦腾润智慧铺R
+	// imgpath: 'https://fc-1361520560.cos.ap-beijing.myqcloud.com',//蜂巢快药图片请求地址
+	// logoname:'蜂巢快药',
+	// appid:'wx903d9aee9cffb320',////蜂巢快药
+	// imgpath: 'https://fc-1361520560.cos.ap-beijing.myqcloud.com/haoyisheng',//好宜生图片请求地址
+	// logoname:'蜂巢快药',
+	// appid:'wxa843c1c3e52efbf8',//好宜生佳园
+	// imgpath: 'https://userapp.whhm.ylrzcloud.com',//惠名大药房图片请求地址
+	// logoname:'惠名大药房',
+	// appid:'wxec49f9d783abf233'//h5,
+	// imgpath: 'https://liangmiao.obs.cn-southwest-2.myhuaweicloud.com',//良苗图片请求地址
+	// logoname:'良苗',
+	// appid:'wx80dc06697b583cd9',
+	// imgpath: 'https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com',//倍力优图片请求地址
+	// logoname:'倍力优',
+	// appid:'wx301ab2fad04c658a',
+	// imgpath: 'https://bnkc-1323137866.cos.ap-chongqing.myqcloud.com',//百年康城图片请求地址
+	// logoname:'百年康成',
+	// appid:'wx65e5d520e35bf3f5'//,
+	// imgpath: 'https://drk-1363981074.cos.ap-chongqing.myqcloud.com',//德瑞康图片请求地址
+	// logoname:'青岛市德瑞康',
+	// appid:'wx76cb55db092a41ae',
+	// imgpath: 'https://bjczwh.oss-cn-beijing.aliyuncs.com',//北京存在文化
+	// logoname:'食养生活',
+	// appid:'wx94951f52d3ac5e25',
   },
   mutations: {
     setCount(state, value) {

+ 1 - 1
utils/common.js

@@ -172,7 +172,7 @@ export function generateRandomString(length) {
 
 export function isLoginCourse() {
 	return new Promise((resolve, reject) => {
-		let token = uni.getStorageSync('AppToken_MYfby');
+		let token = uni.getStorageSync('TOKEN_WEXIN');
 		if (token==null||token==undefined||token=="" ) {
 			resolve(false);
 		} else {

二進制
xiaohongqun_uni_app.zip


Some files were not shown because too many files changed in this diff