liujiaxin il y a 3 mois
Parent
commit
6f08fc3773
100 fichiers modifiés avec 13796 ajouts et 1358 suppressions
  1. 311 2
      App.vue
  2. 64 0
      api/courseLook.js
  3. 3 0
      api/index.js
  4. 252 0
      api/manageCompany.js
  5. 163 0
      assets/css/common.scss
  6. 31 0
      assets/css/theme.scss
  7. 25 2
      common/request.js
  8. 1 1
      components/Menu.vue
  9. 1 1
      components/chengpeng-audio/redme.md
  10. 1 1
      components/im/tui-chat/message-elements/audio-message/index.vue
  11. 1 1
      components/im/tui-chat/message-elements/custom-message/index.vue
  12. 1 1
      components/im/tui-chat/message-elements/file-message/index.vue
  13. 2 2
      components/im/tui-chat/message-elements/video-message/index.vue
  14. 1 1
      components/im/tui-chat/message-private/service-evaluation/index.vue
  15. 38 5
      components/likeProduct.vue
  16. 2 2
      components/px-popup-bottom/px-popup-bottom.vue
  17. 148 0
      components/tabbar/tabbar.vue
  18. 214 0
      components/tuiProduct.vue
  19. 7 1
      main.js
  20. 1 1
      manifest.json
  21. 19 9
      package-lock.json
  22. 17 0
      package.json
  23. 441 571
      pages.json
  24. 1 1
      pages/common/launch.vue
  25. 11 11
      pages/healthy/detail.vue
  26. 239 0
      pages/healthy/idea.vue
  27. 5 5
      pages/healthy/index.vue
  28. 2 2
      pages/healthy/readUsers.vue
  29. 40 5
      pages/home/components/HotProduct.vue
  30. 6 6
      pages/home/doctorCase.vue
  31. 424 295
      pages/home/index.vue
  32. 1 1
      pages/home/new/articleDetails.vue
  33. 2 2
      pages/home/new/articleList.vue
  34. 2 2
      pages/home/new/chineseMedicineList.vue
  35. 2 2
      pages/home/new/diseaseList.vue
  36. 2 2
      pages/home/new/famousPrescribeList.vue
  37. 1 1
      pages/home/new/medicatedFoodList.vue
  38. 2 2
      pages/home/new/questionsList.vue
  39. 4 4
      pages/home/new/test.vue
  40. 2 2
      pages/home/new/vesselList.vue
  41. 12 12
      pages/home/productList.vue
  42. 112 112
      pages/home/productSearch.vue
  43. 4 4
      pages/shopping/cart.vue
  44. 8 8
      pages/shopping/confirmOrder.vue
  45. 4 2
      pages/shopping/index.vue
  46. 1 1
      pages/shopping/payOrder.vue
  47. 33 31
      pages/shopping/paymentOrder.vue
  48. 13 13
      pages/shopping/prescribe.vue
  49. 51 22
      pages/shopping/productDetails.vue
  50. 1 1
      pages/shopping/success.vue
  51. 74 66
      pages/user/index.vue
  52. 0 9
      pages/user/test.vue
  53. 2 3
      pages_company/coupon.vue
  54. 1 1
      pages_company/couponDetails.vue
  55. 7 7
      pages_company/index.vue
  56. 3 3
      pages_company/order/cart.vue
  57. 19 6
      pages_company/order/confirmCompanyOrder.vue
  58. 2 2
      pages_company/order/confirmOrder.vue
  59. 2 3
      pages_company/order/coupon.vue
  60. 11 11
      pages_company/order/productDetails.vue
  61. 15 13
      pages_company/order/productList.vue
  62. 3 3
      pages_company/order/productShowDetails.vue
  63. 3 3
      pages_company/storeOrder.vue
  64. 11 11
      pages_company/storeOrderDetail.vue
  65. 3 3
      pages_company/storeProductPackage.vue
  66. 10 8
      pages_company/storeProductPackageDetails.vue
  67. 205 0
      pages_course/becomeSale.vue
  68. 810 0
      pages_course/becomeVIP.vue
  69. 161 0
      pages_course/reward.vue
  70. 2446 0
      pages_course/videovip.vue
  71. 177 0
      pages_course/webview.vue
  72. 11 11
      pages_doctor/doctorDetail.vue
  73. 4 4
      pages_doctor/doctorIm.vue
  74. 4 4
      pages_doctor/doctorList.vue
  75. 1 1
      pages_doctor/doctorQr.vue
  76. 11 11
      pages_doctor/index.vue
  77. 1 1
      pages_doctor/paymentOrder.vue
  78. 4 4
      pages_doctor/submitOrder.vue
  79. 1 1
      pages_index/index/articleDetails.vue
  80. 2 2
      pages_index/index/articleList.vue
  81. 2 2
      pages_index/index/chineseMedicineList.vue
  82. 2 2
      pages_index/index/diseaseList.vue
  83. 2 2
      pages_index/index/doctorArticleList.vue
  84. 2 2
      pages_index/index/famousPrescribeList.vue
  85. 1 1
      pages_index/index/medicatedFoodList.vue
  86. 2 2
      pages_index/index/questionsList.vue
  87. 4 4
      pages_index/index/test.vue
  88. 2 2
      pages_index/index/vesselList.vue
  89. 299 0
      pages_manage/components/UrgeIndex.vue
  90. 103 0
      pages_manage/components/chart.vue
  91. 518 0
      pages_manage/components/courseIndex.vue
  92. 749 0
      pages_manage/components/courseItem.vue
  93. 748 0
      pages_manage/components/dataIndex.vue
  94. 335 0
      pages_manage/components/dropdownPanel.vue
  95. 719 0
      pages_manage/components/manageIndex.vue
  96. 1936 0
      pages_manage/components/memberIndex.vue
  97. 438 0
      pages_manage/components/vipUserItem.vue
  98. 657 0
      pages_manage/dataDetails.vue
  99. 261 0
      pages_manage/index.vue
  100. 283 0
      pages_manage/learn.vue

+ 311 - 2
App.vue

@@ -3,7 +3,11 @@
 	// import TIM from 'tim-wx-sdk';
 	// import COS from 'cos-wx-sdk-v5';
 	export default {
+		onLoad: function (){
+			
+		},
 		onLaunch: function() {
+			// uni.hideTabBar({ animation: true })
 			// uni.$TUIKit = TIM.create({
 			// 	SDKAppID: 1400693126
 			// });
@@ -109,10 +113,13 @@
 </script>
  
 <style lang="scss">
+	
     /*每个页面公共css */
 	@import "uview-ui/index.scss";
 	@import './assets/iconfont/iconfont.css';
-	@import './assets/css/common.less';
+	@import '@/assets/css/common.scss';
+	// @import './assets/css/common.less';
+	@import './assets/css/theme.scss';
 	page{
 		background-color: #f6f6f6;
 	}
@@ -121,12 +128,314 @@
 	    height: 0 !important;
 	    
 	}
+	view{
+		box-sizing: border-box;
+	}
+	.ellipsis{
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+	.single-line-ellipsis {
+		width: 480rpx; /* 设置固定宽度 */
+		white-space: nowrap; /* 文本不换行 */
+		overflow: hidden; /* 隐藏超出部分 */
+		text-overflow: ellipsis; /* 超出部分用省略号表示 */
+	}
+	.single-ellipsis {
+		width: 260rpx; /* 设置固定宽度 */
+		white-space: nowrap; /* 文本不换行 */
+		overflow: hidden; /* 隐藏超出部分 */
+		text-overflow: ellipsis; /* 超出部分用省略号表示 */
+	}
+	.ellipsis2{
+		overflow:hidden; 
+		text-overflow:ellipsis;
+		display:-webkit-box; 
+		-webkit-box-orient:vertical;
+		-webkit-line-clamp:2; 
+	}
+	 
+	
+	.no-data-box{
+		height:100%;
+		width: 100%;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		flex-direction: column;
+		image{
+			width: 264upx;
+			height: 212upx;
+		}
+		.empty-title{
+			margin-top: 20rpx;
+			font-size: 28rpx;
+			color: gray;
+			 
+		}
+	}
+		
+	
+	
+		.w-calc-30 {
+			padding: 0 30rpx;
+			width: calc(100% - 60rpx);
+		}
+	
+		.hb {
+			height: 100%;
+			box-sizing: border-box;
+		}
+	
+		.hidden {
+			overflow: hidden;
+		}
+	
+		.base-color {
+			color: $--base-color;
+		}
+	
+		.base-color-2 {
+			color: $--base-color2;
+		}
+	
+		.base-color-3 {
+			color: $--base-color3;
+		}
+		.base-color-9 {
+			color: $--base-color-9;
+		}
+		.base-color-8 {
+			color: $--base-color-f8;
+		}
+		.base-color-6 {
+			color: $--base-color-6;
+		}
+		.base-color-gray {
+			color: $--base-color-gray;
+		}
+		.base-color-red{
+				color:#ee0a25;
+		}
+		.base-color-dark {
+			color: $--base-color-dark;
+		}
+	
+		.base-color-dark2 {
+			color: $--base-color-dark2;
+		}
+	
+		.base-price {
+			color: $--base-color-price;
+		}
+	
+		.base-success {
+			color: $--base-color-success;
+		}
+	
+		.base-bg {
+			background: $--base-bg;
+		}
+	
+		.base-bg-2 {
+			background: $--base-bg2;
+		}
+		.base-bg-red{
+			background: #ee0a25;
+		}
+		.base-bg-f{
+			background-color:#fff;
+		}
+		.base-bg-f8{
+			background-color: $--base-color-f8;
+		}
+		.base-bg-f5{
+			background-color: $--base-color-f5;
+		}
+		.base-bg-9{
+			background-color: $--base-color-9;
+		}
+		.base-bg-blue{
+			background:$--base-bg-blue;
+		}
+		.base-bg-sure{
+			background:$--base-sure-bg;
+		}
+		.base-bg-orange{
+			background:$--base-bg-orange;
+		}
+		.base-bg-false{
+			background:$--base-false-bg;
+		}
+		.bor-blue{
+			border: 2rpx solid $--base-bor-blue;
+		}
+		.bor-red{
+			border: 2rpx solid $--base-bor-red;
+		}
+		.colorf {
+			color: #fff;
+		}
+	
+		.bgf {
+			background: #fff;
+		}
+	
+		.fixed {
+			position: fixed;
+		}
+	
+		.absolute {
+			position: absolute;
+		}
+	
+		.relative {
+			position: relative;
+		}
+	
+		.w100 {
+			width: 100%;
+		}
+	
+		.h100 {
+			height: 100%;
+		}
+	
+		.card {
+			background: #fff;
+			border-radius: 15rpx;
+		}
+	
+		.cover-height {
+			height: 100%;
+			display: flex;
+			flex-direction: column;
+			box-sizing: border-box;
+		}
+	
+		.row {
+			display: flex;
+			flex-direction: row;
+		}
+	
+		.column {
+			display: flex;
+			flex-direction: column;
+		}
+	
+		.justify-start {
+			display: flex;
+			justify-content: flex-start;
+		}
+	
+		.justify-center {
+			display: flex;
+			justify-content: center;
+		}
+	
+		.justify-end {
+			display: flex;
+			justify-content: flex-end;
+		}
+	
+		.justify-around {
+			display: flex;
+			justify-content: space-around;
+		}
+		.justify-evenly {
+			display: flex;
+			justify-content: space-evenly;
+		}
+	
+		.justify-between {
+			display: flex;
+			justify-content: space-between;
+		}
+	
+		.align-start {
+			display: flex;
+			align-items: flex-start;
+		}
+	
+		.align-center {
+			display: flex;
+			align-items: center;
+		}
+	
+		.align-end {
+			display: flex;
+			align-items: flex-end;
+		}
+	
+		.center {
+			display: flex;
+			justify-content: center;
+			align-items: center;
+		}
+	
+		.centerV {
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			flex-direction: column;
+		}
+	
+		.wrap {
+			flex-wrap: wrap;
+		}
+	
+		.flex-1 {
+			flex: 1;
+		}
+	
+		.ellipsis {
+			overflow: hidden;
+			text-overflow: ellipsis;
+			display: -webkit-box;
+			-webkit-box-orient: vertical;
+			box-sizing: border-box;
+			width: 100%;
+			-webkit-line-clamp: 1;
+		}
+	
+		.lines-2 {
+			-webkit-line-clamp: 2 !important;
+		}
+	
+		.lines-3 {
+			-webkit-line-clamp: 3 !important;
+		}
+	
+		.bold {
+			font-weight: bold;
+		}
+	
+		.line-through {
+			text-decoration: line-through;
+		}
+	
+		.nowrap {
+			white-space: nowrap;
+		}
+	
+		.scrollx {
+			overflow-x: scroll;
+		}
+	
+		.scrolly {
+			overflow-y: scroll;
+		}
+	
+		.cvauto {
+			content-visibility: auto;
+		}
 </style>
 <style>
 	/*每个页面公共css */
 	/* 解决小程序和app滚动条的问题 */
 	/* #ifdef MP-WEIXIN || APP-PLUS */
-		/deep/ ::-webkit-scrollbar {
+		:deep(::-webkit-scrollbar ){
 		    display: none !important;
 		    width: 0 !important;
 		    height: 0 !important;

+ 64 - 0
api/courseLook.js

@@ -0,0 +1,64 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ //微信小程序登录
+ export function loginByMiniApp(data) {
+ 	 return request('/course_uniapp/app/wx/miniapp/loginByMa',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');
+}
+// h5课程简介
+export function getH5CourseByVideoId(data) {
+	return request('/course_uniapp/app/course/wx/h5/getH5CourseByVideoId', data, 'GET','','https://h5api.his.cdwjyyh.com');
+}
+// h5课程详情加问答
+export function getH5CourseVideoDetails(data) {
+	return request('/course_uniapp/app/course/wx/h5/videoDetails', data, 'GET','','https://h5api.his.cdwjyyh.com');
+}
+// 答题发红包
+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');
+}
+// 记录看课时间(新)
+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');
+}
+// 关注客服 是否添加客服
+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');
+}
+// 流量(缓冲百分比)
+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');
+}
+// 每十分钟获得积分
+export function getIntegralByH5Video(data) {
+	return request('/app/course/getIntegralByH5Video', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+}
+
+// 发送奖励
+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');
+}
+// 获取真实链接
+export function getRealLink(data) {
+	return request('/app/course/getRealLink', data, 'GET','','https://h5api.his.cdwjyyh.com');
+}
+ //检查是否有头像以及昵称
+ 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');
+ }
+ // 成为会员
+ export function registerCourses(data) {
+ 	 return request('/course_uniapp/companyapp/app/fs/user/beMember',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');
+ }

+ 3 - 0
api/index.js

@@ -59,6 +59,9 @@ export function getCartCount() {
  export function getChineseMedicineById(data) {
  	 return request('/app/index/getChineseMedicineById',data,'GET');
  }
+ export function getpro(data) {
+ 	 return request('/app/common/getConfigByKey',data,'GET');
+ } 
  
  
 

+ 252 - 0
api/manageCompany.js

@@ -0,0 +1,252 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+//看课管理销售登录
+export function login(data) {
+	return request('/companyapp/app/user/login', data, 'POST', 'application/json;charset=UTF-8');
+}
+// 统计经销商会员总数和群管总数
+export function getCompanyUserAndUserCount(data) {
+	return request('/companyapp/app/fs/user/firstPage/summaryCount', data, 'GET', 'application/json;charset=UTF-8');
+}
+// 课程统计
+export function getCourseCount(data) {
+	return request('/companyapp/app/fs/user/firstPage/statistics', data, 'GET', 'application/json;charset=UTF-8');
+}
+//查询看课转化率(漏斗图)
+export function getcourseRate(data) {
+	const url = '/companyapp/app/fs/user/firstPage/graphic'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//根据经销商 获取群管排名
+export function getGroupRanklist(data) {
+	const url = '/companyapp/app/fs/user/firstPage/userRanking'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//根据经销商 获取课程排名
+export function getCourseRanklist(data) {
+	const url = '/companyapp/app/fs/user/firstPage/courseRanking'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+// 获取课程列表
+export function getFsCourseList(data) {
+	return request('/companyapp/app/fs/course/courseList', data, 'GET', 'application/json;charset=UTF-8');
+}
+// 根据训练营查询节目
+export function getCourseVdieoList(data) {
+	const url = '/companyapp/app/fs/course/pageList?periodId=' + data.periodId + '&pageNum=' + data.pageNum +
+		'&pageSize=' + data.pageSize + '&keyword=' + data.keyword
+	return request(url, null, 'GET', 'application/json;charset=UTF-8');
+}
+//获取今日课程
+export function getTodayCourse(data) {
+	return request('/companyapp/app/fs/course/todayCourseList', data, 'GET', 'application/json;charset=UTF-8');
+}
+//根据经销商或群管查询会员列表
+export function getfsuserList(data) {
+	const url = '/companyapp/app/fs/user/pageList'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8')
+}
+//查询会员标签列表
+export function getcompanyTaglist(data) {
+	return request('/companyapp/app/fs/user/tagList', data, 'GET');
+}
+//添加黑名单
+export function Addblacklist(data) {
+	const url = '/companyapp/app/fs/user/disabled'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8')
+}
+//修改公司会员打标签
+export function changeLable(data) {
+	const url = '/companyapp/app/fs/user/changeUserTags'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8')
+}
+//根据经销商或群管查询会员总数
+export function getvipNum(data) {
+	const url = '/companyapp/app/fs/user/totalNumber'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//根据经销商 查询所属群管列表
+export function getgroupList(data) {
+	const url = '/companyapp/app/companyUser/companyUserListByCompanyId'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//生成分享海报,新建会员
+export function becomeVipuserImg(data) {
+	return request('/companyapp/app/fs/user/userImage', data, 'POST', 'application/json;charset=UTF-8');
+}
+//获取公司所有销售
+export function getusersales(data) {
+	return request('/companyapp/app/fs/user/allCompanyUser', data, 'GET', 'application/json;charset=UTF-8');
+}
+export function removebalcklist(data) {
+	const url = '/companyapp/app/fs/user/enabled'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8')
+}
+//获取公司所有标签
+export function getallTags(data) {
+	return request('/companyapp/app/companyTag/list', data, 'GET', 'application/json;charset=UTF-8');
+}
+//更改用户姓名,备注
+export function getchangesUserInfo(data) {
+	return request('/companyapp/app/fs/user/changeUserInfo', data, 'POST', 'application/json;charset=UTF-8');
+}
+//催课 获取会员注册
+export function getWorkTask(data) {
+	return request('/companyapp/app/qwWorkTask/getUserList', data, 'GET', 'application/json;charset=UTF-8');
+}
+//获取销售信息
+export function getCompanyUser(data) {
+	return request('/companyapp/app/user/getCompanyUser', data, 'GET');
+}
+//获取课程小节下拉列表
+export function getvideolist(data) {
+	return request('/companyapp/app/fs/course/videoList', data, 'GET', 'application/json;charset=UTF-8');
+}
+//根据经销商 运营:查询课程数,群管数,参与会员
+export function getshopCoursenum(data) {
+	const url = '/companyapp/app/fs/user/statistics/details'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//查询详情看课转化率(漏斗图)
+export function getcourseRates(data) {
+	const url = '/companyapp/app/fs/user/graphic/details'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//获取课程视频详情
+export function getcourseDetail(data) {
+	return request('/companyapp/app/fs/course/videoDetails', data, 'GET', 'application/json;charset=UTF-8');
+}
+// 根据观看记录查询用户(课程分析)
+export function getUserLogListByCourseId(data) {
+	const url = '/companyapp/app/fs/course/participationRecord'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8');
+}
+// 修改用户
+export function updateFsUser(data) {
+	const url = '/fsUser/updateFsUser'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8');
+}
+
+//修改用户名称
+export function changeUserName(data) {
+	const url = '/fsUser/updateFsUser'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8')
+}
+//查询答题数据(会员详情)
+export function getanswerlist(data) {
+	const url = '/companyapp/app/fs/user/details'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//通过销售审核
+export function subsalesaudit(data) {
+	return request('/companyapp/app/user/audit?userIds=' + data, data, 'POST', 'application/json;charset=UTF-8');
+}
+//获取审核销售
+export function getAllUsers(data) {
+	return request('/companyapp/app/user/getAllUsers', data, 'GET');
+}
+//查询销售部门列表
+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 modifysaleNews(data) {
+	return request('/companyapp/app/companyUser/changeUserDeptAndPost', data, 'POST', 'application/json;charset=UTF-8');
+}
+//查询销售角色列表
+export function queryrole(data) {
+	return request('/companyapp/app/companyUser/roleList', data, 'GET', 'application/json;charset=UTF-8');
+}
+//根据经销商 新增公司标签
+export function addCompanyLabel(data) {
+	const url = '/companyapp/app/companyTag/add'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8')
+}
+//根据经销商 删除公司标签
+export function deleteCompanyLabel(data) {
+	const url = '/companyapp/app/companyTag/delete?tagIds=' + data
+	return request(url, 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 getusergroup(data) {
+	const url = '/companyapp/app/companyUser/getCompanyUserList'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//根据经销商 获取账户可用余额
+export function getuserbalance(data) {
+	const url = '/companyUser/getCompanyBalance'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8')
+}
+//根据经销商 修改群管信息
+export function updategroupinfo(data) {
+	const url = '/companyapp/app/companyUser/updateUserInfo'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8')
+}
+//获取更换会员归属审核列表
+export function getchangeslist(data) {
+	return request('/companyapp/app/companyUser/applyList', data, 'GET', 'application/json;charset=UTF-8');
+}
+//解除销售黑名单
+export function changesalesState(data) {
+	return request('/companyapp/app/user/changeUserState?userIds=' + data, data, 'POST',
+		'application/json;charset=UTF-8');
+}
+//销售详情
+export function getUserInfoByUserId(data) {
+	return request('/companyapp/app/user/getUserInfoByUserId', data, 'GET');
+}
+export function getUserInfo(data) {
+	return request('/companyapp/app/user/getUserInfo', data, 'GET');
+}
+//根据经销商  修改全部会员群管
+export function changevipUserAll(data) {
+	const url = '/companyapp/app/companyUser/changeUserParentApply'
+	return request(url, data, 'POST', 'application/json;charset=UTF-8')
+}
+//根据经销商  查询标签下会员
+export function gettagsUser(data) {
+	return request('/companyapp/app/companyTag/tagSubUsers', data, 'POST', 'application/json;charset=UTF-8');
+}
+//管理 获取会员人数等
+export function getmanagepopnum(data) {
+	return request('/companyapp/app/fs/user/companyUser/summaryCount', data, 'GET', 'application/json;charset=UTF-8');
+}
+//管理 获取管理课程统计
+export function getmanagecourse(data) {
+	return request('/companyapp/app/fs/user/companyUser/details', data, 'GET', 'application/json;charset=UTF-8');
+}
+//根据经销商 查询群管的课程
+export function getcourseList(data) {
+	const url = '/companyapp/app/fs/user/courseAnalysis'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//根据经销商 获取群管详情
+export function getGroupDetail(data) {
+	const url = '/companyapp/app/companyUser/getCompanyUserInfo?companyUserId'
+	return request(url, data, 'GET', 'application/json;charset=UTF-8')
+}
+//注册销售账户
+export function loginsales(data) {
+	return request('/companyapp/app/companyUser/resisterCompanyUser', data, 'POST', 'application/json;charset=UTF-8');
+}
+//会员页面获取项目列表
+export function getprojectlist(data) {
+	return request('/companyapp/app/common/getDictByKey', data, 'GET', '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 copyuniLink(data) {
+	return request('/companyapp/app/fs/course/getGotoWxAppLink', data, 'GET', 'application/json;charset=UTF-8');
+}

+ 163 - 0
assets/css/common.scss

@@ -0,0 +1,163 @@
+// 字体
+@for $i from 20 through 100{
+    .fs#{$i} {
+			font-size: #{$i}rpx;
+    }
+}
+// 颜色
+@for $i from 0 through 9{
+    .color#{$i} {
+			color: #{$i}#{$i}#{$i};
+    }
+}
+// padding
+@for $i from 1 through 100{
+    .p#{$i} {
+			padding: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .ptb#{$i} {
+			padding-top: #{$i}rpx ;
+			padding-bottom: #{$i}rpx ;
+    }
+}
+@for $i from 1 through 100{
+    .plr#{$i} {
+			padding-left: #{$i}rpx;
+			padding-right: #{$i}rpx;
+    }
+}
+@for $i from 1 through 200{
+    .pt#{$i} {
+			padding-top: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .pl#{$i} {
+			padding-left: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .pr#{$i} {
+			padding-right: #{$i}rpx;
+    }
+}
+@for $i from 1 through 200{
+    .pb#{$i} {
+			padding-bottom: #{$i}rpx;
+    }
+}
+// margin
+@for $i from 1 through 100{
+    .m#{$i} {
+			margin: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .mtb#{$i} {
+			margin-top: #{$i}rpx ;
+			margin-bottom: #{$i}rpx ;
+    }
+}
+@for $i from 1 through 100{
+    .mlr#{$i} {
+			margin-left: #{$i}rpx;
+			margin-right: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .mt#{$i} {
+			margin-top: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .ml#{$i} {
+			margin-left: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .mr#{$i} {
+			margin-right: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .mb#{$i} {
+			margin-bottom: #{$i}rpx;
+    }
+}
+// 圆角
+@for $i from 0 through 100{
+    .radius#{$i} {
+			border-radius: #{$i}rpx;
+    }
+}
+// padding 左右+width自动计算
+@for $i from 10 through 60{
+    .w-calc-#{$i} {
+			width: calc(100% - #{$i*2}rpx);
+			padding-left:  #{$i}rpx;
+			padding-right:  #{$i}rpx;
+    }
+}
+
+// gap
+@for $i from 1 through 100{
+	.gap#{$i} {
+		gap: #{$i}rpx;
+	}
+}
+
+// 高
+@for $i from 1 through 900{
+	.h#{$i} {
+		height: #{$i}rpx;
+	}
+}
+// 宽
+@for $i from 1 through 900{
+	.w#{$i} {
+		width: #{$i}rpx;
+	}
+}
+// 宽
+@for $i from 1 through 900{
+	.lh#{$i} {
+		line-height: #{$i}rpx;
+	}
+}
+
+
+// font-weight
+$steps: 100 200 300 400 500 600 700 800 bold;
+@each $i in $steps {
+	.weight-#{$i} {
+		font-weight: $i;
+	}
+}
+
+.bold {
+	font-weight: bold;
+}
+.scrollx {
+	overflow-x: scroll;
+}
+
+.scrolly {
+	overflow-y: scroll;
+}
+.base-textcol{
+	color: var(--base-color-text);
+}
+.color9{
+	color: #999;
+}
+.color6{
+	color: #666;
+}
+.bgf{
+	background-color: #fff;
+}
+.base-color{
+	color: #018C39;
+}

+ 31 - 0
assets/css/theme.scss

@@ -0,0 +1,31 @@
+/*自定义主题色 */
+$--base-color:#1773ff;
+$--base-color2:#e7f1fe;
+$--base-color3:#425034;
+$--base-color-price:#FF1212;
+$--base-color-gray:#DEDFE4;
+$--base-color-dark:#313131;
+$--base-color-red:#ef4c50;
+$--base-color-dark2:#3E3E3E;
+$--base-color-success:#a3db42;
+$--base-color-false:#f93e3e;
+$--base-color-0:#000;
+$--base-color-1:#111;
+$--base-color-3:#333;
+$--base-color-6:#666;
+$--base-color-9:#999;
+$--base-color-f8:#f8f8f8;
+$--base-color-f5:#f5f5f5;
+$--base-bg: #1773ff;
+$--base-bg2:#e7f1fe;
+$--base-bor-red:#f7a1a1;
+$--base-bor-blue:#c9e1fb;
+$--base-cont-bg:#F3F5F9;
+$--base-false-bg:#fae7e7;
+$--base-sure-bg:#e7f2fe;
+$--base-bg-f:#fff;
+$--base-bg-red:#ee0a25;
+$--base-bg-blue:#1677ff;
+$--base-bg-orange:#FF7F00;
+
+

+ 25 - 2
common/request.js

@@ -4,13 +4,36 @@ export default class Request {
 		let that = this;
 		//let path = 'http://localhost:7014';
 		// let path = 'https://test.userapp.store.cdwjyyh.com';
-		let path = 'https://userapp.zkhj6.com';
+		// let path = 'https://user.test.ylrztop.com/api';
+		let path = 'https://userapp.zkhj6.com'//中康
 		uni.setStorageSync('requestPath',path)
 		// uni.showLoading({
 		// 	title: '加载中'
 		// });
+		let token = uni.getStorageSync('AppToken');
+		if(router.indexOf("/companyapp")!=-1){
+			// router =router.replace('/companyapp','')
+			 // path = 'http://192.168.10.158:7015'//
+			 token = uni.getStorageSync('ManageToken');
+		}
+		if(router.indexOf("/course_uniapp")!=-1){
+			router =router.replace('/course_uniapp','')
+			//张玉朋
+			// let path = 'http://192.168.10.158:7014'//
+			// path = 'https://userapp.zkhj6.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.drkzyy.cn/prod-api'//青岛市德瑞康
+			// path = 'http://192.168.10.131:7014'
+			token =uni.getStorageSync('TOKEN_WEXIN')
+		}
 		return new Promise((resolve, reject) => {
-			let token = uni.getStorageSync('AppToken');
+			// token = uni.getStorageSync('AppToken');
 			var httpContentType='application/x-www-form-urlencoded';
 			if(contentType!=undefined){
 				//application/json;charset=UTF-8

+ 1 - 1
components/Menu.vue

@@ -11,7 +11,7 @@
 		>
 			<swiper-item class="menu-swiper-item" v-for="(itemList, index) in carousel" :key="index" :style="list.length <= menu ? `height:200rpx` : `height:340rpx`">
 				<view class="menu-tab-box">
-					<view class="tab-list"  v-for="item in itemList" :key="item.menuName" @tap="routerTo(item)">
+					<view class="tab-list"  v-for="item in itemList" :key="item.menuId" @tap="routerTo(item)">
 						<image class="tab-img Shop-selector-circular" :style="{ width: imgW + 'rpx', height: imgW + 'rpx' }" :src="item.icon"></image>
 						<text class="Shop-selector-rect">{{ item.menuName }}</text>
 					</view>

+ 1 - 1
components/chengpeng-audio/redme.md

@@ -9,7 +9,7 @@
 ```javascript
 //html
 <template>
-  <free-audio startPic='/static/images/icon/play.png' endPic='/static/images/icon/stop.png' :audioId='audio1' :url='path'></free-audio>
+  <free-audio startPic='https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/icon/play.png' endPic='https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/icon/stop.png' :audioId='audio1' :url='path'></free-audio>
 </template>
 
 //js

+ 1 - 1
components/im/tui-chat/message-elements/audio-message/index.vue

@@ -1,6 +1,6 @@
 <template>
 	<view :class="'audio-message ' + (isMine ? 'my-audio' : '')">
-		<image class="audio-icon" src="../../../../../static/images/audio.png"></image>
+		<image class="audio-icon" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/audio.png"></image>
 		<view class="audio " @click="handlePlayAudioMessage" :style="'width: ' + 120 + 'rpx'">{{ '" ' + message.payload.second }}</view>
 	</view>
 </template>

+ 1 - 1
components/im/tui-chat/message-elements/custom-message/index.vue

@@ -19,7 +19,7 @@
 			<view class="custom-content">
 				<view class="custom-content-title">{{ renderDom[0].title }}</view>
 				<view class="custom-content-score">
-					<image v-for="(item, index) in renderDom[0].score" :key="index" class="score-star" src="/static/images/star.png"></image>
+					<image v-for="(item, index) in renderDom[0].score" :key="index" class="score-star" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/star.png"></image>
 				</view>
 				<view class="custom-content-description">{{ renderDom[0].description }}</view>
 			</view>

+ 1 - 1
components/im/tui-chat/message-elements/file-message/index.vue

@@ -3,7 +3,7 @@
 		<view class="TUI-fileMessage">
 			<view class="fileMessage">
 				<view class="fileMessage-box">
-					<image class="file-icon" src="../../../../../static/images/file.png"></image>
+					<image class="file-icon" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/file.png"></image>
 					<label @tap="download" class="file-title">{{ filePayload.fileName }}</label>
 				</view>
 			</view>

+ 2 - 2
components/im/tui-chat/message-elements/video-message/index.vue

@@ -1,11 +1,11 @@
 <template>
 	<view :class="'video-box ' + (isMine ? 'my-video' : '')" @click="playerHander">
-		<image class="video-icon" src="../../../../../static/images/video-play.png"></image>
+		<image class="video-icon" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/video-play.png"></image>
 	</view>
 </template>
 
 <script>
-import videoIcon from '../../../../../static/images/video-play.png';
+import videoIcon from 'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/video-play.png';
 export default {
 	data() {
 		return {

+ 1 - 1
components/im/tui-chat/message-private/service-evaluation/index.vue

@@ -12,7 +12,7 @@
 						:key="index"
 						class="score-star"
 						:data-score="item"
-						:src="'/static/images/star' + (item > score ? '-grey' : '') + '.png'"
+						:src="'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/star' + (item > score ? '-grey' : '') + '.png'"
 						@tap="handleScore"
 					></image>
 				</view>

+ 38 - 5
components/likeProduct.vue

@@ -1,7 +1,7 @@
 <template>
    <view>
 		<view class="like-title" v-show="list &&list.length > 0">
-			<image src="/static/images/like.png" mode=""></image>
+			<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/like.png" mode=""></image>
 			<text class="text">猜你喜欢</text>
 		</view>
 		<view class="like-list">
@@ -14,9 +14,10 @@
 					<view class="price-box">
 						<view class="now">
 							<text class="unit">¥</text>
-							<text class="num">{{item.price.toFixed(2)}}</text>
+							<text class="num"  v-if="userinfoa.isShow==1&&isuser==false">{{item.price.toFixed(2)}}</text>
+							<text class="num" v-else>{{item.otPrice.toFixed(2)}}</text>
 						</view>
-						<view class="old">¥{{item.otPrice.toFixed(2)}}</view>
+						<view class="old" v-if="userinfoa.isShow==1&&isuser==false">¥{{item.otPrice.toFixed(2)}}</view>
 					</view>
 				</view>
 			</view>
@@ -27,6 +28,7 @@
 
 <script>
   import {getGoodsProducts} from '@/api/product'
+  import {getUserInfo} from '@/api/user'
   import Loading from "@/components/Loading";
   export default {
 	components: {Loading },
@@ -40,16 +42,47 @@
 			total:0,
 			list:[],
 			loaded: false,
-			loading: false
+			loading: false,
+			userinfoa:[],
+			isuser:false,
 		};
 	},
 	created() {
 	},
 	mounted() {
 		this.getGoodsProducts();
+		if(uni.getStorageSync('AppToken')){
+			this.getUserInfos()
+		}else{
+			this.isuser=true
+		}
+	},
+	watch: {
+		UserInfo() {
+		    return uni.getStorageSync('AppToken')
+		}
 	},
-	
 	methods: {
+		getUserInfos(){
+			getUserInfo().then(res => {
+					if(res.code==200){
+						if(res.user!=null){
+							// if(res.user.isPromoter==null||res.user.isPromoter==0){
+							// 	this.tuiModalControl=true
+							// }
+							this.userinfoa=res.user
+							console.log(this.userinfoa.isShow,78787)
+						}
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+					}
+				},
+				rej => {}
+			);
+		},
 		getGoodsProducts(){
 			console.log(1)
 			var that=this;

+ 2 - 2
components/px-popup-bottom/px-popup-bottom.vue

@@ -24,7 +24,7 @@
 </template>
 
 <script>
-	import iconClose from '@/static/images/close40.png'
+	// import iconClose from 'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/close40.png'
 	export default {
 		props: {
 			title: { //标题
@@ -82,7 +82,7 @@
 				isAnimaStart: false,
 				rpxRate: "",
 				cotRadius: 0,
-				closeIcon: iconClose
+				closeIcon:'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/close40.png'
 			}
 		},
 		watch: {

+ 148 - 0
components/tabbar/tabbar.vue

@@ -0,0 +1,148 @@
+<template>
+	<view class="tabbar align-center" >
+		<view v-for="(item, index) in tabbarList" :key="index" @click="switchTabs(item)" 
+		class="tablist" v-if="item.isshowed">
+			<view class=" tabbar-list"  >
+				<image :src="actindex==index?item.selectedIconPath:item.iconPath"></image>
+				<text class="fs24 base-textcol"
+				 :class="actindex==index?'actcolor':'morecolor'">{{item.Text}}</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getUserInfo} from '@/api/user'
+	export default {
+		name: "tabbar",
+		props: {
+			actindex: {
+				type: Number,
+				default: 0,
+			}
+		},
+		data() {
+			return {
+				tabbarList: [],
+				userinfoa:[],
+				isuser:false
+			};
+		},
+		mounted() {
+			this.themeicon()
+			this.$nextTick(()=>{
+				if(uni.getStorageSync('AppToken')){
+					this.getUserInfos()
+				}else{
+					this.isuser=true
+					this.tabbarList[2].isshowed=true
+				}
+			})
+		},
+		methods: {
+			getUserInfos(){
+				getUserInfo().then(
+					res => {
+						if(res.code==200){
+							if(res.user!=null){
+								this.userinfoa=res.user
+								if(this.userinfoa.isShow==0&&this.isuser==false){
+									this.tabbarList[3].isshowed=false
+									this.tabbarList[2].isshowed=true
+								}else if(this.userinfoa.isShow==1){
+									this.tabbarList[3].isshowed=true
+									this.tabbarList[2].isshowed=false
+								}
+							}
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			switchTabs(item) {
+				uni.switchTab({
+					url: item.url
+				})
+			},
+			themeicon() {
+				this.tabbarList = [{
+						iconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/home.png",
+						selectedIconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/home_sel.png",
+						Text: '首页',
+						url: '/pages/home/index',
+						isshowed:true
+					},
+					{
+						iconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/health.png",
+						selectedIconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/health_sel.png",
+						Text: '健康百科',
+						url: '/pages/healthy/index',
+						isshowed:true
+					},
+					{
+						iconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/archive.png",
+						selectedIconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/archive_sel.png",
+						Text: '健康档案',
+						url: '/pages/healthy/idea',
+						isshowed:false
+					},
+					{
+						iconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/shop_mall.png",
+						selectedIconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/shop_mall_sel.png",
+						Text: '健康产品',
+						url: '/pages/shopping/index',
+						isshowed:false
+					},
+					{
+						iconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/my.png",
+						selectedIconPath: "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/my_sel.png",
+						Text: '我的',
+						url: '/pages/user/index',
+						isshowed:true
+					},
+				]
+				
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.tabbar {
+		display: flex;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: #fff;
+		z-index: 1000;
+		height: 100rpx;
+		padding: 20rpx 0rpx;
+		image{
+			margin-bottom: 4rpx;
+			width: 48rpx;
+			height: 48rpx;
+		}
+	}
+
+	.tablist {
+		width: 25%;
+	}
+	.morecolor{
+		color: #626468;
+	}
+	.actcolor{
+		color: #2BC7B9;
+	}
+	.tabbar-list{
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		font-size: 24rpx
+	}
+</style>

+ 214 - 0
components/tuiProduct.vue

@@ -0,0 +1,214 @@
+<template>
+   <view>
+		<!-- <view class="like-title">
+			<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/tui.png" mode=""></image>
+			<text class="text">精选商品</text>
+		</view> -->
+		<view class="like-list">
+			<view class="item" v-for="(item,index) in list" :key="index" @click="showProduct(item)">
+				<view class="img-box">
+					<image :src="item.image" mode=""></image>
+				</view>
+				<view class="info-box">
+					<view class="title ellipsis2">{{ item.productName }}</view>
+					<view class="price-box">
+						<view class="now">
+							<text class="unit">¥</text>
+							<text class="num"  v-if="userinfoa.isShow==1&&isuser==false">{{item.price.toFixed(2)}}</text>
+							<text class="num" v-else>{{item.otPrice.toFixed(2)}}</text>
+						</view>
+						<view class="old" v-if="userinfoa.isShow==1&&isuser==false">¥{{item.otPrice.toFixed(2)}}</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<Loading :loaded="loaded" :loading="loading"></Loading>
+   </view>
+</template>
+
+<script>
+  import {getTuiProducts} from '@/api/product'
+  import {getUserInfo} from '@/api/user'
+  import Loading from "@/components/Loading";
+  export default {
+	components: {Loading },
+    name: "likeProduct",
+	data() {
+		return {
+			page:{
+				page: 1,
+				pageSize: 10
+			},
+			total:0,
+			list:[],
+			loaded: false,
+			loading: false,
+			userinfoa:[],
+			isuser:false,
+		};
+	},
+	created() {
+	},
+	mounted() {
+		this.getTuiProducts();
+		if(uni.getStorageSync('AppToken')){
+			this.getUserInfos()
+		}else{
+			this.isuser=true
+		}
+	},
+	watch: {
+		UserInfo() {
+		    return uni.getStorageSync('AppToken')
+		}
+	},
+	methods: {
+		getUserInfos(){
+			getUserInfo().then(res => {
+					if(res.code==200){
+						if(res.user!=null){
+							// if(res.user.isPromoter==null||res.user.isPromoter==0){
+							// 	this.tuiModalControl=true
+							// }
+							this.userinfoa=res.user
+							console.log(this.userinfoa.isShow,78787)
+						}
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+					}
+				},
+				rej => {}
+			);
+		},
+		getTuiProducts(){
+			console.log(1)
+			var that=this;
+			if (that.loaded == true || that.loading == true) return;
+			that.loading = true;
+			uni.showLoading({
+				title:"加载中..."
+			})
+			getTuiProducts(that.page).then(
+				res => {
+					if(res.code==200){
+						that.total=res.data.total;
+						that.list.push.apply(that.list, res.data.list);
+						that.loading = false;
+						that.loaded = that.list.length<that.total?false:true;
+						that.page.page = that.page.page + 1;
+						uni.hideLoading()
+					}
+				},
+				err => {
+					uni.hideLoading()
+					uni.showToast({
+						title: err.msg ,
+						icon: 'none',
+						duration: 2000
+					});
+				}
+			);
+		},
+		showProduct(item){
+			uni.navigateTo({
+				url: '/pages/shopping/productDetails?productId='+item.productId
+			})
+		},
+	}
+ 
+  };
+</script>
+<style lang="scss">
+	.like-title{
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		padding: 15upx 0rpx 30upx 0rpx;
+		image{
+			width: 37upx;
+			height: 37upx;
+			margin-right: 20upx;
+		}
+		.text{
+			font-size: 36upx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #111111;
+			line-height: 1;
+		}
+	}
+	.like-list{
+		display: flex;
+		flex-wrap: wrap;
+		.item{
+			margin-right: 20rpx;
+			margin-bottom: 20rpx;
+			width: 345rpx;
+			background: #FFFFFF;
+			box-shadow: 0px 0px 10rpx 4rpx rgba(199, 199, 199, 0.22);
+			border-radius: 20rpx;
+			overflow: hidden;
+			&:nth-child(2n) {
+				margin-right: 0;
+			}
+			.img-box{
+				width: 100%;
+				height: 334upx;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.info-box{
+				box-sizing: border-box;
+				height: 182upx;
+				padding: 20upx 20upx 30upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.title{
+					font-size: 26upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					line-height: 40upx;
+				}
+				.price-box{
+					display: flex;
+					align-items: flex-end;
+					.now{
+						display: flex;
+						align-items: flex-end;
+						margin-right: 20upx;
+						.unit{
+							font-size: 24upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #FF6633;
+							line-height: 1.2;
+							margin-right: 4upx;
+						}
+						.num{
+							font-size: 36upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FF6633;
+							line-height: 1;
+						}
+					}
+					.old{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						text-decoration: line-through;
+						color: #BBBBBB;
+						line-height: 1.1;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 7 - 1
main.js

@@ -2,8 +2,14 @@ import Vue from 'vue'
 import App from './App'
 
 Vue.config.productionTip = false
-
+import store from './store/index.js' // 确保路径正确
+Vue.prototype.$store = store;
 import uView from 'uview-ui'
+import {formatSeconds}from './utils/tools.js'
+Vue.prototype.$formatSeconds = formatSeconds;
+import {isLoginCourse,isLoginCourseqw} from './utils/common.js'
+Vue.prototype.$isLoginCourse = isLoginCourse
+Vue.prototype.$isLoginCourseqw = isLoginCourseqw
 Vue.use(uView)
 // uni.$u.config.unit = 'rpx'
   

+ 1 - 1
manifest.json

@@ -1,6 +1,6 @@
 {
     "name" : "zhongkmall_user_app",
-    "appid" : "__UNI__8DC85FC",
+    "appid" : "__UNI__A8490FA",
     "description" : "",
     "versionName" : "1.0.0",
     "versionCode" : "100",

+ 19 - 9
package-lock.json

@@ -1,21 +1,31 @@
 {
-  "requires": true,
+  "name": "zhongkmall_user_app",
+  "version": "1.0.0",
   "lockfileVersion": 1,
+  "requires": true,
   "dependencies": {
-    "animate.css": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npmmirror.com/animate.css/-/animate.css-3.7.2.tgz",
-      "integrity": "sha512-0bE8zYo7C0KvgOYrSVfrzkbYk6IOTVPNqkiHg2cbyF4Pq/PXzilz4BRWA3hwEUBoMp5VBgrC29lQIZyhRWdBTw=="
+    "@vue/devtools-api": {
+      "version": "6.6.4",
+      "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
     },
     "dayjs": {
       "version": "1.11.13",
-      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
       "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
     },
     "uview-ui": {
-      "version": "2.0.37",
-      "resolved": "https://registry.npmmirror.com/uview-ui/-/uview-ui-2.0.37.tgz",
-      "integrity": "sha512-iBcWNmQa01Wr+z004G6XIVPDctOrJIAx7LObQceUAPxZh6kJYjIOAMp5JE1K4VpoMV5bKYDpCd0gmX+M4nTEQQ=="
+      "version": "2.0.38",
+      "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.38.tgz",
+      "integrity": "sha512-6egHDf9lXHKpG3hEjRE0vMx4+VWwKk/ReTf5x18KrIKqdvdPRqO3+B8Unh7vYYwrIxzAWIlmhZ9RJpKI/4UqPQ=="
+    },
+    "vuex": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
+      "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
+      "requires": {
+        "@vue/devtools-api": "^6.0.0-beta.11"
+      }
     }
   }
 }

+ 17 - 0
package.json

@@ -0,0 +1,17 @@
+{
+  "name": "zhongkmall_user_app",
+  "version": "1.0.0",
+  "main": "main.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "keywords": [],
+  "author": "",
+  "license": "ISC",
+  "description": "",
+  "dependencies": {
+    "dayjs": "^1.11.13",
+    "uview-ui": "^2.0.38",
+    "vuex": "^4.1.0"
+  }
+}

Fichier diff supprimé car celui-ci est trop grand
+ 441 - 571
pages.json


+ 1 - 1
pages/common/launch.vue

@@ -5,7 +5,7 @@
 				<view class="circle"></view>
 				<image src="/static/logo.jpg"></image>
 			</view>
-			<text class="text">中康未来智慧药房</text>
+			<text class="text">中康智慧</text>
 		</view>
 	</view>
 </template>

+ 11 - 11
pages/healthy/detail.vue

@@ -18,22 +18,22 @@
 				<view class="peop-box" @click="showUsers">
 					<view class="head-box">
 						<view class="head" v-for="(subitem,j) in views" :key="j">
-							<image :src="subitem.avatar==null?'../../static/images/detault_head.jpg':subitem.avatar" mode=""></image>
+							<image :src="subitem.avatar==null?'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/detault_head.jpg':subitem.avatar" mode=""></image>
 						</view>
 					</view>
-					<image class="arrow" src="../../static/images/arrow_gray.png" mode=""></image>
+					<image class="arrow" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 				</view>
 			</view>
-			<view class="share-btn">
-				<image src="../../static/images/share.png" mode=""></image>
+			<!-- <view class="share-btn">
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/share.png" mode=""></image>
 				<text>分享</text>
 				<button  class="share" data-name="shareBtn" open-type="share">分享</button>
-			</view>
+			</view> -->
 		</view>
 		<!-- 咨询按钮 -->
 		<view class="inquiry">
 			<view class="content">
-				<image src="../../static/images/consult.png" mode=""></image>
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/consult.png" mode=""></image>
 				<text class="text">咨询</text>
 				<button class="contact-btn" open-type="contact"></button>
 			</view>
@@ -54,11 +54,11 @@
 		},
 		onLoad(option) {
 			this.articleId=option.articleId;
-			this.utils.isLogin().then(res => {
-				if(res){
-					this.updateView();
-				}
-			})
+			// this.utils.isLogin().then(res => {
+			// 	if(res){
+			// 		this.updateView();
+			// 	}
+			// })
 			uni.showShareMenu({
 				withShareTicket:true,
 				//小程序的原生菜单中显示分享按钮,才能够让发送给朋友与分享到朋友圈两个按钮可以点击

+ 239 - 0
pages/healthy/idea.vue

@@ -0,0 +1,239 @@
+<template>
+	<view class="content">
+		<view style="padding-top:100rpx;font-size: 40rpx;font-weight: bold;			margin-bottom: 20rpx;margin-left: 40rpx;">健康档案</view>
+		<view class="inner">
+			<view v-for="(item,index) in docs" :key="index" class="item" @click="showDetail(item)">
+				<view class="user-info">
+					<view class="name">{{item.userName}}</view>
+					<text class="gray-tag" v-if="item.sex==1">男</text>
+					<text class="gray-tag" v-if="item.sex==2">女</text>
+					<view class="gray-tag">{{utils.getAge(item.birthday)}}岁</view>
+					<view class="blue-tag">标签</view>
+				</view>
+			<!-- 	<view class="stage-box">
+					<text class="stage">阶段1:</text>
+					<text class="stage-text">药物治疗胰岛素降糖,洛氟沙星抗感染治疗中治疗中治疗中治疗中</text>
+				</view>
+				<view class="progress-box">
+					<progress :percent="80" activeColor="#4BC9B1" border-radius="5" stroke-width="5" />
+				</view> -->
+				<view class="period">建档时间 {{item.createTime}}</view>
+				<view class="period">备注 {{item.remark!=null?item.remark:''}}</view>
+			</view>
+			<view v-if="docs.length == 0" class="no-data-box" @click="getMyDocList()">
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png" mode="aspectFit"></image>
+				<view class="empty-title">暂无数据</view>
+			</view>
+		</view>
+		<view class="btn-box">
+			<view class="sub-btn" @click="addDoc">创建健康档案</view>
+		</view>
+		<!-- <tabbar actindex="2"></tabbar> -->
+	</view>
+</template>
+
+<script>
+	import {getMyDocList,delDoc} from '@/api/doc.js'
+	export default {
+		data() {
+			return {
+				docs:[],
+			}
+		},
+		onLoad() {
+			this.getMyDocList()
+			uni.$on('refreshDoc', () => {
+				this.getMyDocList()
+			})
+		},
+		methods: {
+			showDetail(item){
+				uni.navigateTo({
+					url: './docDetail?docId='+item.docId
+				})
+			},
+			editDoc(item){
+				uni.navigateTo({
+					url: './addDoc?type=edit&docId='+item.docId
+				})
+			},
+			delDoc(item){
+				uni.showModal({
+					title:"提示",
+					content:"确认删除吗?",
+					showCancel:true,
+					cancelText:'取消',
+					confirmText:'确定',
+					success:res=>{
+						if(res.confirm){
+							// 用户点击确定
+							var data={docId:item.docId}
+							delDoc(data).then(
+								res => {
+									if(res.code==200){
+										 uni.showToast({
+										 	icon:'success',
+										 	title: "操作成功",
+										 });
+										 this.getMyDocList()
+									}else{
+										uni.showToast({
+											icon:'none',
+											title: "请求失败",
+										});
+									}
+								},
+								rej => {}
+							);
+														
+						}else{
+							// 否则点击了取消  
+						}
+					}
+				})
+			},
+			getMyDocList(){
+				uni.showLoading({
+					title:"正在加载中"
+				})
+				getMyDocList().then(
+					res => {
+						uni.hideLoading()
+						if(res.code==200){
+							this.docs=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			addDoc() {
+				uni.navigateTo({
+					url: './addDoc?type=add'
+				})
+			}
+			 
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+		.inner{
+			flex: 1;
+			padding: 20upx 20upx 160upx;
+			.item{
+				background: #FFFFFF;
+				border-radius: 20upx;
+				margin-bottom: 20upx;
+				padding: 40upx 30upx;
+				&:last-child{
+					margin-bottom: 0;
+				}
+				.user-info{
+					display: flex;
+					align-items: center;
+					.name{
+						font-size: 36upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #111111;
+						line-height: 1;
+						margin-right: 20upx;
+					}
+					.gray-tag{
+						height: 46upx;
+						line-height: 46upx;
+						padding: 0 16upx;
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #333333;
+						background: #F7F7F7;
+						border-radius: 8upx;
+						margin-right: 10upx;
+					}
+					.blue-tag{
+						height: 46upx;
+						line-height: 46upx;
+						padding: 0 16upx;
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #4BC9B1;
+						background: #E2F6F2;
+						border-radius: 8upx;
+					}
+				}
+				.stage-box{
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					margin-top: 34upx;
+					.stage{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #111111;
+						line-height: 1;
+					}
+					.stage-text{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 1;
+					}
+				}
+				.progress-box{
+					margin-top: 18upx;
+				}
+				.period{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 1;
+					margin-top: 40upx;
+				}
+			}
+			 
+		}
+		.btn-box{
+			z-index: 9999;
+			width: 100%;
+			padding: 30upx;
+			position: fixed;
+			bottom: 120rpx;
+			left: 0;
+			box-sizing: border-box;
+			background: #FFFFFF;
+			
+	 
+			.sub-btn{
+				width: 100%;
+				height: 88upx;
+				line-height: 88upx;
+				text-align: center;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FFFFFF;
+				background: #2BC7B9;
+				border-radius: 44upx;
+			}
+		}
+		 
+	}
+</style>

+ 5 - 5
pages/healthy/index.vue

@@ -7,7 +7,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="searchValue" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -32,11 +32,11 @@
 							<view class="readers">
 								<view class="head-box" v-if="item.viewsList!=null&&item.viewsList.length>0">
 									<view class="head" v-for="(subitem,j) in item.viewsList" :key="j" v-if="subitem!=null">
-										<image  :src="subitem.avatar==null?'../../static/images/detault_head.jpg':subitem.avatar" mode=""></image>
+										<image  :src="subitem.avatar==null?'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/detault_head.jpg':subitem.avatar" mode=""></image>
 									</view>
 								</view>
 								<view class="readings">
-									<image class="eye" src="../../static/images/eye.png" ></image>
+									<image class="eye" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/eye.png" ></image>
 									<text class="num">{{item.views}}</text>
 								</view>
 							</view>
@@ -49,7 +49,7 @@
 				</view>
 			</view>
 		</mescroll-body>
-		
+		<!-- <tabbar :actindex="1"></tabbar> -->
 	</view>
 </template>
 
@@ -80,7 +80,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png',
 						tip: '暂无数据'
 					},
 					textNoMore:'已经到底了'

+ 2 - 2
pages/healthy/readUsers.vue

@@ -4,7 +4,7 @@
 		<view class="user-list">
 			<view class="item" v-for="(item,index) in dataList" :key="index">
 				<view class="img-box">
-					<image :src="item.avatar==null?'../../static/images/detault_head.jpg':item.avatar" mode=""></image>
+					<image :src="item.avatar==null?'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/detault_head.jpg':item.avatar" mode=""></image>
 				</view>
 				<text class="name">{{item.nickname}}</text>
 			</view>
@@ -32,7 +32,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png',
 						tip: '暂无数据'
 					}
 				},

+ 40 - 5
pages/home/components/HotProduct.vue

@@ -19,8 +19,9 @@
                                 </view>
                                 <view class="price-box">
                                     <view class="y-f">
-                                        <text class="seckill-current">¥{{  mgoods.price  }}</text>
-                                        <text class="original">销量{{ mgoods.sales }}{{mgoods.unitName}}</text>
+                                        <text class="seckill-current" v-if="user.isShow==1">¥{{  mgoods.price.toFixed(2)  }}</text>
+                                        <text class="seckill-current" v-else>¥{{  mgoods.otPrice.toFixed(2)  }}</text>
+                                        <text class="original" v-if="user.isShow==1">销量{{ mgoods.sales }}{{mgoods.unitName}}</text>
                                     </view>
                                 </view>
                                 <view class="title">
@@ -40,13 +41,16 @@
 </template>
 
 <script>
+	import {getUserInfo} from '@/api/user'
     export default {
         name: "HotProduct",
          
         data() {
             return {
                 goodsList: [],
-                swiperCurrent: 0
+                swiperCurrent: 0,
+				UserInfo:uni.getStorageSync('AppToken'),
+				user:{}
             };
         },
         props: {
@@ -56,10 +60,41 @@
         created() {},
         watch: {
             detail(next) {
-                this.goodsList = this.sortData(next, 4);
-            }
+                this.goodsList = this.sortData(next, 4)
+            },
+			UserInfo() {
+			    return uni.getStorageSync('AppToken')
+			}
         },
+		mounted() {
+			this.UserInfo = uni.getStorageSync('AppToken') // 强制更新登录状态
+			if(this.UserInfo) {
+				this.getUserInfo()
+			}
+			console.log(this.detail)
+		},
         methods: {
+			getUserInfo(){
+				getUserInfo().then(
+					res => {
+						if(res.code==200){
+							if(res.user!=null){
+								this.user=res.user;
+							}
+							else{
+								// this.utils.loginOut();
+							}
+							
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
             swiperChange(e) {
                 this.swiperCurrent = e.detail.current;
             },

+ 6 - 6
pages/home/doctorCase.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text"  v-model="searchVal" placeholder="输入关键字搜索"  confirm-type="搜索" @confirm="goSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -19,7 +19,7 @@
 					>
 						<view class="text">
 							{{ item.departmentName }}
-							<image v-show="deptId == item.departmentId" class="tab-bg" src="../../static/images/tab_bg.png" mode=""></image>
+							<image v-show="deptId == item.departmentId" class="tab-bg" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/tab_bg.png" mode=""></image>
 						</view>
 					</view>
 				</view>
@@ -56,8 +56,8 @@
 						<!-- 语音回答 -->
 						<view class="voice-inner" v-if="item.orderType == '2'">
 							<free-audio 
-								startPic='/static/images/play.png' 
-								endPic='/static/images/pause.png'
+								startPic='https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/play.png' 
+								endPic='https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/pause.png'
 								activeColor="#2BC7B9"
 								:audioId="'audio'+index"
 								:url='item.replyAudioUrl'
@@ -65,7 +65,7 @@
 						</view>
 					</view>
 					<view class="read-box">
-						<image src="../../static/images/eye.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/eye.png" mode=""></image>
 						<text class="text">{{item.views}}人看过</text>
 					</view>
 				</view>
@@ -101,7 +101,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png',
 						tip: '暂无数据'
 					}
 				},

Fichier diff supprimé car celui-ci est trop grand
+ 424 - 295
pages/home/index.vue


+ 1 - 1
pages/home/new/articleDetails.vue

@@ -15,7 +15,7 @@
 		<!-- 咨询按钮 -->
 		<view class="inquiry">
 			<view class="content">
-				<image src="/static/images/consult.png" mode=""></image>
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/consult.png" mode=""></image>
 				<text class="text">咨询</text>
 				<button class="contact-btn" open-type="contact"></button>
 			</view>

+ 2 - 2
pages/home/new/articleList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -27,7 +27,7 @@
 						<view class="info-box">
 							<view class="readers">
 								<view class="readings">
-									<image class="eye" src="/static/images/eye.png" ></image>
+									<image class="eye" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/eye.png" ></image>
 									<text class="num">{{item.views}}</text>
 								</view>
 							</view>

+ 2 - 2
pages/home/new/chineseMedicineList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -38,7 +38,7 @@
 					<view class="r-item" @click="showDetail(item)" v-for="item in dataList">
 						<view class="r-left">{{item.medicineName}}</view>
 						<view class="r-right">
-							<image src="/static/images/fire.png"></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/fire.png"></image>
 						</view>
 					</view>
 				</view>

+ 2 - 2
pages/home/new/diseaseList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -27,7 +27,7 @@
 						<view class="title ellipsis1">{{ item.diseaseName }}</view>
 					</view>
 					<view class="right">
-						<image src="../../static/images/arrow_gray.png"></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png"></image>
 					</view>
 				</view>
 			</view>

+ 2 - 2
pages/home/new/famousPrescribeList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -41,7 +41,7 @@
 					<view class="r-item" @click="showDetail(item)" v-for="item in dataList">
 						<view class="r-left">{{item.prescribeName}}</view>
 						<view class="r-right">
-							<image src="/static/images/fire.png"></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/fire.png"></image>
 						</view>
 					</view>
 				</view>

+ 1 - 1
pages/home/new/medicatedFoodList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>

+ 2 - 2
pages/home/new/questionsList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入服务包搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -27,7 +27,7 @@
 						<view class="info-box">
 							<view class="readers">
 								<view class="readings">
-									<image class="eye" src="/static/images/eye.png" ></image>
+									<image class="eye" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/eye.png" ></image>
 									<text class="num">{{item.views}}</text>
 								</view>
 							</view>

+ 4 - 4
pages/home/new/test.vue

@@ -6,7 +6,7 @@
 					<text class="patient-title">选择体验者</text>
 					<view class="right" >
 						<text class="value">请点击添加</text>
-						<image src="/static/images/arrow_gray.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 					</view>
 				</view>
 				<view class="patient" @click="addPatient()" v-if="patient!=null">
@@ -20,7 +20,7 @@
 						</view>
 					</view>
 					<view class="right" >
-						<image src="/static/images/arrow_gray.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 					</view>
 				</view>
 			</view>
@@ -59,7 +59,7 @@
 			<view class="patient-box" @click="addPatient()" v-if="patient==null">
 				<text class="patient-title">选择体验者</text>
 				<view class="right" >
-					<image src="/static/images/arrow_gray.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 				</view>
 			</view>
 			<view class="patient" @click="addPatient()" v-if="patient!=null">
@@ -73,7 +73,7 @@
 					</view>
 				</view>
 				<view class="right" >
-					<image src="/static/images/arrow_gray.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 				</view>
 			</view>
 		</view>

+ 2 - 2
pages/home/new/vesselList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -37,7 +37,7 @@
 					<view class="r-item" @click="showDetail(item)" v-for="item in dataList">
 						<view class="r-left">{{item.vesselName}}</view>
 						<view class="r-right">
-							<image src="/static/images/fire.png"></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/fire.png"></image>
 						</view>
 					</view>
 				</view>

+ 12 - 12
pages/home/productList.vue

@@ -4,12 +4,12 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" @confirm="goSearch"   :value="form.productName" placeholder="输入药品名称" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 				<view class="icon-search">
-					<image @click="showChange(2)" v-if="showType==1"  src="../../static/images/search1.png" mode=""></image>
-					<image @click="showChange(1)" v-if="showType==2"  src="../../static/images/search2.png" mode=""></image>
+					<image @click="showChange(2)" v-if="showType==1"  src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search1.png" mode=""></image>
+					<image @click="showChange(1)" v-if="showType==2"  src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search2.png" mode=""></image>
 				</view>
 			</view>
 			<!-- 排序框 -->
@@ -20,19 +20,19 @@
 				<view class="item" @click="searchChange('2')">
 					<text class="label">价格</text>
 					<view class="sort-img">
-						<image v-if="form.priceOrder==null||form.priceOrder=='desc'" src="../../static/images/price_arrow_up.png" mode="" @click="priceUp(true)"></image>
-						<image v-if="form.priceOrder=='asc'" src="../../static/images/price_arrow_up2.png" mode="" @click="priceUp(false)"></image>
-						<image v-if="form.priceOrder==null||form.priceOrder=='asc'" src="../../static/images/price_arrow_down.png" mode="" @click="priceDown(true)"></image>
-						<image v-if="form.priceOrder=='desc'" src="../../static/images/price_arrow_down2.png" mode="" @click="priceDown(false)"></image>
+						<image v-if="form.priceOrder==null||form.priceOrder=='desc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_up.png" mode="" @click="priceUp(true)"></image>
+						<image v-if="form.priceOrder=='asc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_up2.png" mode="" @click="priceUp(false)"></image>
+						<image v-if="form.priceOrder==null||form.priceOrder=='asc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_down.png" mode="" @click="priceDown(true)"></image>
+						<image v-if="form.priceOrder=='desc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_down2.png" mode="" @click="priceDown(false)"></image>
 					</view>
 				</view>
 				<view class="item" @click="searchChange('3')">
 					<text class="label">销量</text>
 					<view class="sort-img">
-						<image v-if="form.salesOrder==null||form.salesOrder=='desc'" src="../../static/images/price_arrow_up.png" mode="" @click="saleUp(true)"></image>
-						<image v-if="form.salesOrder=='asc'" src="../../static/images/price_arrow_up2.png" mode="" @click="saleUp(false)"></image>
-						<image v-if="form.salesOrder==null||form.salesOrder=='asc'" src="../../static/images/price_arrow_down.png" mode="" @click="saleDown(true)"></image>
-						<image v-if="form.salesOrder=='desc'" src="../../static/images/price_arrow_down2.png" mode="" @click="saleDown(false)"></image>
+						<image v-if="form.salesOrder==null||form.salesOrder=='desc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_up.png" mode="" @click="saleUp(true)"></image>
+						<image v-if="form.salesOrder=='asc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_up2.png" mode="" @click="saleUp(false)"></image>
+						<image v-if="form.salesOrder==null||form.salesOrder=='asc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_down.png" mode="" @click="saleDown(true)"></image>
+						<image v-if="form.salesOrder=='desc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_down2.png" mode="" @click="saleDown(false)"></image>
 					</view>
 				</view>
 				<view class="item" :class="form.newOrder=='desc'?'active':''" @click="searchChange('4')">
@@ -110,7 +110,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png',
 						tip: '暂无数据'
 					},
 					textNoMore:"已经到底了",

+ 112 - 112
pages/home/productSearch.vue

@@ -1,30 +1,30 @@
 <template>
-	<view class="content">
-		<!-- 搜索框 -->
-		<view class="search-cont">
-			<view class="inner">
-				<image class="icon-search" src="../../static/images/search.png" mode=""></image>
-				<input type="text" value="" placeholder="输入药品名称" confirm-type="搜索" @confirm="goSearch" :focus='setFocus' placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
-			</view>
+	<view class="content">
+		<!-- 搜索框 -->
+		<view class="search-cont">
+			<view class="inner">
+				<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
+				<input type="text" value="" placeholder="输入药品名称" confirm-type="搜索" @confirm="goSearch" :focus='setFocus' placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+			</view>
 		</view>
-		<!-- 搜索历史 -->
-		<view class="title-box">
-			<text class="title">历史搜索</text>
-			<image src="../../static/images/del.png" mode="" @click="clearHistory"></image>
-		</view>
-		<view class="data-list">
-			<view class="item" v-for="(item,index) in searchHistory" :key="index" @click="doSearch(item)">
-				{{ item }}
-			</view>
+		<!-- 搜索历史 -->
+		<view class="title-box">
+			<text class="title">历史搜索</text>
+			<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/del.png" mode="" @click="clearHistory"></image>
 		</view>
-		<!-- 推荐搜索 -->
-		<view class="title-box">
-			<text class="title">推荐搜索</text>
-		</view>
-		<view class="data-list">
-			<view class="item" v-for="(item,index) in topSearch" :key="index" @click="doSearch(item)">
-				{{ item }}
-			</view>
+		<view class="data-list">
+			<view class="item" v-for="(item,index) in searchHistory" :key="index" @click="doSearch(item)">
+				{{ item }}
+			</view>
+		</view>
+		<!-- 推荐搜索 -->
+		<view class="title-box">
+			<text class="title">推荐搜索</text>
+		</view>
+		<view class="data-list">
+			<view class="item" v-for="(item,index) in topSearch" :key="index" @click="doSearch(item)">
+				{{ item }}
+			</view>
 		</view>
 	</view>
 </template>
@@ -33,100 +33,100 @@
 	export default {
 		data() {
 			return {
-				setFocus: false,
-				// 历史搜索
-				searchHistory: [],
-				// 推荐搜索
+				setFocus: false,
+				// 历史搜索
+				searchHistory: [],
+				// 推荐搜索
 				topSearch: []
 			};
-		},
-		onShow() {
-			this.setFocus = true
-			this.searchHistory=this.utils.getHisSearch();
-			var config=uni.getStorageSync('config');
-			if(config!=null&&config!=undefined&&config!=""){
-				this.topSearch=JSON.parse(config).hotSearch.split(',');
-			}
-		},
-		methods:{
-			// 清空历史搜索数据
-			clearHistory() {
-				this.utils.clearHisSearch();
-				this.searchHistory=this.utils.getHisSearch();
-			},
-			doSearch(item){
-				uni.navigateTo({
					url: './productList?key=' + item
				})
-			},
-			goSearch(e) {
-				if(e.detail.value!=null&&e.detail.value!=""){
-					this.utils.addHisSearch(e.detail.value);
-				}
-				uni.navigateTo({
-					url: './productList?key=' + e.detail.value
-				})
-			}
+		},
+		onShow() {
+			this.setFocus = true
+			this.searchHistory=this.utils.getHisSearch();
+			var config=uni.getStorageSync('config');
+			if(config!=null&&config!=undefined&&config!=""){
+				this.topSearch=JSON.parse(config).hotSearch.split(',');
+			}
+		},
+		methods:{
+			// 清空历史搜索数据
+			clearHistory() {
+				this.utils.clearHisSearch();
+				this.searchHistory=this.utils.getHisSearch();
+			},
+			doSearch(item){
+				uni.navigateTo({					url: './productList?key=' + item				})
+			},
+			goSearch(e) {
+				if(e.detail.value!=null&&e.detail.value!=""){
+					this.utils.addHisSearch(e.detail.value);
+				}
+				uni.navigateTo({
+					url: './productList?key=' + e.detail.value
+				})
+			}
 		}
 	}
 </script>
 
 <style lang="scss">
-	.content{
-		.search-cont{
-			padding: 16upx 30upx;
-			background-color: #FFFFFF;
-			.inner{
-				box-sizing: border-box;
-				width: 100%;
-				height: 72upx;
-				background: #F7F7F7;
-				border-radius: 36upx;
-				display: flex;
-				align-items: center;
-				padding: 0 30upx;
-				.icon-search{
-					width: 28upx;
-					height: 28upx;
-					margin-right: 20upx;
-				}
-				input{
-					height: 60upx;
-					line-height: 60upx;
-					flex: 1;
-				}
-			}
-		}
-		.title-box{
-			padding: 30upx;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			.title{
-				font-size: 30upx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #111111;
-			}
-			image{
-				width: 30upx;
-				height: 30upx;
-			}
-		}
-		.data-list{
-			padding: 0upx 10upx 30upx;
-			display: flex;
-			flex-wrap: wrap;
-			.item{
-				padding: 0 30upx;
-				height: 56upx;
-				line-height: 56upx;
-				font-size: 26upx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #333333;
-				background: #F5F5F5;
-				border-radius: 28upx;
-				margin: 0 20upx 20upx 0;
-			}
-		}
+	.content{
+		.search-cont{
+			padding: 16upx 30upx;
+			background-color: #FFFFFF;
+			.inner{
+				box-sizing: border-box;
+				width: 100%;
+				height: 72upx;
+				background: #F7F7F7;
+				border-radius: 36upx;
+				display: flex;
+				align-items: center;
+				padding: 0 30upx;
+				.icon-search{
+					width: 28upx;
+					height: 28upx;
+					margin-right: 20upx;
+				}
+				input{
+					height: 60upx;
+					line-height: 60upx;
+					flex: 1;
+				}
+			}
+		}
+		.title-box{
+			padding: 30upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.title{
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #111111;
+			}
+			image{
+				width: 30upx;
+				height: 30upx;
+			}
+		}
+		.data-list{
+			padding: 0upx 10upx 30upx;
+			display: flex;
+			flex-wrap: wrap;
+			.item{
+				padding: 0 30upx;
+				height: 56upx;
+				line-height: 56upx;
+				font-size: 26upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				background: #F5F5F5;
+				border-radius: 28upx;
+				margin: 0 20upx 20upx 0;
+			}
+		}
 	}
 </style>

+ 4 - 4
pages/shopping/cart.vue

@@ -22,12 +22,12 @@
 						</view>
 						<view class="num-box">
 							<view class="img-box" @click="delNum(item)">
-								<image v-if="item.cartNum <= 1" src="../../static/images/jian.png" mode=""></image>
-								<image v-else src="../../static/images/jian2.png" mode=""></image>
+								<image v-if="item.cartNum <= 1" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/jian.png" mode=""></image>
+								<image v-else src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/jian2.png" mode=""></image>
 							</view>
 							<input  type="number" @change="changeNum($event,item)" :value="item.cartNum"   />
 							<view class="img-box" @click="addNum(item)">
-								<image src="../../static/images/add.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/add.png" mode=""></image>
 							</view>
 						</view>
 					</view>
@@ -36,7 +36,7 @@
 		</view>
 	 
 		<view v-if="carts.length == 0" class="no-data-box">
-			<image src="../../static/images/no_data.png" mode="aspectFit"></image>
+			<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png" mode="aspectFit"></image>
 			<view class="empty-title">暂无数据</view>
 		</view>
 		<!-- 猜你喜欢 -->

+ 8 - 8
pages/shopping/confirmOrder.vue

@@ -10,7 +10,7 @@
 					</vie>
 				</view>
 				<view class="arrow-box">
-					<image src="../../static/images/arrow_gray.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 				</view>
 			</view>
 			<view class="address-box" v-if="address!=null" @click="openAddress()">
@@ -24,7 +24,7 @@
 					</view>
 				</view>
 				<view class="arrow-box">
-					<image src="../../static/images/arrow_gray.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 				</view>
 			</view>
 			<!-- 药品列表 -->
@@ -61,7 +61,7 @@
 			<!-- 积分 -->
 			<view class="points">
 				<view class="left">
-					<image src="../../static/images/points.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/points.png" mode=""></image>
 					<text class="text">可用积分</text>
 				</view>
 				<view class="right">
@@ -75,7 +75,7 @@
 				</view>
 				<view class="right">
 					<text class="text">{{couponText}}</text>
-					<image src="/static/images/arrow4.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow4.png" mode=""></image>
 				</view>
 			</view>
 			<view class="points">
@@ -109,8 +109,8 @@
 				 <div class="coupon-list" v-if="couponsList.length > 0">
 				   <div class="item acea-row row-center-wrapper"  v-for="(item, index) in couponsList" :key="index">
 				     <div class="money" >
-				       <image v-if="item.status==0" class="img" src="../../static/images/coupon1.png" mode="widthFix"></image>
-				 	  <image v-if="item.status!=0" class="img" src="../../static/images/coupon2.png" mode="widthFix"></image>
+				       <image v-if="item.status==0" class="img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/coupon1.png" mode="widthFix"></image>
+				 	  <image v-if="item.status!=0" class="img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/coupon2.png" mode="widthFix"></image>
 				 	  <div style="z-index: 999;">
 				         ¥<span class="num">{{ item.couponPrice }}</span>
 				       </div>
@@ -128,7 +128,7 @@
 				   </div>
 				 </div>
 				 <view v-if="couponsList.length == 0" class="no-data-box" >
-				 	<image src="/static/images/no_data.png" mode="aspectFit"></image>
+				 	<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png" mode="aspectFit"></image>
 				 	<view class="empty-title">暂无数据</view>
 				 </view>
 			 </view>
@@ -393,7 +393,7 @@
 			min-height: 171upx;
 			background: #FFFFFF;
 			border-radius: 16upx;
-			background-image: url(../../static/images/address_bg.png);
+			background-image: url("https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/address_bg.png");
 			background-repeat: no-repeat;
 			background-size: 100% 30upx;
 			background-position: left bottom;

+ 4 - 2
pages/shopping/index.vue

@@ -3,11 +3,11 @@
 		<view class="top-content">
 			<view class="status_bar" :style="{height: statusBarHeight}"></view>
 			<!-- 这里是状态栏 -->
-			<view class="top-title">健康商城</view>
+			<view class="top-title">健康产品</view>
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" disabled   confirm-type="搜索" @click="toSearch" placeholder="输入药品名称" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -54,6 +54,7 @@
 				</view>
 			</view>
 		</view>
+		<!-- <tabbar :actindex="3"></tabbar> -->
 	</view>
 </template>
 
@@ -73,6 +74,7 @@
 				cateSelect: 0,
 				// 轮播图
 				advs: [],
+				isshow:false
 			};
 		},
 		onLoad() {

+ 1 - 1
pages/shopping/payOrder.vue

@@ -14,7 +14,7 @@
 				<view class="title">支付方式</view>
 				<view class="item">
 					<view class="left">
-						<image src="../../static/images/wecha_pay.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/wecha_pay.png" mode=""></image>
 						<text class="text">微信支付</text>
 					</view>
 					<label>

+ 33 - 31
pages/shopping/paymentOrder.vue

@@ -18,7 +18,7 @@
 				<radio-group  @change="payTypeChange" v-if="order.isEditMoney!=null&&order.isEditMoney==1">
 					<view class="item"  >
 						<view class="left"  >
-							<image src="/static/images/wecha_pay.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/wecha_pay.png" mode=""></image>
 							<text class="text">微信支付</text>
 						</view>
 						<label>
@@ -27,7 +27,7 @@
 					</view>
 					<view class="item"  >
 						<view class="left">
-							<image src="/static/images/pay_de.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/pay_de.png" mode=""></image>
 							<text class="text">物流代收</text>
 						</view>
 						<label>
@@ -39,7 +39,7 @@
 				<radio-group @change="payTypeChange" v-else-if="order.orderCreateType!=null&& order.orderCreateType==3">
 					<view class="item"  >
 						<view class="left" >
-							<image src="/static/images/wecha_pay.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/wecha_pay.png" mode=""></image>
 							<text class="text">微信支付</text>
 						</view>
 						<label>
@@ -48,16 +48,17 @@
 					</view>
 					<view class="item" >
 						<view class="left">
-							<image src="../../static/images/pay_de.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/pay_de.png" mode=""></image>
 							<text class="text">物流代收</text>
 						</view>
 						<label>
 							<radio  :value="2" :checked="order.payType=='2'" />
 						</label>
 					</view>
-					<view class="item" v-if="user!=null&&user.level==1 ">
+					<!-- <view class="item" v-if="user!=null&&user.level==1 "> -->
+					<view class="item" >
 						<view class="left">
-							<image src="../../static/images/pay_1.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/pay_1.png" mode=""></image>
 							<text class="text">货到付款</text>
 						</view>
 						<label>
@@ -68,7 +69,7 @@
 				<radio-group @change="payTypeChange" v-else-if="order.orderCreateType!=null&& order.orderCreateType==2">
 					<view class="item" v-if="payType==1||payType==4" >
 						<view class="left" >
-							<image src="/static/images/wecha_pay.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/wecha_pay.png" mode=""></image>
 							<text class="text">微信支付</text>
 						</view>
 						<label>
@@ -77,16 +78,17 @@
 					</view>
 					<view class="item" v-if="payType==2||payType==4">
 						<view class="left" >
-							<image src="../../static/images/pay_de.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/pay_de.png" mode=""></image>
 							<text class="text">物流代收</text>
 						</view>
 						<label>
 							<radio  :value="2" :checked="order.payType=='2'" />
 						</label>
 					</view>
-					<view class="item" v-if="user!=null&&user.level==1 ">
+					<!-- <view class="item" v-if="user!=null&&user.level==1 "> -->
+					<view class="item" v-if="payType==1||payType==4" >
 						<view class="left">
-							<image src="../../static/images/pay_1.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/pay_1.png" mode=""></image>
 							<text class="text">货到付款</text>
 						</view>
 						<label>
@@ -97,7 +99,7 @@
 				<radio-group @change="payTypeChange" v-else-if="order.orderCreateType!=null&&(order.orderCreateType==1)">
 					<view class="item"  >
 						<view class="left" >
-							<image src="/static/images/wecha_pay.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/wecha_pay.png" mode=""></image>
 							<text class="text">微信支付</text>
 						</view>
 						<label>
@@ -162,10 +164,10 @@
 		},
 		onLoad(option) {
 			this.orderId=JSON.parse(option.orderId);
-			this.orderBindUser(this.orderId)
-			// this.getStoreOrderById();
-			// this.getStoreConfig();
-			// this.getUserInfo();
+			// this.orderBindUser(this.orderId)
+			this.getStoreOrderById();
+			this.getStoreConfig();
+			this.getUserInfo();
 			// uni.showShareMenu({
 			// 	withShareTicket:true,
 			// 	//小程序的原生菜单中显示分享按钮,才能够让发送给朋友与分享到朋友圈两个按钮可以点击
@@ -320,7 +322,7 @@
 					res => {
 						if(res.code==200){
 							 console.log(res);
-							 if(res.payType==1||res.payType==2){
+							 if(res.payType==1||res.payType==2||res.payType==3){
 								 uni.requestPayment({
 								 	provider: 'wxpay',
 								 	timeStamp: res.result.timeStamp,
@@ -348,21 +350,21 @@
 									}
 								 });
 							 }
-							 else if(res.payType==3){
-								 uni.hideLoading();
-								 if(that.order.isPrescribe){
-									 //如果是处方订单开处方
-									uni.redirectTo({
-										url:"prescribe?orderId="+that.order.id
-									})
-								 }
-								 else{
-									//如果是普通订单
-									uni.redirectTo({
-										url:"success?order="+JSON.stringify(that.order)
-									}) 
-								 }
-							 }
+							 // else if(res.payType==3){
+								//  uni.hideLoading();
+								//  if(that.order.isPrescribe){
+								// 	 //如果是处方订单开处方
+								// 	uni.redirectTo({
+								// 		url:"prescribe?orderId="+that.order.id
+								// 	})
+								//  }
+								//  else{
+								// 	//如果是普通订单
+								// 	uni.redirectTo({
+								// 		url:"success?order="+JSON.stringify(that.order)
+								// 	}) 
+								//  }
+							 // }
 							 
 						}else{
 							uni.showToast({

+ 13 - 13
pages/shopping/prescribe.vue

@@ -3,7 +3,7 @@
 		<view class="fixed-top-box">
 			<view class="status_bar" :style="{height: statusBarHeight}"></view>
 			<view class="back-box" @click="back">
-				<image src="../../static/images/back_white.png" mode=""></image>
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/back_white.png" mode=""></image>
 				<text class="title">填写处方信息</text>
 				<text></text>
 			</view>
@@ -13,17 +13,17 @@
 			<!-- 步骤 -->
 			<view class="steps-box">
 				<view class="item active">填写信息</view>
-				<image class="arrow" src="../../static/images/arrow4.png" mode=""></image>
+				<image class="arrow" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow4.png" mode=""></image>
 				<view class="item">医生开方</view>
-				<image class="arrow" src="../../static/images/arrow4.png" mode=""></image>
+				<image class="arrow" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow4.png" mode=""></image>
 				<view class="item">支付订单</view>
-				<image class="arrow" src="../../static/images/arrow4.png" mode=""></image>
+				<image class="arrow" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow4.png" mode=""></image>
 				<view class="item">厂家发货</view>
 			</view>
 			<!-- 提示 -->
 			<view class="tip-box">
 				<view class="top">
-					<image src="../../static/images/safe2.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/safe2.png" mode=""></image>
 					<text class="text">依据国家规定、处方药需凭处方购买</text>
 				</view>
 				<view class="time-tip">填写问诊人信息、处方信息</view>
@@ -34,7 +34,7 @@
 					<view class="title-box">
 						<text class="title">选择问诊人</text>
 						<view class="add-box" @click="addPeople()">
-							<image src="../../static/images/add26.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/add26.png" mode=""></image>
 							<text >添加</text>
 						</view>
 					</view>
@@ -47,7 +47,7 @@
 								<text class="ege">{{utils.getAge(item.birthday)}}岁</text>
 							</view>
 							<!-- 选中的对号角标 -->
-							<image v-if="patientId == item.patientId" class="active-img" src="../../static/images/sel_right50.png" mode=""></image>
+							<image v-if="patientId == item.patientId" class="active-img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/sel_right50.png" mode=""></image>
 						</view>
 					</view>
 				</view>
@@ -74,11 +74,11 @@
 						<view class="img" v-for="(item,index) in imgList" :key="index"  >
 							<image :src="item" mode="aspectFill"  @click="previewImage(index)"></image>
 							<view class="del" @click="delImg(index)" >
-								<image src="/static/images/del2.png"></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/del2.png"></image>
 							</view>
 						</view>
 						<view class="chose-img" @tap="chooseImage(1)" v-if="imgList.length<4">
-							<image src="/static/images/adds.png"></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/adds.png"></image>
 						</view>
 					</view>
 					
@@ -104,7 +104,7 @@
 				<!-- 是否使用过此药 -->
 				<view class="check-box">
 					<view class="left">
-						<image src="../../static/images/yao.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/yao.png" mode=""></image>
 						<text class="text">是否有过敏史</text>
 					</view>
 					<radio-group style="display: flex;align-items: center;">
@@ -120,7 +120,7 @@
 				</view>
 				<view class="check-box">
 					<view class="left">
-						<image src="../../static/images/yao.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/yao.png" mode=""></image>
 						<text class="text">肝功能是否异常</text>
 					</view>
 					<radio-group style="display: flex;align-items: center;">
@@ -136,7 +136,7 @@
 				</view>
 				<view class="check-box">
 					<view class="left">
-						<image src="../../static/images/yao.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/yao.png" mode=""></image>
 						<text class="text">肾功能是否异常</text>
 					</view>
 					<radio-group style="display: flex;align-items: center;">
@@ -152,7 +152,7 @@
 				</view>
 				<view class="check-box">
 					<view class="left">
-						<image src="../../static/images/yao.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/yao.png" mode=""></image>
 						<text class="text">是否是备孕/怀孕/哺乳期</text>
 					</view>
 					<radio-group style="display: flex;align-items: center;">

+ 51 - 22
pages/shopping/productDetails.vue

@@ -29,15 +29,17 @@
 		<view class="det-info">
 			<view class="price-box">
 				<view class="price">
-					<text class="label">会员价</text>
+					<text class="label"  v-if="userinfo.isShow==1&&isuser==false">会员价</text>
+					<text class="label"  v-else>零售价</text>
 					<text class="unit">¥</text>
-					<text class="num" >{{product.price}}</text>
-					<text class="label">零售价</text>
-					<text class="old" >¥{{product.otPrice}}</text>
+					<text class="num" v-if="userinfo.isShow==1&&isuser==false">{{product.price}}</text>
+					<text class="num" v-else>{{product.otPrice}}</text>
+					<text class="label" v-if="userinfo.isShow==1&&isuser==false">零售价</text>
+					<text class="old" v-if="userinfo.isShow==1&&isuser==false">¥{{product.otPrice}}</text>
 				</view>
-				<view class="share-box">
+				<view class="share-box" v-if="userinfo.isShow==1&&isuser==false">
 					<text class="text">分享</text>
-					<image src="../../static/images/share1.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/share1.png" mode=""></image>
 					<button  class="share" data-name="shareBtn" open-type="share">分享</button>
 				</view>
 			</view>
@@ -47,8 +49,9 @@
 			<view class="intro" v-if="product.productInfo!=null" v-html="product.productInfo.replace(/\n/g,'<br>')">
 			</view>
 			<view class="safe-box">
-				<image src="../../static/images/safe.png" mode=""></image>
-				<text class="text">免邮发货</text>
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/safe.png" mode=""></image>
+				<text class="text" v-if="userinfo.isShow==1&&isuser==false">免邮发货</text>
+				<view class="line" v-if="userinfo.isShow==1&&isuser==false"></view>
 				<view class="line"></view>
 				<text class="text">药师服务</text>
 				<view class="line"></view>
@@ -56,11 +59,11 @@
 			</view>
 		</view>
 		<!-- 购买人数、库存 -->
-		<view class="inventor">
+		<view class="inventor" v-if="userinfo.isShow==1&&isuser==false">
 			<view class="left">
 				<!-- <view class="head-box">
 					<view class="head" v-for="(item,j) in 5" :key="j">
-						<image src="../../static/images/head.jpg" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/head.jpg" mode=""></image>
 					</view>
 				</view> --> 
 				<view class="num-box">
@@ -88,20 +91,20 @@
 			</view>
 		</view>
 		<!-- 底部按钮 -->
-		<view class="btn-foot">
+		<view class="btn-foot" v-if="userinfo.isShow==1&&isuser==false">
 			<view class="menu-box">
 				<view class="item" @click="goHome">
-					<image src="../../static/images/back_home.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/back_home.png" mode=""></image>
 					<text class="label">首页</text>
 				</view>
 				<view class="item" style="position: relative;">
-					<image src="../../static/images/consult_small.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/consult_small.png" mode=""></image>
 					<text class="label">咨询</text>
 					<button class="contact-btn" open-type="contact"></button>
 				</view>
 				<view class="item" @click="navgetTo('./cart')">
 					<uni-badge size="small" :text="cartCount" absolute="rightTop" type="error">
-						<image src="../../static/images/cart36.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/cart36.png" mode=""></image>
 					</uni-badge>
 					<text class="label">购物车</text>
 				</view>
@@ -139,14 +142,14 @@
 							<view class="input-box">
 								<input type="text" v-model="storeName" placeholder="请选择门店" class="form-input" disabled="disabled" />
 							</view>
-							<image class="arrow" src="../../static/images/arrow_gray.png" mode=""></image>
+							<image class="arrow" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 						</view>
 					</picker>
 				</view> -->
 				
 				<!-- 规格 -->
 				<view class="spec-box">
-					<view v-for="(item,index) in attrs">
+					<view v-for="(item,index) in attrs" :key="index">
 						<view class="title">{{item.attrName}}</view>
 						<view class="spec-list">
 							<view 
@@ -164,12 +167,12 @@
 					<view class="label">数量</view>
 					<view class="num-box">
 						<view class="img-box" @click="lessNum()">
-							<image v-if="specNum <= 1" src="../../static/images/jian.png" mode=""></image>
-							<image v-else src="../../static/images/jian2.png" mode=""></image>
+							<image v-if="specNum <= 1" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/jian.png" mode=""></image>
+							<image v-else src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/jian2.png" mode=""></image>
 						</view>
 						<input   type="number" @change="changeNum" v-model="specNum"   />
 						<view class="img-box" @click="addNum()">
-							<image src="../../static/images/add.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/add.png" mode=""></image>
 						</view>
 					</view>
 				</view>
@@ -187,6 +190,7 @@
 
 <script>
 	import {getDicts} from '@/api/index'
+	import {getUserInfo} from '@/api/user'
 	import {getProductDetails,getCartCount,addCart} from '@/api/product'
 	import popupBottom from '@/components/px-popup-bottom/px-popup-bottom.vue'
 	export default {
@@ -230,6 +234,8 @@
 				config:null,
 				showServiceFee:false,
 				selectVal:"",
+				userinfo:[],
+				isuser:false
 			};
 		},
 		onLoad(options) {
@@ -258,6 +264,11 @@
 		},
 		onShow() {
 			this.getProductDetails();
+			if(uni.getStorageSync('AppToken')){
+				this.getuser()
+			}else{
+				this.isuser=true
+			}
 		},
 		//发送给朋友
 		onShareAppMessage(res) {
@@ -283,6 +294,24 @@
 			
 		},
 		methods: {
+			getuser(){
+				getUserInfo().then(
+					res => {
+						if (res.code == 200) {
+							if (res.user != null) {
+								this.userinfo = res.user;
+								console.log(this.userinfo)
+							}
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
 			getDicts:function(){
 				getDicts().then(
 					res => {
@@ -555,7 +584,7 @@
 			left: 0;
 			bottom: 0;
 			z-index: 9;
-			background-image: url(../../static/images/black_mask.png);
+			background-image: url(https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/black_mask.png);
 			background-size: 20upx 44upx;
 			background-repeat: repeat-x;
 		}
@@ -866,12 +895,12 @@
 					text-align: center;
 				}
 			}
-			/deep/.uni-badge--x{
+			:deep(.uni-badge--x){
 				display: flex;
 				align-items: center;
 				justify-content: center;
 			}
-			/deep/.uni-badge{
+			:deep(.uni-badge){
 				border: none;
 				background-color: #FF3636;
 				font-family: Roboto;

+ 1 - 1
pages/shopping/success.vue

@@ -3,7 +3,7 @@
 		<view class="inner">
 			<view class="top">
 				<text class="title">支付成功</text>
-				 <image class="icon" src="../../static/images/success.png" ></image>
+				 <image class="icon" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/success.png" ></image>
 				 <view   class="btn-box">
 				 	<view class="btn cancel" @click="goOrderDetails(order.id)"> 查看订单</view>
 				 </view>

+ 74 - 66
pages/user/index.vue

@@ -7,64 +7,70 @@
 				<view class="user-info">
 					<view class="left">
 						<view class="head-img">
-							<image :src="user.avatar==null?'/static/images/detault_head.jpg':user.avatar" mode="aspectFill"></image>
+							<image :src="user.avatar==null?'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/detault_head.jpg':user.avatar" mode="aspectFill"></image>
 						</view>
-						<view class="name-phone">
-							<view class="name">{{user.nickname}}</view>
+						<view class="name-phone"  v-if="UserInfo">
+							<view class="name">{{user.nickname}}
+								<text class="fs24 ml12 base-color mb20 " v-if="user.isShow==1"
+								>会员</text>
+								<text class="fs24 ml12 mb20 " style="color: #666;" v-else
+								>非会员</text>
+							</view>
 							<view class="phone">{{utils.parsePhone(user.phone)}}</view>
 						</view>
+						<view class="fs40 bold name-phone center " @click='getOrderCount()' 
+						v-else>立即登录</view>
 					</view>
 					<view class="right">
-						
 						<uni-badge size="small" :text="msgNum" absolute="rightTop" type="error">
 							<view class="set" @click="navgetTo('/pages_user/user/personInfo')">
-								<image src="../../static/images/icon-set.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/icon-set.png" mode=""></image>
 							</view>
 						</uni-badge>
-						<uni-badge size="small" :text="msgNum" absolute="rightTop" type="error">
+						<!-- <uni-badge size="small" :text="msgNum" absolute="rightTop" type="error">
 							<view class="msg-box" @click="navgetTo('/pages_user/user/message')">
-								<image src="../../static/images/icon-msg.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/icon-msg.png" mode=""></image>
 							</view>
 							
-						</uni-badge>
+						</uni-badge> -->
 					</view>
 				</view>
 				<!-- 我的订单 -->
-				<view class="my-order">
+				<view class="my-order" v-if="user.isShow==1">
 					<view class="inner">
 						<view class="title-box">
 							<text class="title">我的订单</text>
 							<view class="all-order" @click="showOrder('')">
 								<text class="text">全部订单</text>
-								<image src="../../static/images/arrow4.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow4.png" mode=""></image>
 							</view>
 						</view>
 						<view class="status-box">
 							<uni-badge size="small" :text=count0 absolute="rightTop" type="error">
 								<view class="item" @click="showOrder('0')">
-									<image src="../../static/images/payment.png" mode=""></image>
+									<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/payment.png" mode=""></image>
 									<text class="text">待付款</text>
 								</view>
 							</uni-badge>
 							<uni-badge size="small" :text=count1 absolute="rightTop" type="error">
 							<view class="item" @click="showOrder('1')">
-								<image src="../../static/images/send_goods.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/send_goods.png" mode=""></image>
 								<text class="text">待发货</text>
 							</view>
 							</uni-badge>
 							<uni-badge size="small" :text=count2 absolute="rightTop" type="error">
 							<view class="item" @click="showOrder('2')">
-								<image src="../../static/images/sou_goods.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/sou_goods.png" mode=""></image>
 								<text class="text">待收货</text>
 							</view>
 							</uni-badge>
 							<view class="item" @click="showOrder('3')">
-								<image src="../../static/images/completed.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/completed.png" mode=""></image>
 								<text class="text">已完成</text>
 							</view>
 							<uni-badge size="small" :text=afterSalesCount absolute="rightTop" type="error">
 							<view class="item" @click="navgetTo('/pages_user/user/refundOrderList')">
-								<image src="../../static/images/after_sales.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/after_sales.png" mode=""></image>
 								<text class="text">售后/退款</text>
 							</view>
 							</uni-badge>
@@ -77,79 +83,56 @@
 					<view class="used-tools">
 						<view class="title">常用工具</view>
 						<view class="tools-list">
-							<!-- <view 
-								v-for="(item,index) in toolsArr" 
-								:key="index" 
-								@click="navgetTo(item.url)" 
-								:class="(toolsArr.length - index) > toolsRemain?'item':'item no-marin-bottom'">
-								<image :src="item.img" mode=""></image>
-								<text class="text">{{ item.name }}</text>
-								<button v-if="item.url == ''" class="contact-btn" open-type="contact"></button>
-							</view> -->
-							<!-- <view class="item" @click="navgetTo('/pages_user/user/doctorOrder')">
-								<image src="../../static/images/my_ask.png" mode=""></image>
-								<text class="text">我的问诊</text>
-							</view> -->
-							
-					<!-- 		<view class="item" @click="navgetTo('/pages_user/user/prescribeOrder')">
-								<image src="../../static/images/prescription.png" mode=""></image>
-								<text class="text">我的处方</text>
-							</view>
-							<view class="item" @click="navgetTo('/pages_user/user/patient')">
-								<image src="../../static/images/management.png" mode=""></image>
-								<text class="text">就诊人管理</text>
-							</view> -->
-							<view class="item" @click="navgetTo('/pages_user/user/patient')">
-								<image src="../../static/images/management.png" mode=""></image>
-								<text class="text">健康档案</text>
-							</view>
-							<view class="item" @click="navgetTo('/pages_user/user/address')">
-								<image src="../../static/images/address.png" mode=""></image>
+							<view class="item" @click="navgetTo('/pages_user/user/address')" v-if="user.isShow==1">
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/address.png" mode=""></image>
 								<text class="text">收货地址</text>
 							</view>
 							<view class="item no-marin-bottom" @click="navgetTo('/pages_user/user/integral')">
-								<image src="../../static/images/integral.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/integral.png" mode=""></image>
 								<text class="text">积分管理</text>
 							</view>
 							<view class="item no-marin-bottom"  @click="navgetTo('/pages_shopping/shopping/myCoupon')">
-								<image src="../../static/images/mycoupon.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/mycoupon.png" mode=""></image>
 								<text class="text">优惠券</text>
 							</view>
 							<view class="item no-marin-bottom" @click="navgetTo('/pages_user/user/storeProductRelation')">
-								<image src="../../static/images/service_file.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/footprint.png" mode=""></image>
 								<text class="text">我的足迹</text>
 							</view>
 							<view class="item no-marin-bottom" @click="openH5('/h5/userAgreement')">
-								<image src="../../static/images/service_file.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/service_file.png" mode=""></image>
 								<text class="text">用户协议</text>
 							</view>
 							<view class="item no-marin-bottom align-top"  @click="openH5('/h5/privacyPolicy')">
-								<image src="../../static/images/advice.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/advice.png" mode=""></image>
 								<text class="text">隐私保护</text>
 							</view>
 							<view class="item no-marin-bottom">
-								<image src="../../static/images/customer1.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/customer1.png" mode=""></image>
 								<text class="text">专属客服</text>
 								<button class="contact-btn" open-type="contact"></button>
 							</view>
 							<!-- <view v-if="user.isPromoter==0" class="item no-marin-bottom"  @click="navgetTo('/pages_user/user/userTuiAdd')">
-								<image src="../../static/images/my_promotion.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/my_promotion.png" mode=""></image>
 								<text class="text">申请健康大使</text>
 							</view> -->
-							<view v-if="user.isPromoter==1" class="item no-marin-bottom"  @click="navgetTo('/pages_user/user/userTui')">
-								<image src="../../static/images/my_promotion.png" mode=""></image>
+							<!-- <view v-if="user.isPromoter==1" class="item no-marin-bottom"  @click="navgetTo('/pages_user/user/userTui')">
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/my_promotion.png" mode=""></image>
 								<text class="text">我的推广</text>
-							</view>
+							</view> -->
 							<view class="item no-marin-bottom"  @click="navgetTo('/pages/home/cert')">
-								<image src="../../static/images/service_file.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/qualification.png" mode=""></image>
 								<text class="text">资质证书</text>
 							</view>
 	
 							<view class="item no-marin-bottom" @click="toManager()">
-								<image src="../../static/images/sale_file.png" mode=""></image>
-								<text class="text">销售管理</text>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/Document.png" mode=""></image>
+								<text class="text">制单管理</text>
 							</view>
-							 
+							 <view class="item no-marin-bottom" @click="toManagerCourse()">
+							 	<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/sale_file.png" mode=""></image>
+							 	<text class="text">销售管理</text>
+							 </view>
 						</view>
 					</view>
 				</view>
@@ -157,18 +140,18 @@
 					<image src="https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20221125/71ddd95044bb46d5b27e19a5f61cf5ab.png"></image>
 					<view class="tel_btn" @click="callService()"></view>
 				</view> -->
+				<view style="padding-bottom: 20rpx;" v-if="UserInfo">
+					<view @tap="loginOUt" class="log-out x-c" >退出登录</view>
+				</view>
 				<view class="like-product">
 					<likeProduct  ref="product" />
 				</view>
 				
 				<!-- 退出登录按钮 -->
-				<view style="padding-bottom: 20rpx;">
-					<view @tap="loginOUt" class="log-out x-c" >退出登录</view>
-				</view>
+				
 			</view>
 			
 		</view>
-		
 	</view>
 </template>
 
@@ -191,21 +174,33 @@
 					isWeixinAuth:0,
 					phone:"",
 					nickname:"用户昵称",
-					avatarUrl:"/static/images/detault_head.png"
+					avatarUrl:"https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/detault_head.png"
 				},
 				// 状态栏的高度
 				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
 				// 消息数量
-				msgNum: 0
+				msgNum: 0,
+				UserInfo:uni.getStorageSync('AppToken')
 			};
 		},
+		watch: {
+		    UserInfo() {
+		        return uni.getStorageSync('AppToken')
+		    }
+		},
 		onLoad() {
 			console.log("onload")
 		},
 		onShow() {
 			console.log("onshow")
-			this.getUserInfo();
-			this.getOrderCount();
+			this.UserInfo = uni.getStorageSync('AppToken') // 强制更新登录状态
+			if(this.UserInfo){
+				this.getUserInfo()
+			}else{
+				// this.isuser=true
+			}
+			// this.getUserInfo();
+			// this.getOrderCount();
 		},
 		onReachBottom() {
 			console.log("onReachBottom")
@@ -255,6 +250,19 @@
 					})
 				}
 				
+			},
+			toManagerCourse(){
+				if(uni.getStorageSync('ManageToken')){
+					uni.navigateTo({
+						url: '/pages_manage/index'
+					})
+				}
+				else{
+					uni.navigateTo({
+						url: '/pages_manage/login'
+					})
+				}
+				
 			},
 			openH5(url){
 				var requestPath = uni.getStorageSync('requestPath');
@@ -313,7 +321,7 @@
 		width: 100%;
 		height: 494upx;
 		position: relative;
-		background-image: url(../../static/images/personl_top_bg.png);
+		background-image: url(https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/personl_top_bg.png);
 		background-repeat: repeat-x;
 		background-size: 40upx 100%;
 		.top-inner{

+ 0 - 9
pages/user/test.vue

@@ -1,9 +0,0 @@
-<template>
-	<web-view src="https://www.baidu.com/"></web-view>
-</template>
-
-<script>
-</script>
-
-<style>
-</style>

+ 2 - 3
pages_company/coupon.vue

@@ -12,10 +12,9 @@
 			</scroll-view>
 		</view>
 	</view>
-	<!-- <image src="/static/images/banner_coupon.png" mode="widthFix" class="tui-coupon-banner"></image> -->
     <view class="tui-coupon-list">
       <view class="tui-coupon-item tui-top20" v-for="(item, index) in couponsList" :key="index">
-         <image src="/static/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
+         <image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
 		<view class="tui-coupon-item-left">
           <view class="tui-coupon-price-box" :class="{ 'tui-color-grey': item.receiveCount>0 }">
             <view class="tui-coupon-price-sign">¥</view>
@@ -49,7 +48,7 @@
 	<Loading :loaded="loadend" :loading="loading"></Loading>
 	<!--暂无优惠券-->
 	<view v-if="couponsList.length == 0 && page > 1" class="no-data-box" >
-		<image src="/static/images/no_data.png" mode="aspectFit"></image>
+		<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png" mode="aspectFit"></image>
 		<view class="empty-title">暂无数据</view>
 	</view>
   </view>

+ 1 - 1
pages_company/couponDetails.vue

@@ -2,7 +2,7 @@
   <view class="container">
     <view class="tui-coupon-list">
       <view class="tui-coupon-item tui-top20"  >
-         <image src="/static/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
+         <image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
 		<view class="tui-coupon-item-left">
           <view class="tui-coupon-price-box"  >
             <view class="tui-coupon-price-sign">¥</view>

+ 7 - 7
pages_company/index.vue

@@ -17,31 +17,31 @@
 				<view class="title">常用工具</view>
 				<view class="tools-list">
 					<view class="item" @click="toCreateOrder()">
-						<image src="../static/images/order.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/order.png" mode=""></image>
 						<text class="text">商品制单</text>
 					</view>
 					<view class="item" @click="toCreateCoupon()">
-						<image src="../static/images/icon_coupon.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/icon_coupon.png" mode=""></image>
 						<text class="text">制单优惠券</text>
 					</view>
 					<view class="item" @click="toPay()">
-						<image src="../static/images/money.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/money.png" mode=""></image>
 						<text class="text">微信收款</text>
 					</view>
 					<view class="item" @click="alipay()">
-						<image src="../static/images/money.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/money.png" mode=""></image>
 						<text class="text">支付宝收款</text>
 					</view>
 					<view class="item" @click="toOrder()">
-						<image src="../static/images/order.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/order.png" mode=""></image>
 						<text class="text">我的订单</text>
 					</view>
 					<view class="item" @click="toPackage()">
-						<image src="../static/images/package.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/package.png" mode=""></image>
 						<text class="text">商品套餐</text>
 					</view>
 					<view class="item" @click="toCoupon()">
-						<image src="../static/images/icon_coupon.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/icon_coupon.png" mode=""></image>
 						<text class="text">套餐优惠券</text>
 					</view>
 					 

+ 3 - 3
pages_company/order/cart.vue

@@ -22,12 +22,12 @@
 						</view>
 						<view class="num-box">
 							<view class="img-box" @click="delNum(item)">
-								<image v-if="item.cartNum <= 1" src="../../static/images/jian.png" mode=""></image>
-								<image v-else src="../../static/images/jian2.png" mode=""></image>
+								<image v-if="item.cartNum <= 1" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/jian.png" mode=""></image>
+								<image v-else src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/jian2.png" mode=""></image>
 							</view>
 							<input type="text"  @change="changeNum($event,item)" :value="item.cartNum"   />
 							<view class="img-box" @click="addNum(item)">
-								<image src="../../static/images/add.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/add.png" mode=""></image>
 							</view>
 						</view>
 					</view>

+ 19 - 6
pages_company/order/confirmCompanyOrder.vue

@@ -55,6 +55,7 @@
 		</view>
 		<modal v-if="inputShow" title="实收金额" confirm-text="保存" cancel-text="取消" @cancel="cancelUpdateMoney" @confirm="confirmUpdateMoney">
 			<input type="text" v-model="inputTxt" placeholder="请输入实收金额" class="intxt" maxlength="8" />
+			<input type="text" v-model="payAmount" placeholder="请输入货到付款金额" class="intxt pay_type" maxlength="8" />
 		</modal>
 	</view>
 </template>
@@ -72,7 +73,8 @@
 					totalPrice:0.00,
 				},
 				carts:[],
-				
+				isAgreement:false,
+				payAmount:null
 			}
 		},
 		onLoad(option) {
@@ -83,7 +85,7 @@
 		//发送给朋友
 		onShareAppMessage(res) {
 			return {
-				title: "中康未来智慧药房-您的专属健康解决方案",
+				title: "中康智慧-您的专属健康解决方案",
 				path: '/pages_company/order/confirmOrder?orderKey='+this.orderKey,
 				imageUrl: '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
@@ -92,12 +94,15 @@
 		//分享到朋友圈
 		onShareTimeline(res) {
 			return {
-				title:"中康未来智慧药房-您的专属健康解决方案",
+				title:"中康智慧-您的专属健康解决方案",
 				query:'orderKey='+this.orderKey,
 				imageUrl:  '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 		},
 		methods: {
+			handleAgreement(){
+				this.isAgreement=!this.isAgreement
+			},
 			openUpdateMoney(){
 				console.log(1)
 				this.inputShow = true
@@ -106,9 +111,14 @@
 				this.inputShow = false
 			},
 			confirmUpdateMoney(){
-				if(parseFloat(this.inputTxt)>0){
+				console.log(parseFloat(this.inputTxt) )
+				console.log(parseFloat(this.payAmount) )
+				if(parseFloat(this.inputTxt)>0||parseFloat(this.payAmount)>0){
 					var that=this;
-					var data={createOrderKey:this.orderKey,token:uni.getStorageSync('CompanyUserToken'),money:this.inputTxt}
+					if(this.inputTxt==0){
+						this.inputTxt=this.price.totalPrice.toFixed(2)
+					}
+					var data={createOrderKey:this.orderKey,token:uni.getStorageSync('CompanyUserToken'),money:this.inputTxt,payAmount:this.payAmount}
 					updateSalseOrderMoney(data).then(
 						res => {
 							if(res.code==200){
@@ -128,7 +138,7 @@
 				else{
 					uni.showToast({
 						icon:'none',
-						title: "价格应大于0",
+						title: "必须其中一个金额大于0",
 					});
 				}
 			},
@@ -168,6 +178,9 @@
 </script>
 
 <style lang="scss">
+	.pay_type{
+		margin-top: 20rpx;
+	}
 	.inner-box{
 		padding: 20upx 20upx 140upx;
 		 

+ 2 - 2
pages_company/order/confirmOrder.vue

@@ -50,7 +50,7 @@
 		</view>
 		<view class="message-box" v-if="messageShow">
 			<view class="left">
-				<image src="/static/images/close24.png" mode="" @click="closeOrder()" ></image>
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/close24.png" mode="" @click="closeOrder()" ></image>
 				<view class="text ellipsis">您有{{count0}}个待支付订单</view>
 			</view>
 			<view class="btn" @click="showOrder()">查看</view>
@@ -145,7 +145,7 @@
 							res => {
 								if(res.code==200){
 									uni.navigateTo({
-										url: '/pages/shopping/confirmCreateOrder?type=buy&cartIds='+res.cartIds.toString()+"&companyId="+res.companyId+"&companyUserId="+res.companyUserId+"&createOrderKey="+this.orderKey
+										url: '/pages_shopping/shopping/confirmCreateOrder?type=buy&cartIds='+res.cartIds.toString()+"&companyId="+res.companyId+"&companyUserId="+res.companyUserId+"&createOrderKey="+this.orderKey
 									})
 								}else{
 									uni.showToast({

+ 2 - 3
pages_company/order/coupon.vue

@@ -1,9 +1,8 @@
 <template>
   <view ref="container">
-	<!-- <image src="/static/images/banner_coupon.png" mode="widthFix" class="tui-coupon-banner"></image> -->
     <view class="tui-coupon-list">
       <view class="tui-coupon-item tui-top20" v-for="(item, index) in couponsList" :key="index">
-         <image src="/static/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
+         <image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/bg_coupon_3x.png" class="tui-coupon-bg" mode="widthFix"></image>
 		<view class="tui-coupon-item-left">
           <view class="tui-coupon-price-box" :class="{ 'tui-color-grey': item.receiveCount>0 }">
             <view class="tui-coupon-price-sign">¥</view>
@@ -37,7 +36,7 @@
 	<Loading :loaded="loadend" :loading="loading"></Loading>
 	<!--暂无优惠券-->
 	<view v-if="couponsList.length == 0 && page > 1" class="no-data-box" >
-		<image src="/static/images/no_data.png" mode="aspectFit"></image>
+		<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png" mode="aspectFit"></image>
 		<view class="empty-title">暂无数据</view>
 	</view>
   </view>

+ 11 - 11
pages_company/order/productDetails.vue

@@ -39,7 +39,7 @@
 				{{product.productInfo}}
 			</view>
 			<view class="safe-box">
-				<image src="../../static/images/safe.png" mode=""></image>
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/safe.png" mode=""></image>
 				<text class="text">免邮发货</text>
 				<view class="line"></view>
 				<text class="text">药师服务</text>
@@ -52,7 +52,7 @@
 			<view class="left">
 				<!-- <view class="head-box">
 					<view class="head" v-for="(item,j) in 5" :key="j">
-						<image src="../../static/images/head.jpg" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/head.jpg" mode=""></image>
 					</view>
 				</view> -->
 				<view class="num-box">
@@ -83,17 +83,17 @@
 		<view class="btn-foot">
 			<view class="menu-box">
 				<view class="item" @click="goHome">
-					<image src="../../static/images/back_home.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/back_home.png" mode=""></image>
 					<text class="label">首页</text>
 				</view>
 				<view class="item" style="position: relative;">
-					<image src="../../static/images/consult_small.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/consult_small.png" mode=""></image>
 					<text class="label">咨询</text>
 					<button class="contact-btn" open-type="contact"></button>
 				</view>
 				<view class="item" @click="navgetTo('./cart')">
 					<uni-badge size="small" :text="cartCount" absolute="rightTop" type="error">
-						<image src="../../static/images/cart36.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/cart36.png" mode=""></image>
 					</uni-badge>
 					<text class="label">购物车</text>
 				</view>
@@ -142,12 +142,12 @@
 					<view class="label">数量</view>
 					<view class="num-box">
 						<view class="img-box" @click="lessNum()">
-							<image v-if="specNum <= 1" src="../../static/images/jian.png" mode=""></image>
-							<image v-else src="../../static/images/jian2.png" mode=""></image>
+							<image v-if="specNum <= 1" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/jian.png" mode=""></image>
+							<image v-else src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/jian2.png" mode=""></image>
 						</view>
 						<input type="text" @change="changeNum" v-model="specNum"    />
 						<view class="img-box" @click="addNum()">
-							<image src="../../static/images/add.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/add.png" mode=""></image>
 						</view>
 					</view>
 				</view>
@@ -445,7 +445,7 @@
 			left: 0;
 			bottom: 0;
 			z-index: 9;
-			background-image: url(../../static/images/black_mask.png);
+			background-image: url(https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/black_mask.png);
 			background-size: 20upx 44upx;
 			background-repeat: repeat-x;
 		}
@@ -729,12 +729,12 @@
 					text-align: center;
 				}
 			}
-			/deep/.uni-badge--x{
+			:deep(.uni-badge--x){
 				display: flex;
 				align-items: center;
 				justify-content: center;
 			}
-			/deep/.uni-badge{
+			:deep(.uni-badge){
 				border: none;
 				background-color: #FF3636;
 				font-family: Roboto;

+ 15 - 13
pages_company/order/productList.vue

@@ -4,13 +4,13 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" @confirm="goSearch"   :value="form.productName" placeholder="输入药品名称" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 				<view class="icon-search">
-					<image @click="showChange(2)" v-if="showType==1"  src="../../static/images/search1.png" mode=""></image>
-					<image @click="showChange(1)" v-if="showType==2"  src="../../static/images/search2.png" mode=""></image>
-					<image @click="openCart()"   src="../../static/images/carts.png" mode=""></image>
+					<image @click="showChange(2)" v-if="showType==1"  src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search1.png" mode=""></image>
+					<image @click="showChange(1)" v-if="showType==2"  src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search2.png" mode=""></image>
+					<image @click="openCart()"   src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/carts.png" mode=""></image>
 				</view>
 			</view>
 			<!-- 排序框 -->
@@ -21,19 +21,19 @@
 				<view class="item" @click="searchChange('2')">
 					<text class="label">价格</text>
 					<view class="sort-img">
-						<image v-if="form.priceOrder==null||form.priceOrder=='desc'" src="../../static/images/price_arrow_up.png" mode="" @click="priceUp(true)"></image>
-						<image v-if="form.priceOrder=='asc'" src="../../static/images/price_arrow_up2.png" mode="" @click="priceUp(false)"></image>
-						<image v-if="form.priceOrder==null||form.priceOrder=='asc'" src="../../static/images/price_arrow_down.png" mode="" @click="priceDown(true)"></image>
-						<image v-if="form.priceOrder=='desc'" src="../../static/images/price_arrow_down2.png" mode="" @click="priceDown(false)"></image>
+						<image v-if="form.priceOrder==null||form.priceOrder=='desc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_up.png" mode="" @click="priceUp(true)"></image>
+						<image v-if="form.priceOrder=='asc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_up2.png" mode="" @click="priceUp(false)"></image>
+						<image v-if="form.priceOrder==null||form.priceOrder=='asc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_down.png" mode="" @click="priceDown(true)"></image>
+						<image v-if="form.priceOrder=='desc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_down2.png" mode="" @click="priceDown(false)"></image>
 					</view>
 				</view>
 				<view class="item" @click="searchChange('3')">
 					<text class="label">销量</text>
 					<view class="sort-img">
-						<image v-if="form.salesOrder==null||form.salesOrder=='desc'" src="../../static/images/price_arrow_up.png" mode="" @click="saleUp(true)"></image>
-						<image v-if="form.salesOrder=='asc'" src="../../static/images/price_arrow_up2.png" mode="" @click="saleUp(false)"></image>
-						<image v-if="form.salesOrder==null||form.salesOrder=='asc'" src="../../static/images/price_arrow_down.png" mode="" @click="saleDown(true)"></image>
-						<image v-if="form.salesOrder=='desc'" src="../../static/images/price_arrow_down2.png" mode="" @click="saleDown(false)"></image>
+						<image v-if="form.salesOrder==null||form.salesOrder=='desc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_up.png" mode="" @click="saleUp(true)"></image>
+						<image v-if="form.salesOrder=='asc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_up2.png" mode="" @click="saleUp(false)"></image>
+						<image v-if="form.salesOrder==null||form.salesOrder=='asc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_down.png" mode="" @click="saleDown(true)"></image>
+						<image v-if="form.salesOrder=='desc'" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/price_arrow_down2.png" mode="" @click="saleDown(false)"></image>
 					</view>
 				</view>
 				<view class="item" :class="form.newOrder=='desc'?'active':''" @click="searchChange('4')">
@@ -99,6 +99,7 @@
 					priceOrder:null,
 					salesOrder:null,
 					productName:"",
+					token:''
 				},
 				mescroll:null,
 				// 上拉加载的配置
@@ -111,7 +112,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png',
 						tip: '暂无数据'
 					},
 					textNoMore:"已经到底了",
@@ -192,6 +193,7 @@
 				var that = this;
 				this.form.page=page.num;
 				this.form.pageSize=page.size;
+				this.form.token=uni.getStorageSync('CompanyUserToken');
 				getSalesProducts(this.form).then(res => {
 					if(res.code==200){
 						//设置列表数据

+ 3 - 3
pages_company/order/productShowDetails.vue

@@ -40,7 +40,7 @@
 				{{product.productInfo}}
 			</view>
 			<view class="safe-box">
-				<image src="../../static/images/safe.png" mode=""></image>
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/safe.png" mode=""></image>
 				<text class="text">免邮发货</text>
 				<view class="line"></view>
 				<text class="text">药师服务</text>
@@ -53,7 +53,7 @@
 			<view class="left">
 				<!-- <view class="head-box">
 					<view class="head" v-for="(item,j) in 5" :key="j">
-						<image src="../../static/images/head.jpg" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/head.jpg" mode=""></image>
 					</view>
 				</view> -->
 				<view class="num-box">
@@ -199,7 +199,7 @@
 			left: 0;
 			bottom: 0;
 			z-index: 9;
-			background-image: url(../../static/images/black_mask.png);
+			background-image: url(https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/black_mask.png);
 			background-size: 20upx 44upx;
 			background-repeat: repeat-x;
 		}

+ 3 - 3
pages_company/storeOrder.vue

@@ -2,7 +2,7 @@
 	<view>
 		<view class="search-cont">
 			<view class="inner">
-				<image class="icon-search" src="/static/images/search.png" mode=""></image>
+				<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 				<input type="text" value="" placeholder="输入订单号" confirm-type="搜索" @confirm="goSearch"   placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 			</view>
 		</view>
@@ -83,7 +83,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png',
 						tip: '暂无数据'
 					}
 				},
@@ -251,7 +251,7 @@
 						font-family: PingFang SC;
 						font-weight: 500;
 						color: #FFFFFF;
-						background-image: url(../static/images/recom.png);
+						background-image: url(https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/recom.png);
 						background-repeat: no-repeat;
 						background-size: 100% 100%;
 						margin-right: 8upx;

+ 11 - 11
pages_company/storeOrderDetail.vue

@@ -2,13 +2,13 @@
 	<view>
 		<view class="top-cont">
 			<!-- 背景图片 -->
-			<image class="bg" src="/static/images/order_top_bg.png" mode=""></image>
+			<image class="bg" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/order_top_bg.png" mode=""></image>
 			<view class="top-inner">			
 				<!-- 这里是状态栏 -->
 				<view class="fixed-top-box">
 					<view class="status_bar" :style="{height: statusBarHeight}"></view>
 					<view class="back-box" @click="back">
-						<image src="../static/images/back_white.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/back_white.png" mode=""></image>
 						<text class="title">订单详情</text>
 						<text></text>
 					</view>
@@ -23,7 +23,7 @@
 					<!-- 待付款 -->
 					<view v-if="order.status == 0" class="inner">
 						<view class="img-box">
-							<image src="/static/images/pag96.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/pag96.png" mode=""></image>
 						</view>
 						<view class="status-box">
 							<text class="status">待付款</text>
@@ -33,7 +33,7 @@
 					<!-- 待发货 -->
 					<view v-if="order.status == 1" class="inner">
 						<view class="img-box">
-							<image src="/static/images/pag96.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/pag96.png" mode=""></image>
 						</view>
 						<view class="status-box">
 							<text class="status">待发货</text>
@@ -43,7 +43,7 @@
 					<!-- 已发货、待收货 -->
 					<view v-if="order.status == 2" class="inner">
 						<view class="img-box">
-							<image src="/static/images/receipt.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/receipt.png" mode=""></image>
 						</view>
 						<view class="status-box">
 							<text class="status">待收货</text>
@@ -53,7 +53,7 @@
 					<!-- 已完成 -->
 					<view v-if="order.status == 3" class="inner">
 						<view class="img-box">
-							<image src="/static/images/finish96.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/finish96.png" mode=""></image>
 						</view>
 						<view class="status-box">
 							<text class="status">已完成</text>
@@ -64,7 +64,7 @@
 					<!--交易取消 -->
 					<view v-if="order.status == -3" class="inner">
 						<view class="img-box">
-							<image src="/static/images/close_trade.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/close_trade.png" mode=""></image>
 						</view>
 						<view class="status-box">
 							<text class="status">交易关闭</text>
@@ -73,7 +73,7 @@
 					</view>
 					<view v-if="order.status == -1" class="inner">
 						<view class="img-box">
-							<image src="/static/images/close_trade.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/close_trade.png" mode=""></image>
 						</view>
 						<view class="status-box">
 							<text class="status">申请售后</text>
@@ -82,7 +82,7 @@
 					</view>
 					<view v-if="order.status == -2" class="inner">
 						<view class="img-box">
-							<image src="/static/images/close_trade.png" mode=""></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/close_trade.png" mode=""></image>
 						</view>
 						<view class="status-box">
 							<text class="status">退款成功</text>
@@ -93,7 +93,7 @@
 				<!-- 下单人信息 -->
 				<view class="order-placer">
 					<view class="inner">
-						<image class="location" src="/static/images/location.png" mode=""></image>
+						<image class="location" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/location.png" mode=""></image>
 						<view class="info">
 							<view class="name-phone">
 								<text class="text">{{order.realName}}</text>
@@ -206,7 +206,7 @@
 							<text class="label">电子处方</text>
 							<view class="check-box" @click="showImg()">
 								<text class="text">查看</text>
-								<image src="/static/images/arrow4.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow4.png" mode=""></image>
 							</view>
 						</view>
 					</view>

+ 3 - 3
pages_company/storeProductPackage.vue

@@ -3,7 +3,7 @@
 		<view class="top-fixed">
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" @confirm="goSearch"   :value="form.title" placeholder="输入套餐名称" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -93,7 +93,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png',
 						tip: '暂无数据'
 					}
 				},
@@ -291,7 +291,7 @@
 						font-family: PingFang SC;
 						font-weight: 500;
 						color: #FFFFFF;
-						background-image: url(../static/images/recom.png);
+						background-image: url(https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/recom.png);
 						background-repeat: no-repeat;
 						background-size: 100% 100%;
 						margin-right: 8upx;

+ 10 - 8
pages_company/storeProductPackageDetails.vue

@@ -71,19 +71,20 @@
 		<!-- 图文详情 -->
 		<view class="det-box">
 			<view class="title">图文详情</view>
-			<view class="inner">
+			<!-- <view class="inner">
 				<view  v-html="package.content" style="font-size:0" ></view>
-			</view>
+			</view> -->
+			<view  v-html="package.content" ></view>
 		</view>
 		<!-- 底部按钮 -->
 		<view class="btn-foot">
 			<view class="menu-box">
 				<view class="item" @click="goHome">
-					<image src="/static/images/back_home.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/back_home.png" mode=""></image>
 					<text class="label">首页</text>
 				</view>
 				<view class="item" style="position: relative;">
-					<image src="/static/images/consult_small.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/consult_small.png" mode=""></image>
 					<text class="label">咨询</text>
 					<button class="contact-btn" open-type="contact"></button>
 				</view>
@@ -95,7 +96,7 @@
 		</view>
 		<view class="message-box" v-if="messageShow">
 			<view class="left">
-				<image src="/static/images/close24.png" mode="" @click="closeOrder()" ></image>
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/close24.png" mode="" @click="closeOrder()" ></image>
 				<view class="text ellipsis">您有{{count0}}个待支付订单</view>
 			</view>
 			<view class="btn" @click="showOrder()">查看</view>
@@ -207,6 +208,7 @@
 					res => {
 						if(res.code==200){
 							this.package=res.data;
+							console.log('详情',res.data)
 							if(this.package.images!=null){
 								this.banner=this.package.images.split(',')
 							}
@@ -282,7 +284,7 @@
 			left: 0;
 			bottom: 0;
 			z-index: 9;
-			background-image: url(/static/images/black_mask.png);
+			background-image: url(https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/black_mask.png);
 			background-size: 20upx 44upx;
 			background-repeat: repeat-x;
 		}
@@ -566,12 +568,12 @@
 					text-align: center;
 				}
 			}
-			/deep/.uni-badge--x{
+			:deep(.uni-badge--x){
 				display: flex;
 				align-items: center;
 				justify-content: center;
 			}
-			/deep/.uni-badge{
+			:deep(.uni-badge){
 				border: none;
 				background-color: #FF3636;
 				font-family: Roboto;

+ 205 - 0
pages_course/becomeSale.vue

@@ -0,0 +1,205 @@
+<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/manageCompany.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 = '';
+				 loginPage = '/pages_manage/login';
+				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/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>

+ 810 - 0
pages_course/becomeVIP.vue

@@ -0,0 +1,810 @@
+<template>
+	<view class="content hb column justify-center align-center bgf">
+		<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}}#</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="base-bg-orange colorf ptb20 plr40 radius60" 
+		v-if="(userInfos==null||userInfos=='')&&imgname=='乐氏本源'" @click="nato()">授权用户信息</view>
+		<view class="btns" v-else>
+			<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,checkUserInfo,editUser} from '@/api/courseLook'
+	export default {
+		data() {
+			return {
+				isVip: 0,
+				isWechat: false,
+				isLogin: false,
+				companyid:'',
+				companyUserId:'',
+				userInfo:{},
+				tagIds:[],
+				isbecomevip:0,
+				viptext:'申请成为会员',
+				userInfos:null,
+				userlogo:false,
+				userinfos:{
+					nickname:'',
+					avatar:""
+				},
+				headImg:'',
+				authType:0,//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://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://userapp.bainian1000y.cn/prod-api'//百年康城
+			// let path = 'https://userapp.drkzyy.cn/prod-api'//青岛市德瑞康
+			// let path = 'https://companyapp.gjh2024.com/apis'//金康键
+			uni.setStorageSync('requestPath',path)
+			if(uni.getStorageSync('userInfo')&&JSON.stringify(uni.getStorageSync('userInfo'))!='{}') {
+				this.userInfo = JSON.parse(uni.getStorageSync('userInfo'))
+			} else {
+				this.userInfo = {}
+			}
+			// this.userInfo=JSON.parse(uni.getStorageSync('userInfo')) || {};
+			//#ifdef MP-WEIXIN
+			let obj=uni.getStorageSync('TOKEN_WEXIN');
+			//#endif
+			// #ifdef H5
+			let obj=uni.getStorageSync('TOKEN_KEY');
+			// #endif
+			// let obj=uni.getStorageSync('AppToken');
+			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{
+				this.tagIds=option.tagids 
+				const arr =this.tagIds.split(",")
+				  .map(item => parseInt(item.trim(), 10))
+				  .filter(num => !isNaN(num)); // 过滤无效转换
+				  this.tagIds =arr
+				// console.log(this.tagIds); 
+			}
+			this.isWechat = String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger"
+			this.code = option.code
+				// #ifdef H5
+				if(this.code&&!this.isLogin) {
+					this.loginByMp()
+				}
+				// #endif
+				
+		},
+		onShow() {
+			if(uni.getStorageSync('userInfo')&&JSON.stringify(uni.getStorageSync('userInfo'))!='{}') {
+				this.userInfo = JSON.parse(uni.getStorageSync('userInfo'))
+			} else {
+				this.userInfo = {}
+			}
+			//#ifdef MP-WEIXIN
+			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.checkUserInfoA()
+			}
+			
+		},
+		methods: {
+			//检查用户昵称以及头像
+			checkUserInfoA(){
+				checkUserInfo().then(res=>{
+					if(res.code==200){
+						this.isLogin = true
+						this.userInfo= res.user
+						uni.setStorageSync('userInfo', JSON.stringify(res.user));
+						this.nameuser
+						if(this.nameuser==''){
+							this.userinfos.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: '您已成为会员!',
+						icon: 'none',
+						duration: 2000,
+					})
+				}else{
+					uni.showToast({
+						title: this.viptext,
+						icon: 'none',
+						duration: 2000,
+					})
+				}
+				
+			},
+			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()
+						}
+						// 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,
+										});
+									}
+								   
+								 })
+							}
+						})
+					})
+					.catch(err => {
+						uni.showToast({
+							icon:'none',
+							title: err,
+						});
+					})
+					 
+				} else {
+					uni.showToast({
+						title: '已拒绝授权',
+						icon: 'none',
+						duration: 2000,
+					})
+				}
+			},
+			getWechatCode() {
+				if (this.isWechat) {
+					// 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 === "") {
+
+						let urlPaths = local.split("/registerCourse");
+						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()
+					}
+				}else{
+					uni.showToast({
+						title: '请在微信浏览器中打开',
+						icon:'error'
+					})
+				}
+			},
+			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: "处理中..."
+				});
+				loginByMp({code:this.code}).then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							uni.setStorageSync('TOKEN_KEY', res.token);
+							uni.setStorageSync('userInfo', JSON.stringify(res.user));
+							this.userInfo= res.user
+							let beforLoginUrl = uni.getStorageSync('beforLoginPage');
+							this.isLogin = true
+							this.registerCourse()
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+						}
+					},
+					err => {}
+				);
+			},
+			// 成为会员
+			registerCourse() {
+				console.log(123333)
+				this.isVip = 0
+				// 确保从本地存储重新获取最新数据
+				  // if(uni.getStorageSync('userInfo')){
+				  // 	this.userInfo=JSON.parse(uni.getStorageSync('userInfo'));
+				  // }
+				  // if (!this.userInfo.userId) {
+				  // 	// 空值检查
+				  //   uni.showToast({ title: '用户未登录或信息不完整', icon: 'none' });
+				  //   return;
+				  // }
+				  if(this.tagIds==null){
+					  this.tagIds=""
+				  }
+				  // console.log(this.tagIds)
+				const data={
+					userId:this.userInfo.userId,
+					companyUserId:this.companyUserId,
+					companyId:this.companyid,
+					tagIds:this.tagIds,
+					projectId:this.projectId
+					}
+				if(this.isLogin) {
+					registerCourses(data).then(res=>{
+						if(res.code == 200) {
+							this.isVip = 1
+							this.isbecomevip=1
+							this.viptext='您已成为会员'
+							uni.showToast({
+								title: '注册成功',
+								icon:'none'
+							})
+						} else {
+							this.isbecomevip=1
+							// console.log(this.isbecomevip)
+							this.viptext=res.msg
+							uni.showToast({
+								icon:'none',
+								title: res.msg
+							})
+						}
+					})
+				} else {
+					// #ifdef H5
+					this.getWechatCode()
+					// #endif
+					
+				}
+			}
+		}
+	}
+</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;
+			width: 100%;
+			bottom: 44rpx;
+			text-align: center;
+			font-family: PingFang SC,PingFang SC;
+			font-weight: 500;
+			font-size: 12px;
+			color: #bbb;
+			transform: scale(0.8); 
+		}
+	.content {
+		image {
+			width: 300rpx;
+			height: 300rpx;
+		}
+	}
+	.bolds {
+		color: #999;
+		font-size: 16px;
+		height: auto;
+		line-height: inherit;
+		margin-bottom: 0;
+		width: 304px;
+		word-break: break-all;
+		text-align: center;
+		margin: 50rpx 0 100rpx 0;
+	}
+	.sure {
+		width: 500rpx;
+		background-color: #1777ff;
+		line-height: 88rpx;
+		text-align: center;
+		border-radius: 8rpx;
+		color: #fff;
+	}
+	.btns{
+		position: relative;
+		width: 630rpx;
+		height: 80rpx;
+		.author-btn{				
+			z-index:100;
+			position: absolute;
+			width: 630rpx;
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
+			background: #1777ff;
+			border-radius: 40rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: rgba(255, 255, 255, 1);
+		}
+	}
+</style>

+ 161 - 0
pages_course/reward.vue

@@ -0,0 +1,161 @@
+<template>
+	<view class="answerPopup-box bg">
+		<!-- 正确 -->
+		<image class="tipimg" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/course_answer_img.png"
+			mode="aspectFill"></image>
+		<view class="answerPopup-title">恭喜你,回答正确</view>
+		<view class="answerPopup-desc">您有一份奖励待领取哦</view>
+		<view class="answerPopup-btn" @click="handleReceive">领取</view>
+		<view class="footer-tips">重庆云联融智提供技术支持</view>
+	</view>
+</template>
+
+<script>
+	// import wx from 'jweixin-module';
+	import { initJssdk } from "@/utils/common.js"
+	export default {
+		data() {
+			return {
+				mchId:'',
+				packageInfo: ''
+			}
+		},
+		methods: {
+			handleReceive() {
+				this.packageInfo = uni.getStorageSync('receive_package') || ''
+				this.mchId = uni.getStorageSync('mchId') || ''
+				// this.initWXConfig(this.packageInfo)
+				this.$nextTick(()=>{
+					this.handleTest()
+				})
+			},
+			handleTest() {
+				const that = this
+				// console.log(that.mchId)
+				// console.log('wx3de90a39feb8107a',wx.getAccountInfoSync().miniProgram.appId)
+				// console.log(that.packageInfo)
+				if (wx.canIUse('requestMerchantTransfer')) {
+				  wx.requestMerchantTransfer({
+				    mchId:that.mchId,
+				    appId:wx.getAccountInfoSync().miniProgram.appId,
+				    package:that.packageInfo,
+				    success: (res) => {
+				    },
+				    fail: (res) => {
+				    },
+				  });
+				} else {
+				  wx.showModal({
+				    content: '你的微信版本过低,请更新至最新版本。',
+				    showCancel: false,
+				  });
+				}
+				// wx.ready(() => {
+				// 	// config信息验证后会执行ready方法,所有接口调用都必须在config之后
+				// 	wx.checkJsApi({
+				// 		jsApiList: ['requestMerchantTransfer'],
+				// 		success: function(res) {
+				// 			if (res.checkResult['requestMerchantTransfer']) {
+				// 				WeixinJSBridge.invoke('requestMerchantTransfer', {
+				// 						mchId: that.mchId,
+				// 						appId: appId,
+				// 						package: packageVal,
+				// 					},
+				// 					function(res) {
+				// 						if (res.err_msg === 'requestMerchantTransfer:ok') {
+				// 							// res.err_msg将在页面展示成功后返回应用时返回success,并不代表付款成功
+				// 						}
+				// 					}
+				// 				);
+				// 			} else {
+				// 				alert('你的微信版本过低,请更新至最新版本。');
+				// 			}
+				// 		}
+				// 	});
+				// });
+				// wx.error(function(res){
+				//   // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
+				// });
+			},
+			initWXConfig(packageVal) {
+				const isWechat = String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
+				if(isWechat) {
+					let url = window.location.href.split('#')[0]
+					initJssdk((data)=>{
+						this.handleTest(packageVal,data.appId,data.mchId)
+					},url)
+				} else {
+					uni.showToast({
+						title: '请在微信浏览器中打开'
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.footer-tips {
+		width: 100%;
+		position: absolute;
+		left: 0;
+		bottom: 14rpx;
+		text-align: center;
+		font-family: PingFang SC,PingFang SC;
+		font-weight: 500;
+		font-size: 12px;
+		color: #bbb;
+	}
+	.answerPopup {
+		&-box {
+			width: 100%;
+			height: 100vh;
+			background: linear-gradient(180deg, #FFFAF6 50%, #FEECD8 100%);
+			background-color: #fff;
+			font-weight: 400;
+			box-sizing: border-box;
+			position: relative;
+			@include u-flex(column, center, center);
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+	
+			.tipimg {
+				width: 206rpx;
+				height: 206rpx;
+				margin-bottom: 16rpx;
+			}
+		}
+	
+		&-title {
+			font-weight: 600;
+			font-size: 36rpx;
+			color: #222222;
+		}
+	
+		&-desc {
+			margin-top: 30rpx;
+			font-size: 28rpx;
+			color: #757575;
+		}
+	
+		&-btn {
+			width: 464rpx;
+			height: 84rpx;
+			margin-top: 10vh;
+			margin-bottom: 16vh;
+			background: #FF5C03;
+			border-radius: 42rpx;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #FFFFFF;
+			text-align: center;
+			line-height: 84rpx;
+		}
+	}
+</style>

+ 2446 - 0
pages_course/videovip.vue

@@ -0,0 +1,2446 @@
+<template>
+	<view class="content " >
+		<!-- <view class="header-nav" :style="{height: `calc(88rpx + ${statusBarHeight}px)`,paddingTop: statusBarHeight + 'px'}">
+			<u-icon name="arrow-left" size="28" @click="tosales" v-if="appToken"></u-icon>
+			<view class="header-title" :style="{width:menuButtonLeft + 'px',height:menuButtonH+'px',lineHeight:menuButtonH+'px'}">{{courseInfo.title}}</view>
+		</view> -->
+		<view class="video-box">
+			<image v-if="!isLogin || isAddKf!=1" class="video-poster" :src="courseInfo.imgUrl" mode="aspectFill">
+			</image>
+			<video 
+			@timeupdate="onTimeUpdate" 
+			@progress="progressChange" 
+			@error="videoErrorCallback" 
+			@play="getPlay"
+			@pause="getPause" 
+			@ended="getEnded" 
+			@fullscreenchange="fullscreenchange"
+			:title="courseInfo.title"
+			style="width: 100%;height: 420rpx;" 
+			:poster="poster"  
+			id="video-content-box"  
+			controls
+			:auto-pause-if-open-native="true"
+			:auto-pause-if-navigate="true"
+			:enable-progress-gesture="false" 
+			:show-progress="true"
+			:picture-in-picture-mode="[]"
+			:show-background-playback-button="false"
+			:src="videoUrl">
+				<!-- <cover-image v-if="courseLogo" :class="isFull?'logo-full':'logo'" :src="courseLogo" mode="widthFix"></cover-image> -->
+			</video>
+		</view>
+		<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="title-content" id="title-content">
+			<!-- 答题时展示小节课程名,其他展示课程名 -->
+			<!-- 小节课程名 -->
+			<view class="subtitlebox " v-if="isLogin&&isAddKf==1">
+				{{courseInfo.title}}
+			</view>
+			<!-- 课程名字 -->
+			<view class="miantitlebox" v-else>
+				{{courseInfo.courseName}}
+			</view>
+		</view>
+		<scroll-view class="scroll-view" :style="{height: height}" :scroll-top="scrollTop" scroll-y="true">
+			<!-- 介绍 -->
+			<view class="descbox">
+				<template v-if="!isLogin||isAddKf!=1">
+					<view class="descbox-title">{{courseInfo.title}}</view>
+					<view class="descbox-info">
+						<!-- <view class="descbox-info-l">
+							<view>{{courseInfo.views}}次播放</view>
+							<view class="descbox-info-time">总时长:{{courseInfo.totalDuration}}</view>
+						</view> -->
+						<view class="descbox-info-r expand" v-if="textHeight > 21">
+							<text @click="handleExpand">{{isExpand ? '收起简介' : '展开简介'}}</text>
+							<image :src="imgPath+'/app/image/course_arrow_up_icon.png'" v-show="isExpand"></image>
+							<image :src="imgPath+'/app/image/course_arrow_down_icon.png'" v-show="!isExpand"></image>
+						</view>
+					</view>
+				</template>
+				<view class="descbox-desc" id="descbox-desc" :style="{height: isExpand ? 'auto': '42rpx'}">
+					<text>{{courseInfo.description==null?'暂无简介':courseInfo.description}}</text>
+					<view :class="isExpand ? 'expand': 'expand expand-ab'" v-if="isLogin&&isAddKf==1&&textHeight > 21">
+						<text @click="handleExpand">{{isExpand ? '收起简介' : '展开简介'}}</text>
+						<image :src="imgPath+'/app/image/course_arrow_up_icon.png'" v-show="isExpand"></image>
+						<image :src="imgPath+'/app/image/course_arrow_down_icon.png'" v-show="!isExpand"></image>
+					</view>
+				</view>
+			</view>
+			<!-- 无效或者已过期 -->
+			<view class="nocourse" v-if="msg">
+				<image :src="imgPath+'/app/image/course_expiration_img.png'" mode="widthFix"></image>
+				<view>{{msg}}</view>
+			</view>
+			<!-- 问题 -->
+			<view class="ques-content" v-if="isLogin&&isAddKf==1">
+				<view class="ques-content-tit" v-if="isLogin &&!isquestion" >问答题</view>
+				<view v-for="(item,index) in quesList" :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 class="fs40">{{item.title}}</text>
+					</view>
+					<view
+					:class="isAnswer(item,option.name) ?'ques-option ques-option-active':'ques-option'" 
+					v-for="(option,idx) in item.questionOption" 
+					:key="idx" 
+					@click="handleAnswer(item,option)">
+						<view class="fs40">
+							{{numberToLetter(idx)}}.
+						</view>
+						<view class="fs40">{{option.name}}</view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<!-- 线路 -->
+		<!-- <view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1">
+			<image :src="imgPath+'/app/image/changePlayer-icon.png'"></image>
+			<text>线路{{lineIndex + 1 | numberToChinese}}</text>
+		</view> -->
+		<!-- 线路弹窗 -->
+		<!-- <uni-popup ref="popup" type="bottom"  class="full-width-popup">
+			<view class="popupbox">
+				<view class="popupbox-head">
+					<text>线路选择</text>
+					<image class="close-icon" :src="imgPath+'/app/image/tc_close_icon.png'" mode="aspectFill" @click="close">
+					</image>
+				</view>
+				<view class="popupbox-content">
+					<view :class="lineIndex == index ? 'line-item line-active': 'line-item'"
+						v-for="(it,index) in lineList" :key="index" @click="handleLine(index)">
+						线路{{index + 1 | numberToChinese}}</view>
+				</view>
+			</view>
+		</uni-popup> -->
+		<!-- 温馨提示弹窗 -->
+		<u-popup  :show="tipsPopup" mode="center"  :closeOnClickOverlay='true' @close='tipsPopup=!tipsPopup' 
+		:safeAreaInsetBottom='false' round='12'>
+			<view class="tipsPopup-mask">
+				<image class="red_envelope_top" :src="imgPath+'/app/image/red_envelope_img.png'" mode="aspectFill"></image>
+				<view class="tipsPopup">
+					<image class="tipsPopup-close" :src="imgPath+'/app/image/course_close_white_icon.png'" mode="aspectFill"
+						@click="closeTipsPop"></image>
+					<view class="tipsPopup-line">
+						<view class="tipsPopup-box">
+							<view class="tipsPopup-head">
+								<image class="tipsPopup-head-title" :src="imgPath+'/app/image/tips_title_img.png'"
+									mode="widthFix"></image>
+							</view>
+							<view class="tipsPopup-content">
+								<view class="tipsPopup-content-title">亲爱的用户,</view>
+								<view>您已经观看课程{{timepath}}的时间了,请注意休息并保持专注。</view>
+							</view>
+							<view class="tipsPopup-btn-box">
+								<view class="tipsPopup-btn" @click="closeTipsPop">继续观看领奖励</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+		<!-- 答题弹窗 -->
+		<u-popup :show="answerPopup" mode="center" @close="closepop()" @open="open" closeOnClickOverlay
+		:safeAreaInsetBottom='false' round='12'>
+			<view :class="errTitle == '恭喜你,回答正确' ? 'answerPopup-box bg':'answerPopup-box'">
+				<!-- 正确 -->
+				<image class="tipimg" v-if="errTitle == '恭喜你,回答正确'" :src="imgPath+'/app/image/course_answer_img.png'"
+					mode="aspectFill"></image>
+				<!-- 错误 -->
+				<image class="tipimg" v-else :src="imgPath+'/app/image/course_answer_incorrectly_img.png'" mode="aspectFill">
+				</image>
+				<view class="answerPopup-title">{{errTitle}}</view>
+				<view class="answerPopup-desc" v-html="errDesc"></view>
+				<!-- 选择奖励 -->
+				<!-- 错误题目 -->
+				<view class="errQuesbox" v-if="errQues&&errQues.length>0">
+					<view class="errQuesbox-item textOne" v-for="(it,index) in errQues" :key="index">{{it.title}}</view>
+				</view>
+				<view class="answerPopup-btn" v-if="errTitle == '恭喜你,回答正确'" @click="closeAnswerPopup">点击领取红包</view>
+				<view class="tipsPopup-btn-box" v-else
+					:style="{marginTop: errQues&&errQues.length>0 ? '40rpx':'54rpx'}">
+					<view class="tipsPopup-btn" @click="closeAnswerPopup">{{remain > 0 ? '重新答题': '确认'}}</view>
+				</view>
+			</view>
+		</u-popup>
+		<!-- 客服二维码弹窗 -->
+		<u-popup :show="kfPopup" mode="center" :mask-click="false" round='12' @close="kefpop">
+			<view class="kfqrcode-box">
+				<view class="justify-start align-center fs24 base-color-9">
+					<view>{{nameuser}}#</view>
+					<view>{{userInfo.userId}}</view>
+				</view>
+				<view>请添加客服</view>
+				<image class="kfqrcode" :src="qrcode" show-menu-by-longpress="true" mode="aspectFit"></image>
+				<!-- <view v-show="qrcodeMsg" style="margin-top: 30rpx;" v-html="qrcodeMsg"></view> -->
+				<!-- <image class="kfqrcode-close" :src="imgPath+'/app/image/course_close_white_icon.png'" mode="aspectFill"
+					@click="closeKFPop"></image> -->
+			</view>
+		</u-popup>
+		<u-popup :show="timepop" mode="center" round='12'>
+			<view class="timepopbox center column">
+				<view class="fs40 bold ">不在看课时间范围内</view>
+				<view class="mtb20">看课时间</view>
+				<view >{{videocont.startDateTime}}</view>
+				<view>至</view>
+				<view >{{videocont.endDateTime}}</view>
+				<view class="base-bg-orange colorf p20 radius50 mt20"
+				@click="getH5CourseVideoDetails">刷新时间</view>
+			</view>
+		</u-popup>
+		<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="fs32 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="fs32 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>
+		<view class="footer-tips">重庆云联融智提供技术支持</view>
+		<!-- footer -->
+		<view class="footer" v-if="videoId">
+			<view class="btns"  >
+				<!-- <button
+					class="author-btn"
+					open-type="getphonenumber" 
+					@getphonenumber="phoneLogin"  
+					>{{isLogin&&isAddKf==1 ? '提交答案领取奖励' : '立即学习'}}</button> -->
+					<button
+						class="author-btn"
+						open-type="getPhoneNumber"
+						@getphonenumber="phoneLogin"  v-if="!isquestion&&authType==1">{{isLogin&&isAddKf==1 ? '提交答案领取奖励' : '立即学习'}}</button>
+						<button
+							class="author-btn"
+							open-type="getUserInfo" :disabled="userdisabled"
+							@getuserinfo="userInfologin"  v-if="authType==0&&!isquestion">{{isLogin&&isAddKf==1 ? '提交答案领取奖励' : '立即学习'}}</button>
+					<!-- <view class="author-btn" @click="phoneLogin"> {{isLogin&&isAddKf==1 ? '提交答案领取奖励' : '立即学习'}}</view> -->
+				<button class="author-btn" v-if="isLogin &&!isquestion" 
+				@click="submit">{{isLogin&&isAddKf==1 ?'提交答案领取奖励' : '立即学习'}}</button>
+			</view>
+		</view>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="24"
+		:loading-text="loadingtext"></u-loading-page>
+	</view>
+</template>
+
+<script>
+	import { generateRandomString} from "@/utils/common.js"
+	import dayjs from 'dayjs';
+	import {
+		getErrMsg,
+		getH5CourseByVideoId,
+		getH5CourseVideoDetails,
+		courseAnswer,
+		getFinishCourseVideo,
+		getIsAddKf,
+		getInternetTraffic,
+		getIntegralByH5Video,
+		sendReward,
+		getRealLink,
+		checkUserInfo,
+		editUser,
+		loginByMiniApp
+	} from "@/api/courseLook.js"
+	export default {
+		data() {
+			return {
+				viewload:true,
+				loadingtext:"数据加载中...",
+				baseUrl:uni.getStorageSync('requestPath'),
+				// 1 红包 2 积分
+				rewardType: [{
+					name: '红包奖励',
+					value: 1
+				}, {
+					name: '积分奖励',
+					value: 2
+				}],
+				currentReward: 1,
+				player: null,
+				loading: true,
+				progress: 0,
+				code: null,
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+				scrollTop: 0,
+				height: '0px',
+				isLogin: false,
+				videoUrl: "",
+				videoId: "",
+				//现在的时长
+				playTime: 0,
+				//总时长
+				duration: 0,
+				playDuration: 0,
+				// 用于续播
+				playDurationSeek: 0,
+				// 温馨提醒时间节点,
+				tipsTime: 0,
+				tipsOpen: false,
+				config: {},
+				courseInfo: {},
+				quesList: [],
+				lineList: [],
+				// 错题
+				errQues: [],
+				// 答题机会
+				remain: 0,
+				errTitle: "",
+				errDesc: "",
+				showPlay: true,
+				showControls: false,
+				playStatus: "",
+				isFull: false,
+				isAddKf: 0,
+				lineIndex: 0,
+				// 是否展开
+				isExpand: true,
+				textHeight: 0, //文本高度
+				qwUserId: "",
+				qrcode: "",
+				corpId: "",
+				periodId:"",//营期id
+				companyUserId:"",//销售id
+				companyId:"",//公司id
+				courseId:"",//课程id
+				qrcodeMsg: "",
+				urlOption: {},
+				bufferRate: 0, // 缓冲时间
+				uuId: "",
+				isEnded: false,
+				// 是否允许拖动进度条
+				ip: null,
+				checked: true,
+				isFinish: 0, // 是否完课
+				interval: null,
+				intervalIntegral: null, // 积分定时
+				options: {
+					sources: [{
+						src: ""
+					}],
+					poster: "",
+					live: false /* 是否直播 */ ,
+					controls: true,
+					autoplay: false,
+					licenseUrl: 'https://license.vod2.myqcloud.com/license/v2/1323137866_1/v_cube.license', // license 地址,参考准备工作部分,在视立方控制台申请 license 后可获得 licenseUrl,
+					LicenseKey: 'bcc5bd9a14b798b48c52ff005a21d926',
+					controlBar: {
+						volumePanel: false,
+						playbackRateMenuButton: false,
+						QualitySwitcherMenuButton: false,
+						// progressControl: false
+					},
+					plugins: {
+						// ProgressMarker: false,
+						ContextMenu: {
+							statistic: false
+						}
+					},
+				},
+				// 错误请求次数
+				errorCount: 0,
+				answerPopup: false,
+				sortLink:"",
+				// 课程是否过期
+				isExpire: false,
+				menuButtonLeft: 281,
+				menuButtonH: 45,
+				timer: null,
+				flag: false,
+				msg:'',
+				poster:'',
+				userInfo:{},
+				timeid:'',
+				videocont:{},
+				timepop:false,
+				appToken:'',
+				kfPopup:false,
+				iskftype:0,
+				courseLogo: '',
+				isquestion:false,
+				tipsPopup:false,
+				timepath:'3分之1',
+				tipsTime2:0,
+				userlogo:false,
+				userinfos:{
+					nickname:"",
+					avatar:""
+				},
+				headImg:'',
+				authType:0,//0微信登录 1手机号登录
+				userdisabled:false,
+				projectId:''
+			}
+		},
+		filters: {
+			numberToChinese(number) {
+				if (number) {
+					const chineseNumber = ['一', '二', '三', '四', '五', '六', '七', '八', '九'];
+					return chineseNumber[number - 1];
+				} else {
+					return ''
+				}
+			},
+		},
+		computed: {
+			isAnswer() {
+				return (item, name) => {
+					if (item.type == 1) {
+						return item.answer == name
+					} else if (item.type == 2) {
+						const array = item.answer.split(',')
+						return array.some(i => i == name)
+					} else {
+						return false
+					}
+				}
+			},
+			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
+			},
+		},
+		//发送给朋友
+		// onShareAppMessage(res) {
+		// 	return {
+		// 		title: this.$store.state.logoname,
+		// 		// path: '/pages/index/index',
+		// 		imageUrl: this.$store.state.imgpath+'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+		// 	}
+			
+		// },
+		// //分享到朋友圈
+		// onShareTimeline(res) {
+		// 	return {
+		// 		title: this.$store.state.logoname,
+		// 		imageUrl: this.$store.state.imgpath+'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+		// 	}
+			
+		// },
+		onLoad(option) {
+			this.videoContext = uni.createVideoContext('video-content-box', this)
+			this.code = option.code
+			if(uni.getStorageSync('userInfo')&&JSON.stringify(uni.getStorageSync('userInfo'))!='{}') {
+				this.userInfo = JSON.parse(uni.getStorageSync('userInfo'))
+			} else {
+				this.userInfo = {}
+			}
+			this.appToken=uni.getStorageSync('companyUserInfo')
+			// decodeURIComponent()
+			if(!option.course){
+				const keys = decodeURIComponent(Object.keys(option)[0]);
+				this.urlOption=JSON.parse(keys.split('course=')[1])
+			}else{
+				this.urlOption = option.course ? JSON.parse(option.course) : {}
+			}
+			this.projectId=this.urlOption.projectId
+			this.videoId = this.urlOption.videoId
+			this.courseId = this.urlOption.courseId
+			this.periodId = this.urlOption.periodId
+			this.companyId = this.urlOption.companyId
+			this.companyUserId = this.urlOption.companyUserId
+			this.timeid=this.urlOption.id
+			console.log(this.urlOption)
+			console.log(decodeURIComponent(option.course))
+			// this.sortLink = this.urlOption.link || ''
+			this.getMenuButton()
+			// #ifdef MP-WEIXIN
+			// if(this.$store.state.logoname!=='乐氏本源'&&!uni.getStorageSync('userInfos')){
+			// 	this.userlogo=true
+			// }
+			console.log(uni.getStorageSync('userInfos'))
+			if(!uni.getStorageSync('userInfos')&&this.$store.state.logoname=='乐氏本源'){
+				uni.navigateTo({
+					url:'/pages_course/webview'
+				})
+				return
+			}
+			// #endif
+		},
+		onShow() {
+			this.tipsOpen = false
+			this.isExpand = true
+			this.uuId = generateRandomString(16)
+			if (this.videoId) {
+				this.getH5CourseByVideo()
+			}
+			const AppToken=uni.getStorageSync('TOKEN_WEXIN')
+			console.log(AppToken)
+			if(AppToken){
+				// this.isLogin=true
+				if(this.isAddKf == 1){
+					this.getH5CourseVideoDetails()
+				} else{
+					this.checkUserInfoA()
+					// this.getIsAddKf()
+				}
+			}
+			// if(this.sortLink){
+			// 	this.getLink()
+			// } else {
+			// 	uni.showToast({
+			// 		title: 'sortLink is not found',
+			// 		icon: 'none'
+			// 	});
+			// }
+		},
+		mounted() {
+			// this.getIP()
+			this.getHeight()
+		},
+		onHide() {
+			// this.player = uni.createVideoContext('video-content-box');
+			if (this.player) {
+				this.player.pause()
+			}
+			// if (this.interval != null) {
+			// 	clearInterval(this.interval)
+			// 	this.interval = null
+			// }
+		},
+		onUnload() {
+			if (this.interval != null) {
+				clearInterval(this.interval)
+				this.interval = null
+			}
+			this.clearIntegral()
+		},
+		beforeDestroy() {
+			this.player = uni.createVideoContext('video-content-box');
+			if (this.player) {
+				this.player.stop()
+				this.player = null
+			}
+			if (this.interval != null) {
+				clearInterval(this.interval)
+				this.interval = null
+			}
+			this.clearIntegral()
+		},
+		methods: {
+			//检查用户昵称以及头像
+			checkUserInfoA(){
+				checkUserInfo().then(res=>{
+					if(res.code==200){
+						this.isLogin = true
+						this.userInfo= res.user
+						uni.setStorageSync('userInfo', JSON.stringify(res.user));
+						console.log(uni.getStorageSync('userInfos'))
+						if(this.nameuser==''){
+							this.userinfos.nickname=this.userInfo.nickname
+						}
+						let that=this
+						setTimeout(()=>{
+							that.getIsAddKf()
+						},100)
+					}else if(res.code==500){
+						if(res.authType==2){
+							uni.setStorageSync('authUrl',res.domain)
+							if(!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){
+						this.isLogin = true
+						uni.showToast({
+							icon:'none',
+							title:'修改成功!',
+						});
+						setTimeout(()=>{
+							this.getIsAddKf()
+						},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
+				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
+			},
+			kefpop(){
+				if(this.appToken){
+					this.kfPopup==false
+				}
+			},
+			tosales(){
+				uni.switchTab({
+					url:"/pages/index/index"
+				})
+			},
+			closepop(){
+				this.answerPopup=false
+			},
+			open(){
+				
+			},
+			userInfologin(e){
+				console.log(e)
+				this.userdisabled=true
+				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 => {
+								console.log(loginRes)
+								console.log(e)
+								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,
+								   companyId : this.companyId || '',
+								   companyUserId:this.companyUserId || 0,
+								   nickname:this.userinfos.nickname ||'',
+								   avatar:this.userinfos.avatar||'',
+								   authType:this.authType,
+								   appId:this.appid,
+								   projectId:this.projectId
+								})
+								.then( res => {
+									this.userdisabled=false
+									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.checkUserInfoA()
+										// this.isLogin = true
+										// setTimeout(()=>{
+										// 	this.getIsAddKf()
+										// },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) {
+				console.log(e)
+				this.userdisabled=false
+				uni.showLoading({
+					title: "处理中..."
+				});
+				if (e.mp.detail.errMsg == 'getPhoneNumber:ok') {
+					this.utils.getProvider()
+					.then(provider => {
+						if (!provider) {
+							this.userdisabled=false
+						  reject()
+						}
+						// uni登录
+						uni.login({
+							provider: provider,
+							success: async loginRes => {
+								this.userdisabled=false
+								console.log(loginRes)
+								console.log(e)
+								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,
+								   companyId : this.companyId || '',
+								   companyUserId:this.companyUserId || 0,
+								   nickname:this.userinfos.nickname||'',
+								   avatar:this.userinfos.avatar||"",
+								   authType:this.authType,
+								   appId:this.appid,
+								   projectId:this.projectId
+								})
+								.then( res => {
+									this.userdisabled=false
+									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.checkUserInfoA()
+										// this.isLogin = true
+										// setTimeout(()=>{
+										// 	this.getIsAddKf()
+										// },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,
+					})
+				}
+					
+			},
+			getMenuButton(){
+				const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+				this.menuButtonLeft = menuButtonInfo.left
+				this.menuButtonH = menuButtonInfo.height
+			},
+			//播放时间更新事件方法
+			onTimeUpdate(e){
+				let currentTime = Math.round(e.detail.currentTime)
+				if (this.playDurationSeek > 0) {
+					this.playTime = this.playDurationSeek
+					this.throttle(() => this.changeTime(this), 1000, false)
+				} else {
+					// console.log(this.isFinish)
+					if (this.linkType != 1 && (currentTime - this.playTime > 3 || currentTime - this.playTime < -3)&&this.isFinish!=1) {
+						uni.showToast({
+							title: '不能快进哦',
+							icon: 'none',
+						});
+						currentTime = this.playTime
+						this.player.seek(this.playTime);
+					}
+					
+					if (Math.floor(e.detail.currentTime) != this.flagTime) {
+						this.flagTime = Math.floor(e.detail.currentTime)
+						// 中途弹窗逻辑
+						if(!this.tipsOpen&&this.tipsTime && this.playTime == this.tipsTime) {
+							this.timepath='33%'
+								this.openTipsPop()
+							}
+						if(!this.tipsOpen&&this.tipsTime2 && this.playTime == this.tipsTime2) {
+							this.timepath='66%'
+								this.openTipsPop()
+							}
+					}
+					this.playTime = currentTime
+					
+				}
+			},
+			changeTime(that,e) {
+				that.playDurationSeek = 0
+			},
+			videoErrorCallback(e) {
+				this.clearIntegral()
+				this.errorCount++
+				if (this.errorCount > 3) return
+				console.log(e)
+				this.getErrMsg(e.target.errMsg)
+				this.getH5CourseVideoDetails('error')
+			},
+			// 当开始/继续播放时触发play事件
+			getPlay() {
+				this.errorCount = 0
+				// this.judgeDuration()
+			},
+			getPause() {
+				this.clearIntegral()
+			},
+			getEnded() {
+				this.clearIntegral()
+				this.isEnded = true
+				this.isFinish=1
+				this.getFinishCourseVideo()
+			},
+			getIP() {
+				uni.request({
+					url: 'https://ipinfo.io/json', //仅为示例,并非真实接口地址。
+					method: 'GET',
+					success: (res) => {
+						this.ip = res.data.ip
+					}
+				});
+			},
+			getHeight() {
+				this.$nextTick(() => {
+					const query = uni.createSelectorQuery().in(this);
+					query
+						.select("#title-content")
+						.boundingClientRect((data) => {
+							this.height =
+								`calc(100vh - ${data.height}px - 420rpx - ${this.statusBarHeight}px - 120rpx )`
+						})
+						.exec();
+				})
+			},
+			getDescHeight() {
+				this.$nextTick(() => {
+					const query = uni.createSelectorQuery().in(this);
+					query
+						.select("#descbox-desc")
+						.boundingClientRect((data) => {
+							this.textHeight = data.height
+						})
+						.exec();
+				})
+			},
+			numberToLetter(num) {
+				// 将数字转换为字母的 ASCII 码
+				let letterCode = num + 65;
+				// 将 ASCII 码转换为大写字母
+				let letter = String.fromCharCode(letterCode);
+				return letter;
+			},
+			updateTime() {
+				var that = this;
+				if (this.interval != null) {
+					clearInterval(this.interval)
+				}
+				this.interval = setInterval(function() {
+					that.getFinishCourseVideo()
+					that.getInternetTraffic()
+				}, 60000);
+			},
+			judgeDuration() {
+				var that = this;
+				if (this.intervalIntegral != null) {
+					clearInterval(this.intervalIntegral)
+					this.intervalIntegral = null
+				}
+				// 观看10分钟获得积分
+				this.intervalIntegral = setInterval(function() {
+					that.getIntegralByH5Video()
+				}, 600000);
+			},
+			clearIntegral() {
+				if (this.intervalIntegral != null) {
+					clearInterval(this.intervalIntegral)
+					this.intervalIntegral = null
+				}
+			},
+			// 展开简介
+			handleExpand() {
+				this.isExpand = !this.isExpand
+			},
+			getH5CourseByVideo() {
+				this.loading = true
+				getH5CourseByVideoId({
+					videoId: this.videoId
+				}).then(res => {
+						this.loading = false
+						if (res.code == 200) {
+							this.viewload=false
+							this.courseInfo = res.data
+							uni.setNavigationBarTitle({
+								title: this.courseInfo && this.courseInfo.title ? this.courseInfo.title : ''
+							});
+						}
+						this.getHeight()
+						this.getDescHeight()
+					},
+					rej => {
+						this.loading = false
+					}
+				).catch(() => {
+					this.loading = false
+				})
+			},
+			getH5CourseVideoDetails(type) {
+				uni.showLoading({
+					title: '加载中'
+				})
+				const data={
+					videoId:this.videoId,
+					fsUserId:this.userInfo.userId,
+					courseId:this.courseId,
+					companyUserId:this.companyUserId,
+					periodId:this.periodId,
+					id:this.timeid
+				}
+				getH5CourseVideoDetails(data).then(res => {
+						if (res.code == 200) {
+							this.config = res.data.courseConfig || {}
+							this.isFinish = res.data.isFinish || 0
+							this.duration = res.data.courseVideoDetails && 
+							res.data.courseVideoDetails.duration ? res.data.courseVideoDetails.duration : 0
+							this.courseLogo = this.config&&JSON.stringify(this.config)!='{}'? this.config.courseLogo : ''
+							this.playDuration = res.data.playDuration || 0
+							this.playDurationSeek = res.data.playDuration || 0
+							// this.tipsTime =  38
+							this.tipsTime = res.data.tipsTime || 0
+							this.tipsTime2 = res.data.tipsTime2 || 0
+							let lineList = []
+							// if (res.course && res.course.lineOne) {
+							// 	lineList.push(res.course.lineOne)
+							// }
+							// if (res.course && res.course.lineTwo) {
+							// 	lineList.push(res.course.lineTwo)
+							// }
+							// if (res.course && res.course.lineThree) {
+							// 	lineList.push(res.course.lineThree)
+							// }
+							this.lineList = lineList
+							if (!this.player || type == 'error') {
+								uni.hideLoading();
+								this.lineIndex = this.config.defaultLine
+								this.videoUrl = res.data.courseVideoDetails.videoUrl
+								this.poster= res.data.courseVideoDetails && 
+								res.data.courseVideoDetails.thumbnail ? res.data.courseVideoDetails.thumbnail : ''
+								this.videocont=res.data
+								// this.options.sources = [{
+								// 	src: this.videoUrl
+								// }]
+								// this.options.poster = res.course && res.course.imgUrl ? res.course.imgUrl : ''
+								// this.initVideo()
+								this.playTime = this.playDuration >= this.duration ? 0 : this.playDuration
+								if(this.videocont.rang){
+									setTimeout(()=>{
+										this.player = uni.createVideoContext('video-content-box');
+										this.player.seek(this.playTime)
+										this.player.play();
+									},500);
+									this.timepop=false
+								}else{
+									this.timepop=true
+								}
+								
+							} else {
+								// let div = document.querySelector(".vjs-progress-control");
+								// if(div) {
+								// 	if (this.isFinish == 1 || this.isEnded || this.linkType == 1) {
+								// 		div.style.pointerEvents = "auto";
+								// 	} else {
+								// 		div.style.pointerEvents = "none"; //禁止所有事件
+								// 	}
+								// }
+								this.playTime = this.playTime > this.playDuration ? this.playTime : this.playDuration >= this.duration ? 0 : this.playDuration
+								this.player.seek(this.playTime)
+								this.player.play();
+							}
+							this.updateTime();
+							if(res.data.courseVideoDetails.questionBankList.length==0){
+								this.isquestion=true
+							}else{
+								this.isquestion=false
+							}
+							console.log('题目',res.data.courseVideoDetails.questionBankList)
+							this.quesList = res.data.courseVideoDetails.questionBankList
+							 && res.data.courseVideoDetails.questionBankList.length > 0 ? res.data.courseVideoDetails.questionBankList : [],
+								this.quesList = this.quesList.map(item => ({
+									...item,
+									questionOption: JSON.parse(item.question),
+									answer: ''
+								}))
+						}
+						this.getHeight()
+						this.getDescHeight()
+					},
+					rej => {}
+				)
+			},
+			handleAnswer(item, option, idx) {
+				let time = this.playTime
+				if(this.isEnded || this.isFinish==1) {
+					time = this.duration
+				} else {
+					if(time < this.playDuration&&this.isFinish!=1) {
+						// 没完课且小于续播的时间
+						time = this.playDuration
+					}
+				}
+				if(Number(this.duration || 0) == 0 || time < this.duration - 60) {
+					uni.showToast({
+						title: "请先观看完整课程再答题哦~",
+						icon: "none"
+					})
+					return
+				}
+
+				if (item.type == 1) {
+					// 单选option
+					item.answer = option.name
+				} else if (item.type == 2) {
+					// 多选
+					let answer = item.answer ? item.answer.split(',') : []
+					if (answer.indexOf(option.name) === -1) {
+						answer.push(option.name)
+						item.answer = answer.join(',')
+					} else {
+						answer.splice(answer.indexOf(option.name), 1)
+						item.answer = answer.join(',')
+					}
+				}
+			},
+			submit() {
+				if(this.isExpire){
+					uni.showToast({
+						title: '课程已过期或链接无效',
+						icon: 'none'
+					});
+					return
+				}
+				// 登录
+				this.$isLoginCourse().then(
+					res => {
+						console.log(res)
+						if(res){
+							console.log(res)
+							if (this.isAddKf == 1) {
+								// 答题
+								// 您已提交过答案,请领取红包
+								console.log(1223)
+								this.courseAnswer()
+							} else {
+								// 添加客服
+								if (this.videoId&&this.isLogin) {
+									console.log(12223131)
+									this.getIsAddKf()
+								} else if(this.iskftype==1){
+									uni.showToast({
+										title: '已看过其他销售分享的此课程,不能重复观看',
+										icon: 'none'
+									})
+								}
+								else {
+									// this.kfPopup=true
+									uni.removeStorageSync('TOKEN_WEXIN')
+									uni.showToast({
+										title: '已清除缓存,请重新进入页面!',
+										icon: 'none'
+									})
+								}
+							} 
+						} else{
+							// this.goLogin()
+						}
+					},
+					rej => {}
+				);
+					
+			},
+			// 答题
+			courseAnswer() {
+				let time = this.playTime
+				if (this.isEnded||this.isFinish==1) {
+					time = this.duration
+				} else {
+					if (time < this.playDuration && this.isFinish != 1) {
+						// 没完课且小于续播的时间
+						time = this.playDuration
+					}
+				}
+				if (Number(this.duration || 0) == 0 || time < this.duration - 60) {
+					uni.showToast({
+						title: "请先观看完整课程再答题哦~",
+						icon: "none"
+					})
+					return
+				}
+				if (this.quesList.some(item => !item.answer)) {
+					uni.showToast({
+						title: "请确认是否答完所有题目",
+						icon: "none"
+					})
+					return
+				}
+				const questions = this.quesList.map(obj => {
+					const {
+						questionOption,
+						...rest
+					} = obj;
+					return rest;
+				});
+				const param = {
+					...this.urlOption,
+					userId:this.userInfo.userId,
+					questions: questions,
+					videoId: this.videoId,
+					duration: this.playTime,
+				}
+				this.errTitle = ""
+				this.errDesc = ""
+				this.errQues = []
+				courseAnswer(param).then(res => {
+						if (res.code == 200) {
+							if (res.incorrectQuestions) {
+								// 答题失败
+								if (res.incorrectQuestions.length > 0) {
+									this.errQues = res.incorrectQuestions
+								}
+								this.remain = res.remain || 0
+								if (res.remain > 0) {
+									this.answerPopup=true
+									this.errTitle = "很遗憾答错了"
+									this.errDesc = `<span style="color:#FF5C03">还有${res.remain}次机会,继续加油</span>`
+									// this.$refs.answerPopup.open("center")
+									this.answerPopup=true
+								}
+							} else {
+								// 答题成功
+								this.errTitle = "恭喜你,回答正确"
+								// this.errDesc = `请选择奖励`
+								// this.$refs.answerPopup.open("center")
+								// this.answerPopup=true
+								if(res.msg=='答题成功'){
+									uni.login({
+										provider: 'weixin',
+										success: async loginRes => {
+											console.log(loginRes)
+											var code=loginRes
+											this.closeAnswerPopup(loginRes.code)
+										}
+									})
+								}
+							}
+						} else {
+							if (res.msg == "该课题到达答错次数限制") {
+								this.errTitle = "答题次数超过限制"
+								this.errDesc = "以后的课程要认真学习哦"
+								// this.$refs.answerPopup.open("center")
+								this.answerPopup=true
+							} else {
+								uni.showToast({
+									title: res.msg,
+									icon: "none"
+								})
+							}
+						}
+					},
+					rej => {}
+				)
+			},
+			// 选择
+			rewardChange(e) {
+				this.currentReward = e.detail.value
+			},
+			closeAnswerPopup() {
+				// this.$refs.answerPopup.close()
+				uni.showLoading({
+					title: "加载中..."
+				})
+				if (this.errTitle == '恭喜你,回答正确') {
+					const param = {
+						...this.urlOption,
+						userId:this.userInfo.userId,
+						// rewardType: Number(this.currentReward),
+						source: 2, // 小程序
+						appId: this.appid
+					}
+					sendReward(param).then(res => {
+						if(res.code == 200) {
+							uni.hideLoading()
+							this.answerPopup=false
+							console.log('红包',res)
+							if(res.isNew&&res.isNew==1) {
+								console.log('红包配置',res)
+								const packageInfo = res.data.packageInfo || ''
+								if(packageInfo) {
+									uni.setStorageSync('receive_package',packageInfo)
+									uni.setStorageSync('mchId',res.mchId)
+									uni.navigateTo({
+										url: '/pages_course/reward'
+									})
+								}
+							} else {
+								uni.showToast({
+									title: res.msg,
+									icon: 'none'
+								})
+							}
+						}else {
+							uni.hideLoading()
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							})
+						}
+						// if(res.code == 200) {
+						// 	//重构 发红包,后台通过OPENID发零钱到 账
+						// 	//this.initWXConfig(res.package)
+						// }else {
+						// 	uni.showToast({
+						// 		title: res.msg,
+						// 		icon: 'none'
+						// 	})
+						// }
+					})
+				}else{
+					uni.hideLoading()
+					this.answerPopup=!this.answerPopup
+				}
+			},
+			// 线路
+			openPop() {
+				this.$refs.popup.open('bottom')
+			},
+			close() {
+				this.$refs.popup.close()
+			},
+			handleLine(index) {
+				var that=this;
+				if (this.lineIndex == index && this.videoUrl == this.lineList[index]) {
+					this.close()
+					return
+				} else {
+					// let div = document.querySelector(".vjs-progress-control");
+					// if(div) {
+					// 	if (this.isFinish == 1 || this.isEnded || this.linkType == 1) {
+					// 		div.style.pointerEvents = "auto";
+					// 	} else {
+					// 		div.style.pointerEvents = "none"; //禁止所有事件
+					// 	}
+					// }
+					this.lineIndex = index
+					this.videoUrl = this.lineList[index]
+					this.tipsOpen = false
+					this.playDurationSeek = this.playTime || 0
+					this.player = uni.createVideoContext('video-content-box');
+					setTimeout(function(){
+						that.player.seek(that.playDurationSeek)
+						that.player.play();
+					},500);
+					// this.player.src(this.lineList[index])
+					// this.player.one('loadedmetadata', () => {
+					// 	this.player.currentTime(this.playDurationSeek);
+					// 	this.player.play();
+					// });
+					this.close()
+				}
+
+			},
+			// 温馨提示
+			openTipsPop() {
+				// this.$refs.tipsPopup.open()
+				this.tipsPopup=true
+				// 暂停视频
+				        this.videoContext.pause()
+				// this.tipsOpen = true
+				// this.pause()
+			},
+			closeTipsPop() {
+				// this.$refs.tipsPopup.close()
+				this.videoContext.play()
+				this.tipsPopup=!this.tipsPopup
+			},
+			// 客服
+			getIsAddKf() {
+				this.qrcode = ''
+				this.qrcodeMsg = ''
+				this.isAddKf = 0
+				const data = {
+					videoId:this.videoId,
+					userId:this.userInfo.userId,
+					companyUserId:this.companyUserId,
+					companyId:this.companyId,
+					courseId:this.courseId,
+					periodId:this.periodId,
+					projectId:this.projectId
+				}
+				// {videoId: this.videoId,qwUserId: this.qwUserId,corpId: this.corpId}
+				getIsAddKf(data).then(res => {
+						if (res.code == 200) {
+							this.isLogin = true
+							if(res.data){
+								this.isAddKf = 1
+								this.getH5CourseVideoDetails()
+							}
+							// else{
+							// 	uni.showToast({
+							// 		title: '请联系管理员,注册为会员!',
+							// 		icon: 'none'
+							// 	});
+							// }
+						}else if(res.code==1002){
+							this.isAddKf = 0
+							this.qrcode=res.ext
+							this.kfPopup=true
+							uni.showToast({
+								title: "请添加管理员微信,成为会员!",
+								icon: 'none'
+							});
+						}else if(res.code==505){
+							this.isAddKf = 0
+							this.qrcode=res.ext
+							this.kfPopup=true
+							uni.showToast({
+								title: "管理员开启了会员审核,请等待审核!",
+								icon: 'none'
+							});
+						}else if(res.code==406){
+							uni.hideLoading();
+							uni.showToast({
+								icon:'none',
+								title: '该用户已成为其他销售会员',
+							});
+						}else if(res.code==504){
+							this.isAddKf = 0
+							this.iskftype=1
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+						}else {
+							this.isAddKf = 0
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+						}
+					},
+					err => {}
+				);
+			},
+			closeKFPop() {
+				// this.$refs.kfPopup.close()
+				// this.kfPopup=!this.kfPopup
+			},
+			getFinishCourseVideo() {
+				if (!this.playTime) return
+				// {videoId: this.videoId,duration:this.playTime}
+				const param = {
+					duration: this.playTime,
+					videoId:this.videoId,
+					userId:this.userInfo.userId,
+					companyUserId:this.companyUserId
+				}
+				getFinishCourseVideo(param)
+			},
+			// 每十分钟获得积分
+			getIntegralByH5Video() {
+				const param = {
+					duration: this.playTime,
+					...this.urlOption
+				}
+				getIntegralByH5Video(param).then(res => {
+					if (res.code == 200) {
+						uni.showToast({
+							title: "积分+10",
+							icon: "none"
+						})
+					}
+				})
+			},
+			progressChange(e) {
+				this.bufferRate = Math.ceil(e.detail.buffered)
+				// console.log('缓冲结果',this.bufferRate)
+				// console.log('缓冲',this.playTime,this.duration)
+			},
+			// 缓冲
+			getInternetTraffic() {
+				const playVideoTime = Math.ceil(this.playTime / this.duration * 100) // 播放百分比
+				// console.log('播放百分比',playVideoTime)
+				if(this.bufferRate == 0 || this.bufferRate < playVideoTime) {
+					this.bufferRate = playVideoTime
+					console.log(this.bufferRate)
+				}
+				if(this.bufferRate == 0 || Number(this.bufferRate.toFixed(2)) == 0) return
+				const param = {
+					uuId: dayjs().format('YYYYMMDD') + this.uuId,
+					duration: this.playTime,
+					bufferRate: Number(this.bufferRate.toFixed(2)),
+					userId:this.userId,
+					periodId:this.periodId,
+					...this.urlOption
+				}
+				getInternetTraffic(param)
+			},
+			getErrMsg(err) {
+				let msgerr = {
+					videoUrl: this.videoUrl,
+					lineIndex: this.lineIndex,
+					errTime: new Date(),
+					// ip: this.ip,
+					errMsg: err
+				}
+				getErrMsg({
+					msg: JSON.stringify(msgerr)
+				})
+			},
+			goLogin() {
+				
+			},
+			getLink() {
+				this.goLogin()
+				return
+				let that = this;
+				this.msg = ''
+				getRealLink({sortLink:this.sortLink}).then(res=>{
+					if(res.code == 200) {
+						this.isExpire = false
+						// 如果响应中包含真实链接,则跳转到真实链接
+						// window.location.href = res.realLink +"&sortLink="+this.sortLink+"&code="+this.code+"&time="+new Date().getTime()
+						if (this.isLogin && this.isAddKf == 1) {
+							this.getH5CourseVideoDetails()
+						}
+						if (this.videoId && this.isAddKf != 1) {
+							this.$isLoginCourse().then(
+								isLogin => {
+									this.isLogin = isLogin
+									if(isLogin){
+										this.getIsAddKf() 
+									} else {
+										this.goLogin()
+									}
+								},
+								rej => {}
+							);
+						}
+					} else {
+						this.isExpire = true
+						this.msg = '课程已过期或链接无效'
+						uni.showToast({
+							title: '课程已过期或链接无效',
+							icon: 'none'
+						});
+					}
+				}).catch(err=>{
+					this.isExpire = true
+					this.msg = '发生错误,请稍后再试'
+					uni.showToast({
+						title: '发生错误,请稍后再试',
+						icon: 'none'
+					});
+				})
+			},
+			/**
+			 * 节流原理:在一定时间内,只能触发一次
+			 *
+			 * @param {Function} func 要执行的回调函数
+			 * @param {Number} wait 延时的时间
+			 * @param {Boolean} immediate 是否立即执行
+			 * @return null
+			 */
+			throttle(func, wait = 500, immediate = true) {
+			    if (immediate) {
+			        if (!this.flag) {
+			            this.flag = true
+			            // 如果是立即执行,则在wait毫秒内开始时执行
+			            typeof func === 'function' && func()
+			            this.timer = setTimeout(() => {
+			                this.flag = false
+			            }, wait)
+			        }
+			    } else if (!this.flag) {
+			        this.flag = true
+			        // 如果是非立即执行,则在wait毫秒内的结束处执行
+			        this.timer = setTimeout(() => {
+			            this.flag = false
+			            typeof func === 'function' && func()
+			        }, wait)
+			    }
+			}
+		}
+	}
+</script>
+
+<style scoped>
+.full-width-popup {
+  width: 100%;
+}
+</style>
+<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;
+	}
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.footer-tips {
+			position: fixed;
+			width: 100%;
+			bottom: 144rpx;
+			text-align: center;
+			font-family: PingFang SC,PingFang SC;
+			font-weight: 500;
+			font-size: 12px;
+			color: #bbb;
+			transform: scale(0.8); 
+		}
+	.btns{
+		position: relative;
+		width: 100%;
+		height: 80rpx;
+		.author-btn{				
+			z-index:100;
+			position: absolute;
+			width: 100%;
+			height: 80rpx;
+			background: #ff5c03;
+			border-radius: 40rpx;
+			font-size: 36rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			text-align: center;
+			line-height: 80rpx;
+			color: rgba(255, 255, 255, 1);
+		}
+	}
+	.textOne {
+		overflow: hidden;
+		white-space: nowrap;
+		text-overflow: ellipsis;
+	}
+
+	.textTwo {
+		overflow: hidden;
+		text-overflow: ellipsis;
+		display: -webkit-box;
+		-webkit-line-clamp: 2;
+		-webkit-box-orient: vertical;
+	}
+	.header-nav {
+		height: 88rpx;
+		@include u-flex(row, center, flex-start);
+		overflow: hidden;
+		background-color: #fff;
+		box-sizing: border-box;
+		.header-title {
+			text-align: center;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			padding: 0 10rpx 0 100rpx;
+			font-family: PingFang SC,PingFang SC;
+			font-weight: 500;
+			font-size: 15px;
+			color: #000;
+			box-sizing: border-box;
+		}
+	}
+	.reward-list {
+		width: 100%;
+		margin-top: 20rpx;
+		margin-bottom: -40rpx;
+
+		&-group {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			color: #222222;
+			@include u-flex(row, center, center);
+		}
+
+		&-option {
+			@include u-flex(row, center, flex-start);
+
+			&:first-child {
+				margin-right: 40rpx;
+			}
+		}
+	}
+
+	.err {
+		color: #f56c6c !important;
+	}
+
+	.kfqrcode-box {
+		background-color: #fff;
+		border-radius: 16rpx;
+		max-width: 560rpx;
+		padding: 60rpx 40rpx;
+		margin-top: -100rpx;
+		box-sizing: border-box;
+		@include u-flex(column, center, flex-start);
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 34rpx;
+		color: #222;
+		position: relative;
+		text-align: center;
+
+		.kfqrcode {
+			// height: 460rpx;
+			width: 460rpx;
+		}
+	}
+
+	.kfqrcode-close {
+		width: 64rpx;
+		height: 64rpx;
+		position: absolute;
+		bottom: -100rpx;
+		left: 50%;
+		transform: translateX(-50%);
+	}
+
+	.tipsPopup-mask {
+		position: relative;
+		width: 560rpx;
+		background-color: transparent;
+
+		.red_envelope_top {
+			width: 480rpx;
+			height: 360rpx;
+			margin: 0 auto;
+			display: inherit;
+		}
+	}
+
+	.tipsPopup-btn-box {
+		width: 456rpx;
+		height: 104rpx;
+		padding: 4rpx;
+		box-sizing: border-box;
+		background: linear-gradient(180deg, rgba(252, 209, 94, 1), rgba(254, 253, 251, 1));
+		border-radius: 52rpx;
+	}
+
+	.tipsPopup-btn {
+		width: 100%;
+		height: 100%;
+		background: linear-gradient(180deg, #FF9F22 0%, #FA1E05 100%);
+		border-radius: 52rpx 52rpx 52rpx 52rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 36rpx;
+		color: #FFFFFF;
+		line-height: 96rpx;
+		text-align: center;
+	}
+
+	.tipsPopup {
+		width: 560rpx;
+		padding: 12rpx;
+		margin-top: -72rpx;
+		box-sizing: border-box;
+		background: linear-gradient(180deg, #FFFBEF 0%, #FFFFF5 43%, #F5EAC2 100%);
+		border-radius: 32rpx 32rpx 32rpx 32rpx;
+		position: relative;
+
+		&-close {
+			width: 64rpx;
+			height: 64rpx;
+			position: absolute;
+			right: 0;
+			top: -188rpx;
+		}
+
+		&-line {
+			padding: 3rpx;
+			box-sizing: border-box;
+			background: linear-gradient(180deg, rgba(247, 245, 220, 1), rgba(250, 220, 157, 1));
+			border-radius: 24rpx;
+		}
+
+		&-box {
+			padding: 0 40rpx 40rpx 40rpx;
+			box-sizing: border-box;
+			background: linear-gradient(180deg, #FFFBEF 0%, #FFFFF5 43%, #F5EAC2 100%);
+			border-radius: 24rpx;
+			@include u-flex(column, center, flex-start);
+		}
+
+		&-head {
+			@include u-flex(row, center, center);
+
+			&-title {
+				width: 364rpx;
+				height: auto;
+				margin-top: -22rpx;
+			}
+		}
+
+		&-content {
+			margin: 48rpx 0;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #222222;
+			text-align: center;
+
+			&-title {
+				margin-bottom: 26rpx;
+				font-weight: 600;
+				font-size: 40rpx;
+				color: #FF5C03;
+			}
+		}
+	}
+
+	.video-controls-box {
+		width: 100%;
+		height: 420rpx;
+		overflow: hidden;
+		position: absolute;
+		bottom: 0;
+		left: 0;
+		z-index: 2;
+		background: rgba(0, 0, 0, 0.2);
+
+		.video-play {
+			height: 72rpx;
+			width: 72rpx;
+			position: absolute;
+			top: 50%;
+			left: 50%;
+			transform: translate(-50%, -50%);
+		}
+	}
+
+	.video-controls {
+		width: 100%;
+		height: 80rpx;
+		padding: 0 28rpx;
+		box-sizing: border-box;
+		position: absolute;
+		bottom: 0;
+		left: 0;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		background: linear-gradient(to top, #222 0%, transparent 80%);
+
+		.video-icon {
+			height: 44rpx;
+			width: 44rpx;
+		}
+	}
+
+	.errQuesbox {
+		width: 100%;
+		max-height: 260rpx;
+		overflow-y: auto;
+		margin-top: 24rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 30rpx;
+		color: #222222;
+
+		&-item {
+			width: 100%;
+			height: 128rpx;
+			line-height: 128rpx;
+			margin-bottom: 24rpx;
+			padding: 0 30rpx;
+			box-sizing: border-box;
+			overflow: hidden;
+			background: #fff;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			position: relative;
+
+			&::after {
+				content: "题目";
+				min-width: 64rpx;
+				height: 36rpx;
+				padding: 0 12rpx;
+				line-height: 36rpx;
+				background: #FF5C03;
+				box-sizing: border-box;
+				border-radius: 0rpx 0rpx 16rpx 0rpx;
+				text-align: center;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 20rpx;
+				color: #fff;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+	}
+
+	.bg {
+		background: #fff !important;
+	}
+	.timepopbox{
+		width: 560rpx;
+		padding: 32rpx;
+		box-sizing: border-box;
+	}
+	.answerPopup {
+		&-box {
+			width: 560rpx;
+			background: linear-gradient(180deg, #FFFAF6 0%, #FEECD8 100%);
+			border-radius: 32rpx 32rpx 32rpx 32rpx;
+			background-color: #fff;
+			font-weight: 400;
+			padding: 32rpx;
+			box-sizing: border-box;
+			position: relative;
+			@include u-flex(column, center, flex-start);
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+
+			.tipimg {
+				width: 206rpx;
+				height: 206rpx;
+				margin-bottom: 16rpx;
+			}
+		}
+
+		&-title {
+			font-weight: 600;
+			font-size: 36rpx;
+			color: #222222;
+		}
+
+		&-desc {
+			margin-top: 10rpx;
+			font-size: 28rpx;
+			color: #757575;
+		}
+
+		&-btn {
+			width: 464rpx;
+			height: 84rpx;
+			margin-top: 54rpx;
+			margin-bottom: 16rpx;
+			background: #FF5C03;
+			border-radius: 42rpx;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #FFFFFF;
+			text-align: center;
+			line-height: 84rpx;
+		}
+	}
+
+	.popupbox {
+		width: 100%;
+		background-color: #fff;
+		border-radius: 16rpx 16rpx 0 0;
+		padding: 24rpx 32rpx;
+		position: relative;
+
+		&-head {
+			height: 60rpx;
+			margin-bottom: 30rpx;
+			text-align: center;
+			overflow-y: auto;
+			color: #414858;
+			font-size: 32rpx;
+			font-weight: bold;
+			position: relative;
+
+			.close-icon {
+				position: absolute;
+				right: 0;
+				top: 0;
+				height: 40rpx;
+				width: 40rpx;
+			}
+		}
+
+		&-content {
+			height: 20vh;
+			overflow-y: auto;
+			display: flex;
+			align-items: flex-start;
+			flex-wrap: wrap;
+			gap: 32rpx;
+
+			.line-item {
+				display: inline-block;
+				min-width: 200rpx;
+				min-height: 60rpx;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				border-radius: 50rpx;
+				overflow: hidden;
+				background-color: #f7f7f7;
+				text-align: center;
+				color: #414858;
+				font-size: 28rpx;
+				line-height: 60rpx;
+			}
+
+			.line-active {
+				color: #f56c6c !important;
+				background-color: #fef0f0 !important;
+			}
+		}
+	}
+
+	.content {
+		padding-bottom: calc(var(--window-bottom) + 100rpx);
+		.video-box {
+			width: 100%;
+			height: 420rpx;
+			overflow: hidden;
+			position: relative;
+
+			#myVideo {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.video-poster {
+			width: 100%;
+			height: 420rpx;
+		}
+
+		.miantitlebox {
+			padding: 30rpx 0;
+			border-bottom: 2rpx solid #F5F7FA;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 40rpx;
+			color: #222222;
+		}
+
+		.subtitlebox {
+			padding: 30rpx 0;
+			border-bottom: 2rpx solid #F5F7FA;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 40rpx;
+			color: #222222;
+		}
+
+		.title-content {
+			padding: 0 32rpx;
+			background-color: #fff;
+			font-size: 28rpx;
+			line-height: 1.6;
+
+			.title {
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #414858;
+			}
+
+			.time-or-subtitle {
+				margin-top: 12rpx;
+				color: #666666;
+			}
+		}
+
+		.descbox {
+			padding: 36rpx 32rpx;
+			margin-bottom: 20rpx;
+			background-color: #fff;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #222222;
+			line-height: 42rpx;
+			word-break: break-word;
+
+			&-title {
+				margin-bottom: 24rpx;
+				font-weight: 500;
+				font-size: 32rpx;
+			}
+
+			&-info {
+				margin-bottom: 24rpx;
+				@include u-flex(row, center, space-between);
+				font-size: 26rpx;
+				color: #757575;
+
+				&-l {
+					flex: 1;
+					@include u-flex(row, center, flex-start);
+				}
+
+				&-time {
+					margin-left: 18rpx;
+					padding-left: 18rpx;
+					position: relative;
+
+					&::after {
+						content: "";
+						width: 4rpx;
+						height: 4rpx;
+						background: #999999;
+						border-radius: 50%;
+						position: absolute;
+						left: 0;
+						top: 50%;
+						transform: translateY(-50%);
+					}
+				}
+
+				&-r {
+					background: transparent;
+				}
+			}
+
+			&-desc {
+				overflow: hidden;
+				position: relative;
+			}
+		}
+
+		.expand {
+			flex-shrink: 0;
+			@include u-flex(row, center, flex-end);
+			color: #FF5C03;
+			font-weight: 400;
+			font-size: 24rpx;
+
+			image {
+				width: 32rpx;
+				height: 32rpx;
+			}
+		}
+
+		.expand-ab {
+			position: absolute;
+			top: 0;
+			right: 0;
+			box-shadow: -50rpx 0 20rpx 8rpx #FFFFFF;
+			background-color: #fff;
+		}
+
+		.ques-content {
+			background-color: #fff;
+			padding: 40rpx 32rpx;
+			box-sizing: border-box;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #222222;
+		}
+
+		.ques-content-tit {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 36rpx;
+			color: #222222;
+		}
+
+		.ques-title {
+			margin: 48rpx 0 34rpx 0;
+			font-weight: 500;
+			font-size: 32rpx;
+			white-space: normal;
+		}
+
+		.ques-type {
+			flex-shrink: 0;
+			min-width: 72rpx;
+			min-height: 40rpx;
+			padding: 0 12rpx;
+			margin: 0 12rpx;
+			box-sizing: border-box;
+			background: #FF5C03;
+			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: #FF5C03 !important;
+				background: #FCF0E7 !important;
+			}
+		}
+
+		.video-line {
+			min-width: 140rpx;
+			max-width: 200rpx;
+			height: 60rpx;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			border-radius: 50rpx 0 0 50rpx;
+			overflow: hidden;
+			background-color: #fff;
+			text-align: center;
+			color: #888;
+			font-size: 28rpx;
+			line-height: 60rpx;
+			display: inline-flex;
+			align-items: center;
+			justify-content: center;
+			position: fixed;
+			right: 0;
+			z-index: 9;
+			bottom: calc(var(--window-bottom) + 280rpx);
+			box-shadow: 0 4rpx 10rpx rgba(0, 0, 0, .12);
+
+			image {
+				flex-shrink: 0;
+				height: 30rpx;
+				width: 30rpx;
+				margin-right: 6rpx;
+			}
+		}
+
+		.footer {
+			border-top: 1rpx solid #ededef;
+			background: #fff;
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			padding: 32rpx;
+			// padding-bottom: calc(var(--window-bottom) + 14rpx);
+			box-sizing: border-box;
+			z-index: 0;
+
+			&-btn {
+				width: 100%;
+				height: 98rpx;
+				background: #FF5C03;
+				border-radius: 49rpx 49rpx 49rpx 49rpx;
+				line-height: 98rpx;
+				text-align: center;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 32rpx;
+				color: #FFFFFF;
+				@include u-flex(row, center, center);
+
+				&-img {
+					flex-shrink: 0;
+					width: 144rpx;
+					height: 144rpx;
+					margin-right: 8rpx;
+					margin-top: -24rpx;
+				}
+			}
+
+			&-btn-border {
+				position: relative;
+
+				&::after {
+					content: "";
+					background: linear-gradient(180deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
+					position: absolute;
+					top: -2rpx;
+					left: 0;
+					height: 103rpx;
+					width: 100%;
+					z-index: -1;
+					border-radius: 49rpx 49rpx 49rpx 49rpx;
+					box-shadow: 0rpx 8rpx 11rpx 0rpx rgba(255, 92, 3, 0.3);
+					overflow: hidden;
+				}
+			}
+		}
+	}
+
+	.agreement {
+		display: inline-flex;
+		margin-top: 16rpx;
+		font-size: 24rpx;
+		color: #525252;
+		align-items: center;
+		justify-content: center;
+	}
+	 
+	.nocourse {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		padding-bottom: 88rpx;
+		justify-content: center;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 32rpx;
+		color: #757575;
+		line-height: 48rpx;
+		text-align: center;
+		
+		image {
+			width: 328rpx;
+			height: auto;
+			margin-bottom: 30rpx;
+		}
+	}
+	 .logo {
+	 	display: inline-block;
+	 	width: 30px;
+	 	height: auto;
+	 	margin: 20px 0 0 10px;
+	 	pointer-events: none;
+	 	object-fit: cover;
+	 }
+	 .logo-full {
+	 	display: inline-block;
+	 	width: 40px;
+	 	height: auto;
+	 	margin: 50px 0 0 30px;
+	 	pointer-events: none;
+	 	object-fit: cover;
+	 }
+</style>

+ 177 - 0
pages_course/webview.vue

@@ -0,0 +1,177 @@
+<template>
+  <view class="container">
+    <!-- 加载提示 -->
+    <view class="loading" v-if="loading">
+      <text>加载中...</text>
+    </view>
+    
+    <!-- web-view组件 -->
+    <web-view 
+      :src="webviewUrl" 
+      @message="handleMessage"
+      @load="onLoads"
+      @error="onError"
+    ></web-view>
+  </view>
+</template>
+
+<script>
+	import { getusername} from '@/api/courseLook'
+export default {
+  data() {
+    return {
+      loading: true,
+      // webviewUrl: '',//福本源
+	  // webviewUrl: 'https://vip.aishanghys.com/weixinOauth',//蜂巢快药
+	  webviewUrl: uni.getStorageSync('authUrl'),//中康
+	  // webviewUrl: 'https://vip.liangmiaoedu.com/weixinOauth',//良苗
+	  // webviewUrl: 'https://vips.beliyostore.com/weixinOauth',//倍力优
+	  // webviewUrl: 'https://userapp.drkzyy.cn/weixinOauth',//德瑞康
+	  // webviewUrl: 'https://companyapp.gjh2024.com/weixinOauth.html',//金慷建
+	 
+      userInfo: {},
+	  userinfos:{
+	  	nickname:"",
+	  	avatar:""
+	  },
+    }
+  },
+  onLoad(options) {
+	  console.log(options)
+	  // if(options.url&&!options.code){
+	  // 		this.webviewUrl=options.url
+	  // }
+	  if(options.code){
+		  // uni.$emit('us ercode', {  code: options.code });
+		  this.loginweixin(options.code)
+	  }
+	 
+    // 生成带参的H5授权页面URL
+    // this.webviewUrl = this.generateAuthUrl()
+  },
+  methods: {
+	  loginweixin(datas){
+		  var data = {
+		  	code: datas,
+		  }
+		  getusername(data).then(res => {
+		  		  this.res=res
+		  		uni.hideLoading();
+		  		if (res.code == 200) {
+		  			console.log(res)
+		  			uni.hideLoading();
+		  			uni.showToast({
+		  				icon:'none',
+		  				title: "成功获取用户信息",
+		  			});
+					this.userinfos.nickname=res.nickname;
+					this.userinfos.avatar=res.headImgUrl;
+		  			uni.setStorageSync('userInfos', this.userinfos);
+					uni.navigateBack({
+						delta: 1
+					});
+		  		} else {
+					uni.hideLoading();
+		  			uni.showToast({
+		  			  title: res.msg || '获取用户信息失败',
+		  			  icon: 'none'
+		  			})
+		  		}
+		  	},
+		  	err => {}
+		  ).catch(err=>{
+		  	uni.hideLoading();
+		  		uni.showToast({
+		  			icon:'none',
+		  			title: "获取用户信息失败",
+		  		});
+		  });
+	  },
+    // 生成授权页面URL,附带小程序传递的参数
+    generateAuthUrl() {
+      // 获取当前小程序的场景值,用于后续业务处理
+      const scene = uni.getLaunchOptionsSync().scene
+      
+      // 这里替换为你的uniapp H5项目域名
+      
+      // 拼接参数,可包含小程序特有的信息
+      const params = {
+        scene,
+        appid: 'wx961fadab9bcb792b', // 公众号AppID
+        redirect_uri: encodeURIComponent('https://h5.fbylive.com/weixinOauth'),
+        scope: 'snsapi_userinfo',
+        state: 'wechat_redirect'
+      }
+      
+      // 微信公众号授权URL
+      return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${params.appid}&redirect_uri=${params.redirect_uri}&response_type=code&scope=${params.scope}&state=${params.state}#wechat_redirect`
+    },
+    
+    // 处理web-view向小程序发送的消息
+    handleMessage(e) {
+      console.log('收到web-view消息:', e.detail)
+      console.log('收到web-view消息:', e)
+      // 获取H5页面传递过来的用户信息
+      if (e.detail && e.detail.type === 'user_info') {
+        this.userInfo = e.detail.data
+         this.token= e.detail.token
+        // 存储用户信息到本地
+        uni.setStorageSync('userInfo', this.userInfo)
+		uni.setStorageSync('TOKEN_WEXIN', this.userInfo)
+        
+        // 返回上一页或跳转到首页
+        uni.showToast({
+          title: '登录成功',
+          icon: 'success'
+        })
+        
+        setTimeout(() => {
+          uni.navigateBack()
+        }, 1500)
+      }
+    },
+    
+    // web-view加载完成
+    onLoads() {
+      this.loading = false
+      console.log('web-view加载完成')
+    },
+    
+    // web-view加载失败
+    onError(e) {
+      this.loading = false
+      console.error('web-view加载失败:', e)
+      uni.showToast({
+        title: '页面加载失败',
+        icon: 'none'
+      })
+    }
+  }
+}
+</script>
+
+<style>
+.container {
+  width: 100%;
+  height: 100%;
+  position: relative;
+}
+
+.loading {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background-color: #fff;
+  z-index: 100;
+}
+
+web-view {
+  width: 100%;
+  height: 100%;
+}
+</style>    

+ 11 - 11
pages_doctor/doctorDetail.vue

@@ -2,12 +2,12 @@
 	<view>
 		<view class="top-cont">
 			<!-- 背景图片 -->
-			<image class="bg" src="/static/images/doctordetail_top_bg.png" mode=""></image>
+			<image class="bg" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/doctordetail_top_bg.png" mode=""></image>
 			<view class="top-inner">			
 				<!-- 这里是状态栏 -->
 				<view class="status_bar" :style="{height: statusBarHeight}"></view>
 				<view class="back-box" @click="back">
-					<image src="../static/images/back.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/back.png" mode=""></image>
 				</view>
 				<!-- 医生信息 -->
 				<view class="doctor-info">
@@ -62,22 +62,22 @@
 				<view class="content">
 					<!-- 擅长 -->
 					<view class="expertise">
-						<image class="label-img" src="../static/images/sc_word.png" mode=""></image>
+						<image class="label-img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/sc_word.png" mode=""></image>
 						<text :class="showExpert?'text':'text ellipsis3'" id="expert">{{doctor.doctorDesc}}</text>
 						<!-- 查看更多按钮 -->
 						<view v-if="!showExpert" class="show-more" @click="showMoreExpert">
-							<image class="mask" src="../static/images/mask.png" mode=""></image>
+							<image class="mask" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/mask.png" mode=""></image>
 							<view class="inner">
 								<text class="btn">查看全部</text>
-								<image src="../static/images/arrow3.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow3.png" mode=""></image>
 							</view>
 						</view>
 					</view>
 					<!-- 问诊方式 -->
 					<view class="mode-box">
 						<view v-for="(price,index) in prices" :class="price.priceId == priceId?'item active':'item'" @click="choseMode(price)">
-							<image v-if="price.priceType==1" class="img" src="../static/images/picture_ask.png" mode=""></image>
-							<image v-if="price.priceType==2" class="img" src="../static/images/phone_ask.png" mode=""></image>
+							<image v-if="price.priceType==1" class="img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/picture_ask.png" mode=""></image>
+							<image v-if="price.priceType==2" class="img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/phone_ask.png" mode=""></image>
 							<view class="info">
 								<text v-if="price.priceType==1" class="label">图文问诊</text>
 								<text v-if="price.priceType==2" class="label">电话问诊</text>
@@ -93,7 +93,7 @@
 								</view>
 							</view>
 							<!-- 选中的角标 -->
-							<image v-if="price.priceId == priceId" class="active-img" src="../static/images/sel_right50.png" mode=""></image>
+							<image v-if="price.priceId == priceId" class="active-img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/sel_right50.png" mode=""></image>
 						</view>
 						 
 					</view>
@@ -107,12 +107,12 @@
 		<view class="btn-foot">
 			<view class="menu-box">
 				<view class="item" @click="goHome">
-					<image src="../static/images/back_home.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/back_home.png" mode=""></image>
 					<text>首页</text>
 				</view>
 				<view class="item" @click="changeFollow">
-					<image v-if="!isFollow" src="../static/images/focus.png" mode=""></image>
-					<image v-show="isFollow" src="../static/images/focus_sel.png" mode=""></image>
+					<image v-if="!isFollow" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/focus.png" mode=""></image>
+					<image v-show="isFollow" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/focus_sel.png" mode=""></image>
 					<text>关注</text>
 				</view>
 			</view>

+ 4 - 4
pages_doctor/doctorIm.vue

@@ -55,7 +55,7 @@
 						</view>
 					</view>
 					<view class="img-box">
-						<image src="../static/images/head.jpg" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/head.jpg" mode=""></image>
 					</view>
 				</view>
 			</view> -->
@@ -77,20 +77,20 @@
 					 v-model="sendText"
 					@input="textInput" 
 				/>
-				<image v-if="!hasSendValue" src="../static/images/add26.png" mode="" @click="showMoreMenu"></image>
+				<image v-if="!hasSendValue" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/add26.png" mode="" @click="showMoreMenu"></image>
 				<view v-if="hasSendValue" class="send-btn" @click="sendMsg">发送</view>
 			</view>
 			<!-- 功能按钮 -->
 			<view :class="showBottomMenu?'bottom-menu show':'bottom-menu'">
 				<view class="item">
 					<view class="img-box">
-						<image src="../static/images/health.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/health.png" mode=""></image>
 					</view>
 					<text class="text">投诉反馈</text>
 				</view>
 				<view class="item">
 					<view class="img-box">
-						<image src="../static/images/health.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/health.png" mode=""></image>
 					</view>
 					<text class="text">常见问题</text>
 				</view>

+ 4 - 4
pages_doctor/doctorList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="../static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="searchVal" placeholder="输入医生姓名搜索" confirm-type="搜索" @confirm="goSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -19,7 +19,7 @@
 					>
 						<view class="text">
 							{{ item.departmentName }}
-							<image v-show="deptId == item.departmentId" class="tab-bg" src="../static/images/tab_bg.png" mode=""></image>
+							<image v-show="deptId == item.departmentId" class="tab-bg" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/tab_bg.png" mode=""></image>
 						</view>
 					</view>
 				</view>
@@ -56,7 +56,7 @@
 						<!-- 评分 -->
 						<!-- <view class="rate-box">
 							<view class="star">
-								<image src="../static/images/star.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/star.png" mode=""></image>
 								<text>{{ item.pings }}</text>
 							</view>
 							<view class="line"></view>
@@ -107,7 +107,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png',
 						tip: '暂无数据'
 					}
 				},

+ 1 - 1
pages_doctor/doctorQr.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="content">
 		<view class="item">
-			<image style="width: 222rpx;height: 144rpx;" mode="aspectFit" src="../static/images/no_data.png"></image>
+			<image style="width: 222rpx;height: 144rpx;" mode="aspectFit" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/no_data.png"></image>
 			<view>暂无咨询</view>
 			<!-- <image mode="aspectFit" :show-menu-by-longpress="true" :src="urls[0]"  ></image> -->
 			<!-- <view class="btn" @click="savePhoto()">

+ 11 - 11
pages_doctor/index.vue

@@ -7,7 +7,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="../static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" :value="searchValue" placeholder="输入关键字" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -15,19 +15,19 @@
 		<!-- 快速问诊、找医生 -->
 		<view class="online-inquiry" :style="{marginTop:top}">
 			<view class="item" @click="navTo('./postConsult')">
-				<image class="bg-img" src="../static/images/online_treat.png" mode=""></image>
+				<image class="bg-img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/online_treat.png" mode=""></image>
 				<view class="inner">
 					<text class="title">快速问诊</text>
 					<text class="sub-title">智能科室 快速匹配</text>
-					<image src="../static/images/fast_ask.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/fast_ask.png" mode=""></image>
 				</view>
 			</view>
 			<view class="item" @click="navTo('./doctorList')">
-				<image class="bg-img" src="../static/images/chu_query.png" mode=""></image>
+				<image class="bg-img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/chu_query.png" mode=""></image>
 				<view class="inner">
 					<text class="title">找医生</text>
 					<text class="sub-title">全国60万医生任你选</text>
-					<image src="../static/images/doctor_blue.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/doctor_blue.png" mode=""></image>
 				</view>
 			</view>
 		</view>
@@ -49,7 +49,7 @@
 							>
 								<view class="text">
 									{{ item.name }}
-									<image v-show="item.id ==  param.orderType" class="tab-bg" src="../static/images/tab_bg.png" mode=""></image>
+									<image v-show="item.id ==  param.orderType" class="tab-bg" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/tab_bg.png" mode=""></image>
 								</view>
 							</view>
 						</view>
@@ -84,8 +84,8 @@
 								<!-- 语音回答 -->
 								<view class="voice-inner" v-if="item.orderType == '2'">
 									<free-audio 
-										startPic='/static/images/play.png' 
-										endPic='/static/images/pause.png'
+										startPic='https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/play.png' 
+										endPic='https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/pause.png'
 										activeColor="#2BC7B9"
 										:audioId="'audio'+index"
 										:url='item.replyAudioUrl'
@@ -93,7 +93,7 @@
 								</view>
 							</view>
 							<view class="read-box">
-								<image src="../static/images/eye.png" mode=""></image>
+								<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/eye.png" mode=""></image>
 								<text class="text">{{item.views}}人看过</text>
 							</view>
 						</view>
@@ -109,7 +109,7 @@
 <script>
 	import {getDepartmentList,getDoctorCase} from '@/api/doctorOrder.js'
 	import Loading from "@/components/Loading";
-	import tabBg from "@/static/images/tab_bg.png"
+	// import tabBg from "https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/tab_bg.png"
 	import freeAudio from '@/components/chengpeng-audio/free-audio.vue'
 	export default {
 		components: {freeAudio,Loading},
@@ -121,7 +121,7 @@
 				// 状态栏的高度
 				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
 				searchValue: '',
-				tabBg: tabBg, // tab切换背景
+				tabBg: 'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/tab_bg.png', // tab切换背景
 				current: 0,
 				param: {
 				  orderType:0,

+ 1 - 1
pages_doctor/paymentOrder.vue

@@ -14,7 +14,7 @@
 				<view class="title">支付方式</view>
 				<view class="item">
 					<view class="left">
-						<image src="../static/images/wecha_pay.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/wecha_pay.png" mode=""></image>
 						<text class="text">微信支付</text>
 					</view>
 					<label>

+ 4 - 4
pages_doctor/submitOrder.vue

@@ -6,7 +6,7 @@
 				<view class="title-box">
 					<text class="title">选择问诊人</text>
 					<view class="add-box">
-						<image src="../static/images/add26.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/add26.png" mode=""></image>
 						<text @click="addPeople">添加</text>
 					</view>
 				</view>
@@ -19,7 +19,7 @@
 							<text class="ege">{{utils.getAge(item.birthday)}}岁</text>
 						</view>
 						<!-- 选中的对号角标 -->
-						<image v-if="patientId == item.patientId" class="active-img" src="../static/images/sel_right50.png" mode=""></image>
+						<image v-if="patientId == item.patientId" class="active-img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/sel_right50.png" mode=""></image>
 					</view>
 				</view>
 			</view>
@@ -46,11 +46,11 @@
 					<!-- 上传的图片列表 -->
 					<view class="img-item" v-for="(item,index) in imgList" :key="index" @tap="viewImage" :data-url="imgList[index]">
 						<image class="img" :src="item" mode="aspectFill"></image>
-						<image class="close-img" src="../static/images/close32.png" mode="" @tap.stop="delImg" :data-index="index"></image>
+						<image class="close-img" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/close32.png" mode="" @tap.stop="delImg" :data-index="index"></image>
 					</view>
 					<!-- 上传图片按钮 -->
 					<view class="uoload-btn" @tap="chooseImage" v-if="imgList.length<3">
-						<image src="../static/images/photo.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/photo.png" mode=""></image>
 						<text>上传照片</text>
 					</view>
 				</view>

+ 1 - 1
pages_index/index/articleDetails.vue

@@ -15,7 +15,7 @@
 		<!-- 咨询按钮 -->
 		<view class="inquiry">
 			<view class="content">
-				<image src="/static/images/consult.png" mode=""></image>
+				<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/consult.png" mode=""></image>
 				<text class="text">咨询</text>
 				<button class="contact-btn" open-type="contact"></button>
 			</view>

+ 2 - 2
pages_index/index/articleList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -27,7 +27,7 @@
 						<view class="info-box">
 							<view class="readers">
 								<view class="readings">
-									<image class="eye" src="/static/images/eye.png" ></image>
+									<image class="eye" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/eye.png" ></image>
 									<text class="num">{{item.views}}</text>
 								</view>
 							</view>

+ 2 - 2
pages_index/index/chineseMedicineList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -38,7 +38,7 @@
 					<view class="r-item" @click="showDetail(item)" v-for="item in dataList">
 						<view class="r-left">{{item.medicineName}}</view>
 						<view class="r-right">
-							<image src="/static/images/fire.png"></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/fire.png"></image>
 						</view>
 					</view>
 				</view>

+ 2 - 2
pages_index/index/diseaseList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -27,7 +27,7 @@
 						<view class="title ellipsis1">{{ item.diseaseName }}</view>
 					</view>
 					<view class="right">
-						<image src="../../static/images/arrow_gray.png"></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png"></image>
 					</view>
 				</view>
 			</view>

+ 2 - 2
pages_index/index/doctorArticleList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -32,7 +32,7 @@
 									</view>
 								</view>
 								<view class="readings">
-									<image class="eye" src="/static/images/eye.png" ></image>
+									<image class="eye" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/eye.png" ></image>
 									<text class="num">{{item.views}}</text>
 								</view>
 							</view>

+ 2 - 2
pages_index/index/famousPrescribeList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -41,7 +41,7 @@
 					<view class="r-item" @click="showDetail(item)" v-for="item in dataList">
 						<view class="r-left">{{item.prescribeName}}</view>
 						<view class="r-right">
-							<image src="/static/images/fire.png"></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/fire.png"></image>
 						</view>
 					</view>
 				</view>

+ 1 - 1
pages_index/index/medicatedFoodList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>

+ 2 - 2
pages_index/index/questionsList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入服务包搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -27,7 +27,7 @@
 						<view class="info-box">
 							<view class="readers">
 								<view class="readings">
-									<image class="eye" src="/static/images/eye.png" ></image>
+									<image class="eye" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/eye.png" ></image>
 									<text class="num">{{item.views}}</text>
 								</view>
 							</view>

+ 4 - 4
pages_index/index/test.vue

@@ -6,7 +6,7 @@
 					<text class="patient-title">选择体验者</text>
 					<view class="right" >
 						<text class="value">请点击添加</text>
-						<image src="/static/images/arrow_gray.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 					</view>
 				</view>
 				<view class="patient" @click="addPatient()" v-if="patient!=null">
@@ -20,7 +20,7 @@
 						</view>
 					</view>
 					<view class="right" >
-						<image src="/static/images/arrow_gray.png" mode=""></image>
+						<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 					</view>
 				</view>
 			</view>
@@ -59,7 +59,7 @@
 			<view class="patient-box" @click="addPatient()" v-if="patient==null">
 				<text class="patient-title">选择体验者</text>
 				<view class="right" >
-					<image src="/static/images/arrow_gray.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 				</view>
 			</view>
 			<view class="patient" @click="addPatient()" v-if="patient!=null">
@@ -73,7 +73,7 @@
 					</view>
 				</view>
 				<view class="right" >
-					<image src="/static/images/arrow_gray.png" mode=""></image>
+					<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/arrow_gray.png" mode=""></image>
 				</view>
 			</view>
 		</view>

+ 2 - 2
pages_index/index/vesselList.vue

@@ -4,7 +4,7 @@
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<image class="icon-search" src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/search.png" mode=""></image>
 					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
@@ -37,7 +37,7 @@
 					<view class="r-item" @click="showDetail(item)" v-for="item in dataList">
 						<view class="r-left">{{item.vesselName}}</view>
 						<view class="r-right">
-							<image src="/static/images/fire.png"></image>
+							<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/shop/images/fire.png"></image>
 						</view>
 					</view>
 				</view>

+ 299 - 0
pages_manage/components/UrgeIndex.vue

@@ -0,0 +1,299 @@
+<template>
+	<view class="container column hb hidden">
+		<view class="p20 bgf" style="z-index: 999;">
+			<u-subsection class="subsection" :list="list" :current="current" bgColor="#e7f1fe" activeColor="#1677ff"
+				:fontSize="15" :bold="false" @change="sectionChange"></u-subsection>
+		</view>
+		<view style="flex: 1;" >
+			<scroll-view scroll-y="true" class="hb" :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">
+				<view class="list-box" v-for="(item,index) in userlist" :key="index">
+					<view class="justify-start align-center">
+						<u-avatar :src="item.avatar" size="50"></u-avatar>
+						<view class="ml20">
+							<view>{{item.name}}</view>
+							<view class="fs24 mt10 base-color">{{item.title}}</view>
+						</view>
+					</view>
+				</view>
+				<u-loadmore :status="status" />
+			</scroll-view>
+		</view>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="24"
+		:loading-text="loadingtext"></u-loading-page>
+		<view class="h120"></view>
+		
+	</view>
+</template>
+
+<script>
+	import {
+		getFsCourseList,
+		getCourseVdieoList,
+		getWorkTask
+	} from "@/api/manageCompany.js";
+	export default {
+		data() {
+			return {
+				list: [{
+					name: '注册会员',
+				}
+				],
+				current:0,
+				viewload:true,
+				loadingtext:"数据加载中...",
+				filterData: [{
+					name: '营期',
+					value: 0,
+				}, {
+					name: '课程',
+					value: 1,
+				}],
+				searchbarNav: 0,
+				//营期分页
+				triggeredA: false,
+				isEnabledA: true,
+				statusA: 'nomore',
+				pageNumA: 1,
+				pageSizeA: 6,
+				//课程分页
+				triggeredC: false,
+				isEnabledC: true,
+				statusC: 'nomore',
+				pageNumC: 1,
+				pageSizeC: 6,
+				//获取营期/课程列表
+				courseListA: [],
+				courseListAid: '',
+				courseListC: [],
+				courseListCid: '',
+				actC: '',
+				//获取会员列表
+				//课程分页
+				triggered: false,
+				isEnabled: true,
+				status: 'nomore',
+				pageNum: 1,
+				pageSize: 8,
+				userlist:[]
+			};
+		},
+		mounted() {
+			this.getcourseA()
+			this.getlist()
+		},
+		methods: {
+			sectionChange(index){
+				this.current=index
+			},
+			reachBottom() {
+				if (this.status === 'loadmore') {
+					this.status = 'loading'
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						this.pageNum++
+						this.getlist() 
+						uni.hideNavigationBarLoading()
+					}, 1000);
+				}
+			},
+			//列表展示下拉
+			pullDownRefresh() {
+				this.triggered = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggered = false;
+					uni.stopPullDownRefresh()
+					this.pageNum = 1;
+					this.getlist('refresh') 
+				}, 1000)
+			},
+			getlist(type){
+				const data={
+					pageNum:this.pageNum,
+					pageSize:this.pageSize
+				}
+				getWorkTask(data).then(res=>{
+					if (res.code == 200) {
+						this.viewload=false
+						if (type == 'refresh') {
+							this.userlist = res.data.list
+						} else {
+							this.userlist = [...this.userlist, ...res.data.list]
+						}
+						if (res.data.isLastPage) {
+							this.status = 'nomore'
+						} else {
+							this.status = 'loadmore'
+						}
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			onChangeA(index) {
+				this.searchbarNav = index
+				if(index==1){
+					if(this.courseListAid==''){
+						uni.showToast({
+							icon: 'none',
+							title: '请先选择营期'
+						})
+					}
+				}
+			},
+			confirmA() {
+			},
+			resetA() {
+				this.courseListAid = ''
+			},
+			getCourseOne(item) {
+				//获取营期列表
+				this.courseListAid = item.periodId
+				this.filterData[0].name = item.periodName
+				this.courseListC=[]
+				this.pageNumC=1
+				this.getcourseB()
+				// console.log(this.courseListAid)
+			},
+			getCoursetwo(item, index) {
+				//获取课程列表
+				this.actC = index
+				this.courseListCid = item.courseId
+				this.filterData[1].name = item.courseName
+				// console.log(item)
+			},
+			reachBottomA() {
+				// status这个是加载状态
+				if (this.statusA === 'loadmore') {
+					this.statusA = 'loading'
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						this.pageNumA++
+						this.getcourseA() //触底  不穿执行else
+						uni.hideNavigationBarLoading()
+					}, 1000);
+				}
+			},
+			//列表展示下拉
+			pullDownRefreshA() {
+				// 下拉
+				this.triggeredA = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggeredA = false;
+					uni.stopPullDownRefresh()
+					this.pageNumA = 1;
+					this.getcourseA('refresh') //触底  不穿执行else
+					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+				}, 1000)
+			},
+			reachBottomC() {
+				// status这个是加载状态
+				if (this.statusC === 'loadmore') {
+					this.statusC = 'loading'
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						this.pageNumC++
+						this.getcourseB() //触底  不穿执行else
+						uni.hideNavigationBarLoading()
+					}, 1000);
+				}
+			},
+			//列表展示下拉
+			pullDownRefreshC() {
+				// 下拉
+				this.triggeredC = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggeredC = false;
+					uni.stopPullDownRefresh()
+					this.pageNumC = 1;
+					this.getcourseB('refresh') //触底  不穿执行else
+					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+				}, 1000)
+			},
+			getcourseA(type) {
+				//获取营期列表
+				const data = {
+					pageNum: this.pageNumA,
+					pageSize: this.pageSizeA,
+				}
+				getFsCourseList(data).then(res => {
+					if (res.code == 200) {
+						if (type == 'refresh') {
+							this.courseListA = res.data.list
+						} else {
+							this.courseListA = [...this.courseListA, ...res.data.list]
+						}
+						if (res.data.isLastPage) {
+							this.statusA = 'nomore'
+						} else {
+							this.statusA = 'loadmore'
+						}
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getcourseB(type) {
+				//获取课程列表
+				const data = {
+					pageNum: this.pageNumC,
+					pageSize: this.pageSizeC,
+					periodId: this.courseListAid,
+					keyword: ''
+				}
+				getCourseVdieoList(data).then(res => {
+					if (res.code == 200) {
+						if (type == 'refresh') {
+							this.courseListC = res.data.list
+						} else {
+							this.courseListC = [...this.courseListC, ...res.data.list]
+						}
+						if (res.data.isLastPage) {
+							this.statusC = 'nomore'
+						} else {
+							this.statusC = 'loadmore'
+						}
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.container {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #222;
+		display: flex;
+		flex-direction: column;
+		/* #ifdef MP-WEIXIN */
+		height: 100vh;
+		/* #endif */
+	}
+	.select {
+		color: #1773ff;
+		background-color: #e6ecff;
+	}
+	.list-box {
+		background-color: #fff;
+		padding: 28rpx;
+		margin-bottom: 12rpx;
+	}
+</style>

+ 103 - 0
pages_manage/components/chart.vue

@@ -0,0 +1,103 @@
+<template>
+	<view class="charts-box">
+		<qiun-data-charts type="funnel" :opts="opts" :chartData="chartData" :canvas2d="true" />
+	</view>
+</template>
+
+<script>
+	// import {
+	// 	getcourseRate
+	// } from "@/api/courseManage.js"
+	export default {
+		props: {
+			getratelist: {
+				type: Object,
+				default: () => ([{
+					name: '掌声',
+					value: 10
+				}])
+			}
+		},
+		data() {
+			return {
+				chartData: {},
+				//您可以通过修改 config-ucharts.js 文件中下标为 ['funnel'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
+				opts: {
+					color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
+						"#ea7ccc"
+					],
+					padding: [15, 15, 0, 15],
+					enableScroll: false,
+					canvas2d:true,
+					extra: {
+						funnel: {
+							activeOpacity: 0.3,
+							activeWidth: 10,
+							border: true,
+							borderWidth: 2,
+							borderColor: "#FFFFFF",
+							fillOpacity: 1,
+							labelAlign: "right"
+						}
+					},
+					
+				}
+			};
+		},
+		mounted() {
+			console.log("上课的接口数据端口",this.getratelist)
+			this.getServerData();
+		},
+		methods: {
+			getServerData() {
+				//模拟从服务器获取数据时的延时
+				setTimeout(() => {
+					// 模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
+					this.chartData = {
+						series: [{
+							name: '流量',
+							data: this.getratelist.data.map(item => {
+								return {
+									name: item.name,
+									value: item.value,
+									centerText: item.value,
+								};
+							})
+							// data: [{
+							// 	"name": "一班",
+							// 	"centerText": "50",
+							// 	"value": 50
+							// }, {
+							// 	"name": "二班",
+							// 	"centerText": "30",
+							// 	"value": 30
+							// }, {
+							// 	"name": "三班",
+							// 	"centerText": "20",
+							// 	"value": 20
+							// }, {
+							// 	"name": "四班",
+							// 	"centerText": "18",
+							// 	"value": 0
+							// }, {
+							// 	"name": "五班",
+							// 	"centerText": "8",
+							// 	"value": 0
+							// }]
+						}]
+					};
+					console.log("上课的接口数据端口",this.chartData)
+					// this.chartData = JSON.parse(JSON.stringify(this.getratelist));
+				}, 500);
+			},
+		}
+	};
+</script>
+
+<style scoped>
+	/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
+	.charts-box {
+		width: 100%;
+		height: 300px;
+	}
+</style>

+ 518 - 0
pages_manage/components/courseIndex.vue

@@ -0,0 +1,518 @@
+<template>
+	<view class="container">
+		<view class="headbox">
+			<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"
+							@search='searchKeyword'></u-search>
+					</view>
+					<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"
+									:class="courserIndex == index ? 'boxnav-active':''"
+									@click="handleCourse(item,index)">{{item.periodName}}</view>
+							</view>
+						</view>
+					</view>
+					<u-loadmore :status="status" />
+				</scroll-view>
+				
+			</dropdownPanel>
+		</view>
+		<view  class="justify-between align-center mb20 mlr20 mt20 ">
+			<u-search placeholder="请输入课程名称" v-model="keywordlist" :showAction="false" height="30px"
+				@search='searchKeywordlist' bgColor='#fff'></u-search>
+		</view>
+		<view class="container-right" >
+			<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" @retime='reflashtime'/>
+					<u-loadmore :status="loadStatus" />
+					<view class="h120"></view>
+				</view>
+			</scroll-view>
+		</view>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="24"
+		:loading-text="loadingtext"></u-loading-page>
+	</view>
+</template>
+
+<script>
+	import {
+		getFsCourseList,
+		getCourseVdieoList,
+		getTodayCourse,
+	} from "@/api/manageCompany.js"
+	import dropdownPanel from "../components/dropdownPanel.vue"
+	import courseItem from "../components/courseItem.vue"
+	export default {
+		name:"liveCourse",
+		components: {
+			courseItem,
+			dropdownPanel
+		},
+		props: ['parentMethod'],
+		data() {
+			return {
+				viewload:true,
+				loadingtext:"数据加载中...",
+				user: {},
+				filterData: [{
+						name: '今日课程',
+						value: 0,
+						type: 'click',
+					},{
+						name: ' 我的课程',
+						value: 1,
+					},
+				],
+				contentH: 0,
+				activeTab: 1,
+				courseList: [],
+				courseId: '',
+				searchbarNav: 0,
+				courserIndex: null,
+				searchbar: [{
+						name: '我的课程'
+					},
+					{
+						name: '课程状态'
+					}
+				],
+				mescroll: null,
+				downOption: {
+					use: true,
+					auto: false
+				},
+				upOption: {
+					onScroll: false,
+					use: true, // 是否启用上拉加载; 默认true
+					auto: true,
+					page: {
+						pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					textNoMore: "已经到底了",
+					empty: {
+						icon: 'https://cos.his.cdwjyyh.com/fs/20240423/cf4a86b913a04341bb44e34bb4d37aa2.png',
+						tip: '暂无数据'
+					}
+				},
+				dataList: [],
+				params: {
+					pageNum: 1,
+					pageSize: 10
+				},
+				triggered: false,
+				loadStatus: 'loadmore',
+				//课程选择列表
+				pageNum:1,
+				pageSize: 10,
+				triggereds: false,
+				status: 'loadmore',
+				keyword:'',
+				isEnableds:true,
+				keywordlist:'',
+				actid:'',
+				scrollTop: 0,
+				old: {
+					scrollTop: 0
+				},
+				shareConfig:'',
+				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.gettodaylist()
+			console.log(this.courserIndex)
+		},
+		methods: {
+			onChildDataUpdate(data) {
+				this.childdata = data
+				this.showShare = this.childdata.onshow
+				console.log(this.childdata);
+				console.log('父组件', this.childdata.path + "?course=" +JSON.stringify(this.childdata.params) )
+			},
+			reflashtime(){
+				this.keywordlist=''
+				this.params.pageNum=1
+				this.dataList=[]
+				this.gettodaylist()
+				this.getFsCourseList('refresh')
+			},
+			gettodaylist(){
+				const data={
+					pageNum:this.params.pageNum,
+					pageSize:this.params.pageSize,
+				}
+				getTodayCourse(data).then(res=>{
+					console.log(res)
+					if(res.code==200){
+						this.viewload=false
+						this.dataList=res.data.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()
+				}else{
+					this.params.pageNum = 1
+					this.keywordlist=''
+					this.getFsCourseList('refresh')
+				}
+				console.log(e)
+			},
+			handleShare(config) {
+			      // 保存分享配置到父页面数据
+			      this.shareConfig = config;
+				  this.$emit('child-data-update', this.shareConfig);
+			      // 调起分享面板(微信小程序需主动调用)
+			      // #ifdef MP-WEIXIN
+			      uni.showShareMenu();
+			      // #endif
+			  },
+			scroll: function(e) {
+				this.old.scrollTop = e.detail.scrollTop
+			},
+			onChange(index) {
+				this.searchbarNav = index
+			},
+			reset() {
+				this.courseId = ''
+				this.keyword =''
+				this.courseList=[]
+				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[1].name=this.titleName
+				console.log(this.filterData[1].name)
+				this.params.pageNum=1
+				// this.getListInit()
+				this.getListData('refresh')
+			},
+			searchKeyword(value){
+				this.courseList=[]
+				this.keyword = value
+				this.params.pageNum=1
+				this.getFsCourseList('refresh')
+			},
+			searchKeywordlist(value){
+				this.dataList = []
+				this.keywordlist = value
+				this.getListData()
+			},
+			pullDownRefreshs() {
+				// 下拉
+				this.triggereds = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggereds = false;
+					uni.stopPullDownRefresh()
+					this.pageNum = 1;
+					this.getFsCourseList('refresh') //触底  不穿执行else
+					// 请求接口里面需要判断是不是最后一页 是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+				}, 1000)
+			},
+			reachBottoms() {
+				// status这个是加载状态
+				if (this.status === 'loadmore') {
+					this.status = 'loading'
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						this.pageNum++
+						this.getFsCourseList() //触底  不穿执行else
+						uni.hideNavigationBarLoading()
+					}, 1000);
+				}
+			},
+			// 训练营
+			getFsCourseList(type) {
+				const day = uni.$u.timeFormat(new Date(), 'yyyy-mm-dd')
+				const param = {
+					pageNum:this.pageNum,
+					pageSize:this.pageSize,
+					keyword:this.keyword
+				}
+				getFsCourseList(param).then(res => {
+					if (res.code == 200) {
+						if (type == 'refresh') {
+							this.courseList = res.data.list
+						} else {
+							// 加载更多 当前页和下一页合并
+							this.courseList = [...this.courseList, ...res.data.list]
+						}
+						if ( res.data.isLastPage) {
+							this.status = 'nomore'
+						} else {
+							this.status = 'loadmore'
+						}
+						// this.courseId=this.courseList[0].periodId
+						// this.filterData[1].name=this.courseList[0].periodName
+						// this.getListInit()
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						});
+					}
+				})
+			},
+			handleNav(type) {
+				this.activeTab = type
+			},
+			clickSearchbar(type) {
+				this.searchbarNav = type == this.searchbarNav ? 'colse' : type
+			},
+			getListInit() {
+				this.params.pageNum = 1
+				this.getListData('refresh')
+			},
+			async getListData(type) {
+				console.log(type)
+				uni.showLoading({
+					title: "加载中..."
+				})
+				this.loadStatus = 'loading'
+				const result = await getCourseVdieoList({
+					periodId: this.courseId,
+					keyword:this.keywordlist,
+					...this.params
+				})
+				if (result) {
+					const {
+						isLastPage,
+						total,
+						list,
+					} = result.data
+					if (type == 'refresh') {
+						this.dataList = list
+					} else {
+						this.dataList = [...this.dataList, ...list]
+					}
+					if (isLastPage) {
+						this.loadStatus = 'nomore';
+					} else {
+						this.loadStatus = 'loadmore';
+					}
+					// 当页数为1时,重置滚动位置
+					    if (this.params.pageNum === 1) {
+							console.log(this.scrollTop)
+					      this.scrollTop = this.old.scrollTop
+					      this.$nextTick(function() {
+					      	this.scrollTop = 0
+					      });
+					    }
+					uni.hideLoading()
+				} else {
+					uni.showToast({
+						icon: 'none',
+						title: "请求失败",
+					});
+					this.dataList = []
+				}
+			},
+			/**
+			 * 触底添加下一页
+			 */
+			reachBottom(options) {
+				if (this.loadStatus === 'loadmore') {
+					this.loadStatus = 'loading'
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						this.params.pageNum += 1;
+						this.getListData('more')
+						uni.hideNavigationBarLoading()
+					}, 500);
+				}
+			},
+			/**
+			 * 下拉列表页
+			 */
+			pullDownRefresh(options) {
+				this.triggered = true;
+				setTimeout(() => {
+					this.triggered = false;
+					uni.stopPullDownRefresh()
+					this.params.pageNum = 1;
+					if(this.seltoday==0){
+						this.gettodaylist()
+					}else{
+						this.getListData('refresh')
+					}
+				}, 500)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #222;
+		display: flex;
+		flex-direction: column;
+		/* #ifdef MP-WEIXIN */
+		height: 100vh;
+		/* #endif */
+	}
+
+	.boxnav {
+		flex-wrap: wrap;
+		padding: 0 0 0 10px;
+
+		&-item {
+			width: 50%;
+			overflow: hidden;
+		}
+
+		&-item-info {
+			border: 1px solid #f5f5f5;
+			text-align: center;
+			color: #222;
+			background-color: #f5f5f5;
+			border-radius: 3px;
+			padding: 5px;
+			margin: 0 10px 10px 0;
+		}
+
+		&-active {
+			border: 1px solid #1677ff !important;
+			color: #1677ff !important;
+			background-color: #e7f1fe !important;
+		}
+	}
+
+	.headbox {
+		background-color: #fff;
+	}
+
+	.headnav {
+		padding: 15px 12px;
+		margin: 0 -10px -10px 0;
+		box-sizing: border-box;
+
+		image {
+			height: 60px;
+			width: 50px;
+			position: absolute;
+			z-index: 0;
+			bottom: 0;
+			right: 0;
+			display: none;
+		}
+
+		&-item {
+			flex: 1;
+			font-size: 16px;
+			padding: 10px;
+			border-radius: 10px;
+			background: #f5f5f5;
+			margin: 0 10px 10px 0;
+			position: relative;
+			z-index: 1;
+			overflow: hidden;
+			color: #555;
+		}
+
+		&-active {
+			background-color: rgb(231, 241, 255) !important;
+
+			.headnav-num {
+				color: #1677ff !important;
+			}
+
+			image {
+				display: block !important;
+			}
+		}
+
+		&-num {
+			font-family: DIN, DIN;
+			font-weight: bold;
+			font-size: 25px;
+			margin: 5px 0;
+		}
+	}
+
+	.searchbar {
+		flex: 1;
+		padding-bottom: 10px;
+
+		.arrow-down {
+			margin-left: 5px;
+		}
+
+		&-active {
+			color: #1677ff !important;
+
+			.arrow-down {
+				transform: rotate(180deg);
+			}
+		}
+	}
+	.container-right {
+		flex: 1;
+		height: calc(100% - 80rpx);
+		overflow-y: scroll;
+		// padding-bottom: 80rpx;
+		.list {
+			padding: 10px;
+			box-sizing: border-box;
+			width: 100%;
+		}
+	}
+</style>

+ 749 - 0
pages_manage/components/courseItem.vue

@@ -0,0 +1,749 @@
+<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> -->
+				<image :src="info.thumbnail" mode="aspectFill"></image>
+			</view>
+			<view class="courselist-con-r">
+				<view @click.passive.stop>
+					<text class="more-t ">{{info.title}}</text>
+					<view class="btn_icon" style="margin-left: 5px;" @click="copyId">ID
+						<image :src="imgpath+'/app/images/copy_icon.png'" mode="aspectFill"></image>
+					</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'" @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
+					name="share-square" color="#1677ff" size="18"></u-icon>分享课程</view>
+			<!--#endif-->
+			<!--#ifdef H5-->
+			<view class="courselist-footer-item x-c "  @click="handleShare"><u-icon
+					name="share-square" color="#1677ff" size="18"></u-icon>分享课程</view>
+			<!--#endif-->
+			<view class="courselist-footer-item x-c shishi" v-show="activeTab == 1" @click="handleStatistics"><u-icon
+					name="share-square" color="#1677ff" size="18"></u-icon>课程统计</view>
+			<view class="courselist-footer-item x-c shuju" v-show="activeTab == 2" @click="handleStatistics"><u-icon
+					name="share-square" color="#1677ff" size="18"></u-icon>数据统计</view>
+		</view>
+		<!-- 分享弹窗 -->
+		<u-popup :show="showShare" :closeOnClickOverlay="true" :round='20' @close="closeShare" @open="openShare">
+			<view class="sharePop x-ac">
+				<!--#ifdef MP-WEIXIN-->
+				<view class="sharePop-item y-f card-share" >
+					<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>
+				</view>
+				<!--#endif-->
+				<!--#ifdef H5-->
+				<view class="sharePop-item y-f" @click="buildimg">
+					<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>
+				<view class="sharePop-item y-f" @click="copyLink">
+					<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>
+				<!--#endif-->
+			</view>
+		</u-popup>
+		<!-- 设置链接有效时长弹窗 -->
+		<u-modal :show="setTimeShow" content='content' class="model" @confirm="confirmTime" :closeOnClickOverlay='true'
+			@close="closetext">
+			<view class="setTimebox">
+				<view class="timetip">不传默认以系统参数为准</view>
+				<view class="x-f">
+					<text style="margin-right: 20px;">链接有效时长(分钟)</text>
+					<u-input fontSize="14px" placeholder="链接有效时长" border="none" v-model="time" maxlength="5"></u-input>
+				</view>
+			</view>
+		</u-modal>
+		<u-notify ref="uNotify" message=""></u-notify>
+		<!-- 生成海报 -->
+		<u-popup :show="setImg" @close="closeimg" :round="12" style="z-index: 999;">
+			<view class="w100 h540 center">
+				<image :src="codeLink.url" mode="aspectFill" ></image>
+			</view>
+			<view class="justify-around mb40">
+				<!-- <view class="column justify-center align-center" @click="shareimg">
+					<image :src=:src="imgPath+'/app/image/wechat.png'" class="w80 h80"></image>
+					<view class="mt10">微信好友</view>
+				</view> -->
+				<view class="column justify-center align-center" @click="downimg">
+					<image :src="imgPath+'/app/image/downicon.png'" class="w80 h80"></image>
+					<view class=" mb10">长按图片保存</view>
+				</view>
+			</view>
+		</u-popup>
+		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
+			<view class="point-box">
+				<view class="imgshe">
+					<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=:src="imgPath+'/app/image/wxmore.png'" class="w50 h50 mlr10"></image>
+					</view>
+					<view class="mt20">选择 “转发给朋友”</view>
+					<view style="color: #cbcbcb;" class="fs28 mt40">点击任意位置关闭弹窗</view>
+				</view>
+			</view>
+		</u-overlay>
+	</view>
+</template>
+
+<script>
+	// import {
+	// 	sharecourselink,
+	// 	buildCode,
+	// 	getSDK,
+	// 	updataTime
+	// } from '@/api/courseManage'
+	export default {
+		props: {
+			activeTab: {
+				type: [Number, String],
+				default: 0
+			},
+			// 来源
+			from: {
+				type: String,
+				default: 'live'
+			},
+			info: {
+				type: Object,
+				default: () => {
+					return {}
+				}
+			},
+			parentMethod:{
+				type: Function
+			}
+		},
+		data() {
+			return {
+				cavansimg: false,
+				showShare: false,
+				setTimeShow: false,
+				time: "",
+				user: [],
+				type: 1,
+				copylink: '',
+				setImg: '',
+				codeLink: '',
+				setImg: false,
+				painterId: 'myPainter',
+				isLongPress: false,
+				painterSrc: '',
+				showzhidao: false,
+				// 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
+		    }
+		  },
+		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', {
+					 title: this.info.courseName+this.info.title,
+					 path: "pages_course/videovip",
+					 onshow:true,
+					 params: { companyId: this.user.companyId, companyUserId: this.user.userId,id:this.info.id,projectId:this.info.projectId,
+					 courseId:this.info.courseId,videoId:this.info.videoId,periodId:this.info.periodId},
+					 img:this.info.thumbnail||this.imgs
+				   });
+			},
+			// 获取jssdk
+			getjssdklist() {
+				const param = {
+					url: window.location.href.split('#')[0] // 注意去除 hash
+				}
+				getSDK(param).then(res => {
+					wx.config({
+						debug: false,
+						appId: res.data.appId, // 必填,公众号的唯一标识
+						timestamp: res.data.timestamp, // 必填,生成签名的时间戳
+						nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
+						signature: res.data.signature, // 必填,签名
+						jsApiList: ["updateAppMessageShareData", "onMenuShareAppMessage", ] // 必填,需要使用的JS接口列表
+					});
+				})
+			},
+			shareimg() {
+				let self = this
+				//分享好友
+				// 配置--配置全局
+				console.log(self.info.thumbnail + self.copylink, 11111)
+				wx.ready(function() { //需在用户可能点击分享按钮前就先调用
+					wx.updateAppMessageShareData({
+						title: self.info.courseName + self.info.title, // 分享标题
+						desc: self.info.description, // 分享描述
+						// link: self.copylink,
+						link: self.copylink,
+						// 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
+						imgUrl: self.info.thumbnail||self.imgs, // 分享图标
+						success: function(res) {
+							console.log(self.info, '456');
+							self.showzhidao = true
+							self.setImg = false
+							self.showShare = false
+							// 设置成功
+							uni.showToast({
+								title: '卡片已生成',
+								icon: 'none',
+								duration: 1000
+							});
+						},
+						
+					})
+
+					// 另外一个方法·
+					wx.onMenuShareAppMessage({
+						title: self.info.courseName + self.info.title, // 分享标题
+						desc: self.info.title, // 分享描述
+						link: self.copylink,
+						// 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
+						imgUrl: self.info.thumbnail, // 分享图标
+						success: function(res) {
+							console.log(self.info, '456');
+							self.showzhidao = true
+							self.setImg = false
+							self.showShare = false
+							// 设置成功
+							uni.showToast({
+								title: '卡片已生成',
+								icon: 'none',
+								duration: 1000
+							});
+						},
+						// complete: function(res) {
+						// 	uni.showToast({
+						// 		title: JSON.stringify(res),
+						// 		icon: 'none',
+						// 		duration: 2000
+						// 	})
+						// }
+					})
+					// wx.error((res) => {
+					// 	console.log('wx.error:', res);
+					// })
+				});
+			},
+			downimg() {
+
+			},
+			handleLongPress() {
+				this.isLongPress = true;
+				// 延时执行保存操作,避免误触
+				setTimeout(() => {
+					if (this.isLongPress) {
+						this.saveImage();
+					}
+				}, 1000); // 1000毫秒后执行保存操作
+			},
+			saveImage() {
+				const painter = this.$painter.getPainter(this.painterId);
+				painter.saveImage('jpg', (path) => {
+					uni.saveImageToPhotosAlbum({
+						filePath: path,
+						success: () => {
+							uni.showToast({
+								title: '保存成功'
+							});
+						},
+						fail: () => {
+							uni.showToast({
+								title: '保存失败',
+								icon: 'none'
+							});
+						}
+					});
+				}, 'myCanvas');
+			},
+			closeimg() {
+				this.setImg = false
+				this.showShare = false
+			},
+			closetext() {
+				this.setTimeShow = false
+			},
+			buildimg() {
+				this.buildimgAcode()
+			},
+			//生成海报和二维码
+			buildimgAcode() {
+				uni.showLoading({
+					title: '正在生成中...'
+				})
+				buildCode({
+					companyId: this.user.companyId,
+					companyUserId: this.user.userId,
+					courseId: this.info.courseId,
+					effectiveDuration: this.time,
+					videoId: this.info.videoId,
+					imgUrl:this.info.thumbnail,
+					title:this.info.title,
+					duration:this.info.duration,
+					periodId:this.info.periodId,
+					id:this.info.id
+				}).then(res => {
+					if (res.code == 200) {
+						this.codeLink = res.posterImage
+						this.setImg = true
+						this.getlink()
+						console.log(this.codeLink)
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			toCourseDetail(info) {
+				uni.navigateTo({
+					// url: '/pages/courseManage/course/learning?course='+JSON.stringify(info)
+					// url: `/pages/courseManage/course/learning?course=${JSON.stringify(info)}&isvip=1`
+					url:'/pages_managedata/coursedetail?videoId='+info.videoId+'&id='+info.id+'&periodId='+info.periodId
+				})
+
+			},
+			handleShare() {
+				// #ifdef H5
+				this.getjssdklist()
+				this.showShare = true
+				// #endif
+				// this.getlink('preload'); // 提前加载链接
+			},
+			closeShare() {
+				this.showShare = false
+				// console.log('open');
+			},
+			openShare() {
+				// this.showShare = false
+				// console.log('close');
+			},
+			copyLink() {
+				this.setTimeShow = true
+
+			},
+			confirmTime() {
+				this.setTimeShow = !this.setTimeShow
+				this.showShare = !this.showShare
+				const params = {
+					companyId: this.user.companyId,
+					companyUserId: this.user.userId,
+					courseId: this.info.courseId,
+					effectiveDuration: this.time,
+					videoId: this.info.videoId,
+					periodId:this.info.periodId,
+					id:this.info.id
+				}
+				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
+						})
+					}
+				})
+			},
+			getlink(type) {
+				const params = {
+					companyId: this.user.companyId,
+					companyUserId: this.user.userId,
+					courseId: this.info.courseId,
+					time: this.time,
+					periodId:this.info.periodId,
+					id:this.info.id,
+					// type: this.type,
+					videoId: this.info.videoId,
+				}
+				sharecourselink(params).then(res => {
+					if (res.code == 200) {
+						this.copylink = res.url
+						// 强制使用 HTTPS
+						 //  if (this.copylink.startsWith('http://')) {
+							// this.copylink = this.copylink.replace('http://', 'https://');
+						 //  }
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			handleStatistics() {
+				const info = {
+					courseId: this.info.courseId,
+					title: this.info.title,
+					thumbnail: this.info.thumbnail,
+					createTime: this.info.createTime,
+					duration: this.info.duration,
+					fileId: this.info.fileId,
+					courseName: this.info.courseName,
+					videoId:this.info.videoId,
+					periodId:this.info.periodId
+				}
+				console.log()
+				uni.navigateTo({
+					url: '/pages_manage/statistic?info=' + JSON.stringify(info)
+				})
+			},
+			copyId() {
+				uni.setClipboardData({
+					data: this.info.title,
+					success: () => {
+						// this.$refs.uNotify.show({
+						// 	top: 0,
+						// 	type: 'success',
+						// 	// color: '#000',
+						// 	// bgColor: '#e8e8e8',
+						// 	message: '复制课程标题成功',
+						// 	duration: 1000 * 2,
+						// 	fontSize: 20,
+						// 	safeAreaInsetTop: true
+						// })
+						uni.showToast({
+							icon: 'none',
+							title: '复制课程标题成功'
+						})
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.card-share{
+		position: relative;
+	}
+	.share{
+			display: inline-block;
+			position: absolute;
+			top: 0;
+			left: 0;
+			width: 100%;
+			height: 100%;
+			opacity: 0;
+		}
+	.imgshe {
+		display: flex;
+		flex-direction: row-reverse
+	}
+
+	.point-box {
+		height: 100%;
+		width: 100%;
+
+		.xu-box {
+			border: #f5f5f5 4rpx dashed;
+			padding: 20rpx 20rpx;
+		}
+	}
+
+	#codeurl {
+		position: relative;
+	}
+
+	::v-deep {
+		.model .u-fade-enter-active {
+			z-index: 10075 !important;
+		}
+	}
+
+	.sharePop {
+		background-color: #fff;
+		padding: 30rpx 0;
+		border-radius: 20px 20px 0 0;
+		/* #ifdef MP-WEIXIN */
+		 /* #endif */
+		 
+		/* #ifdef H5 */
+		padding-bottom: 100px;
+		 /* #endif */
+		&-item {
+			padding: 0 10px;
+			box-sizing: border-box;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			
+			display: inline-flex !important;
+			
+			image {
+				height: 48px;
+				width: 48px;
+				margin-bottom: 10px;
+			}
+		}
+	}
+
+	.setTimebox {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+	}
+
+	.timetip {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #2979ff;
+		text-align: center;
+		margin-bottom: 5px;
+	}
+
+	.courselist {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+
+		&-item {
+			width: 100%;
+			border-radius: 14px;
+			background-color: #fff;
+			overflow: hidden;
+			margin-bottom: 10px;
+		}
+
+		&-con {
+			padding: 10px 10px 5px 10px;
+			font-size: 12px;
+			color: #777;
+		}
+
+		&-con-r {
+			flex: 1;
+			overflow: hidden;
+
+			.more-t {
+				flex: 1;
+				font-size: 14px;
+				color: #222;
+				display: inline;
+			}
+
+			image {
+				width: 20px;
+				height: 20px;
+			}
+
+			.btn_icon {
+				font-size: 14px;
+				color: #1677ff;
+				display: inline-flex;
+				align-items: center;
+			}
+		}
+
+		&-img {
+			width: 110px;
+			height: 70px;
+			border-radius: 10px;
+			overflow: hidden;
+			flex-shrink: 0;
+			margin-right: 10px;
+			position: relative;
+
+			image {
+				height: 100%;
+				width: 100%;
+			}
+
+			.status {
+				position: absolute;
+				top: 0;
+				left: 0;
+				z-index: 2;
+				height: 21px;
+				padding: 0 5px;
+				box-sizing: border-box;
+				line-height: 21px;
+				border-radius: 10px 0 10px 0;
+				text-align: center;
+				color: #fff;
+				background-color: #08ce36;
+			}
+		}
+
+		&-desc {
+			flex: 1;
+			margin-top: 7px;
+		}
+
+		&-con-timebox {
+			margin-top: 7px;
+			flex-wrap: wrap;
+
+			.acea-row {
+				margin-right: 12px;
+				margin-bottom: 5px;
+				flex-wrap: nowrap;
+			}
+
+			.icon {
+				margin-right: 5px;
+			}
+		}
+
+		&-footer {
+			padding: 5px;
+			font-size: 14px;
+
+			&-item {
+				flex: 1;
+				text-align: center;
+				color: #1677ff;
+				padding: 6px;
+				box-sizing: border-box;
+			}
+
+			.shishi {
+				border-left: 1px solid #f5f5f5;
+			}
+
+			.shuju {
+				border-radius: 5px;
+				border: 1px solid #1677ff;
+			}
+		}
+	}
+</style>

+ 748 - 0
pages_manage/components/dataIndex.vue

@@ -0,0 +1,748 @@
+<!-- 数据组件页面 -->
+<template>
+	<view class="column flex-1 hb">
+		<view class="topdata">
+			<!-- #ifdef MP-WEIXIN -->
+			<view class="h10"></view>
+			<!-- #endif -->
+			<view class="topdata-box" @click="operation">
+				<view class="justify-between">
+					<view>数据汇总</view>
+					<view class="justify-between center">
+						<text class="fs24 " style="color: #666;">查看详细数据</text>
+						<u-icon name="arrow-right-double" color="#666666" size="14"></u-icon>
+					</view>
+				</view>
+				<view class="x-bc">
+					<view class="topdata-item">
+						<view class="topdata-item-num"><text>{{companyUserUserCount}}</text>人</view>
+						<view>会员总数</view>
+					</view>
+					<view class="topdata-item">
+						<view class="topdata-item-num"><text>{{companyUserCount}}</text>人</view>
+						<view>今日新增会员</view>
+					</view>
+				</view>
+			</view>
+			<view>
+				<u-collapse ref="pydameinvRef" :value="['show']" :border='false' @change='changelable'>
+					<!-- #ifdef MP-WEIXIN -->
+					<u-collapse-item name="show" title="标签统计">
+					<!-- #endif -->
+						<!-- #ifndef MP-WEIXIN -->
+						<u-collapse-item name="show">
+							<view slot="title">
+								<text class="bold fs32">标签统计</text>
+								<text class="fs24 base-color-9 ml12">左滑查看更多</text>
+							</view>
+							<!-- #endif -->
+							<text slot="value" class="statistics-slot-title">{{collapseLable?'展开':'收回'}}</text>
+							<view slot="right-icon">
+								<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+							</view>
+							<view class="">
+								<!-- #ifdef MP-WEIXIN -->
+								<view class="fs24 mb12">左滑查看更多</view>
+								<!-- #endif -->
+								<view class=" mb20 morelable">
+									<view class="base-bg-f5 p20  radius20 boxlable mr40"
+										v-for="(item,index) in lablelistnum" :key="index"
+										style="display: inline-block;">
+										<view class="base-color-3 ">{{item.tagName}}</view>
+										<view class="base-color mt8">
+											<text class="fs40 bold">{{item.number}}</text>
+											人
+										</view>
+									</view>
+								</view>
+							</view>
+						</u-collapse-item>
+				</u-collapse>
+			</view>
+			<view class="searchbox">
+				<view class="searchbox-bar x-ac">
+					<view :class="queryParam.type == index ? 'searchbox-item searchbox-active':'searchbox-item'"
+						v-for="(item,index) in typeOption" :key="index" @click="handleType(index)">{{item.label}}</view>
+				</view>
+				<view class="x-ac ss" v-show="queryParam.type == 3">
+					<view class="calendar-day x-c" @click="showCalendar = true"><u-icon name="calendar" color="#999"
+							size="20"></u-icon>{{startTime}}</view>
+					<view class="calendar-day x-c" @click="showCalendar = true"><u-icon name="calendar" color="#999"
+							size="20"></u-icon>{{endTime}}</view>
+				</view>
+			</view>
+		</view>
+		<view class="">
+			<u-calendar :show="showCalendar" :mode="mode" @confirm="confirmCalendar" style="flex: 0; overflow: hidden;"
+				@close="closeCalendar" :minDate="new Date().getTime()-(3600*1000*24*60)" :maxDate="new Date().getTime()"
+				></u-calendar>
+		</view>
+		<view class="statistics pb120" :style="{height: contentH}">
+			<u-collapse :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="statistics-title">课程统计</text>
+						<!-- #endif -->
+						<text slot="value"
+							class="statistics-slot-title">{{collapseValue.includes('course')?'收回':'展开'}}</text>
+						<view slot="right-icon">
+							<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+						</view>
+						<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?courseCount.courseWatchNum:'0' }}</text>人
+								</view>
+								<view style="color: #1677ff;" v-show="queryParam.type == 0">
+									较昨天持平{{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>
+								<view class="collapse-content-num"><text>{{courseCount.courseCompleteNum || 0}}</text>人
+								</view>
+								<view style="color: #1677ff;" v-show="queryParam.type == 0">
+									较昨天持平{{compare(courseCount.courseCompleteNum,yesterdayVO.courseCompleteNum)}}
+								</view>
+								<view v-show="queryParam.type == 0">昨天{{yesterdayVO.courseCompleteNum || 0}}
+								</view>
+							</view>
+							<view class="collapse-content-item">
+								<view class="collapse-content-title">完播率</view>
+								<view class="collapse-content-num"><text>{{courseCount.courseCompleteRate || 0}}</text>%
+								</view>
+								<view style="color: #1677ff;" v-show="queryParam.type == 0">
+									较昨天持平{{compare(courseCount.courseCompleteRate,yesterdayVO.courseCompleteRate)}}
+								</view>
+								<view v-show="queryParam.type == 0">昨天{{yesterdayVO.courseCompleteRate || 0}}</view>
+							</view>
+						</view>
+					</u-collapse-item>
+					<!-- #ifdef MP-WEIXIN -->
+					<u-collapse-item name="questions" title="答题统计">
+					<!-- #endif -->
+						<!-- #ifndef MP-WEIXIN -->
+						<u-collapse-item name="questions">
+							<text slot="title" class="statistics-title">答题统计</text>
+							<!-- #endif -->
+							<text slot="value"
+								class="statistics-slot-title">{{collapseValue.includes('questions')?'收回':'展开'}}</text>
+							<view slot="right-icon">
+								<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+							</view>
+							<view class="collapse-content x-ac">
+								<view class="collapse-content-item">
+									<view class="collapse-content-title">答题人数</view>
+									<view class="collapse-content-num"><text>{{courseCount.answerNum || 0}}</text>人
+									</view>
+									<view style="color: #1677ff;" v-show="queryParam.type == 0">
+										较昨天持平{{compare(courseCount.answerNum,yesterdayVO.answerNum)}}</view>
+									<view v-show="queryParam.type == 0">昨天{{yesterdayVO.answerNum || 0}}</view>
+								</view>
+								<view class="collapse-content-item">
+									<view class="collapse-content-title">正确人数</view>
+									<view class="collapse-content-num"><text>{{courseCount.answerRightNum || 0}}</text>人
+									</view>
+									<view style="color: #1677ff;" v-show="queryParam.type == 0">
+										较昨天持平{{compare(courseCount.answerRightNum,yesterdayVO.answerRightNum)}}</view>
+									<view v-show="queryParam.type == 0">昨天{{yesterdayVO.answerRightNum || 0}}</view>
+								</view>
+								<view class="collapse-content-item">
+									<view class="collapse-content-title">正确率</view>
+									<view class="collapse-content-num">
+										<text>{{courseCount.answerRightRate || 0}}</text>%
+									</view>
+									<view style="color: #1677ff;" v-show="queryParam.type == 0">
+										较昨天持平{{compare(courseCount.answerRightRate,yesterdayVO.answerRightRate)}}</view>
+									<view v-show="queryParam.type == 0">昨天{{yesterdayVO.answerRightRate || 0}}</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="statistics-title">红包统计</text>
+								<!-- #endif -->
+								<text slot="value"
+									class="statistics-slot-title">{{collapseValue.includes('redenvelope')?'收回':'展开'}}</text>
+								<view slot="right-icon">
+									<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+								</view>
+								<view>
+									<view class="collapse-content x-ac">
+										<view class="collapse-content-item">
+											<view class="collapse-content-title">答题红包数</view>
+											<view class="collapse-content-num">
+												<text>{{courseCount.redPacketNum || 0}}</text>个
+											</view>
+											<view style="color: #1677ff;" v-show="queryParam.type == 0">
+												较昨天持平{{compare(courseCount.redPacketNum,yesterdayVO.redPacketNum)}}
+											</view>
+											<view v-show="queryParam.type == 0">昨天{{yesterdayVO.redPacketNum || 0}}
+											</view>
+										</view>
+										<view class="collapse-content-item">
+											<view class="collapse-content-title">答题红包金额</view>
+											<view class="collapse-content-num">
+												<text>{{courseCount.redPacketAmount || '0.00'}}</text>元
+											</view>
+											<view style="color: #1677ff;" v-show="queryParam.type == 0">
+												较昨天持平{{compare(courseCount.redPacketAmount,yesterdayVO.redPacketAmount,1)}}
+											</view>
+											<view v-show="queryParam.type == 0">
+												昨天{{yesterdayVO.redPacketAmount || '0.00'}}
+											</view>
+										</view>
+									</view>
+								</view>
+							</u-collapse-item>
+							<!-- #ifdef MP-WEIXIN -->
+							<u-collapse-item name="funnel" title="转化漏斗图" v-if="!ratelistState">
+							<!-- #endif -->
+								<!-- #ifndef MP-WEIXIN -->
+								<u-collapse-item name="funnel" v-if="!ratelistState">
+									<text slot="title" class="statistics-title">转化漏斗图</text>
+									<!-- #endif -->
+									<text slot="value"
+										class="statistics-slot-title">{{collapseValue.includes('funnel')?'收回':'展开'}}</text>
+									<view slot="right-icon">
+										<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+									</view>
+									<view v-show="!ratelistState">
+										<funnelChart :getratelist="getrateimg" />
+									</view>
+									<view v-show="ratelistState" class="center">暂无数据</view>
+								</u-collapse-item>
+								<!-- #ifdef MP-WEIXIN -->
+								<u-collapse-item name="rank" title="排行榜">
+								<!-- #endif -->
+									<!-- #ifndef MP-WEIXIN -->
+									<u-collapse-item name="rank">
+										<text slot="title" class="statistics-title">排行榜</text>
+										<!-- #endif -->
+										<text slot="value"
+											class="statistics-slot-title">{{collapseValue.includes('rank')?'收回':'展开'}}</text>
+										<view slot="right-icon">
+											<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+										</view>
+										<view class="flex-1">
+											<!-- <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'">
+														<u-icon name="list-dot" size="20"></u-icon>
+														<view>按正序(前20名)</view>
+													</view>
+													<view class="justify-start" @click="ordergroup(0)" v-else>
+														<u-icon name="list-dot" size="20"></u-icon>
+														<view>按倒序(后20名)</view>
+													</view>
+												</view>
+												<view class="centerV">
+													<u-tabs :list="list1" @click="clickTab" lineColor='#1773ff'
+														lineWidth='40' activeStyle="font-weight:bold"></u-tabs>
+												</view>
+												<view class="justify-start align-center mtb28"
+													v-for="(item,index) in rankListA" :key="index">
+													<u-avatar :src="item.avatar" size="40"></u-avatar>
+													<view class="flex-1 ml20">
+														<view class="justify-between mb16">
+															<view class="base-color-3 single-line-ellipsis">
+																{{item.userName}}
+															</view>
+															<view v-if="index==0">{{item.completeRate}}%</view>
+															<view v-else>{{item.answerRightRate}}%</view>
+														</view>
+														<u-line-progress :percentage="item.completeRate"
+															activeColor='#1773ff' v-if="index==0" />
+														<u-line-progress :percentage="item.answerRightRate"
+															activeColor='#1773ff' v-else />
+													</view>
+												</view>
+												<view v-if="rankListA.length==0" class="center mtb32">暂无数据</view>
+											</view> -->
+											<view class="mt60 column flex-1">
+												<view class="justify-between align-center">
+													<view class="base-color-3 bold fs32">课程排行榜</view>
+													<view class="justify-start" @click="ordergroupB(1)"
+														v-if="orderGroupB=='asc'">
+														<u-icon name="list-dot" size="20"></u-icon>
+														<view>按正序(前20名)</view>
+													</view>
+													<view class="justify-start" @click="ordergroupB(0)" v-else>
+														<u-icon name="list-dot" size="20"></u-icon>
+														<view>按倒序(后20名)</view>
+													</view>
+												</view>
+												<view class="centerV">
+													<u-tabs :list="list1" @click="clickTabB" lineColor='#1773ff'
+														lineWidth='40' activeStyle="font-weight:bold"></u-tabs>
+												</view>
+												<view class="justify-start align-center"
+													v-for="(item,index) in rankListB" :key="index">
+													<view class="flex-1 ml20">
+														<view class="justify-between mb16">
+															<view class="base-color-3 single-line-ellipsis">
+																{{item.videoName}}
+															</view>
+															<view v-if="index==0">{{item.completeRate}}%</view>
+															<view v-else>{{item.answerRightRate}}%</view>
+														</view>
+														<u-line-progress :percentage="item.completeRate"
+															activeColor='#1773ff' v-if="index==0" />
+														<u-line-progress :percentage="item.answerRightRate"
+															activeColor='#1773ff' v-else />
+													</view>
+												</view>
+												<view v-if="rankListB.length==0" class="center mtb32">暂无数据</view>
+											</view>
+										</view>
+									</u-collapse-item>
+			</u-collapse>
+			<view class="h70"></view>
+		</view>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
+		:loading-text="loadingtext"></u-loading-page>
+	</view>
+</template>
+
+<script>
+	// import code from "@/uni_modules/uview-ui/libs/config/props/code"
+	import funnelChart from "../components/chart.vue"
+	import {
+		getCompanyUserAndUserCount,
+		getCourseCount,
+		getcourseRate,
+		getGroupRanklist,
+		getCourseRanklist
+	} from "@/api/manageCompany.js"
+	export default {
+		components: {
+			funnelChart,
+		},
+		data() {
+			return {
+				viewload:true,
+				loadingtext:'数据加载中...',
+				list1: [{
+					name: '按完播率',
+				}, {
+					name: '按正确率'
+				}],
+				orderGroup: 'asc',
+				orderGroupB: 'asc',
+				showCalendar: false,
+				mode: 'range',
+				typeOption: [{
+					label: '今日',
+					value: 0
+				}, {
+					label: '昨日',
+					value: 1
+				}, {
+					label: '本月',
+					value: 2
+				}, {
+					label: '自定义',
+					value: 3
+				}],
+				queryParam: {
+					type: 0
+				},
+				contentH: 0,
+				contentHs: 0,
+				collapseValue: ['course', 'questions', 'redenvelope', 'funnel', 'rank'],
+				user: {},
+				todayday: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
+				startTime: '',
+				endTime: '',
+				companyUserCount: 0,
+				companyUserUserCount: 0,
+				courseCount: {
+					courseWatchNum: 0
+				},
+				collapseLable: false,
+				lablelistnum: [],
+				getrateimg: {},
+				rankListA: [],
+				rankListB: [],
+				activeA: 1,
+				activeB: 1,
+				yesterdayVO: [],
+				ratelistState: false
+			}
+		},
+		computed: {
+			compare() {
+				return (today, yesterday, type) => {
+					const num = Number(yesterday || 0) - Number(today || 0)
+					return type == 1 ? num.toFixed(2) : 0
+				}
+			}
+		},
+		onShow() {
+			
+		},
+		mounted() {
+			this.getHeight()
+			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
+			// this.resetDate()
+			this.getrateList()
+			this.getrankCourse()
+			this.getrankgroup()
+			this.getUserCount()
+		},
+		methods: {
+			operation() {
+				console.log(123)
+				uni.navigateTo({
+					url: '/pages_manage/dataDetails'
+				})
+			},
+			clickTab(item) {
+				this.activeA = item.index + 1
+				this.getrankgroup()
+				console.log(this.activeA)
+			},
+			clickTabB(item) {
+				this.activeB = item.index + 1
+				this.getrankCourse()
+				console.log(this.activeA)
+			},
+			ordergroup(item) {
+				if (item == 0) {
+					this.orderGroup = 'asc'
+					this.getrankgroup()
+				} else {
+					this.orderGroup = 'desc'
+					this.getrankgroup()
+				}
+			},
+			ordergroupB(item) {
+				if (item == 0) {
+					this.orderGroupB = 'asc'
+					this.getrankCourse()
+				} else {
+					this.orderGroupB = 'desc'
+					this.getrankCourse()
+				}
+			},
+			getrankCourse() {
+				//获取课程排行
+				// this.startTime = this.todayday
+				// this.endTime = this.todayday
+				// this.resetDate()
+				
+				const params = {
+					endTime: this.endTime + ' 23:59:59',
+					startTime: this.startTime + ' 00:00:00',
+					order: this.orderGroupB,
+					type: this.activeB, // 1-按完播率,2-按正确率
+				}
+				getCourseRanklist(params).then(res => {
+					if (res.code == 200) {
+						this.rankListB = res.data
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getrankgroup() {
+				//获取群管排行
+				this.startTime = this.todayday
+				this.endTime = this.todayday
+				// this.resetDate()
+				const params = {
+					endTime: this.endTime + ' 23:59:59',
+					startTime: this.startTime + ' 00:00:00',
+					order: this.orderGroup,
+					type: this.activeA, // 1-按完播率,2-按正确率
+				}
+				getGroupRanklist(params).then(res => {
+					if (res.code == 200) {
+						console.log(res)
+						this.rankListA = res.data
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getrateList() {
+				//获取漏斗图
+				this.startTime = this.todayday
+				this.endTime = this.todayday
+				this.resetDate()
+				const params = {
+					endTime: this.endTime + ' 23:59:59',
+					startTime: this.startTime + ' 00:00:00',
+				}
+				getcourseRate(params).then(res => {
+					if (res.code == 200) {
+						this.ratelistState = res.data.every(item => item.value === 0);
+						this.getrateimg = res
+						console.log('漏斗',this.getrateimg)
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			changelable(e) {
+				if (e[0].status == 'open') {
+					console.log(e)
+					this.collapseLable = false
+				} else {
+					this.collapseLable = true
+				}
+			},
+			getHeight() {
+				const windowHeight = uni.getSystemInfoSync().windowHeight
+				const query = uni.createSelectorQuery().in(this);
+				query
+					.select(".topdata")
+					.boundingClientRect((data) => {
+						this.contentH = `calc(${windowHeight-120}px - ${data.height}px - 0px)`
+					})
+					.exec()
+			},
+			resetDate() {
+				if (this.queryParam.type == 0) {
+					this.startTime = this.todayday
+					this.endTime = this.todayday
+				} else if (this.queryParam.type == 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.queryParam.type == 2) {
+					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')
+				} else if (this.queryParam.type == 3) {
+					this.startTime = this.todayday
+					this.endTime = this.todayday
+				}
+				this.getCount()
+			},
+			handleType(type) {
+				if (this.queryParam.type == type) {
+					return
+				}
+				this.queryParam.type = type
+				if (this.queryParam.type == 3) {
+					this.getHeight()
+				}
+				this.resetDate()
+				this.getrateList()
+				this.getrankCourse()
+				this.getrankgroup()
+			},
+			changeCollapse(e) {
+				this.collapseValue = e.filter(item => item.status == 'open').map(it => it.name)
+			},
+			closeCalendar() {
+				this.showCalendar = false
+			},
+			confirmCalendar(e) {
+				this.startTime = e[0]
+				this.endTime = e[e.length - 1]
+				this.showCalendar = false
+				this.getCount()
+			},
+			getUserCount() {
+				getCompanyUserAndUserCount().then(res => {
+					if (res.code == 200) {
+						this.companyUserCount = res.data.todayNewUser || 0
+						this.companyUserUserCount = res.data.userTotal || 0
+						this.lablelistnum = res.data.tagList
+						this.$nextTick(() => {
+							this.viewload=false
+							this.$refs.pydameinvRef.init()
+						})
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						});
+					}
+				})
+			},
+			getCount() {
+				const param = {
+					endTime: this.endTime + ' 23:59:59',
+					startTime: this.startTime + ' 00:00:00',
+				}
+				this.getCourseCounts(param)
+			},
+			getCourseCounts(param) {
+				getCourseCount(param).then(res => {
+					if (res.code == 200) {
+						console.log('课程统计',res)
+						this.courseCount = res.data
+						this.yesterdayVO = res.data.yesterdayVO
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						});
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.boxlable {
+		width: 47%;
+	}
+
+	.morelable {
+		width: 100%;
+		overflow-x: auto;
+		/* 添加横向滚动条 */
+		white-space: nowrap;
+	}
+
+	.container {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #222222;
+	}
+
+	.calendar-day {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 12px;
+		color: #999;
+		flex: 1;
+		margin: 10px 10px 0 10px;
+		background-color: #f5f5f5;
+		border-radius: 4px;
+	}
+
+	.topdata {
+		// padding-top: 25px;
+		background: linear-gradient(to right, rgba(225, 238, 255, 1), rgba(223, 224, 254, 1));
+		&-box {
+			padding: 12px;
+			margin: 0 12px 0 12px;
+			background-color: rgba(255, 255, 255, 0.5);
+			border-radius: 8px 8px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			color: #222222;
+		}
+
+		&-item {
+			width: 50%;
+			text-align: center;
+			padding: 8px;
+			box-sizing: border-box;
+
+			&-num {
+				color: #1677ff;
+
+				text {
+					font-family: DIN, DIN;
+					font-weight: bold;
+					font-size: 25px;
+				}
+			}
+		}
+
+		.searchbox {
+			background-color: #fff;
+			border-radius: 8rpx 8rpx 0 0;
+			padding: 15px;
+
+			&-item {
+				height: 23px;
+				line-height: 23px;
+				width: 65px;
+				background: #f5f5f5;
+				text-align: center;
+				border-radius: 5px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 12px;
+				color: #888;
+			}
+
+			&-active {
+				color: #fff !important;
+				background-color: #1677ff !important;
+			}
+		}
+	}
+
+	.statistics {
+		background-color: #fff;
+		overflow-y: auto;
+		box-sizing: border-box;
+
+		&-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: bold;
+			font-size: 16px;
+			color: #222222;
+		}
+
+		&-slot-title {
+			font-size: 12px;
+			color: #1677ff;
+		}
+
+		.collapse-content {
+			margin: 0 -8px -8rpx 0;
+
+			&-item {
+				flex: 1;
+				padding: 12px;
+				box-sizing: border-box;
+				border-radius: 10px;
+				background: #f5f5f5;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 10px;
+				color: #222222;
+				margin: 0 8px 8rpx 0;
+			}
+
+			&-title {
+				font-size: 14px;
+				margin-bottom: 10px;
+			}
+
+			&-num {
+				color: #1677ff;
+				font-size: 10px;
+
+				text {
+					font-family: DIN, DIN;
+					font-weight: bold;
+					font-size: 25px;
+				}
+			}
+		}
+	}
+</style>

+ 335 - 0
pages_manage/components/dropdownPanel.vue

@@ -0,0 +1,335 @@
+<template>
+	<view class="filter-wrapper" :style="{ height: height + 'px'}" @touchmove.stop.prevent="discard">
+		<view class="inner-wrapper">
+			<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 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 ? '取消':'批量'}}
+					</view>
+					<template v-else>
+						<text style="width: max-content;">{{item.name}}</text>
+							<image :src="imgPath+'/app/manergevip/icon-pullup.png'" mode="" class="icon-triangle"
+								v-if="index === actNav"></image>
+						<image :src="imgPath+'/app/manergevip/icon-down.png'" mode="" class="icon-triangle"
+							v-else></image>
+					</template>
+				</view>
+			</view>
+			<view scroll-y="true" class="popup" :class="popupShow ? 'popupShow' : ''">
+				<scroll-view scroll-y="true" style="height: 30vh;">
+					<slot></slot>
+				</scroll-view>
+				<view class="footer x-bc">
+					<view class="footer-btn" @click="reset">重置</view>
+					<view class="footer-btn footer-blue" @click="confirm">确认</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	// import { getCurDateTime } from '@/libs/utils.js';
+	export default {
+		props: {
+			height: {
+				type: Number,
+				default: 40
+			},
+			top: {
+			    type: String,
+			    default: ''
+			},
+			border: {
+				type: Boolean,
+				default: false
+			},
+			filterData: {
+				//必填
+				type: Array,
+				default: () => {
+					return []
+				}
+			},
+			ispopshow: {
+				type: Boolean,
+				default: false
+			},
+			itemname: {
+				type: String,
+				default: ''
+			},
+			defaultIndex: {
+				//默认选中条件索引,超出一类时必填
+				type: Array,
+				default: () => {
+					return [0];
+				}
+			}
+		},
+		data() {
+			return {
+				navData: [],
+				popupShow: false,
+				showMask: false,
+				actNav: null,
+				selIndex: [] ,//选中条件索引
+			};
+		},
+		watch: {
+			// titname(newVal,oldVal){
+			// 	console.log(newVal,oldVal)
+			// 	if(newVal==2){
+			// 		console.log(newVal,oldVal)
+			// 		this.popupShow=false
+			// 		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() {
+		      return this.$store.state.imgpath
+		    }
+		  },
+		created() {
+			this.navData = this.filterData;
+			this.selIndex = this.defaultIndex;
+			// this.keepStatus();
+		},
+		mounted() {
+			const query = uni.createSelectorQuery().in(this);
+			// query
+			// 	.select(".filter-wrapper")
+			// 	.boundingClientRect((data) => {
+			// 		// console.log(data)
+			// 		this.top = data.top + 'px'
+			// 	})
+			// 	.exec();
+		},
+		methods: {
+			reset() {
+				this.$emit('reset');
+				this.showMask = false;
+				this.popupShow = false;
+			},
+			confirm() {
+				this.showMask = false;
+				this.popupShow = false;
+				this.$emit('confirm');
+			},
+			keepStatus() {
+				// this.navData.forEach(itemnavData => {
+				//     itemnavData.map(child => {
+				//         child.select = false;
+				//     });
+				//     return itemnavData;
+				// });
+				// for (let i = 0; i < this.selIndex.length; i++) {
+				//     let selindex = this.selIndex[i];
+				//     this.navData[i][selindex].select = true;
+				// }
+			},
+			navClick(item, index) {
+				if (this.showMask && item.type == 'piliang') {
+					this.popupShow = false
+					this.showMask = false
+					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);
+				if (index === this.actNav) return this.tapMask();
+				this.actNav = index;
+				if (item.stopPrevent) return
+				this.popupShow = true;
+				this.showMask = true;
+				this.$emit('onChange', this.actNav);
+
+			},
+			handleOpt(index) {
+				// this.selIndex[this.actNav] = index;
+				// this.keepStatus();
+				// setTimeout(() => {
+				//     this.tapMask();
+				// }, 100);
+				// let data = [];
+				// let res = this.navData.forEach(item => {
+				//     let sel = item.filter(child => child.select);
+				//     data.push(sel);
+				// });
+				// console.log(data);
+				// this.$emit('onSelected', data);
+			},
+			tapMask() {
+				this.showMask = false;
+				this.popupShow = false;
+				this.actNav = null;
+			},
+			discard() {}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	.c-flex-align {
+		display: flex;
+		align-items: center;
+	}
+
+	.c-flex-center {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		flex-direction: column;
+	}
+
+	.footer {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #222;
+		padding: 10px;
+
+		&-btn {
+			flex: 1;
+			text-align: center;
+			background-color: #fff;
+			border: 1px solid #999;
+			border-radius: 50px;
+			padding: 10px 0;
+		}
+
+		&-blue {
+			background-color: #1677ff;
+			border: 1px solid #1677ff;
+			color: #fff;
+			margin-left: 10px;
+		}
+	}
+
+	.filter-wrapper {
+
+		// position: fixed;
+		// left: 0;
+		// width: 750rpx;
+		// z-index: 999;
+		.inner-wrapper {
+
+			// position: relative;
+			.navs {
+				position: relative;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 14px;
+				color: #222;
+				padding: 10px;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				background-color: #fff;
+				z-index: 999;
+				box-sizing: border-box;
+
+				&>view {
+					flex: 1;
+					height: 100%;
+					flex-direction: row;
+					z-index: 999;
+				}
+
+				.date {
+					justify-content: flex-end;
+				}
+
+				.actNav {
+					color: #1677ff;
+					font-weight: bold;
+				}
+			}
+
+			.mask {
+				z-index: 666;
+				position: fixed;
+				top: 0;
+				left: 0;
+				right: 0;
+				bottom: 0;
+				background-color: rgba(0, 0, 0, 0);
+				transition: background-color 0.15s linear;
+
+				&.show {
+					background-color: rgba(0, 0, 0, 0.4);
+				}
+
+				&.hide {
+					display: none;
+				}
+			}
+
+			.popup {
+				position: relative;
+				// max-height: 500rpx;
+				background-color: #fff;
+				border-bottom-left-radius: 20rpx;
+				border-bottom-right-radius: 20rpx;
+				overflow: scroll;
+				z-index: 999;
+				transition: all 1s linear;
+				opacity: 0;
+				display: none;
+
+				.item-opt {
+					height: 100rpx;
+					padding: 0 40rpx;
+					color: #8b9aae;
+					border-bottom: 2rpx solid #f5f6f9;
+				}
+
+				.actOpt {
+					color: #1677ff;
+					font-weight: bold;
+					position: relative;
+
+					&::after {
+						content: '✓';
+						font-weight: bold;
+						font-size: 36rpx;
+						position: absolute;
+						right: 40rpx;
+					}
+				}
+			}
+
+			.popupShow {
+				display: block;
+				opacity: 1;
+			}
+		}
+
+		.icon-triangle {
+			width: 16rpx;
+			height: 16rpx;
+			margin-left: 10rpx;
+		}
+	}
+</style>

+ 719 - 0
pages_manage/components/manageIndex.vue

@@ -0,0 +1,719 @@
+<template>
+	<view class="content container">
+		<view class="bg" v-if="!viewload"></view>
+		<view class="cont-box" v-if="!viewload">
+			<view class="user-cont" @click="navTo('/pages_managedata/userInfo')">
+				<view class="user-box" v-if="user!=null">
+					<view class="left">
+						<u-avatar :src="user.avatar" size="50"></u-avatar>
+						<!-- <image class="img" :src="user.avatar" mode="aspectFill"></image> -->
+						<view class="user" >
+							<view class="username">{{user.nickName}}</view>
+							<view class="account">{{user.email}}</view>
+						</view>
+					</view>
+					<view class="right" >
+						<image :src="imgPath+'/app/images/right_arrow.png'"></image>
+					</view>
+				</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="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="imgPath+'/app/manergevip/chang.png'"></image>
+					<view class="title">常用功能</view>
+				</view>
+				<view class="line"></view>
+				<view class="menus" v-if="user!=null">
+					<view class="menu-item" @click="navTo('/pages_managedata/managedetail')">
+						<image :src="imgPath+'/app/images/menu_info.png'"></image>
+						<view class="m-name">销售管理</view>
+					</view>
+					<view class="menu-item" @click="navTo('/pages_managedata/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" 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_managedata/lableSetup')">
+						<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="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_managedata/about')">
+						<image :src="imgPath+'/app/manergevip/about.png'"></image>
+						<view class="m-name">关于我们</view>
+					</view>
+					<view class="menu-item" @click="navTo('/pages_managedata/editUser')">
+						<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>
+			<view class="btn-box" >
+				<view class="sub-btn" @click="showLogout()">退出登录</view>
+			</view>
+		</view>
+		<!-- 分享弹窗 -->
+		<u-popup :show="showShare" :closeOnClickOverlay="true" :round='20' @close="closeShare" @open="openShare">
+			<view class="sharePop x-ac">
+				<!--#ifdef MP-WEIXIN-->
+				<view class="sharePop-item y-f" @click="shareimg">
+					<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>
+					<button open-type="share" class="share">分享课程</button>
+				</view>
+				<!--#endif-->
+				<!-- <view class="sharePop-item y-f" @click="buildimg">
+					<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="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>
+				<!--#endif-->
+			</view>
+		</u-popup>
+		<!-- 长按保存海报 -->
+		<u-popup :show="setImg"  @close="closeimg" :round="12">
+			<view  class="w100 h500">
+				<image :src="codeLink.url" class="codeimg w660" mode="widthFix"></image>
+			</view>
+			<view class="justify-around mtb40">
+				<view class="column justify-center align-center" @click="downimg">
+					<image :src="imgPath+'/app/image/downicon.png'" class="w80 h80"></image>
+					<view class="mt10">长按图片保存</view>
+				</view>
+			</view>
+		</u-popup>
+		<!-- 设置链接有效时长弹窗 -->
+		<!-- <u-modal :show="setTimeShow" content='content' class="model" @confirm="confirmTime">
+			<view class="setTimebox">
+				<view class="timetip">不传默认以系统参数为准</view>
+				<view class="x-f">
+					<text style="margin-right: 20px;">链接有效时长(分钟)</text>
+					<u-input fontSize="14px" placeholder="链接有效时长" border="none" v-model="time" maxlength="5"></u-input>
+				</view>
+			</view>
+		</u-modal> -->
+		<!-- 卡片分享引导 -->
+		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
+			<view class="point-box">
+				<view class="imgshe" >
+					<image :src="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="imgPath+'/app/image/wxmore.png'"
+					class="w50 h50 mlr10"></image>
+					</view>
+					<view class="mt20">选择 “转发给朋友”</view>
+					<view style="color: #cbcbcb;" class="fs28 mt40">点击任意位置关闭弹窗</view>
+				</view>
+			</view>
+		</u-overlay>
+		<u-modal :show="show" title="提示" :showCancelButton="true"  @cancel="hideLogout()" @confirm="logout()" content='确认退出吗?'></u-modal>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
+		:loading-text="loadingtext" ></u-loading-page>
+	</view>
+</template>
+
+<script>
+	
+	import { getCompanyUser } from '@/api/manageCompany.js'
+	// import {
+	// 	sharecourselink,
+	// 	buildCode,
+	// 	getSDK,
+	// 	becomeVipuser,
+	// 	becomeVipuserImg
+	// } from '@/api/courseManage'
+	// import wx from 'weixin-js-sdk'
+	export default {
+		data() {
+			return {
+				viewload:true,
+				loadingtext:"数据加载中...",
+				show:false,
+				user:null,
+				showShare:false,
+				copyLinks:'',
+				setTimeShow:false,
+				time:'',
+				setImg:false,
+				codeLink:'',
+				showzhidao:false,
+				imgs:this.$store.state.imgpath+'/app/image/logo.png',
+				balance:0
+			}
+		},
+		onShow() {
+			console.log(this.imgs)
+		},
+		onShareAppMessage() {
+			return {
+				title: this.$store.state.logoname+'小程序的'+this.user.nickName+'邀请您成为销售', // 分享卡片标题
+				path: '/pages_course/course/becomeSale?id='+this.user.companyId, // 目标页面路径
+				// 携带参数:将当前页面的数据拼接到路径中
+				imageUrl: this.user.avatar || this.imgs, // 分享卡片封面图(可选)
+				success: (res) => {
+					console.log("分享成功", res);
+				},
+				fail: (err) => {
+					console.log("分享失败", err);
+				},
+			}
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
+		mounted() {
+			this.getCompanyUsers()
+		},
+		methods: {
+			shareSale(){
+				 const fullUrl = location.href;
+				 const Path = fullUrl.split('/#')[0] || '';
+				setTimeout(() => {
+					uni.setClipboardData({
+						data: Path+'/#/pages_course/course/becomeSale?id='+this.user.companyId,
+						success: () => {
+							uni.showToast({
+								title: '邀请链接已复制',
+								icon: 'none',
+								duration: 2000
+							});
+							// this.setTimeShow = !this.setTimeShow
+							this.showShare = false
+							// console.log(res)
+						},
+						fail: () => {
+							uni.showToast({
+								title: '复制失败',
+								icon: 'none'
+							});
+						}
+					});
+				}, 100)
+			},
+			// 获取jssdk
+			getjssdklist() {
+				const param = {
+					url: window.location.href.split('#')[0] // 注意去除 hash
+				}
+				getSDK(param).then(res => {
+					wx.config({
+						debug: false,
+						appId: res.data.appId, // 必填,公众号的唯一标识
+						timestamp: res.data.timestamp, // 必填,生成签名的时间戳
+						nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
+						signature: res.data.signature, // 必填,签名
+						jsApiList: ["updateAppMessageShareData", "onMenuShareAppMessage", ] // 必填,需要使用的JS接口列表
+					});
+				})
+			},
+			shareimg(){
+				//分享好友
+				let self = this
+				// 配置--配置全局 
+				wx.ready(function() { //需在用户可能点击分享按钮前就先调用
+					wx.updateAppMessageShareData({
+						title: self.user.userName+"邀请您成为销售", // 分享标题
+						desc: self.user.deptName, // 分享描述
+						link:self.copyLinks, 
+						imgUrl: self.codeLink.url ||self.imgs, // 分享图标
+						success: function(res) {
+							self.showzhidao=true
+							self.setImg=false
+							self.showShare=false
+							// 设置成功
+							uni.showToast({
+								title: '卡片已生成',
+								icon: 'none',
+								duration: 1000
+							}); 
+						},
+						fail: function(err) {
+							// console.log(err);
+							uni.showToast({
+								title: '卡片生成失败,请重试',
+								icon: 'none',
+								duration: 2000
+							})
+						}
+					})
+				});
+			},
+			handleShare() {
+				this.showShare = true
+				const pages='/pages_course/becomeSale?id='+this.user.companyId
+				this.$emit('childsales',pages);
+				// this.getjssdklist()
+				// this.getlink('preload'); // 提前加载链接
+			},
+			//设置链接时长
+			confirmTime() {
+				this.setTimeShow = false
+				this.showShare = false
+				this.getlink('preload')
+				this.copyLink()
+			},
+			closeimg(){
+				this.setImg=false
+				this.showShare=false
+			},
+			buildimg() {
+				//生成海报
+				this.setImg=!this.setImg
+				this.getshareimg()
+			},
+			getshareimg(){
+				//生成海报
+				uni.showLoading({
+					title: '正在生成中...'
+				})
+				const param={
+					code:'',
+					companyId:this.user.companyId,
+					companyUserId:this.user.userId
+				}
+				becomeVipuserImg(param).then(res=>{
+					if(res.code==200){
+						this.codeLink=res.data
+						this.getlink()
+						// console.log(res)
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+							duration: 2000
+						});
+					}
+				})
+			},
+			getlink(type){
+				//生成链接
+				const param={
+					companyId:this.user.companyId,
+					companyUserId:this.user.userId,
+					tagids:'',
+					limitTime:this.time
+				}
+				becomeVipuser(param).then(res=>{
+					if(res.code==200){
+						this.copyLinks=res.data
+						if (this.copyLinks.startsWith('http://')) {
+							this.copyLinks = this.copyLinks.replace('http://', 'https://');
+						  }
+						// console.log(this.copyLinks,'分享链接')
+					}else{
+					}
+				})
+			},
+			copyLink(){
+				console.log(this.showShare)
+				setTimeout(() => {
+					uni.setClipboardData({
+						data: this.copyLinks,
+						success: () => {
+							uni.showToast({
+								title: '链接已复制',
+								icon: 'none',
+								duration: 2000
+							});
+							// this.setTimeShow = !this.setTimeShow
+							this.showShare = false
+						},
+						fail: () => {
+							uni.showToast({
+								title: '复制失败',
+								icon: 'none'
+							});
+						}
+					});
+				}, 100)
+			},
+			closeShare() {
+				this.showShare = false
+			},
+			openShare() {
+				// this.showShare = false
+			},
+			showLogout(){
+				this.show=true;
+			},
+			hideLogout(){
+				this.show=false;	
+			},
+			logout(){
+				uni.removeStorageSync('ManageToken')
+				// 条件编译判断平台,设置不同登录页路径
+				 let loginPage = '';
+				 // #ifdef H5
+				 loginPage = '/pages/auth/login';
+				 // #endif
+				 // #ifdef MP-WEIXIN
+				 loginPage = '/pages_manage/login';
+				 // #endif
+				uni.navigateTo({
+					url: loginPage,
+				})
+			},
+			navTo(url){
+				uni.navigateTo({
+					url
+				})
+			},
+			getCompanyUsers(){
+				var data = {
+				};
+				getCompanyUser(data).then(res => {
+					if(res.code==200){
+						this.viewload=false
+						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{
+						
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+		background: #f6f6f6;
+	}
+</style>
+<style scoped lang="scss">
+	.share{
+			display: inline-block;
+			position: absolute;
+			top: 0;
+			left: 0;
+			width: 100%;
+			height: 100%;
+			opacity: 0;
+		}
+	.container {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #222222;
+		height: 100%;
+		overflow: hidden;
+	}
+	.imgshe{
+		display: flex;
+		flex-direction: row-reverse
+	}
+	.point-box{
+		height: 100%;
+		width: 100%;
+		.xu-box{
+			border: #f5f5f5 4rpx dashed;
+			padding: 20rpx 20rpx;
+		}
+	}
+	.setTimebox {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		width: fit-content;
+		height: fit-content;
+	}
+	.codeimg {
+		position: absolute;
+		z-index: 9999;
+		left: 40rpx;
+		top: 40rpx;
+	}
+	.timetip {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #2979ff;
+		text-align: center;
+		margin-bottom: 5px;
+	}
+	.content{
+		position: relative;
+		height: 100%;
+		width: 100%;
+		.bg{
+			width: 100%;
+			height: 550upx;
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: 1;
+			background: linear-gradient(to bottom, #dae9ff, #e1e1fd);
+			// background: linear-gradient(to bottom, #8bbfff, #1773ff);
+			border-radius: 0rpx 0rpx 60rpx 60rpx;
+		}
+		.cont-box{
+			position: relative;
+			z-index: 2;
+			padding: 30rpx 30rpx 200rpx;
+			.user-cont{
+				// box-shadow: 0px 0px 5px 2px rgba(0,0,0,0.05);
+				padding: 30rpx;
+				// background-color: #fff;
+				border-radius: 15rpx;
+				.user-box{
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					.left{
+						flex:1;
+						display: flex;
+						align-items: center;
+						justify-content: flex-start;
+						image{
+							border-radius: 50%;
+							width:120rpx;
+							height:120rpx;
+						}
+						.user{
+							margin-left: 20rpx;
+							width: calc(100% - 140rpx);
+							display: flex;
+							flex-direction: column;
+							align-items: flex-start;
+							justify-content: flex-start;
+							.username{
+								font-size: 38rpx;
+								font-family: PingFang SC;
+								color: #111;
+								font-weight: bold;
+							}
+							.account{
+								padding: 5rpx 0rpx;
+								border-radius: 30rpx;
+								margin-top: 20rpx;
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								color: #515151;
+							}
+						}
+					}
+					.right{
+						image{
+							width: 15rpx;
+							height:30rpx;
+						}
+						
+					}
+					
+				}
+				.company{
+					margin-top: 20rpx;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					image{
+						width:40rpx;
+						height:40rpx;
+					}
+					.name{
+						margin-left: 15rpx;
+						font-size: 28rpx;
+						color: #111;
+					}
+				}
+			}
+			
+			.menu-box{
+				box-shadow: 0px 0px 5px 2px rgba(0,0,0,0.05);
+				width: 100%;
+				margin-top: 30rpx;
+				padding: 30rpx;
+				background-color: #fff;
+				border-radius: 15rpx;
+				.title-box{
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					.icon{
+						width: 40rpx;
+						height:40rpx;
+					}
+					.title{
+						margin-left: 10rpx;
+						font-size: 28rpx;
+						font-family: PingFang SC;
+						color: #111;
+					}
+				}
+				.line{
+					margin-top: 15rpx;
+					height: 0.5rpx;
+					width: 100%;
+					background-color: #efefef;
+				}
+				.menus{
+					margin-top: 30rpx;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					flex-wrap: wrap;
+				}
+				.menu-item{
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+					justify-content: center;
+					width: 25%;
+					margin-bottom: 20rpx;
+					image{
+						width:60rpx;
+						height:60rpx;
+					}
+					.m-name{
+						margin-top: 10rpx;
+						font-size: 24rpx;
+						font-family: PingFang SC;
+						color: #111;
+					}
+				}
+				
+			}
+			.menu-box1{
+				width: 100%;
+				margin-top: 30rpx;
+				padding: 0rpx 30rpx;
+				background-color: #fff;
+				border-radius: 15rpx;
+				.menu-item{
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					line-height: 100rpx;
+					.left{
+						flex:1;
+						display: flex;
+						align-items: center;
+						justify-content: flex-start;
+						image{
+							width: 30rpx;
+							height:30rpx;
+						}
+						.label{
+							margin-left: 10rpx;
+						}
+					}
+					.right{
+						image{
+							width: 10rpx;
+							height:15rpx;
+						}
+						
+					}
+				}
+			}
+		}
+	}
+	.btn-box{
+		margin: 30rpx 0rpx 30rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		.sub-btn{
+			// box-shadow: 0px 0px 5px 2px rgba(0,0,0,0.05);
+			border: 1rpx solid #f8f8f8;
+			background: #FFFFFF;
+			width: 100%;
+			height: 88upx;
+			line-height: 88upx;
+			text-align: center;
+			font-size: 30upx;
+			font-family: PingFang SC;
+			color: #2979ff;
+		}
+	}
+	.sharePop {
+		background-color: #fff;
+		padding: 20px 0;
+		border-radius: 20px 20px 0 0;
+	
+		&-item {
+			padding: 0 10px;
+			box-sizing: border-box;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			display: inline-flex !important;
+	
+			image {
+				height: 48px;
+				width: 48px;
+				margin-bottom: 10px;
+			}
+		}
+	}
+</style>

+ 1936 - 0
pages_manage/components/memberIndex.vue

@@ -0,0 +1,1936 @@
+<template>
+	<view class="container column hb flex-1 hidden">
+		<view class="headbox">
+			<view style="padding: 10px 10px 0 10px;" class="mb20">
+				<view>
+					<u-subsection class="subsection" :list="list" :current="current" bgColor="#e7f1fe"
+						activeColor="#1677ff" :fontSize="15" :bold="false" @change="sectionChange"></u-subsection>
+				</view>
+				<!-- <view style="width: 70%;">
+						<u-subsection class="subsection" :list="list" :current="current" bgColor="#e7f1fe" activeColor="#1677ff"
+							:fontSize="15" :bold="false" @change="sectionChange" ></u-subsection>
+					</view> -->
+				<view style="margin-top: 10px;" class="justify-between align-center" v-if="!viewload">
+					<u-search placeholder="搜索微信名称、手机、标签" v-model="keyword" :showAction="false" height="30px"
+						@search='searchKeyword'></u-search>
+					<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="imgPath+'/app/images/order_icon2.png'" mode="aspectFill"
+							v-if="searchTypeIndex == 0 || searchTypeIndex == 2"></image>
+						<image :src="imgPath+'/app/images/order_icon.png'" mode="aspectFill" v-else></image>
+						<picker @change="bindPickerChange" :value="searchTypeIndex" :range="typeArray">
+							{{typeoption[searchTypeIndex]}}
+						</picker>
+					</view>
+				</view>
+				<view class="tagbox x-bc" v-if="current==0">
+					<view class="tagbox-left x-f">
+						<!-- <view class="x-f" @click="openPop('search')">{{array[queryParam.typeIndex].name}}<u-icon name="arrow-down-fill" color="#2979ff" size="11" style="margin: 0 3px;"></u-icon></view> -->
+						<view v-if="showCompanytag.length<=0" style="color: #888;" class="ml30">请点击筛选,选择标签</view>
+						<view class="tagbox-list x-f">
+							<view class="tagbox-item x-f" v-for="(item,index) in showCompanytag" :key='item.tagId'
+								:class="item.checked?'checked-bg':''">
+								{{item.tagName}}
+							</view>
+						</view>
+					</view>
+					<view class="tagbox-right x-f" @click="openPop('tag')">筛选<u-icon name="arrow-down" color="#1677ff"
+							size="12"></u-icon></view>
+				</view>
+			</view>
+			<view v-if="current==0&&!viewload">
+				<dropdownPanel :filterData='filterData' @onClick="getactNav" :itemname='itemname' @onChange="onChange"
+					@confirm="confirm" @reset="reset" :ispopshow='ispopshow' :top="tops">
+					<view v-if="filterData[searchbarNav].type == 'userStatus'">
+						<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="userStatusIndex == index ? 'boxnav-active':''"
+									@click="handleParamItem('userStatus',index,item.id)">{{item.label}}</view>
+							</view>
+						</view>
+					</view>
+					<view v-if="filterData[searchbarNav].type == 'registerTime'">
+						<view class="boxnav x-bc ">
+							<view class="boxnav-item" style="width: 25%;"
+								v-for="(item,index) in filterData[searchbarNav].option" :key="index">
+								<view class="boxnav-item-info one-t"
+									:class="registerTimeIndex == index ? 'boxnav-active':''"
+									@click="handleParamItem('registerTime',index)">{{item.label}}</view>
+							</view>
+							<view class="boxnav-item x-ac" style="width: 100%;" v-show="registerTimeIndex == 4">
+								<view class="calendar-day x-c" @click="$refs.calendar.open()">
+									<u-icon name="calendar" color="#999"
+										size="20"></u-icon>{{queryParam.startTime || '选择日期'}}
+								</view>
+								<view class="calendar-day x-c" @click="$refs.calendar.open()">
+									<u-icon name="calendar" color="#999"
+										size="20"></u-icon>{{queryParam.endTime || '选择日期'}}
+								</view>
+							</view>
+						</view>
+					</view>
+					<view v-if="filterData[searchbarNav].type == 'watchStatus'">
+						<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="watchStatusIndex == index ? 'boxnav-active':''"
+									@click="handleParamItem('watchStatus',index)">{{item.label}}</view>
+							</view>
+						</view>
+					</view>
+					<view v-if="filterData[searchbarNav].type == 'courseStatus'">
+						<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="courseStatusIndex == index ? 'boxnav-active':''"
+									@click="handleParamItem('courseStatus',index)">{{item.label}}</view>
+							</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>
+		<view class="">
+			<uni-calendar ref="calendar" :clear-date="true" :date="date" :insert="false" :lunar="false"
+				:startDate="$u.timeFormat(new Date().getTime() - (3600 * 24 * 365 * 1000), 'yyyy-mm-dd')" :range='true'
+				@confirm="confirmCalendar" :endDate="$u.timeFormat(new Date().getTime(), 'yyyy-mm-dd')" />
+		</view>
+		<view class="">
+			<!-- 搜索选择弹窗/标签筛选 -->
+			<u-popup :show="showPop" :round="12" @close="closePop" class="model" :zIndex="10076" style="flex: 0;">
+				<view class="popbox">
+					<view class="popbox-head">
+						<u-icon class="close-circle" name="close-circle" color="#ccc" size="24"
+							@click="closePop"></u-icon>
+						{{popTitle}}
+					</view>
+					<view class="popbox-body">
+						<view class="radiobox" v-show="popTitle == '搜索选择'">
+							<label class="radiobox-item x-bc mbline" v-for="(item, index) in array" :key="item.value"
+								@click="bindTypeChange(index)">
+								<view>{{item.name}}</view>
+								<radio :value="item.value" :checked="index === typeIndex"
+									style="transform:scale(0.75)" />
+							</label>
+						</view>
+						<!-- <input placeholder="请输入标签  多个标签用 , 隔开" /> -->
+						<view class="mb20" v-if="current==0">
+							<u-search placeholder="请输入标签  多个标签用 , 隔开" v-model="tagkeywords" :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 class="tagbox-list x-f">
+								<view class="tagbox-item x-f tag-active" v-if="companytag.length<=0">暂无标签</view>
+								<view class="mlr10 mb10" v-for="(item,index) in companytag" :key='item.tagId'>
+									<u-tag :text="item.tagName" :plain="!item.checked" :name="index"
+										@click="chooseTag(index)"></u-tag>
+								</view>
+							</view>
+							<view class="center fs24 mt20">
+								<text class="mr20" @click="getTagpage('last')">上一页</text>
+								<text class="base-color-red">{{pagetag.pageNum}}/{{pagetag.pages}}</text>
+								<text class="ml20" @click="getTagpage('next')">下一页</text>
+							</view>
+						</scroll-view>
+					</view>
+					<view class="popbox-footer x-bc">
+						<button class="popbox-footer-btn" @click="resetPop" v-show="popTitle == '标签筛选'">重置</button>
+						<button class="popbox-footer-btn" @click="closePop" v-show="popTitle == '搜索选择'">取消</button>
+						<button class="popbox-footer-btn con-btn" @click="confirmPop">确定</button>
+					</view>
+				</view>
+			</u-popup>
+		</view>
+		<view class="userbox column hb hidden flex-1">
+			<!-- <mescroll-body  bottom="0" ref="mescrollRef" @init="mescrollInit" :down="downOption" :up="upOption" @down="downCallback" @up="upCallback"> -->
+			<view class="userlist column hb hidden flex-1">
+				<vipUserItem :viplist='userList' :isShowSelectAll="isShowSelectAll" @changeItem="changeItem"
+					@getuserId='singleChange' @getlableId='singleChangeLable' @change='changesinglevip'
+					@getuserIds='singleDelete' @pullDownRefresh="getfsuserListdata('refresh')"
+					@changelistname="getfsuserListdata('more')" @reachBottom="getfsuserListdata()"
+					@changePageOptions="e=>pageOptions=e" :pageOptions="pageOptions" :status="status"
+					@changeStatus="e=>status=e" class="pb2 hb" />
+				<view class="justify-between base-bg-f foot-select pb40" v-if="isShowSelectAll">
+					<view class="align-center justify-between" v-if="isShowSelectAll">
+						<u-checkbox-group @change="selectAll">
+							<u-checkbox :checked="isSelectAll" shape="circle" activeColor="#FF6C47" :name="true"
+								label="全选" labelColor="#333" /><text class="fs24 base-color-9 ml12">已选 {{selectedCount}}
+								个</text>
+						</u-checkbox-group>
+					</view>
+					<view class="justify-center ">
+						<button class="base-bg-red radius100 colorf h62 fs28 lh62 mlr10" @click="changeProhibit"
+							v-if="current==0">禁用</button>
+						<button class="base-bg-red radius100 colorf h62 fs28 lh62 mlr10" @click="changeblack"
+							v-else>取消禁用</button>
+						<button class="base-bg-blue radius100 colorf h62 fs28 lh62" @click="changetagall"
+							v-if="current==0">改标签</button>
+						<!-- <button class="base-bg-f radius100 base-color-red h62 ml10 fs28 lh60"
+							style="border: #ef4c50 solid 2rpx;" 
+							@click="changevipuser"  v-if="current==0">更换归属</button> -->
+					</view>
+				</view>
+			</view>
+			<!-- </mescroll-body> -->
+		</view>
+		<!-- <u-picker :show="showTagSelect" :columns="companytag" keyName="tag" @cancel='showTagSelect=false'
+			@confirm='singleChangeLable' ></u-picker> -->
+		<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="showTagSelect" @close='closetagselect' :closeOnClickOverlay='true' mode="bottom"
+				style="z-index: 999;">
+				<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>
+					<view class="mb20">
+						<u-search placeholder="请输入标签  多个标签用 , 隔开" v-model="tagchangekeywords" :showAction="false"
+							height="30px" @search='getcompanyTags'></u-search>
+					</view>
+					<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnableds"
+						:refresher-triggered="triggeredsA" refresher-background="rgba(0,0,0,0)"
+						@refresherrefresh="pullDownRefreshsA" @refresherrestore="triggeredsA = false"
+						:upper-threshold="100" :lower-threshold="100" @refresherabort="triggeredsA = false">
+						<view class="justify-start p32 wrap">
+							<view class="mlr10 mt10 " v-for="(item,index) in changetag" :key='item.tagId'>
+								<u-tag :text="item.tag" :plain="!item.checked" :name="index"
+									@click="choosechangeTag"></u-tag>
+							</view>
+						</view>
+						<view class="center fs24 mt20">
+							<text class="mr20" @click="getTagpageS('last')">上一页</text>
+							<text class="base-color-red">{{pagetagA.pageNum}}/{{pagetagA.pages}}</text>
+							<text class="ml20" @click="getTagpageS('next')">下一页</text>
+						</view>
+					</scroll-view>
+					<view class="justify-between p32 " :class="isShowSelectAll?'pb120':''">
+						<view class="changetagbtn base-bg-f8" @click="showTagSelect=!showTagSelect">取消</view>
+						<view class="changetagbtn colorf base-bg-blue" @click="suretagchangeAll">确定</view>
+					</view>
+				</view>
+			</u-popup>
+		</view>
+
+		<view class="invite-member" :style="{right:vipInviteshow?'-72rpx':'20rpx'}">
+			<image :src="imgPath+'/app/images/invite-member-icon.png'" mode="aspectFill" @click="vipInvite"
+				style="position: relative;" class="intimg"> </image>
+			<image :src="imgPath+'/app/image/tc_close_icon.png'" class="falseimg" @click="showinimg"></image>
+		</view>
+		<view class="">
+
+			<!-- 邀请弹窗 -->
+			<u-popup :show="invitePop" :round="12" @close="invitePop = false" :zIndex="10074" style="flex: 0;">
+				<view class="popbox">
+					<view class="popbox-head">
+						<u-icon class="close-circle" name="close-circle" color="#ccc" size="24"
+							@click="invitePop = false"></u-icon>
+						分享方式
+					</view>
+					<view class="popbox-body">
+						<view class="choosetitle x-bc">
+							<view>选择标签</view>
+							<view v-if="sharetaglist" style="color:#1677ff" @click="addtag(0)">{{zhanshitag}}</view>
+							<view class="x-f" style="color:#1677ff;" v-else @click="addtag(0)">
+								<u-icon name="plus" color="#1677ff" size="14" style="margin-right: 5px;"></u-icon>添加标签
+							</view>
+						</view>
+						<view class="invitetip">选择标签,当会员注册成功后,即可自动打标签</view>
+						<!-- <view class="tagbox-list x-f" style="margin-top: 10px;margin-left: 0px;">
+						<view class="tagbox-item x-f" @click="chooseTag">未打标签</view>
+						<view class="tagbox-item x-f tag-active">未打标签</view>
+					</view> -->
+						<!--#ifdef MP-WEIXIN-->
+						<view class="justify-center" style="margin-top: 10px;">
+							<!--#endif-->
+							<!--#ifdef H5-->
+							<view class="justify-center" style="margin-top: 10px;">
+								<!--#endif-->
+								<!-- <view class="x-bc " style="margin-top: 30px;"> -->
+								<!--#ifdef MP-WEIXIN-->
+								<view class="sharePop-item y-f " style="text-align: center;">
+									<!--#endif-->
+									<!--#ifdef H5-->
+									<view class="sharePop-item y-f card-share" @click="shareimg"
+										style="text-align: center;">
+										<!--#endif-->
+										<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>
+										<!-- #ifdef MP-WEIXIN -->
+										<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="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="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>
+									<!--#endif-->
+								</view>
+							</view>
+						</view>
+			</u-popup>
+			<!-- 设置链接有效时长弹窗 -->
+			<u-modal :show="setTimeShow" content='content' class="model" @confirm="confirmTime">
+				<view class="setTimebox">
+					<view class="timetip">不传默认以系统参数为准</view>
+					<view class="x-f">
+						<text style="margin-right: 20px;">链接有效时长(分钟)</text>
+						<u-input fontSize="14px" placeholder="链接有效时长" border="none" v-model="time"
+							maxlength="5"></u-input>
+					</view>
+				</view>
+			</u-modal>
+			<!-- 长按保存海报 -->
+			<u-popup :show="setImg" @close="closeimg" :round="12">
+				<view class="w100 h500 center">
+					<image :src="codeLink.url" mode="aspectFill"></image>
+				</view>
+				<view class="justify-around mb40">
+					<view class="column justify-center align-center" @click="downimg">
+						<image :src="imgPath+'/app/image/downicon.png'" class="w80 h80"></image>
+						<view class="mt10">长按图片保存</view>
+					</view>
+				</view>
+			</u-popup>
+			<!-- 卡片分享引导 -->
+			<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
+				<view class="point-box">
+					<view class="imgshe">
+						<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="imgPath+'/app/image/wxmore.png'" class="w50 h50 mlr10"></image>
+						</view>
+						<view class="mt20">选择 “转发给朋友”</view>
+						<view style="color: #cbcbcb;" class="fs28 mt40">点击任意位置关闭弹窗</view>
+					</view>
+				</view>
+			</u-overlay>
+			<!-- 更改归属 -->
+			<u-picker :show="showcol" :columns="columns" @cancel='showcol=!showcol' @confirm='receiveA'
+				keyName="nickName"></u-picker>
+			<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
+		:loading-text="loadingtext"></u-loading-page>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getfsuserList,
+		getcompanyTaglist,
+		Addblacklist,
+		changeLable,
+		getvipNum,
+		changevipUser,
+		getgroupList,
+		becomeVipuser,
+		becomeVipuserImg,
+		getusersales,
+		removebalcklist,
+		getallTags,
+		getprojectlist
+	} from "@/api/manageCompany.js";
+	import vipUserItem from "../components/vipUserItem.vue"
+	import dropdownPanel from "../components/dropdownPanel.vue"
+	// import wx from 'weixin-js-sdk'
+	export default {
+		components: {
+			vipUserItem,
+			dropdownPanel,
+		},
+		data() {
+			return {
+				viewload: true,
+				loadingtext: "数据加载中...",
+				showcol: false,
+				setImg: false,
+				columns: [],
+				showTagSelect: false,
+				list: [{
+						name: '会员(0)',
+
+					}, {
+						name: '小黑屋(0)'
+					},
+					{
+						name: '黑名单(0)'
+					}
+				],
+				userList: [],
+				current: 0,
+				keyword: "",
+				companytag: [],
+				showCompanytag: [],
+				selectedList: [], //已经选中标签列表
+				list2: [{
+					name: '全部',
+				}, {
+					name: '今日新增',
+				}, {
+					name: '今日完播'
+				}, {
+					name: '未看过课'
+				}],
+				currentType: 0,
+				activeStyle: {
+					color: '#1677ff',
+					fontSize: '14px',
+					fontWeight: 'bold'
+				},
+				inactiveStyle: {
+					fontSize: '14px'
+				},
+				searchTypeIndex: 0,
+				typeArrays: ['连续缺课天数多到少', '连续缺课天数少到多', '按注册时间晚到早', '会员姓名0-9-A-Z'],
+				typeArray: ['按注册时间晚到早', '会员姓名0-9-A-Z'],
+				typeoption: ['注册时间', '会员姓名'],
+				array: [{
+						value: '0',
+						name: '关联搜索',
+					},
+					{
+						value: '1',
+						name: '精准搜索'
+					}
+				],
+				typeIndex: 0,
+				popTitle: '搜索选择',
+				showPop: false,
+				filterData: [{
+						name: '销售',
+						value: 0,
+						type: 'userStatus',
+						option: [{
+							label: '全部',
+							id: ''
+						}, ]
+					},
+					{
+						name: '注册',
+						value: 1,
+						type: 'registerTime',
+						option: [{
+							label: '全部',
+						}, {
+							label: '今天',
+						}, {
+							label: '昨天',
+						}, {
+							label: '近7天',
+						}, {
+							label: '自定义',
+						}]
+					}, {
+						name: '看课',
+						value: 2,
+						type: 'watchStatus',
+						option: [{
+							label: '全部',
+						}, {
+							label: '未看过课',
+						}, {
+							label: '正常看课',
+						}, {
+							label: '停止看课',
+						}]
+					},
+					{
+						name: '缺课',
+						value: 3,
+						type: 'courseStatus',
+						option: [{
+							label: '全部',
+						}, {
+							label: '已缺课',
+						}, {
+							label: '未缺课',
+						}]
+					},
+					{
+						name: '项目',
+						value: 4,
+						type: 'project',
+						option: [{
+							label: '全部',
+							id: ''
+						}]
+					},
+					{
+						name: '批量',
+						value: 5,
+						type: 'piliang',
+						special: true,
+						stopPrevent: true
+					}
+				],
+				searchbarNav: 0,
+				userStatusIndex: 0,
+				registerTimeIndex: 0,
+				watchStatusIndex: 0,
+				courseStatusIndex: 0,
+				projectStatusIndex: 0,
+				selprojectId: '',
+				showCalendar: false,
+				date: '',
+				mode: 'range',
+				queryParam: {
+					typeIndex: 0,
+					startTime: '',
+					endTime: ''
+				},
+				mescroll: null,
+				downOption: {
+					use: true,
+					auto: false
+				},
+				upOption: {
+					onScroll: false,
+					use: true, // 是否启用上拉加载; 默认true
+					auto: true,
+					page: {
+						pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					textNoMore: "已经到底了",
+					empty: {
+						icon: 'https://cos.his.cdwjyyh.com/fs/20240423/cf4a86b913a04341bb44e34bb4d37aa2.png',
+						tip: '暂无数据'
+					}
+				},
+				dataList: [],
+				invitePop: false,
+				setTimeShow: false,
+				time: "",
+				user: {},
+				idx: [],
+				todayday: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
+				startTime: '',
+				endTime: '',
+				isShowSelectAll: false, //是否显示全选
+				isSelectAll: false, //是否全选
+				ispopshow: false,
+				selectidAll: [],
+				changetag: [],
+				selectidtag: '',
+				itemname: '',
+				userid: '',
+				groupid: [],
+				pageOptions: {
+					pageNum: 1,
+					pageSize: 8,
+				},
+				status: 'loadmore',
+				sharetag: 1,
+				sharetaglist: [],
+				codeLink: [],
+				zhanshitag: '',
+				copyLinks: '',
+				showzhidao: false,
+				imgs: this.$store.state.imgpath + '/app/image/logoshare.png',
+				currentIsBlack: 1,
+				tagpageNum: 1,
+				tagpageSize: 16,
+				triggereds: false,
+				statusA: 'loadmore',
+				isEnableds: true,
+				pagetag: [],
+				tagkeywords: '',
+				salesid: '',
+				tagchangekeywords: '',
+				tagpageNums: 1,
+				tagpageSizes: 16,
+				triggeredsA: false,
+				statusAs: 'loadmore',
+				isEnabledsA: true,
+				pagetagA: [],
+				tops: '464rpx',
+				showInvite: false,
+				vipInviteshow: false,
+				projectbox:false,
+				projectList:{},
+				projectId:''
+			}
+		},
+		// onLoad() {
+		// 	// #ifdef MP-WEIXIN
+		// 	uni.showShareMenu({
+		// 		withShareTicket: true,
+		// 		menus: ['shareAppMessage']
+		// 	});
+		// 	// #endif
+		// },
+		mounted() {
+			this.getsalelist()
+			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {},
+				this.getvipListnum()
+			this.userList = []
+			this.getfsuserListdata()
+			this.getprojectlistsA()
+		},
+		onShow() {
+			// #ifdef H5
+			this.getjssdklist()
+			// #endif
+
+		},
+		// 这个是分享聊天
+		// 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,
+		// 		imageUrl: this.imgs,
+		// 	}
+		// },
+		computed: {
+			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
+				const pages = '/pages_course/becomeVIP?companyId=' +this.user.companyId
+				+"&projectId=" +this.projectId+ '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist
+				this.$emit('childEvent', pages);
+			},
+			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)
+			},
+			changetagall() {
+				this.showTagSelect = !this.showTagSelect
+				this.tagchangekeywords = ''
+				this.selectidtag = ''
+				this.showInvite = false
+				this.sharetag = 1
+				this.getalltagtaglist()
+			},
+			getTagpageS(type) {
+				if (type == 'last') {
+					if (this.tagpageNums >= 2) {
+						this.tagpageNums--
+						this.getalltagtaglist()
+					} else {
+						uni.showToast({
+							title: '已经是第一页',
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				} else {
+					if (this.tagpageNums < this.pagetagA.pages) {
+						this.tagpageNums++
+						this.getalltagtaglist()
+					} else {
+						uni.showToast({
+							title: '已经是最后一页',
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				}
+			},
+			getcompanyTags(value) {
+				this.tagchangekeywords = value
+				this.getalltagtaglist()
+			},
+			singleDelete(data) {
+				this.pageOptions.pageNum = 1
+				this.$emit('update:parentValue', '新值');
+				this.userList = []
+				this.selectidAll[0] = data
+				this.changeblack()
+			},
+			changeblack() {
+				// console.log(this.selectidAll[0])
+				//取消禁用
+				if (this.selectidAll.length < 1) {
+					uni.showToast({
+						icon: 'none',
+						title: '所选列表为空'
+					})
+					return
+				}
+				removebalcklist(this.selectidAll).then(res => {
+					if (res.code == 200) {
+						this.pageOptions.pageNum = 1
+						// console.log(this.pageOptions.pageNum)
+						this.getfsuserListdata('refresh')
+						// 创建一个在**秒后执行的定时器
+						const timer = setTimeout(function() {
+							uni.showToast({
+								icon: 'none',
+								title: '取消禁用成功'
+							})
+						}, 200);
+						this.getvipListnum()
+						this.isShowSelectAll = false
+						this.isSelectAll = false
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			blackSel() {
+				this.isShowSelectAll = !this.isShowSelectAll
+				// if (data.value == 4) {
+				// 	this.itemname = data.name
+				// 	this.isShowSelectAll = !this.isShowSelectAll
+				// } else {
+				// 	this.isShowSelectAll = false
+				// }
+			},
+			getsalelist() {
+				const oldlist = this.filterData[0].option
+				getusersales().then(res => {
+					if (res.code == 200) {
+						const list = res.data
+						this.filterData[0].option = oldlist.concat(list.map(item => {
+							return {
+								id: item.userId,
+								label: item.nickName
+							};
+						}));
+						// this.filterData[0].option=list.map(item => {
+						// 	return {
+						// 		id: item.userId,
+						// 		label: item.nickName
+						// 	};
+						// })
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+						});
+					}
+				})
+
+			},
+			getTagpage(type) {
+				if (type == 'last') {
+					if (this.tagpageNum >= 2) {
+						this.tagpageNum--
+						this.getcompanyTag()
+					} else {
+						uni.showToast({
+							title: '已经是第一页',
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				} else {
+					if (this.tagpageNum < this.pagetag.pages) {
+						this.tagpageNum++
+						this.getcompanyTag()
+					} else {
+						uni.showToast({
+							title: '已经是最后一页',
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				}
+			},
+			//标签展示下拉
+			pullDownRefreshs() {
+				// 下拉
+				this.triggereds = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggereds = false;
+					uni.stopPullDownRefresh()
+					this.tagpageNum = 1;
+					this.getcompanyTag('refresh') //触底  不穿执行else
+					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+				}, 1000)
+			},
+			getjssdklist() {
+				const param = {
+					url: window.location.href
+				}
+				getSDK(param).then(res => {
+					wx.config({
+						appId: res.data.appId, // 必填,公众号的唯一标识
+						timestamp: res.data.timestamp, // 必填,生成签名的时间戳
+						nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
+						signature: res.data.signature, // 必填,签名
+						jsApiList: ["updateAppMessageShareData"] // 必填,需要使用的JS接口列表
+					});
+				})
+			},
+			shareimg() {
+				//分享好友
+				this.getlink()
+				let self = this
+				// 配置--你到时候把配置全局 --就是这些东西  调接口拿
+				wx.ready(function() { //需在用户可能点击分享按钮前就先调用
+					wx.updateAppMessageShareData({
+						title: self.user.userName + "邀请您成为会员", // 分享标题
+						desc: self.user.deptName, // 分享描述
+						link: self.copyLinks,
+						imgUrl: self.codeLink.url || self.imgs, // 分享图标
+						success: function(res) {
+							self.showzhidao = true
+							self.setImg = false
+							self.showShare = false
+							// 设置成功
+							uni.showToast({
+								title: '卡片已生成',
+								icon: 'none',
+								duration: 1000
+							});
+						},
+						fail: function(err) {
+							console.log(err);
+							uni.showToast({
+								title: '卡片生成失败,请重试',
+								icon: 'none',
+								duration: 2000
+							})
+						}
+					})
+				});
+			},
+			downimg() {},
+			closeimg() {
+				this.setImg = false
+				this.invitePop = false
+			},
+			buildimg() {
+				this.setImg = !this.setImg
+				this.getshareimg()
+			},
+			addtag(add) {
+				this.sharetag = add
+				this.showTagSelect = !this.showTagSelect
+				this.invitePop = !this.invitePop
+				this.showInvite = true
+				this.getalltagtaglist()
+			},
+			changevipuser() {
+				this.showcol = !this.showcol
+				this.getgrouplist()
+			},
+			getgrouplist() {
+				//获取群管列表
+				getgroupList().then(res => {
+					if (res.code == 200) {
+						this.columns = [res.data]
+						// console.log(this.columns)
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			changeall() {
+				//更换全部会员
+				console.log(1)
+				const param = {
+					companyId: this.user.companyId,
+					companyUserId: this.userid,
+					userId: this.groupid
+				}
+				changevipUser(param).then(res => {
+					if (res.code == 200) {
+						uni.showToast({
+							icon: 'none',
+							title: '更换会员归属成功'
+						})
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			receiveA(e) {
+				console.log(e)
+				this.userid = e.value[0].userId
+				if (this.isShowSelectAll == true) {
+					this.groupid = this.selectidAll
+					this.changeall()
+					this.showcol = !this.showcol
+					setTimeout(() => {
+						this.getfsuserListdata()
+					}, 200)
+				} else {
+					this.changeall()
+					this.showcol = !this.showcol
+					this.getfsuserListdata()
+				}
+				this.isSelectAll = false
+			},
+			getvipListnum() {
+				getvipNum().then(res => {
+					if (res.code == 200) {
+						this.list[0].name = "会员" + '(' + res.data.number + ')'
+						this.list[1].name = "小黑屋" + '(' + res.data.smallBlackNum + ')'
+						this.list[2].name = "黑名单" + '(' + res.data.blackNum + ')'
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getactNav(data) {
+				if (data.value == 5) {
+					this.itemname = data.name
+					this.isShowSelectAll = !this.isShowSelectAll
+				} else {
+					this.isShowSelectAll = false
+				}
+			},
+			closetagselect() {
+				this.showTagSelect = !this.showTagSelect
+			},
+			suretagchangeAll() {
+				if (this.sharetag == 0) {
+					this.sharetaglist = this.changetag.filter(item => item.checked).map(v => v.tagId).join(',')
+					this.showTagSelect = !this.showTagSelect
+					this.zhanshitag = this.changetag.filter(item => item.checked).map(v => v.tag).join(',')
+					// console.log(this.sharetaglist)
+					const pages = '/pages_course/becomeVIP?companyId=' +this.user.companyId
+					+"&projectId=" +this.projectId+ '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist
+					this.$emit('childEvent', pages);
+					console.log(pages)
+				} else {
+					//多选改标签确认按钮
+					this.showTagSelect = !this.showTagSelect
+					if (this.selectidAll.length == 0) {
+						uni.showToast({
+							icon: 'none',
+							title: '未选中用户'
+						})
+						return
+					}
+					this.selectidtag = this.changetag.filter(item => item.checked).map(v => v.tagId)
+					this.changeLabelmore()
+				}
+				if (this.showInvite) {
+					this.invitePop = true
+				}
+			},
+			singleChangeLable(data) {
+				this.showTagSelect = !this.showTagSelect
+				this.selectidAll[0] = data
+				this.tagchangekeywords = ''
+				this.selectidtag = []
+				this.sharetag = 1
+				this.showInvite = false
+				this.getalltagtaglist()
+			},
+			getalltagtaglist(type) {
+				//获取公司标签列表
+				const data = {
+					pageNum: this.tagpageNums,
+					pageSize: this.tagpageSizes,
+					keyword: this.tagchangekeywords
+				}
+				getallTags(data).then(res => {
+					if (res.code == 200) {
+						const dataList = res.data.list.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						if (type == 'refresh') {
+							this.changetag = dataList
+						} else {
+							this.changetag = dataList
+						}
+						if (res.data.isLastPage) {
+							this.statusAs = 'nomore'
+						} else {
+							this.statusAs = 'loadmore'
+						}
+						this.pagetagA = res.data
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			changesinglevip(data) {
+				this.showcol = !this.showcol
+				// console.log(data)
+				this.groupid[0] = data
+				this.getgrouplist()
+			},
+			changeLabelmore() {
+				//改标签选择按钮
+				const params = {
+					tagIds: this.selectidtag,
+					userCompanyUserIds: this.selectidAll
+				}
+				changeLable(params).then(res => {
+					if (res.code == 200) {
+						this.userList = []
+						this.getfsuserListdata('refresh')
+						const timer = setTimeout(function() {
+							uni.showToast({
+								icon: 'none',
+								title: '标签更改成功'
+							})
+						}, 500);
+						this.isSelectAll = false
+						this.selectedCount = 0
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			changeOwnership() {
+				//更换归属(经销商功能)
+			},
+			getcompanyTag(type) {
+				this.companytag = []
+				this.tagkeywords = this.tagkeywords.replace(/,/g, ',')
+				const data = {
+					pageNum: this.tagpageNum,
+					pageSize: this.tagpageSize,
+					keyword: this.tagkeywords
+				}
+				getcompanyTaglist(data).then(res => {
+					if (res.code == 200) {
+						// this.showCompanytag = res.data.list
+						const dataList = res.data.list.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						if (type == 'refresh') {
+							this.companytag = dataList
+						} else {
+							this.companytag = [...this.companytag, ...dataList]
+						}
+						if (res.data.isLastPage) {
+							this.statusA = 'nomore'
+						} else {
+							this.statusA = 'loadmore'
+						}
+						this.pagetag = res.data
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getfsuserListdata(type) {
+				// this.userList=[]
+				const param = {
+					userId: this.user.userId,
+					tabValue: this.currentType,
+					registerStartTime: this.startTime, //注册开始
+					registerEndTime: this.endTime, //注册结束
+					watchCourseType: this.watchStatusIndex,
+					missCourseStatus: this.courseStatusIndex,
+					projectId: this.selprojectId,
+					keyword: this.keyword,
+					tagIds: this.idx,
+					status: this.currentIsBlack,
+					companyUserId: this.salesid,
+					continueMissCourseSort: this.searchTypeIndex,
+					...this.pageOptions
+				}
+
+				getfsuserList(param).then(res => {
+					if (res.code == 200) {
+						this.viewload = false
+						let dataList = res.data.list.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						if (type == 'refresh') {
+							this.userList = dataList
+						} else if (type == 'more') {
+							this.userList = dataList
+						} else {
+							this.userList = [...this.userList, ...dataList]
+						}
+						if (res.data.isLastPage) {
+							this.status = 'nomore'
+						} else {
+							this.status = 'loadmore'
+						}
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			onChange(index) {
+				if (index == 5) return
+				this.searchbarNav = index
+			},
+			searchKeyword(value) {
+				this.keyword = value
+				this.userList = []
+				this.pageOptions.pageNum = 1
+				this.getfsuserListdata()
+			},
+			singleChange(data) {
+				this.userList = []
+				this.selectidAll[0] = data
+				this.changeProhibit()
+			},
+			changeProhibit() {
+				//批量禁用选择按钮
+				if (this.selectidAll.length < 1) {
+					uni.showToast({
+						icon: 'none',
+						title: '所选列表为空'
+					})
+					return
+				}
+				Addblacklist(this.selectidAll).then(res => {
+					if (res.code == 200) {
+						this.pageOptions.pageNum = 1
+						this.getfsuserListdata('refresh')
+						// 创建一个在**秒后执行的定时器
+						const timer = setTimeout(function() {
+							uni.showToast({
+								icon: 'none',
+								title: '禁用成功'
+							})
+						}, 200);
+						this.getvipListnum()
+						// this.isShowSelectAll = false
+						this.isSelectAll = false
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			// 全选
+			selectAll() {
+				// 先设置全选
+				this.isSelectAll = !this.isSelectAll
+				// 然后设置列表  checked没得this不会报错吗  这是返回新数组 
+				console.log(this.isSelectAll)
+				this.userList = this.userList.map(item => {
+					// 每一项的 checked为 全选的状态
+					return {
+						...item,
+						checked: this.isSelectAll
+					}
+				})
+				this.selectidAll = this.userList.filter(item => item.checked).map(item => item.userCompanyUserId)
+				console.log(this.isSelectAll)
+			},
+			// 单选 /反选 
+			changeItem(i) {
+
+				let arr = {
+					...this.userList[i],
+					checked: !this.userList[i].checked
+				}
+				this.$set(this.userList, i, arr)
+				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) {
+					this.userList = this.userList.map(item => {
+						return {
+							...item,
+							checked: this.isSelectAll
+						}
+					})
+				}
+				this.selectidAll = this.userList.filter(item => item.checked).map(item => item.userCompanyUserId)
+
+			},
+			reset() {
+				//重置时间选择等筛选
+				const type = this.filterData[this.searchbarNav].type
+				console.log(this.registerTimeIndex)
+				if (type == 'registerTime') {
+					this.registerTimeIndex = ''
+					this.endTime = ''
+					this.startTime = ''
+					this.getfsuserListdata('refresh')
+					// console.log(this.getfsuserListdata())
+				} else if (type == 'watchStatus') {
+					this.watchStatusIndex = 0
+					this.getfsuserListdata('refresh')
+				} else if (type == 'userStatus') {
+					this.userStatusIndex = 0
+					this.salesid = ''
+					this.getfsuserListdata('refresh')
+				} else if (type == 'courseStatus') {
+					this.courseStatusIndex = 0
+					this.getfsuserListdata('refresh')
+				} else if (type == 'project') {
+					this.selprojectId = ''
+					this.projectStatusIndex = 0
+					this.getfsuserListdata("refresh")
+				} else {
+
+				}
+			},
+			confirm(e) {
+				this.pageOptions.pageNum = 1
+				this.userList = []
+				const type = this.filterData[this.searchbarNav].type
+				const value = this.registerTimeIndex
+				if (type == 'registerTime') {
+					if (value == 0) {
+						this.startTime = ''
+						this.endTime = ''
+						this.getfsuserListdata('refresh')
+					} else if (value == 1) {
+						this.startTime = this.todayday + ' 00:00:00'
+						this.endTime = this.todayday + ' 23:59:59'
+						this.getfsuserListdata('refresh')
+					} else if (value == 2) {
+						let yesterday = new Date();
+						yesterday.setDate(yesterday.getDate() - 1);
+						this.startTime = uni.$u.timeFormat(yesterday, 'yyyy-mm-dd') + ' 00:00:00'
+						this.endTime = uni.$u.timeFormat(yesterday, 'yyyy-mm-dd') + ' 23:59:59'
+						this.getfsuserListdata('refresh')
+					} else if (value == 3) {
+						let yesterday = new Date();
+						yesterday.setDate(yesterday.getDate() - 6);
+						this.startTime = uni.$u.timeFormat(yesterday, 'yyyy-mm-dd') + ' 00:00:00'
+						this.endTime = this.todayday + ' 23:59:59'
+						this.getfsuserListdata('refresh')
+					} else {
+						this.getfsuserListdata('refresh')
+					}
+				} else if (type == 'watchStatus') {
+					// this.watchStatusIndex=value
+
+					this.getfsuserListdata()
+					// console.log(this.filterData)
+				} else if (type == 'userStatus') {
+					if (this.userStatusIndex == 0) {
+						this.salesid = ''
+						this.getfsuserListdata('refresh')
+					} else {
+						this.getfsuserListdata('refresh')
+					}
+					// console.log(this.userStatusIndex)
+				} else if (type == 'courseStatus') {
+					this.getfsuserListdata('refresh')
+					console.log(this.courseStatusIndex)
+				} else if (type == 'project') {
+					if (this.projectStatusIndex == 0) {
+						this.selprojectId = ''
+						this.getfsuserListdata('refresh')
+					} else {
+						this.getfsuserListdata('refresh')
+					}
+					console.log(this.projectStatusIndex)
+				}
+				// this.mescroll.resetUpScroll()
+			},
+
+			handleParamItem(type, index, id) {
+				if (type == 'registerTime') {
+					this.registerTimeIndex = index
+				} else if (type == 'watchStatus') {
+					this.watchStatusIndex = index
+					// console.log('watchStatus',index)
+				} else if (type == 'userStatus') {
+					this.userStatusIndex = index
+					this.salesid = id
+					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
+				}
+			},
+			sectionChange(index) {
+				this.current = index;
+				this.currentType = 0
+				this.startTime = '' //注册开始
+				this.endTime = '' //注册结束
+				this.watchStatusIndex = 0
+				this.salesid = ''
+				this.courseStatusIndex = 0
+				this.selprojectId = ''
+				this.keyword = ''
+				this.idx = []
+				this.pageOptions.pageNum = 1
+				this.isShowSelectAll = false
+				this.userList = []
+				if (index == 0) {
+					// 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.isSelectAll=false
+				this.getvipListnum()
+			},
+			clickTypeTab(e) {
+				this.currentType = e.index
+				this.userList = []
+				// 在这里更新
+				this.pageOptions.pageNum = 1
+				this.getfsuserListdata()
+			},
+			bindPickerChange(e) {
+				console.log('picker发送选择改变,携带值为', e.detail.value)
+				this.userList = []
+				this.searchTypeIndex = e.detail.value
+				this.getfsuserListdata()
+			},
+			openPop(type) {
+				this.popTitle = type == 'search' ? '搜索选择' : type == 'tag' ? '标签筛选' : ''
+				this.typeIndex = this.queryParam.typeIndex
+				this.showPop = true
+				if (type == 'tag') {
+					this.getcompanyTag()
+				}
+			},
+			closePop() {
+				this.showPop = false
+			},
+			resetPop(i) {
+				this.idx = []
+				this.tagkeywords = ''
+				this.tagpageNum = 1
+				this.showCompanytag = []
+				this.companytag.forEach(tag => {
+					tag.checked = false; // 将所有标签的show属性重置为true
+				});
+				this.showPop = false
+				this.$nextTick(() => {
+					this.getcompanyTag()
+					this.getfsuserListdata()
+				})
+			},
+			closeCalendar() {
+				this.showCalendar = false
+			},
+			confirmCalendar(e) {
+				// this.startTime = e[0]
+				// this.endTime =  e[e.length-1]
+				this.showCalendar = false
+				this.queryParam.startTime = e.range.after
+				this.queryParam.endTime = e.range.before
+				this.endTime = e.range.before + ' 23:59:59'
+				this.startTime = e.range.after + ' 00:00:00'
+				console.log(e)
+				// this.getCount()
+			},
+			bindTypeChange(i) {
+				this.typeIndex = i
+			},
+			confirmPop() {
+				this.queryParam.typeIndex = this.typeIndex
+				this.showPop = false
+				this.showCompanytag = this.companytag.filter(item => item.checked)
+				this.idx = this.showCompanytag.map(v => v.tagId)
+				//filtter(过滤)  筛选所有checked==true的  然后map返回每一项的id
+				if (this.idx.length == 0) {
+					this.showCompanytag = this.companytag
+				}
+				this.$nextTick(() => {
+					this.getfsuserListdata("refresh")
+				})
+			},
+			chooseTag(i) {
+				this.companytag[i].checked = !this.companytag[i].checked
+			},
+			choosechangeTag(i) {
+				this.changetag[i].checked = !this.changetag[i].checked
+			},
+			vipInvite() {
+				if (!this.vipInviteshow) {
+					// this.invitePop = true
+					// this.getlink('preload')
+					// this.getjssdklist()
+					this.getprojectlists()
+					// this.invitePop = true
+					this.projectId=''
+					this.projectbox=true
+					this.sharetaglist = null
+					
+				} else {
+					this.vipInviteshow = false
+				}
+
+			},
+			showinimg() {
+				this.vipInviteshow = true
+			},
+			copyLink() {
+				this.setTimeShow = true
+			},
+			confirmTime() {
+				this.setTimeShow = false
+				this.showShare = false
+				console.log(this.showInvite)
+				this.getshareLink()
+			},
+			getshareimg() {
+				//生成海报
+				this.getlink()
+				this.codeLink = ''
+				uni.showLoading({
+					title: '正在生成中...'
+				})
+				const url = window.location.href.split('#')[0]
+				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,
+					tagIds: this.sharetaglist,
+				}
+				becomeVipuserImg(param).then(res => {
+					if (res.code == 200) {
+						this.codeLink = res.posterImage
+						console.log(res)
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+							duration: 2000
+						});
+					}
+				})
+			},
+			getlink(type) {
+				//生成链接
+				const param = {
+					companyId: this.user.companyId,
+					companyUserId: this.user.userId,
+					tagids: this.sharetaglist,
+					limitTime: this.time
+				}
+				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
+			},
+			getshareLink() {
+				//生成链接
+				this.copyLinks = []
+				const param = {
+					code: '',
+					companyId: this.user.companyId,
+					companyUserId: this.user.userId,
+					tagids: this.sharetaglist,
+					limitTime: this.time
+				}
+				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
+				console.log(this.copyLinks)
+				setTimeout(() => {
+					uni.setClipboardData({
+						data: String(this.copyLinks),
+						success: () => {
+							uni.showToast({
+								title: '复制成功',
+								icon: 'none',
+								duration: 2000
+							});
+							setTimeout(() => {
+								this.invitePop = false
+							}, 200)
+						},
+					})
+				}, 100)
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					courseId: this.courseId,
+					status: '',
+					pageNum: page.num,
+					pageSize: page.size
+				};
+				uni.showLoading({
+					title: "加载中..."
+				})
+			},
+		}
+	}
+</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;
+	}
+
+	.share {
+		display: inline-block;
+		position: absolute;
+		bottom: 0;
+		left: 0;
+		width: 100%;
+		height: 50%;
+		opacity: 0;
+	}
+
+	.imgshe {
+		display: flex;
+		flex-direction: row-reverse
+	}
+
+	.point-box {
+		height: 100%;
+		width: 100%;
+
+		.xu-box {
+			border: #f5f5f5 4rpx dashed;
+			padding: 20rpx 20rpx;
+		}
+	}
+
+	.codeimg {
+		position: absolute;
+		z-index: 9999;
+		left: 40rpx;
+		top: 40rpx;
+	}
+
+	#codeurl {
+		position: relative;
+	}
+
+	.checked-bg {
+		border: 1px solid #1677ff !important;
+		color: #1677ff !important;
+		background-color: #e7f1fe !important;
+	}
+
+	.changetagbtn {
+		width: 45%;
+		height: 80rpx;
+		border-radius: 50rpx;
+		text-align: center;
+		line-height: 80rpx;
+	}
+
+	::v-deep {
+		.foot-select {
+			width: 100%;
+			padding: 20rpx 20rpx;
+			padding-bottom: 60rpx;
+			z-index: 10000 !important;
+			position: fixed;
+			bottom: 0;
+			margin-left: -24rpx !important;
+		}
+	}
+
+	::v-deep {
+		.model .u-fade-enter-active {
+			z-index: 10075 !important;
+
+		}
+	}
+
+	::v-deep {
+		.uni-calendar__mask {
+			z-index: 11000 !important;
+		}
+
+		.uni-calendar__content {
+			z-index: 12000 !important;
+		}
+	}
+
+	.container {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #222222;
+		height: 100%;
+		overflow: hidden;
+	}
+
+	.boxnav {
+		flex-wrap: wrap;
+		padding: 0 0 0 10px;
+
+		&-item {
+			width: 50%;
+			overflow: hidden;
+		}
+
+		&-item-info {
+			border: 1px solid #f5f5f5;
+			text-align: center;
+			color: #222;
+			background-color: #f5f5f5;
+			border-radius: 3px;
+			padding: 5px;
+			margin: 0 10px 10px 0;
+		}
+
+		&-active {
+			border: 1px solid #1677ff !important;
+			color: #1677ff !important;
+			background-color: #e7f1fe !important;
+		}
+	}
+
+	.calendar-day {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 12px;
+		color: #999;
+		flex: 1;
+		min-height: 30px;
+		background-color: #f5f5f5;
+		border-radius: 4px;
+		margin: 0 10px 10px 0;
+	}
+
+	.setTimebox {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		width: fit-content;
+		height: fit-content;
+	}
+
+	.timetip {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #2979ff;
+		text-align: center;
+		margin-bottom: 5px;
+	}
+
+	.popbox {
+		background-color: #fff;
+		border-radius: 12px;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #333;
+		padding-bottom: 120rpx;
+
+		&-head {
+			padding: 15px;
+			font-weight: bold;
+			font-size: 15px;
+			text-align: center;
+			position: relative;
+		}
+
+		.close-circle {
+			position: absolute;
+			right: 10px;
+			top: 50%;
+			transform: translateY(-50%);
+		}
+
+		&-body {
+			padding: 10px 10px;
+		}
+
+		.radiobox {
+			&-item {
+				padding: 10px 0;
+				border-bottom: 1px solid #f5f5f5;
+
+				&:last-child {
+					border-bottom: none;
+				}
+			}
+		}
+
+		&-footer {
+			padding: 15px 0;
+		}
+
+		&-footer-btn {
+			flex: 1;
+			height: 44px;
+			line-height: 44px;
+			margin: 0 10px;
+			border-radius: 50px;
+			border: none;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			color: #333;
+
+			&::after {
+				border: none;
+			}
+		}
+
+		.con-btn {
+			background-color: #1677ff;
+			color: #fff;
+		}
+
+		.choosetitle {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 15px;
+			color: #333;
+		}
+
+		.invitetip {
+			margin-top: 10px;
+			background-color: #ebf5fb;
+			color: #1677ff;
+			padding: 5px 10px;
+			border-radius: 5px;
+		}
+
+		.sharePop-item {
+			padding: 0 10px;
+			box-sizing: border-box;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			display: inline-flex !important;
+
+			image {
+				height: 48px;
+				width: 48px;
+				margin-bottom: 10px;
+			}
+		}
+	}
+
+	.headbox {
+		background-color: #fff;
+
+		.subsection {
+			height: 45px;
+			padding: 4px;
+		}
+
+		.participate-order {
+			font-size: 12px;
+
+			image {
+				width: 15px;
+				height: 15px;
+			}
+		}
+	}
+
+	.tag-active {
+		background-color: #ffeceb !important;
+		color: #f93e3e !important;
+		border: 1px solid #f93e3e !important;
+	}
+
+	.tagbox {
+		padding-top: 10rpx;
+		font-size: 12px;
+		color: #1677ff;
+
+		&-list {
+			margin: 0 0 -6px 6px;
+			flex-wrap: wrap;
+		}
+
+		&-item {
+			height: 26px;
+			padding: 0 8px;
+			margin: 0 6px 6px 0;
+			border-radius: 4px;
+			background-color: #f5f5f5;
+			color: #999;
+			border: 1px solid #f5f5f5;
+			box-sizing: border-box;
+			font-size: 12px;
+		}
+	}
+
+	.invite-member {
+		height: 55px;
+		width: 50px;
+		position: fixed;
+		bottom: 110px;
+		right: 10px;
+		cursor: pointer;
+
+		.intimg {
+			width: 50px;
+			height: 55px;
+		}
+	}
+
+	.invite-members {
+		right: -68rpx;
+	}
+
+	.falseimg {
+		position: absolute;
+		width: 30rpx;
+		height: 30rpx;
+		top: 0rpx;
+		right: -8rpx;
+	}
+
+	.userlist {
+		padding: 24rpx;
+	}
+</style>

+ 438 - 0
pages_manage/components/vipUserItem.vue

@@ -0,0 +1,438 @@
+<template>
+	<view class=" column flex-1 hb" style="height: 100%;">
+		<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 v-for="(item,index) in viplist" :key="index" class="justify-start align-center">
+				<u-checkbox-group @change="changeitem(index)" v-if="isShowSelectAll">
+					<u-checkbox :checked="item.checked" shape="circle" activeColor="#FF6C47" :name="true"
+						labelColor="#FF6C47" />
+				</u-checkbox-group>
+				<view class="list-item w100" @click="morepage(item)" >
+					<view class="list-item-head x-bc" >
+						<view class="x-f" style="flex: 1;overflow: hidden;">
+							<u-avatar :src='item.avatar'></u-avatar>
+							<view class="list-item-head-l">
+								<view style="flex: 1;overflow: hidden;display: flex;" @click.passive.stop>
+									<text class="list-item-name one-t single-line-ellipsis" 
+									style="width: fit-content;">{{item.nickname}}</text>
+									<image class="list-item-copy" :src="imgPath+'/app/images/copy_icon.png'" mode="aspectFill"
+										@click="copyId(item.nickname)">
+									</image>
+									<text class="fs24 base-color-6">#{{item.userId}}</text>
+								</view>
+								<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>
+						<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>
+						<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>
+							<text class="label u-border-right pr20" style="color:#ff8921;" 
+							v-else-if="item.courseCountStatus==2">停止看课{{item.stopWatchDays || 0}}天</text>
+							<text class="label u-border-right pr20" style="color:#f00;" v-else>未看过课</text>
+							<text class="label pl20 ">参与营期</text><text class="value-num ">{{item.partCourseCount || 0}}</text>
+							<text class="label u-border-left pl20">缺课数量</text><text class="value-num" style="color:red">{{item.missCourseCount || 0}}</text>
+						</view>
+					</view>
+					<view class="justify-between align-center" v-if="!isShowSelectAll" @click.passive.stop>
+						<view @click="changemore(item)" 
+						 class="fs24 u-border ptb4 plr18 radius40 base-color-6">更多</view>
+						<view class="justify-start">
+							<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">禁用</view>
+							<view class="btn-box base-color-red base-bg-false bor-red"
+								@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>
+
+					</view>
+				</view>
+			</view>
+			<u-loadmore :status="status" />
+			<view class="h120"></view>
+		</scroll-view>
+		<view>
+			<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==0"></u-input>
+							<u-input :placeholder="contpl" v-model="changeremark" v-if="selnum==1"></u-input>
+						</view>
+					</u-modal>
+				</view>
+			</u-popup>
+			<u-notify ref="uNotify" message=""></u-notify>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getchangesUserInfo,updataRemark} from '@/api/manageCompany.js'
+	export default {
+		props: {
+			viplist: {
+				type: Array,
+				default: () => []
+			},
+			isShowSelectAll: {
+				type: Boolean,
+				default: false, //是否显示全选  由外部控制
+			},
+			pageOptions: {
+				type: Object,
+				default: () => ({
+					pageNum: 1,
+					pageSize: 8,
+				})
+			},
+			status: {
+				type: String,
+				default: 'loadmore'
+			}
+
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		  },
+		data() {
+			return {
+				checkList: [],
+				cccc: [false],
+				user: [],
+				isEnabled: true,
+				triggered: false,
+				stopWatchDays:'停止看课三天',
+				showmore:false,
+				contpl:'',
+				changelist:'',
+				changeremark:'',
+				selnum:'',
+				titlelist:'',
+				showlist:false,
+				groupid:'',
+				openData:[],
+				morelist:[
+					{
+						name:'改昵称',
+						value:0,
+						text:'请输入修改昵称'
+					},
+					{
+						name:'改备注',
+						value:1,
+						text:'请输入备注'
+					}
+				],
+			}
+		},
+		mounted() {
+			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
+		},
+		methods: {
+			changemore(data){
+				this.openData=data
+				this.groupid=data.userId,
+				this.showmore=!this.showmore
+			},
+			confirmchange(){
+				if(this.titlelist=='改昵称'){
+					this.updatagroup()
+				}else{
+					this.updataremark()
+				}
+				console.log(this.openData.userId)
+				console.log(this.changeremark)
+				console.log(this.changelist)
+				this.showlist=false
+				setTimeout(()=>{
+					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,
+					nickName:this.changelist
+				}
+				getchangesUserInfo(data).then(res=>{
+					if(res.code==200){
+						uni.showToast({
+							icon: 'none',
+							title: "修改成功"
+						})
+						this.$emit('changelistname')
+					}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
+				console.log(this.openData)
+				console.log('标题',this.titlelist)
+				this.changelist=this.openData.nickname
+				this.changeremark=this.openData.remark
+				this.showlist=true
+			},
+			closemore(){
+				this.showmore=!this.showmore
+			},
+			openmore(){},
+			tophone(phone){
+				console.log(phone)
+				if(phone==null){
+					uni.showToast({
+						title: '用户暂时没有录入电话',
+						icon: 'none',
+						duration: 2000
+					});
+				}else{
+					uni.setClipboardData({
+						data: String(phone),
+						success: () => {
+							// 拨号跳转
+							  uni.makePhoneCall({
+								phoneNumber: phone, // 电话号码
+								success: () => {
+								  console.log('拨号成功');
+								},
+								fail: () => {
+								  console.log('拨号失败');
+								}
+							  });
+						},
+					})
+				}
+			},
+			copyId(id) {
+				uni.setClipboardData({
+					data: String(id),
+					success: () => {
+						uni.showToast({
+							title: '复制成功',
+							icon: 'none',
+							duration: 2000
+						});
+					},
+				})
+			},
+			pullDownRefresh() {
+				// 下拉
+				this.triggered = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggered = false;
+					uni.stopPullDownRefresh()
+					this.$emit('changePageOptions', {
+						...this.pageOptions,
+						pageNum: 1
+					})
+					// listParmas.page = 1;//页码为1
+					// reSetList()
+					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+					this.$emit('pullDownRefresh')
+				}, 1000)
+			},
+			reachBottom() {
+				//上拉
+				// status这个是加载状态
+				if (this.status === 'loadmore') {
+					this.$emit('changeStatus', 'loading')
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						//触底页码+1 
+						// listParmas.page += 1;
+						this.$emit('changePageOptions', {
+							...this.pageOptions,
+							pageNum: this.pageOptions.pageNum + 1
+						})
+						//请求接口
+						this.$emit('reachBottom')
+						uni.hideNavigationBarLoading()
+					}, 1000);
+				}
+			},
+			morepage(item) {
+				uni.navigateTo({
+					url: '/pages_managedata/vipdetail?id='+item.userId+"&userCompanyId="+item.userCompanyUserId
+				})
+				uni.setStorageSync('detailUser', item)
+			},
+			openModel(tag, item) {
+				if (tag == 'label') {
+					this.$emit('getlableId', item.userCompanyUserId)
+				} else if (tag == 'disable') {
+					this.$emit('getuserId', item.userCompanyUserId)
+				}else if (tag == 'disabled') {
+					this.$emit('getuserIds', item.userCompanyUserId)
+					console.log(item.userId)
+				} else {
+					this.$emit('change', item.userCompanyUserId)
+				}
+			},
+			// 单选
+			changeitem(index) {
+				this.$emit('changeItem', index) //传参
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.btn-box {
+		height: 26px;
+		padding: 0 10px;
+		margin-left: 10px;
+		border-radius: 25px;
+		font-weight: 400;
+		font-size: 10px;
+		line-height: 26px;
+		box-sizing: border-box;
+	}
+
+	.list-item {
+		padding: 10px;
+		margin-bottom: 10px;
+		background-color: #fff;
+		border-radius: 12px;
+
+		&-head {
+			.phone {
+				flex-shrink: 0;
+				width: 80rpx;
+				height: 80rpx;
+			}
+
+			&-l {
+				flex: 1;
+				overflow: hidden;
+				margin-left: 10px;
+				margin-right: 10px;
+			}
+		}
+
+		&-copy {
+			width: 20px;
+			height: 20px;
+		}
+
+		&-re {
+			font-size: 10px;
+			// margin-top: 5px;
+		}
+
+		&-desc {
+			padding: 5px;
+			color: #999;
+			font-size: 12px;
+		}
+
+		.label {
+			margin-right: 4px;
+		}
+
+		.value-num {
+			margin-right: 18px;
+			color: #222;
+			font-weight: bold;
+		}
+
+		.taglist {
+			display: flex;
+			align-items: center;
+			flex-wrap: wrap;
+			color: #555;
+			padding-top: 5px;
+			view {
+				margin: 0 5px 0 0;
+			}
+		}
+
+		&-footer {
+			justify-content: flex-end;
+			padding: 6px 0;
+
+			.footer-tagbtn {
+				color: #1677ff;
+				background-color: #e7f2fe;
+				border: 1px solid #c9e1fb;
+			}
+
+			.footer-red {
+				color: #f93e3e;
+				background-color: #fae7e7;
+				border: 1px solid #f7a1a1;
+			}
+
+			&-btn {
+				height: 26px;
+				padding: 0 10px;
+				margin-left: 10px;
+				background-color: #f5f5f5;
+				border-radius: 25px;
+				font-weight: 400;
+				font-size: 10px;
+				line-height: 26px;
+				border: 1px solid #f5f5f5;
+				box-sizing: border-box;
+			}
+		}
+	}
+</style>

+ 657 - 0
pages_manage/dataDetails.vue

@@ -0,0 +1,657 @@
+<template>
+	<view class="column flex-1 hb">
+		<view>
+			<dropdownPanel :filterData='filterData' @onChange="onChange" @confirm="confirm" @reset="reset">
+				<view class="column flex-1 hb hidden">
+					<view v-if="searchbarNav == 0">
+						<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 class="p20 fs28 column flex-1 scrolly">
+								<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" />
+						</scroll-view>
+					</view>
+					<view v-else class="p20 fs28 column flex-1 hidden">
+						<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 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}}
+							</view>
+							<u-loadmore :status="status" />
+							<view class="ptb40"></view>
+						</scroll-view>
+					</view>
+				</view>
+			</dropdownPanel>
+		</view>
+		<view class="bgf m20 radius8 column flex-1 scrolly" style="max-height: 100%;">
+			<view class="column flex-1 scrolly">
+				<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-f8 radius16 p30 flex-1">
+								<view class="mb12 bold">营期</view>
+								<view class="base-color"><text class="bold fs40">
+										{{courselist.courseNum}}</text>期</view>
+							</view>
+							<view class="base-bg-f8 radius16 p20 flex-1 mlr20">
+								<view class="mb12 bold">课程数</view>
+								<view class="base-color"><text class="bold fs40">
+										{{courselist.videoNum}}</text>课</view>
+							</view>
+							<view class="base-bg-f8 radius16 p20 flex-1">
+								<view class="mb12 bold">参与会员</view>
+								<view class="base-color"><text class="bold fs40">
+										{{courselist.courseUserNum}}</text>人</view>
+							</view>
+						</view>
+					</u-collapse-item>
+					<!-- #ifdef MP-WEIXIN -->
+					<u-collapse-item name="questions" title="看课统计">
+					<!-- #endif -->
+						<!-- #ifndef MP-WEIXIN -->
+						<u-collapse-item name="questions">
+							<text slot="title" class="bold fs32">看课统计</text>
+							<!-- #endif -->
+						<text slot="value"
+							class="base-color fs24">{{collapseValue.includes('questions')?'收回':'展开'}}</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-f8 radius16 p30 flex-1">
+								<view class="mb12 bold">观看人数</view>
+								<view class="base-color"><text class="bold fs40">{{courselist.courseWatchNum}}</text>人</view>
+							</view>
+							<view class="base-bg-f8 radius16 p20 flex-1 mlr20">
+								<view class="mb12 bold">完播人数</view>
+								<view class="base-color"><text class="bold fs40">{{courselist.courseCompleteNum}}</text>人</view>
+							</view>
+							<view class="base-bg-f8 radius16 p20 flex-1">
+								<view class="mb12 bold">完播率</view>
+								<view class="base-color"><text class="bold fs40">{{courselist.courseCompleteRate}}</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-f8 radius16 p30 flex-1">
+								<view class="mb12 bold">答题人数</view>
+								<view class="base-color"><text class="bold fs40">
+										{{courselist.answerNum}}</text>人</view>
+							</view>
+							<view class="base-bg-f8 radius16 p20 flex-1 mlr20">
+								<view class="mb12 bold">正确人数</view>
+								<view class="base-color"><text class="bold fs40">
+										{{courselist.answerRightNum}}</text>人</view>
+							</view>
+							<view class="base-bg-f8 radius16 p20 flex-1">
+								<view class="mb12 bold">正确率</view>
+								<view class="base-color"><text class="bold fs40">
+										{{courselist.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-f8 radius16 p30 flex-1">
+								<view class="mb12 bold">红包个数</view>
+								<view class="base-color"><text class="bold fs40">
+										{{courselist.redPacketNum}}</text>个</view>
+							</view>
+							<view class="base-bg-f8 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">{{courselist.redPacketAmount}}</text>元
+									</view>
+								</view>
+							</view>
+						</view>
+					</u-collapse-item>
+					<!-- #ifdef MP-WEIXIN -->
+					<u-collapse-item name="funnel" title="转化漏斗图" v-if="!ratelistState">
+					<!-- #endif -->
+						<!-- #ifndef MP-WEIXIN -->
+						<u-collapse-item name="funnel" v-if="!ratelistState">
+							<text slot="title" class="bold fs32">转化漏斗图</text>
+							<!-- #endif -->
+						<text slot="value" class="base-color fs24">{{collapseValue.includes('funnel')?'收回':'展开'}}</text>
+						<view slot="right-icon">
+							<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+						</view>
+						<view v-show="!ratelistState">
+							<funnelChart :getratelist="getrateimg" />
+						</view>
+						<view v-show="ratelistState" class="center">暂无数据</view>
+					</u-collapse-item>
+					<!-- #ifdef MP-WEIXIN -->
+					<u-collapse-item name="rank" title="排行榜">
+					<!-- #endif -->
+						<!-- #ifndef MP-WEIXIN -->
+						<u-collapse-item name="rank">
+							<text slot="title" class="bold fs32">排行榜</text>
+							<!-- #endif -->
+						<text slot="value" class="base-color fs24">{{collapseValue.includes('rank')?'收回':'展开'}}</text>
+						<view slot="right-icon">
+							<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+						</view>
+						<view class="flex-1">
+							<!-- <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'">
+										<u-icon name="list-dot" size="20"></u-icon>
+										<view>按正序(前20名)</view>
+									</view>
+									<view class="justify-start" @click="ordergroup(0)" v-else>
+										<u-icon name="list-dot" size="20"></u-icon>
+										<view>按倒序(后20名)</view>
+									</view>
+								</view>
+								<view class="centerV">
+									<u-tabs :list="list1" @click="clickTab" lineColor='#1773ff' lineWidth='40'
+										activeStyle="font-weight:bold"></u-tabs>
+								</view>
+								<view class="justify-start align-center mtb28" v-for="(items,index) in rankListA"
+									:key="index">
+									<u-avatar :src="items.avatar" size="40"></u-avatar>
+									<view class="flex-1 ml20">
+										<view class="justify-between mb16">
+											<view class="base-color-3 single-line-ellipsis">{{items.userName}}</view>
+											<view v-if="activeA==1">{{items.completeRate}}%</view>
+											<view v-else>{{items.answerRightRate}}%</view>
+										</view>
+										<u-line-progress :percentage="activeA==1?items.completeRate:items.answerRightRate" activeColor='#ed0922' />
+									</view>
+								</view>
+								<view v-if="rankListA.length==0" class="center mtb32">暂无数据</view>
+							</view> -->
+							<view class="mt60 column flex-1">
+								<view class="justify-between align-center">
+									<view class="base-color-3 bold fs32">课程排行榜</view>
+									<view class="justify-start" @click="ordergroupB(1)" v-if="orderGroupB=='asc'">
+										<u-icon name="list-dot" size="20"></u-icon>
+										<view>按正序(前20名)</view>
+									</view>
+									<view class="justify-start" @click="ordergroupB(0)" v-else>
+										<u-icon name="list-dot" size="20"></u-icon>
+										<view>按倒序(后20名)</view>
+									</view>
+								</view>
+								<view class="centerV">
+									<u-tabs :list="list1" @click="clickTabB" lineColor='#1773ff' lineWidth='40'
+										activeStyle="font-weight:bold"></u-tabs>
+								</view>
+								<view class="justify-start align-center" style="height: fit-content;" v-for="(item,index) in rankListB" :key="index">
+									<view class="flex-1 ml20">
+										<view class="justify-between mb16">
+											<view class="base-color-3 single-line-ellipsis">{{item.videoName}}</view>
+											<view v-if="activeB==1">{{item.completeRate}}%</view>
+											<view v-else>{{item.answerRightRate}}%</view>
+										</view>
+										<u-line-progress :percentage="activeB==1?item.completeRate:item.answerRightRate" activeColor='#ed0922' />
+									</view>
+								</view>
+								<view v-if="rankListB.length==0" class="center mtb32">暂无数据</view>
+							</view>
+						</view>
+					</u-collapse-item>
+				</u-collapse>
+			</view>
+		</view>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
+		:loading-text="loadingtext"></u-loading-page>
+	</view>
+</template>
+
+<script>
+	import {
+		getFsCourseList,
+		getvideolist,
+		getshopCoursenum,
+		getcourseRates,
+		getGroupRanklist,
+		getCourseRanklist
+	} from "@/api/manageCompany.js"
+	import dropdownPanel from "@/pages_manage/components/dropdownPanel.vue"
+	import funnelChart from "@/pages_manage/components/chart.vue"
+	export default {
+		components: {
+			dropdownPanel,
+			funnelChart,
+		},
+		data() {
+			return {
+				viewload:true,
+				loadingtext:"数据加载中...",
+				activeTab: 0,
+				showCalendar: false,
+				user: {},
+				filterData: [{
+						name: '训练营-营期',
+						value: 1,
+					},
+					{
+						name: '课程',
+						value: 2,
+					}
+				],
+				searchbarNav: 0,
+				collapseValue: ['course', 'questions', 'redenvelope', 'live', 'funnel', 'rank'],
+				courseOne: [],
+				courseTwo: [],
+				courseid: '',
+				courseids: '',
+				triggered: false,
+				status: 'loadmore',
+				isEnabled: true,
+				pageNum: 1,
+				pageSize: 10,
+				courselist: [],
+				answerlist: [],
+				getrateimg: {},
+				list1: [{
+					name: '按完播率',
+				}, {
+					name: '按正确率'
+				}],
+				orderGroup: 'asc',
+				orderGroupB: 'asc',
+				rankListA: {},
+				rankListB: {},
+				activeA: 1,
+				activeB: 1,
+				triggereds: false,
+				statusA: 'loadmore',
+				isEnableds: true,
+				pageNums: 1,
+				pageSizes: 10,
+				ratelistState:false
+			}
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
+		async mounted() {
+			// this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
+			this.getCoursestatistics()
+			this.getrateList()
+			this.getrankgroup()
+			await this.getrankCourse()
+			this.$nextTick(() => {
+				setTimeout(()=>{
+					this.$refs?.collapseRef?.init()
+					if(this.courselist!=[]||this.courselist){
+						this.viewload=false
+					}
+				},1000)
+			})
+		},
+		methods: {
+			ordergroup(item) {
+				if (item == 0) {
+					this.orderGroup = 'asc'
+					this.getrankgroup()
+				} else {
+					this.orderGroup = 'desc'
+					this.getrankgroup()
+				}
+			},
+			ordergroupB(item) {
+				if (item == 0) {
+					this.orderGroupB = 'asc'
+					this.getrankCourse()
+				} else {
+					this.orderGroupB = 'desc'
+					this.getrankCourse()
+				}
+			},
+			getrankCourse() {
+				//获取课程排行
+				// console.log(this.orderGroupB)
+				const params = {
+					companyId: this.user.companyId,
+					endTime: '',
+					startTime: '',
+					periodId: this.courseid,
+					videoId: this.courseids,
+					order: this.orderGroupB,
+					type: this.activeB, // 0:经销商/1:群管
+				}
+				getCourseRanklist(params).then(res => {
+					if (res.code == 200) {
+						// console.log(res)
+						this.rankListB = res.data
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getrankgroup() {
+				//获取群管排行
+				const params = {
+					companyId: this.user.companyId,
+					periodId: this.courseid,
+					videoId: this.courseids,
+					order: this.orderGroup,
+					type: this.activeA, // 0:经销商/1:群管
+				}
+				getGroupRanklist(params).then(res => {
+					if (res.code == 200) {
+						// console.log(res)
+						this.rankListA = res.data
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getrateList() {
+				//获取漏斗图
+				const params = {
+					periodId: this.courseid,
+					videoId: this.courseids,
+				}
+				getcourseRates(params).then(res => {
+					if (res.code == 200) {
+						this.ratelistState = res.data.every(item => item.value === 0);
+						this.getrateimg = res
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getCoursestatistics() {
+				//课程统计
+				const params = {
+					periodId: this.courseid,
+					videoId:this.courseids,
+				}
+				getshopCoursenum(params).then(res => {
+					if (res.code == 200) {
+						// console.log(res)
+						this.courselist = 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.getCourseList('refresh') //触底  不穿执行else
+					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+				}, 1000)
+			},
+			reachBottoms() {
+				// status这个是加载状态
+				console.log(111);
+				if (this.statusA === 'loadmore') {
+					this.statusA = 'loading'
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						this.pageNums++
+						this.getCourseList() //触底  不穿执行else
+						uni.hideNavigationBarLoading()
+					}, 1000);
+				}
+			},
+			pullDownRefresh() {
+				// 下拉
+				this.triggered = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggered = false;
+					uni.stopPullDownRefresh()
+					this.pageNum = 1;
+					this.getCourseListsmall('refresh') //触底  不穿执行else
+					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+				}, 1000)
+			},
+			reachBottom() {
+				// status这个是加载状态
+				console.log(111);
+				if (this.status === 'loadmore') {
+					this.status = 'loading'
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						this.pageNum++
+						this.getCourseListsmall() //触底  不穿执行else
+						uni.hideNavigationBarLoading()
+					}, 1000);
+				}
+			},
+			getCourseOne(id) {
+				this.courseid = id
+				
+			},
+			getCourseTwo(id) {
+				this.courseids = id
+			},
+			getCourseList(type) {
+				this.courseOne=[]
+				const param = {
+					pageNum: this.pageNums,
+					pageSize: this.pageSizes,
+				}
+				getFsCourseList(param).then(res => {
+					if (res.code == 200) {
+						if (type == 'refresh') {
+							this.courseOne = res.data.list
+						} else {
+							// 加载更多 当前页和下一页合并
+							this.courseOne = [...this.courseOne, ...res.data.list]
+						}
+						if (res.data.isLastPage) {
+							this.statusA = 'nomore'
+						} else {
+							this.statusA = 'loadmore'
+						}
+						console.log(this.courseOne);
+						// this.courseOne
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getCourseListsmall(type) {
+				const param = {
+					periodId: this.courseid,
+					pageNum: this.pageNum,
+					pageSize: this.pageSize, //
+				}
+				getvideolist(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.pageNum >= res.data.pages) {
+							this.status = 'nomore'
+						} else {
+							this.status = 'loadmore'
+						}
+					} else {
+
+					}
+				})
+			},
+			changeCollapse(e) {
+				this.collapseValue = e.filter(item => item.status == 'open').map(it => it.name)
+			},
+			handleNav(type) {
+				this.activeTab = type
+			},
+			onChange(index) {
+				this.searchbarNav = index
+				if (index == 0) {
+					this.getCourseList()
+				} else {
+					this.pageNum = 1
+					if (this.courseid == 0) {
+						uni.showToast({
+							icon: 'none',
+							title: "请先选择训练营-营期"
+						})
+					} else {
+						this.getCourseListsmall('refresh')
+					}
+				}
+			},
+			confirm() {
+				this.getCoursestatistics()
+				this.getrateList()
+				this.getrankgroup()
+				this.getrankCourse()
+			},
+			reset() {
+				console.log(this.searchbarNav)
+				if (this.searchbarNav == 0) {
+					this.courseid = ''
+				} else {
+					this.courseids = ''
+				}
+				this.getCoursestatistics()
+				this.getrateList()
+				this.getrankgroup()
+				this.getrankCourse()
+			},
+			clickTab(item) {
+				this.activeA = item.index + 1
+				this.getrankgroup()
+				console.log(this.activeA)
+			},
+			clickTabB(item) {
+				this.activeB = item.index + 1
+				this.getrankCourse()
+				console.log(this.activeA)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.headnav {
+		padding: 15px 12px;
+		margin: 0 -10px -10px 0;
+		box-sizing: border-box;
+		background-color: #fff;
+
+		image {
+			height: 60px;
+			width: 50px;
+			position: absolute;
+			z-index: 0;
+			bottom: 0;
+			right: 0;
+			display: none;
+		}
+
+		&-item {
+			flex: 1;
+			font-size: 16px;
+			padding: 10px;
+			border-radius: 10px;
+			background: #f8f8f8;
+			margin: 0 10px 10px 0;
+			position: relative;
+			z-index: 1;
+			overflow: hidden;
+			color: #555;
+		}
+
+		&-active {
+			background-color: rgb(231, 241, 255) !important;
+
+			.headnav-num {
+				color: #1677ff !important;
+			}
+
+			image {
+				display: block !important;
+			}
+		}
+
+		&-num {
+			font-family: DIN, DIN;
+			font-weight: bold;
+			font-size: 25px;
+			margin: 5px 0;
+		}
+	}
+
+	.actNav {
+		color: #1677ff !important;
+		background-color: #e7f2fe;
+	}
+</style>

+ 261 - 0
pages_manage/index.vue

@@ -0,0 +1,261 @@
+<template>
+	<view class="pages_manage flex-1 hb column hidden">
+		<dataIndex v-if="tabact==0"></dataIndex>
+		<courseIndex v-if="tabact==1" @child-data-update='onChildDataUpdate' :parent-method="handleParentMethod"></courseIndex>
+		<memberIndex v-if="tabact==2" @childEvent='chlidpages' style="height: 100%;"></memberIndex> 
+		<UrgeIndex v-if="tabact==3" style="height: 100%;"></UrgeIndex>
+		<manageIndex v-if="tabact==4" @childsales='chlidSalsepages'></manageIndex>
+		<view class="footbox" >
+			<view @click="tabclick(item)" v-for="(item,index) in listtab" class="column align-center flex-1" :key="index">
+				<image :src="tabact==item.value?item.tabsel:item.tab" class="w50 h50"></image>
+				<view class="fs24" :class="tabact==item.value?'actcolor':'colortab'">{{item.name}}</view>
+			</view>
+		</view>
+		<view style="flex:0">
+			<u-popup :show="showShare" :closeOnClickOverlay="true" :round='20' @close="closeShare" >
+				<view class="sharePop x-ac">
+					<!--#ifdef MP-WEIXIN-->
+					<view class="sharePop-item y-f card-share">
+						<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>
+						<button open-type="share" class="share">分享课程</button>
+						<view  @click="copy" v-if="imgname!='乐氏本源'"
+						class="base-color-6 u-border ptb10 plr30 radius50 mt20">复制页面地址</view>
+					</view>
+					<!--#endif-->
+				</view>
+			</u-popup>
+		</view>
+	</view>
+</template>
+
+<script>
+	import dataIndex from './components/dataIndex.vue'
+	import courseIndex from './components/courseIndex.vue'
+	import memberIndex from './components/memberIndex.vue'
+	import UrgeIndex from './components/UrgeIndex.vue'
+	import manageIndex from './components/manageIndex.vue'
+	import {copyuniLink} from "@/api/manageCompany.js"
+	export default{
+		components:{
+			dataIndex,
+			courseIndex,
+			memberIndex,
+			UrgeIndex,
+			manageIndex
+		},
+		data(){
+			return{
+				showShare:false,
+				tabact:0,
+				childdata:[],
+				vipPages:'',
+				salsepages:'',
+				// appid:this.$store.state.appid
+				listtab:[
+					{
+					name:'数据',
+					value:0,
+					tab:require("@/static/manageTabIcon/data.png"),
+					tabsel:require('@/static/manageTabIcon/data_on.png')
+					},
+					{
+					name:'课程库',
+					value:1,
+					tab:require('@/static/manageTabIcon/liveclasses.png'),
+					tabsel:require('@/static/manageTabIcon/liveclasses_on.png')
+					},
+					{
+					name:'会员',
+					value:2,
+					tab:require('@/static/manageTabIcon/vip.png'),
+					tabsel:require('@/static/manageTabIcon/vip_on.png')
+					},
+					{
+					name:'催课',
+					value:3,
+					tab:require('@/static/manageTabIcon/training.png'),
+					tabsel:require('@/static/manageTabIcon/training_on.png')
+					},
+					{
+					name:'管理',
+					value:4,
+					tab:require('@/static/manageTabIcon/manage.png'),
+					tabsel:require('@/static/manageTabIcon/manage_on.png')
+					}
+				],
+				companyUserInfo:JSON.parse(uni.getStorageSync('companyUserInfo')) 
+			}
+		},
+		computed: {
+			appid() {
+				return this.$store.state.appid
+			},
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
+		onShareAppMessage() {
+			if(this.tabact==1){
+				return {
+					title: this.childdata.title, // 分享卡片标题
+					path: this.childdata.path + "?course=" + JSON.stringify(this.childdata.params), // 目标页面路径
+					// 携带参数:将当前页面的数据拼接到路径中
+					imageUrl: this.childdata.img, // 分享卡片封面图(可选)
+					success: (res) => {
+						console.log("分享成功", res);
+					},
+					fail: (err) => {
+						console.log("分享失败", err);
+					},
+				}
+			}
+			if(this.tabact==2){
+				return {
+					title:this.$store.state.logoname+'小程序的'+this.companyUserInfo.nickName + '邀请您成为会员!',
+					path: this.vipPages,
+					imageUrl: this.imgPath+'/app/image/logoshare.png',
+				}
+			}
+			if(this.tabact==4){
+				return {
+					title:this.$store.state.logoname+'小程序的'+this.companyUserInfo.nickName + '邀请您成为销售!',
+					path: this.salsepages,
+					imageUrl: this.imgPath+'/app/image/logoshare.png',
+				}
+			}
+		},
+		onLoad(option) {
+			this.tabact=option.act?option.act:0
+		},
+		methods:{
+			copy(){
+				console.log("hhh")
+				uni.showLoading({
+					title: "处理中..."
+				});
+				const data={
+					appid:this.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,
+								// data:  this.childdata.path + "?course=" + JSON.stringify(this.childdata.params),
+								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'
+						});
+					}
+				})
+				
+			},
+			chlidpages(e){
+				this.vipPages=e
+			},
+			chlidSalsepages(e){
+				console.log('父组件',e)
+				this.salsepages=e
+			},
+			closeShare() {
+				this.showShare = false
+				// console.log('open');
+			},
+			handleParentMethod() {
+			},
+			onChildDataUpdate(data) {
+				this.childdata = data
+				this.showShare = this.childdata.onshow
+				console.log(this.childdata);
+				console.log('父组件', this.childdata.path + "?course=" +JSON.stringify(this.childdata.params) )
+			},
+			tabclick(item){
+				this.tabact=item.value
+				 uni.setNavigationBarTitle({
+				      title: item.name
+				    });
+			}
+		}
+	}
+	
+</script>
+
+<style lang="scss" scoped>
+	.colortab{
+		color: #7e7e7e;
+	}
+	.actcolor{
+		color: #1773ff;
+	}
+	.footbox{
+		position: fixed;
+		bottom: 0;
+		width: 100%;
+		background-color: #fff;
+		display: flex;
+		justify-content: space-around;
+		padding-bottom: 40rpx ;
+		padding-top: 20rpx;
+	}
+	.card-share{
+		position: relative;
+	}
+	.share{
+			display: inline-block;
+			position: absolute;
+			top: 0;
+			left: 0;
+			width: 100%;
+			height: 80%;
+			opacity: 0;
+		}
+	.sharePop {
+		background-color: #fff;
+		padding: 30rpx 0;
+		border-radius: 20px 20px 0 0;
+		/* #ifdef MP-WEIXIN */
+		/* #endif */
+	
+		/* #ifdef H5 */
+		padding-bottom: 60px;
+	
+		/* #endif */
+		&-item {
+			padding: 0 10px;
+			box-sizing: border-box;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+	
+			display: inline-flex !important;
+	
+			image {
+				height: 48px;
+				width: 48px;
+				margin-bottom: 10px;
+			}
+		}
+	}
+</style>

+ 283 - 0
pages_manage/learn.vue

@@ -0,0 +1,283 @@
+<template>
+	<view class="container">
+		<view class="top">
+			<image class="bg" src="/static/assets/learn-bg.png" mode="widthFix"></image>
+			<view class="top-box">
+				<view class="title">《健康生活方式指导》</view>
+				<view class="txt">
+					<image src="/static/assets/learn1.png"></image>
+					<text>共5节课</text>
+				</view>
+			</view>
+		</view>
+		<view class="container-body">
+			<view class="center-box">
+				<u-tabs lineColor="#f56c6c" :scrollable="false"
+					:activeStyle="{color: '#fd694f',fontWeight: 'bold',fontSize:'34rpx'}"
+					:inactiveStyle="{color: '#787878',fontSize:'34rpx'}" :list="tabList" @click="ontabList">
+				</u-tabs>
+				<view class="progress-box">
+					<image src="/static/assets/learn2.png"></image>
+					<text class="title">听课进度</text>
+					<text class="txt">已学习<text style="color: #f74d3a;">0</text>/5节课</text>
+				</view>
+				<view class="progress">
+					<u-line-progress inactiveColor="#f0f4f7" activeColor="#3c9cff" :percentage="0"
+						:showText="false"></u-line-progress>
+					<text>0%</text>
+				</view>
+			</view>
+
+			<!-- <view class="list">
+				<view class="img-box">
+					<view class="sub">第一课</view>
+					<image src="/static/assets/learn-img.png"></image>
+				</view>
+				<view class="right">
+					<view class="title">第一课 如何防控烦人的慢性病</view>
+					<view class="bottom">
+						<view class="tip">
+							<image src="/static/assets/learn3.png" mode="widthFix"></image>
+							<text>答题送金币+200</text>
+						</view>
+						<view class="btn">已学习4%</view>
+					</view>
+				</view>
+			</view> -->
+
+			<view class="list" v-for="(item,index) in learnList" :key="index">
+				<view class="img-box">
+					<view class="sub">第一课</view>
+					<image src="/static/assets/learn-img.png"></image>
+				</view>
+				<view class="right">
+					<view class="title">{{item.title}}</view>
+					<view class="bottom">
+						<view class="tip">
+							<image :src="item.img" mode="widthFix"></image>
+							<text>答题送金币+200</text>
+						</view>
+						<view class="btn" v-if="item.stauts==0">已学习4%</view>
+						<view class="btn-red" v-else>去学习</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				tabList: [{
+					name: '详情'
+				}, {
+					name: '课程目录'
+				}],
+				learnList: [{
+					img: '/static/assets/learn3.png',
+					title: '第一课 如何防控烦人的慢性病',
+					stauts: 0
+				},
+				{
+					img: '/static/assets/learn3.png',
+					title: '第一课 如何防控烦人的慢性病',
+					stauts: 1
+				}]
+			}
+		},
+		computed: {
+
+		},
+		onLoad(option) {
+
+		},
+		methods: {
+			ontabList() {
+				// this.stauts = 0
+			}
+			// goLearn() {
+			// 	uni.navigateTo({
+			// 		url: '/pages_manage/learn'
+			// 	})
+			// },
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 30rpx;
+		background-color: #f0f4f7;
+
+		.top {
+			position: relative;
+
+			.bg {
+				width: 100%;
+			}
+
+			.top-box {
+				position: absolute;
+				bottom: -90rpx;
+				width: 100%;
+				padding: 30rpx;
+				background: linear-gradient(to bottom,
+						rgba(255, 255, 255, 0.5) 0%,
+						rgba(255, 255, 255, 0.9) 20%,
+						rgba(255, 255, 255, 1) 100%);
+				border-radius: 16rpx;
+
+				.title {
+					font-size: 34rpx;
+				}
+
+				.txt {
+					margin-top: 20rpx;
+					display: flex;
+					align-items: center;
+
+					image {
+						width: 36rpx;
+						height: 36rpx;
+						margin: 0 8rpx;
+					}
+
+					text {
+						font-size: 28rpx;
+						color: #595959;
+					}
+				}
+			}
+		}
+
+		.container-body {
+			margin-top: 110rpx;
+			padding: 0 24rpx;
+
+			.center-box {
+				background-color: #ffffff;
+				padding: 10rpx 24rpx 50rpx;
+				border-radius: 16rpx;
+
+				.progress-box {
+					display: flex;
+					align-items: center;
+					margin: 50rpx 0 30rpx;
+
+					image {
+						width: 38rpx;
+						height: 38rpx;
+					}
+
+					.title {
+						margin: 0 10rpx 0 4rpx;
+						font-size: 34rpx;
+					}
+
+					.txt {
+						font-size: 28rpx;
+						color: #595959;
+					}
+				}
+
+				.progress {
+					display: flex;
+					align-items: center;
+
+					text {
+						font-size: 26rpx;
+						margin-left: 12rpx;
+					}
+				}
+			}
+
+			.list {
+				padding: 20rpx;
+				background-color: #ffffff;
+				border-radius: 16rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				box-sizing: border-box;
+				margin-top: 20rpx;
+
+				.img-box {
+					width: 240rpx;
+					height: 150rpx;
+					border-radius: 16rpx;
+					overflow: hidden;
+					position: relative;
+
+					.sub {
+						background-color: rgba(0, 0, 0, 0.8);
+						padding: 4rpx 16rpx;
+						color: #ffffff;
+						position: absolute;
+						top: 0;
+						left: 0;
+						font-size: 24rpx;
+						border-radius: 8rpx;
+					}
+
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+
+				.right {
+					height: 150rpx;
+					margin-left: 20rpx;
+					flex: 1;
+					display: flex;
+					flex-direction: column;
+					justify-content: space-between;
+
+					.title {
+						font-size: 30rpx;
+						font-weight: 500;
+					}
+
+					.bottom {
+						display: flex;
+						// flex-direction: column;
+						justify-content: space-between;
+						align-items: center;
+						font-size: 26rpx;
+
+						.tip {
+							background: linear-gradient(to right, #fcecd0, #ffffff);
+							padding: 8rpx 12rpx;
+							border-radius: 22rpx;
+							color: #f2931d;
+
+							image {
+								width: 36rpx;
+								height: 36rpx;
+								margin-right: 4rpx;
+							}
+
+							text {}
+						}
+
+						.btn {
+							background-color: #fdf0e7;
+							padding: 8rpx 16rpx;
+							color: #f38600;
+							border-radius: 12rpx;
+						}
+						.btn-red{
+							background-color:#ff512f;
+							padding: 8rpx 18rpx;
+							color: #ffffff;
+							border-radius: 12rpx;
+						}
+					}
+				}
+
+			}
+		}
+	}
+</style>

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff